diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 000000000..7f4039236 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 1b703999c941ca67c208df6311953d47 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/api-references/dagor-dshl/index.doctree b/.doctrees/api-references/dagor-dshl/index.doctree new file mode 100644 index 000000000..fda53618e Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/basic-concepts.doctree b/.doctrees/api-references/dagor-dshl/index/basic-concepts.doctree new file mode 100644 index 000000000..339fa8d93 Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/basic-concepts.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/basic-concepts/conditionals.doctree b/.doctrees/api-references/dagor-dshl/index/basic-concepts/conditionals.doctree new file mode 100644 index 000000000..423018ac1 Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/basic-concepts/conditionals.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/basic-concepts/data-types.doctree b/.doctrees/api-references/dagor-dshl/index/basic-concepts/data-types.doctree new file mode 100644 index 000000000..a208e0a17 Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/basic-concepts/data-types.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/basic-concepts/error.doctree b/.doctrees/api-references/dagor-dshl/index/basic-concepts/error.doctree new file mode 100644 index 000000000..84688992e Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/basic-concepts/error.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/basic-concepts/hardware.doctree b/.doctrees/api-references/dagor-dshl/index/basic-concepts/hardware.doctree new file mode 100644 index 000000000..ef93c0299 Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/basic-concepts/hardware.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/basic-concepts/includes.doctree b/.doctrees/api-references/dagor-dshl/index/basic-concepts/includes.doctree new file mode 100644 index 000000000..5cb317538 Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/basic-concepts/includes.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/basic-concepts/intervals.doctree b/.doctrees/api-references/dagor-dshl/index/basic-concepts/intervals.doctree new file mode 100644 index 000000000..d45215f8f Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/basic-concepts/intervals.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/basic-concepts/macros.doctree b/.doctrees/api-references/dagor-dshl/index/basic-concepts/macros.doctree new file mode 100644 index 000000000..fb8b910fe Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/basic-concepts/macros.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/channels.doctree b/.doctrees/api-references/dagor-dshl/index/channels.doctree new file mode 100644 index 000000000..8963692bf Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/channels.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/directives.doctree b/.doctrees/api-references/dagor-dshl/index/directives.doctree new file mode 100644 index 000000000..7f08241cd Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/directives.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/global-constants.doctree b/.doctrees/api-references/dagor-dshl/index/global-constants.doctree new file mode 100644 index 000000000..73c291ad4 Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/global-constants.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/intrinsics.doctree b/.doctrees/api-references/dagor-dshl/index/intrinsics.doctree new file mode 100644 index 000000000..cb4c974a4 Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/intrinsics.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/introduction.doctree b/.doctrees/api-references/dagor-dshl/index/introduction.doctree new file mode 100644 index 000000000..3616f0ef9 Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/introduction.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/keywords.doctree b/.doctrees/api-references/dagor-dshl/index/keywords.doctree new file mode 100644 index 000000000..ca1bd6042 Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/keywords.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/materials.doctree b/.doctrees/api-references/dagor-dshl/index/materials.doctree new file mode 100644 index 000000000..5aebacfe6 Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/materials.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/pipeline-states.doctree b/.doctrees/api-references/dagor-dshl/index/pipeline-states.doctree new file mode 100644 index 000000000..3d4eaaa74 Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/pipeline-states.doctree differ diff --git a/.doctrees/api-references/dagor-dshl/index/shaders.doctree b/.doctrees/api-references/dagor-dshl/index/shaders.doctree new file mode 100644 index 000000000..87fa88334 Binary files /dev/null and b/.doctrees/api-references/dagor-dshl/index/shaders.doctree differ diff --git a/.doctrees/api-references/dagor-ecs/dagor_ecs.doctree b/.doctrees/api-references/dagor-ecs/dagor_ecs.doctree new file mode 100644 index 000000000..ebb923caf Binary files /dev/null and b/.doctrees/api-references/dagor-ecs/dagor_ecs.doctree differ diff --git a/.doctrees/api-references/dagor-ecs/index.doctree b/.doctrees/api-references/dagor-ecs/index.doctree new file mode 100644 index 000000000..fc2115d19 Binary files /dev/null and b/.doctrees/api-references/dagor-ecs/index.doctree differ diff --git a/.doctrees/api-references/dagor-ecs/schemeful_events.doctree b/.doctrees/api-references/dagor-ecs/schemeful_events.doctree new file mode 100644 index 000000000..ea1e96c97 Binary files /dev/null and b/.doctrees/api-references/dagor-ecs/schemeful_events.doctree differ diff --git a/.doctrees/api-references/dagor-engine-docs/index.doctree b/.doctrees/api-references/dagor-engine-docs/index.doctree new file mode 100644 index 000000000..f5125f6c5 Binary files /dev/null and b/.doctrees/api-references/dagor-engine-docs/index.doctree differ diff --git a/.doctrees/api-references/dagor-engine-docs/picture_image/Image.doctree b/.doctrees/api-references/dagor-engine-docs/picture_image/Image.doctree new file mode 100644 index 000000000..2a0da0bd8 Binary files /dev/null and b/.doctrees/api-references/dagor-engine-docs/picture_image/Image.doctree differ diff --git a/.doctrees/api-references/dagor-engine-docs/picture_image/PictureManager.doctree b/.doctrees/api-references/dagor-engine-docs/picture_image/PictureManager.doctree new file mode 100644 index 000000000..2cce8bfc1 Binary files /dev/null and b/.doctrees/api-references/dagor-engine-docs/picture_image/PictureManager.doctree differ diff --git a/.doctrees/api-references/dagor-engine-docs/picture_image/index.doctree b/.doctrees/api-references/dagor-engine-docs/picture_image/index.doctree new file mode 100644 index 000000000..18280eed4 Binary files /dev/null and b/.doctrees/api-references/dagor-engine-docs/picture_image/index.doctree differ diff --git a/.doctrees/api-references/dagor-render/index.doctree b/.doctrees/api-references/dagor-render/index.doctree new file mode 100644 index 000000000..c30475273 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI.doctree new file mode 100644 index 000000000..4e25441eb Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/Barrier.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/Barrier.doctree new file mode 100644 index 000000000..09bf0cca1 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/Barrier.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/Bindless.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/Bindless.doctree new file mode 100644 index 000000000..35e136485 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/Bindless.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/Buffers.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/Buffers.doctree new file mode 100644 index 000000000..bc47e27a0 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/Buffers.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/Command.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/Command.doctree new file mode 100644 index 000000000..b9dbfac3f Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/Command.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/Dispatch.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/Dispatch.doctree new file mode 100644 index 000000000..1eb2551e7 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/Dispatch.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/DispatchMesh.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/DispatchMesh.doctree new file mode 100644 index 000000000..d5cb7564c Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/DispatchMesh.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/Draw.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/Draw.doctree new file mode 100644 index 000000000..c039b3356 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/Draw.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/Heap.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/Heap.doctree new file mode 100644 index 000000000..b3d802cde Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/Heap.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/Info.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/Info.doctree new file mode 100644 index 000000000..9e81dd885 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/Info.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/Lock.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/Lock.doctree new file mode 100644 index 000000000..eb47b869c Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/Lock.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/MatricesAndPerspective.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/MatricesAndPerspective.doctree new file mode 100644 index 000000000..cb3a0db1e Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/MatricesAndPerspective.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/Query.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/Query.doctree new file mode 100644 index 000000000..31dcaed53 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/Query.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/RenderPass.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/RenderPass.doctree new file mode 100644 index 000000000..870a49d64 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/RenderPass.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/RenderState.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/RenderState.doctree new file mode 100644 index 000000000..5715af817 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/RenderState.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/RenderTarget.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/RenderTarget.doctree new file mode 100644 index 000000000..625d0cadf Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/RenderTarget.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/ResUpdateBuffer.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/ResUpdateBuffer.doctree new file mode 100644 index 000000000..600d91f01 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/ResUpdateBuffer.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/Resource.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/Resource.doctree new file mode 100644 index 000000000..5992a27fe Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/Resource.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/RwResource.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/RwResource.doctree new file mode 100644 index 000000000..495e917ad Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/RwResource.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/Sampler.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/Sampler.doctree new file mode 100644 index 000000000..21469a8d2 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/Sampler.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/Shader.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/Shader.doctree new file mode 100644 index 000000000..51808ba73 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/Shader.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/ShaderConstants.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/ShaderConstants.doctree new file mode 100644 index 000000000..fdac28131 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/ShaderConstants.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/TiledResource.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/TiledResource.doctree new file mode 100644 index 000000000..1fdfb997d Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/TiledResource.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/VariableRateShading.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/VariableRateShading.doctree new file mode 100644 index 000000000..e211baadc Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/VariableRateShading.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/VertexIndexBuffer.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/VertexIndexBuffer.doctree new file mode 100644 index 000000000..df8de8409 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/VertexIndexBuffer.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/ViewScissor.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/ViewScissor.doctree new file mode 100644 index 000000000..acd8f1895 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/ViewScissor.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/constants.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/constants.doctree new file mode 100644 index 000000000..e61e963e0 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/constants.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/other.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/other.doctree new file mode 100644 index 000000000..1e463d1a7 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/other.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dAPI/textures.doctree b/.doctrees/api-references/dagor-render/index/d3dAPI/textures.doctree new file mode 100644 index 000000000..44bd11292 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dAPI/textures.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dHelpers.doctree b/.doctrees/api-references/dagor-render/index/d3dHelpers.doctree new file mode 100644 index 000000000..73a03bb39 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dHelpers.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/d3dHelpers/multidrawContext.doctree b/.doctrees/api-references/dagor-render/index/d3dHelpers/multidrawContext.doctree new file mode 100644 index 000000000..122a9437b Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/d3dHelpers/multidrawContext.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/daBFG.doctree b/.doctrees/api-references/dagor-render/index/daBFG.doctree new file mode 100644 index 000000000..2ce7d4f03 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/daBFG.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/daBFG/bfg_ecs.doctree b/.doctrees/api-references/dagor-render/index/daBFG/bfg_ecs.doctree new file mode 100644 index 000000000..44b9b10e5 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/daBFG/bfg_ecs.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/daBFG/core.doctree b/.doctrees/api-references/dagor-render/index/daBFG/core.doctree new file mode 100644 index 000000000..6b9f6a8ca Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/daBFG/core.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/daBFG/daBfgCore.doctree b/.doctrees/api-references/dagor-render/index/daBFG/daBfgCore.doctree new file mode 100644 index 000000000..795f1d31a Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/daBFG/daBfgCore.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/daBFG/das.doctree b/.doctrees/api-references/dagor-render/index/daBFG/das.doctree new file mode 100644 index 000000000..faf60c0a3 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/daBFG/das.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/daBFG/declaringNodes.doctree b/.doctrees/api-references/dagor-render/index/daBFG/declaringNodes.doctree new file mode 100644 index 000000000..dddbe9a21 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/daBFG/declaringNodes.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/daBFG/graphState.doctree b/.doctrees/api-references/dagor-render/index/daBFG/graphState.doctree new file mode 100644 index 000000000..644983b7e Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/daBFG/graphState.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/daBFG/runtime.doctree b/.doctrees/api-references/dagor-render/index/daBFG/runtime.doctree new file mode 100644 index 000000000..16e12cec5 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/daBFG/runtime.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/resMgr.doctree b/.doctrees/api-references/dagor-render/index/resMgr.doctree new file mode 100644 index 000000000..d5cb122d5 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/resMgr.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/resMgr/general.doctree b/.doctrees/api-references/dagor-render/index/resMgr/general.doctree new file mode 100644 index 000000000..8030931f9 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/resMgr/general.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/resMgr/resid.doctree b/.doctrees/api-references/dagor-render/index/resMgr/resid.doctree new file mode 100644 index 000000000..1fcd37806 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/resMgr/resid.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/resMgr/textures.doctree b/.doctrees/api-references/dagor-render/index/resMgr/textures.doctree new file mode 100644 index 000000000..d3ae6f3a6 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/resMgr/textures.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/resourceSlot.doctree b/.doctrees/api-references/dagor-render/index/resourceSlot.doctree new file mode 100644 index 000000000..8f3e873f7 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/resourceSlot.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/resourceSlot/ResourceSlotCore.doctree b/.doctrees/api-references/dagor-render/index/resourceSlot/ResourceSlotCore.doctree new file mode 100644 index 000000000..4853772a2 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/resourceSlot/ResourceSlotCore.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/resourceSlot/nodeHandleWithSlotsAccess.doctree b/.doctrees/api-references/dagor-render/index/resourceSlot/nodeHandleWithSlotsAccess.doctree new file mode 100644 index 000000000..70c68ecb9 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/resourceSlot/nodeHandleWithSlotsAccess.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/resourceSlot/registerAccess.doctree b/.doctrees/api-references/dagor-render/index/resourceSlot/registerAccess.doctree new file mode 100644 index 000000000..a9aa55d02 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/resourceSlot/registerAccess.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/resourceSlot/resolveAccess.doctree b/.doctrees/api-references/dagor-render/index/resourceSlot/resolveAccess.doctree new file mode 100644 index 000000000..9c945a8ee Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/resourceSlot/resolveAccess.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/resourceSlot/resource_slot_das.doctree b/.doctrees/api-references/dagor-render/index/resourceSlot/resource_slot_das.doctree new file mode 100644 index 000000000..5907c2734 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/resourceSlot/resource_slot_das.doctree differ diff --git a/.doctrees/api-references/dagor-render/index/resourceSlot/resource_slot_ecs.doctree b/.doctrees/api-references/dagor-render/index/resourceSlot/resource_slot_ecs.doctree new file mode 100644 index 000000000..6d8681f61 Binary files /dev/null and b/.doctrees/api-references/dagor-render/index/resourceSlot/resource_slot_ecs.doctree differ diff --git a/.doctrees/api-references/index.doctree b/.doctrees/api-references/index.doctree new file mode 100644 index 000000000..d507444df Binary files /dev/null and b/.doctrees/api-references/index.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/dargbox/gamelib.input.doctree b/.doctrees/api-references/quirrel-modules/dargbox/gamelib.input.doctree new file mode 100644 index 000000000..ac9cc9af5 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/dargbox/gamelib.input.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/dargbox/index.doctree b/.doctrees/api-references/quirrel-modules/dargbox/index.doctree new file mode 100644 index 000000000..3f1d5018d Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/dargbox/index.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/index.doctree b/.doctrees/api-references/quirrel-modules/index.doctree new file mode 100644 index 000000000..6807e4f6c Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/index.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/control.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/control.doctree new file mode 100644 index 000000000..4dfab4566 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/control.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/index.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/index.doctree new file mode 100644 index 000000000..9d33e8f8a Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/index.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/net.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/net.doctree new file mode 100644 index 000000000..1d725743b Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/net.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/settings.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/settings.doctree new file mode 100644 index 000000000..f21035f3e Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/settings.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/videomode.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/videomode.doctree new file mode 100644 index 000000000..6ecfa28b8 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGame/videomode.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/gpuBenchmark.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/gpuBenchmark.doctree new file mode 100644 index 000000000..6220bc7db Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/gpuBenchmark.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/index.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/index.doctree new file mode 100644 index 000000000..214238a8e Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/index.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.debug.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.debug.doctree new file mode 100644 index 000000000..5d5306809 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.debug.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.doctree new file mode 100644 index 000000000..eaa4efadb Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/darg_framework/index.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/darg_framework/index.doctree new file mode 100644 index 000000000..e12e2d097 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/darg_framework/index.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/darg_framework/renderCanvas.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/darg_framework/renderCanvas.doctree new file mode 100644 index 000000000..339e18169 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/darg_framework/renderCanvas.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.doctree new file mode 100644 index 000000000..cb066b3cd Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.netevent.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.netevent.doctree new file mode 100644 index 000000000..98b556dff Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.netevent.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/index.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/index.doctree new file mode 100644 index 000000000..b397bbb76 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/index.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/net.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/net.doctree new file mode 100644 index 000000000..7fcef3226 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/net.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/DataBlock.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/DataBlock.doctree new file mode 100644 index 000000000..0cd862d2a Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/DataBlock.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/base64.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/base64.doctree new file mode 100644 index 000000000..94c248d89 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/base64.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/browser.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/browser.doctree new file mode 100644 index 000000000..b8ddb510d Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/browser.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/console.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/console.doctree new file mode 100644 index 000000000..3fcb6dd21 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/console.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daEditorEmbedded.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daEditorEmbedded.doctree new file mode 100644 index 000000000..a4ff7b72c Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daEditorEmbedded.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.debug.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.debug.doctree new file mode 100644 index 000000000..b14d4606b Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.debug.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.doctree new file mode 100644 index 000000000..1b1d9c507 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dacoll.trace.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dacoll.trace.doctree new file mode 100644 index 000000000..8e8e227fe Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dacoll.trace.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.clipboard.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.clipboard.doctree new file mode 100644 index 000000000..ee0e78c2f Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.clipboard.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.debug.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.debug.doctree new file mode 100644 index 000000000..af1c98dea Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.debug.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.folders.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.folders.doctree new file mode 100644 index 000000000..084331e85 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.folders.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.doctree new file mode 100644 index 000000000..3a6179150 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.vrom.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.vrom.doctree new file mode 100644 index 000000000..3fd8e4880 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.vrom.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.http.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.http.doctree new file mode 100644 index 000000000..269f4586a Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.http.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.iso8601.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.iso8601.doctree new file mode 100644 index 000000000..f14e7f4c5 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.iso8601.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.localize.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.localize.doctree new file mode 100644 index 000000000..7ca7deebc Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.localize.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.math.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.math.doctree new file mode 100644 index 000000000..4fc3611e4 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.math.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.memtrace.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.memtrace.doctree new file mode 100644 index 000000000..e2adc611d Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.memtrace.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.perf.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.perf.doctree new file mode 100644 index 000000000..e8db21c0c Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.perf.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.profiler.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.profiler.doctree new file mode 100644 index 000000000..a962c34d6 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.profiler.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.random.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.random.doctree new file mode 100644 index 000000000..4a5f7c794 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.random.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.shell.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.shell.doctree new file mode 100644 index 000000000..90f1e9590 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.shell.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.doctree new file mode 100644 index 000000000..69ea120b3 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.file_handlers.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.file_handlers.doctree new file mode 100644 index 000000000..7a1315f64 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.file_handlers.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.time.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.time.doctree new file mode 100644 index 000000000..3b3e78e63 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.time.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.workcycle.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.workcycle.doctree new file mode 100644 index 000000000..59503543e Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.workcycle.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dainput2.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dainput2.doctree new file mode 100644 index 000000000..cc4d67cb0 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dainput2.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dasevents.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dasevents.doctree new file mode 100644 index 000000000..9c83e15d4 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dasevents.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/datacache.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/datacache.doctree new file mode 100644 index 000000000..7dd871ed2 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/datacache.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.doctree new file mode 100644 index 000000000..82fbbe961 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.netevent.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.netevent.doctree new file mode 100644 index 000000000..6e3936fb4 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.netevent.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/entity_editor.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/entity_editor.doctree new file mode 100644 index 000000000..dc4f4e5f6 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/entity_editor.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/eventbus.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/eventbus.doctree new file mode 100644 index 000000000..1556779d3 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/eventbus.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/executable.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/executable.doctree new file mode 100644 index 000000000..b2781ac85 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/executable.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/frp.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/frp.doctree new file mode 100644 index 000000000..882b2202f Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/frp.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/hash.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/hash.doctree new file mode 100644 index 000000000..ef4021efb Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/hash.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/index.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/index.doctree new file mode 100644 index 000000000..2d8f3e7ea Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/index.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/json.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/json.doctree new file mode 100644 index 000000000..b8d3ab3f2 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/json.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/jwt.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/jwt.doctree new file mode 100644 index 000000000..570f4c6e9 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/jwt.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/modules.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/modules.doctree new file mode 100644 index 000000000..c3ff86230 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/modules.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/nestdb.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/nestdb.doctree new file mode 100644 index 000000000..fd0694115 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/nestdb.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/net.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/net.doctree new file mode 100644 index 000000000..17b1a609d Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/net.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/pathfinder.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/pathfinder.doctree new file mode 100644 index 000000000..b07b67af0 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/pathfinder.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/platform.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/platform.doctree new file mode 100644 index 000000000..e0f1b81a1 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/platform.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/regexp2.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/regexp2.doctree new file mode 100644 index 000000000..98d791cff Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/regexp2.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/renderCanvas.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/renderCanvas.doctree new file mode 100644 index 000000000..db3bbb77c Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/renderCanvas.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sound.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sound.doctree new file mode 100644 index 000000000..cd9ba30a8 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sound.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/statsd.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/statsd.doctree new file mode 100644 index 000000000..183ab9ad0 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/statsd.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sysinfo.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sysinfo.doctree new file mode 100644 index 000000000..c748bfc26 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sysinfo.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/utf8.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/utf8.doctree new file mode 100644 index 000000000..16268d73f Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/utf8.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/win.registry.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/win.registry.doctree new file mode 100644 index 000000000..de549fe1b Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/win.registry.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/yupfile_parse.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/yupfile_parse.doctree new file mode 100644 index 000000000..e494a408f Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/yupfile_parse.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/soundSystem/index.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/soundSystem/index.doctree new file mode 100644 index 000000000..382103896 Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/soundSystem/index.doctree differ diff --git a/.doctrees/api-references/quirrel-modules/quirrel-modules/soundSystem/sound.doctree b/.doctrees/api-references/quirrel-modules/quirrel-modules/soundSystem/sound.doctree new file mode 100644 index 000000000..9ea75fb0b Binary files /dev/null and b/.doctrees/api-references/quirrel-modules/quirrel-modules/soundSystem/sound.doctree differ diff --git a/.doctrees/assets/about-assets/about_assets.doctree b/.doctrees/assets/about-assets/about_assets.doctree new file mode 100644 index 000000000..bed4ec479 Binary files /dev/null and b/.doctrees/assets/about-assets/about_assets.doctree differ diff --git a/.doctrees/assets/about-assets/how-to-test-assets-on-maps/how_to_test_assets_on_maps.doctree b/.doctrees/assets/about-assets/how-to-test-assets-on-maps/how_to_test_assets_on_maps.doctree new file mode 100644 index 000000000..bc3269267 Binary files /dev/null and b/.doctrees/assets/about-assets/how-to-test-assets-on-maps/how_to_test_assets_on_maps.doctree differ diff --git a/.doctrees/assets/about-assets/how-to-test-assets-on-maps/index.doctree b/.doctrees/assets/about-assets/how-to-test-assets-on-maps/index.doctree new file mode 100644 index 000000000..a896afa0b Binary files /dev/null and b/.doctrees/assets/about-assets/how-to-test-assets-on-maps/index.doctree differ diff --git a/.doctrees/assets/about-assets/index.doctree b/.doctrees/assets/about-assets/index.doctree new file mode 100644 index 000000000..9af73d2a3 Binary files /dev/null and b/.doctrees/assets/about-assets/index.doctree differ diff --git a/.doctrees/assets/about-assets/ladders/climbable_ladders.doctree b/.doctrees/assets/about-assets/ladders/climbable_ladders.doctree new file mode 100644 index 000000000..49f6b3201 Binary files /dev/null and b/.doctrees/assets/about-assets/ladders/climbable_ladders.doctree differ diff --git a/.doctrees/assets/about-assets/ladders/index.doctree b/.doctrees/assets/about-assets/ladders/index.doctree new file mode 100644 index 000000000..8c8c09398 Binary files /dev/null and b/.doctrees/assets/about-assets/ladders/index.doctree differ diff --git a/.doctrees/assets/about-assets/ladders/navmesh_gen_vert_ladders.doctree b/.doctrees/assets/about-assets/ladders/navmesh_gen_vert_ladders.doctree new file mode 100644 index 000000000..c57b9abba Binary files /dev/null and b/.doctrees/assets/about-assets/ladders/navmesh_gen_vert_ladders.doctree differ diff --git a/.doctrees/assets/about-assets/occluder/index.doctree b/.doctrees/assets/about-assets/occluder/index.doctree new file mode 100644 index 000000000..00d448c2a Binary files /dev/null and b/.doctrees/assets/about-assets/occluder/index.doctree differ diff --git a/.doctrees/assets/about-assets/occluder/occluder_box.doctree b/.doctrees/assets/about-assets/occluder/occluder_box.doctree new file mode 100644 index 000000000..e36af0aad Binary files /dev/null and b/.doctrees/assets/about-assets/occluder/occluder_box.doctree differ diff --git a/.doctrees/assets/all-about-blk/application_blk.doctree b/.doctrees/assets/all-about-blk/application_blk.doctree new file mode 100644 index 000000000..ab42815ba Binary files /dev/null and b/.doctrees/assets/all-about-blk/application_blk.doctree differ diff --git a/.doctrees/assets/all-about-blk/composit_blk.doctree b/.doctrees/assets/all-about-blk/composit_blk.doctree new file mode 100644 index 000000000..0412aeb50 Binary files /dev/null and b/.doctrees/assets/all-about-blk/composit_blk.doctree differ diff --git a/.doctrees/assets/all-about-blk/config_and_settings_blk.doctree b/.doctrees/assets/all-about-blk/config_and_settings_blk.doctree new file mode 100644 index 000000000..3c463dc9f Binary files /dev/null and b/.doctrees/assets/all-about-blk/config_and_settings_blk.doctree differ diff --git a/.doctrees/assets/all-about-blk/folder_blk.doctree b/.doctrees/assets/all-about-blk/folder_blk.doctree new file mode 100644 index 000000000..70d75fd34 Binary files /dev/null and b/.doctrees/assets/all-about-blk/folder_blk.doctree differ diff --git a/.doctrees/assets/all-about-blk/index.doctree b/.doctrees/assets/all-about-blk/index.doctree new file mode 100644 index 000000000..43905b10b Binary files /dev/null and b/.doctrees/assets/all-about-blk/index.doctree differ diff --git a/.doctrees/assets/all-about-blk/skeleton_blk.doctree b/.doctrees/assets/all-about-blk/skeleton_blk.doctree new file mode 100644 index 000000000..ce9448937 Binary files /dev/null and b/.doctrees/assets/all-about-blk/skeleton_blk.doctree differ diff --git a/.doctrees/assets/all-about-blk/spline_blk.doctree b/.doctrees/assets/all-about-blk/spline_blk.doctree new file mode 100644 index 000000000..a04ff91be Binary files /dev/null and b/.doctrees/assets/all-about-blk/spline_blk.doctree differ diff --git a/.doctrees/assets/animations/animation_export.doctree b/.doctrees/assets/animations/animation_export.doctree new file mode 100644 index 000000000..e61d1e553 Binary files /dev/null and b/.doctrees/assets/animations/animation_export.doctree differ diff --git a/.doctrees/assets/animations/index.doctree b/.doctrees/assets/animations/index.doctree new file mode 100644 index 000000000..913430056 Binary files /dev/null and b/.doctrees/assets/animations/index.doctree differ diff --git a/.doctrees/assets/index.doctree b/.doctrees/assets/index.doctree new file mode 100644 index 000000000..3bdc6b10b Binary files /dev/null and b/.doctrees/assets/index.doctree differ diff --git a/.doctrees/assets/lighting/adding_light_fixtures_to_building_composites.doctree b/.doctrees/assets/lighting/adding_light_fixtures_to_building_composites.doctree new file mode 100644 index 000000000..abe87c56a Binary files /dev/null and b/.doctrees/assets/lighting/adding_light_fixtures_to_building_composites.doctree differ diff --git a/.doctrees/assets/lighting/flickering_lights.doctree b/.doctrees/assets/lighting/flickering_lights.doctree new file mode 100644 index 000000000..ec23b1fb4 Binary files /dev/null and b/.doctrees/assets/lighting/flickering_lights.doctree differ diff --git a/.doctrees/assets/lighting/index.doctree b/.doctrees/assets/lighting/index.doctree new file mode 100644 index 000000000..5cada588d Binary files /dev/null and b/.doctrees/assets/lighting/index.doctree differ diff --git a/.doctrees/assets/lighting/lighting_catalog.doctree b/.doctrees/assets/lighting/lighting_catalog.doctree new file mode 100644 index 000000000..1cddc3c79 Binary files /dev/null and b/.doctrees/assets/lighting/lighting_catalog.doctree differ diff --git a/.doctrees/assets/lighting/lights.doctree b/.doctrees/assets/lighting/lights.doctree new file mode 100644 index 000000000..563e60e0a Binary files /dev/null and b/.doctrees/assets/lighting/lights.doctree differ diff --git a/.doctrees/assets/lighting/lights_creation_guide.doctree b/.doctrees/assets/lighting/lights_creation_guide.doctree new file mode 100644 index 000000000..b418fe836 Binary files /dev/null and b/.doctrees/assets/lighting/lights_creation_guide.doctree differ diff --git a/.doctrees/assets/lighting/photometric_lights.doctree b/.doctrees/assets/lighting/photometric_lights.doctree new file mode 100644 index 000000000..fa263482e Binary files /dev/null and b/.doctrees/assets/lighting/photometric_lights.doctree differ diff --git a/.doctrees/assets/lighting/replacing_or_modifying_lights.doctree b/.doctrees/assets/lighting/replacing_or_modifying_lights.doctree new file mode 100644 index 000000000..4cbc0e33d Binary files /dev/null and b/.doctrees/assets/lighting/replacing_or_modifying_lights.doctree differ diff --git a/.doctrees/assets/materials/index.doctree b/.doctrees/assets/materials/index.doctree new file mode 100644 index 000000000..034cf66bd Binary files /dev/null and b/.doctrees/assets/materials/index.doctree differ diff --git a/.doctrees/assets/materials/proxymats.doctree b/.doctrees/assets/materials/proxymats.doctree new file mode 100644 index 000000000..9f756f31a Binary files /dev/null and b/.doctrees/assets/materials/proxymats.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/dynamic_painted_by_mask.doctree b/.doctrees/assets/shaders/dng-shaders/dynamic_painted_by_mask.doctree new file mode 100644 index 000000000..7e3f7e088 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/dynamic_painted_by_mask.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/index.doctree b/.doctrees/assets/shaders/dng-shaders/index.doctree new file mode 100644 index 000000000..fe19e8126 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/index.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/land_mesh_height_decal.doctree b/.doctrees/assets/shaders/dng-shaders/land_mesh_height_decal.doctree new file mode 100644 index 000000000..96143fddf Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/land_mesh_height_decal.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_blend_diffuse_decal.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_blend_diffuse_decal.doctree new file mode 100644 index 000000000..51b2cfe86 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_blend_diffuse_decal.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_blend_normal_decal.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_blend_normal_decal.doctree new file mode 100644 index 000000000..8fc3eafe1 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_blend_normal_decal.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_deferred_decal.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_deferred_decal.doctree new file mode 100644 index 000000000..4e4a9c6e0 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_deferred_decal.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_deferred_modulate2x_decal.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_deferred_modulate2x_decal.doctree new file mode 100644 index 000000000..c24272fc9 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_deferred_modulate2x_decal.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_emissive.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_emissive.doctree new file mode 100644 index 000000000..f26e8cc49 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_emissive.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_flag_colored.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_flag_colored.doctree new file mode 100644 index 000000000..553103bd4 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_flag_colored.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_flag_layered.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_flag_layered.doctree new file mode 100644 index 000000000..a1415b5d9 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_flag_layered.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_mask_layered.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_mask_layered.doctree new file mode 100644 index 000000000..f54feb8db Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_mask_layered.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_modulate2x_diffuse_decal.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_modulate2x_diffuse_decal.doctree new file mode 100644 index 000000000..b013b0b76 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_modulate2x_diffuse_decal.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_refraction.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_refraction.doctree new file mode 100644 index 000000000..9025ba6da Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_refraction.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_simple.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_simple.doctree new file mode 100644 index 000000000..df280a26d Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_simple.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_simple_emissive_anim.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_simple_emissive_anim.doctree new file mode 100644 index 000000000..c180405b9 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_simple_emissive_anim.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_simple_glass.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_simple_glass.doctree new file mode 100644 index 000000000..4d9f82d58 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_simple_glass.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_simple_painted.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_simple_painted.doctree new file mode 100644 index 000000000..596c50032 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_simple_painted.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_tree_colored.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_tree_colored.doctree new file mode 100644 index 000000000..87396f01e Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_tree_colored.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_tree_perlin_layered.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_tree_perlin_layered.doctree new file mode 100644 index 000000000..4b3db05b6 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_tree_perlin_layered.doctree differ diff --git a/.doctrees/assets/shaders/dng-shaders/rendinst_vcolor_layered.doctree b/.doctrees/assets/shaders/dng-shaders/rendinst_vcolor_layered.doctree new file mode 100644 index 000000000..206d5b179 Binary files /dev/null and b/.doctrees/assets/shaders/dng-shaders/rendinst_vcolor_layered.doctree differ diff --git a/.doctrees/assets/shaders/index.doctree b/.doctrees/assets/shaders/index.doctree new file mode 100644 index 000000000..fd3556fa6 Binary files /dev/null and b/.doctrees/assets/shaders/index.doctree differ diff --git a/.doctrees/assets/shaders/land_mesh_combined_decal_family.doctree b/.doctrees/assets/shaders/land_mesh_combined_decal_family.doctree new file mode 100644 index 000000000..e1941c914 Binary files /dev/null and b/.doctrees/assets/shaders/land_mesh_combined_decal_family.doctree differ diff --git a/.doctrees/assets/shaders/rendinst_interior_mapping.doctree b/.doctrees/assets/shaders/rendinst_interior_mapping.doctree new file mode 100644 index 000000000..011248365 Binary files /dev/null and b/.doctrees/assets/shaders/rendinst_interior_mapping.doctree differ diff --git a/.doctrees/assets/shaders/rendinst_layered.doctree b/.doctrees/assets/shaders/rendinst_layered.doctree new file mode 100644 index 000000000..48db22893 Binary files /dev/null and b/.doctrees/assets/shaders/rendinst_layered.doctree differ diff --git a/.doctrees/assets/shaders/rendinst_layered_family.doctree b/.doctrees/assets/shaders/rendinst_layered_family.doctree new file mode 100644 index 000000000..eb2ed351d Binary files /dev/null and b/.doctrees/assets/shaders/rendinst_layered_family.doctree differ diff --git a/.doctrees/assets/shaders/rendinst_layered_lightmap.doctree b/.doctrees/assets/shaders/rendinst_layered_lightmap.doctree new file mode 100644 index 000000000..525da5897 Binary files /dev/null and b/.doctrees/assets/shaders/rendinst_layered_lightmap.doctree differ diff --git a/.doctrees/assets/shaders/rendinst_parallax_ice.doctree b/.doctrees/assets/shaders/rendinst_parallax_ice.doctree new file mode 100644 index 000000000..8d055c88d Binary files /dev/null and b/.doctrees/assets/shaders/rendinst_parallax_ice.doctree differ diff --git a/.doctrees/assets/shaders/rendinst_perlin_layered.doctree b/.doctrees/assets/shaders/rendinst_perlin_layered.doctree new file mode 100644 index 000000000..0800738c1 Binary files /dev/null and b/.doctrees/assets/shaders/rendinst_perlin_layered.doctree differ diff --git a/.doctrees/assets/shaders/rendinst_simple_emissive.doctree b/.doctrees/assets/shaders/rendinst_simple_emissive.doctree new file mode 100644 index 000000000..db1b8a561 Binary files /dev/null and b/.doctrees/assets/shaders/rendinst_simple_emissive.doctree differ diff --git a/.doctrees/assets/shaders/simple_aces_detailed.doctree b/.doctrees/assets/shaders/simple_aces_detailed.doctree new file mode 100644 index 000000000..b33805f15 Binary files /dev/null and b/.doctrees/assets/shaders/simple_aces_detailed.doctree differ diff --git a/.doctrees/dagor-home/dagor_engine.doctree b/.doctrees/dagor-home/dagor_engine.doctree new file mode 100644 index 000000000..1ca972f25 Binary files /dev/null and b/.doctrees/dagor-home/dagor_engine.doctree differ diff --git a/.doctrees/dagor-home/documentation/contributing_to_docs.doctree b/.doctrees/dagor-home/documentation/contributing_to_docs.doctree new file mode 100644 index 000000000..86a306b76 Binary files /dev/null and b/.doctrees/dagor-home/documentation/contributing_to_docs.doctree differ diff --git a/.doctrees/dagor-home/documentation/how_to_build_docs_locally.doctree b/.doctrees/dagor-home/documentation/how_to_build_docs_locally.doctree new file mode 100644 index 000000000..da41713ba Binary files /dev/null and b/.doctrees/dagor-home/documentation/how_to_build_docs_locally.doctree differ diff --git a/.doctrees/dagor-home/documentation/index.doctree b/.doctrees/dagor-home/documentation/index.doctree new file mode 100644 index 000000000..768e020cc Binary files /dev/null and b/.doctrees/dagor-home/documentation/index.doctree differ diff --git a/.doctrees/dagor-home/documentation/qdox-user-guide/index.doctree b/.doctrees/dagor-home/documentation/qdox-user-guide/index.doctree new file mode 100644 index 000000000..f5efe6b41 Binary files /dev/null and b/.doctrees/dagor-home/documentation/qdox-user-guide/index.doctree differ diff --git a/.doctrees/dagor-home/documentation/qdox-user-guide/qdox.doctree b/.doctrees/dagor-home/documentation/qdox-user-guide/qdox.doctree new file mode 100644 index 000000000..fa501624f Binary files /dev/null and b/.doctrees/dagor-home/documentation/qdox-user-guide/qdox.doctree differ diff --git a/.doctrees/dagor-home/documentation/qdox-user-guide/rst-cheatsheet.doctree b/.doctrees/dagor-home/documentation/qdox-user-guide/rst-cheatsheet.doctree new file mode 100644 index 000000000..0a77857d5 Binary files /dev/null and b/.doctrees/dagor-home/documentation/qdox-user-guide/rst-cheatsheet.doctree differ diff --git a/.doctrees/dagor-home/index.doctree b/.doctrees/dagor-home/index.doctree new file mode 100644 index 000000000..4dc4b7e60 Binary files /dev/null and b/.doctrees/dagor-home/index.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor-max-tools/dagor_max_tools.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor-max-tools/dagor_max_tools.doctree new file mode 100644 index 000000000..0e6b22611 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor-max-tools/dagor_max_tools.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor-max-tools/index.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor-max-tools/index.doctree new file mode 100644 index 000000000..b66dade02 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor-max-tools/index.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/ambient_occlusion_baker.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/ambient_occlusion_baker.doctree new file mode 100644 index 000000000..e9124e449 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/ambient_occlusion_baker.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/check_degenerated_faces_tool.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/check_degenerated_faces_tool.doctree new file mode 100644 index 000000000..793a82d25 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/check_degenerated_faces_tool.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/custom_groups_export_tool.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/custom_groups_export_tool.doctree new file mode 100644 index 000000000..4b433b392 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/custom_groups_export_tool.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool.doctree new file mode 100644 index 000000000..697961b58 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/editing_normals_tool.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/editing_normals_tool.doctree new file mode 100644 index 000000000..604133ea1 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/editing_normals_tool.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties.doctree new file mode 100644 index 000000000..289eec22f Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fix_normal_orientation_tool.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fix_normal_orientation_tool.doctree new file mode 100644 index 000000000..6feafb91a Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fix_normal_orientation_tool.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fixing_illegal_characters.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fixing_illegal_characters.doctree new file mode 100644 index 000000000..05f2d81b0 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fixing_illegal_characters.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/index.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/index.doctree new file mode 100644 index 000000000..2d9695db8 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/index.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/installation.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/installation.doctree new file mode 100644 index 000000000..471de5d65 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/installation.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/lods_and_collisions_generator.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/lods_and_collisions_generator.doctree new file mode 100644 index 000000000..1040a580b Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/lods_and_collisions_generator.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/pivot_painter_vegetation_tool.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/pivot_painter_vegetation_tool.doctree new file mode 100644 index 000000000..2516a4f04 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/pivot_painter_vegetation_tool.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/simple_cmp_editor.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/simple_cmp_editor.doctree new file mode 100644 index 000000000..c03250e39 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/simple_cmp_editor.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/transfer_vertex_position_to_vertex_color_tool.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/transfer_vertex_position_to_vertex_color_tool.doctree new file mode 100644 index 000000000..1ce1b1ce5 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/transfer_vertex_position_to_vertex_color_tool.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagormat/dagormat.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagormat/dagormat.doctree new file mode 100644 index 000000000..8812ddf9f Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagormat/dagormat.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/dagormat/index.doctree b/.doctrees/dagor-tools/addons/3ds-max/dagormat/index.doctree new file mode 100644 index 000000000..12533ea21 Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/dagormat/index.doctree differ diff --git a/.doctrees/dagor-tools/addons/3ds-max/index.doctree b/.doctrees/dagor-tools/addons/3ds-max/index.doctree new file mode 100644 index 000000000..f912189cb Binary files /dev/null and b/.doctrees/dagor-tools/addons/3ds-max/index.doctree differ diff --git a/.doctrees/dagor-tools/addons/blender/dag4blend-comp-editor/dag4blend_comp_editor.doctree b/.doctrees/dagor-tools/addons/blender/dag4blend-comp-editor/dag4blend_comp_editor.doctree new file mode 100644 index 000000000..5ac6e1e7f Binary files /dev/null and b/.doctrees/dagor-tools/addons/blender/dag4blend-comp-editor/dag4blend_comp_editor.doctree differ diff --git a/.doctrees/dagor-tools/addons/blender/dag4blend-comp-editor/index.doctree b/.doctrees/dagor-tools/addons/blender/dag4blend-comp-editor/index.doctree new file mode 100644 index 000000000..5fe5d471e Binary files /dev/null and b/.doctrees/dagor-tools/addons/blender/dag4blend-comp-editor/index.doctree differ diff --git a/.doctrees/dagor-tools/addons/blender/dag4blend-texture-baker/dag4blend_texture_baker.doctree b/.doctrees/dagor-tools/addons/blender/dag4blend-texture-baker/dag4blend_texture_baker.doctree new file mode 100644 index 000000000..17a117970 Binary files /dev/null and b/.doctrees/dagor-tools/addons/blender/dag4blend-texture-baker/dag4blend_texture_baker.doctree differ diff --git a/.doctrees/dagor-tools/addons/blender/dag4blend-texture-baker/index.doctree b/.doctrees/dagor-tools/addons/blender/dag4blend-texture-baker/index.doctree new file mode 100644 index 000000000..df418cd32 Binary files /dev/null and b/.doctrees/dagor-tools/addons/blender/dag4blend-texture-baker/index.doctree differ diff --git a/.doctrees/dagor-tools/addons/blender/dag4blend/dag4blend.doctree b/.doctrees/dagor-tools/addons/blender/dag4blend/dag4blend.doctree new file mode 100644 index 000000000..a2f3b1bd8 Binary files /dev/null and b/.doctrees/dagor-tools/addons/blender/dag4blend/dag4blend.doctree differ diff --git a/.doctrees/dagor-tools/addons/blender/dag4blend/index.doctree b/.doctrees/dagor-tools/addons/blender/dag4blend/index.doctree new file mode 100644 index 000000000..cd8b557a9 Binary files /dev/null and b/.doctrees/dagor-tools/addons/blender/dag4blend/index.doctree differ diff --git a/.doctrees/dagor-tools/addons/blender/index.doctree b/.doctrees/dagor-tools/addons/blender/index.doctree new file mode 100644 index 000000000..ef3fcdfb2 Binary files /dev/null and b/.doctrees/dagor-tools/addons/blender/index.doctree differ diff --git a/.doctrees/dagor-tools/addons/index.doctree b/.doctrees/dagor-tools/addons/index.doctree new file mode 100644 index 000000000..ef9ccb345 Binary files /dev/null and b/.doctrees/dagor-tools/addons/index.doctree differ diff --git a/.doctrees/dagor-tools/asset-viewer/asset-viewer-comp-editor/asset_viewer_comp_editor.doctree b/.doctrees/dagor-tools/asset-viewer/asset-viewer-comp-editor/asset_viewer_comp_editor.doctree new file mode 100644 index 000000000..7b33536e3 Binary files /dev/null and b/.doctrees/dagor-tools/asset-viewer/asset-viewer-comp-editor/asset_viewer_comp_editor.doctree differ diff --git a/.doctrees/dagor-tools/asset-viewer/asset-viewer-comp-editor/index.doctree b/.doctrees/dagor-tools/asset-viewer/asset-viewer-comp-editor/index.doctree new file mode 100644 index 000000000..1f8408404 Binary files /dev/null and b/.doctrees/dagor-tools/asset-viewer/asset-viewer-comp-editor/index.doctree differ diff --git a/.doctrees/dagor-tools/asset-viewer/asset-viewer/asset_viewer.doctree b/.doctrees/dagor-tools/asset-viewer/asset-viewer/asset_viewer.doctree new file mode 100644 index 000000000..4a9f92f0b Binary files /dev/null and b/.doctrees/dagor-tools/asset-viewer/asset-viewer/asset_viewer.doctree differ diff --git a/.doctrees/dagor-tools/asset-viewer/asset-viewer/index.doctree b/.doctrees/dagor-tools/asset-viewer/asset-viewer/index.doctree new file mode 100644 index 000000000..38f0b5c6d Binary files /dev/null and b/.doctrees/dagor-tools/asset-viewer/asset-viewer/index.doctree differ diff --git a/.doctrees/dagor-tools/asset-viewer/collision-generation/collision_generation_for_assets.doctree b/.doctrees/dagor-tools/asset-viewer/collision-generation/collision_generation_for_assets.doctree new file mode 100644 index 000000000..8d130d7ee Binary files /dev/null and b/.doctrees/dagor-tools/asset-viewer/collision-generation/collision_generation_for_assets.doctree differ diff --git a/.doctrees/dagor-tools/asset-viewer/collision-generation/index.doctree b/.doctrees/dagor-tools/asset-viewer/collision-generation/index.doctree new file mode 100644 index 000000000..f7a310483 Binary files /dev/null and b/.doctrees/dagor-tools/asset-viewer/collision-generation/index.doctree differ diff --git a/.doctrees/dagor-tools/asset-viewer/index.doctree b/.doctrees/dagor-tools/asset-viewer/index.doctree new file mode 100644 index 000000000..4de1bd8ea Binary files /dev/null and b/.doctrees/dagor-tools/asset-viewer/index.doctree differ diff --git a/.doctrees/dagor-tools/blk/blk.doctree b/.doctrees/dagor-tools/blk/blk.doctree new file mode 100644 index 000000000..559226bff Binary files /dev/null and b/.doctrees/dagor-tools/blk/blk.doctree differ diff --git a/.doctrees/dagor-tools/blk/index.doctree b/.doctrees/dagor-tools/blk/index.doctree new file mode 100644 index 000000000..7ee32d49e Binary files /dev/null and b/.doctrees/dagor-tools/blk/index.doctree differ diff --git a/.doctrees/dagor-tools/daeditor/daeditor-console-commands/daeditor_console_commands.doctree b/.doctrees/dagor-tools/daeditor/daeditor-console-commands/daeditor_console_commands.doctree new file mode 100644 index 000000000..a44a872ca Binary files /dev/null and b/.doctrees/dagor-tools/daeditor/daeditor-console-commands/daeditor_console_commands.doctree differ diff --git a/.doctrees/dagor-tools/daeditor/daeditor-console-commands/index.doctree b/.doctrees/dagor-tools/daeditor/daeditor-console-commands/index.doctree new file mode 100644 index 000000000..b4c4273a1 Binary files /dev/null and b/.doctrees/dagor-tools/daeditor/daeditor-console-commands/index.doctree differ diff --git a/.doctrees/dagor-tools/daeditor/daeditor/daeditor.doctree b/.doctrees/dagor-tools/daeditor/daeditor/daeditor.doctree new file mode 100644 index 000000000..c60b2e323 Binary files /dev/null and b/.doctrees/dagor-tools/daeditor/daeditor/daeditor.doctree differ diff --git a/.doctrees/dagor-tools/daeditor/daeditor/index.doctree b/.doctrees/dagor-tools/daeditor/daeditor/index.doctree new file mode 100644 index 000000000..823484ee4 Binary files /dev/null and b/.doctrees/dagor-tools/daeditor/daeditor/index.doctree differ diff --git a/.doctrees/dagor-tools/daeditor/index.doctree b/.doctrees/dagor-tools/daeditor/index.doctree new file mode 100644 index 000000000..5e755a7f1 Binary files /dev/null and b/.doctrees/dagor-tools/daeditor/index.doctree differ diff --git a/.doctrees/dagor-tools/daeditor/navmesh/index.doctree b/.doctrees/dagor-tools/daeditor/navmesh/index.doctree new file mode 100644 index 000000000..218dcb505 Binary files /dev/null and b/.doctrees/dagor-tools/daeditor/navmesh/index.doctree differ diff --git a/.doctrees/dagor-tools/daeditor/navmesh/navmesh.doctree b/.doctrees/dagor-tools/daeditor/navmesh/navmesh.doctree new file mode 100644 index 000000000..ecf340d4c Binary files /dev/null and b/.doctrees/dagor-tools/daeditor/navmesh/navmesh.doctree differ diff --git a/.doctrees/dagor-tools/daeditor/splines_in_daeditor.doctree b/.doctrees/dagor-tools/daeditor/splines_in_daeditor.doctree new file mode 100644 index 000000000..f0fe8df03 Binary files /dev/null and b/.doctrees/dagor-tools/daeditor/splines_in_daeditor.doctree differ diff --git a/.doctrees/dagor-tools/dag2rires/dag2rires.doctree b/.doctrees/dagor-tools/dag2rires/dag2rires.doctree new file mode 100644 index 000000000..b78e81297 Binary files /dev/null and b/.doctrees/dagor-tools/dag2rires/dag2rires.doctree differ diff --git a/.doctrees/dagor-tools/dag2rires/index.doctree b/.doctrees/dagor-tools/dag2rires/index.doctree new file mode 100644 index 000000000..d19069b1a Binary files /dev/null and b/.doctrees/dagor-tools/dag2rires/index.doctree differ diff --git a/.doctrees/dagor-tools/impostor-baker/impostor_baker.doctree b/.doctrees/dagor-tools/impostor-baker/impostor_baker.doctree new file mode 100644 index 000000000..87d401fe8 Binary files /dev/null and b/.doctrees/dagor-tools/impostor-baker/impostor_baker.doctree differ diff --git a/.doctrees/dagor-tools/impostor-baker/index.doctree b/.doctrees/dagor-tools/impostor-baker/index.doctree new file mode 100644 index 000000000..18917fe29 Binary files /dev/null and b/.doctrees/dagor-tools/impostor-baker/index.doctree differ diff --git a/.doctrees/dagor-tools/index.doctree b/.doctrees/dagor-tools/index.doctree new file mode 100644 index 000000000..80d1038a3 Binary files /dev/null and b/.doctrees/dagor-tools/index.doctree differ diff --git a/.doctrees/dagor-tools/levels-deps/index.doctree b/.doctrees/dagor-tools/levels-deps/index.doctree new file mode 100644 index 000000000..10010caef Binary files /dev/null and b/.doctrees/dagor-tools/levels-deps/index.doctree differ diff --git a/.doctrees/dagor-tools/levels-deps/levels_deps.doctree b/.doctrees/dagor-tools/levels-deps/levels_deps.doctree new file mode 100644 index 000000000..82695e6b1 Binary files /dev/null and b/.doctrees/dagor-tools/levels-deps/levels_deps.doctree differ diff --git a/.doctrees/dagor-tools/resource-building/index.doctree b/.doctrees/dagor-tools/resource-building/index.doctree new file mode 100644 index 000000000..fd8ce9e96 Binary files /dev/null and b/.doctrees/dagor-tools/resource-building/index.doctree differ diff --git a/.doctrees/dagor-tools/resource-building/packages.doctree b/.doctrees/dagor-tools/resource-building/packages.doctree new file mode 100644 index 000000000..2d6b1d01c Binary files /dev/null and b/.doctrees/dagor-tools/resource-building/packages.doctree differ diff --git a/.doctrees/dagor-tools/resource-building/resource_building.doctree b/.doctrees/dagor-tools/resource-building/resource_building.doctree new file mode 100644 index 000000000..1e10fc8ae Binary files /dev/null and b/.doctrees/dagor-tools/resource-building/resource_building.doctree differ diff --git a/.doctrees/dagor-tools/resource-building/vromfs.doctree b/.doctrees/dagor-tools/resource-building/vromfs.doctree new file mode 100644 index 000000000..201330472 Binary files /dev/null and b/.doctrees/dagor-tools/resource-building/vromfs.doctree differ diff --git a/.doctrees/dagor-tools/substance-designer/index.doctree b/.doctrees/dagor-tools/substance-designer/index.doctree new file mode 100644 index 000000000..b83f1f2d2 Binary files /dev/null and b/.doctrees/dagor-tools/substance-designer/index.doctree differ diff --git a/.doctrees/dagor-tools/substance-designer/substance_designer.doctree b/.doctrees/dagor-tools/substance-designer/substance_designer.doctree new file mode 100644 index 000000000..df47c3a90 Binary files /dev/null and b/.doctrees/dagor-tools/substance-designer/substance_designer.doctree differ diff --git a/.doctrees/danetgame-framework/daNetGame/index.doctree b/.doctrees/danetgame-framework/daNetGame/index.doctree new file mode 100644 index 000000000..bc04903a6 Binary files /dev/null and b/.doctrees/danetgame-framework/daNetGame/index.doctree differ diff --git a/.doctrees/danetgame-framework/index.doctree b/.doctrees/danetgame-framework/index.doctree new file mode 100644 index 000000000..3a04e82fa Binary files /dev/null and b/.doctrees/danetgame-framework/index.doctree differ diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 000000000..c1196dbc3 Binary files /dev/null and b/.doctrees/environment.pickle differ diff --git a/.doctrees/getting-started/directory_structure.doctree b/.doctrees/getting-started/directory_structure.doctree new file mode 100644 index 000000000..e97564a60 Binary files /dev/null and b/.doctrees/getting-started/directory_structure.doctree differ diff --git a/.doctrees/getting-started/how_to_access.doctree b/.doctrees/getting-started/how_to_access.doctree new file mode 100644 index 000000000..d50ff20e4 Binary files /dev/null and b/.doctrees/getting-started/how_to_access.doctree differ diff --git a/.doctrees/getting-started/how_to_build.doctree b/.doctrees/getting-started/how_to_build.doctree new file mode 100644 index 000000000..1228bf9b5 Binary files /dev/null and b/.doctrees/getting-started/how_to_build.doctree differ diff --git a/.doctrees/getting-started/how_to_contribute.doctree b/.doctrees/getting-started/how_to_contribute.doctree new file mode 100644 index 000000000..1dfbf6e4e Binary files /dev/null and b/.doctrees/getting-started/how_to_contribute.doctree differ diff --git a/.doctrees/getting-started/index.doctree b/.doctrees/getting-started/index.doctree new file mode 100644 index 000000000..92f7049f1 Binary files /dev/null and b/.doctrees/getting-started/index.doctree differ diff --git a/.doctrees/getting-started/license.doctree b/.doctrees/getting-started/license.doctree new file mode 100644 index 000000000..513f55b37 Binary files /dev/null and b/.doctrees/getting-started/license.doctree differ diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 000000000..abf4156b3 Binary files /dev/null and b/.doctrees/index.doctree differ diff --git a/.doctrees/samples/index.doctree b/.doctrees/samples/index.doctree new file mode 100644 index 000000000..b0fda4b72 Binary files /dev/null and b/.doctrees/samples/index.doctree differ diff --git a/.doctrees/tutorials/create-mission-wt/create_mission_wt.doctree b/.doctrees/tutorials/create-mission-wt/create_mission_wt.doctree new file mode 100644 index 000000000..9870cfa4f Binary files /dev/null and b/.doctrees/tutorials/create-mission-wt/create_mission_wt.doctree differ diff --git a/.doctrees/tutorials/create-mission-wt/index.doctree b/.doctrees/tutorials/create-mission-wt/index.doctree new file mode 100644 index 000000000..7f13a81d7 Binary files /dev/null and b/.doctrees/tutorials/create-mission-wt/index.doctree differ diff --git a/.doctrees/tutorials/dng-non-human-char/dng_non_human_char.doctree b/.doctrees/tutorials/dng-non-human-char/dng_non_human_char.doctree new file mode 100644 index 000000000..ef08e752a Binary files /dev/null and b/.doctrees/tutorials/dng-non-human-char/dng_non_human_char.doctree differ diff --git a/.doctrees/tutorials/dng-non-human-char/index.doctree b/.doctrees/tutorials/dng-non-human-char/index.doctree new file mode 100644 index 000000000..b450c95da Binary files /dev/null and b/.doctrees/tutorials/dng-non-human-char/index.doctree differ diff --git a/.doctrees/tutorials/index.doctree b/.doctrees/tutorials/index.doctree new file mode 100644 index 000000000..111290295 Binary files /dev/null and b/.doctrees/tutorials/index.doctree differ diff --git a/.doctrees/tutorials/wt-designing-vehicle-deformations/index.doctree b/.doctrees/tutorials/wt-designing-vehicle-deformations/index.doctree new file mode 100644 index 000000000..94ef9a8ec Binary files /dev/null and b/.doctrees/tutorials/wt-designing-vehicle-deformations/index.doctree differ diff --git a/.doctrees/tutorials/wt-designing-vehicle-deformations/wt_designing_vehicle_deformations.doctree b/.doctrees/tutorials/wt-designing-vehicle-deformations/wt_designing_vehicle_deformations.doctree new file mode 100644 index 000000000..31e4dee04 Binary files /dev/null and b/.doctrees/tutorials/wt-designing-vehicle-deformations/wt_designing_vehicle_deformations.doctree differ diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/_downloads/053b7874806a5e13786d25fc325581a1/photometry_file_test2.ies b/_downloads/053b7874806a5e13786d25fc325581a1/photometry_file_test2.ies new file mode 100644 index 000000000..e4c9c2c11 --- /dev/null +++ b/_downloads/053b7874806a5e13786d25fc325581a1/photometry_file_test2.ies @@ -0,0 +1,10 @@ +IESNA:LM-63-2002 +[TEST] +TILT=NONE +1 -1 1 3 3 1 1 0 0 0 +0 0 0 +45 90 135 +90 180 270 +0 1 0 +5 0 3 +0 3 0 diff --git a/_downloads/52163aedd9b5377f820afd5538284bc8/photometry_file_t8_06nw.ies b/_downloads/52163aedd9b5377f820afd5538284bc8/photometry_file_t8_06nw.ies new file mode 100644 index 000000000..7548927b6 --- /dev/null +++ b/_downloads/52163aedd9b5377f820afd5538284bc8/photometry_file_t8_06nw.ies @@ -0,0 +1,355 @@ +IESNA:LM-63-2002 +[TEST] +[TESTDATE] 2016-04-13 +[ISSUEDATE] 2016-04-13 12:19:00 +[NEARFIELD] +[LAMPPOSITION] 0,0 +[MANUFAC] Sinclair Corporation Ltd. +[LUMINAIRE] T8 06NW +TILT=NONE +1 846.07 1 181 17 1 2 0.100 0.100 0.000 +1.000 1 8.4 +0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 + 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 + 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0 + 30.0 31.0 32.0 33.0 34.0 35.0 36.0 37.0 38.0 39.0 + 40.0 41.0 42.0 43.0 44.0 45.0 46.0 47.0 48.0 49.0 + 50.0 51.0 52.0 53.0 54.0 55.0 56.0 57.0 58.0 59.0 + 60.0 61.0 62.0 63.0 64.0 65.0 66.0 67.0 68.0 69.0 + 70.0 71.0 72.0 73.0 74.0 75.0 76.0 77.0 78.0 79.0 + 80.0 81.0 82.0 83.0 84.0 85.0 86.0 87.0 88.0 89.0 + 90.0 91.0 92.0 93.0 94.0 95.0 96.0 97.0 98.0 99.0 + 100.0 101.0 102.0 103.0 104.0 105.0 106.0 107.0 108.0 109.0 + 110.0 111.0 112.0 113.0 114.0 115.0 116.0 117.0 118.0 119.0 + 120.0 121.0 122.0 123.0 124.0 125.0 126.0 127.0 128.0 129.0 + 130.0 131.0 132.0 133.0 134.0 135.0 136.0 137.0 138.0 139.0 + 140.0 141.0 142.0 143.0 144.0 145.0 146.0 147.0 148.0 149.0 + 150.0 151.0 152.0 153.0 154.0 155.0 156.0 157.0 158.0 159.0 + 160.0 161.0 162.0 163.0 164.0 165.0 166.0 167.0 168.0 169.0 + 170.0 171.0 172.0 173.0 174.0 175.0 176.0 177.0 178.0 179.0 + 180.0 +0.0 22.5 45.0 67.5 90.0 112.5 135.0 157.5 180.0 202.5 + 225.0 247.5 270.0 292.5 315.0 337.5 360.0 +208.39 208.36 208.29 208.14 207.90 207.56 207.20 206.74 206.19 205.59 + 204.93 204.17 203.39 202.49 201.51 200.47 199.38 198.21 196.96 195.64 + 194.28 192.81 191.33 189.77 188.13 186.42 184.66 182.85 180.96 178.98 + 176.97 174.88 172.77 170.63 168.33 166.08 163.74 161.32 158.87 156.33 + 153.74 151.19 148.52 145.77 143.10 140.30 137.42 134.55 131.63 128.66 + 125.64 122.57 119.48 116.30 113.14 109.95 106.70 103.36 100.11 96.71 + 93.28 89.83 86.42 82.94 79.50 75.94 72.38 68.87 65.29 61.69 + 58.15 54.55 51.01 47.37 43.84 40.28 36.75 33.34 29.95 26.60 + 23.49 20.38 17.41 14.69 12.10 9.75 7.73 5.95 4.57 3.63 + 3.10 3.08 3.11 3.15 3.21 3.30 3.44 3.60 3.63 3.63 + 3.66 3.77 3.81 3.85 3.88 3.90 3.91 3.94 3.95 3.97 + 3.96 3.94 3.95 3.97 4.00 4.01 4.03 4.05 4.04 4.00 + 4.05 4.14 4.16 4.19 4.20 4.22 4.24 4.25 4.27 4.29 + 4.31 4.32 4.33 4.34 4.35 4.36 4.37 4.39 4.39 4.40 + 4.40 4.39 4.39 4.39 4.39 4.41 4.40 4.39 4.38 4.39 + 4.40 4.41 4.44 4.45 4.46 4.48 4.51 4.52 4.54 4.57 + 4.59 4.59 4.60 4.63 4.64 4.65 4.68 4.74 4.79 4.81 + 4.81 4.83 4.84 4.85 4.85 4.86 4.85 4.85 4.84 4.85 + 4.85 +208.35 208.32 208.20 208.01 207.74 207.40 207.01 206.54 205.95 205.32 + 204.64 203.88 203.08 202.17 201.25 200.22 199.12 197.99 196.75 195.45 + 194.12 192.69 191.23 189.71 188.06 186.40 184.73 182.92 181.11 179.20 + 177.23 175.24 173.22 171.11 168.95 166.77 164.49 162.18 159.84 157.41 + 155.00 152.53 150.00 147.39 144.84 142.17 139.51 136.80 134.04 131.25 + 128.46 125.59 122.70 119.79 116.88 113.93 110.96 107.94 104.94 101.90 + 98.85 95.83 92.73 89.69 86.66 83.55 80.53 77.49 74.48 71.42 + 68.47 65.50 62.52 59.61 56.68 53.81 50.98 48.20 45.49 42.79 + 40.13 37.55 35.03 32.40 29.76 27.06 24.12 21.07 18.34 16.83 + 16.03 15.36 14.57 13.81 13.13 12.49 11.89 11.34 10.85 10.39 + 9.98 9.59 9.21 8.88 8.58 8.32 8.17 8.10 8.01 7.92 + 7.81 7.71 7.54 7.31 7.07 6.93 6.86 6.76 6.69 6.66 + 6.61 6.63 6.58 6.50 6.42 6.34 6.26 6.19 6.13 6.06 + 5.99 5.93 5.86 5.80 5.75 5.69 5.63 5.58 5.53 5.48 + 5.44 5.39 5.35 5.31 5.28 5.23 5.15 5.09 5.05 5.03 + 5.02 5.01 5.01 5.01 5.01 4.99 4.98 4.97 4.96 4.95 + 4.95 4.95 4.94 4.93 4.93 4.93 4.93 4.93 4.93 4.93 + 4.93 4.91 4.87 4.89 4.89 4.89 4.89 4.89 4.89 4.88 + 4.85 +208.12 207.99 207.83 207.60 207.31 206.95 206.52 206.07 205.51 204.88 + 204.24 203.50 202.75 201.89 201.00 200.00 198.97 197.88 196.75 195.56 + 194.29 192.99 191.66 190.24 188.77 187.24 185.71 184.09 182.43 180.71 + 178.92 177.14 175.33 173.43 171.48 169.51 167.50 165.41 163.38 161.23 + 159.06 156.93 154.71 152.40 150.18 147.89 145.55 143.19 140.90 138.49 + 136.13 133.69 131.26 128.85 126.43 124.00 121.54 119.07 116.66 114.16 + 111.69 109.24 106.79 104.33 101.92 99.44 97.00 94.60 92.17 89.72 + 87.35 84.94 82.61 80.21 77.81 75.47 73.09 70.75 68.35 65.88 + 63.51 61.04 58.53 56.08 53.61 51.20 49.03 47.17 45.71 44.41 + 43.18 41.97 40.68 39.33 37.99 36.68 35.43 34.21 33.03 31.90 + 30.80 29.72 28.70 27.71 26.75 25.82 24.92 24.06 23.24 22.44 + 21.67 20.93 20.22 19.53 18.88 18.24 17.66 17.11 16.60 16.12 + 15.66 15.20 14.77 14.35 13.92 13.53 13.13 12.69 12.27 11.84 + 11.45 11.14 10.83 10.51 10.22 9.96 9.70 9.49 9.30 9.08 + 8.84 8.60 8.37 8.16 7.95 7.76 7.56 7.38 7.21 7.06 + 6.90 6.76 6.63 6.50 6.37 6.25 6.15 6.04 5.94 5.84 + 5.74 5.66 5.59 5.53 5.46 5.40 5.35 5.30 5.26 5.22 + 5.19 5.17 5.15 5.12 5.08 5.06 4.97 4.96 4.96 4.95 + 4.85 +208.17 208.09 207.94 207.73 207.41 207.11 206.71 206.24 205.77 205.23 + 204.61 203.96 203.24 202.49 201.64 200.79 199.85 198.89 197.86 196.78 + 195.72 194.52 193.36 192.10 190.77 189.44 188.08 186.61 185.15 183.64 + 182.10 180.53 178.93 177.30 175.63 173.88 172.16 170.39 168.55 166.73 + 164.88 163.04 161.12 159.19 157.27 155.29 153.29 151.29 149.30 147.24 + 145.25 143.19 141.11 139.02 136.95 134.86 132.74 130.65 128.54 126.41 + 124.30 122.20 120.11 118.03 115.92 113.78 111.69 109.62 107.51 105.43 + 103.40 101.34 99.26 97.24 95.22 93.17 91.16 89.11 87.09 85.05 + 82.97 80.90 78.88 76.77 74.70 72.72 70.93 69.21 67.61 66.07 + 64.58 63.10 61.68 60.08 58.48 56.91 55.32 53.80 52.29 50.78 + 49.35 47.92 46.51 45.17 43.80 42.49 41.19 39.93 38.73 37.51 + 36.36 35.21 34.07 32.99 31.91 30.88 29.88 28.87 27.93 27.00 + 26.09 25.19 24.32 23.50 22.69 21.89 21.14 20.39 19.68 18.99 + 18.31 17.67 17.04 16.42 15.84 15.27 14.74 14.22 13.72 13.24 + 12.76 12.32 11.89 11.47 11.07 10.67 10.31 9.94 9.60 9.28 + 8.98 8.68 8.41 8.15 7.90 7.66 7.44 7.22 7.03 6.84 + 6.65 6.50 6.35 6.21 6.06 5.93 5.81 5.73 5.65 5.57 + 5.49 5.43 5.38 5.34 5.29 5.24 5.19 5.12 5.07 5.06 + 4.85 +210.93 210.71 210.49 210.16 209.79 209.34 208.87 208.39 207.83 207.19 + 206.52 205.80 205.01 204.16 203.30 202.40 201.42 200.37 199.35 198.23 + 197.08 195.92 194.64 193.42 192.12 190.75 189.36 187.93 186.45 184.98 + 183.46 181.85 180.32 178.66 176.99 175.35 173.62 171.85 170.15 168.36 + 166.54 164.70 162.91 161.05 159.15 157.20 155.36 153.42 151.47 149.55 + 147.58 145.58 143.63 141.63 139.63 137.61 135.61 133.54 131.55 129.54 + 127.46 125.46 123.41 121.37 119.33 117.31 115.27 113.26 111.22 109.20 + 107.19 105.16 103.21 101.21 99.24 97.25 95.29 93.31 91.42 89.48 + 87.55 85.68 83.82 81.93 80.11 78.27 76.45 74.64 72.90 71.14 + 69.37 67.66 66.02 64.31 62.64 61.02 59.43 57.82 56.27 54.71 + 53.21 51.74 50.24 48.80 47.41 45.99 44.64 43.31 41.99 40.72 + 39.45 38.23 37.02 35.82 34.69 33.56 32.45 31.39 30.34 29.31 + 28.33 27.35 26.40 25.49 24.56 23.68 22.84 22.01 21.20 20.44 + 19.67 18.94 18.23 17.56 16.90 16.26 15.65 15.07 14.49 13.95 + 13.41 12.91 12.42 11.94 11.50 11.06 10.64 10.24 9.84 9.48 + 9.13 8.81 8.51 8.21 7.94 7.69 7.46 7.25 7.04 6.85 + 6.66 6.50 6.36 6.20 6.07 5.96 5.85 5.76 5.69 5.62 + 5.56 5.50 5.48 5.44 5.33 5.32 5.27 5.27 5.29 5.28 + 4.85 +210.12 209.90 209.64 209.34 208.98 208.55 208.09 207.54 206.97 206.33 + 205.62 204.90 204.06 203.21 202.32 201.37 200.35 199.31 198.21 197.02 + 195.83 194.60 193.29 191.98 190.58 189.20 187.72 186.22 184.69 183.12 + 181.47 179.82 178.14 176.40 174.68 172.89 171.09 169.25 167.39 165.51 + 163.60 161.64 159.70 157.72 155.72 153.72 151.70 149.66 147.60 145.51 + 143.44 141.35 139.17 137.05 134.94 132.79 130.64 128.50 126.37 124.25 + 122.08 119.87 117.80 115.63 113.47 111.34 109.22 107.05 104.99 102.87 + 100.80 98.70 96.57 94.52 92.41 90.28 88.17 86.01 83.89 81.71 + 79.54 77.39 75.22 73.16 71.26 69.56 67.97 66.43 64.97 63.55 + 62.13 60.64 59.01 57.39 55.81 54.26 52.73 51.23 49.72 48.28 + 46.87 45.46 44.12 42.78 41.48 40.18 38.92 37.70 36.50 35.31 + 34.19 33.07 31.98 30.93 29.88 28.89 27.91 26.93 26.04 25.13 + 24.25 23.41 22.56 21.78 21.02 20.25 19.53 18.83 18.13 17.49 + 16.84 16.23 15.65 15.09 14.53 14.00 13.49 13.01 12.53 12.09 + 11.65 11.23 10.81 10.42 10.04 9.66 9.32 8.99 8.69 8.40 + 8.14 7.88 7.64 7.41 7.20 7.00 6.82 6.64 6.48 6.33 + 6.18 6.04 5.91 5.79 5.68 5.59 5.51 5.45 5.38 5.33 + 5.28 5.26 5.23 5.21 5.18 5.15 5.09 5.11 5.13 5.13 + 4.85 +209.37 209.20 208.99 208.72 208.37 207.95 207.48 206.94 206.36 205.66 + 204.94 204.17 203.29 202.40 201.44 200.43 199.33 198.21 197.02 195.76 + 194.47 193.10 191.65 190.21 188.69 187.12 185.51 183.84 182.12 180.41 + 178.56 176.69 174.80 172.84 170.87 168.88 166.78 164.67 162.60 160.45 + 158.22 155.96 153.74 151.51 149.13 146.76 144.48 142.13 139.69 137.34 + 134.89 132.42 129.98 127.54 125.01 122.56 120.11 117.57 115.12 112.64 + 110.08 107.62 105.11 102.57 100.10 97.58 95.09 92.62 90.14 87.66 + 85.20 82.74 80.25 77.81 75.35 72.87 70.38 67.85 65.37 62.82 + 60.25 57.68 55.13 52.55 50.12 47.89 46.04 44.62 43.33 42.10 + 40.93 39.72 38.39 37.02 35.73 34.48 33.27 32.10 30.98 29.87 + 28.81 27.77 26.79 25.82 24.90 23.98 23.12 22.29 21.49 20.72 + 19.98 19.29 18.60 17.94 17.31 16.71 16.17 15.70 15.24 14.79 + 14.36 13.92 13.50 13.11 12.73 12.33 11.90 11.51 11.18 10.86 + 10.53 10.23 9.95 9.70 9.48 9.25 8.98 8.71 8.46 8.22 + 7.99 7.78 7.57 7.38 7.21 7.03 6.87 6.72 6.58 6.45 + 6.32 6.20 6.09 5.98 5.88 5.78 5.69 5.60 5.51 5.43 + 5.36 5.30 5.25 5.20 5.16 5.13 5.09 5.07 5.05 5.03 + 5.02 5.01 4.99 4.99 4.96 4.95 4.97 4.98 4.99 5.00 + 4.85 +208.89 208.76 208.59 208.33 207.99 207.51 207.03 206.50 205.87 205.16 + 204.40 203.57 202.69 201.69 200.70 199.56 198.38 197.20 195.87 194.52 + 193.12 191.62 190.06 188.48 186.81 185.09 183.31 181.43 179.56 177.60 + 175.60 173.54 171.45 169.23 167.03 164.79 162.44 160.11 157.67 155.22 + 152.72 150.18 147.63 144.98 142.32 139.64 136.89 134.09 131.33 128.46 + 125.61 122.73 119.78 116.80 113.87 110.86 107.82 104.78 101.76 98.67 + 95.60 92.50 89.41 86.32 83.21 80.14 77.06 73.93 70.94 67.85 + 64.84 61.83 58.83 55.90 53.03 50.09 47.30 44.46 41.77 39.05 + 36.38 33.78 31.12 28.46 25.73 22.77 19.91 17.42 16.05 15.27 + 14.59 13.81 13.05 12.34 11.71 11.13 10.59 10.08 9.60 9.17 + 8.80 8.44 8.11 7.84 7.55 7.40 7.31 7.20 7.10 6.95 + 6.71 6.46 6.30 6.20 6.12 6.04 5.99 5.95 5.93 5.93 + 5.88 5.81 5.74 5.68 5.62 5.55 5.50 5.45 5.40 5.35 + 5.30 5.25 5.20 5.16 5.12 5.09 5.05 5.02 4.98 4.96 + 4.92 4.89 4.85 4.82 4.74 4.69 4.68 4.69 4.69 4.69 + 4.69 4.69 4.68 4.68 4.68 4.67 4.67 4.67 4.67 4.67 + 4.67 4.67 4.68 4.69 4.69 4.70 4.71 4.73 4.74 4.75 + 4.70 4.73 4.77 4.81 4.83 4.85 4.87 4.87 4.88 4.88 + 4.85 +208.39 208.30 208.16 207.96 207.66 207.29 206.85 206.34 205.79 205.12 + 204.37 203.56 202.67 201.74 200.73 199.65 198.48 197.24 196.00 194.64 + 193.21 191.73 190.15 188.56 186.88 185.11 183.34 181.45 179.49 177.56 + 175.53 173.36 171.23 168.99 166.67 164.39 162.02 159.52 157.06 154.58 + 151.98 149.28 146.62 143.92 141.10 138.22 135.40 132.51 129.47 126.47 + 123.46 120.33 117.18 114.02 110.77 107.53 104.27 100.88 97.60 94.20 + 90.73 87.28 83.82 80.24 76.77 73.21 69.62 66.08 62.44 58.86 + 55.27 51.65 47.99 44.44 40.90 37.34 33.87 30.44 27.10 23.83 + 20.66 17.67 14.84 12.15 9.73 7.57 5.70 4.20 3.12 2.45 + 2.37 2.40 2.42 2.46 2.49 2.58 2.72 2.79 2.78 2.86 + 2.94 2.97 3.04 3.06 3.09 3.11 3.13 3.16 3.19 3.21 + 3.19 3.21 3.25 3.28 3.31 3.34 3.36 3.39 3.36 3.41 + 3.49 3.51 3.55 3.59 3.62 3.64 3.67 3.70 3.72 3.75 + 3.78 3.80 3.82 3.81 3.79 3.81 3.83 3.86 3.92 3.96 + 4.00 4.03 4.05 4.06 4.06 4.06 4.05 4.07 4.09 4.11 + 4.13 4.16 4.18 4.21 4.23 4.25 4.28 4.31 4.33 4.35 + 4.38 4.40 4.42 4.44 4.47 4.51 4.58 4.63 4.65 4.67 + 4.70 4.72 4.75 4.77 4.80 4.82 4.83 4.84 4.85 4.85 + 4.85 +208.35 208.31 208.23 208.07 207.85 207.52 207.19 206.70 206.17 205.58 + 204.88 204.17 203.36 202.49 201.55 200.58 199.49 198.42 197.13 195.89 + 194.55 193.14 191.68 190.19 188.58 186.95 185.25 183.49 181.69 179.76 + 177.83 175.84 173.80 171.69 169.54 167.30 165.08 162.76 160.42 158.05 + 155.60 153.05 150.60 148.00 145.36 142.72 140.02 137.31 134.57 131.75 + 128.96 126.12 123.19 120.25 117.35 114.36 111.35 108.35 105.32 102.27 + 99.25 96.11 93.08 89.99 86.89 83.84 80.78 77.65 74.63 71.54 + 68.51 65.51 62.48 59.54 56.62 53.67 50.86 48.01 45.28 42.54 + 39.88 37.28 34.64 32.01 29.38 26.53 23.49 20.16 17.16 15.81 + 15.14 14.52 13.75 13.03 12.40 11.79 11.23 10.70 10.23 9.79 + 9.36 8.75 8.21 7.79 7.65 7.70 7.74 7.69 7.53 7.28 + 7.12 6.91 6.76 6.67 6.57 6.44 6.40 6.27 6.09 5.94 + 5.83 5.76 5.67 5.59 5.51 5.43 5.37 5.31 5.26 5.21 + 5.16 5.12 5.05 5.00 4.92 4.87 4.83 4.82 4.81 4.81 + 4.81 4.80 4.79 4.76 4.74 4.71 4.68 4.67 4.66 4.59 + 4.54 4.52 4.51 4.52 4.52 4.53 4.53 4.53 4.53 4.53 + 4.52 4.53 4.54 4.56 4.57 4.59 4.60 4.62 4.65 4.71 + 4.74 4.76 4.78 4.80 4.83 4.85 4.85 4.86 4.86 4.87 + 4.85 +208.12 208.12 208.09 208.01 207.80 207.60 207.29 206.95 206.53 206.08 + 205.50 204.90 204.23 203.50 202.72 201.87 200.92 199.95 198.89 197.82 + 196.65 195.50 194.18 192.85 191.48 190.03 188.55 187.01 185.42 183.83 + 182.13 180.40 178.62 176.80 174.91 173.03 171.04 169.02 167.01 164.97 + 162.83 160.66 158.54 156.35 154.07 151.78 149.53 147.21 144.81 142.48 + 140.14 137.69 135.28 132.86 130.38 127.94 125.47 122.91 120.48 117.98 + 115.47 112.96 110.47 107.94 105.45 102.92 100.41 97.95 95.43 92.94 + 90.45 87.97 85.53 83.04 80.60 78.15 75.68 73.21 70.74 68.30 + 65.77 63.30 60.71 58.01 55.31 52.56 49.88 47.50 45.70 44.39 + 43.15 42.01 40.86 39.45 38.07 36.75 35.44 34.16 32.96 31.77 + 30.64 29.53 28.47 27.45 26.49 25.52 24.49 23.34 22.04 21.10 + 20.37 19.53 19.03 18.55 18.00 17.39 16.63 16.03 15.66 15.26 + 14.92 14.53 13.99 13.44 13.00 12.55 12.14 11.77 11.47 11.19 + 10.86 10.52 10.18 9.80 9.36 8.97 8.64 8.37 8.10 7.85 + 7.60 7.37 7.07 6.79 6.60 6.44 6.27 6.13 6.02 5.94 + 5.75 5.60 5.61 5.50 5.45 5.43 5.39 5.32 5.23 5.10 + 4.99 4.91 4.89 4.90 4.87 4.86 4.84 4.82 4.81 4.81 + 4.82 4.83 4.84 4.86 4.89 4.92 4.93 4.94 4.95 4.95 + 4.85 +208.17 208.23 208.22 208.15 208.01 207.84 207.62 207.33 207.00 206.58 + 206.14 205.56 205.00 204.33 203.65 202.88 202.12 201.25 200.36 199.43 + 198.41 197.35 196.26 195.11 193.90 192.64 191.38 190.02 188.65 187.24 + 185.78 184.27 182.71 181.16 179.53 177.85 176.17 174.44 172.66 170.87 + 169.04 167.19 165.34 163.43 161.49 159.53 157.56 155.53 153.53 151.50 + 149.42 147.37 145.25 143.14 141.04 138.88 136.71 134.56 132.40 130.24 + 128.06 125.84 123.69 121.54 119.34 117.21 115.01 112.82 110.67 108.50 + 106.36 104.23 102.09 100.02 97.90 95.74 93.65 91.46 89.32 87.09 + 84.86 82.58 80.24 77.91 75.62 73.32 71.19 69.32 67.69 66.17 + 64.68 63.29 61.90 60.29 58.67 57.06 55.47 53.89 52.33 50.81 + 49.36 47.86 46.45 45.04 43.68 42.33 40.99 39.69 38.41 37.13 + 35.94 34.73 33.57 32.44 31.31 30.25 29.19 28.10 26.44 25.07 + 24.22 23.48 23.03 22.33 21.48 20.47 19.44 18.65 17.77 17.15 + 16.77 16.28 15.69 14.74 13.74 13.47 13.24 12.87 12.38 11.86 + 11.37 10.86 10.32 9.85 9.43 9.06 8.70 8.35 8.05 7.77 + 7.53 7.31 7.06 6.83 6.62 6.31 6.10 5.95 5.85 5.70 + 5.58 5.65 5.57 5.40 5.25 5.28 5.28 5.21 5.08 4.98 + 5.02 5.03 5.03 5.01 5.01 5.02 5.03 5.03 5.03 5.04 + 4.85 +210.93 211.10 211.12 211.20 211.18 211.09 210.98 210.81 210.56 210.28 + 209.92 209.51 209.07 208.54 207.97 207.35 206.66 205.94 205.14 204.36 + 203.47 202.58 201.59 200.56 199.50 198.37 197.25 196.04 194.80 193.51 + 192.17 190.83 189.42 187.99 186.51 184.98 183.44 181.84 180.23 178.57 + 176.89 175.20 173.44 171.68 169.93 168.06 166.20 164.32 162.45 160.51 + 158.58 156.61 154.69 152.66 150.67 148.70 146.63 144.55 142.50 140.43 + 138.34 136.25 134.15 132.05 129.97 127.84 125.75 123.65 121.52 119.42 + 117.31 115.19 113.13 111.01 108.95 106.88 104.80 102.78 100.73 98.64 + 96.69 94.64 92.62 90.68 88.66 86.71 84.83 82.88 80.93 79.08 + 77.22 75.31 73.48 71.69 69.90 68.13 66.38 64.65 62.95 61.26 + 59.60 57.95 56.32 54.75 53.19 51.64 50.12 48.65 47.21 45.75 + 44.35 42.93 41.59 40.24 38.96 37.66 36.41 35.21 33.98 32.79 + 31.65 30.47 29.38 28.30 27.18 26.14 25.13 24.09 23.13 22.19 + 21.22 20.33 19.45 18.53 17.71 16.90 16.09 15.40 14.64 13.94 + 13.30 12.76 12.29 11.84 11.32 10.75 10.22 9.76 9.22 8.80 + 8.47 8.25 8.18 8.00 7.81 7.57 7.22 6.90 6.63 6.39 + 6.35 6.38 6.37 6.25 6.13 6.02 5.92 5.83 5.74 5.66 + 5.56 5.52 5.45 5.41 5.37 5.34 5.30 5.28 5.27 5.26 + 4.85 +210.12 210.25 210.31 210.35 210.34 210.22 210.07 209.89 209.62 209.27 + 208.87 208.44 207.97 207.37 206.78 206.13 205.42 204.63 203.76 202.93 + 201.94 200.97 199.96 198.88 197.69 196.51 195.31 194.03 192.70 191.33 + 189.88 188.45 186.94 185.42 183.84 182.23 180.57 178.89 177.17 175.39 + 173.57 171.83 169.95 168.05 166.14 164.23 162.27 160.26 158.30 156.25 + 154.23 152.12 150.04 147.94 145.85 143.72 141.55 139.41 137.25 135.07 + 132.90 130.69 128.53 126.34 124.16 121.95 119.77 117.59 115.42 113.20 + 111.06 108.91 106.75 104.59 102.48 100.36 98.22 96.09 94.04 91.85 + 89.70 87.56 85.35 83.03 80.77 78.55 76.34 74.16 72.30 70.64 + 69.05 67.55 66.12 64.65 63.06 61.36 59.65 58.02 56.41 54.79 + 53.25 51.71 50.20 48.74 47.28 45.86 44.41 42.93 41.37 39.60 + 37.71 35.50 33.31 31.06 29.50 28.34 27.07 25.85 25.93 26.63 + 25.98 25.11 24.10 23.20 22.36 21.68 21.12 20.59 20.07 19.51 + 18.88 18.26 17.60 16.96 16.38 15.80 15.24 14.66 14.12 13.55 + 12.99 12.42 11.82 11.25 10.73 10.28 9.89 9.52 9.16 8.82 + 8.52 8.23 7.98 7.75 7.54 7.32 7.12 6.92 6.73 6.58 + 6.43 6.31 6.18 6.07 5.96 5.85 5.76 5.67 5.56 5.49 + 5.41 5.33 5.29 5.27 5.23 5.21 5.19 5.17 5.16 5.15 + 4.85 +209.37 209.45 209.51 209.44 209.34 209.15 208.95 208.62 208.26 207.87 + 207.38 206.83 206.20 205.49 204.77 203.98 203.08 202.21 201.20 200.13 + 199.04 197.84 196.64 195.35 194.03 192.64 191.21 189.67 188.12 186.53 + 184.86 183.12 181.38 179.58 177.74 175.91 173.95 171.96 169.95 167.87 + 165.75 163.68 161.52 159.28 157.11 154.84 152.53 150.24 147.91 145.52 + 143.19 140.74 138.34 135.85 133.42 131.00 128.51 126.00 123.53 121.03 + 118.50 116.01 113.52 111.00 108.51 105.99 103.50 101.02 98.51 96.01 + 93.56 91.06 88.62 86.12 83.68 81.22 78.73 76.32 73.85 71.33 + 68.88 66.31 63.68 61.09 58.28 55.49 52.80 50.16 47.86 46.37 + 45.12 43.92 42.83 41.56 40.19 38.84 37.50 36.23 34.75 32.45 + 29.36 26.46 26.30 27.77 27.61 26.58 25.50 24.45 23.45 22.51 + 21.63 20.85 20.20 19.64 19.08 18.51 17.98 17.53 17.08 16.66 + 16.22 15.77 15.35 14.92 14.48 14.03 13.52 13.01 12.58 12.20 + 11.82 11.46 11.08 10.68 10.30 9.95 9.65 9.39 9.11 8.85 + 8.60 8.36 8.12 7.89 7.69 7.50 7.33 7.17 7.00 6.83 + 6.66 6.49 6.34 6.22 6.11 6.00 5.89 5.80 5.71 5.63 + 5.56 5.49 5.44 5.38 5.32 5.24 5.19 5.15 5.12 5.08 + 5.05 5.04 5.03 5.02 5.01 5.00 5.01 5.01 4.99 4.99 + 4.85 +208.89 208.96 208.96 208.84 208.70 208.49 208.17 207.79 207.31 206.81 + 206.23 205.55 204.83 204.06 203.18 202.20 201.20 200.17 199.05 197.86 + 196.57 195.22 193.83 192.39 190.83 189.26 187.63 185.92 184.15 182.30 + 180.43 178.49 176.51 174.45 172.37 170.19 167.98 165.74 163.44 161.09 + 158.70 156.30 153.76 151.22 148.69 146.09 143.43 140.73 138.01 135.27 + 132.46 129.62 126.75 123.91 120.96 118.04 115.03 112.07 109.08 106.04 + 103.00 99.93 96.87 93.81 90.75 87.63 84.56 81.50 78.43 75.33 + 72.33 69.31 66.27 63.29 60.32 57.37 54.47 51.58 48.79 46.01 + 43.25 40.59 37.96 35.24 32.55 29.87 27.03 23.78 20.45 17.57 + 16.28 15.66 15.04 14.26 13.29 11.40 11.65 11.21 10.63 10.16 + 9.92 9.79 9.65 9.31 8.99 8.77 8.69 8.59 8.47 8.35 + 8.23 8.08 7.84 7.60 7.43 7.30 7.16 7.03 6.90 6.79 + 6.77 6.67 6.58 6.49 6.40 6.31 6.21 6.13 6.05 5.98 + 5.92 5.87 5.81 5.75 5.70 5.64 5.59 5.53 5.49 5.45 + 5.39 5.35 5.29 5.26 5.22 5.18 5.13 5.04 5.00 4.95 + 4.91 4.89 4.89 4.87 4.86 4.85 4.85 4.84 4.83 4.82 + 4.81 4.80 4.79 4.79 4.79 4.78 4.78 4.79 4.81 4.82 + 4.83 4.85 4.86 4.86 4.87 4.88 4.89 4.89 4.88 4.88 + 4.85 +208.39 208.36 208.29 208.14 207.90 207.56 207.20 206.74 206.19 205.59 + 204.93 204.17 203.39 202.49 201.51 200.47 199.38 198.21 196.96 195.64 + 194.28 192.81 191.33 189.77 188.13 186.42 184.66 182.85 180.96 178.98 + 176.97 174.88 172.77 170.63 168.33 166.08 163.74 161.32 158.87 156.33 + 153.74 151.19 148.52 145.77 143.10 140.30 137.42 134.55 131.63 128.66 + 125.64 122.57 119.48 116.30 113.14 109.95 106.70 103.36 100.11 96.71 + 93.28 89.83 86.42 82.94 79.50 75.94 72.38 68.87 65.29 61.69 + 58.15 54.55 51.01 47.37 43.84 40.28 36.75 33.34 29.95 26.60 + 23.49 20.38 17.41 14.69 12.10 9.75 7.73 5.95 4.57 3.63 + 3.10 3.08 3.11 3.15 3.21 3.30 3.44 3.60 3.63 3.63 + 3.66 3.77 3.81 3.85 3.88 3.90 3.91 3.94 3.95 3.97 + 3.96 3.94 3.95 3.97 4.00 4.01 4.03 4.05 4.04 4.00 + 4.05 4.14 4.16 4.19 4.20 4.22 4.24 4.25 4.27 4.29 + 4.31 4.32 4.33 4.34 4.35 4.36 4.37 4.39 4.39 4.40 + 4.40 4.39 4.39 4.39 4.39 4.41 4.40 4.39 4.38 4.39 + 4.40 4.41 4.44 4.45 4.46 4.48 4.51 4.52 4.54 4.57 + 4.59 4.59 4.60 4.63 4.64 4.65 4.68 4.74 4.79 4.81 + 4.81 4.83 4.84 4.85 4.85 4.86 4.85 4.85 4.84 4.85 + 4.85 diff --git a/_downloads/bd1a87f860907a225ffe52eff6c87bcc/dgr_shape_to_loft.hda b/_downloads/bd1a87f860907a225ffe52eff6c87bcc/dgr_shape_to_loft.hda new file mode 100644 index 000000000..ae5ae8fdd Binary files /dev/null and b/_downloads/bd1a87f860907a225ffe52eff6c87bcc/dgr_shape_to_loft.hda differ diff --git a/_images/adding_light_fixtures_01.jpg b/_images/adding_light_fixtures_01.jpg new file mode 100644 index 000000000..8e0c519ef Binary files /dev/null and b/_images/adding_light_fixtures_01.jpg differ diff --git a/_images/adding_light_fixtures_02.jpg b/_images/adding_light_fixtures_02.jpg new file mode 100644 index 000000000..fca53af85 Binary files /dev/null and b/_images/adding_light_fixtures_02.jpg differ diff --git a/_images/adding_light_fixtures_03.jpg b/_images/adding_light_fixtures_03.jpg new file mode 100644 index 000000000..a2f0f18ba Binary files /dev/null and b/_images/adding_light_fixtures_03.jpg differ diff --git a/_images/adding_light_fixtures_04.jpg b/_images/adding_light_fixtures_04.jpg new file mode 100644 index 000000000..7857ccf4f Binary files /dev/null and b/_images/adding_light_fixtures_04.jpg differ diff --git a/_images/adding_light_fixtures_05.jpg b/_images/adding_light_fixtures_05.jpg new file mode 100644 index 000000000..fe4edf5b6 Binary files /dev/null and b/_images/adding_light_fixtures_05.jpg differ diff --git a/_images/adding_light_fixtures_06.jpg b/_images/adding_light_fixtures_06.jpg new file mode 100644 index 000000000..9fc3c19e0 Binary files /dev/null and b/_images/adding_light_fixtures_06.jpg differ diff --git a/_images/adding_light_fixtures_07.jpg b/_images/adding_light_fixtures_07.jpg new file mode 100644 index 000000000..8cddbb30c Binary files /dev/null and b/_images/adding_light_fixtures_07.jpg differ diff --git a/_images/ao_baker_01.png b/_images/ao_baker_01.png new file mode 100644 index 000000000..901323e6c Binary files /dev/null and b/_images/ao_baker_01.png differ diff --git a/_images/ao_baker_02.png b/_images/ao_baker_02.png new file mode 100644 index 000000000..e08a83bd2 Binary files /dev/null and b/_images/ao_baker_02.png differ diff --git a/_images/ao_baker_03.png b/_images/ao_baker_03.png new file mode 100644 index 000000000..a1c5add45 Binary files /dev/null and b/_images/ao_baker_03.png differ diff --git a/_images/ao_baker_04.png b/_images/ao_baker_04.png new file mode 100644 index 000000000..e83e7df05 Binary files /dev/null and b/_images/ao_baker_04.png differ diff --git a/_images/ao_baker_05.png b/_images/ao_baker_05.png new file mode 100644 index 000000000..77db5f3e7 Binary files /dev/null and b/_images/ao_baker_05.png differ diff --git a/_images/ao_baker_06.png b/_images/ao_baker_06.png new file mode 100644 index 000000000..2c4aefdde Binary files /dev/null and b/_images/ao_baker_06.png differ diff --git a/_images/ao_baker_07.png b/_images/ao_baker_07.png new file mode 100644 index 000000000..5b8b5b260 Binary files /dev/null and b/_images/ao_baker_07.png differ diff --git a/_images/av_ambient_wind_settings.jpg b/_images/av_ambient_wind_settings.jpg new file mode 100644 index 000000000..59deba307 Binary files /dev/null and b/_images/av_ambient_wind_settings.jpg differ diff --git a/_images/av_comp_edit_01.jpg b/_images/av_comp_edit_01.jpg new file mode 100644 index 000000000..8dd09caf8 Binary files /dev/null and b/_images/av_comp_edit_01.jpg differ diff --git a/_images/av_comp_edit_02.jpg b/_images/av_comp_edit_02.jpg new file mode 100644 index 000000000..4e1a234e5 Binary files /dev/null and b/_images/av_comp_edit_02.jpg differ diff --git a/_images/av_comp_edit_03.jpg b/_images/av_comp_edit_03.jpg new file mode 100644 index 000000000..2abaf8750 Binary files /dev/null and b/_images/av_comp_edit_03.jpg differ diff --git a/_images/av_comp_edit_04.jpg b/_images/av_comp_edit_04.jpg new file mode 100644 index 000000000..ccb3626be Binary files /dev/null and b/_images/av_comp_edit_04.jpg differ diff --git a/_images/av_comp_edit_05.jpg b/_images/av_comp_edit_05.jpg new file mode 100644 index 000000000..c106eb9ea Binary files /dev/null and b/_images/av_comp_edit_05.jpg differ diff --git a/_images/av_comp_edit_06.jpg b/_images/av_comp_edit_06.jpg new file mode 100644 index 000000000..c2fb22280 Binary files /dev/null and b/_images/av_comp_edit_06.jpg differ diff --git a/_images/av_comp_edit_07.jpg b/_images/av_comp_edit_07.jpg new file mode 100644 index 000000000..e3b8a0b0d Binary files /dev/null and b/_images/av_comp_edit_07.jpg differ diff --git a/_images/av_comp_edit_08.jpg b/_images/av_comp_edit_08.jpg new file mode 100644 index 000000000..fc8996672 Binary files /dev/null and b/_images/av_comp_edit_08.jpg differ diff --git a/_images/av_comp_edit_09.jpg b/_images/av_comp_edit_09.jpg new file mode 100644 index 000000000..f1f7465e2 Binary files /dev/null and b/_images/av_comp_edit_09.jpg differ diff --git a/_images/av_comp_edit_10.jpg b/_images/av_comp_edit_10.jpg new file mode 100644 index 000000000..055189e97 Binary files /dev/null and b/_images/av_comp_edit_10.jpg differ diff --git a/_images/av_control_panel.jpg b/_images/av_control_panel.jpg new file mode 100644 index 000000000..1fb88ccc1 Binary files /dev/null and b/_images/av_control_panel.jpg differ diff --git a/_images/av_control_panel_1.jpg b/_images/av_control_panel_1.jpg new file mode 100644 index 000000000..9742121a3 Binary files /dev/null and b/_images/av_control_panel_1.jpg differ diff --git a/_images/av_custom_gizmo_1.jpg b/_images/av_custom_gizmo_1.jpg new file mode 100644 index 000000000..ebf5c49d5 Binary files /dev/null and b/_images/av_custom_gizmo_1.jpg differ diff --git a/_images/av_custom_gizmo_2.jpg b/_images/av_custom_gizmo_2.jpg new file mode 100644 index 000000000..15d232770 Binary files /dev/null and b/_images/av_custom_gizmo_2.jpg differ diff --git a/_images/av_custom_grid_1.jpg b/_images/av_custom_grid_1.jpg new file mode 100644 index 000000000..84f6f8b40 Binary files /dev/null and b/_images/av_custom_grid_1.jpg differ diff --git a/_images/av_custom_grid_2.jpg b/_images/av_custom_grid_2.jpg new file mode 100644 index 000000000..c2bd44fe4 Binary files /dev/null and b/_images/av_custom_grid_2.jpg differ diff --git a/_images/av_debug_settings.jpg b/_images/av_debug_settings.jpg new file mode 100644 index 000000000..359e31a05 Binary files /dev/null and b/_images/av_debug_settings.jpg differ diff --git a/_images/av_envi_textures.jpg b/_images/av_envi_textures.jpg new file mode 100644 index 000000000..3676b547f Binary files /dev/null and b/_images/av_envi_textures.jpg differ diff --git a/_images/av_export.jpg b/_images/av_export.jpg new file mode 100644 index 000000000..2a2a9fc30 Binary files /dev/null and b/_images/av_export.jpg differ diff --git a/_images/av_export_2.jpg b/_images/av_export_2.jpg new file mode 100644 index 000000000..920ca5798 Binary files /dev/null and b/_images/av_export_2.jpg differ diff --git a/_images/av_navigation_info.jpg b/_images/av_navigation_info.jpg new file mode 100644 index 000000000..38e7b9795 Binary files /dev/null and b/_images/av_navigation_info.jpg differ diff --git a/_images/av_properties_1.jpg b/_images/av_properties_1.jpg new file mode 100644 index 000000000..9cd3bc692 Binary files /dev/null and b/_images/av_properties_1.jpg differ diff --git a/_images/av_properties_2.jpg b/_images/av_properties_2.jpg new file mode 100644 index 000000000..4462bc398 Binary files /dev/null and b/_images/av_properties_2.jpg differ diff --git a/_images/av_properties_3.jpg b/_images/av_properties_3.jpg new file mode 100644 index 000000000..7d1b986d4 Binary files /dev/null and b/_images/av_properties_3.jpg differ diff --git a/_images/av_properties_panel.jpg b/_images/av_properties_panel.jpg new file mode 100644 index 000000000..7b9d6f558 Binary files /dev/null and b/_images/av_properties_panel.jpg differ diff --git a/_images/av_rest_settings.jpg b/_images/av_rest_settings.jpg new file mode 100644 index 000000000..b6f85e9c1 Binary files /dev/null and b/_images/av_rest_settings.jpg differ diff --git a/_images/av_select.jpg b/_images/av_select.jpg new file mode 100644 index 000000000..cbb62218e Binary files /dev/null and b/_images/av_select.jpg differ diff --git a/_images/av_sky_weather_settings.jpg b/_images/av_sky_weather_settings.jpg new file mode 100644 index 000000000..ee4b6f38c Binary files /dev/null and b/_images/av_sky_weather_settings.jpg differ diff --git a/_images/av_stats_display.jpg b/_images/av_stats_display.jpg new file mode 100644 index 000000000..ca7e54d03 Binary files /dev/null and b/_images/av_stats_display.jpg differ diff --git a/_images/av_stats_settings_1.jpg b/_images/av_stats_settings_1.jpg new file mode 100644 index 000000000..324e6666c Binary files /dev/null and b/_images/av_stats_settings_1.jpg differ diff --git a/_images/av_stats_settings_2.jpg b/_images/av_stats_settings_2.jpg new file mode 100644 index 000000000..05d7dfca3 Binary files /dev/null and b/_images/av_stats_settings_2.jpg differ diff --git a/_images/av_stats_settings_3.jpg b/_images/av_stats_settings_3.jpg new file mode 100644 index 000000000..4b9dd8955 Binary files /dev/null and b/_images/av_stats_settings_3.jpg differ diff --git a/_images/av_sun_settings.jpg b/_images/av_sun_settings.jpg new file mode 100644 index 000000000..687bf254b Binary files /dev/null and b/_images/av_sun_settings.jpg differ diff --git a/_images/av_viewport_settings.jpg b/_images/av_viewport_settings.jpg new file mode 100644 index 000000000..46bf92efa Binary files /dev/null and b/_images/av_viewport_settings.jpg differ diff --git a/_images/av_viewport_settings_panel.jpg b/_images/av_viewport_settings_panel.jpg new file mode 100644 index 000000000..6d218800e Binary files /dev/null and b/_images/av_viewport_settings_panel.jpg differ diff --git a/_images/bake.png b/_images/bake.png new file mode 100644 index 000000000..0c2171f9e Binary files /dev/null and b/_images/bake.png differ diff --git a/_images/batch_exp_col_joined.png b/_images/batch_exp_col_joined.png new file mode 100644 index 000000000..c2e81612c Binary files /dev/null and b/_images/batch_exp_col_joined.png differ diff --git a/_images/batch_exp_col_separated.png b/_images/batch_exp_col_separated.png new file mode 100644 index 000000000..57061f028 Binary files /dev/null and b/_images/batch_exp_col_separated.png differ diff --git a/_images/batch_exp_sel_joined.png b/_images/batch_exp_sel_joined.png new file mode 100644 index 000000000..73c1b67cb Binary files /dev/null and b/_images/batch_exp_sel_joined.png differ diff --git a/_images/batch_exp_sel_separated.png b/_images/batch_exp_sel_separated.png new file mode 100644 index 000000000..ec135c4ff Binary files /dev/null and b/_images/batch_exp_sel_separated.png differ diff --git a/_images/batch_exp_visible.png b/_images/batch_exp_visible.png new file mode 100644 index 000000000..866273ad2 Binary files /dev/null and b/_images/batch_exp_visible.png differ diff --git a/_images/batch_imp.png b/_images/batch_imp.png new file mode 100644 index 000000000..7a4b94f55 Binary files /dev/null and b/_images/batch_imp.png differ diff --git a/_images/batch_imp_add_feat.png b/_images/batch_imp_add_feat.png new file mode 100644 index 000000000..cd3c0ef69 Binary files /dev/null and b/_images/batch_imp_add_feat.png differ diff --git a/_images/biohazard.png b/_images/biohazard.png new file mode 100644 index 000000000..d9e8bca02 Binary files /dev/null and b/_images/biohazard.png differ diff --git a/_images/check_deg_faces_01.png b/_images/check_deg_faces_01.png new file mode 100644 index 000000000..a3869c739 Binary files /dev/null and b/_images/check_deg_faces_01.png differ diff --git a/_images/check_deg_faces_02.png b/_images/check_deg_faces_02.png new file mode 100644 index 000000000..75fb8af22 Binary files /dev/null and b/_images/check_deg_faces_02.png differ diff --git a/_images/check_deg_faces_03.png b/_images/check_deg_faces_03.png new file mode 100644 index 000000000..3cda5633d Binary files /dev/null and b/_images/check_deg_faces_03.png differ diff --git a/_images/climbable_ladders_01.jpg b/_images/climbable_ladders_01.jpg new file mode 100644 index 000000000..d4155fe69 Binary files /dev/null and b/_images/climbable_ladders_01.jpg differ diff --git a/_images/climbable_ladders_02.jpg b/_images/climbable_ladders_02.jpg new file mode 100644 index 000000000..cc8d3ee3e Binary files /dev/null and b/_images/climbable_ladders_02.jpg differ diff --git a/_images/climbable_ladders_03.jpg b/_images/climbable_ladders_03.jpg new file mode 100644 index 000000000..98b0de248 Binary files /dev/null and b/_images/climbable_ladders_03.jpg differ diff --git a/_images/climbable_ladders_04.jpg b/_images/climbable_ladders_04.jpg new file mode 100644 index 000000000..f79c73087 Binary files /dev/null and b/_images/climbable_ladders_04.jpg differ diff --git a/_images/climbable_ladders_05.jpg b/_images/climbable_ladders_05.jpg new file mode 100644 index 000000000..6534acba1 Binary files /dev/null and b/_images/climbable_ladders_05.jpg differ diff --git a/_images/climbable_ladders_06.jpg b/_images/climbable_ladders_06.jpg new file mode 100644 index 000000000..bfe106396 Binary files /dev/null and b/_images/climbable_ladders_06.jpg differ diff --git a/_images/climbable_ladders_07.jpg b/_images/climbable_ladders_07.jpg new file mode 100644 index 000000000..c8b19ffa7 Binary files /dev/null and b/_images/climbable_ladders_07.jpg differ diff --git a/_images/coll_prop.png b/_images/coll_prop.png new file mode 100644 index 000000000..f6696db26 Binary files /dev/null and b/_images/coll_prop.png differ diff --git a/_images/coll_prop_override_ex_1.png b/_images/coll_prop_override_ex_1.png new file mode 100644 index 000000000..d23df984f Binary files /dev/null and b/_images/coll_prop_override_ex_1.png differ diff --git a/_images/coll_prop_override_ex_2.png b/_images/coll_prop_override_ex_2.png new file mode 100644 index 000000000..af148b6d2 Binary files /dev/null and b/_images/coll_prop_override_ex_2.png differ diff --git a/_images/coll_prop_override_ex_3.png b/_images/coll_prop_override_ex_3.png new file mode 100644 index 000000000..2be678b23 Binary files /dev/null and b/_images/coll_prop_override_ex_3.png differ diff --git a/_images/coll_prop_override_type.png b/_images/coll_prop_override_type.png new file mode 100644 index 000000000..b9585bf3b Binary files /dev/null and b/_images/coll_prop_override_type.png differ diff --git a/_images/collision_generation_for_assets_01.jpg b/_images/collision_generation_for_assets_01.jpg new file mode 100644 index 000000000..d30853b68 Binary files /dev/null and b/_images/collision_generation_for_assets_01.jpg differ diff --git a/_images/collision_generation_for_assets_02.jpg b/_images/collision_generation_for_assets_02.jpg new file mode 100644 index 000000000..6989fd29f Binary files /dev/null and b/_images/collision_generation_for_assets_02.jpg differ diff --git a/_images/collision_generation_for_assets_03.jpg b/_images/collision_generation_for_assets_03.jpg new file mode 100644 index 000000000..1e83fdf4d Binary files /dev/null and b/_images/collision_generation_for_assets_03.jpg differ diff --git a/_images/collision_generation_for_assets_04.jpg b/_images/collision_generation_for_assets_04.jpg new file mode 100644 index 000000000..e013258b1 Binary files /dev/null and b/_images/collision_generation_for_assets_04.jpg differ diff --git a/_images/collision_generation_for_assets_05.jpg b/_images/collision_generation_for_assets_05.jpg new file mode 100644 index 000000000..83f618a2d Binary files /dev/null and b/_images/collision_generation_for_assets_05.jpg differ diff --git a/_images/collision_generation_for_assets_06.jpg b/_images/collision_generation_for_assets_06.jpg new file mode 100644 index 000000000..f7fc5fd53 Binary files /dev/null and b/_images/collision_generation_for_assets_06.jpg differ diff --git a/_images/collision_generation_for_assets_07.jpg b/_images/collision_generation_for_assets_07.jpg new file mode 100644 index 000000000..d836caa0f Binary files /dev/null and b/_images/collision_generation_for_assets_07.jpg differ diff --git a/_images/collision_generation_for_assets_08.jpg b/_images/collision_generation_for_assets_08.jpg new file mode 100644 index 000000000..ba042eda4 Binary files /dev/null and b/_images/collision_generation_for_assets_08.jpg differ diff --git a/_images/collision_generation_for_assets_09.jpg b/_images/collision_generation_for_assets_09.jpg new file mode 100644 index 000000000..b378b66cc Binary files /dev/null and b/_images/collision_generation_for_assets_09.jpg differ diff --git a/_images/collision_generation_for_assets_10.jpg b/_images/collision_generation_for_assets_10.jpg new file mode 100644 index 000000000..355d9c5ca Binary files /dev/null and b/_images/collision_generation_for_assets_10.jpg differ diff --git a/_images/collision_generation_for_assets_11.jpg b/_images/collision_generation_for_assets_11.jpg new file mode 100644 index 000000000..3604c9199 Binary files /dev/null and b/_images/collision_generation_for_assets_11.jpg differ diff --git a/_images/collision_generation_for_assets_12.jpg b/_images/collision_generation_for_assets_12.jpg new file mode 100644 index 000000000..fa8e072e7 Binary files /dev/null and b/_images/collision_generation_for_assets_12.jpg differ diff --git a/_images/collision_generation_for_assets_13.jpg b/_images/collision_generation_for_assets_13.jpg new file mode 100644 index 000000000..62bf9b47f Binary files /dev/null and b/_images/collision_generation_for_assets_13.jpg differ diff --git a/_images/comp_blk_child.jpg b/_images/comp_blk_child.jpg new file mode 100644 index 000000000..ac7ce1c9e Binary files /dev/null and b/_images/comp_blk_child.jpg differ diff --git a/_images/comp_blk_editor_view.jpg b/_images/comp_blk_editor_view.jpg new file mode 100644 index 000000000..4b1d0f867 Binary files /dev/null and b/_images/comp_blk_editor_view.jpg differ diff --git a/_images/comp_blk_in_game_view.jpg b/_images/comp_blk_in_game_view.jpg new file mode 100644 index 000000000..dd2bfe8bc Binary files /dev/null and b/_images/comp_blk_in_game_view.jpg differ diff --git a/_images/comp_blk_interior_1.jpg b/_images/comp_blk_interior_1.jpg new file mode 100644 index 000000000..64fcfe6d9 Binary files /dev/null and b/_images/comp_blk_interior_1.jpg differ diff --git a/_images/comp_blk_interior_2.jpg b/_images/comp_blk_interior_2.jpg new file mode 100644 index 000000000..cf2a3209c Binary files /dev/null and b/_images/comp_blk_interior_2.jpg differ diff --git a/_images/comp_blk_interior_3.jpg b/_images/comp_blk_interior_3.jpg new file mode 100644 index 000000000..c3e66c74a Binary files /dev/null and b/_images/comp_blk_interior_3.jpg differ diff --git a/_images/comp_blk_interior_4.jpg b/_images/comp_blk_interior_4.jpg new file mode 100644 index 000000000..6faa4befc Binary files /dev/null and b/_images/comp_blk_interior_4.jpg differ diff --git a/_images/comp_blk_object_prop.jpg b/_images/comp_blk_object_prop.jpg new file mode 100644 index 000000000..b2f96c58c Binary files /dev/null and b/_images/comp_blk_object_prop.jpg differ diff --git a/_images/comp_blk_option_1.jpg b/_images/comp_blk_option_1.jpg new file mode 100644 index 000000000..28e1c8f34 Binary files /dev/null and b/_images/comp_blk_option_1.jpg differ diff --git a/_images/comp_blk_option_2.jpg b/_images/comp_blk_option_2.jpg new file mode 100644 index 000000000..aa1b9a0a3 Binary files /dev/null and b/_images/comp_blk_option_2.jpg differ diff --git a/_images/comp_blk_option_3.jpg b/_images/comp_blk_option_3.jpg new file mode 100644 index 000000000..2bb66127c Binary files /dev/null and b/_images/comp_blk_option_3.jpg differ diff --git a/_images/comp_blk_option_4.jpg b/_images/comp_blk_option_4.jpg new file mode 100644 index 000000000..899ee7666 Binary files /dev/null and b/_images/comp_blk_option_4.jpg differ diff --git a/_images/comp_blk_option_5.jpg b/_images/comp_blk_option_5.jpg new file mode 100644 index 000000000..dd079245b Binary files /dev/null and b/_images/comp_blk_option_5.jpg differ diff --git a/_images/comp_blk_option_6.jpg b/_images/comp_blk_option_6.jpg new file mode 100644 index 000000000..5fd12a6f9 Binary files /dev/null and b/_images/comp_blk_option_6.jpg differ diff --git a/_images/comp_blk_option_7.jpg b/_images/comp_blk_option_7.jpg new file mode 100644 index 000000000..e9ddf7d5d Binary files /dev/null and b/_images/comp_blk_option_7.jpg differ diff --git a/_images/comp_blk_option_8.jpg b/_images/comp_blk_option_8.jpg new file mode 100644 index 000000000..3740b8f9c Binary files /dev/null and b/_images/comp_blk_option_8.jpg differ diff --git a/_images/comp_blk_parent.jpg b/_images/comp_blk_parent.jpg new file mode 100644 index 000000000..e24101864 Binary files /dev/null and b/_images/comp_blk_parent.jpg differ diff --git a/_images/comp_blk_place_type_1.jpg b/_images/comp_blk_place_type_1.jpg new file mode 100644 index 000000000..14ff89e97 Binary files /dev/null and b/_images/comp_blk_place_type_1.jpg differ diff --git a/_images/comp_blk_place_type_2.jpg b/_images/comp_blk_place_type_2.jpg new file mode 100644 index 000000000..e16ecb4db Binary files /dev/null and b/_images/comp_blk_place_type_2.jpg differ diff --git a/_images/comp_blk_place_type_3.jpg b/_images/comp_blk_place_type_3.jpg new file mode 100644 index 000000000..a90a0b823 Binary files /dev/null and b/_images/comp_blk_place_type_3.jpg differ diff --git a/_images/comp_blk_place_type_4.jpg b/_images/comp_blk_place_type_4.jpg new file mode 100644 index 000000000..3fa53feb8 Binary files /dev/null and b/_images/comp_blk_place_type_4.jpg differ diff --git a/_images/comp_blk_place_type_5.jpg b/_images/comp_blk_place_type_5.jpg new file mode 100644 index 000000000..44e0a7703 Binary files /dev/null and b/_images/comp_blk_place_type_5.jpg differ diff --git a/_images/comp_blk_place_type_6.jpg b/_images/comp_blk_place_type_6.jpg new file mode 100644 index 000000000..2613995de Binary files /dev/null and b/_images/comp_blk_place_type_6.jpg differ diff --git a/_images/comp_blk_place_type_6_1.jpg b/_images/comp_blk_place_type_6_1.jpg new file mode 100644 index 000000000..932b46ad2 Binary files /dev/null and b/_images/comp_blk_place_type_6_1.jpg differ diff --git a/_images/comp_blk_place_type_6_2.jpg b/_images/comp_blk_place_type_6_2.jpg new file mode 100644 index 000000000..fadea28b5 Binary files /dev/null and b/_images/comp_blk_place_type_6_2.jpg differ diff --git a/_images/comp_blk_table_cup.jpg b/_images/comp_blk_table_cup.jpg new file mode 100644 index 000000000..c5cc9fb4d Binary files /dev/null and b/_images/comp_blk_table_cup.jpg differ diff --git a/_images/comp_blk_using_3ds_max.jpg b/_images/comp_blk_using_3ds_max.jpg new file mode 100644 index 000000000..911b787df Binary files /dev/null and b/_images/comp_blk_using_3ds_max.jpg differ diff --git a/_images/comp_blk_using_editor.jpg b/_images/comp_blk_using_editor.jpg new file mode 100644 index 000000000..f46d71fb9 Binary files /dev/null and b/_images/comp_blk_using_editor.jpg differ diff --git a/_images/comp_editor.png b/_images/comp_editor.png new file mode 100644 index 000000000..de819f399 Binary files /dev/null and b/_images/comp_editor.png differ diff --git a/_images/create_mission_wt_1.jpg b/_images/create_mission_wt_1.jpg new file mode 100644 index 000000000..87da7ded3 Binary files /dev/null and b/_images/create_mission_wt_1.jpg differ diff --git a/_images/create_mission_wt_2.jpg b/_images/create_mission_wt_2.jpg new file mode 100644 index 000000000..f9b77c49c Binary files /dev/null and b/_images/create_mission_wt_2.jpg differ diff --git a/_images/create_mission_wt_3.jpg b/_images/create_mission_wt_3.jpg new file mode 100644 index 000000000..c952e0436 Binary files /dev/null and b/_images/create_mission_wt_3.jpg differ diff --git a/_images/create_mission_wt_4.png b/_images/create_mission_wt_4.png new file mode 100644 index 000000000..5eaab4454 Binary files /dev/null and b/_images/create_mission_wt_4.png differ diff --git a/_images/create_mission_wt_5.jpg b/_images/create_mission_wt_5.jpg new file mode 100644 index 000000000..1df0967b6 Binary files /dev/null and b/_images/create_mission_wt_5.jpg differ diff --git a/_images/create_mission_wt_6.jpg b/_images/create_mission_wt_6.jpg new file mode 100644 index 000000000..bdaa72b13 Binary files /dev/null and b/_images/create_mission_wt_6.jpg differ diff --git a/_images/create_mission_wt_7.jpg b/_images/create_mission_wt_7.jpg new file mode 100644 index 000000000..50ac2bd99 Binary files /dev/null and b/_images/create_mission_wt_7.jpg differ diff --git a/_images/custom_group_exp_01.png b/_images/custom_group_exp_01.png new file mode 100644 index 000000000..b98d8150f Binary files /dev/null and b/_images/custom_group_exp_01.png differ diff --git a/_images/daedit_control_panel_0.jpg b/_images/daedit_control_panel_0.jpg new file mode 100644 index 000000000..9d67f2514 Binary files /dev/null and b/_images/daedit_control_panel_0.jpg differ diff --git a/_images/daedit_control_panel_1.jpg b/_images/daedit_control_panel_1.jpg new file mode 100644 index 000000000..57d5e26a3 Binary files /dev/null and b/_images/daedit_control_panel_1.jpg differ diff --git a/_images/daedit_control_panel_2.jpg b/_images/daedit_control_panel_2.jpg new file mode 100644 index 000000000..c3e67fa86 Binary files /dev/null and b/_images/daedit_control_panel_2.jpg differ diff --git a/_images/daedit_control_panel_3.jpg b/_images/daedit_control_panel_3.jpg new file mode 100644 index 000000000..cb1f0950b Binary files /dev/null and b/_images/daedit_control_panel_3.jpg differ diff --git a/_images/daedit_control_panel_4.jpg b/_images/daedit_control_panel_4.jpg new file mode 100644 index 000000000..68e94e755 Binary files /dev/null and b/_images/daedit_control_panel_4.jpg differ diff --git a/_images/daedit_control_panel_5.jpg b/_images/daedit_control_panel_5.jpg new file mode 100644 index 000000000..c09897e18 Binary files /dev/null and b/_images/daedit_control_panel_5.jpg differ diff --git a/_images/daedit_control_panel_6.jpg b/_images/daedit_control_panel_6.jpg new file mode 100644 index 000000000..4a619bbf7 Binary files /dev/null and b/_images/daedit_control_panel_6.jpg differ diff --git a/_images/daedit_control_panel_7.jpg b/_images/daedit_control_panel_7.jpg new file mode 100644 index 000000000..b07f59df2 Binary files /dev/null and b/_images/daedit_control_panel_7.jpg differ diff --git a/_images/daedit_control_panel_8.jpg b/_images/daedit_control_panel_8.jpg new file mode 100644 index 000000000..5fba40c60 Binary files /dev/null and b/_images/daedit_control_panel_8.jpg differ diff --git a/_images/daedit_control_panel_9.jpg b/_images/daedit_control_panel_9.jpg new file mode 100644 index 000000000..a5bc50c2d Binary files /dev/null and b/_images/daedit_control_panel_9.jpg differ diff --git a/_images/daedit_export_location.jpg b/_images/daedit_export_location.jpg new file mode 100644 index 000000000..31c7ee3f8 Binary files /dev/null and b/_images/daedit_export_location.jpg differ diff --git a/_images/daedit_landscape_tab.jpg b/_images/daedit_landscape_tab.jpg new file mode 100644 index 000000000..042b8f62d Binary files /dev/null and b/_images/daedit_landscape_tab.jpg differ diff --git a/_images/daedit_obj_properties.jpg b/_images/daedit_obj_properties.jpg new file mode 100644 index 000000000..7227c2914 Binary files /dev/null and b/_images/daedit_obj_properties.jpg differ diff --git a/_images/daedit_unify_obj_names.jpg b/_images/daedit_unify_obj_names.jpg new file mode 100644 index 000000000..6906d528f Binary files /dev/null and b/_images/daedit_unify_obj_names.jpg differ diff --git a/_images/dag2rires_01.png b/_images/dag2rires_01.png new file mode 100644 index 000000000..b93ce851e Binary files /dev/null and b/_images/dag2rires_01.png differ diff --git a/_images/dag4blend_comp_ed_01.jpg b/_images/dag4blend_comp_ed_01.jpg new file mode 100644 index 000000000..ff1629167 Binary files /dev/null and b/_images/dag4blend_comp_ed_01.jpg differ diff --git a/_images/dag4blend_comp_ed_02.jpg b/_images/dag4blend_comp_ed_02.jpg new file mode 100644 index 000000000..747890670 Binary files /dev/null and b/_images/dag4blend_comp_ed_02.jpg differ diff --git a/_images/dag4blend_comp_ed_03.jpg b/_images/dag4blend_comp_ed_03.jpg new file mode 100644 index 000000000..19f1ae328 Binary files /dev/null and b/_images/dag4blend_comp_ed_03.jpg differ diff --git a/_images/dag4blend_comp_ed_04.jpg b/_images/dag4blend_comp_ed_04.jpg new file mode 100644 index 000000000..bf469a81e Binary files /dev/null and b/_images/dag4blend_comp_ed_04.jpg differ diff --git a/_images/dag4blend_comp_ed_05.jpg b/_images/dag4blend_comp_ed_05.jpg new file mode 100644 index 000000000..054884f18 Binary files /dev/null and b/_images/dag4blend_comp_ed_05.jpg differ diff --git a/_images/dag4blend_comp_ed_06.jpg b/_images/dag4blend_comp_ed_06.jpg new file mode 100644 index 000000000..5d5b15806 Binary files /dev/null and b/_images/dag4blend_comp_ed_06.jpg differ diff --git a/_images/dag4blend_comp_ed_07.jpg b/_images/dag4blend_comp_ed_07.jpg new file mode 100644 index 000000000..9ae3a66fb Binary files /dev/null and b/_images/dag4blend_comp_ed_07.jpg differ diff --git a/_images/dag4blend_comp_ed_08.jpg b/_images/dag4blend_comp_ed_08.jpg new file mode 100644 index 000000000..dbeb47731 Binary files /dev/null and b/_images/dag4blend_comp_ed_08.jpg differ diff --git a/_images/dag4blend_comp_ed_09.jpg b/_images/dag4blend_comp_ed_09.jpg new file mode 100644 index 000000000..c227c47a0 Binary files /dev/null and b/_images/dag4blend_comp_ed_09.jpg differ diff --git a/_images/dag4blend_comp_ed_10.jpg b/_images/dag4blend_comp_ed_10.jpg new file mode 100644 index 000000000..cfbfdea00 Binary files /dev/null and b/_images/dag4blend_comp_ed_10.jpg differ diff --git a/_images/dag4blend_comp_ed_11.jpg b/_images/dag4blend_comp_ed_11.jpg new file mode 100644 index 000000000..ab266d79f Binary files /dev/null and b/_images/dag4blend_comp_ed_11.jpg differ diff --git a/_images/dag4blend_comp_ed_12.jpg b/_images/dag4blend_comp_ed_12.jpg new file mode 100644 index 000000000..9b9a3d77f Binary files /dev/null and b/_images/dag4blend_comp_ed_12.jpg differ diff --git a/_images/dag4blend_comp_ed_13.jpg b/_images/dag4blend_comp_ed_13.jpg new file mode 100644 index 000000000..c16d9196c Binary files /dev/null and b/_images/dag4blend_comp_ed_13.jpg differ diff --git a/_images/dag4blend_comp_ed_14.jpg b/_images/dag4blend_comp_ed_14.jpg new file mode 100644 index 000000000..769620900 Binary files /dev/null and b/_images/dag4blend_comp_ed_14.jpg differ diff --git a/_images/dag4blend_comp_ed_15.jpg b/_images/dag4blend_comp_ed_15.jpg new file mode 100644 index 000000000..dbb0b171a Binary files /dev/null and b/_images/dag4blend_comp_ed_15.jpg differ diff --git a/_images/dag4blend_comp_ed_16.jpg b/_images/dag4blend_comp_ed_16.jpg new file mode 100644 index 000000000..a00000d8d Binary files /dev/null and b/_images/dag4blend_comp_ed_16.jpg differ diff --git a/_images/dag4blend_comp_ed_17.jpg b/_images/dag4blend_comp_ed_17.jpg new file mode 100644 index 000000000..a02829f68 Binary files /dev/null and b/_images/dag4blend_comp_ed_17.jpg differ diff --git a/_images/dag4blend_comp_ed_18.jpg b/_images/dag4blend_comp_ed_18.jpg new file mode 100644 index 000000000..92cc49bf0 Binary files /dev/null and b/_images/dag4blend_comp_ed_18.jpg differ diff --git a/_images/dag4blend_comp_ed_19.jpg b/_images/dag4blend_comp_ed_19.jpg new file mode 100644 index 000000000..fa37d4d23 Binary files /dev/null and b/_images/dag4blend_comp_ed_19.jpg differ diff --git a/_images/dag4blend_comp_ed_20.jpg b/_images/dag4blend_comp_ed_20.jpg new file mode 100644 index 000000000..dcfbf9294 Binary files /dev/null and b/_images/dag4blend_comp_ed_20.jpg differ diff --git a/_images/dag4blend_comp_ed_21.jpg b/_images/dag4blend_comp_ed_21.jpg new file mode 100644 index 000000000..60d9ba1ca Binary files /dev/null and b/_images/dag4blend_comp_ed_21.jpg differ diff --git a/_images/dag4blend_comp_ed_22.jpg b/_images/dag4blend_comp_ed_22.jpg new file mode 100644 index 000000000..c70e1edde Binary files /dev/null and b/_images/dag4blend_comp_ed_22.jpg differ diff --git a/_images/dag4blend_comp_ed_23.jpg b/_images/dag4blend_comp_ed_23.jpg new file mode 100644 index 000000000..8709f6e19 Binary files /dev/null and b/_images/dag4blend_comp_ed_23.jpg differ diff --git a/_images/dag4blend_comp_ed_24.jpg b/_images/dag4blend_comp_ed_24.jpg new file mode 100644 index 000000000..ab240cce1 Binary files /dev/null and b/_images/dag4blend_comp_ed_24.jpg differ diff --git a/_images/dag4blend_comp_ed_25.jpg b/_images/dag4blend_comp_ed_25.jpg new file mode 100644 index 000000000..02b6699e6 Binary files /dev/null and b/_images/dag4blend_comp_ed_25.jpg differ diff --git a/_images/dag4blend_comp_ed_26.jpg b/_images/dag4blend_comp_ed_26.jpg new file mode 100644 index 000000000..cc6e1f18d Binary files /dev/null and b/_images/dag4blend_comp_ed_26.jpg differ diff --git a/_images/dag4blend_text_baker_01.png b/_images/dag4blend_text_baker_01.png new file mode 100644 index 000000000..21bf3dcc3 Binary files /dev/null and b/_images/dag4blend_text_baker_01.png differ diff --git a/_images/dag4blend_text_baker_02.png b/_images/dag4blend_text_baker_02.png new file mode 100644 index 000000000..799bbca0c Binary files /dev/null and b/_images/dag4blend_text_baker_02.png differ diff --git a/_images/dag4blend_text_baker_03.png b/_images/dag4blend_text_baker_03.png new file mode 100644 index 000000000..4f2c10d9d Binary files /dev/null and b/_images/dag4blend_text_baker_03.png differ diff --git a/_images/dag4blend_text_baker_04.png b/_images/dag4blend_text_baker_04.png new file mode 100644 index 000000000..da1c0ffe0 Binary files /dev/null and b/_images/dag4blend_text_baker_04.png differ diff --git a/_images/dag4blend_text_baker_05.png b/_images/dag4blend_text_baker_05.png new file mode 100644 index 000000000..75432b16e Binary files /dev/null and b/_images/dag4blend_text_baker_05.png differ diff --git a/_images/dag4blend_text_baker_06.png b/_images/dag4blend_text_baker_06.png new file mode 100644 index 000000000..2856681f8 Binary files /dev/null and b/_images/dag4blend_text_baker_06.png differ diff --git a/_images/dag4blend_text_baker_07.png b/_images/dag4blend_text_baker_07.png new file mode 100644 index 000000000..e2a3b51ad Binary files /dev/null and b/_images/dag4blend_text_baker_07.png differ diff --git a/_images/dag4blend_text_baker_08.png b/_images/dag4blend_text_baker_08.png new file mode 100644 index 000000000..9fb6837c5 Binary files /dev/null and b/_images/dag4blend_text_baker_08.png differ diff --git a/_images/dag4blend_text_baker_09.png b/_images/dag4blend_text_baker_09.png new file mode 100644 index 000000000..60dd623bd Binary files /dev/null and b/_images/dag4blend_text_baker_09.png differ diff --git a/_images/dag4blend_text_baker_10.png b/_images/dag4blend_text_baker_10.png new file mode 100644 index 000000000..a92a36074 Binary files /dev/null and b/_images/dag4blend_text_baker_10.png differ diff --git a/_images/dag4blend_text_baker_11.png b/_images/dag4blend_text_baker_11.png new file mode 100644 index 000000000..6099a9d8d Binary files /dev/null and b/_images/dag4blend_text_baker_11.png differ diff --git a/_images/dag4blend_text_baker_12.png b/_images/dag4blend_text_baker_12.png new file mode 100644 index 000000000..cae9e714e Binary files /dev/null and b/_images/dag4blend_text_baker_12.png differ diff --git a/_images/dagor_max_tools_01.jpg b/_images/dagor_max_tools_01.jpg new file mode 100644 index 000000000..697cd68c8 Binary files /dev/null and b/_images/dagor_max_tools_01.jpg differ diff --git a/_images/dagor_max_tools_02.jpg b/_images/dagor_max_tools_02.jpg new file mode 100644 index 000000000..8e7ad5521 Binary files /dev/null and b/_images/dagor_max_tools_02.jpg differ diff --git a/_images/dagor_max_tools_03.jpg b/_images/dagor_max_tools_03.jpg new file mode 100644 index 000000000..013948c49 Binary files /dev/null and b/_images/dagor_max_tools_03.jpg differ diff --git a/_images/dagor_max_tools_04.png b/_images/dagor_max_tools_04.png new file mode 100644 index 000000000..2c4b86c3b Binary files /dev/null and b/_images/dagor_max_tools_04.png differ diff --git a/_images/dagor_max_tools_05.png b/_images/dagor_max_tools_05.png new file mode 100644 index 000000000..85daea066 Binary files /dev/null and b/_images/dagor_max_tools_05.png differ diff --git a/_images/dagor_max_tools_06.png b/_images/dagor_max_tools_06.png new file mode 100644 index 000000000..129aa3c6e Binary files /dev/null and b/_images/dagor_max_tools_06.png differ diff --git a/_images/dagor_max_tools_07.png b/_images/dagor_max_tools_07.png new file mode 100644 index 000000000..80ed23c5f Binary files /dev/null and b/_images/dagor_max_tools_07.png differ diff --git a/_images/dagor_max_tools_08.png b/_images/dagor_max_tools_08.png new file mode 100644 index 000000000..260111b0c Binary files /dev/null and b/_images/dagor_max_tools_08.png differ diff --git a/_images/dagor_max_tools_09.png b/_images/dagor_max_tools_09.png new file mode 100644 index 000000000..bf783e446 Binary files /dev/null and b/_images/dagor_max_tools_09.png differ diff --git a/_images/dagor_max_tools_10.png b/_images/dagor_max_tools_10.png new file mode 100644 index 000000000..48efbdedc Binary files /dev/null and b/_images/dagor_max_tools_10.png differ diff --git a/_images/dagor_max_tools_11.jpg b/_images/dagor_max_tools_11.jpg new file mode 100644 index 000000000..dcab77efe Binary files /dev/null and b/_images/dagor_max_tools_11.jpg differ diff --git a/_images/dagor_max_tools_12.png b/_images/dagor_max_tools_12.png new file mode 100644 index 000000000..93b36689b Binary files /dev/null and b/_images/dagor_max_tools_12.png differ diff --git a/_images/dagormat_01.png b/_images/dagormat_01.png new file mode 100644 index 000000000..2f76a5fdc Binary files /dev/null and b/_images/dagormat_01.png differ diff --git a/_images/dagormat_02.png b/_images/dagormat_02.png new file mode 100644 index 000000000..3c2c0b622 Binary files /dev/null and b/_images/dagormat_02.png differ diff --git a/_images/dagormat_03.png b/_images/dagormat_03.png new file mode 100644 index 000000000..24ca8f8ea Binary files /dev/null and b/_images/dagormat_03.png differ diff --git a/_images/dagormat_04.png b/_images/dagormat_04.png new file mode 100644 index 000000000..6db8be0d6 Binary files /dev/null and b/_images/dagormat_04.png differ diff --git a/_images/dagormat_05.png b/_images/dagormat_05.png new file mode 100644 index 000000000..e23f79936 Binary files /dev/null and b/_images/dagormat_05.png differ diff --git a/_images/dagormat_06.png b/_images/dagormat_06.png new file mode 100644 index 000000000..887432180 Binary files /dev/null and b/_images/dagormat_06.png differ diff --git a/_images/damages_setup_01.png b/_images/damages_setup_01.png new file mode 100644 index 000000000..adf0b5cee Binary files /dev/null and b/_images/damages_setup_01.png differ diff --git a/_images/damages_setup_02.png b/_images/damages_setup_02.png new file mode 100644 index 000000000..86d24c215 Binary files /dev/null and b/_images/damages_setup_02.png differ diff --git a/_images/damages_setup_03.png b/_images/damages_setup_03.png new file mode 100644 index 000000000..928098810 Binary files /dev/null and b/_images/damages_setup_03.png differ diff --git a/_images/damages_setup_04.png b/_images/damages_setup_04.png new file mode 100644 index 000000000..ae7535711 Binary files /dev/null and b/_images/damages_setup_04.png differ diff --git a/_images/dng_non_human_char_01.jpg b/_images/dng_non_human_char_01.jpg new file mode 100644 index 000000000..7d9179333 Binary files /dev/null and b/_images/dng_non_human_char_01.jpg differ diff --git a/_images/dng_non_human_char_02.jpg b/_images/dng_non_human_char_02.jpg new file mode 100644 index 000000000..9e7f7c7bb Binary files /dev/null and b/_images/dng_non_human_char_02.jpg differ diff --git a/_images/dng_non_human_char_03.jpg b/_images/dng_non_human_char_03.jpg new file mode 100644 index 000000000..5e7e9e535 Binary files /dev/null and b/_images/dng_non_human_char_03.jpg differ diff --git a/_images/dng_non_human_char_04.jpg b/_images/dng_non_human_char_04.jpg new file mode 100644 index 000000000..57ca83a64 Binary files /dev/null and b/_images/dng_non_human_char_04.jpg differ diff --git a/_images/dng_non_human_char_05.jpg b/_images/dng_non_human_char_05.jpg new file mode 100644 index 000000000..1ad30329e Binary files /dev/null and b/_images/dng_non_human_char_05.jpg differ diff --git a/_images/dng_non_human_char_06.jpg b/_images/dng_non_human_char_06.jpg new file mode 100644 index 000000000..f45c59b50 Binary files /dev/null and b/_images/dng_non_human_char_06.jpg differ diff --git a/_images/dng_non_human_char_07.jpg b/_images/dng_non_human_char_07.jpg new file mode 100644 index 000000000..fd1b2b557 Binary files /dev/null and b/_images/dng_non_human_char_07.jpg differ diff --git a/_images/dng_non_human_char_08.jpg b/_images/dng_non_human_char_08.jpg new file mode 100644 index 000000000..e743e647f Binary files /dev/null and b/_images/dng_non_human_char_08.jpg differ diff --git a/_images/dng_non_human_char_09.jpg b/_images/dng_non_human_char_09.jpg new file mode 100644 index 000000000..960a81186 Binary files /dev/null and b/_images/dng_non_human_char_09.jpg differ diff --git a/_images/dng_non_human_char_10.jpg b/_images/dng_non_human_char_10.jpg new file mode 100644 index 000000000..a3a82f943 Binary files /dev/null and b/_images/dng_non_human_char_10.jpg differ diff --git a/_images/dng_non_human_char_11.jpg b/_images/dng_non_human_char_11.jpg new file mode 100644 index 000000000..83536d7a3 Binary files /dev/null and b/_images/dng_non_human_char_11.jpg differ diff --git a/_images/dng_non_human_char_12.jpg b/_images/dng_non_human_char_12.jpg new file mode 100644 index 000000000..b4b98c177 Binary files /dev/null and b/_images/dng_non_human_char_12.jpg differ diff --git a/_images/dng_non_human_char_13.jpg b/_images/dng_non_human_char_13.jpg new file mode 100644 index 000000000..596ddce61 Binary files /dev/null and b/_images/dng_non_human_char_13.jpg differ diff --git a/_images/dng_non_human_char_14.jpg b/_images/dng_non_human_char_14.jpg new file mode 100644 index 000000000..b3b66c23f Binary files /dev/null and b/_images/dng_non_human_char_14.jpg differ diff --git a/_images/dng_non_human_char_15.jpg b/_images/dng_non_human_char_15.jpg new file mode 100644 index 000000000..8d2efcc81 Binary files /dev/null and b/_images/dng_non_human_char_15.jpg differ diff --git a/_images/dng_non_human_char_16.jpg b/_images/dng_non_human_char_16.jpg new file mode 100644 index 000000000..3a28728c0 Binary files /dev/null and b/_images/dng_non_human_char_16.jpg differ diff --git a/_images/dng_non_human_char_17.jpg b/_images/dng_non_human_char_17.jpg new file mode 100644 index 000000000..6475adc3c Binary files /dev/null and b/_images/dng_non_human_char_17.jpg differ diff --git a/_images/dng_non_human_char_18.jpg b/_images/dng_non_human_char_18.jpg new file mode 100644 index 000000000..17e114f67 Binary files /dev/null and b/_images/dng_non_human_char_18.jpg differ diff --git a/_images/dng_non_human_char_19.jpg b/_images/dng_non_human_char_19.jpg new file mode 100644 index 000000000..a46682750 Binary files /dev/null and b/_images/dng_non_human_char_19.jpg differ diff --git a/_images/dng_non_human_char_20.jpg b/_images/dng_non_human_char_20.jpg new file mode 100644 index 000000000..49edf6c1f Binary files /dev/null and b/_images/dng_non_human_char_20.jpg differ diff --git a/_images/dng_non_human_char_21.jpg b/_images/dng_non_human_char_21.jpg new file mode 100644 index 000000000..3b054ae2d Binary files /dev/null and b/_images/dng_non_human_char_21.jpg differ diff --git a/_images/dng_non_human_char_22.jpg b/_images/dng_non_human_char_22.jpg new file mode 100644 index 000000000..a0192cc67 Binary files /dev/null and b/_images/dng_non_human_char_22.jpg differ diff --git a/_images/dynamic_painted_by_mask_01.jpg b/_images/dynamic_painted_by_mask_01.jpg new file mode 100644 index 000000000..994ea8ea2 Binary files /dev/null and b/_images/dynamic_painted_by_mask_01.jpg differ diff --git a/_images/dynamic_painted_by_mask_02.jpg b/_images/dynamic_painted_by_mask_02.jpg new file mode 100644 index 000000000..3c33f50be Binary files /dev/null and b/_images/dynamic_painted_by_mask_02.jpg differ diff --git a/_images/editing_normals_01.png b/_images/editing_normals_01.png new file mode 100644 index 000000000..420c30056 Binary files /dev/null and b/_images/editing_normals_01.png differ diff --git a/_images/editing_normals_02.png b/_images/editing_normals_02.png new file mode 100644 index 000000000..2297f136b Binary files /dev/null and b/_images/editing_normals_02.png differ diff --git a/_images/editing_normals_03.png b/_images/editing_normals_03.png new file mode 100644 index 000000000..6e3c0e7f3 Binary files /dev/null and b/_images/editing_normals_03.png differ diff --git a/_images/editing_normals_04.png b/_images/editing_normals_04.png new file mode 100644 index 000000000..34c45d780 Binary files /dev/null and b/_images/editing_normals_04.png differ diff --git a/_images/editing_normals_05.png b/_images/editing_normals_05.png new file mode 100644 index 000000000..b4b1fc8f1 Binary files /dev/null and b/_images/editing_normals_05.png differ diff --git a/_images/editing_normals_06.png b/_images/editing_normals_06.png new file mode 100644 index 000000000..88c4409d0 Binary files /dev/null and b/_images/editing_normals_06.png differ diff --git a/_images/editing_normals_07.png b/_images/editing_normals_07.png new file mode 100644 index 000000000..468d71ab1 Binary files /dev/null and b/_images/editing_normals_07.png differ diff --git a/_images/editing_normals_08.png b/_images/editing_normals_08.png new file mode 100644 index 000000000..1c0f3b6df Binary files /dev/null and b/_images/editing_normals_08.png differ diff --git a/_images/editing_normals_09.png b/_images/editing_normals_09.png new file mode 100644 index 000000000..4c0668c4a Binary files /dev/null and b/_images/editing_normals_09.png differ diff --git a/_images/fast_properties_in_menu.png b/_images/fast_properties_in_menu.png new file mode 100644 index 000000000..aabb843c3 Binary files /dev/null and b/_images/fast_properties_in_menu.png differ diff --git a/_images/fast_properties_panel.png b/_images/fast_properties_panel.png new file mode 100644 index 000000000..cf8b26bb7 Binary files /dev/null and b/_images/fast_properties_panel.png differ diff --git a/_images/file_import.png b/_images/file_import.png new file mode 100644 index 000000000..0cd1f31b9 Binary files /dev/null and b/_images/file_import.png differ diff --git a/_images/fix_normal_orient_01.png b/_images/fix_normal_orient_01.png new file mode 100644 index 000000000..1372f9fc1 Binary files /dev/null and b/_images/fix_normal_orient_01.png differ diff --git a/_images/fix_normal_orient_02.png b/_images/fix_normal_orient_02.png new file mode 100644 index 000000000..46a6d87a8 Binary files /dev/null and b/_images/fix_normal_orient_02.png differ diff --git a/_images/fix_normal_orient_03.png b/_images/fix_normal_orient_03.png new file mode 100644 index 000000000..68259e6d3 Binary files /dev/null and b/_images/fix_normal_orient_03.png differ diff --git a/_images/fixing_illegal_chars_01.png b/_images/fixing_illegal_chars_01.png new file mode 100644 index 000000000..901323e6c Binary files /dev/null and b/_images/fixing_illegal_chars_01.png differ diff --git a/_images/fixing_illegal_chars_02.png b/_images/fixing_illegal_chars_02.png new file mode 100644 index 000000000..02cde51e5 Binary files /dev/null and b/_images/fixing_illegal_chars_02.png differ diff --git a/_images/fixing_illegal_chars_03.png b/_images/fixing_illegal_chars_03.png new file mode 100644 index 000000000..f95741f52 Binary files /dev/null and b/_images/fixing_illegal_chars_03.png differ diff --git a/_images/fixing_illegal_chars_04.png b/_images/fixing_illegal_chars_04.png new file mode 100644 index 000000000..f2b2b12d0 Binary files /dev/null and b/_images/fixing_illegal_chars_04.png differ diff --git a/_images/fixing_illegal_chars_05.png b/_images/fixing_illegal_chars_05.png new file mode 100644 index 000000000..a4f94f34b Binary files /dev/null and b/_images/fixing_illegal_chars_05.png differ diff --git a/_images/fixing_illegal_chars_06.png b/_images/fixing_illegal_chars_06.png new file mode 100644 index 000000000..9d9186c96 Binary files /dev/null and b/_images/fixing_illegal_chars_06.png differ diff --git a/_images/how_to_test_assets_on_maps_01.jpg b/_images/how_to_test_assets_on_maps_01.jpg new file mode 100644 index 000000000..2cf32fb38 Binary files /dev/null and b/_images/how_to_test_assets_on_maps_01.jpg differ diff --git a/_images/how_to_test_assets_on_maps_02.jpg b/_images/how_to_test_assets_on_maps_02.jpg new file mode 100644 index 000000000..bc60f0c1a Binary files /dev/null and b/_images/how_to_test_assets_on_maps_02.jpg differ diff --git a/_images/how_to_test_assets_on_maps_03.jpg b/_images/how_to_test_assets_on_maps_03.jpg new file mode 100644 index 000000000..f5a21b94e Binary files /dev/null and b/_images/how_to_test_assets_on_maps_03.jpg differ diff --git a/_images/how_to_test_assets_on_maps_04.jpg b/_images/how_to_test_assets_on_maps_04.jpg new file mode 100644 index 000000000..d7fed7749 Binary files /dev/null and b/_images/how_to_test_assets_on_maps_04.jpg differ diff --git a/_images/how_to_test_assets_on_maps_05.jpg b/_images/how_to_test_assets_on_maps_05.jpg new file mode 100644 index 000000000..9ed4b66d1 Binary files /dev/null and b/_images/how_to_test_assets_on_maps_05.jpg differ diff --git a/_images/how_to_test_assets_on_maps_06.jpg b/_images/how_to_test_assets_on_maps_06.jpg new file mode 100644 index 000000000..f152232f9 Binary files /dev/null and b/_images/how_to_test_assets_on_maps_06.jpg differ diff --git a/_images/how_to_test_assets_on_maps_07.jpg b/_images/how_to_test_assets_on_maps_07.jpg new file mode 100644 index 000000000..9b2653d5c Binary files /dev/null and b/_images/how_to_test_assets_on_maps_07.jpg differ diff --git a/_images/how_to_test_assets_on_maps_08.jpg b/_images/how_to_test_assets_on_maps_08.jpg new file mode 100644 index 000000000..87da7ded3 Binary files /dev/null and b/_images/how_to_test_assets_on_maps_08.jpg differ diff --git a/_images/how_to_test_assets_on_maps_09.jpg b/_images/how_to_test_assets_on_maps_09.jpg new file mode 100644 index 000000000..f9b77c49c Binary files /dev/null and b/_images/how_to_test_assets_on_maps_09.jpg differ diff --git a/_images/how_to_test_assets_on_maps_10.jpg b/_images/how_to_test_assets_on_maps_10.jpg new file mode 100644 index 000000000..c952e0436 Binary files /dev/null and b/_images/how_to_test_assets_on_maps_10.jpg differ diff --git a/_images/how_to_test_assets_on_maps_11.jpg b/_images/how_to_test_assets_on_maps_11.jpg new file mode 100644 index 000000000..21e75d0d9 Binary files /dev/null and b/_images/how_to_test_assets_on_maps_11.jpg differ diff --git a/_images/how_to_test_assets_on_maps_12.jpg b/_images/how_to_test_assets_on_maps_12.jpg new file mode 100644 index 000000000..381563903 Binary files /dev/null and b/_images/how_to_test_assets_on_maps_12.jpg differ diff --git a/_images/how_to_test_assets_on_maps_13.jpg b/_images/how_to_test_assets_on_maps_13.jpg new file mode 100644 index 000000000..ad3c1c841 Binary files /dev/null and b/_images/how_to_test_assets_on_maps_13.jpg differ diff --git a/_images/how_to_test_assets_on_maps_14.jpg b/_images/how_to_test_assets_on_maps_14.jpg new file mode 100644 index 000000000..00f982b54 Binary files /dev/null and b/_images/how_to_test_assets_on_maps_14.jpg differ diff --git a/_images/how_to_test_assets_on_maps_15.jpg b/_images/how_to_test_assets_on_maps_15.jpg new file mode 100644 index 000000000..27385dfdf Binary files /dev/null and b/_images/how_to_test_assets_on_maps_15.jpg differ diff --git a/_images/how_to_test_assets_on_maps_16.jpg b/_images/how_to_test_assets_on_maps_16.jpg new file mode 100644 index 000000000..1df0967b6 Binary files /dev/null and b/_images/how_to_test_assets_on_maps_16.jpg differ diff --git a/_images/how_to_test_assets_on_maps_17.jpg b/_images/how_to_test_assets_on_maps_17.jpg new file mode 100644 index 000000000..bdaa72b13 Binary files /dev/null and b/_images/how_to_test_assets_on_maps_17.jpg differ diff --git a/_images/how_to_test_assets_on_maps_18.jpg b/_images/how_to_test_assets_on_maps_18.jpg new file mode 100644 index 000000000..50ac2bd99 Binary files /dev/null and b/_images/how_to_test_assets_on_maps_18.jpg differ diff --git a/_images/imp_baker_asset_viewer.png b/_images/imp_baker_asset_viewer.png new file mode 100644 index 000000000..bc978fca9 Binary files /dev/null and b/_images/imp_baker_asset_viewer.png differ diff --git a/_images/industrial_lamp_steel_wall_a.jpg b/_images/industrial_lamp_steel_wall_a.jpg new file mode 100644 index 000000000..c6f67f390 Binary files /dev/null and b/_images/industrial_lamp_steel_wall_a.jpg differ diff --git a/_images/industrial_lamp_steel_wall_a_01.jpg b/_images/industrial_lamp_steel_wall_a_01.jpg new file mode 100644 index 000000000..8cd51f4fc Binary files /dev/null and b/_images/industrial_lamp_steel_wall_a_01.jpg differ diff --git a/_images/industrial_lamp_steel_wall_a_02.jpg b/_images/industrial_lamp_steel_wall_a_02.jpg new file mode 100644 index 000000000..752c8e483 Binary files /dev/null and b/_images/industrial_lamp_steel_wall_a_02.jpg differ diff --git a/_images/industrial_lamp_steel_wall_a_03.jpg b/_images/industrial_lamp_steel_wall_a_03.jpg new file mode 100644 index 000000000..05cd4cc5d Binary files /dev/null and b/_images/industrial_lamp_steel_wall_a_03.jpg differ diff --git a/_images/industrial_lamp_steel_wall_a_04.jpg b/_images/industrial_lamp_steel_wall_a_04.jpg new file mode 100644 index 000000000..4f3e944a2 Binary files /dev/null and b/_images/industrial_lamp_steel_wall_a_04.jpg differ diff --git a/_images/industrial_lamp_steel_wall_a_05.jpg b/_images/industrial_lamp_steel_wall_a_05.jpg new file mode 100644 index 000000000..93295450e Binary files /dev/null and b/_images/industrial_lamp_steel_wall_a_05.jpg differ diff --git a/_images/industrial_lamp_steel_wall_a_06.jpg b/_images/industrial_lamp_steel_wall_a_06.jpg new file mode 100644 index 000000000..b6033d662 Binary files /dev/null and b/_images/industrial_lamp_steel_wall_a_06.jpg differ diff --git a/_images/industrial_lamp_steel_wall_a_07.jpg b/_images/industrial_lamp_steel_wall_a_07.jpg new file mode 100644 index 000000000..4f0941596 Binary files /dev/null and b/_images/industrial_lamp_steel_wall_a_07.jpg differ diff --git a/_images/industrial_lamp_steel_wall_a_08.jpg b/_images/industrial_lamp_steel_wall_a_08.jpg new file mode 100644 index 000000000..ad573a063 Binary files /dev/null and b/_images/industrial_lamp_steel_wall_a_08.jpg differ diff --git a/_images/industrial_lamp_steel_wall_a_09.jpg b/_images/industrial_lamp_steel_wall_a_09.jpg new file mode 100644 index 000000000..baec79920 Binary files /dev/null and b/_images/industrial_lamp_steel_wall_a_09.jpg differ diff --git a/_images/inst_configuring_path.png b/_images/inst_configuring_path.png new file mode 100644 index 000000000..4bb3f2431 Binary files /dev/null and b/_images/inst_configuring_path.png differ diff --git a/_images/inst_exp_features.png b/_images/inst_exp_features.png new file mode 100644 index 000000000..b94d08dbc Binary files /dev/null and b/_images/inst_exp_features.png differ diff --git a/_images/inst_preferences.png b/_images/inst_preferences.png new file mode 100644 index 000000000..ad5ce6002 Binary files /dev/null and b/_images/inst_preferences.png differ diff --git a/_images/inst_projects.png b/_images/inst_projects.png new file mode 100644 index 000000000..4f6c0cb15 Binary files /dev/null and b/_images/inst_projects.png differ diff --git a/_images/inst_scene.png b/_images/inst_scene.png new file mode 100644 index 000000000..daafa5483 Binary files /dev/null and b/_images/inst_scene.png differ diff --git a/_images/inst_uninstall.png b/_images/inst_uninstall.png new file mode 100644 index 000000000..a48718c48 Binary files /dev/null and b/_images/inst_uninstall.png differ diff --git a/_images/land_mesh_combined_decal_01.jpg b/_images/land_mesh_combined_decal_01.jpg new file mode 100644 index 000000000..46cbc4a76 Binary files /dev/null and b/_images/land_mesh_combined_decal_01.jpg differ diff --git a/_images/land_mesh_combined_decal_02.jpg b/_images/land_mesh_combined_decal_02.jpg new file mode 100644 index 000000000..834e540d0 Binary files /dev/null and b/_images/land_mesh_combined_decal_02.jpg differ diff --git a/_images/land_mesh_combined_decal_03.jpg b/_images/land_mesh_combined_decal_03.jpg new file mode 100644 index 000000000..298f8db29 Binary files /dev/null and b/_images/land_mesh_combined_decal_03.jpg differ diff --git a/_images/land_mesh_combined_decal_04.jpg b/_images/land_mesh_combined_decal_04.jpg new file mode 100644 index 000000000..094017626 Binary files /dev/null and b/_images/land_mesh_combined_decal_04.jpg differ diff --git a/_images/land_mesh_combined_decal_05.jpg b/_images/land_mesh_combined_decal_05.jpg new file mode 100644 index 000000000..6e21d042d Binary files /dev/null and b/_images/land_mesh_combined_decal_05.jpg differ diff --git a/_images/land_mesh_combined_decal_06.jpg b/_images/land_mesh_combined_decal_06.jpg new file mode 100644 index 000000000..0dce13fd3 Binary files /dev/null and b/_images/land_mesh_combined_decal_06.jpg differ diff --git a/_images/land_mesh_combined_decal_07.jpg b/_images/land_mesh_combined_decal_07.jpg new file mode 100644 index 000000000..62b60b56c Binary files /dev/null and b/_images/land_mesh_combined_decal_07.jpg differ diff --git a/_images/land_mesh_combined_decal_08.jpg b/_images/land_mesh_combined_decal_08.jpg new file mode 100644 index 000000000..d146cdb1c Binary files /dev/null and b/_images/land_mesh_combined_decal_08.jpg differ diff --git a/_images/land_mesh_combined_decal_09.jpg b/_images/land_mesh_combined_decal_09.jpg new file mode 100644 index 000000000..989e74e23 Binary files /dev/null and b/_images/land_mesh_combined_decal_09.jpg differ diff --git a/_images/land_mesh_combined_decal_10.jpg b/_images/land_mesh_combined_decal_10.jpg new file mode 100644 index 000000000..b5ceccbc5 Binary files /dev/null and b/_images/land_mesh_combined_decal_10.jpg differ diff --git a/_images/land_mesh_combined_decal_11.jpg b/_images/land_mesh_combined_decal_11.jpg new file mode 100644 index 000000000..c1988ae1f Binary files /dev/null and b/_images/land_mesh_combined_decal_11.jpg differ diff --git a/_images/land_mesh_combined_decal_12.jpg b/_images/land_mesh_combined_decal_12.jpg new file mode 100644 index 000000000..b87605289 Binary files /dev/null and b/_images/land_mesh_combined_decal_12.jpg differ diff --git a/_images/land_mesh_combined_decal_13.jpg b/_images/land_mesh_combined_decal_13.jpg new file mode 100644 index 000000000..9c98d8061 Binary files /dev/null and b/_images/land_mesh_combined_decal_13.jpg differ diff --git a/_images/land_mesh_combined_decal_14.jpg b/_images/land_mesh_combined_decal_14.jpg new file mode 100644 index 000000000..ca2fa0147 Binary files /dev/null and b/_images/land_mesh_combined_decal_14.jpg differ diff --git a/_images/land_mesh_height_decal_01.jpg b/_images/land_mesh_height_decal_01.jpg new file mode 100644 index 000000000..6cbddad16 Binary files /dev/null and b/_images/land_mesh_height_decal_01.jpg differ diff --git a/_images/light_cat_150cm_flak_sw_37_on_cmp.jpg b/_images/light_cat_150cm_flak_sw_37_on_cmp.jpg new file mode 100644 index 000000000..f492e0890 Binary files /dev/null and b/_images/light_cat_150cm_flak_sw_37_on_cmp.jpg differ diff --git a/_images/light_cat_150cm_flak_sw_37_statick_on_cmp.jpg b/_images/light_cat_150cm_flak_sw_37_statick_on_cmp.jpg new file mode 100644 index 000000000..548dd4352 Binary files /dev/null and b/_images/light_cat_150cm_flak_sw_37_statick_on_cmp.jpg differ diff --git a/_images/light_cat_actory_lamp_f_c_on_cmp.jpg b/_images/light_cat_actory_lamp_f_c_on_cmp.jpg new file mode 100644 index 000000000..00e96b0d9 Binary files /dev/null and b/_images/light_cat_actory_lamp_f_c_on_cmp.jpg differ diff --git a/_images/light_cat_berlin_lamp_c_on_cmp.jpg b/_images/light_cat_berlin_lamp_c_on_cmp.jpg new file mode 100644 index 000000000..f5355893d Binary files /dev/null and b/_images/light_cat_berlin_lamp_c_on_cmp.jpg differ diff --git a/_images/light_cat_bonfire_a_vfx_cmp.jpg b/_images/light_cat_bonfire_a_vfx_cmp.jpg new file mode 100644 index 000000000..372b7a25a Binary files /dev/null and b/_images/light_cat_bonfire_a_vfx_cmp.jpg differ diff --git a/_images/light_cat_bunker_lamp_ceiling_b_on.jpg b/_images/light_cat_bunker_lamp_ceiling_b_on.jpg new file mode 100644 index 000000000..01bd14912 Binary files /dev/null and b/_images/light_cat_bunker_lamp_ceiling_b_on.jpg differ diff --git a/_images/light_cat_bunker_lamp_oil_a_on_hook_cmp.jpg b/_images/light_cat_bunker_lamp_oil_a_on_hook_cmp.jpg new file mode 100644 index 000000000..87d4c967d Binary files /dev/null and b/_images/light_cat_bunker_lamp_oil_a_on_hook_cmp.jpg differ diff --git a/_images/light_cat_bunker_lamp_wall_a_on.jpg b/_images/light_cat_bunker_lamp_wall_a_on.jpg new file mode 100644 index 000000000..8e0ca056b Binary files /dev/null and b/_images/light_cat_bunker_lamp_wall_a_on.jpg differ diff --git a/_images/light_cat_cdk_lamp_a_on_cmp.jpg b/_images/light_cat_cdk_lamp_a_on_cmp.jpg new file mode 100644 index 000000000..cc14c5cd7 Binary files /dev/null and b/_images/light_cat_cdk_lamp_a_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_a_d_on_cmp.jpg b/_images/light_cat_factory_lamp_a_d_on_cmp.jpg new file mode 100644 index 000000000..7d87dc833 Binary files /dev/null and b/_images/light_cat_factory_lamp_a_d_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_a_e_on_cmp.jpg b/_images/light_cat_factory_lamp_a_e_on_cmp.jpg new file mode 100644 index 000000000..464e77dba Binary files /dev/null and b/_images/light_cat_factory_lamp_a_e_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_b_a_on_cmp.jpg b/_images/light_cat_factory_lamp_b_a_on_cmp.jpg new file mode 100644 index 000000000..8f1e4434c Binary files /dev/null and b/_images/light_cat_factory_lamp_b_a_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_b_b_on_cmp.jpg b/_images/light_cat_factory_lamp_b_b_on_cmp.jpg new file mode 100644 index 000000000..16d2d4e6a Binary files /dev/null and b/_images/light_cat_factory_lamp_b_b_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_b_c_on_cmp.jpg b/_images/light_cat_factory_lamp_b_c_on_cmp.jpg new file mode 100644 index 000000000..24d6b5267 Binary files /dev/null and b/_images/light_cat_factory_lamp_b_c_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_b_d_on_cmp.jpg b/_images/light_cat_factory_lamp_b_d_on_cmp.jpg new file mode 100644 index 000000000..926cd7dd2 Binary files /dev/null and b/_images/light_cat_factory_lamp_b_d_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_c_a_on_cmp.jpg b/_images/light_cat_factory_lamp_c_a_on_cmp.jpg new file mode 100644 index 000000000..5503ba46c Binary files /dev/null and b/_images/light_cat_factory_lamp_c_a_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_c_b_on_cmp.jpg b/_images/light_cat_factory_lamp_c_b_on_cmp.jpg new file mode 100644 index 000000000..72d226293 Binary files /dev/null and b/_images/light_cat_factory_lamp_c_b_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_c_c_on_cmp.jpg b/_images/light_cat_factory_lamp_c_c_on_cmp.jpg new file mode 100644 index 000000000..45947c0a7 Binary files /dev/null and b/_images/light_cat_factory_lamp_c_c_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_c_d_on_cmp.jpg b/_images/light_cat_factory_lamp_c_d_on_cmp.jpg new file mode 100644 index 000000000..1c00389d7 Binary files /dev/null and b/_images/light_cat_factory_lamp_c_d_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_c_on_cmp.jpg b/_images/light_cat_factory_lamp_c_on_cmp.jpg new file mode 100644 index 000000000..697f51cd7 Binary files /dev/null and b/_images/light_cat_factory_lamp_c_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_d_a_on_cmp.jpg b/_images/light_cat_factory_lamp_d_a_on_cmp.jpg new file mode 100644 index 000000000..59f124e87 Binary files /dev/null and b/_images/light_cat_factory_lamp_d_a_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_d_b_on_cmp.jpg b/_images/light_cat_factory_lamp_d_b_on_cmp.jpg new file mode 100644 index 000000000..00c1ce436 Binary files /dev/null and b/_images/light_cat_factory_lamp_d_b_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_d_c_on_cmp.jpg b/_images/light_cat_factory_lamp_d_c_on_cmp.jpg new file mode 100644 index 000000000..52aa45b31 Binary files /dev/null and b/_images/light_cat_factory_lamp_d_c_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_e_a_on_cmp.jpg b/_images/light_cat_factory_lamp_e_a_on_cmp.jpg new file mode 100644 index 000000000..f1303e74d Binary files /dev/null and b/_images/light_cat_factory_lamp_e_a_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_e_b_on_cmp.jpg b/_images/light_cat_factory_lamp_e_b_on_cmp.jpg new file mode 100644 index 000000000..25a127b6d Binary files /dev/null and b/_images/light_cat_factory_lamp_e_b_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_e_c_on_cmp.jpg b/_images/light_cat_factory_lamp_e_c_on_cmp.jpg new file mode 100644 index 000000000..2db3e2ef2 Binary files /dev/null and b/_images/light_cat_factory_lamp_e_c_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_f_a_on_cmp.jpg b/_images/light_cat_factory_lamp_f_a_on_cmp.jpg new file mode 100644 index 000000000..ccc8bbd37 Binary files /dev/null and b/_images/light_cat_factory_lamp_f_a_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_f_b_on_cmp.jpg b/_images/light_cat_factory_lamp_f_b_on_cmp.jpg new file mode 100644 index 000000000..43a16653c Binary files /dev/null and b/_images/light_cat_factory_lamp_f_b_on_cmp.jpg differ diff --git a/_images/light_cat_factory_lamp_g_on_cmp.jpg b/_images/light_cat_factory_lamp_g_on_cmp.jpg new file mode 100644 index 000000000..537929d3a Binary files /dev/null and b/_images/light_cat_factory_lamp_g_on_cmp.jpg differ diff --git a/_images/light_cat_factory_warning_lamp_a_on_cmp.jpg b/_images/light_cat_factory_warning_lamp_a_on_cmp.jpg new file mode 100644 index 000000000..54e728699 Binary files /dev/null and b/_images/light_cat_factory_warning_lamp_a_on_cmp.jpg differ diff --git a/_images/light_cat_garage_floor_lamp_a_b_on.jpg b/_images/light_cat_garage_floor_lamp_a_b_on.jpg new file mode 100644 index 000000000..3f28c8474 Binary files /dev/null and b/_images/light_cat_garage_floor_lamp_a_b_on.jpg differ diff --git a/_images/light_cat_garage_floor_lamp_b_on.jpg b/_images/light_cat_garage_floor_lamp_b_on.jpg new file mode 100644 index 000000000..6808ee8dd Binary files /dev/null and b/_images/light_cat_garage_floor_lamp_b_on.jpg differ diff --git a/_images/light_cat_hangar_projector_a_on_cmp.jpg b/_images/light_cat_hangar_projector_a_on_cmp.jpg new file mode 100644 index 000000000..b2a7f5ef0 Binary files /dev/null and b/_images/light_cat_hangar_projector_a_on_cmp.jpg differ diff --git a/_images/light_cat_industrial_lamp_steel_floor_a_far_on_cmp.jpg b/_images/light_cat_industrial_lamp_steel_floor_a_far_on_cmp.jpg new file mode 100644 index 000000000..37a12abb1 Binary files /dev/null and b/_images/light_cat_industrial_lamp_steel_floor_a_far_on_cmp.jpg differ diff --git a/_images/light_cat_industrial_lamp_steel_wall_a_far_on_cmp.jpg b/_images/light_cat_industrial_lamp_steel_wall_a_far_on_cmp.jpg new file mode 100644 index 000000000..cd398ada2 Binary files /dev/null and b/_images/light_cat_industrial_lamp_steel_wall_a_far_on_cmp.jpg differ diff --git a/_images/light_cat_is_african_lamp_a_glass_on.jpg b/_images/light_cat_is_african_lamp_a_glass_on.jpg new file mode 100644 index 000000000..a112bf45f Binary files /dev/null and b/_images/light_cat_is_african_lamp_a_glass_on.jpg differ diff --git a/_images/light_cat_is_chandelier_a_on_cmp.jpg b/_images/light_cat_is_chandelier_a_on_cmp.jpg new file mode 100644 index 000000000..243843232 Binary files /dev/null and b/_images/light_cat_is_chandelier_a_on_cmp.jpg differ diff --git a/_images/light_cat_is_chandelier_b_on_cmp.jpg b/_images/light_cat_is_chandelier_b_on_cmp.jpg new file mode 100644 index 000000000..e9d173e84 Binary files /dev/null and b/_images/light_cat_is_chandelier_b_on_cmp.jpg differ diff --git a/_images/light_cat_is_chandelier_h_on_cmp.jpg b/_images/light_cat_is_chandelier_h_on_cmp.jpg new file mode 100644 index 000000000..7da8948f9 Binary files /dev/null and b/_images/light_cat_is_chandelier_h_on_cmp.jpg differ diff --git a/_images/light_cat_is_chandelier_h_tall_on_cmp.jpg b/_images/light_cat_is_chandelier_h_tall_on_cmp.jpg new file mode 100644 index 000000000..48bb67316 Binary files /dev/null and b/_images/light_cat_is_chandelier_h_tall_on_cmp.jpg differ diff --git a/_images/light_cat_is_chandelier_m_damaged_on_cmp.jpg b/_images/light_cat_is_chandelier_m_damaged_on_cmp.jpg new file mode 100644 index 000000000..9cadd18a5 Binary files /dev/null and b/_images/light_cat_is_chandelier_m_damaged_on_cmp.jpg differ diff --git a/_images/light_cat_is_chandelier_m_damaged_onoff_cmp.jpg b/_images/light_cat_is_chandelier_m_damaged_onoff_cmp.jpg new file mode 100644 index 000000000..ae7f49583 Binary files /dev/null and b/_images/light_cat_is_chandelier_m_damaged_onoff_cmp.jpg differ diff --git a/_images/light_cat_is_chandelier_m_onoff_cmp.jpg b/_images/light_cat_is_chandelier_m_onoff_cmp.jpg new file mode 100644 index 000000000..57e840e2a Binary files /dev/null and b/_images/light_cat_is_chandelier_m_onoff_cmp.jpg differ diff --git a/_images/light_cat_is_lamp_ceiling_a_on_cmp.jpg b/_images/light_cat_is_lamp_ceiling_a_on_cmp.jpg new file mode 100644 index 000000000..eef301014 Binary files /dev/null and b/_images/light_cat_is_lamp_ceiling_a_on_cmp.jpg differ diff --git a/_images/light_cat_is_lamp_ceiling_b_on_cmp.jpg b/_images/light_cat_is_lamp_ceiling_b_on_cmp.jpg new file mode 100644 index 000000000..1b9597da5 Binary files /dev/null and b/_images/light_cat_is_lamp_ceiling_b_on_cmp.jpg differ diff --git a/_images/light_cat_is_lamp_celling_a_b_on_cmp.jpg b/_images/light_cat_is_lamp_celling_a_b_on_cmp.jpg new file mode 100644 index 000000000..76c4609a0 Binary files /dev/null and b/_images/light_cat_is_lamp_celling_a_b_on_cmp.jpg differ diff --git a/_images/light_cat_is_lamp_celling_a_on_cmp.jpg b/_images/light_cat_is_lamp_celling_a_on_cmp.jpg new file mode 100644 index 000000000..edfb82a17 Binary files /dev/null and b/_images/light_cat_is_lamp_celling_a_on_cmp.jpg differ diff --git a/_images/light_cat_is_lamp_celling_b_a_dmg_on_cmp.jpg b/_images/light_cat_is_lamp_celling_b_a_dmg_on_cmp.jpg new file mode 100644 index 000000000..89da0d109 Binary files /dev/null and b/_images/light_cat_is_lamp_celling_b_a_dmg_on_cmp.jpg differ diff --git a/_images/light_cat_is_lamp_celling_b_b_dmg_on_cmp.jpg b/_images/light_cat_is_lamp_celling_b_b_dmg_on_cmp.jpg new file mode 100644 index 000000000..4ae654cfe Binary files /dev/null and b/_images/light_cat_is_lamp_celling_b_b_dmg_on_cmp.jpg differ diff --git a/_images/light_cat_is_lamp_celling_b_on_cmp.jpg b/_images/light_cat_is_lamp_celling_b_on_cmp.jpg new file mode 100644 index 000000000..c197f7e11 Binary files /dev/null and b/_images/light_cat_is_lamp_celling_b_on_cmp.jpg differ diff --git a/_images/light_cat_is_lamp_celling_c_on_cmp.jpg b/_images/light_cat_is_lamp_celling_c_on_cmp.jpg new file mode 100644 index 000000000..41dbe5519 Binary files /dev/null and b/_images/light_cat_is_lamp_celling_c_on_cmp.jpg differ diff --git a/_images/light_cat_is_lamp_floor_a.jpg b/_images/light_cat_is_lamp_floor_a.jpg new file mode 100644 index 000000000..1541368f4 Binary files /dev/null and b/_images/light_cat_is_lamp_floor_a.jpg differ diff --git a/_images/light_cat_is_lamp_wall_a_on_cmp.jpg b/_images/light_cat_is_lamp_wall_a_on_cmp.jpg new file mode 100644 index 000000000..bd92eddee Binary files /dev/null and b/_images/light_cat_is_lamp_wall_a_on_cmp.jpg differ diff --git a/_images/light_cat_is_lamp_wall_b.jpg b/_images/light_cat_is_lamp_wall_b.jpg new file mode 100644 index 000000000..99afcbcdb Binary files /dev/null and b/_images/light_cat_is_lamp_wall_b.jpg differ diff --git a/_images/light_cat_is_lamp_wall_c.jpg b/_images/light_cat_is_lamp_wall_c.jpg new file mode 100644 index 000000000..5e00faac0 Binary files /dev/null and b/_images/light_cat_is_lamp_wall_c.jpg differ diff --git a/_images/light_cat_is_lamp_wall_d.jpg b/_images/light_cat_is_lamp_wall_d.jpg new file mode 100644 index 000000000..95adf60fa Binary files /dev/null and b/_images/light_cat_is_lamp_wall_d.jpg differ diff --git a/_images/light_cat_is_lamp_wall_e_sh_on_cmp.jpg b/_images/light_cat_is_lamp_wall_e_sh_on_cmp.jpg new file mode 100644 index 000000000..318759318 Binary files /dev/null and b/_images/light_cat_is_lamp_wall_e_sh_on_cmp.jpg differ diff --git a/_images/light_cat_is_lamp_wall_f_on.jpg b/_images/light_cat_is_lamp_wall_f_on.jpg new file mode 100644 index 000000000..b52c347e0 Binary files /dev/null and b/_images/light_cat_is_lamp_wall_f_on.jpg differ diff --git a/_images/light_cat_is_lamp_wall_g_on_cmp.jpg b/_images/light_cat_is_lamp_wall_g_on_cmp.jpg new file mode 100644 index 000000000..05cebe726 Binary files /dev/null and b/_images/light_cat_is_lamp_wall_g_on_cmp.jpg differ diff --git a/_images/light_cat_is_lantern_hanging_a_on.jpg b/_images/light_cat_is_lantern_hanging_a_on.jpg new file mode 100644 index 000000000..c38a1df8b Binary files /dev/null and b/_images/light_cat_is_lantern_hanging_a_on.jpg differ diff --git a/_images/light_cat_is_lantern_hanging_ceiling_a_on.jpg b/_images/light_cat_is_lantern_hanging_ceiling_a_on.jpg new file mode 100644 index 000000000..e8d19e842 Binary files /dev/null and b/_images/light_cat_is_lantern_hanging_ceiling_a_on.jpg differ diff --git a/_images/light_cat_is_lantern_hanging_wall_a_on.jpg b/_images/light_cat_is_lantern_hanging_wall_a_on.jpg new file mode 100644 index 000000000..c8c18ecdb Binary files /dev/null and b/_images/light_cat_is_lantern_hanging_wall_a_on.jpg differ diff --git a/_images/light_cat_is_table_lamp_a.jpg b/_images/light_cat_is_table_lamp_a.jpg new file mode 100644 index 000000000..7677b3e51 Binary files /dev/null and b/_images/light_cat_is_table_lamp_a.jpg differ diff --git a/_images/light_cat_is_table_lamp_b.jpg b/_images/light_cat_is_table_lamp_b.jpg new file mode 100644 index 000000000..4b07dbdd5 Binary files /dev/null and b/_images/light_cat_is_table_lamp_b.jpg differ diff --git a/_images/light_cat_is_troglodyte_lamp_a_on_cmp.jpg b/_images/light_cat_is_troglodyte_lamp_a_on_cmp.jpg new file mode 100644 index 000000000..5b341afc9 Binary files /dev/null and b/_images/light_cat_is_troglodyte_lamp_a_on_cmp.jpg differ diff --git a/_images/light_cat_is_troglodyte_lamp_b_on_cmp.jpg b/_images/light_cat_is_troglodyte_lamp_b_on_cmp.jpg new file mode 100644 index 000000000..4c5668d0b Binary files /dev/null and b/_images/light_cat_is_troglodyte_lamp_b_on_cmp.jpg differ diff --git a/_images/light_cat_is_troglodyte_lamp_c_on_cmp.jpg b/_images/light_cat_is_troglodyte_lamp_c_on_cmp.jpg new file mode 100644 index 000000000..455144b9f Binary files /dev/null and b/_images/light_cat_is_troglodyte_lamp_c_on_cmp.jpg differ diff --git a/_images/light_cat_is_troglodyte_lamp_d_on_cmp.jpg b/_images/light_cat_is_troglodyte_lamp_d_on_cmp.jpg new file mode 100644 index 000000000..0234ade92 Binary files /dev/null and b/_images/light_cat_is_troglodyte_lamp_d_on_cmp.jpg differ diff --git a/_images/light_cat_is_troglodyte_lamp_e_on_cmp.jpg b/_images/light_cat_is_troglodyte_lamp_e_on_cmp.jpg new file mode 100644 index 000000000..721320d77 Binary files /dev/null and b/_images/light_cat_is_troglodyte_lamp_e_on_cmp.jpg differ diff --git a/_images/light_cat_is_troglodyte_lamp_f_on_cmp.jpg b/_images/light_cat_is_troglodyte_lamp_f_on_cmp.jpg new file mode 100644 index 000000000..5563ca241 Binary files /dev/null and b/_images/light_cat_is_troglodyte_lamp_f_on_cmp.jpg differ diff --git a/_images/light_cat_is_troglodyte_lamp_g_on_cmp.jpg b/_images/light_cat_is_troglodyte_lamp_g_on_cmp.jpg new file mode 100644 index 000000000..5948b4477 Binary files /dev/null and b/_images/light_cat_is_troglodyte_lamp_g_on_cmp.jpg differ diff --git a/_images/light_cat_lamp_wall_e_a_on_cmp.jpg b/_images/light_cat_lamp_wall_e_a_on_cmp.jpg new file mode 100644 index 000000000..1f855c386 Binary files /dev/null and b/_images/light_cat_lamp_wall_e_a_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_a_glass_on.jpg b/_images/light_cat_lamppost_a_glass_on.jpg new file mode 100644 index 000000000..1af773ce1 Binary files /dev/null and b/_images/light_cat_lamppost_a_glass_on.jpg differ diff --git a/_images/light_cat_lamppost_a_on_cmp.jpg b/_images/light_cat_lamppost_a_on_cmp.jpg new file mode 100644 index 000000000..efd7d21db Binary files /dev/null and b/_images/light_cat_lamppost_a_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_b_glass_on.jpg b/_images/light_cat_lamppost_b_glass_on.jpg new file mode 100644 index 000000000..e030bf9e1 Binary files /dev/null and b/_images/light_cat_lamppost_b_glass_on.jpg differ diff --git a/_images/light_cat_lamppost_b_on_cmp.jpg b/_images/light_cat_lamppost_b_on_cmp.jpg new file mode 100644 index 000000000..b457abfc7 Binary files /dev/null and b/_images/light_cat_lamppost_b_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_c_glass_on.jpg b/_images/light_cat_lamppost_c_glass_on.jpg new file mode 100644 index 000000000..cd53b61ad Binary files /dev/null and b/_images/light_cat_lamppost_c_glass_on.jpg differ diff --git a/_images/light_cat_lamppost_c_on_cmp.jpg b/_images/light_cat_lamppost_c_on_cmp.jpg new file mode 100644 index 000000000..ff8643129 Binary files /dev/null and b/_images/light_cat_lamppost_c_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_d_glass_on.jpg b/_images/light_cat_lamppost_d_glass_on.jpg new file mode 100644 index 000000000..15080155d Binary files /dev/null and b/_images/light_cat_lamppost_d_glass_on.jpg differ diff --git a/_images/light_cat_lamppost_d_on_cmp.jpg b/_images/light_cat_lamppost_d_on_cmp.jpg new file mode 100644 index 000000000..ff5fe6e4d Binary files /dev/null and b/_images/light_cat_lamppost_d_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_e_on_cmp.jpg b/_images/light_cat_lamppost_e_on_cmp.jpg new file mode 100644 index 000000000..e817048cb Binary files /dev/null and b/_images/light_cat_lamppost_e_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_f_glass_on.jpg b/_images/light_cat_lamppost_f_glass_on.jpg new file mode 100644 index 000000000..b0e841e9f Binary files /dev/null and b/_images/light_cat_lamppost_f_glass_on.jpg differ diff --git a/_images/light_cat_lamppost_f_on_cmp.jpg b/_images/light_cat_lamppost_f_on_cmp.jpg new file mode 100644 index 000000000..7f8ed3c1a Binary files /dev/null and b/_images/light_cat_lamppost_f_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_g_glass_on.jpg b/_images/light_cat_lamppost_g_glass_on.jpg new file mode 100644 index 000000000..269dc9562 Binary files /dev/null and b/_images/light_cat_lamppost_g_glass_on.jpg differ diff --git a/_images/light_cat_lamppost_g_on_cmp.jpg b/_images/light_cat_lamppost_g_on_cmp.jpg new file mode 100644 index 000000000..3a4116276 Binary files /dev/null and b/_images/light_cat_lamppost_g_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_h_on_cmp.jpg b/_images/light_cat_lamppost_h_on_cmp.jpg new file mode 100644 index 000000000..ab730b1af Binary files /dev/null and b/_images/light_cat_lamppost_h_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_huge_a_glass_on.jpg b/_images/light_cat_lamppost_huge_a_glass_on.jpg new file mode 100644 index 000000000..9e6045b59 Binary files /dev/null and b/_images/light_cat_lamppost_huge_a_glass_on.jpg differ diff --git a/_images/light_cat_lamppost_huge_a_on_cmp.jpg b/_images/light_cat_lamppost_huge_a_on_cmp.jpg new file mode 100644 index 000000000..1c8d05f1a Binary files /dev/null and b/_images/light_cat_lamppost_huge_a_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_huge_b_on_cmp.jpg b/_images/light_cat_lamppost_huge_b_on_cmp.jpg new file mode 100644 index 000000000..3fe6b0641 Binary files /dev/null and b/_images/light_cat_lamppost_huge_b_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_huge_c_on_cmp.jpg b/_images/light_cat_lamppost_huge_c_on_cmp.jpg new file mode 100644 index 000000000..ac6f3be56 Binary files /dev/null and b/_images/light_cat_lamppost_huge_c_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_i_glass_on.jpg b/_images/light_cat_lamppost_i_glass_on.jpg new file mode 100644 index 000000000..20f029feb Binary files /dev/null and b/_images/light_cat_lamppost_i_glass_on.jpg differ diff --git a/_images/light_cat_lamppost_i_on_cmp.jpg b/_images/light_cat_lamppost_i_on_cmp.jpg new file mode 100644 index 000000000..961848ecd Binary files /dev/null and b/_images/light_cat_lamppost_i_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_j_glass_on.jpg b/_images/light_cat_lamppost_j_glass_on.jpg new file mode 100644 index 000000000..163b3c98a Binary files /dev/null and b/_images/light_cat_lamppost_j_glass_on.jpg differ diff --git a/_images/light_cat_lamppost_j_on_cmp.jpg b/_images/light_cat_lamppost_j_on_cmp.jpg new file mode 100644 index 000000000..813cac95a Binary files /dev/null and b/_images/light_cat_lamppost_j_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_k_glass_on.jpg b/_images/light_cat_lamppost_k_glass_on.jpg new file mode 100644 index 000000000..218b873c8 Binary files /dev/null and b/_images/light_cat_lamppost_k_glass_on.jpg differ diff --git a/_images/light_cat_lamppost_k_on_cmp.jpg b/_images/light_cat_lamppost_k_on_cmp.jpg new file mode 100644 index 000000000..96cd200a5 Binary files /dev/null and b/_images/light_cat_lamppost_k_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_l_glass_always_on.jpg b/_images/light_cat_lamppost_l_glass_always_on.jpg new file mode 100644 index 000000000..a287a4a1c Binary files /dev/null and b/_images/light_cat_lamppost_l_glass_always_on.jpg differ diff --git a/_images/light_cat_lamppost_l_glass_on.jpg b/_images/light_cat_lamppost_l_glass_on.jpg new file mode 100644 index 000000000..a67b204cb Binary files /dev/null and b/_images/light_cat_lamppost_l_glass_on.jpg differ diff --git a/_images/light_cat_lamppost_l_on_always_cmp.jpg b/_images/light_cat_lamppost_l_on_always_cmp.jpg new file mode 100644 index 000000000..8979e28ff Binary files /dev/null and b/_images/light_cat_lamppost_l_on_always_cmp.jpg differ diff --git a/_images/light_cat_lamppost_m_glass_on.jpg b/_images/light_cat_lamppost_m_glass_on.jpg new file mode 100644 index 000000000..10928bd01 Binary files /dev/null and b/_images/light_cat_lamppost_m_glass_on.jpg differ diff --git a/_images/light_cat_lamppost_m_on_cmp.jpg b/_images/light_cat_lamppost_m_on_cmp.jpg new file mode 100644 index 000000000..54cfcef1b Binary files /dev/null and b/_images/light_cat_lamppost_m_on_cmp.jpg differ diff --git a/_images/light_cat_lamppost_q_on_cmp.jpg b/_images/light_cat_lamppost_q_on_cmp.jpg new file mode 100644 index 000000000..3336ec204 Binary files /dev/null and b/_images/light_cat_lamppost_q_on_cmp.jpg differ diff --git a/_images/light_cat_normandy_railway_bunker_a_projector_a_on_cmp.jpg b/_images/light_cat_normandy_railway_bunker_a_projector_a_on_cmp.jpg new file mode 100644 index 000000000..db4fad7d6 Binary files /dev/null and b/_images/light_cat_normandy_railway_bunker_a_projector_a_on_cmp.jpg differ diff --git a/_images/light_cat_town_lamp_a_on.jpg b/_images/light_cat_town_lamp_a_on.jpg new file mode 100644 index 000000000..4921a7832 Binary files /dev/null and b/_images/light_cat_town_lamp_a_on.jpg differ diff --git a/_images/light_cat_us_ammunition_bunker_lamp_ceiling_a_on.jpg b/_images/light_cat_us_ammunition_bunker_lamp_ceiling_a_on.jpg new file mode 100644 index 000000000..fb210bc49 Binary files /dev/null and b/_images/light_cat_us_ammunition_bunker_lamp_ceiling_a_on.jpg differ diff --git a/_images/light_cat_wall_lamp_a_glass_on.jpg b/_images/light_cat_wall_lamp_a_glass_on.jpg new file mode 100644 index 000000000..4956570c1 Binary files /dev/null and b/_images/light_cat_wall_lamp_a_glass_on.jpg differ diff --git a/_images/light_cat_wall_lamp_a_on_cmp.jpg b/_images/light_cat_wall_lamp_a_on_cmp.jpg new file mode 100644 index 000000000..72d182d9c Binary files /dev/null and b/_images/light_cat_wall_lamp_a_on_cmp.jpg differ diff --git a/_images/light_cat_wall_lamp_a_onoff_b_cmp.jpg b/_images/light_cat_wall_lamp_a_onoff_b_cmp.jpg new file mode 100644 index 000000000..f6f7678df Binary files /dev/null and b/_images/light_cat_wall_lamp_a_onoff_b_cmp.jpg differ diff --git a/_images/light_cat_wooden_power_pole_d_glass_on.jpg b/_images/light_cat_wooden_power_pole_d_glass_on.jpg new file mode 100644 index 000000000..0f396cec5 Binary files /dev/null and b/_images/light_cat_wooden_power_pole_d_glass_on.jpg differ diff --git a/_images/light_cat_wooden_power_pole_d_on_cmp.jpg b/_images/light_cat_wooden_power_pole_d_on_cmp.jpg new file mode 100644 index 000000000..1589ee254 Binary files /dev/null and b/_images/light_cat_wooden_power_pole_d_on_cmp.jpg differ diff --git a/_images/light_cat_wooden_power_pole_f_on_cmp.jpg b/_images/light_cat_wooden_power_pole_f_on_cmp.jpg new file mode 100644 index 000000000..fff2b07ed Binary files /dev/null and b/_images/light_cat_wooden_power_pole_f_on_cmp.jpg differ diff --git a/_images/lights_01.jpg b/_images/lights_01.jpg new file mode 100644 index 000000000..551973baa Binary files /dev/null and b/_images/lights_01.jpg differ diff --git a/_images/lights_02.jpg b/_images/lights_02.jpg new file mode 100644 index 000000000..e7d1a42fd Binary files /dev/null and b/_images/lights_02.jpg differ diff --git a/_images/lights_03.jpg b/_images/lights_03.jpg new file mode 100644 index 000000000..a156f9fab Binary files /dev/null and b/_images/lights_03.jpg differ diff --git a/_images/lights_04.jpg b/_images/lights_04.jpg new file mode 100644 index 000000000..eead0321d Binary files /dev/null and b/_images/lights_04.jpg differ diff --git a/_images/lod_generator_00.png b/_images/lod_generator_00.png new file mode 100644 index 000000000..8075acb29 Binary files /dev/null and b/_images/lod_generator_00.png differ diff --git a/_images/lod_generator_01.png b/_images/lod_generator_01.png new file mode 100644 index 000000000..901323e6c Binary files /dev/null and b/_images/lod_generator_01.png differ diff --git a/_images/lod_generator_02.png b/_images/lod_generator_02.png new file mode 100644 index 000000000..c81e8e507 Binary files /dev/null and b/_images/lod_generator_02.png differ diff --git a/_images/lod_generator_04.png b/_images/lod_generator_04.png new file mode 100644 index 000000000..0f9f34c37 Binary files /dev/null and b/_images/lod_generator_04.png differ diff --git a/_images/lod_generator_05.png b/_images/lod_generator_05.png new file mode 100644 index 000000000..396562b85 Binary files /dev/null and b/_images/lod_generator_05.png differ diff --git a/_images/log_text_field.png b/_images/log_text_field.png new file mode 100644 index 000000000..84e71bd9d Binary files /dev/null and b/_images/log_text_field.png differ diff --git a/_images/magnetic-balls.jpg b/_images/magnetic-balls.jpg new file mode 100644 index 000000000..b97b0d9de Binary files /dev/null and b/_images/magnetic-balls.jpg differ diff --git a/_images/mat_dagormat.png b/_images/mat_dagormat.png new file mode 100644 index 000000000..c08b10e04 Binary files /dev/null and b/_images/mat_dagormat.png differ diff --git a/_images/mat_dagormat_main.png b/_images/mat_dagormat_main.png new file mode 100644 index 000000000..ce9f43105 Binary files /dev/null and b/_images/mat_dagormat_main.png differ diff --git a/_images/mat_dagormat_optional.png b/_images/mat_dagormat_optional.png new file mode 100644 index 000000000..e786997bc Binary files /dev/null and b/_images/mat_dagormat_optional.png differ diff --git a/_images/mat_dagormat_proxy.png b/_images/mat_dagormat_proxy.png new file mode 100644 index 000000000..b0fbabf09 Binary files /dev/null and b/_images/mat_dagormat_proxy.png differ diff --git a/_images/mat_dagormat_shader.png b/_images/mat_dagormat_shader.png new file mode 100644 index 000000000..53b1fa525 Binary files /dev/null and b/_images/mat_dagormat_shader.png differ diff --git a/_images/mat_dagormat_textures.png b/_images/mat_dagormat_textures.png new file mode 100644 index 000000000..3be78a436 Binary files /dev/null and b/_images/mat_dagormat_textures.png differ diff --git a/_images/mat_dagormat_tools_1.png b/_images/mat_dagormat_tools_1.png new file mode 100644 index 000000000..f42f2e9ac Binary files /dev/null and b/_images/mat_dagormat_tools_1.png differ diff --git a/_images/mat_dagormat_tools_2.png b/_images/mat_dagormat_tools_2.png new file mode 100644 index 000000000..f776deca4 Binary files /dev/null and b/_images/mat_dagormat_tools_2.png differ diff --git a/_images/navmesh_01.jpg b/_images/navmesh_01.jpg new file mode 100644 index 000000000..297197c6d Binary files /dev/null and b/_images/navmesh_01.jpg differ diff --git a/_images/navmesh_02.jpg b/_images/navmesh_02.jpg new file mode 100644 index 000000000..aae99e44c Binary files /dev/null and b/_images/navmesh_02.jpg differ diff --git a/_images/navmesh_03.jpg b/_images/navmesh_03.jpg new file mode 100644 index 000000000..4d954ac8d Binary files /dev/null and b/_images/navmesh_03.jpg differ diff --git a/_images/navmesh_04.jpg b/_images/navmesh_04.jpg new file mode 100644 index 000000000..937874979 Binary files /dev/null and b/_images/navmesh_04.jpg differ diff --git a/_images/navmesh_05.jpg b/_images/navmesh_05.jpg new file mode 100644 index 000000000..146428dca Binary files /dev/null and b/_images/navmesh_05.jpg differ diff --git a/_images/navmesh_06.jpg b/_images/navmesh_06.jpg new file mode 100644 index 000000000..c21146e71 Binary files /dev/null and b/_images/navmesh_06.jpg differ diff --git a/_images/navmesh_07.jpg b/_images/navmesh_07.jpg new file mode 100644 index 000000000..a130bc7fb Binary files /dev/null and b/_images/navmesh_07.jpg differ diff --git a/_images/navmesh_08.jpg b/_images/navmesh_08.jpg new file mode 100644 index 000000000..ea7cb813a Binary files /dev/null and b/_images/navmesh_08.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_01.jpg b/_images/navmesh_gen_vert_ladders_01.jpg new file mode 100644 index 000000000..9f71ea4e3 Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_01.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_02.jpg b/_images/navmesh_gen_vert_ladders_02.jpg new file mode 100644 index 000000000..77fe6d1cd Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_02.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_03.jpg b/_images/navmesh_gen_vert_ladders_03.jpg new file mode 100644 index 000000000..77c344c1a Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_03.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_04.jpg b/_images/navmesh_gen_vert_ladders_04.jpg new file mode 100644 index 000000000..118602b91 Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_04.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_05.jpg b/_images/navmesh_gen_vert_ladders_05.jpg new file mode 100644 index 000000000..c8b2cec77 Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_05.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_06.jpg b/_images/navmesh_gen_vert_ladders_06.jpg new file mode 100644 index 000000000..cb85a30eb Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_06.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_07.jpg b/_images/navmesh_gen_vert_ladders_07.jpg new file mode 100644 index 000000000..26d436ece Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_07.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_08.jpg b/_images/navmesh_gen_vert_ladders_08.jpg new file mode 100644 index 000000000..4933b5306 Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_08.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_09.jpg b/_images/navmesh_gen_vert_ladders_09.jpg new file mode 100644 index 000000000..311dd5c9c Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_09.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_10.jpg b/_images/navmesh_gen_vert_ladders_10.jpg new file mode 100644 index 000000000..c30e95e91 Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_10.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_11.jpg b/_images/navmesh_gen_vert_ladders_11.jpg new file mode 100644 index 000000000..f3674287c Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_11.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_12.jpg b/_images/navmesh_gen_vert_ladders_12.jpg new file mode 100644 index 000000000..87a9a84d6 Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_12.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_13.jpg b/_images/navmesh_gen_vert_ladders_13.jpg new file mode 100644 index 000000000..54bfd302d Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_13.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_14.jpg b/_images/navmesh_gen_vert_ladders_14.jpg new file mode 100644 index 000000000..f4d3a74cc Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_14.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_15.jpg b/_images/navmesh_gen_vert_ladders_15.jpg new file mode 100644 index 000000000..43b5135a4 Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_15.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_16.jpg b/_images/navmesh_gen_vert_ladders_16.jpg new file mode 100644 index 000000000..b495b2cec Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_16.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_17.jpg b/_images/navmesh_gen_vert_ladders_17.jpg new file mode 100644 index 000000000..792361b4d Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_17.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_18.jpg b/_images/navmesh_gen_vert_ladders_18.jpg new file mode 100644 index 000000000..ab741f5a6 Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_18.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_19.jpg b/_images/navmesh_gen_vert_ladders_19.jpg new file mode 100644 index 000000000..1e86ca317 Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_19.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_20.jpg b/_images/navmesh_gen_vert_ladders_20.jpg new file mode 100644 index 000000000..71bde3f0f Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_20.jpg differ diff --git a/_images/navmesh_gen_vert_ladders_21.jpg b/_images/navmesh_gen_vert_ladders_21.jpg new file mode 100644 index 000000000..dfb8d31a0 Binary files /dev/null and b/_images/navmesh_gen_vert_ladders_21.jpg differ diff --git a/_images/obj_prop.png b/_images/obj_prop.png new file mode 100644 index 000000000..faa0ea574 Binary files /dev/null and b/_images/obj_prop.png differ diff --git a/_images/occluder_box_01.jpg b/_images/occluder_box_01.jpg new file mode 100644 index 000000000..187daff6e Binary files /dev/null and b/_images/occluder_box_01.jpg differ diff --git a/_images/occluder_box_02.jpg b/_images/occluder_box_02.jpg new file mode 100644 index 000000000..ff299bb5e Binary files /dev/null and b/_images/occluder_box_02.jpg differ diff --git a/_images/occluder_box_03.jpg b/_images/occluder_box_03.jpg new file mode 100644 index 000000000..68a2df205 Binary files /dev/null and b/_images/occluder_box_03.jpg differ diff --git a/_images/occluder_box_04.jpg b/_images/occluder_box_04.jpg new file mode 100644 index 000000000..af3f48545 Binary files /dev/null and b/_images/occluder_box_04.jpg differ diff --git a/_images/occluder_box_05.jpg b/_images/occluder_box_05.jpg new file mode 100644 index 000000000..7b7161d9a Binary files /dev/null and b/_images/occluder_box_05.jpg differ diff --git a/_images/occluder_box_06.jpg b/_images/occluder_box_06.jpg new file mode 100644 index 000000000..1c97f8693 Binary files /dev/null and b/_images/occluder_box_06.jpg differ diff --git a/_images/occluder_box_07.jpg b/_images/occluder_box_07.jpg new file mode 100644 index 000000000..15176d06e Binary files /dev/null and b/_images/occluder_box_07.jpg differ diff --git a/_images/occluder_box_08.jpg b/_images/occluder_box_08.jpg new file mode 100644 index 000000000..b828de0c5 Binary files /dev/null and b/_images/occluder_box_08.jpg differ diff --git a/_images/occluder_box_09.jpg b/_images/occluder_box_09.jpg new file mode 100644 index 000000000..201c9fdf5 Binary files /dev/null and b/_images/occluder_box_09.jpg differ diff --git a/_images/occluder_box_10.jpg b/_images/occluder_box_10.jpg new file mode 100644 index 000000000..4ad4ad839 Binary files /dev/null and b/_images/occluder_box_10.jpg differ diff --git a/_images/occluder_box_11.jpg b/_images/occluder_box_11.jpg new file mode 100644 index 000000000..a29500d99 Binary files /dev/null and b/_images/occluder_box_11.jpg differ diff --git a/_images/occluder_box_12.jpg b/_images/occluder_box_12.jpg new file mode 100644 index 000000000..eb72260d1 Binary files /dev/null and b/_images/occluder_box_12.jpg differ diff --git a/_images/occluder_box_13.jpg b/_images/occluder_box_13.jpg new file mode 100644 index 000000000..ee338f9aa Binary files /dev/null and b/_images/occluder_box_13.jpg differ diff --git a/_images/occluder_box_14.jpg b/_images/occluder_box_14.jpg new file mode 100644 index 000000000..0939f47ae Binary files /dev/null and b/_images/occluder_box_14.jpg differ diff --git a/_images/occluder_box_15.jpg b/_images/occluder_box_15.jpg new file mode 100644 index 000000000..9a7b80855 Binary files /dev/null and b/_images/occluder_box_15.jpg differ diff --git a/_images/occluder_box_16.jpg b/_images/occluder_box_16.jpg new file mode 100644 index 000000000..a29500d99 Binary files /dev/null and b/_images/occluder_box_16.jpg differ diff --git a/_images/occluder_box_17.jpg b/_images/occluder_box_17.jpg new file mode 100644 index 000000000..c0fdd0c72 Binary files /dev/null and b/_images/occluder_box_17.jpg differ diff --git a/_images/occluder_box_18.jpg b/_images/occluder_box_18.jpg new file mode 100644 index 000000000..03cf9574c Binary files /dev/null and b/_images/occluder_box_18.jpg differ diff --git a/_images/occluder_box_19.jpg b/_images/occluder_box_19.jpg new file mode 100644 index 000000000..56c423067 Binary files /dev/null and b/_images/occluder_box_19.jpg differ diff --git a/_images/occluder_box_20.jpg b/_images/occluder_box_20.jpg new file mode 100644 index 000000000..999b8188e Binary files /dev/null and b/_images/occluder_box_20.jpg differ diff --git a/_images/photometric_lights_01.jpg b/_images/photometric_lights_01.jpg new file mode 100644 index 000000000..329f00220 Binary files /dev/null and b/_images/photometric_lights_01.jpg differ diff --git a/_images/photometric_lights_02.jpg b/_images/photometric_lights_02.jpg new file mode 100644 index 000000000..762b01d6c Binary files /dev/null and b/_images/photometric_lights_02.jpg differ diff --git a/_images/photometric_lights_03.jpg b/_images/photometric_lights_03.jpg new file mode 100644 index 000000000..0f121ace2 Binary files /dev/null and b/_images/photometric_lights_03.jpg differ diff --git a/_images/photometric_lights_04.jpg b/_images/photometric_lights_04.jpg new file mode 100644 index 000000000..299d988f4 Binary files /dev/null and b/_images/photometric_lights_04.jpg differ diff --git a/_images/photometric_lights_05.jpg b/_images/photometric_lights_05.jpg new file mode 100644 index 000000000..0dbac18f2 Binary files /dev/null and b/_images/photometric_lights_05.jpg differ diff --git a/_images/photometric_lights_06.jpg b/_images/photometric_lights_06.jpg new file mode 100644 index 000000000..dab0e7a79 Binary files /dev/null and b/_images/photometric_lights_06.jpg differ diff --git a/_images/photometric_lights_07.jpg b/_images/photometric_lights_07.jpg new file mode 100644 index 000000000..52ec421f4 Binary files /dev/null and b/_images/photometric_lights_07.jpg differ diff --git a/_images/photometric_lights_08.jpg b/_images/photometric_lights_08.jpg new file mode 100644 index 000000000..f6bed51e6 Binary files /dev/null and b/_images/photometric_lights_08.jpg differ diff --git a/_images/photometric_lights_09.jpg b/_images/photometric_lights_09.jpg new file mode 100644 index 000000000..84b341f81 Binary files /dev/null and b/_images/photometric_lights_09.jpg differ diff --git a/_images/photometric_lights_10.jpg b/_images/photometric_lights_10.jpg new file mode 100644 index 000000000..8bd27f926 Binary files /dev/null and b/_images/photometric_lights_10.jpg differ diff --git a/_images/photometric_lights_11.jpg b/_images/photometric_lights_11.jpg new file mode 100644 index 000000000..633891d36 Binary files /dev/null and b/_images/photometric_lights_11.jpg differ diff --git a/_images/photometric_lights_12.jpg b/_images/photometric_lights_12.jpg new file mode 100644 index 000000000..482b3c75d Binary files /dev/null and b/_images/photometric_lights_12.jpg differ diff --git a/_images/photometric_lights_13.jpg b/_images/photometric_lights_13.jpg new file mode 100644 index 000000000..0b7ba181a Binary files /dev/null and b/_images/photometric_lights_13.jpg differ diff --git a/_images/photometric_lights_14.jpg b/_images/photometric_lights_14.jpg new file mode 100644 index 000000000..4ffe2b217 Binary files /dev/null and b/_images/photometric_lights_14.jpg differ diff --git a/_images/photometric_lights_15.jpg b/_images/photometric_lights_15.jpg new file mode 100644 index 000000000..e50e90955 Binary files /dev/null and b/_images/photometric_lights_15.jpg differ diff --git a/_images/photometric_lights_16.jpg b/_images/photometric_lights_16.jpg new file mode 100644 index 000000000..0b0fa64fa Binary files /dev/null and b/_images/photometric_lights_16.jpg differ diff --git a/_images/photometric_lights_17.jpg b/_images/photometric_lights_17.jpg new file mode 100644 index 000000000..b14070b1f Binary files /dev/null and b/_images/photometric_lights_17.jpg differ diff --git a/_images/photometric_lights_18.jpg b/_images/photometric_lights_18.jpg new file mode 100644 index 000000000..27190e2fb Binary files /dev/null and b/_images/photometric_lights_18.jpg differ diff --git a/_images/photometric_lights_19.jpg b/_images/photometric_lights_19.jpg new file mode 100644 index 000000000..9b4f0eb9e Binary files /dev/null and b/_images/photometric_lights_19.jpg differ diff --git a/_images/photometric_lights_20.jpg b/_images/photometric_lights_20.jpg new file mode 100644 index 000000000..023a10691 Binary files /dev/null and b/_images/photometric_lights_20.jpg differ diff --git a/_images/photometry_01.jpg b/_images/photometry_01.jpg new file mode 100644 index 000000000..521fbd772 Binary files /dev/null and b/_images/photometry_01.jpg differ diff --git a/_images/photometry_02.jpg b/_images/photometry_02.jpg new file mode 100644 index 000000000..628a312ab Binary files /dev/null and b/_images/photometry_02.jpg differ diff --git a/_images/photometry_03.jpg b/_images/photometry_03.jpg new file mode 100644 index 000000000..43ed3ba5e Binary files /dev/null and b/_images/photometry_03.jpg differ diff --git a/_images/photometry_04.jpg b/_images/photometry_04.jpg new file mode 100644 index 000000000..09de52abd Binary files /dev/null and b/_images/photometry_04.jpg differ diff --git a/_images/photometry_05.jpg b/_images/photometry_05.jpg new file mode 100644 index 000000000..ce7871c64 Binary files /dev/null and b/_images/photometry_05.jpg differ diff --git a/_images/photometry_06.jpg b/_images/photometry_06.jpg new file mode 100644 index 000000000..196703d19 Binary files /dev/null and b/_images/photometry_06.jpg differ diff --git a/_images/photometry_07.jpg b/_images/photometry_07.jpg new file mode 100644 index 000000000..109e58716 Binary files /dev/null and b/_images/photometry_07.jpg differ diff --git a/_images/photometry_08.jpg b/_images/photometry_08.jpg new file mode 100644 index 000000000..06cd3229e Binary files /dev/null and b/_images/photometry_08.jpg differ diff --git a/_images/pivot_painter_01.png b/_images/pivot_painter_01.png new file mode 100644 index 000000000..901323e6c Binary files /dev/null and b/_images/pivot_painter_01.png differ diff --git a/_images/pivot_painter_02.png b/_images/pivot_painter_02.png new file mode 100644 index 000000000..71d06fe82 Binary files /dev/null and b/_images/pivot_painter_02.png differ diff --git a/_images/pivot_painter_03.png b/_images/pivot_painter_03.png new file mode 100644 index 000000000..a6d60ef0d Binary files /dev/null and b/_images/pivot_painter_03.png differ diff --git a/_images/pivot_painter_04.png b/_images/pivot_painter_04.png new file mode 100644 index 000000000..0510ce1e7 Binary files /dev/null and b/_images/pivot_painter_04.png differ diff --git a/_images/pivot_painter_05.png b/_images/pivot_painter_05.png new file mode 100644 index 000000000..6cda08b55 Binary files /dev/null and b/_images/pivot_painter_05.png differ diff --git a/_images/proxymats_01.jpg b/_images/proxymats_01.jpg new file mode 100644 index 000000000..dbd777157 Binary files /dev/null and b/_images/proxymats_01.jpg differ diff --git a/_images/proxymats_02.jpg b/_images/proxymats_02.jpg new file mode 100644 index 000000000..f308b2da0 Binary files /dev/null and b/_images/proxymats_02.jpg differ diff --git a/_images/rendinst_blend_diffuse_decal_01.jpg b/_images/rendinst_blend_diffuse_decal_01.jpg new file mode 100644 index 000000000..cc070c727 Binary files /dev/null and b/_images/rendinst_blend_diffuse_decal_01.jpg differ diff --git a/_images/rendinst_blend_diffuse_decal_02.jpg b/_images/rendinst_blend_diffuse_decal_02.jpg new file mode 100644 index 000000000..a2e68aaf6 Binary files /dev/null and b/_images/rendinst_blend_diffuse_decal_02.jpg differ diff --git a/_images/rendinst_blend_diffuse_decal_03.jpg b/_images/rendinst_blend_diffuse_decal_03.jpg new file mode 100644 index 000000000..bd93fe4fa Binary files /dev/null and b/_images/rendinst_blend_diffuse_decal_03.jpg differ diff --git a/_images/rendinst_blend_diffuse_decal_04.jpg b/_images/rendinst_blend_diffuse_decal_04.jpg new file mode 100644 index 000000000..82c319fb1 Binary files /dev/null and b/_images/rendinst_blend_diffuse_decal_04.jpg differ diff --git a/_images/rendinst_blend_diffuse_decal_05.jpg b/_images/rendinst_blend_diffuse_decal_05.jpg new file mode 100644 index 000000000..529a87aad Binary files /dev/null and b/_images/rendinst_blend_diffuse_decal_05.jpg differ diff --git a/_images/rendinst_blend_diffuse_decal_06.jpg b/_images/rendinst_blend_diffuse_decal_06.jpg new file mode 100644 index 000000000..805ba53f3 Binary files /dev/null and b/_images/rendinst_blend_diffuse_decal_06.jpg differ diff --git a/_images/rendinst_blend_diffuse_decal_07.jpg b/_images/rendinst_blend_diffuse_decal_07.jpg new file mode 100644 index 000000000..4d3771471 Binary files /dev/null and b/_images/rendinst_blend_diffuse_decal_07.jpg differ diff --git a/_images/rendinst_emissive_01.jpg b/_images/rendinst_emissive_01.jpg new file mode 100644 index 000000000..c74aea657 Binary files /dev/null and b/_images/rendinst_emissive_01.jpg differ diff --git a/_images/rendinst_emissive_02.jpg b/_images/rendinst_emissive_02.jpg new file mode 100644 index 000000000..52b4c73b6 Binary files /dev/null and b/_images/rendinst_emissive_02.jpg differ diff --git a/_images/rendinst_emissive_03.jpg b/_images/rendinst_emissive_03.jpg new file mode 100644 index 000000000..9243fbe83 Binary files /dev/null and b/_images/rendinst_emissive_03.jpg differ diff --git a/_images/rendinst_emissive_04.jpg b/_images/rendinst_emissive_04.jpg new file mode 100644 index 000000000..087872a17 Binary files /dev/null and b/_images/rendinst_emissive_04.jpg differ diff --git a/_images/rendinst_emissive_05.jpg b/_images/rendinst_emissive_05.jpg new file mode 100644 index 000000000..0eaac06e4 Binary files /dev/null and b/_images/rendinst_emissive_05.jpg differ diff --git a/_images/rendinst_emissive_06.jpg b/_images/rendinst_emissive_06.jpg new file mode 100644 index 000000000..52630a921 Binary files /dev/null and b/_images/rendinst_emissive_06.jpg differ diff --git a/_images/rendinst_emissive_07.jpg b/_images/rendinst_emissive_07.jpg new file mode 100644 index 000000000..28b6c3512 Binary files /dev/null and b/_images/rendinst_emissive_07.jpg differ diff --git a/_images/rendinst_emissive_08.jpg b/_images/rendinst_emissive_08.jpg new file mode 100644 index 000000000..b5b606217 Binary files /dev/null and b/_images/rendinst_emissive_08.jpg differ diff --git a/_images/rendinst_emissive_09.jpg b/_images/rendinst_emissive_09.jpg new file mode 100644 index 000000000..ca5e82e99 Binary files /dev/null and b/_images/rendinst_emissive_09.jpg differ diff --git a/_images/rendinst_emissive_10.jpg b/_images/rendinst_emissive_10.jpg new file mode 100644 index 000000000..4c63e0506 Binary files /dev/null and b/_images/rendinst_emissive_10.jpg differ diff --git a/_images/rendinst_emissive_11.jpg b/_images/rendinst_emissive_11.jpg new file mode 100644 index 000000000..b4c872444 Binary files /dev/null and b/_images/rendinst_emissive_11.jpg differ diff --git a/_images/rendinst_emissive_12.jpg b/_images/rendinst_emissive_12.jpg new file mode 100644 index 000000000..24db3c8cb Binary files /dev/null and b/_images/rendinst_emissive_12.jpg differ diff --git a/_images/rendinst_emissive_13.jpg b/_images/rendinst_emissive_13.jpg new file mode 100644 index 000000000..0679d2589 Binary files /dev/null and b/_images/rendinst_emissive_13.jpg differ diff --git a/_images/rendinst_emissive_14.jpg b/_images/rendinst_emissive_14.jpg new file mode 100644 index 000000000..5c8ac220e Binary files /dev/null and b/_images/rendinst_emissive_14.jpg differ diff --git a/_images/rendinst_emissive_15.jpg b/_images/rendinst_emissive_15.jpg new file mode 100644 index 000000000..f9c09fc2d Binary files /dev/null and b/_images/rendinst_emissive_15.jpg differ diff --git a/_images/rendinst_emissive_16.jpg b/_images/rendinst_emissive_16.jpg new file mode 100644 index 000000000..ceb8159f5 Binary files /dev/null and b/_images/rendinst_emissive_16.jpg differ diff --git a/_images/rendinst_emissive_17.jpg b/_images/rendinst_emissive_17.jpg new file mode 100644 index 000000000..d4a028975 Binary files /dev/null and b/_images/rendinst_emissive_17.jpg differ diff --git a/_images/rendinst_emissive_18.jpg b/_images/rendinst_emissive_18.jpg new file mode 100644 index 000000000..e500eef2e Binary files /dev/null and b/_images/rendinst_emissive_18.jpg differ diff --git a/_images/rendinst_emissive_19.jpg b/_images/rendinst_emissive_19.jpg new file mode 100644 index 000000000..263dbcab1 Binary files /dev/null and b/_images/rendinst_emissive_19.jpg differ diff --git a/_images/rendinst_emissive_20.jpg b/_images/rendinst_emissive_20.jpg new file mode 100644 index 000000000..a2ad0586a Binary files /dev/null and b/_images/rendinst_emissive_20.jpg differ diff --git a/_images/rendinst_emissive_21.jpg b/_images/rendinst_emissive_21.jpg new file mode 100644 index 000000000..6bb75d89b Binary files /dev/null and b/_images/rendinst_emissive_21.jpg differ diff --git a/_images/rendinst_emissive_22.jpg b/_images/rendinst_emissive_22.jpg new file mode 100644 index 000000000..7700d2fed Binary files /dev/null and b/_images/rendinst_emissive_22.jpg differ diff --git a/_images/rendinst_emissive_23.jpg b/_images/rendinst_emissive_23.jpg new file mode 100644 index 000000000..a2d18e56b Binary files /dev/null and b/_images/rendinst_emissive_23.jpg differ diff --git a/_images/rendinst_flag_colored_01.jpg b/_images/rendinst_flag_colored_01.jpg new file mode 100644 index 000000000..a63ca31e4 Binary files /dev/null and b/_images/rendinst_flag_colored_01.jpg differ diff --git a/_images/rendinst_flag_colored_02.gif b/_images/rendinst_flag_colored_02.gif new file mode 100644 index 000000000..d492aa031 Binary files /dev/null and b/_images/rendinst_flag_colored_02.gif differ diff --git a/_images/rendinst_flag_colored_03.jpg b/_images/rendinst_flag_colored_03.jpg new file mode 100644 index 000000000..42ca3a95d Binary files /dev/null and b/_images/rendinst_flag_colored_03.jpg differ diff --git a/_images/rendinst_flag_colored_04.gif b/_images/rendinst_flag_colored_04.gif new file mode 100644 index 000000000..f380f2ea7 Binary files /dev/null and b/_images/rendinst_flag_colored_04.gif differ diff --git a/_images/rendinst_flag_colored_05.gif b/_images/rendinst_flag_colored_05.gif new file mode 100644 index 000000000..d492aa031 Binary files /dev/null and b/_images/rendinst_flag_colored_05.gif differ diff --git a/_images/rendinst_flag_colored_06.gif b/_images/rendinst_flag_colored_06.gif new file mode 100644 index 000000000..d492aa031 Binary files /dev/null and b/_images/rendinst_flag_colored_06.gif differ diff --git a/_images/rendinst_flag_colored_07.gif b/_images/rendinst_flag_colored_07.gif new file mode 100644 index 000000000..bba2c762b Binary files /dev/null and b/_images/rendinst_flag_colored_07.gif differ diff --git a/_images/rendinst_flag_colored_08.gif b/_images/rendinst_flag_colored_08.gif new file mode 100644 index 000000000..9831288c4 Binary files /dev/null and b/_images/rendinst_flag_colored_08.gif differ diff --git a/_images/rendinst_flag_colored_09.gif b/_images/rendinst_flag_colored_09.gif new file mode 100644 index 000000000..d492aa031 Binary files /dev/null and b/_images/rendinst_flag_colored_09.gif differ diff --git a/_images/rendinst_flag_colored_10.gif b/_images/rendinst_flag_colored_10.gif new file mode 100644 index 000000000..fa8884317 Binary files /dev/null and b/_images/rendinst_flag_colored_10.gif differ diff --git a/_images/rendinst_flag_colored_11.gif b/_images/rendinst_flag_colored_11.gif new file mode 100644 index 000000000..b85cb508a Binary files /dev/null and b/_images/rendinst_flag_colored_11.gif differ diff --git a/_images/rendinst_interior_mapping_01.jpg b/_images/rendinst_interior_mapping_01.jpg new file mode 100644 index 000000000..1b4f3c1f7 Binary files /dev/null and b/_images/rendinst_interior_mapping_01.jpg differ diff --git a/_images/rendinst_interior_mapping_02.jpg b/_images/rendinst_interior_mapping_02.jpg new file mode 100644 index 000000000..d0f649fc8 Binary files /dev/null and b/_images/rendinst_interior_mapping_02.jpg differ diff --git a/_images/rendinst_interior_mapping_03.jpg b/_images/rendinst_interior_mapping_03.jpg new file mode 100644 index 000000000..e5ab782ef Binary files /dev/null and b/_images/rendinst_interior_mapping_03.jpg differ diff --git a/_images/rendinst_interior_mapping_04.jpg b/_images/rendinst_interior_mapping_04.jpg new file mode 100644 index 000000000..b8371181d Binary files /dev/null and b/_images/rendinst_interior_mapping_04.jpg differ diff --git a/_images/rendinst_interior_mapping_05.jpg b/_images/rendinst_interior_mapping_05.jpg new file mode 100644 index 000000000..b48e13985 Binary files /dev/null and b/_images/rendinst_interior_mapping_05.jpg differ diff --git a/_images/rendinst_interior_mapping_06.jpg b/_images/rendinst_interior_mapping_06.jpg new file mode 100644 index 000000000..4498b2161 Binary files /dev/null and b/_images/rendinst_interior_mapping_06.jpg differ diff --git a/_images/rendinst_interior_mapping_07.jpg b/_images/rendinst_interior_mapping_07.jpg new file mode 100644 index 000000000..372c28ce1 Binary files /dev/null and b/_images/rendinst_interior_mapping_07.jpg differ diff --git a/_images/rendinst_interior_mapping_08.jpg b/_images/rendinst_interior_mapping_08.jpg new file mode 100644 index 000000000..a5f74a094 Binary files /dev/null and b/_images/rendinst_interior_mapping_08.jpg differ diff --git a/_images/rendinst_interior_mapping_09.jpg b/_images/rendinst_interior_mapping_09.jpg new file mode 100644 index 000000000..8fe9c1c3a Binary files /dev/null and b/_images/rendinst_interior_mapping_09.jpg differ diff --git a/_images/rendinst_interior_mapping_10.jpg b/_images/rendinst_interior_mapping_10.jpg new file mode 100644 index 000000000..2cc6580e6 Binary files /dev/null and b/_images/rendinst_interior_mapping_10.jpg differ diff --git a/_images/rendinst_interior_mapping_11.jpg b/_images/rendinst_interior_mapping_11.jpg new file mode 100644 index 000000000..181660937 Binary files /dev/null and b/_images/rendinst_interior_mapping_11.jpg differ diff --git a/_images/rendinst_interior_mapping_12.jpg b/_images/rendinst_interior_mapping_12.jpg new file mode 100644 index 000000000..23bc2df50 Binary files /dev/null and b/_images/rendinst_interior_mapping_12.jpg differ diff --git a/_images/rendinst_interior_mapping_13.jpg b/_images/rendinst_interior_mapping_13.jpg new file mode 100644 index 000000000..5b1ebbac8 Binary files /dev/null and b/_images/rendinst_interior_mapping_13.jpg differ diff --git a/_images/rendinst_interior_mapping_14.jpg b/_images/rendinst_interior_mapping_14.jpg new file mode 100644 index 000000000..2e9f86476 Binary files /dev/null and b/_images/rendinst_interior_mapping_14.jpg differ diff --git a/_images/rendinst_interior_mapping_15.jpg b/_images/rendinst_interior_mapping_15.jpg new file mode 100644 index 000000000..5ae1f3104 Binary files /dev/null and b/_images/rendinst_interior_mapping_15.jpg differ diff --git a/_images/rendinst_interior_mapping_16.jpg b/_images/rendinst_interior_mapping_16.jpg new file mode 100644 index 000000000..1f104ae6e Binary files /dev/null and b/_images/rendinst_interior_mapping_16.jpg differ diff --git a/_images/rendinst_interior_mapping_17.jpg b/_images/rendinst_interior_mapping_17.jpg new file mode 100644 index 000000000..04bca6a89 Binary files /dev/null and b/_images/rendinst_interior_mapping_17.jpg differ diff --git a/_images/rendinst_interior_mapping_18.jpg b/_images/rendinst_interior_mapping_18.jpg new file mode 100644 index 000000000..823be5d34 Binary files /dev/null and b/_images/rendinst_interior_mapping_18.jpg differ diff --git a/_images/rendinst_interior_mapping_19.jpg b/_images/rendinst_interior_mapping_19.jpg new file mode 100644 index 000000000..cfd1e7201 Binary files /dev/null and b/_images/rendinst_interior_mapping_19.jpg differ diff --git a/_images/rendinst_interior_mapping_20.jpg b/_images/rendinst_interior_mapping_20.jpg new file mode 100644 index 000000000..f3d34b56b Binary files /dev/null and b/_images/rendinst_interior_mapping_20.jpg differ diff --git a/_images/rendinst_interior_mapping_21.jpg b/_images/rendinst_interior_mapping_21.jpg new file mode 100644 index 000000000..24772ae64 Binary files /dev/null and b/_images/rendinst_interior_mapping_21.jpg differ diff --git a/_images/rendinst_interior_mapping_22.jpg b/_images/rendinst_interior_mapping_22.jpg new file mode 100644 index 000000000..bc63be17e Binary files /dev/null and b/_images/rendinst_interior_mapping_22.jpg differ diff --git a/_images/rendinst_interior_mapping_23.jpg b/_images/rendinst_interior_mapping_23.jpg new file mode 100644 index 000000000..109d1761c Binary files /dev/null and b/_images/rendinst_interior_mapping_23.jpg differ diff --git a/_images/rendinst_interior_mapping_24.jpg b/_images/rendinst_interior_mapping_24.jpg new file mode 100644 index 000000000..20c5fd836 Binary files /dev/null and b/_images/rendinst_interior_mapping_24.jpg differ diff --git a/_images/rendinst_interior_mapping_25.jpg b/_images/rendinst_interior_mapping_25.jpg new file mode 100644 index 000000000..4748d0e82 Binary files /dev/null and b/_images/rendinst_interior_mapping_25.jpg differ diff --git a/_images/rendinst_interior_mapping_26.jpg b/_images/rendinst_interior_mapping_26.jpg new file mode 100644 index 000000000..0e8d3b791 Binary files /dev/null and b/_images/rendinst_interior_mapping_26.jpg differ diff --git a/_images/rendinst_interior_mapping_27.jpg b/_images/rendinst_interior_mapping_27.jpg new file mode 100644 index 000000000..844d8c2b9 Binary files /dev/null and b/_images/rendinst_interior_mapping_27.jpg differ diff --git a/_images/rendinst_interior_mapping_28.jpg b/_images/rendinst_interior_mapping_28.jpg new file mode 100644 index 000000000..001e7ccfe Binary files /dev/null and b/_images/rendinst_interior_mapping_28.jpg differ diff --git a/_images/rendinst_interior_mapping_29.jpg b/_images/rendinst_interior_mapping_29.jpg new file mode 100644 index 000000000..9a90f9317 Binary files /dev/null and b/_images/rendinst_interior_mapping_29.jpg differ diff --git a/_images/rendinst_interior_mapping_30.jpg b/_images/rendinst_interior_mapping_30.jpg new file mode 100644 index 000000000..2a7e05b9d Binary files /dev/null and b/_images/rendinst_interior_mapping_30.jpg differ diff --git a/_images/rendinst_interior_mapping_31.jpg b/_images/rendinst_interior_mapping_31.jpg new file mode 100644 index 000000000..a3b69cdb3 Binary files /dev/null and b/_images/rendinst_interior_mapping_31.jpg differ diff --git a/_images/rendinst_interior_mapping_32.jpg b/_images/rendinst_interior_mapping_32.jpg new file mode 100644 index 000000000..8bc41f7c9 Binary files /dev/null and b/_images/rendinst_interior_mapping_32.jpg differ diff --git a/_images/rendinst_interior_mapping_33.jpg b/_images/rendinst_interior_mapping_33.jpg new file mode 100644 index 000000000..e1a9dccdd Binary files /dev/null and b/_images/rendinst_interior_mapping_33.jpg differ diff --git a/_images/rendinst_interior_mapping_34.jpg b/_images/rendinst_interior_mapping_34.jpg new file mode 100644 index 000000000..1acac0d3a Binary files /dev/null and b/_images/rendinst_interior_mapping_34.jpg differ diff --git a/_images/rendinst_interior_mapping_35.jpg b/_images/rendinst_interior_mapping_35.jpg new file mode 100644 index 000000000..4451ce940 Binary files /dev/null and b/_images/rendinst_interior_mapping_35.jpg differ diff --git a/_images/rendinst_interior_mapping_36.jpg b/_images/rendinst_interior_mapping_36.jpg new file mode 100644 index 000000000..7aeb641ee Binary files /dev/null and b/_images/rendinst_interior_mapping_36.jpg differ diff --git a/_images/rendinst_interior_mapping_37.jpg b/_images/rendinst_interior_mapping_37.jpg new file mode 100644 index 000000000..4ff771eb4 Binary files /dev/null and b/_images/rendinst_interior_mapping_37.jpg differ diff --git a/_images/rendinst_interior_mapping_38.jpg b/_images/rendinst_interior_mapping_38.jpg new file mode 100644 index 000000000..7f396cf58 Binary files /dev/null and b/_images/rendinst_interior_mapping_38.jpg differ diff --git a/_images/rendinst_interior_mapping_39.jpg b/_images/rendinst_interior_mapping_39.jpg new file mode 100644 index 000000000..042327cd0 Binary files /dev/null and b/_images/rendinst_interior_mapping_39.jpg differ diff --git a/_images/rendinst_interior_mapping_40.jpg b/_images/rendinst_interior_mapping_40.jpg new file mode 100644 index 000000000..596606ed3 Binary files /dev/null and b/_images/rendinst_interior_mapping_40.jpg differ diff --git a/_images/rendinst_interior_mapping_41.jpg b/_images/rendinst_interior_mapping_41.jpg new file mode 100644 index 000000000..ba66d43bb Binary files /dev/null and b/_images/rendinst_interior_mapping_41.jpg differ diff --git a/_images/rendinst_interior_mapping_42.jpg b/_images/rendinst_interior_mapping_42.jpg new file mode 100644 index 000000000..c56c84e41 Binary files /dev/null and b/_images/rendinst_interior_mapping_42.jpg differ diff --git a/_images/rendinst_interior_mapping_43.jpg b/_images/rendinst_interior_mapping_43.jpg new file mode 100644 index 000000000..5f4db6c2e Binary files /dev/null and b/_images/rendinst_interior_mapping_43.jpg differ diff --git a/_images/rendinst_interior_mapping_44.jpg b/_images/rendinst_interior_mapping_44.jpg new file mode 100644 index 000000000..ecae96096 Binary files /dev/null and b/_images/rendinst_interior_mapping_44.jpg differ diff --git a/_images/rendinst_interior_mapping_45.jpg b/_images/rendinst_interior_mapping_45.jpg new file mode 100644 index 000000000..69d74056f Binary files /dev/null and b/_images/rendinst_interior_mapping_45.jpg differ diff --git a/_images/rendinst_interior_mapping_46.jpg b/_images/rendinst_interior_mapping_46.jpg new file mode 100644 index 000000000..771c5ee72 Binary files /dev/null and b/_images/rendinst_interior_mapping_46.jpg differ diff --git a/_images/rendinst_interior_mapping_47.jpg b/_images/rendinst_interior_mapping_47.jpg new file mode 100644 index 000000000..de0941739 Binary files /dev/null and b/_images/rendinst_interior_mapping_47.jpg differ diff --git a/_images/rendinst_interior_mapping_48.jpg b/_images/rendinst_interior_mapping_48.jpg new file mode 100644 index 000000000..0ca482231 Binary files /dev/null and b/_images/rendinst_interior_mapping_48.jpg differ diff --git a/_images/rendinst_interior_mapping_49.jpg b/_images/rendinst_interior_mapping_49.jpg new file mode 100644 index 000000000..46f61c009 Binary files /dev/null and b/_images/rendinst_interior_mapping_49.jpg differ diff --git a/_images/rendinst_interior_mapping_50.jpg b/_images/rendinst_interior_mapping_50.jpg new file mode 100644 index 000000000..4a9b605ca Binary files /dev/null and b/_images/rendinst_interior_mapping_50.jpg differ diff --git a/_images/rendinst_interior_mapping_51.jpg b/_images/rendinst_interior_mapping_51.jpg new file mode 100644 index 000000000..58053bb39 Binary files /dev/null and b/_images/rendinst_interior_mapping_51.jpg differ diff --git a/_images/rendinst_layered_01.jpg b/_images/rendinst_layered_01.jpg new file mode 100644 index 000000000..636697ebb Binary files /dev/null and b/_images/rendinst_layered_01.jpg differ diff --git a/_images/rendinst_layered_02.jpg b/_images/rendinst_layered_02.jpg new file mode 100644 index 000000000..38d9aeea3 Binary files /dev/null and b/_images/rendinst_layered_02.jpg differ diff --git a/_images/rendinst_layered_03.jpg b/_images/rendinst_layered_03.jpg new file mode 100644 index 000000000..08191a155 Binary files /dev/null and b/_images/rendinst_layered_03.jpg differ diff --git a/_images/rendinst_layered_04.jpg b/_images/rendinst_layered_04.jpg new file mode 100644 index 000000000..a6970e5e3 Binary files /dev/null and b/_images/rendinst_layered_04.jpg differ diff --git a/_images/rendinst_layered_05.jpg b/_images/rendinst_layered_05.jpg new file mode 100644 index 000000000..26248565e Binary files /dev/null and b/_images/rendinst_layered_05.jpg differ diff --git a/_images/rendinst_layered_06.jpg b/_images/rendinst_layered_06.jpg new file mode 100644 index 000000000..2b42e70d6 Binary files /dev/null and b/_images/rendinst_layered_06.jpg differ diff --git a/_images/rendinst_layered_07.jpg b/_images/rendinst_layered_07.jpg new file mode 100644 index 000000000..163295ae9 Binary files /dev/null and b/_images/rendinst_layered_07.jpg differ diff --git a/_images/rendinst_layered_08.jpg b/_images/rendinst_layered_08.jpg new file mode 100644 index 000000000..87a0d9648 Binary files /dev/null and b/_images/rendinst_layered_08.jpg differ diff --git a/_images/rendinst_layered_09.jpg b/_images/rendinst_layered_09.jpg new file mode 100644 index 000000000..7606b4ff5 Binary files /dev/null and b/_images/rendinst_layered_09.jpg differ diff --git a/_images/rendinst_layered_10.jpg b/_images/rendinst_layered_10.jpg new file mode 100644 index 000000000..abb76426a Binary files /dev/null and b/_images/rendinst_layered_10.jpg differ diff --git a/_images/rendinst_layered_100.jpg b/_images/rendinst_layered_100.jpg new file mode 100644 index 000000000..4e4fc1778 Binary files /dev/null and b/_images/rendinst_layered_100.jpg differ diff --git a/_images/rendinst_layered_101.jpg b/_images/rendinst_layered_101.jpg new file mode 100644 index 000000000..dea0f3548 Binary files /dev/null and b/_images/rendinst_layered_101.jpg differ diff --git a/_images/rendinst_layered_102.jpg b/_images/rendinst_layered_102.jpg new file mode 100644 index 000000000..088596492 Binary files /dev/null and b/_images/rendinst_layered_102.jpg differ diff --git a/_images/rendinst_layered_103.jpg b/_images/rendinst_layered_103.jpg new file mode 100644 index 000000000..e7a8d5a06 Binary files /dev/null and b/_images/rendinst_layered_103.jpg differ diff --git a/_images/rendinst_layered_104.jpg b/_images/rendinst_layered_104.jpg new file mode 100644 index 000000000..bbc110af1 Binary files /dev/null and b/_images/rendinst_layered_104.jpg differ diff --git a/_images/rendinst_layered_105.jpg b/_images/rendinst_layered_105.jpg new file mode 100644 index 000000000..7a7ea957e Binary files /dev/null and b/_images/rendinst_layered_105.jpg differ diff --git a/_images/rendinst_layered_106.jpg b/_images/rendinst_layered_106.jpg new file mode 100644 index 000000000..3c75f6540 Binary files /dev/null and b/_images/rendinst_layered_106.jpg differ diff --git a/_images/rendinst_layered_107.jpg b/_images/rendinst_layered_107.jpg new file mode 100644 index 000000000..f9ee5db8b Binary files /dev/null and b/_images/rendinst_layered_107.jpg differ diff --git a/_images/rendinst_layered_108.jpg b/_images/rendinst_layered_108.jpg new file mode 100644 index 000000000..8c97deaa2 Binary files /dev/null and b/_images/rendinst_layered_108.jpg differ diff --git a/_images/rendinst_layered_109.jpg b/_images/rendinst_layered_109.jpg new file mode 100644 index 000000000..e819d16ac Binary files /dev/null and b/_images/rendinst_layered_109.jpg differ diff --git a/_images/rendinst_layered_11.jpg b/_images/rendinst_layered_11.jpg new file mode 100644 index 000000000..ea71e5276 Binary files /dev/null and b/_images/rendinst_layered_11.jpg differ diff --git a/_images/rendinst_layered_110.jpg b/_images/rendinst_layered_110.jpg new file mode 100644 index 000000000..0b9452f2a Binary files /dev/null and b/_images/rendinst_layered_110.jpg differ diff --git a/_images/rendinst_layered_111.jpg b/_images/rendinst_layered_111.jpg new file mode 100644 index 000000000..18a937d8f Binary files /dev/null and b/_images/rendinst_layered_111.jpg differ diff --git a/_images/rendinst_layered_112.jpg b/_images/rendinst_layered_112.jpg new file mode 100644 index 000000000..b00eaa508 Binary files /dev/null and b/_images/rendinst_layered_112.jpg differ diff --git a/_images/rendinst_layered_113.jpg b/_images/rendinst_layered_113.jpg new file mode 100644 index 000000000..82a4bfe72 Binary files /dev/null and b/_images/rendinst_layered_113.jpg differ diff --git a/_images/rendinst_layered_12.jpg b/_images/rendinst_layered_12.jpg new file mode 100644 index 000000000..ed48ba3f0 Binary files /dev/null and b/_images/rendinst_layered_12.jpg differ diff --git a/_images/rendinst_layered_13.jpg b/_images/rendinst_layered_13.jpg new file mode 100644 index 000000000..a592a9430 Binary files /dev/null and b/_images/rendinst_layered_13.jpg differ diff --git a/_images/rendinst_layered_14.jpg b/_images/rendinst_layered_14.jpg new file mode 100644 index 000000000..345c66cea Binary files /dev/null and b/_images/rendinst_layered_14.jpg differ diff --git a/_images/rendinst_layered_15.jpg b/_images/rendinst_layered_15.jpg new file mode 100644 index 000000000..55340210d Binary files /dev/null and b/_images/rendinst_layered_15.jpg differ diff --git a/_images/rendinst_layered_16.jpg b/_images/rendinst_layered_16.jpg new file mode 100644 index 000000000..f7ba60068 Binary files /dev/null and b/_images/rendinst_layered_16.jpg differ diff --git a/_images/rendinst_layered_17.jpg b/_images/rendinst_layered_17.jpg new file mode 100644 index 000000000..cf1d66385 Binary files /dev/null and b/_images/rendinst_layered_17.jpg differ diff --git a/_images/rendinst_layered_18.jpg b/_images/rendinst_layered_18.jpg new file mode 100644 index 000000000..c5985618e Binary files /dev/null and b/_images/rendinst_layered_18.jpg differ diff --git a/_images/rendinst_layered_19.jpg b/_images/rendinst_layered_19.jpg new file mode 100644 index 000000000..cb83da0c4 Binary files /dev/null and b/_images/rendinst_layered_19.jpg differ diff --git a/_images/rendinst_layered_20.jpg b/_images/rendinst_layered_20.jpg new file mode 100644 index 000000000..d8523c31f Binary files /dev/null and b/_images/rendinst_layered_20.jpg differ diff --git a/_images/rendinst_layered_21.jpg b/_images/rendinst_layered_21.jpg new file mode 100644 index 000000000..184f2d480 Binary files /dev/null and b/_images/rendinst_layered_21.jpg differ diff --git a/_images/rendinst_layered_22.jpg b/_images/rendinst_layered_22.jpg new file mode 100644 index 000000000..5002c48bd Binary files /dev/null and b/_images/rendinst_layered_22.jpg differ diff --git a/_images/rendinst_layered_23.jpg b/_images/rendinst_layered_23.jpg new file mode 100644 index 000000000..e0b2048cd Binary files /dev/null and b/_images/rendinst_layered_23.jpg differ diff --git a/_images/rendinst_layered_24.jpg b/_images/rendinst_layered_24.jpg new file mode 100644 index 000000000..4d3ee4980 Binary files /dev/null and b/_images/rendinst_layered_24.jpg differ diff --git a/_images/rendinst_layered_25.jpg b/_images/rendinst_layered_25.jpg new file mode 100644 index 000000000..df772d3d9 Binary files /dev/null and b/_images/rendinst_layered_25.jpg differ diff --git a/_images/rendinst_layered_26.jpg b/_images/rendinst_layered_26.jpg new file mode 100644 index 000000000..4c7e0ef5d Binary files /dev/null and b/_images/rendinst_layered_26.jpg differ diff --git a/_images/rendinst_layered_27.jpg b/_images/rendinst_layered_27.jpg new file mode 100644 index 000000000..f9a1aa7db Binary files /dev/null and b/_images/rendinst_layered_27.jpg differ diff --git a/_images/rendinst_layered_28.jpg b/_images/rendinst_layered_28.jpg new file mode 100644 index 000000000..2dbf7f990 Binary files /dev/null and b/_images/rendinst_layered_28.jpg differ diff --git a/_images/rendinst_layered_29.jpg b/_images/rendinst_layered_29.jpg new file mode 100644 index 000000000..675b2b378 Binary files /dev/null and b/_images/rendinst_layered_29.jpg differ diff --git a/_images/rendinst_layered_30.jpg b/_images/rendinst_layered_30.jpg new file mode 100644 index 000000000..bdd365e60 Binary files /dev/null and b/_images/rendinst_layered_30.jpg differ diff --git a/_images/rendinst_layered_31.gif b/_images/rendinst_layered_31.gif new file mode 100644 index 000000000..bc8266d71 Binary files /dev/null and b/_images/rendinst_layered_31.gif differ diff --git a/_images/rendinst_layered_32.jpg b/_images/rendinst_layered_32.jpg new file mode 100644 index 000000000..5eba17799 Binary files /dev/null and b/_images/rendinst_layered_32.jpg differ diff --git a/_images/rendinst_layered_33.jpg b/_images/rendinst_layered_33.jpg new file mode 100644 index 000000000..8e816f257 Binary files /dev/null and b/_images/rendinst_layered_33.jpg differ diff --git a/_images/rendinst_layered_34.jpg b/_images/rendinst_layered_34.jpg new file mode 100644 index 000000000..cd98d1d29 Binary files /dev/null and b/_images/rendinst_layered_34.jpg differ diff --git a/_images/rendinst_layered_35.jpg b/_images/rendinst_layered_35.jpg new file mode 100644 index 000000000..c139b9f98 Binary files /dev/null and b/_images/rendinst_layered_35.jpg differ diff --git a/_images/rendinst_layered_36.jpg b/_images/rendinst_layered_36.jpg new file mode 100644 index 000000000..06bb16577 Binary files /dev/null and b/_images/rendinst_layered_36.jpg differ diff --git a/_images/rendinst_layered_37.jpg b/_images/rendinst_layered_37.jpg new file mode 100644 index 000000000..0401a5d02 Binary files /dev/null and b/_images/rendinst_layered_37.jpg differ diff --git a/_images/rendinst_layered_38.gif b/_images/rendinst_layered_38.gif new file mode 100644 index 000000000..ae1ffa8aa Binary files /dev/null and b/_images/rendinst_layered_38.gif differ diff --git a/_images/rendinst_layered_39.jpg b/_images/rendinst_layered_39.jpg new file mode 100644 index 000000000..3d0602cdc Binary files /dev/null and b/_images/rendinst_layered_39.jpg differ diff --git a/_images/rendinst_layered_40.jpg b/_images/rendinst_layered_40.jpg new file mode 100644 index 000000000..fca3bd382 Binary files /dev/null and b/_images/rendinst_layered_40.jpg differ diff --git a/_images/rendinst_layered_41.jpg b/_images/rendinst_layered_41.jpg new file mode 100644 index 000000000..d7d9ef592 Binary files /dev/null and b/_images/rendinst_layered_41.jpg differ diff --git a/_images/rendinst_layered_42.jpg b/_images/rendinst_layered_42.jpg new file mode 100644 index 000000000..b0a269d5d Binary files /dev/null and b/_images/rendinst_layered_42.jpg differ diff --git a/_images/rendinst_layered_43.gif b/_images/rendinst_layered_43.gif new file mode 100644 index 000000000..b6cd0f60f Binary files /dev/null and b/_images/rendinst_layered_43.gif differ diff --git a/_images/rendinst_layered_44.jpg b/_images/rendinst_layered_44.jpg new file mode 100644 index 000000000..a592a9430 Binary files /dev/null and b/_images/rendinst_layered_44.jpg differ diff --git a/_images/rendinst_layered_45.gif b/_images/rendinst_layered_45.gif new file mode 100644 index 000000000..3c918c4e3 Binary files /dev/null and b/_images/rendinst_layered_45.gif differ diff --git a/_images/rendinst_layered_46.jpg b/_images/rendinst_layered_46.jpg new file mode 100644 index 000000000..3cc0ca4dd Binary files /dev/null and b/_images/rendinst_layered_46.jpg differ diff --git a/_images/rendinst_layered_47.gif b/_images/rendinst_layered_47.gif new file mode 100644 index 000000000..619dfded6 Binary files /dev/null and b/_images/rendinst_layered_47.gif differ diff --git a/_images/rendinst_layered_48.jpg b/_images/rendinst_layered_48.jpg new file mode 100644 index 000000000..651ab7510 Binary files /dev/null and b/_images/rendinst_layered_48.jpg differ diff --git a/_images/rendinst_layered_49.jpg b/_images/rendinst_layered_49.jpg new file mode 100644 index 000000000..08191a155 Binary files /dev/null and b/_images/rendinst_layered_49.jpg differ diff --git a/_images/rendinst_layered_50.jpg b/_images/rendinst_layered_50.jpg new file mode 100644 index 000000000..a6970e5e3 Binary files /dev/null and b/_images/rendinst_layered_50.jpg differ diff --git a/_images/rendinst_layered_51.jpg b/_images/rendinst_layered_51.jpg new file mode 100644 index 000000000..f3870d302 Binary files /dev/null and b/_images/rendinst_layered_51.jpg differ diff --git a/_images/rendinst_layered_52.jpg b/_images/rendinst_layered_52.jpg new file mode 100644 index 000000000..8bdcf31b1 Binary files /dev/null and b/_images/rendinst_layered_52.jpg differ diff --git a/_images/rendinst_layered_53.jpg b/_images/rendinst_layered_53.jpg new file mode 100644 index 000000000..9ac04738e Binary files /dev/null and b/_images/rendinst_layered_53.jpg differ diff --git a/_images/rendinst_layered_54.jpg b/_images/rendinst_layered_54.jpg new file mode 100644 index 000000000..bdd0e4acc Binary files /dev/null and b/_images/rendinst_layered_54.jpg differ diff --git a/_images/rendinst_layered_55.jpg b/_images/rendinst_layered_55.jpg new file mode 100644 index 000000000..f2e6e2cd3 Binary files /dev/null and b/_images/rendinst_layered_55.jpg differ diff --git a/_images/rendinst_layered_56.jpg b/_images/rendinst_layered_56.jpg new file mode 100644 index 000000000..0747caae1 Binary files /dev/null and b/_images/rendinst_layered_56.jpg differ diff --git a/_images/rendinst_layered_57.jpg b/_images/rendinst_layered_57.jpg new file mode 100644 index 000000000..dfc9f0875 Binary files /dev/null and b/_images/rendinst_layered_57.jpg differ diff --git a/_images/rendinst_layered_58.jpg b/_images/rendinst_layered_58.jpg new file mode 100644 index 000000000..d007aa3f0 Binary files /dev/null and b/_images/rendinst_layered_58.jpg differ diff --git a/_images/rendinst_layered_62.jpg b/_images/rendinst_layered_62.jpg new file mode 100644 index 000000000..7144c49f5 Binary files /dev/null and b/_images/rendinst_layered_62.jpg differ diff --git a/_images/rendinst_layered_63.jpg b/_images/rendinst_layered_63.jpg new file mode 100644 index 000000000..80193efb0 Binary files /dev/null and b/_images/rendinst_layered_63.jpg differ diff --git a/_images/rendinst_layered_64.jpg b/_images/rendinst_layered_64.jpg new file mode 100644 index 000000000..84b014698 Binary files /dev/null and b/_images/rendinst_layered_64.jpg differ diff --git a/_images/rendinst_layered_65.jpg b/_images/rendinst_layered_65.jpg new file mode 100644 index 000000000..11ac5d89d Binary files /dev/null and b/_images/rendinst_layered_65.jpg differ diff --git a/_images/rendinst_layered_66.jpg b/_images/rendinst_layered_66.jpg new file mode 100644 index 000000000..6dbabcb87 Binary files /dev/null and b/_images/rendinst_layered_66.jpg differ diff --git a/_images/rendinst_layered_67.jpg b/_images/rendinst_layered_67.jpg new file mode 100644 index 000000000..5b0bbf409 Binary files /dev/null and b/_images/rendinst_layered_67.jpg differ diff --git a/_images/rendinst_layered_68.jpg b/_images/rendinst_layered_68.jpg new file mode 100644 index 000000000..470b85ff9 Binary files /dev/null and b/_images/rendinst_layered_68.jpg differ diff --git a/_images/rendinst_layered_69.jpg b/_images/rendinst_layered_69.jpg new file mode 100644 index 000000000..ff49ca0c8 Binary files /dev/null and b/_images/rendinst_layered_69.jpg differ diff --git a/_images/rendinst_layered_70.jpg b/_images/rendinst_layered_70.jpg new file mode 100644 index 000000000..042c3db52 Binary files /dev/null and b/_images/rendinst_layered_70.jpg differ diff --git a/_images/rendinst_layered_71.jpg b/_images/rendinst_layered_71.jpg new file mode 100644 index 000000000..61fcd1871 Binary files /dev/null and b/_images/rendinst_layered_71.jpg differ diff --git a/_images/rendinst_layered_72.jpg b/_images/rendinst_layered_72.jpg new file mode 100644 index 000000000..86718064f Binary files /dev/null and b/_images/rendinst_layered_72.jpg differ diff --git a/_images/rendinst_layered_73.gif b/_images/rendinst_layered_73.gif new file mode 100644 index 000000000..bc8266d71 Binary files /dev/null and b/_images/rendinst_layered_73.gif differ diff --git a/_images/rendinst_layered_74.gif b/_images/rendinst_layered_74.gif new file mode 100644 index 000000000..56359bc57 Binary files /dev/null and b/_images/rendinst_layered_74.gif differ diff --git a/_images/rendinst_layered_75.gif b/_images/rendinst_layered_75.gif new file mode 100644 index 000000000..e8f2e91ad Binary files /dev/null and b/_images/rendinst_layered_75.gif differ diff --git a/_images/rendinst_layered_76.jpg b/_images/rendinst_layered_76.jpg new file mode 100644 index 000000000..c5e6fe5e3 Binary files /dev/null and b/_images/rendinst_layered_76.jpg differ diff --git a/_images/rendinst_layered_77.jpg b/_images/rendinst_layered_77.jpg new file mode 100644 index 000000000..24bc62be0 Binary files /dev/null and b/_images/rendinst_layered_77.jpg differ diff --git a/_images/rendinst_layered_78.jpg b/_images/rendinst_layered_78.jpg new file mode 100644 index 000000000..ff0007845 Binary files /dev/null and b/_images/rendinst_layered_78.jpg differ diff --git a/_images/rendinst_layered_79.jpg b/_images/rendinst_layered_79.jpg new file mode 100644 index 000000000..e7319d9da Binary files /dev/null and b/_images/rendinst_layered_79.jpg differ diff --git a/_images/rendinst_layered_80.jpg b/_images/rendinst_layered_80.jpg new file mode 100644 index 000000000..21ea0cd0c Binary files /dev/null and b/_images/rendinst_layered_80.jpg differ diff --git a/_images/rendinst_layered_81.jpg b/_images/rendinst_layered_81.jpg new file mode 100644 index 000000000..63b94ff46 Binary files /dev/null and b/_images/rendinst_layered_81.jpg differ diff --git a/_images/rendinst_layered_82.jpg b/_images/rendinst_layered_82.jpg new file mode 100644 index 000000000..d291a124c Binary files /dev/null and b/_images/rendinst_layered_82.jpg differ diff --git a/_images/rendinst_layered_83.jpg b/_images/rendinst_layered_83.jpg new file mode 100644 index 000000000..56768f7db Binary files /dev/null and b/_images/rendinst_layered_83.jpg differ diff --git a/_images/rendinst_layered_86.jpg b/_images/rendinst_layered_86.jpg new file mode 100644 index 000000000..ad3dc05e7 Binary files /dev/null and b/_images/rendinst_layered_86.jpg differ diff --git a/_images/rendinst_layered_87.gif b/_images/rendinst_layered_87.gif new file mode 100644 index 000000000..f28e79876 Binary files /dev/null and b/_images/rendinst_layered_87.gif differ diff --git a/_images/rendinst_layered_88.jpg b/_images/rendinst_layered_88.jpg new file mode 100644 index 000000000..37b673459 Binary files /dev/null and b/_images/rendinst_layered_88.jpg differ diff --git a/_images/rendinst_layered_89.jpg b/_images/rendinst_layered_89.jpg new file mode 100644 index 000000000..bd29c9297 Binary files /dev/null and b/_images/rendinst_layered_89.jpg differ diff --git a/_images/rendinst_layered_90.jpg b/_images/rendinst_layered_90.jpg new file mode 100644 index 000000000..635b9c1fb Binary files /dev/null and b/_images/rendinst_layered_90.jpg differ diff --git a/_images/rendinst_layered_91.jpg b/_images/rendinst_layered_91.jpg new file mode 100644 index 000000000..06616d5bb Binary files /dev/null and b/_images/rendinst_layered_91.jpg differ diff --git a/_images/rendinst_layered_92.jpg b/_images/rendinst_layered_92.jpg new file mode 100644 index 000000000..e39bfa4fb Binary files /dev/null and b/_images/rendinst_layered_92.jpg differ diff --git a/_images/rendinst_layered_93.jpg b/_images/rendinst_layered_93.jpg new file mode 100644 index 000000000..e195de958 Binary files /dev/null and b/_images/rendinst_layered_93.jpg differ diff --git a/_images/rendinst_layered_94.jpg b/_images/rendinst_layered_94.jpg new file mode 100644 index 000000000..b07e4b069 Binary files /dev/null and b/_images/rendinst_layered_94.jpg differ diff --git a/_images/rendinst_layered_95.jpg b/_images/rendinst_layered_95.jpg new file mode 100644 index 000000000..b13a2a019 Binary files /dev/null and b/_images/rendinst_layered_95.jpg differ diff --git a/_images/rendinst_layered_96.jpg b/_images/rendinst_layered_96.jpg new file mode 100644 index 000000000..266e773dd Binary files /dev/null and b/_images/rendinst_layered_96.jpg differ diff --git a/_images/rendinst_layered_97.gif b/_images/rendinst_layered_97.gif new file mode 100644 index 000000000..c0735b4ec Binary files /dev/null and b/_images/rendinst_layered_97.gif differ diff --git a/_images/rendinst_layered_98.jpg b/_images/rendinst_layered_98.jpg new file mode 100644 index 000000000..1e4c38092 Binary files /dev/null and b/_images/rendinst_layered_98.jpg differ diff --git a/_images/rendinst_layered_99.jpg b/_images/rendinst_layered_99.jpg new file mode 100644 index 000000000..f76db2a1f Binary files /dev/null and b/_images/rendinst_layered_99.jpg differ diff --git a/_images/rendinst_layered_family_01.jpg b/_images/rendinst_layered_family_01.jpg new file mode 100644 index 000000000..c2e6ca77d Binary files /dev/null and b/_images/rendinst_layered_family_01.jpg differ diff --git a/_images/rendinst_layered_family_02.jpg b/_images/rendinst_layered_family_02.jpg new file mode 100644 index 000000000..f0e792aa6 Binary files /dev/null and b/_images/rendinst_layered_family_02.jpg differ diff --git a/_images/rendinst_layered_family_03.jpg b/_images/rendinst_layered_family_03.jpg new file mode 100644 index 000000000..8a3178f45 Binary files /dev/null and b/_images/rendinst_layered_family_03.jpg differ diff --git a/_images/rendinst_layered_family_04.jpg b/_images/rendinst_layered_family_04.jpg new file mode 100644 index 000000000..c83a85955 Binary files /dev/null and b/_images/rendinst_layered_family_04.jpg differ diff --git a/_images/rendinst_layered_family_05.jpg b/_images/rendinst_layered_family_05.jpg new file mode 100644 index 000000000..733d5209c Binary files /dev/null and b/_images/rendinst_layered_family_05.jpg differ diff --git a/_images/rendinst_layered_family_06.jpg b/_images/rendinst_layered_family_06.jpg new file mode 100644 index 000000000..c26056edd Binary files /dev/null and b/_images/rendinst_layered_family_06.jpg differ diff --git a/_images/rendinst_layered_family_07.jpg b/_images/rendinst_layered_family_07.jpg new file mode 100644 index 000000000..925be0499 Binary files /dev/null and b/_images/rendinst_layered_family_07.jpg differ diff --git a/_images/rendinst_layered_family_08.jpg b/_images/rendinst_layered_family_08.jpg new file mode 100644 index 000000000..c2703284c Binary files /dev/null and b/_images/rendinst_layered_family_08.jpg differ diff --git a/_images/rendinst_layered_lightmap_01.jpg b/_images/rendinst_layered_lightmap_01.jpg new file mode 100644 index 000000000..c40feff1e Binary files /dev/null and b/_images/rendinst_layered_lightmap_01.jpg differ diff --git a/_images/rendinst_layered_lightmap_02.jpg b/_images/rendinst_layered_lightmap_02.jpg new file mode 100644 index 000000000..7bc45d415 Binary files /dev/null and b/_images/rendinst_layered_lightmap_02.jpg differ diff --git a/_images/rendinst_layered_lightmap_03.jpg b/_images/rendinst_layered_lightmap_03.jpg new file mode 100644 index 000000000..57e4f76f0 Binary files /dev/null and b/_images/rendinst_layered_lightmap_03.jpg differ diff --git a/_images/rendinst_layered_lightmap_04.jpg b/_images/rendinst_layered_lightmap_04.jpg new file mode 100644 index 000000000..997c0c6cb Binary files /dev/null and b/_images/rendinst_layered_lightmap_04.jpg differ diff --git a/_images/rendinst_layered_lightmap_05.jpg b/_images/rendinst_layered_lightmap_05.jpg new file mode 100644 index 000000000..92038302c Binary files /dev/null and b/_images/rendinst_layered_lightmap_05.jpg differ diff --git a/_images/rendinst_layered_lightmap_06.jpg b/_images/rendinst_layered_lightmap_06.jpg new file mode 100644 index 000000000..d297ff088 Binary files /dev/null and b/_images/rendinst_layered_lightmap_06.jpg differ diff --git a/_images/rendinst_mask_layered_01.jpg b/_images/rendinst_mask_layered_01.jpg new file mode 100644 index 000000000..950875a59 Binary files /dev/null and b/_images/rendinst_mask_layered_01.jpg differ diff --git a/_images/rendinst_mask_layered_02.jpg b/_images/rendinst_mask_layered_02.jpg new file mode 100644 index 000000000..cbcd5628a Binary files /dev/null and b/_images/rendinst_mask_layered_02.jpg differ diff --git a/_images/rendinst_mask_layered_03.jpg b/_images/rendinst_mask_layered_03.jpg new file mode 100644 index 000000000..5ff4d0332 Binary files /dev/null and b/_images/rendinst_mask_layered_03.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_01.jpg b/_images/rendinst_modulate2x_diffuse_decal_01.jpg new file mode 100644 index 000000000..d5c61e20e Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_01.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_02.jpg b/_images/rendinst_modulate2x_diffuse_decal_02.jpg new file mode 100644 index 000000000..d81bd4e50 Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_02.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_03.jpg b/_images/rendinst_modulate2x_diffuse_decal_03.jpg new file mode 100644 index 000000000..a57e318b3 Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_03.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_04.jpg b/_images/rendinst_modulate2x_diffuse_decal_04.jpg new file mode 100644 index 000000000..1b25eec63 Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_04.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_05.jpg b/_images/rendinst_modulate2x_diffuse_decal_05.jpg new file mode 100644 index 000000000..caecd2d73 Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_05.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_06.jpg b/_images/rendinst_modulate2x_diffuse_decal_06.jpg new file mode 100644 index 000000000..958a94a03 Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_06.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_07.jpg b/_images/rendinst_modulate2x_diffuse_decal_07.jpg new file mode 100644 index 000000000..caecd2d73 Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_07.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_08.jpg b/_images/rendinst_modulate2x_diffuse_decal_08.jpg new file mode 100644 index 000000000..7d8f8a524 Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_08.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_09.jpg b/_images/rendinst_modulate2x_diffuse_decal_09.jpg new file mode 100644 index 000000000..7a1c69288 Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_09.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_10.jpg b/_images/rendinst_modulate2x_diffuse_decal_10.jpg new file mode 100644 index 000000000..ee7cc2eee Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_10.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_11.jpg b/_images/rendinst_modulate2x_diffuse_decal_11.jpg new file mode 100644 index 000000000..e75d9b6de Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_11.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_12.jpg b/_images/rendinst_modulate2x_diffuse_decal_12.jpg new file mode 100644 index 000000000..43212787e Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_12.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_13.jpg b/_images/rendinst_modulate2x_diffuse_decal_13.jpg new file mode 100644 index 000000000..b52154a76 Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_13.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_14.jpg b/_images/rendinst_modulate2x_diffuse_decal_14.jpg new file mode 100644 index 000000000..c052783dc Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_14.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_15.jpg b/_images/rendinst_modulate2x_diffuse_decal_15.jpg new file mode 100644 index 000000000..5676c516c Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_15.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_16.jpg b/_images/rendinst_modulate2x_diffuse_decal_16.jpg new file mode 100644 index 000000000..b7504c452 Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_16.jpg differ diff --git a/_images/rendinst_modulate2x_diffuse_decal_17.jpg b/_images/rendinst_modulate2x_diffuse_decal_17.jpg new file mode 100644 index 000000000..3fd0add15 Binary files /dev/null and b/_images/rendinst_modulate2x_diffuse_decal_17.jpg differ diff --git a/_images/rendinst_parallax_ice_01.jpg b/_images/rendinst_parallax_ice_01.jpg new file mode 100644 index 000000000..cbf8a292e Binary files /dev/null and b/_images/rendinst_parallax_ice_01.jpg differ diff --git a/_images/rendinst_parallax_ice_02.gif b/_images/rendinst_parallax_ice_02.gif new file mode 100644 index 000000000..dcd649693 Binary files /dev/null and b/_images/rendinst_parallax_ice_02.gif differ diff --git a/_images/rendinst_parallax_ice_03.gif b/_images/rendinst_parallax_ice_03.gif new file mode 100644 index 000000000..054d67dff Binary files /dev/null and b/_images/rendinst_parallax_ice_03.gif differ diff --git a/_images/rendinst_parallax_ice_04.gif b/_images/rendinst_parallax_ice_04.gif new file mode 100644 index 000000000..cb79759c0 Binary files /dev/null and b/_images/rendinst_parallax_ice_04.gif differ diff --git a/_images/rendinst_parallax_ice_05.jpg b/_images/rendinst_parallax_ice_05.jpg new file mode 100644 index 000000000..839f26932 Binary files /dev/null and b/_images/rendinst_parallax_ice_05.jpg differ diff --git a/_images/rendinst_parallax_ice_06.jpg b/_images/rendinst_parallax_ice_06.jpg new file mode 100644 index 000000000..ec457577e Binary files /dev/null and b/_images/rendinst_parallax_ice_06.jpg differ diff --git a/_images/rendinst_parallax_ice_07.gif b/_images/rendinst_parallax_ice_07.gif new file mode 100644 index 000000000..04642cf6a Binary files /dev/null and b/_images/rendinst_parallax_ice_07.gif differ diff --git a/_images/rendinst_parallax_ice_08.gif b/_images/rendinst_parallax_ice_08.gif new file mode 100644 index 000000000..4c2bf9dae Binary files /dev/null and b/_images/rendinst_parallax_ice_08.gif differ diff --git a/_images/rendinst_perlin_layered_01.jpg b/_images/rendinst_perlin_layered_01.jpg new file mode 100644 index 000000000..0278533a5 Binary files /dev/null and b/_images/rendinst_perlin_layered_01.jpg differ diff --git a/_images/rendinst_perlin_layered_02.jpg b/_images/rendinst_perlin_layered_02.jpg new file mode 100644 index 000000000..938030f86 Binary files /dev/null and b/_images/rendinst_perlin_layered_02.jpg differ diff --git a/_images/rendinst_perlin_layered_03.jpg b/_images/rendinst_perlin_layered_03.jpg new file mode 100644 index 000000000..6f932da26 Binary files /dev/null and b/_images/rendinst_perlin_layered_03.jpg differ diff --git a/_images/rendinst_perlin_layered_04.jpg b/_images/rendinst_perlin_layered_04.jpg new file mode 100644 index 000000000..4d4fc6db4 Binary files /dev/null and b/_images/rendinst_perlin_layered_04.jpg differ diff --git a/_images/rendinst_perlin_layered_05.jpg b/_images/rendinst_perlin_layered_05.jpg new file mode 100644 index 000000000..3c21e2a22 Binary files /dev/null and b/_images/rendinst_perlin_layered_05.jpg differ diff --git a/_images/rendinst_perlin_layered_06.jpg b/_images/rendinst_perlin_layered_06.jpg new file mode 100644 index 000000000..5dba77820 Binary files /dev/null and b/_images/rendinst_perlin_layered_06.jpg differ diff --git a/_images/rendinst_perlin_layered_07.jpg b/_images/rendinst_perlin_layered_07.jpg new file mode 100644 index 000000000..f2d437e9a Binary files /dev/null and b/_images/rendinst_perlin_layered_07.jpg differ diff --git a/_images/rendinst_perlin_layered_08.jpg b/_images/rendinst_perlin_layered_08.jpg new file mode 100644 index 000000000..429d904ee Binary files /dev/null and b/_images/rendinst_perlin_layered_08.jpg differ diff --git a/_images/rendinst_perlin_layered_09.jpg b/_images/rendinst_perlin_layered_09.jpg new file mode 100644 index 000000000..3d43ecd9b Binary files /dev/null and b/_images/rendinst_perlin_layered_09.jpg differ diff --git a/_images/rendinst_perlin_layered_10.jpg b/_images/rendinst_perlin_layered_10.jpg new file mode 100644 index 000000000..57cb50e7a Binary files /dev/null and b/_images/rendinst_perlin_layered_10.jpg differ diff --git a/_images/rendinst_perlin_layered_11.jpg b/_images/rendinst_perlin_layered_11.jpg new file mode 100644 index 000000000..52b59d762 Binary files /dev/null and b/_images/rendinst_perlin_layered_11.jpg differ diff --git a/_images/rendinst_perlin_layered_12.jpg b/_images/rendinst_perlin_layered_12.jpg new file mode 100644 index 000000000..925db3c99 Binary files /dev/null and b/_images/rendinst_perlin_layered_12.jpg differ diff --git a/_images/rendinst_perlin_layered_13.jpg b/_images/rendinst_perlin_layered_13.jpg new file mode 100644 index 000000000..a95639605 Binary files /dev/null and b/_images/rendinst_perlin_layered_13.jpg differ diff --git a/_images/rendinst_perlin_layered_14.jpg b/_images/rendinst_perlin_layered_14.jpg new file mode 100644 index 000000000..8f4893e34 Binary files /dev/null and b/_images/rendinst_perlin_layered_14.jpg differ diff --git a/_images/rendinst_perlin_layered_15.jpg b/_images/rendinst_perlin_layered_15.jpg new file mode 100644 index 000000000..a0a66143d Binary files /dev/null and b/_images/rendinst_perlin_layered_15.jpg differ diff --git a/_images/rendinst_perlin_layered_16.jpg b/_images/rendinst_perlin_layered_16.jpg new file mode 100644 index 000000000..263f3a632 Binary files /dev/null and b/_images/rendinst_perlin_layered_16.jpg differ diff --git a/_images/rendinst_perlin_layered_17.jpg b/_images/rendinst_perlin_layered_17.jpg new file mode 100644 index 000000000..a82461200 Binary files /dev/null and b/_images/rendinst_perlin_layered_17.jpg differ diff --git a/_images/rendinst_perlin_layered_18.jpg b/_images/rendinst_perlin_layered_18.jpg new file mode 100644 index 000000000..93eca60e7 Binary files /dev/null and b/_images/rendinst_perlin_layered_18.jpg differ diff --git a/_images/rendinst_perlin_layered_19.jpg b/_images/rendinst_perlin_layered_19.jpg new file mode 100644 index 000000000..25fc9b5b3 Binary files /dev/null and b/_images/rendinst_perlin_layered_19.jpg differ diff --git a/_images/rendinst_perlin_layered_20.jpg b/_images/rendinst_perlin_layered_20.jpg new file mode 100644 index 000000000..25fc9b5b3 Binary files /dev/null and b/_images/rendinst_perlin_layered_20.jpg differ diff --git a/_images/rendinst_perlin_layered_21.jpg b/_images/rendinst_perlin_layered_21.jpg new file mode 100644 index 000000000..93eca60e7 Binary files /dev/null and b/_images/rendinst_perlin_layered_21.jpg differ diff --git a/_images/rendinst_perlin_layered_22.jpg b/_images/rendinst_perlin_layered_22.jpg new file mode 100644 index 000000000..5f6607b73 Binary files /dev/null and b/_images/rendinst_perlin_layered_22.jpg differ diff --git a/_images/rendinst_perlin_layered_23.jpg b/_images/rendinst_perlin_layered_23.jpg new file mode 100644 index 000000000..ef6157c9c Binary files /dev/null and b/_images/rendinst_perlin_layered_23.jpg differ diff --git a/_images/rendinst_perlin_layered_24.jpg b/_images/rendinst_perlin_layered_24.jpg new file mode 100644 index 000000000..93eca60e7 Binary files /dev/null and b/_images/rendinst_perlin_layered_24.jpg differ diff --git a/_images/rendinst_perlin_layered_25.jpg b/_images/rendinst_perlin_layered_25.jpg new file mode 100644 index 000000000..d1587862e Binary files /dev/null and b/_images/rendinst_perlin_layered_25.jpg differ diff --git a/_images/rendinst_perlin_layered_26.jpg b/_images/rendinst_perlin_layered_26.jpg new file mode 100644 index 000000000..76a11b962 Binary files /dev/null and b/_images/rendinst_perlin_layered_26.jpg differ diff --git a/_images/rendinst_perlin_layered_27.jpg b/_images/rendinst_perlin_layered_27.jpg new file mode 100644 index 000000000..e4f7f60e0 Binary files /dev/null and b/_images/rendinst_perlin_layered_27.jpg differ diff --git a/_images/rendinst_perlin_layered_28.jpg b/_images/rendinst_perlin_layered_28.jpg new file mode 100644 index 000000000..909c3daed Binary files /dev/null and b/_images/rendinst_perlin_layered_28.jpg differ diff --git a/_images/rendinst_perlin_layered_29.jpg b/_images/rendinst_perlin_layered_29.jpg new file mode 100644 index 000000000..dd5bcf3a4 Binary files /dev/null and b/_images/rendinst_perlin_layered_29.jpg differ diff --git a/_images/rendinst_perlin_layered_30.jpg b/_images/rendinst_perlin_layered_30.jpg new file mode 100644 index 000000000..07aa3b526 Binary files /dev/null and b/_images/rendinst_perlin_layered_30.jpg differ diff --git a/_images/rendinst_perlin_layered_31.jpg b/_images/rendinst_perlin_layered_31.jpg new file mode 100644 index 000000000..a3569875c Binary files /dev/null and b/_images/rendinst_perlin_layered_31.jpg differ diff --git a/_images/rendinst_perlin_layered_32.jpg b/_images/rendinst_perlin_layered_32.jpg new file mode 100644 index 000000000..796cbd86f Binary files /dev/null and b/_images/rendinst_perlin_layered_32.jpg differ diff --git a/_images/rendinst_perlin_layered_33.jpg b/_images/rendinst_perlin_layered_33.jpg new file mode 100644 index 000000000..a34a5c3c4 Binary files /dev/null and b/_images/rendinst_perlin_layered_33.jpg differ diff --git a/_images/rendinst_perlin_layered_34.jpg b/_images/rendinst_perlin_layered_34.jpg new file mode 100644 index 000000000..aee1dc661 Binary files /dev/null and b/_images/rendinst_perlin_layered_34.jpg differ diff --git a/_images/rendinst_perlin_layered_35.jpg b/_images/rendinst_perlin_layered_35.jpg new file mode 100644 index 000000000..56768f7db Binary files /dev/null and b/_images/rendinst_perlin_layered_35.jpg differ diff --git a/_images/rendinst_perlin_layered_36.jpg b/_images/rendinst_perlin_layered_36.jpg new file mode 100644 index 000000000..d2521474d Binary files /dev/null and b/_images/rendinst_perlin_layered_36.jpg differ diff --git a/_images/rendinst_perlin_layered_37.jpg b/_images/rendinst_perlin_layered_37.jpg new file mode 100644 index 000000000..635b9c1fb Binary files /dev/null and b/_images/rendinst_perlin_layered_37.jpg differ diff --git a/_images/rendinst_refraction_01.jpg b/_images/rendinst_refraction_01.jpg new file mode 100644 index 000000000..28b911c82 Binary files /dev/null and b/_images/rendinst_refraction_01.jpg differ diff --git a/_images/rendinst_refraction_02.jpg b/_images/rendinst_refraction_02.jpg new file mode 100644 index 000000000..c3a927b19 Binary files /dev/null and b/_images/rendinst_refraction_02.jpg differ diff --git a/_images/rendinst_refraction_03.jpg b/_images/rendinst_refraction_03.jpg new file mode 100644 index 000000000..d5bc7f722 Binary files /dev/null and b/_images/rendinst_refraction_03.jpg differ diff --git a/_images/rendinst_refraction_04.jpg b/_images/rendinst_refraction_04.jpg new file mode 100644 index 000000000..915ee58a6 Binary files /dev/null and b/_images/rendinst_refraction_04.jpg differ diff --git a/_images/rendinst_refraction_05.jpg b/_images/rendinst_refraction_05.jpg new file mode 100644 index 000000000..7dbc7fc81 Binary files /dev/null and b/_images/rendinst_refraction_05.jpg differ diff --git a/_images/rendinst_refraction_06.jpg b/_images/rendinst_refraction_06.jpg new file mode 100644 index 000000000..e7cd2148d Binary files /dev/null and b/_images/rendinst_refraction_06.jpg differ diff --git a/_images/rendinst_refraction_07.jpg b/_images/rendinst_refraction_07.jpg new file mode 100644 index 000000000..bb2a7f2c9 Binary files /dev/null and b/_images/rendinst_refraction_07.jpg differ diff --git a/_images/rendinst_refraction_08.jpg b/_images/rendinst_refraction_08.jpg new file mode 100644 index 000000000..3b8cd82de Binary files /dev/null and b/_images/rendinst_refraction_08.jpg differ diff --git a/_images/rendinst_refraction_09.jpg b/_images/rendinst_refraction_09.jpg new file mode 100644 index 000000000..82e20f50b Binary files /dev/null and b/_images/rendinst_refraction_09.jpg differ diff --git a/_images/rendinst_refraction_10.jpg b/_images/rendinst_refraction_10.jpg new file mode 100644 index 000000000..d8a5dfa89 Binary files /dev/null and b/_images/rendinst_refraction_10.jpg differ diff --git a/_images/rendinst_refraction_11.jpg b/_images/rendinst_refraction_11.jpg new file mode 100644 index 000000000..61695f326 Binary files /dev/null and b/_images/rendinst_refraction_11.jpg differ diff --git a/_images/rendinst_refraction_12.jpg b/_images/rendinst_refraction_12.jpg new file mode 100644 index 000000000..17c1c1a82 Binary files /dev/null and b/_images/rendinst_refraction_12.jpg differ diff --git a/_images/rendinst_refraction_13.jpg b/_images/rendinst_refraction_13.jpg new file mode 100644 index 000000000..18330d4a6 Binary files /dev/null and b/_images/rendinst_refraction_13.jpg differ diff --git a/_images/rendinst_refraction_14.jpg b/_images/rendinst_refraction_14.jpg new file mode 100644 index 000000000..dae4ef769 Binary files /dev/null and b/_images/rendinst_refraction_14.jpg differ diff --git a/_images/rendinst_simple_01.jpg b/_images/rendinst_simple_01.jpg new file mode 100644 index 000000000..ba1c9ddf0 Binary files /dev/null and b/_images/rendinst_simple_01.jpg differ diff --git a/_images/rendinst_simple_02.jpg b/_images/rendinst_simple_02.jpg new file mode 100644 index 000000000..2cadfb3d8 Binary files /dev/null and b/_images/rendinst_simple_02.jpg differ diff --git a/_images/rendinst_simple_03.jpg b/_images/rendinst_simple_03.jpg new file mode 100644 index 000000000..5a694beb1 Binary files /dev/null and b/_images/rendinst_simple_03.jpg differ diff --git a/_images/rendinst_simple_04.jpg b/_images/rendinst_simple_04.jpg new file mode 100644 index 000000000..3667f9d10 Binary files /dev/null and b/_images/rendinst_simple_04.jpg differ diff --git a/_images/rendinst_simple_emissive_01.jpg b/_images/rendinst_simple_emissive_01.jpg new file mode 100644 index 000000000..bc0891ccb Binary files /dev/null and b/_images/rendinst_simple_emissive_01.jpg differ diff --git a/_images/rendinst_simple_emissive_anim_01.jpg b/_images/rendinst_simple_emissive_anim_01.jpg new file mode 100644 index 000000000..42662b4e8 Binary files /dev/null and b/_images/rendinst_simple_emissive_anim_01.jpg differ diff --git a/_images/rendinst_simple_emissive_anim_02.gif b/_images/rendinst_simple_emissive_anim_02.gif new file mode 100644 index 000000000..d6101f3d2 Binary files /dev/null and b/_images/rendinst_simple_emissive_anim_02.gif differ diff --git a/_images/rendinst_simple_emissive_anim_03.gif b/_images/rendinst_simple_emissive_anim_03.gif new file mode 100644 index 000000000..ad3cca788 Binary files /dev/null and b/_images/rendinst_simple_emissive_anim_03.gif differ diff --git a/_images/rendinst_simple_emissive_anim_04.gif b/_images/rendinst_simple_emissive_anim_04.gif new file mode 100644 index 000000000..6859090c3 Binary files /dev/null and b/_images/rendinst_simple_emissive_anim_04.gif differ diff --git a/_images/rendinst_simple_emissive_anim_05.gif b/_images/rendinst_simple_emissive_anim_05.gif new file mode 100644 index 000000000..4b48ccbd4 Binary files /dev/null and b/_images/rendinst_simple_emissive_anim_05.gif differ diff --git a/_images/rendinst_simple_emissive_anim_06.jpg b/_images/rendinst_simple_emissive_anim_06.jpg new file mode 100644 index 000000000..ef474c0fb Binary files /dev/null and b/_images/rendinst_simple_emissive_anim_06.jpg differ diff --git a/_images/rendinst_simple_emissive_anim_07.jpg b/_images/rendinst_simple_emissive_anim_07.jpg new file mode 100644 index 000000000..b30bbeee5 Binary files /dev/null and b/_images/rendinst_simple_emissive_anim_07.jpg differ diff --git a/_images/rendinst_simple_emissive_anim_08.jpg b/_images/rendinst_simple_emissive_anim_08.jpg new file mode 100644 index 000000000..34d69a708 Binary files /dev/null and b/_images/rendinst_simple_emissive_anim_08.jpg differ diff --git a/_images/rendinst_simple_emissive_anim_09.jpg b/_images/rendinst_simple_emissive_anim_09.jpg new file mode 100644 index 000000000..3c368171a Binary files /dev/null and b/_images/rendinst_simple_emissive_anim_09.jpg differ diff --git a/_images/rendinst_simple_emissive_anim_10.gif b/_images/rendinst_simple_emissive_anim_10.gif new file mode 100644 index 000000000..af3024ae7 Binary files /dev/null and b/_images/rendinst_simple_emissive_anim_10.gif differ diff --git a/_images/rendinst_simple_painted_01.jpg b/_images/rendinst_simple_painted_01.jpg new file mode 100644 index 000000000..0af199762 Binary files /dev/null and b/_images/rendinst_simple_painted_01.jpg differ diff --git a/_images/rendinst_simple_painted_02.jpg b/_images/rendinst_simple_painted_02.jpg new file mode 100644 index 000000000..c1f0870b7 Binary files /dev/null and b/_images/rendinst_simple_painted_02.jpg differ diff --git a/_images/rendinst_simple_painted_03.jpg b/_images/rendinst_simple_painted_03.jpg new file mode 100644 index 000000000..cc9873623 Binary files /dev/null and b/_images/rendinst_simple_painted_03.jpg differ diff --git a/_images/rendinst_vcolor_layered_01.jpg b/_images/rendinst_vcolor_layered_01.jpg new file mode 100644 index 000000000..3b8e81b7d Binary files /dev/null and b/_images/rendinst_vcolor_layered_01.jpg differ diff --git a/_images/rendinst_vcolor_layered_02.jpg b/_images/rendinst_vcolor_layered_02.jpg new file mode 100644 index 000000000..a3184cee3 Binary files /dev/null and b/_images/rendinst_vcolor_layered_02.jpg differ diff --git a/_images/rendinst_vcolor_layered_03.jpg b/_images/rendinst_vcolor_layered_03.jpg new file mode 100644 index 000000000..c4ce9583b Binary files /dev/null and b/_images/rendinst_vcolor_layered_03.jpg differ diff --git a/_images/rendinst_vcolor_layered_04.jpg b/_images/rendinst_vcolor_layered_04.jpg new file mode 100644 index 000000000..8396ad31c Binary files /dev/null and b/_images/rendinst_vcolor_layered_04.jpg differ diff --git a/_images/rendinst_vcolor_layered_05.jpg b/_images/rendinst_vcolor_layered_05.jpg new file mode 100644 index 000000000..6449356a7 Binary files /dev/null and b/_images/rendinst_vcolor_layered_05.jpg differ diff --git a/_images/rendinst_vcolor_layered_06.jpg b/_images/rendinst_vcolor_layered_06.jpg new file mode 100644 index 000000000..acb1c7cda Binary files /dev/null and b/_images/rendinst_vcolor_layered_06.jpg differ diff --git a/_images/rendinst_vcolor_layered_07.jpg b/_images/rendinst_vcolor_layered_07.jpg new file mode 100644 index 000000000..6599df8fe Binary files /dev/null and b/_images/rendinst_vcolor_layered_07.jpg differ diff --git a/_images/rendinst_vcolor_layered_08.jpg b/_images/rendinst_vcolor_layered_08.jpg new file mode 100644 index 000000000..1864f7a0b Binary files /dev/null and b/_images/rendinst_vcolor_layered_08.jpg differ diff --git a/_images/rendinst_vcolor_layered_09.jpg b/_images/rendinst_vcolor_layered_09.jpg new file mode 100644 index 000000000..ca76e5482 Binary files /dev/null and b/_images/rendinst_vcolor_layered_09.jpg differ diff --git a/_images/rendinst_vcolor_layered_10.jpg b/_images/rendinst_vcolor_layered_10.jpg new file mode 100644 index 000000000..6f586baf7 Binary files /dev/null and b/_images/rendinst_vcolor_layered_10.jpg differ diff --git a/_images/rendinst_vcolor_layered_11.jpg b/_images/rendinst_vcolor_layered_11.jpg new file mode 100644 index 000000000..211cb159a Binary files /dev/null and b/_images/rendinst_vcolor_layered_11.jpg differ diff --git a/_images/rendinst_vcolor_layered_12.jpg b/_images/rendinst_vcolor_layered_12.jpg new file mode 100644 index 000000000..a1bc1ef69 Binary files /dev/null and b/_images/rendinst_vcolor_layered_12.jpg differ diff --git a/_images/rendinst_vcolor_layered_13.jpg b/_images/rendinst_vcolor_layered_13.jpg new file mode 100644 index 000000000..b55b5fc1a Binary files /dev/null and b/_images/rendinst_vcolor_layered_13.jpg differ diff --git a/_images/rendinst_vcolor_layered_14.jpg b/_images/rendinst_vcolor_layered_14.jpg new file mode 100644 index 000000000..2eb8e1f7c Binary files /dev/null and b/_images/rendinst_vcolor_layered_14.jpg differ diff --git a/_images/rendinst_vcolor_layered_15.jpg b/_images/rendinst_vcolor_layered_15.jpg new file mode 100644 index 000000000..fd4a133ae Binary files /dev/null and b/_images/rendinst_vcolor_layered_15.jpg differ diff --git a/_images/rendinst_vcolor_layered_16.jpg b/_images/rendinst_vcolor_layered_16.jpg new file mode 100644 index 000000000..38d524c51 Binary files /dev/null and b/_images/rendinst_vcolor_layered_16.jpg differ diff --git a/_images/rendinst_vcolor_layered_17.jpg b/_images/rendinst_vcolor_layered_17.jpg new file mode 100644 index 000000000..98fdb59c0 Binary files /dev/null and b/_images/rendinst_vcolor_layered_17.jpg differ diff --git a/_images/rendinst_vcolor_layered_18.jpg b/_images/rendinst_vcolor_layered_18.jpg new file mode 100644 index 000000000..44ee4a913 Binary files /dev/null and b/_images/rendinst_vcolor_layered_18.jpg differ diff --git a/_images/rendinst_vcolor_layered_19.jpg b/_images/rendinst_vcolor_layered_19.jpg new file mode 100644 index 000000000..a52cc2a4d Binary files /dev/null and b/_images/rendinst_vcolor_layered_19.jpg differ diff --git a/_images/rendinst_vcolor_layered_20.jpg b/_images/rendinst_vcolor_layered_20.jpg new file mode 100644 index 000000000..3c56e4a07 Binary files /dev/null and b/_images/rendinst_vcolor_layered_20.jpg differ diff --git a/_images/rendinst_vcolor_layered_21.jpg b/_images/rendinst_vcolor_layered_21.jpg new file mode 100644 index 000000000..0453839cb Binary files /dev/null and b/_images/rendinst_vcolor_layered_21.jpg differ diff --git a/_images/rendinst_vcolor_layered_22.jpg b/_images/rendinst_vcolor_layered_22.jpg new file mode 100644 index 000000000..c443fa6de Binary files /dev/null and b/_images/rendinst_vcolor_layered_22.jpg differ diff --git a/_images/rendinst_vcolor_layered_23.jpg b/_images/rendinst_vcolor_layered_23.jpg new file mode 100644 index 000000000..24a9498a7 Binary files /dev/null and b/_images/rendinst_vcolor_layered_23.jpg differ diff --git a/_images/rendinst_vcolor_layered_24.jpg b/_images/rendinst_vcolor_layered_24.jpg new file mode 100644 index 000000000..cccf77ac1 Binary files /dev/null and b/_images/rendinst_vcolor_layered_24.jpg differ diff --git a/_images/rendinst_vcolor_layered_25.jpg b/_images/rendinst_vcolor_layered_25.jpg new file mode 100644 index 000000000..6f976860b Binary files /dev/null and b/_images/rendinst_vcolor_layered_25.jpg differ diff --git a/_images/rendinst_vcolor_layered_26.jpg b/_images/rendinst_vcolor_layered_26.jpg new file mode 100644 index 000000000..b5c724f55 Binary files /dev/null and b/_images/rendinst_vcolor_layered_26.jpg differ diff --git a/_images/rendinst_vcolor_layered_27.jpg b/_images/rendinst_vcolor_layered_27.jpg new file mode 100644 index 000000000..836397519 Binary files /dev/null and b/_images/rendinst_vcolor_layered_27.jpg differ diff --git a/_images/rendinst_vcolor_layered_28.jpg b/_images/rendinst_vcolor_layered_28.jpg new file mode 100644 index 000000000..67c0fbfbb Binary files /dev/null and b/_images/rendinst_vcolor_layered_28.jpg differ diff --git a/_images/rendinst_vcolor_layered_29.jpg b/_images/rendinst_vcolor_layered_29.jpg new file mode 100644 index 000000000..e4d9a43c8 Binary files /dev/null and b/_images/rendinst_vcolor_layered_29.jpg differ diff --git a/_images/rendinst_vcolor_layered_30.jpg b/_images/rendinst_vcolor_layered_30.jpg new file mode 100644 index 000000000..6fff2f324 Binary files /dev/null and b/_images/rendinst_vcolor_layered_30.jpg differ diff --git a/_images/rendinst_vcolor_layered_31.jpg b/_images/rendinst_vcolor_layered_31.jpg new file mode 100644 index 000000000..5de11ebe0 Binary files /dev/null and b/_images/rendinst_vcolor_layered_31.jpg differ diff --git a/_images/rendinst_vcolor_layered_32.jpg b/_images/rendinst_vcolor_layered_32.jpg new file mode 100644 index 000000000..ae6e23a0f Binary files /dev/null and b/_images/rendinst_vcolor_layered_32.jpg differ diff --git a/_images/replacing_or_modifying_lights_01.jpg b/_images/replacing_or_modifying_lights_01.jpg new file mode 100644 index 000000000..ee16198c2 Binary files /dev/null and b/_images/replacing_or_modifying_lights_01.jpg differ diff --git a/_images/replacing_or_modifying_lights_02.jpg b/_images/replacing_or_modifying_lights_02.jpg new file mode 100644 index 000000000..435bea0ce Binary files /dev/null and b/_images/replacing_or_modifying_lights_02.jpg differ diff --git a/_images/replacing_or_modifying_lights_03.jpg b/_images/replacing_or_modifying_lights_03.jpg new file mode 100644 index 000000000..2054b9118 Binary files /dev/null and b/_images/replacing_or_modifying_lights_03.jpg differ diff --git a/_images/replacing_or_modifying_lights_04.jpg b/_images/replacing_or_modifying_lights_04.jpg new file mode 100644 index 000000000..ee3df06c6 Binary files /dev/null and b/_images/replacing_or_modifying_lights_04.jpg differ diff --git a/_images/replacing_or_modifying_lights_05.jpg b/_images/replacing_or_modifying_lights_05.jpg new file mode 100644 index 000000000..e92be67b3 Binary files /dev/null and b/_images/replacing_or_modifying_lights_05.jpg differ diff --git a/_images/replacing_or_modifying_lights_06.jpg b/_images/replacing_or_modifying_lights_06.jpg new file mode 100644 index 000000000..85d041b8a Binary files /dev/null and b/_images/replacing_or_modifying_lights_06.jpg differ diff --git a/_images/replacing_or_modifying_lights_07.jpg b/_images/replacing_or_modifying_lights_07.jpg new file mode 100644 index 000000000..a5b323268 Binary files /dev/null and b/_images/replacing_or_modifying_lights_07.jpg differ diff --git a/_images/replacing_or_modifying_lights_08.jpg b/_images/replacing_or_modifying_lights_08.jpg new file mode 100644 index 000000000..c54e9d8ba Binary files /dev/null and b/_images/replacing_or_modifying_lights_08.jpg differ diff --git a/_images/replacing_or_modifying_lights_09.jpg b/_images/replacing_or_modifying_lights_09.jpg new file mode 100644 index 000000000..fd788df33 Binary files /dev/null and b/_images/replacing_or_modifying_lights_09.jpg differ diff --git a/_images/replacing_or_modifying_lights_10.jpg b/_images/replacing_or_modifying_lights_10.jpg new file mode 100644 index 000000000..8278fa997 Binary files /dev/null and b/_images/replacing_or_modifying_lights_10.jpg differ diff --git a/_images/replacing_or_modifying_lights_11.jpg b/_images/replacing_or_modifying_lights_11.jpg new file mode 100644 index 000000000..d1f8ccd5a Binary files /dev/null and b/_images/replacing_or_modifying_lights_11.jpg differ diff --git a/_images/replacing_or_modifying_lights_12.jpg b/_images/replacing_or_modifying_lights_12.jpg new file mode 100644 index 000000000..ff59e7fae Binary files /dev/null and b/_images/replacing_or_modifying_lights_12.jpg differ diff --git a/_images/replacing_or_modifying_lights_13.jpg b/_images/replacing_or_modifying_lights_13.jpg new file mode 100644 index 000000000..2c557d4f3 Binary files /dev/null and b/_images/replacing_or_modifying_lights_13.jpg differ diff --git a/_images/replacing_or_modifying_lights_14.jpg b/_images/replacing_or_modifying_lights_14.jpg new file mode 100644 index 000000000..3eaac65b5 Binary files /dev/null and b/_images/replacing_or_modifying_lights_14.jpg differ diff --git a/_images/replacing_or_modifying_lights_15.jpg b/_images/replacing_or_modifying_lights_15.jpg new file mode 100644 index 000000000..97e48f270 Binary files /dev/null and b/_images/replacing_or_modifying_lights_15.jpg differ diff --git a/_images/replacing_or_modifying_lights_16.jpg b/_images/replacing_or_modifying_lights_16.jpg new file mode 100644 index 000000000..8f2b0c733 Binary files /dev/null and b/_images/replacing_or_modifying_lights_16.jpg differ diff --git a/_images/replacing_or_modifying_lights_17.jpg b/_images/replacing_or_modifying_lights_17.jpg new file mode 100644 index 000000000..35b2469e0 Binary files /dev/null and b/_images/replacing_or_modifying_lights_17.jpg differ diff --git a/_images/replacing_or_modifying_lights_18.jpg b/_images/replacing_or_modifying_lights_18.jpg new file mode 100644 index 000000000..7ee3e16d8 Binary files /dev/null and b/_images/replacing_or_modifying_lights_18.jpg differ diff --git a/_images/replacing_or_modifying_lights_19.jpg b/_images/replacing_or_modifying_lights_19.jpg new file mode 100644 index 000000000..31b06c6e8 Binary files /dev/null and b/_images/replacing_or_modifying_lights_19.jpg differ diff --git a/_images/replacing_or_modifying_lights_20.jpg b/_images/replacing_or_modifying_lights_20.jpg new file mode 100644 index 000000000..8633c448d Binary files /dev/null and b/_images/replacing_or_modifying_lights_20.jpg differ diff --git a/_images/replacing_or_modifying_lights_21.jpg b/_images/replacing_or_modifying_lights_21.jpg new file mode 100644 index 000000000..d0da81a6c Binary files /dev/null and b/_images/replacing_or_modifying_lights_21.jpg differ diff --git a/_images/replacing_or_modifying_lights_22.jpg b/_images/replacing_or_modifying_lights_22.jpg new file mode 100644 index 000000000..c9de9f586 Binary files /dev/null and b/_images/replacing_or_modifying_lights_22.jpg differ diff --git a/_images/replacing_or_modifying_lights_23.jpg b/_images/replacing_or_modifying_lights_23.jpg new file mode 100644 index 000000000..0f46da9c9 Binary files /dev/null and b/_images/replacing_or_modifying_lights_23.jpg differ diff --git a/_images/replacing_or_modifying_lights_24.jpg b/_images/replacing_or_modifying_lights_24.jpg new file mode 100644 index 000000000..9eb454645 Binary files /dev/null and b/_images/replacing_or_modifying_lights_24.jpg differ diff --git a/_images/replacing_or_modifying_lights_25.jpg b/_images/replacing_or_modifying_lights_25.jpg new file mode 100644 index 000000000..a772e90ba Binary files /dev/null and b/_images/replacing_or_modifying_lights_25.jpg differ diff --git a/_images/replacing_or_modifying_lights_26.jpg b/_images/replacing_or_modifying_lights_26.jpg new file mode 100644 index 000000000..63dc08cbe Binary files /dev/null and b/_images/replacing_or_modifying_lights_26.jpg differ diff --git a/_images/replacing_or_modifying_lights_27.jpg b/_images/replacing_or_modifying_lights_27.jpg new file mode 100644 index 000000000..bbfd67f6c Binary files /dev/null and b/_images/replacing_or_modifying_lights_27.jpg differ diff --git a/_images/replacing_or_modifying_lights_28.jpg b/_images/replacing_or_modifying_lights_28.jpg new file mode 100644 index 000000000..61a54aae8 Binary files /dev/null and b/_images/replacing_or_modifying_lights_28.jpg differ diff --git a/_images/replacing_or_modifying_lights_29.jpg b/_images/replacing_or_modifying_lights_29.jpg new file mode 100644 index 000000000..628c7b387 Binary files /dev/null and b/_images/replacing_or_modifying_lights_29.jpg differ diff --git a/_images/replacing_or_modifying_lights_30.jpg b/_images/replacing_or_modifying_lights_30.jpg new file mode 100644 index 000000000..33674f985 Binary files /dev/null and b/_images/replacing_or_modifying_lights_30.jpg differ diff --git a/_images/replacing_or_modifying_lights_31.jpg b/_images/replacing_or_modifying_lights_31.jpg new file mode 100644 index 000000000..d44b4e281 Binary files /dev/null and b/_images/replacing_or_modifying_lights_31.jpg differ diff --git a/_images/replacing_or_modifying_lights_32.jpg b/_images/replacing_or_modifying_lights_32.jpg new file mode 100644 index 000000000..8fb5da95a Binary files /dev/null and b/_images/replacing_or_modifying_lights_32.jpg differ diff --git a/_images/replacing_or_modifying_lights_33.jpg b/_images/replacing_or_modifying_lights_33.jpg new file mode 100644 index 000000000..fae78ed34 Binary files /dev/null and b/_images/replacing_or_modifying_lights_33.jpg differ diff --git a/_images/replacing_or_modifying_lights_34.jpg b/_images/replacing_or_modifying_lights_34.jpg new file mode 100644 index 000000000..020f32b31 Binary files /dev/null and b/_images/replacing_or_modifying_lights_34.jpg differ diff --git a/_images/replacing_or_modifying_lights_35.jpg b/_images/replacing_or_modifying_lights_35.jpg new file mode 100644 index 000000000..495449856 Binary files /dev/null and b/_images/replacing_or_modifying_lights_35.jpg differ diff --git a/_images/replacing_or_modifying_lights_36.jpg b/_images/replacing_or_modifying_lights_36.jpg new file mode 100644 index 000000000..84b47cc8f Binary files /dev/null and b/_images/replacing_or_modifying_lights_36.jpg differ diff --git a/_images/replacing_or_modifying_lights_37.jpg b/_images/replacing_or_modifying_lights_37.jpg new file mode 100644 index 000000000..b945fecb3 Binary files /dev/null and b/_images/replacing_or_modifying_lights_37.jpg differ diff --git a/_images/replacing_or_modifying_lights_38.jpg b/_images/replacing_or_modifying_lights_38.jpg new file mode 100644 index 000000000..6425ee473 Binary files /dev/null and b/_images/replacing_or_modifying_lights_38.jpg differ diff --git a/_images/replacing_or_modifying_lights_39.jpg b/_images/replacing_or_modifying_lights_39.jpg new file mode 100644 index 000000000..afb66d16a Binary files /dev/null and b/_images/replacing_or_modifying_lights_39.jpg differ diff --git a/_images/replacing_or_modifying_lights_40.jpg b/_images/replacing_or_modifying_lights_40.jpg new file mode 100644 index 000000000..4f2b0cec3 Binary files /dev/null and b/_images/replacing_or_modifying_lights_40.jpg differ diff --git a/_images/replacing_or_modifying_lights_41.jpg b/_images/replacing_or_modifying_lights_41.jpg new file mode 100644 index 000000000..afd2793bc Binary files /dev/null and b/_images/replacing_or_modifying_lights_41.jpg differ diff --git a/_images/replacing_or_modifying_lights_42.jpg b/_images/replacing_or_modifying_lights_42.jpg new file mode 100644 index 000000000..d332e544d Binary files /dev/null and b/_images/replacing_or_modifying_lights_42.jpg differ diff --git a/_images/replacing_or_modifying_lights_43.jpg b/_images/replacing_or_modifying_lights_43.jpg new file mode 100644 index 000000000..ede833f6f Binary files /dev/null and b/_images/replacing_or_modifying_lights_43.jpg differ diff --git a/_images/replacing_or_modifying_lights_44.jpg b/_images/replacing_or_modifying_lights_44.jpg new file mode 100644 index 000000000..0823f04f7 Binary files /dev/null and b/_images/replacing_or_modifying_lights_44.jpg differ diff --git a/_images/replacing_or_modifying_lights_45.jpg b/_images/replacing_or_modifying_lights_45.jpg new file mode 100644 index 000000000..0caa348f8 Binary files /dev/null and b/_images/replacing_or_modifying_lights_45.jpg differ diff --git a/_images/resource_building_01.jpg b/_images/resource_building_01.jpg new file mode 100644 index 000000000..f32e92d57 Binary files /dev/null and b/_images/resource_building_01.jpg differ diff --git a/_images/schemeful_events_01.png b/_images/schemeful_events_01.png new file mode 100644 index 000000000..e8c678b8e Binary files /dev/null and b/_images/schemeful_events_01.png differ diff --git a/_images/simple_cmp_01.png b/_images/simple_cmp_01.png new file mode 100644 index 000000000..6c8481159 Binary files /dev/null and b/_images/simple_cmp_01.png differ diff --git a/_images/simple_cmp_ed_active_layer.png b/_images/simple_cmp_ed_active_layer.png new file mode 100644 index 000000000..393703ca9 Binary files /dev/null and b/_images/simple_cmp_ed_active_layer.png differ diff --git a/_images/simple_cmp_ed_active_layer_name.png b/_images/simple_cmp_ed_active_layer_name.png new file mode 100644 index 000000000..f399d152e Binary files /dev/null and b/_images/simple_cmp_ed_active_layer_name.png differ diff --git a/_images/simple_cmp_ed_interface.png b/_images/simple_cmp_ed_interface.png new file mode 100644 index 000000000..3df23cdea Binary files /dev/null and b/_images/simple_cmp_ed_interface.png differ diff --git a/_images/simple_cmp_ed_type_warning.png b/_images/simple_cmp_ed_type_warning.png new file mode 100644 index 000000000..b80484172 Binary files /dev/null and b/_images/simple_cmp_ed_type_warning.png differ diff --git a/_images/simple_cmp_node_prop_example.png b/_images/simple_cmp_node_prop_example.png new file mode 100644 index 000000000..d3ef76f52 Binary files /dev/null and b/_images/simple_cmp_node_prop_example.png differ diff --git a/_images/simple_cmp_non_uni_scale.png b/_images/simple_cmp_non_uni_scale.png new file mode 100644 index 000000000..6aa2313c0 Binary files /dev/null and b/_images/simple_cmp_non_uni_scale.png differ diff --git a/_images/simple_cmp_type_error.png b/_images/simple_cmp_type_error.png new file mode 100644 index 000000000..39103d5fb Binary files /dev/null and b/_images/simple_cmp_type_error.png differ diff --git a/_images/sm_groups_1.png b/_images/sm_groups_1.png new file mode 100644 index 000000000..7336461ab Binary files /dev/null and b/_images/sm_groups_1.png differ diff --git a/_images/sm_groups_2.png b/_images/sm_groups_2.png new file mode 100644 index 000000000..7ceddd822 Binary files /dev/null and b/_images/sm_groups_2.png differ diff --git a/_images/sm_groups_3.png b/_images/sm_groups_3.png new file mode 100644 index 000000000..25fdd8229 Binary files /dev/null and b/_images/sm_groups_3.png differ diff --git a/_images/spline_blk_01.jpg b/_images/spline_blk_01.jpg new file mode 100644 index 000000000..c41ddf07b Binary files /dev/null and b/_images/spline_blk_01.jpg differ diff --git a/_images/spline_blk_02.jpg b/_images/spline_blk_02.jpg new file mode 100644 index 000000000..dd8dac4ad Binary files /dev/null and b/_images/spline_blk_02.jpg differ diff --git a/_images/spline_blk_03.jpg b/_images/spline_blk_03.jpg new file mode 100644 index 000000000..0e709fe45 Binary files /dev/null and b/_images/spline_blk_03.jpg differ diff --git a/_images/spline_blk_04.jpg b/_images/spline_blk_04.jpg new file mode 100644 index 000000000..c0560f79b Binary files /dev/null and b/_images/spline_blk_04.jpg differ diff --git a/_images/spline_blk_05.jpg b/_images/spline_blk_05.jpg new file mode 100644 index 000000000..bed9fe7b6 Binary files /dev/null and b/_images/spline_blk_05.jpg differ diff --git a/_images/spline_blk_06.jpg b/_images/spline_blk_06.jpg new file mode 100644 index 000000000..b7c187fd8 Binary files /dev/null and b/_images/spline_blk_06.jpg differ diff --git a/_images/spline_blk_07.jpg b/_images/spline_blk_07.jpg new file mode 100644 index 000000000..963e6c6c8 Binary files /dev/null and b/_images/spline_blk_07.jpg differ diff --git a/_images/spline_blk_08.jpg b/_images/spline_blk_08.jpg new file mode 100644 index 000000000..e9eff8da9 Binary files /dev/null and b/_images/spline_blk_08.jpg differ diff --git a/_images/spline_blk_09.jpg b/_images/spline_blk_09.jpg new file mode 100644 index 000000000..66dcc340e Binary files /dev/null and b/_images/spline_blk_09.jpg differ diff --git a/_images/spline_blk_10.jpg b/_images/spline_blk_10.jpg new file mode 100644 index 000000000..47ddc6366 Binary files /dev/null and b/_images/spline_blk_10.jpg differ diff --git a/_images/spline_blk_11.jpg b/_images/spline_blk_11.jpg new file mode 100644 index 000000000..1c9528122 Binary files /dev/null and b/_images/spline_blk_11.jpg differ diff --git a/_images/spline_blk_12.jpg b/_images/spline_blk_12.jpg new file mode 100644 index 000000000..315286056 Binary files /dev/null and b/_images/spline_blk_12.jpg differ diff --git a/_images/spline_blk_13.jpg b/_images/spline_blk_13.jpg new file mode 100644 index 000000000..ff18afd20 Binary files /dev/null and b/_images/spline_blk_13.jpg differ diff --git a/_images/spline_blk_14.jpg b/_images/spline_blk_14.jpg new file mode 100644 index 000000000..50d50519a Binary files /dev/null and b/_images/spline_blk_14.jpg differ diff --git a/_images/spline_blk_15.jpg b/_images/spline_blk_15.jpg new file mode 100644 index 000000000..bdec34e07 Binary files /dev/null and b/_images/spline_blk_15.jpg differ diff --git a/_images/spline_blk_16.jpg b/_images/spline_blk_16.jpg new file mode 100644 index 000000000..e538fe473 Binary files /dev/null and b/_images/spline_blk_16.jpg differ diff --git a/_images/spline_blk_17.jpg b/_images/spline_blk_17.jpg new file mode 100644 index 000000000..deed42fc3 Binary files /dev/null and b/_images/spline_blk_17.jpg differ diff --git a/_images/spline_blk_18.jpg b/_images/spline_blk_18.jpg new file mode 100644 index 000000000..7385ea1a8 Binary files /dev/null and b/_images/spline_blk_18.jpg differ diff --git a/_images/spline_blk_19.jpg b/_images/spline_blk_19.jpg new file mode 100644 index 000000000..7050440bc Binary files /dev/null and b/_images/spline_blk_19.jpg differ diff --git a/_images/spline_blk_20.jpg b/_images/spline_blk_20.jpg new file mode 100644 index 000000000..ce30b9a19 Binary files /dev/null and b/_images/spline_blk_20.jpg differ diff --git a/_images/spline_blk_21.jpg b/_images/spline_blk_21.jpg new file mode 100644 index 000000000..722825882 Binary files /dev/null and b/_images/spline_blk_21.jpg differ diff --git a/_images/spline_blk_22.jpg b/_images/spline_blk_22.jpg new file mode 100644 index 000000000..d1a4af918 Binary files /dev/null and b/_images/spline_blk_22.jpg differ diff --git a/_images/spline_blk_23.jpg b/_images/spline_blk_23.jpg new file mode 100644 index 000000000..879cdbd3a Binary files /dev/null and b/_images/spline_blk_23.jpg differ diff --git a/_images/spline_blk_24.jpg b/_images/spline_blk_24.jpg new file mode 100644 index 000000000..e56123c45 Binary files /dev/null and b/_images/spline_blk_24.jpg differ diff --git a/_images/spline_blk_25.jpg b/_images/spline_blk_25.jpg new file mode 100644 index 000000000..b166e2363 Binary files /dev/null and b/_images/spline_blk_25.jpg differ diff --git a/_images/spline_blk_26.jpg b/_images/spline_blk_26.jpg new file mode 100644 index 000000000..47cb39e71 Binary files /dev/null and b/_images/spline_blk_26.jpg differ diff --git a/_images/spline_blk_27.jpg b/_images/spline_blk_27.jpg new file mode 100644 index 000000000..6b2faf172 Binary files /dev/null and b/_images/spline_blk_27.jpg differ diff --git a/_images/spline_blk_28.jpg b/_images/spline_blk_28.jpg new file mode 100644 index 000000000..270826e01 Binary files /dev/null and b/_images/spline_blk_28.jpg differ diff --git a/_images/spline_blk_29.jpg b/_images/spline_blk_29.jpg new file mode 100644 index 000000000..3be104afe Binary files /dev/null and b/_images/spline_blk_29.jpg differ diff --git a/_images/spline_blk_30.jpg b/_images/spline_blk_30.jpg new file mode 100644 index 000000000..325a9612c Binary files /dev/null and b/_images/spline_blk_30.jpg differ diff --git a/_images/substance_designer_01.jpg b/_images/substance_designer_01.jpg new file mode 100644 index 000000000..7a69f10b5 Binary files /dev/null and b/_images/substance_designer_01.jpg differ diff --git a/_images/substance_designer_02.jpg b/_images/substance_designer_02.jpg new file mode 100644 index 000000000..5d5884dc7 Binary files /dev/null and b/_images/substance_designer_02.jpg differ diff --git a/_images/substance_designer_03.jpg b/_images/substance_designer_03.jpg new file mode 100644 index 000000000..9ec62ba3a Binary files /dev/null and b/_images/substance_designer_03.jpg differ diff --git a/_images/substance_designer_04.jpg b/_images/substance_designer_04.jpg new file mode 100644 index 000000000..b39e31300 Binary files /dev/null and b/_images/substance_designer_04.jpg differ diff --git a/_images/substance_designer_05.jpg b/_images/substance_designer_05.jpg new file mode 100644 index 000000000..940e599f2 Binary files /dev/null and b/_images/substance_designer_05.jpg differ diff --git a/_images/substance_designer_06.jpg b/_images/substance_designer_06.jpg new file mode 100644 index 000000000..03e0ea2e9 Binary files /dev/null and b/_images/substance_designer_06.jpg differ diff --git a/_images/substance_designer_07.jpg b/_images/substance_designer_07.jpg new file mode 100644 index 000000000..2675daece Binary files /dev/null and b/_images/substance_designer_07.jpg differ diff --git a/_images/tools.png b/_images/tools.png new file mode 100644 index 000000000..49473daf9 Binary files /dev/null and b/_images/tools.png differ diff --git a/_images/transfer_vertex_00.gif b/_images/transfer_vertex_00.gif new file mode 100644 index 000000000..ec17d0504 Binary files /dev/null and b/_images/transfer_vertex_00.gif differ diff --git a/_images/transfer_vertex_01.png b/_images/transfer_vertex_01.png new file mode 100644 index 000000000..ef699487d Binary files /dev/null and b/_images/transfer_vertex_01.png differ diff --git a/_images/transfer_vertex_02.png b/_images/transfer_vertex_02.png new file mode 100644 index 000000000..ce93915f5 Binary files /dev/null and b/_images/transfer_vertex_02.png differ diff --git a/_images/transfer_vertex_03.png b/_images/transfer_vertex_03.png new file mode 100644 index 000000000..f9e3456a5 Binary files /dev/null and b/_images/transfer_vertex_03.png differ diff --git a/_images/transfer_vertex_04.png b/_images/transfer_vertex_04.png new file mode 100644 index 000000000..debdf0714 Binary files /dev/null and b/_images/transfer_vertex_04.png differ diff --git a/_images/transfer_vertex_06.png b/_images/transfer_vertex_06.png new file mode 100644 index 000000000..7774ef57c Binary files /dev/null and b/_images/transfer_vertex_06.png differ diff --git a/_images/transfer_vertex_07.png b/_images/transfer_vertex_07.png new file mode 100644 index 000000000..f250cc04c Binary files /dev/null and b/_images/transfer_vertex_07.png differ diff --git a/_images/transfer_vertex_09.png b/_images/transfer_vertex_09.png new file mode 100644 index 000000000..b23a024a8 Binary files /dev/null and b/_images/transfer_vertex_09.png differ diff --git a/_images/transfer_vertex_10.png b/_images/transfer_vertex_10.png new file mode 100644 index 000000000..e8626f0da Binary files /dev/null and b/_images/transfer_vertex_10.png differ diff --git a/_images/wt_designing_vehicle_deformations_01.jpg b/_images/wt_designing_vehicle_deformations_01.jpg new file mode 100644 index 000000000..95f35ba48 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_01.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_02.jpg b/_images/wt_designing_vehicle_deformations_02.jpg new file mode 100644 index 000000000..05e26e4f6 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_02.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_03.jpg b/_images/wt_designing_vehicle_deformations_03.jpg new file mode 100644 index 000000000..c4e8fef60 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_03.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_04.jpg b/_images/wt_designing_vehicle_deformations_04.jpg new file mode 100644 index 000000000..fecfb889a Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_04.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_05.jpg b/_images/wt_designing_vehicle_deformations_05.jpg new file mode 100644 index 000000000..b720ebb10 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_05.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_06.jpg b/_images/wt_designing_vehicle_deformations_06.jpg new file mode 100644 index 000000000..d60ec0e00 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_06.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_07.jpg b/_images/wt_designing_vehicle_deformations_07.jpg new file mode 100644 index 000000000..7983921be Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_07.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_08.jpg b/_images/wt_designing_vehicle_deformations_08.jpg new file mode 100644 index 000000000..904a44abe Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_08.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_09.jpg b/_images/wt_designing_vehicle_deformations_09.jpg new file mode 100644 index 000000000..ea188cb25 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_09.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_10.jpg b/_images/wt_designing_vehicle_deformations_10.jpg new file mode 100644 index 000000000..344a53999 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_10.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_11.jpg b/_images/wt_designing_vehicle_deformations_11.jpg new file mode 100644 index 000000000..70df7e138 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_11.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_12.jpg b/_images/wt_designing_vehicle_deformations_12.jpg new file mode 100644 index 000000000..e82b852d0 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_12.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_13.jpg b/_images/wt_designing_vehicle_deformations_13.jpg new file mode 100644 index 000000000..cbaee9513 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_13.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_14.jpg b/_images/wt_designing_vehicle_deformations_14.jpg new file mode 100644 index 000000000..57d807098 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_14.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_15.jpg b/_images/wt_designing_vehicle_deformations_15.jpg new file mode 100644 index 000000000..fb32a65b4 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_15.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_16.jpg b/_images/wt_designing_vehicle_deformations_16.jpg new file mode 100644 index 000000000..692be6940 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_16.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_17.jpg b/_images/wt_designing_vehicle_deformations_17.jpg new file mode 100644 index 000000000..9b0abc5ee Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_17.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_18.jpg b/_images/wt_designing_vehicle_deformations_18.jpg new file mode 100644 index 000000000..ece15bb8b Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_18.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_19.jpg b/_images/wt_designing_vehicle_deformations_19.jpg new file mode 100644 index 000000000..f27ed4f5a Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_19.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_20.jpg b/_images/wt_designing_vehicle_deformations_20.jpg new file mode 100644 index 000000000..a67c9cefb Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_20.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_21.jpg b/_images/wt_designing_vehicle_deformations_21.jpg new file mode 100644 index 000000000..86094cd78 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_21.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_22.jpg b/_images/wt_designing_vehicle_deformations_22.jpg new file mode 100644 index 000000000..8d47dd22d Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_22.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_23.jpg b/_images/wt_designing_vehicle_deformations_23.jpg new file mode 100644 index 000000000..c8f28c612 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_23.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_24.jpg b/_images/wt_designing_vehicle_deformations_24.jpg new file mode 100644 index 000000000..f0f610432 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_24.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_25.jpg b/_images/wt_designing_vehicle_deformations_25.jpg new file mode 100644 index 000000000..be8499fb9 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_25.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_26.jpg b/_images/wt_designing_vehicle_deformations_26.jpg new file mode 100644 index 000000000..a3a660b20 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_26.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_27.jpg b/_images/wt_designing_vehicle_deformations_27.jpg new file mode 100644 index 000000000..69baad27c Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_27.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_28.jpg b/_images/wt_designing_vehicle_deformations_28.jpg new file mode 100644 index 000000000..360848526 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_28.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_29.jpg b/_images/wt_designing_vehicle_deformations_29.jpg new file mode 100644 index 000000000..b6bb69eb0 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_29.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_30.jpg b/_images/wt_designing_vehicle_deformations_30.jpg new file mode 100644 index 000000000..c91e5a7ad Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_30.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_31.jpg b/_images/wt_designing_vehicle_deformations_31.jpg new file mode 100644 index 000000000..29b39939d Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_31.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_32.jpg b/_images/wt_designing_vehicle_deformations_32.jpg new file mode 100644 index 000000000..38c87ebaa Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_32.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_33.jpg b/_images/wt_designing_vehicle_deformations_33.jpg new file mode 100644 index 000000000..bce6bd011 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_33.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_34.jpg b/_images/wt_designing_vehicle_deformations_34.jpg new file mode 100644 index 000000000..59d6a954f Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_34.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_35.jpg b/_images/wt_designing_vehicle_deformations_35.jpg new file mode 100644 index 000000000..436169d3d Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_35.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_36.jpg b/_images/wt_designing_vehicle_deformations_36.jpg new file mode 100644 index 000000000..e34c56d2a Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_36.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_37.jpg b/_images/wt_designing_vehicle_deformations_37.jpg new file mode 100644 index 000000000..48fab659a Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_37.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_38.jpg b/_images/wt_designing_vehicle_deformations_38.jpg new file mode 100644 index 000000000..73d790abc Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_38.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_39.jpg b/_images/wt_designing_vehicle_deformations_39.jpg new file mode 100644 index 000000000..17f220fb1 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_39.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_40.jpg b/_images/wt_designing_vehicle_deformations_40.jpg new file mode 100644 index 000000000..b0362050c Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_40.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_41.jpg b/_images/wt_designing_vehicle_deformations_41.jpg new file mode 100644 index 000000000..cd00731d7 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_41.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_42.jpg b/_images/wt_designing_vehicle_deformations_42.jpg new file mode 100644 index 000000000..b172048eb Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_42.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_43.jpg b/_images/wt_designing_vehicle_deformations_43.jpg new file mode 100644 index 000000000..fd3e2c87a Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_43.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_44.jpg b/_images/wt_designing_vehicle_deformations_44.jpg new file mode 100644 index 000000000..27f20954c Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_44.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_45.jpg b/_images/wt_designing_vehicle_deformations_45.jpg new file mode 100644 index 000000000..b64e2261c Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_45.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_46.jpg b/_images/wt_designing_vehicle_deformations_46.jpg new file mode 100644 index 000000000..5b9088b16 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_46.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_47.jpg b/_images/wt_designing_vehicle_deformations_47.jpg new file mode 100644 index 000000000..cb0f80348 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_47.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_48.jpg b/_images/wt_designing_vehicle_deformations_48.jpg new file mode 100644 index 000000000..2d3cd8402 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_48.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_49.jpg b/_images/wt_designing_vehicle_deformations_49.jpg new file mode 100644 index 000000000..064cf664b Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_49.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_50.jpg b/_images/wt_designing_vehicle_deformations_50.jpg new file mode 100644 index 000000000..a0892bcd1 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_50.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_51.jpg b/_images/wt_designing_vehicle_deformations_51.jpg new file mode 100644 index 000000000..2eef6df33 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_51.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_52.jpg b/_images/wt_designing_vehicle_deformations_52.jpg new file mode 100644 index 000000000..0d0868f85 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_52.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_53.jpg b/_images/wt_designing_vehicle_deformations_53.jpg new file mode 100644 index 000000000..80f364167 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_53.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_54.jpg b/_images/wt_designing_vehicle_deformations_54.jpg new file mode 100644 index 000000000..da16c530a Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_54.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_55.jpg b/_images/wt_designing_vehicle_deformations_55.jpg new file mode 100644 index 000000000..1b74b5ff4 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_55.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_56.jpg b/_images/wt_designing_vehicle_deformations_56.jpg new file mode 100644 index 000000000..391491a91 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_56.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_57.jpg b/_images/wt_designing_vehicle_deformations_57.jpg new file mode 100644 index 000000000..8683938e8 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_57.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_58.jpg b/_images/wt_designing_vehicle_deformations_58.jpg new file mode 100644 index 000000000..b7b065cd8 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_58.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_59.jpg b/_images/wt_designing_vehicle_deformations_59.jpg new file mode 100644 index 000000000..68f524129 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_59.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_60.jpg b/_images/wt_designing_vehicle_deformations_60.jpg new file mode 100644 index 000000000..6f2fa94ff Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_60.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_61.jpg b/_images/wt_designing_vehicle_deformations_61.jpg new file mode 100644 index 000000000..ff69e10db Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_61.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_62.jpg b/_images/wt_designing_vehicle_deformations_62.jpg new file mode 100644 index 000000000..677f86602 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_62.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_63.jpg b/_images/wt_designing_vehicle_deformations_63.jpg new file mode 100644 index 000000000..bf43303e8 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_63.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_64.jpg b/_images/wt_designing_vehicle_deformations_64.jpg new file mode 100644 index 000000000..30cdcb097 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_64.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_65.jpg b/_images/wt_designing_vehicle_deformations_65.jpg new file mode 100644 index 000000000..9f35fda4d Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_65.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_66.jpg b/_images/wt_designing_vehicle_deformations_66.jpg new file mode 100644 index 000000000..7996d591d Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_66.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_67.jpg b/_images/wt_designing_vehicle_deformations_67.jpg new file mode 100644 index 000000000..83fc045e9 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_67.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_68.jpg b/_images/wt_designing_vehicle_deformations_68.jpg new file mode 100644 index 000000000..ae2360d9e Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_68.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_69.jpg b/_images/wt_designing_vehicle_deformations_69.jpg new file mode 100644 index 000000000..690dc11b3 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_69.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_70.jpg b/_images/wt_designing_vehicle_deformations_70.jpg new file mode 100644 index 000000000..030289e60 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_70.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_71.jpg b/_images/wt_designing_vehicle_deformations_71.jpg new file mode 100644 index 000000000..2a25585da Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_71.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_72.jpg b/_images/wt_designing_vehicle_deformations_72.jpg new file mode 100644 index 000000000..bd6ae51d6 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_72.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_73.jpg b/_images/wt_designing_vehicle_deformations_73.jpg new file mode 100644 index 000000000..c4c998fdf Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_73.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_74.jpg b/_images/wt_designing_vehicle_deformations_74.jpg new file mode 100644 index 000000000..f6deee41a Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_74.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_75.jpg b/_images/wt_designing_vehicle_deformations_75.jpg new file mode 100644 index 000000000..4f891c96c Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_75.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_76.jpg b/_images/wt_designing_vehicle_deformations_76.jpg new file mode 100644 index 000000000..16a251ce0 Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_76.jpg differ diff --git a/_images/wt_designing_vehicle_deformations_77.jpg b/_images/wt_designing_vehicle_deformations_77.jpg new file mode 100644 index 000000000..43422e09d Binary files /dev/null and b/_images/wt_designing_vehicle_deformations_77.jpg differ diff --git a/_sources/api-references/dagor-dshl/index.rst.txt b/_sources/api-references/dagor-dshl/index.rst.txt new file mode 100644 index 000000000..3ae3e2189 --- /dev/null +++ b/_sources/api-references/dagor-dshl/index.rst.txt @@ -0,0 +1,20 @@ + +Dagor Shading Language (DSHL) docs +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + index/introduction.rst + index/basic-concepts.rst + index/channels.rst + index/shaders.rst + index/materials.rst + index/directives.rst + index/intrinsics.rst + index/global-constants.rst + index/pipeline-states.rst + index/keywords.rst + + diff --git a/_sources/api-references/dagor-dshl/index/basic-concepts.rst.txt b/_sources/api-references/dagor-dshl/index/basic-concepts.rst.txt new file mode 100644 index 000000000..9640d586e --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/basic-concepts.rst.txt @@ -0,0 +1,9 @@ +************** +Basic Concepts +************** + +.. toctree:: + :maxdepth: 4 + :glob: + + basic-concepts/* diff --git a/_sources/api-references/dagor-dshl/index/basic-concepts/conditionals.rst.txt b/_sources/api-references/dagor-dshl/index/basic-concepts/conditionals.rst.txt new file mode 100644 index 000000000..28ce0af7f --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/basic-concepts/conditionals.rst.txt @@ -0,0 +1,117 @@ +.. _conditionals: + +============ +Conditionals +============ + +**Outside HLSL blocks** + +``if``, ``else``, ``else if`` directives are used to perform conditional compilation of different shader variants in DSHL. + +Example: + +.. code-block:: c + + texture tex; + texture fallback; + int test_interval = 0; + interval test_interval:negative<0, less_than_two<2, more_than_two; + + shader test_shader + { + if (tex != NULL) + { + (ps) { tex@smp2d = tex; } + } + else + { + (ps) { tex@smp2d = fallback; } + } + + if (test_interval == positive) + { + (vs) { var@f4 = (0, 0, 0, 0); } + } + else if (test_interval == less_than_two) + { + (vs) { var@f4 = (1, 0, 0, 0); } + } + else + { + (vs) { var@f4 = (1, 0, 1, 0); } + } + } + +For each branch of the conditional statement, there will be created some number of shader variants (determined by combinatorics). +If branch is an exact duplicate of another, no variants will be created. +These variants are to be switched in runtime, based on the values in the conditionals. + +**Inside HLSL blocks** + +It is possible to use similar directives ``##if, ##elif, ##else, ##endif`` inside ``hlsl{...}`` blocks too with a special ``##`` preprocessor tag. +In this case, however, you need to close them with ``##endif`` in the end. Example: + +.. code-block:: c + + hlsl + { + ##if tex != NULL + float somefloat = 1.0; + ##endif + } + +**maybe intrinsic** + +``maybe()`` intrinsic can be used in a bool-expression. +Its argument is any identifier. If this identifier is not a boolean variable, the intrinsic will return false, otherwise the value of this boolean variable. + +.. code-block:: c + + if (wsao_tex != NULL) { + if (shader == ssao) { + bool use_wsao = true; + } + } + + (ps) { + if (maybe(use_wsao)) { + foo@f4 = foo; + } + } + hlsl(ps) { + ##if maybe(use_wsao) + return foo; + ##endif + } + +If you try to remove the ``maybe()`` in this example, it will cause a compilation error, because the ``use_wsao`` is not declared in all variants. + +**Creating multiple shaders with conditionals** + +Conditionals can also be used to define multiple shaders at once (for convenience). +You just declare multiple shaders with the ``shader`` keyword and do a conditional statement on the shader's name: + +.. code-block:: c + + shader one, two, three + { + if (shader == one) + { + float var = 1.0; + } + else if (shader == two) + { + float var = 2.0; + } + else + { + float var = 0.0; + } + } + +This example will result in compilation of 3 different shaders, namely ``one``, ``two`` and ``three``, +which will have different values assigned to ``var``. + +.. note:: + Do not confuse this feature with intervals :ref:`intervals`. + It does not create variants of a single shader, but creates different shaders with different names. diff --git a/_sources/api-references/dagor-dshl/index/basic-concepts/data-types.rst.txt b/_sources/api-references/dagor-dshl/index/basic-concepts/data-types.rst.txt new file mode 100644 index 000000000..1d6e39967 --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/basic-concepts/data-types.rst.txt @@ -0,0 +1,112 @@ +.. _data-types: + +======================== +Data types and variables +======================== + +These are the data types which are native to DSHL (meaning they can be used outside of ``hlsl{...}`` blocks). + +- Scalar types: ``float``, ``int``, ``bool`` +- Vector 4D types: ``float4``, ``int4`` +- Matrix 4x4 types: ``float4x4`` +- Textures: ``texture`` +- Buffers: ``buffer``, ``const_buffer`` +- Raytracing structures: ``tlas`` + +There are also special *convertable* types in DSHL, which are used for processing vertex data input. +Refer to :ref:`channels` for more information. + +.. _global-variables: + +---------------- +Global variables +---------------- + +Global variables in DSHL are most often set from C++ code during runtime. +They are declared with the following syntax: + +.. code-block:: c + + (type) name [ = initializer ] [always_referenced]; + +Example: + +.. code-block:: c + + float4 f4 = (1.0, 1.0, 1.0, 1.0); + int a; + texture tex; + +.. warning:: + Global variables cannot have ``float2`` and ``float3`` types. + Type ``bool`` must have an initializer. + Types ``float4x4, texture, buffer, const_buffer`` do not support initializers. + +``always_referenced`` flag disallows shader compiler to remove any unused in global shader variables. +This is helpful when we want to access the variable on the CPU, for example. + +.. _local-variables: + +--------------- +Local variables +--------------- + +Local variables are declared inside a ``shader{...}`` construction in a similar way: + +.. code-block:: c + + [specifier] (type) name [ = initializer ] [no_warnings]; + +Local variables can have the following *specifiers*. + +- ``local`` -- basically on-stack variables that are not visible outside the shader and are not visible on the CPU side, they are only needed for some temporary calculations in shader blocks :ref:`shader-blocks`. + +- ``static`` -- means that the variable is a material parameter, which is set only once on material instantiation. + +- ``dynamic`` -- similarly to ``static`` defines a material parameter, but it can be changed during runtime. + +.. warning:: + Using ``dynamic`` (as well as global) shader variables is more expensive than ``static``, + because stcode (responsible for setting these variables) is executed each time ``setStates()`` is called for the shader. + +.. note:: + ``no_warnings`` is a modifier for ``static`` variables only. It is used when we need to access shader variables on the CPU, + without using them in shaders (which normally triggers warnings). + +-------------------- +Textures and Buffers +-------------------- + +Textures and buffers are declared as global variables + +.. code-block:: c + + texture some_tex; + buffer some_buf; + const_buffer some_constant_buf; + +and then piped from C++ code to DSHL via the DSHL preshader, e.g. + +.. code-block:: c + + (ps) { + my_tex@smp2d = some_tex; + + my_buf@buf = some_buf hlsl { + #include + // assuming some_buffer_inc.hlsli has SomeBuffer struct defined + StructuredBuffer my_buf@buf; + } + + my_cbuf@cbuf = some_constant_buf hlsl { + cbuffer my_cbuf@cbuf { + #include + // assuming some_constant_buffer_inc.hlsli has SomeConstantBuffer struct defined + SomeConstantBuffer my_constant_buf; + }; + } + + // my_tex, my_buf, my_constant_buf names are now accessible in HLSL + } + +Refer to :ref:`preshader` for more information. diff --git a/_sources/api-references/dagor-dshl/index/basic-concepts/error.rst.txt b/_sources/api-references/dagor-dshl/index/basic-concepts/error.rst.txt new file mode 100644 index 000000000..f9a5d8142 --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/basic-concepts/error.rst.txt @@ -0,0 +1,21 @@ +*************************** +Throwing compilation errors +*************************** + +Using the ``error`` intrinsic, you can cause a compilation error with a message: + +.. code-block:: c + + if (gi_quality == only_ao) { + // .. + } else if (gi_quality == high) { + // .. + } else { + error("Unimplemented gi quality"); + } + +Compiler output: + +.. code-block:: + + [ERROR] ../../../prog/gameLibs/render/shaders/debugGbuffer.dshl(41,9): "Unimplemented gi quality" \ No newline at end of file diff --git a/_sources/api-references/dagor-dshl/index/basic-concepts/hardware.rst.txt b/_sources/api-references/dagor-dshl/index/basic-concepts/hardware.rst.txt new file mode 100644 index 000000000..651f2e85c --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/basic-concepts/hardware.rst.txt @@ -0,0 +1,50 @@ +.. _hardware: + +================ +Hardware defines +================ + +DSHL supports some built-in hardware defines. +You can use them in shaders to toggle hardware specific features, change shader behavior depending on the target platform, etc. + +These defines are accessed via ``hardware.`` syntax. +Here is a list of the available defines: + +- ``metal`` -- Metal API +- ``metaliOS`` -- Metal API for iOS +- ``vulkan`` -- Vulkan API +- ``pc`` -- deprecated, alias for DirectX 11 API +- ``dx11`` -- DirectX 11 API +- ``dx12`` -- DirectX 12 API +- ``xbox`` -- Xbox One platform +- ``scarlett`` -- Scarlett platform (a.k.a Xbox Series X/S) +- ``ps4`` -- PlayStation 4 platform +- ``ps5`` -- PlayStation 5 platform +- ``fsh_4_0`` -- HLSL Shader Model 4.0 version +- ``fsh_5_0`` -- HLSL Shader Model 5.0 version +- ``fsh_6_0`` -- HLSL Shader Model 6.0 version +- ``fsh_6_6`` -- HLSL Shader Model 6.6 version +- ``mesh`` -- if platform supports mesh shaders +- ``bindless`` -- if platform supports bindless textures + +Usage example: + +.. code-block:: c + + shader example_shader + { + if (hardware.metal) { + dont_render; + // this shader will not be compiled for metal platform + } + + hlsl { + int var = 0; + ##if hardware.dx12 + var = 12; + ##elif hardware.dx11 + var = 11; + ##endif + // value of var will be different for dx11 and dx12 platforms + } + } diff --git a/_sources/api-references/dagor-dshl/index/basic-concepts/includes.rst.txt b/_sources/api-references/dagor-dshl/index/basic-concepts/includes.rst.txt new file mode 100644 index 000000000..c3def390a --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/basic-concepts/includes.rst.txt @@ -0,0 +1,14 @@ +.. _includes: + +======== +Includes +======== + +DSHL supports: + +- ``include``, e.g. ``include "some_shader.dshl"`` +- ``include_optional``, e.g. ``include_optional "optional_shader.dshl"`` + +Includes in ``*.dshl`` files are always included one time, +and should not be confused with ``#include`` directive in hlsl files and blocks, +where they follow the regular preprocessor rules (and can be included multiple times). diff --git a/_sources/api-references/dagor-dshl/index/basic-concepts/intervals.rst.txt b/_sources/api-references/dagor-dshl/index/basic-concepts/intervals.rst.txt new file mode 100644 index 000000000..b1327816b --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/basic-concepts/intervals.rst.txt @@ -0,0 +1,123 @@ +.. _intervals: + +========= +Intervals +========= + +Intervals are a way to generate multiple variants of a single ``shader``, based on whether the value of a special variable falls into specific range. +They can be created from an ``int`` or ``float`` shader variable using the ``interval`` keyword. +Consider this example: + +.. code-block:: c + + int var; + interval var:below_zero<0, zero<1, positive_less_than_four<4, four<5, five_or_higher; + // same goes for floats + +This declaration will create 5 permutations of the shader (``below_zero``, ``zero``, ``positive_less_than_four``, ``four`` and ``five_or_higher``), +and the ``var`` interval itself can be accessed in hlsl blocks with special preprocessor tag ``##``. + +.. code-block:: c + + int var; + interval var:below_zero<0, zero<1, positive_less_than_four<4, four<5, five_or_higher; + + shader example_shader { + hlsl { + ##if var == five_or_higher + ... + ##endif + } + } + +It is essential to understand that this construction doesn't mean that ``var`` equals to ``5``, but +it means ``var`` is within the declared interval ``five_or_higher``, so this syntax applies to ``float`` numbers as well. + +.. warning:: + Notice that intervals can be created not only from global variables (as in example above), but also from ``static`` and ``dynamic`` variables (described in :ref:`local-variables`). + + Intervals on ``static`` variables are resolved (appropriate shader variant is selected) only once during material instantiation, so + shader variants dependant on ``static`` variables are not switched during runtime. + + Intervals on ``dynamic`` and global variables, however, are resolved each time the shader is used for rendering (on ``setStates()`` call), because such variables can change during runtime. + This has worse CPU performance impact, compared to ``static`` intervals. + +------------------ +Optional intervals +------------------ + +If the interval is used in HLSL code blocks, you can make this interval ``optional``. +All conditions in HLSL code which use ``optional`` intervals will be replaced with HLSL branches, thus reducing the number of shader variants. + +.. warning:: + Shaders with ``optional`` intervals can be used only for conditionals in HLSL blocks and need to be compiled with ``-optionalAsBranches`` flag + (otherwise ``optional`` intervals will act the same as regular intervals). + This feature should only be used for dev build. + +.. code-block:: c + + int test_optional = 0; + optional interval test_optional : zero < 1, one < 2, two < 3, three; + + shader testMaterial + { + // ... + hlsl + { + float3 color = float3(0, 0, 0); + ##if test_optional == one + color = float3(1, 0, 0); + ##elif test_optional == two || test_optional == three + color = float3(0, 0, 1); + ##if test_optional == two + color *= 0.5; + ##endif + + ##else + color = float3(0, 0, 1); + ##endif + } + } + +------- +Assumes +------- + +Shader variables can be assigned a fixed value when the shader is compiled by *assuming*. Such shader vars may not be changed at runtime, their values will be constant in the binary. +This allows to reduce number of shader variants or disable specific features for specific platforms. + +You can *assume* intervals inside a config .blk file for the shader compiler. +To do this, create an ``assume_vars`` block inside a ``Compile`` block and then specify the assumes you want, following regular .blk syntax: + +.. code-block:: c + + Compile + { + // ... + assume_vars + { + include common_assumes.blk + supports_sh_6_1:i = 0 + static_shadows_custom_fxaa:i=0 + grass_use_quads:i=0 + bloom_tex:i = 1 + } + } + +.. note:: + By assuming a texture, e.g. ``bloom_tex:i = 1``, you declare that this texture is never ``NULL``. + +**Assume statement** + +You can use ``assume interval_name = interval_value;`` statement in DSHL shaders to force an interval to be fixed. +This can be useful to disable unnecessary shader variants when the same interval is shared among different shaders. + +.. code-block:: c + + include "deferred_shadow_common.dshl" + + shader deferred_shadow_classify_tiles + { + assume use_ssss = off; + // ... + } diff --git a/_sources/api-references/dagor-dshl/index/basic-concepts/macros.rst.txt b/_sources/api-references/dagor-dshl/index/basic-concepts/macros.rst.txt new file mode 100644 index 000000000..d8d367a03 --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/basic-concepts/macros.rst.txt @@ -0,0 +1,30 @@ +.. _macros: + +====== +Macros +====== + +Macros are declared as: + +.. code-block:: c + + macro NAME(argument1, argument2, ...) + ... + endmacro + +Within macro, all occurences of ``argument1`` would be replaced with argument passed to the macro invokation, including hlsl blocks within macro. + +There is no way to undefine macro, but you can define it optionally: + +.. code-block:: c + + define_macro_if_not_defined NAME(argument1) + ... + endmacro + +which will only define macro ``NAME`` if it wasn't defined previously. + +We have some naming conventions regarding macros: + +- No hlsl code should be in ``INIT_...`` macros. +- If your macro includes other macros, ``USE_...`` and ``INIT_...`` macros should be separated accordingly. diff --git a/_sources/api-references/dagor-dshl/index/channels.rst.txt b/_sources/api-references/dagor-dshl/index/channels.rst.txt new file mode 100644 index 000000000..2673f9172 --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/channels.rst.txt @@ -0,0 +1,108 @@ +.. _channels: + +======== +Channels +======== + +Channels are used to declare the data that the vertex shader is going to get from the vertex buffer. +Channels must be defined within a ``shader{...}`` block via the following syntax: + +.. code-block:: c + + channel (type) (usage_dst) = (usage_src) [ modifier ]; + +**Data types** + +Data types that follow the ``channel`` keyword differ from those native DSHL types described in :ref:`data-types`. +These types are considered *convertable*, meaning that they are always casted to native HLSL data types when piped to +variables in ``hlsl{...}`` blocks. + +This cast always happens to a 4-component vector of some basic scalar type, even if the source DSHL type is not a 4-component type. +For example, ``float2`` type with ``(x, y)`` components is casted to 4-component float vector via the rule ``(x, y, 0, 1)``. + +The list below describes these *convertable* types as well as their casts to 4D vectors. + +- ``float1`` -- 1D float ``(x, 0, 0, 1)`` +- ``float2`` -- 2D float ``(x, y, 0, 1)`` +- ``float3`` -- 3D float ``(x, y, z, 1)`` +- ``float4`` -- 4D float ``(x, y, z, w)`` +- ``short2`` -- 2D signed short ``(x, y, 0, 1)`` +- ``short4`` -- 4D signed short ``(x, y, z, w)`` +- ``ubyte4`` -- 4D uint8_t ``(x, y, z, w)`` +- ``color8`` -- 4-byte ``(R, G, B, A)`` color in ``[0..1]`` range +- ``half2`` -- 2D 16-bit float ``(x, y, 0, 1)`` +- ``half4`` -- 4D 16-bit float ``(x, y, z, w)`` +- ``short2n`` -- 2D signed short normalized ``(x/32767.0, y/32767.0 , 0, 1)`` +- ``short4n`` -- 4D signed short normalized ``(x/32767.0, y/32767.0 , z/32767.0, w/32767.0)`` +- ``ushort2n`` -- 2D unsigned short normalized ``(x/32767.0, y/32767.0 , 0, 1)`` +- ``ushort4n`` -- 4D unsigned short normalized ``(x/32767.0, y/32767.0 , z/32767.0, w/32767.0)`` +- ``udec3`` -- 3D unsigned 10-bit float ``(x, y, z, 1)`` +- ``dec3n`` -- 3D signed 10-bit float normalized ``(x/511.0, y/511.0, z/511.0, 1)`` + +**Data usages** + +Shader resource builder needs to know which data to extract from the given mesh that will be sent to your shader. +This is why you need to specify channel's *usage*. + +- ``pos`` -- position +- ``norm`` -- normal +- ``vcol`` -- vertex color +- ``tc`` -- texture coordinates +- ``lightmap`` -- lightmap, deprecated (legacy from the times when lightmaps were used) +- ``extra`` -- extra, can be used only as ``usage_src`` (used for providing additional info for vertices) + +Usually, ``usage_src`` and ``usage_dst`` match. But sometimes, e.g. when the ``extra`` channel is used as ``usage_src``, +you must remap it to other intended ``usage_dst``. + +**Data modifiers** + +Data modifiers might be useful in some cases where the data from the channel should be rescaled or multiplied by some constant. + +- ``signed_pack`` -- converts data from ``[0..1]`` range to ``[-1..1]`` range +- ``unsigned_pack`` -- converts data from ``[-1..1]`` range to ``[0..1]`` range +- ``bounding_pack`` -- rescales data from ``[min..max]`` to ``[0..1]`` if ``usage_dst`` is unsigned or ``[-1..1]`` if it is signed +- ``mul_1k`` -- multiplies data by ``1024`` +- ``mul_2k`` -- multiplies data by ``2048`` +- ``mul_4k`` -- multiplies data by ``4096`` +- ``mul_8k`` -- multiplies data by ``8192`` +- ``mul_16k`` -- multiplies data by ``16384`` +- ``mul_32767`` -- multiplies data by ``32767`` and clamps it to ``[-32767..32767]`` range + +Here is a simple usage example: + +.. code-block:: c + + shader some_shader + { + /* + Here we declare channels for the vertex shader, which + will be used by the shader compiler to generate appropriate + vertex shader declaration for this particular shader. + */ + channel float3 pos=pos; // vertex position + channel color8 vcol=vcol; // vertex color + channel float3 tc[0] = tc[0]; // vertex texture coordinate + channel float3 tc[1] = tc[1]; // another vertex texture coordinate + + hlsl(vs) { + /* + This VsInput struct declares vertex information in HLSL-style. + Note that for each DSHL channel declared above, there should be a corresponding + HLSL semantic matching the declared channel. + */ + struct VsInput + { + float4 pos : POSITION; // vertex position + float4 color : COLOR0; // vertex color + float3 texcoord : TEXCOORD0; // vertex texture coordinate + float3 another_texcoord : TEXCOORD1; // another vertex texture coordinate + }; + } + + hlsl(vs) { + VsOutput some_vs(VsInput input) + { + // ... + } + } + } diff --git a/_sources/api-references/dagor-dshl/index/directives.rst.txt b/_sources/api-references/dagor-dshl/index/directives.rst.txt new file mode 100644 index 000000000..8a692116c --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/directives.rst.txt @@ -0,0 +1,72 @@ +.. _directives: + +***************** +Common directives +***************** + +------------ +no_dynstcode +------------ + +``no_dynstcode`` disallows the shader to use any kind of dynamic stcode in its body. +This means that the shader can only access ``material`` variables, or variables defined in a shader block :ref:`shader-blocks`, which is supported by the shader. +Consider the following example: + +.. code-block:: c + + float4 some_global_var; + float4 another_global_var; + + block(scene) common_scene_block + { + (vs) { some_global_var@f4 = some_global_var; } + } + + shader test_shader + { + no_dynstcode; + + texture tex = material.texture.diffuse; + (ps) { diffuse_tex@static = tex; } + // diffuse_tex is now accessible inside hlsl(ps){...} blocks + + supports common_scene_block; + // some_global_var is now accessible inside hlsl(vs){...} blocks + + // will cause compilation error + (vs) { another_global_var@f4 = another_global_var; } + } + +----------- +dont_render +----------- + +``dont_render`` is used to disable shader variants. +Most common use-case is to disable redundant variants of a shader, which is using some shared ``interval``. + +A special value of ``NULL`` will be assigned to the shader variant that has ``dont_render`` and it will not be compiled. +When ``NULL`` dynamic variant is selected during runtime, no rendering or dispatching (in case of compute shaders) happens. +If a ``ShaderElement`` is being created from a ``NULL`` static shader variant, it will just return ``NULL``. + +.. code-block:: c + + include "render_pass_modes.dshl" + + shader decals_shader + { + if (render_pass_mode == render_pass_impostor) + { dont_render; } + + // ... + } + +.. note:: + ``dont_render`` does not directly decrease the number of shader variants. + Although compilation of ``NULL`` shaders does not happen and stcode for them is not created, they are still present in shader variant lookup table. + +--------- +no_ablend +--------- + +``no_ablend`` forcefully disables blending. +Specifying ``blend_src, blend_dst`` or ``blend_asrc, blend_adst`` will have no effect. diff --git a/_sources/api-references/dagor-dshl/index/global-constants.rst.txt b/_sources/api-references/dagor-dshl/index/global-constants.rst.txt new file mode 100644 index 000000000..a8ac1c0d4 --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/global-constants.rst.txt @@ -0,0 +1,46 @@ +.. _global-constants: + +**************** +Global constants +**************** + +DSHL supports some built-in global constants, which you can grab in the preshader :ref:`preshader` and then use in ``hlsl`` blocks. + +List of constants: + +- ``globtm`` -- ``float4x4`` world-view-projection matrix +- ``projtm`` -- ``float4x4`` projection matrix +- ``viewprojtm`` -- ``float4x4`` view-projection matrix +- ``local_view_x, local_view_y, local_view_z, local_view_pos`` -- 1..4 columns of inverse view matrix, in ``float3`` format +- ``world_local_x, world_local_y, world_local_z, world_local_pos`` -- 1..4 columns of world transform matrix, in ``float3`` format + +Usage example: + +.. code-block:: c + + shader example_shader + { + // grabbing global constants via preshader + (vs) + { + viewprojtm@f44 = viewprojtm; + world_local_x@f3 = world_local_x; + world_local_y@f3 = world_local_y; + world_local_z@f3 = world_local_z; + world_local_pos@f3 = world_local_pos; + } + + hlsl(vs) + { + float4 example_vs(float4 pos: POSITION0) + { + // using global constants in hlsl + float3 worldPos = float3(pos.x * world_local_x + pos.y * world_local_y + pos.z * world_local_z + world_local_pos); + return mulPointTm(worldPos, viewprojtm); + } + } + + } + +.. warning:: + Matrix constants ``globtm, projtm, viewprojtm`` are only available for ``(vs)`` preshader. diff --git a/_sources/api-references/dagor-dshl/index/intrinsics.rst.txt b/_sources/api-references/dagor-dshl/index/intrinsics.rst.txt new file mode 100644 index 000000000..73eb111e0 --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/intrinsics.rst.txt @@ -0,0 +1,218 @@ +========== +Intrinsics +========== + +Apart from common HLSL functions, DSHL supports special *intrinsic* functions, +which are handled by the shader compiler. + +.. note:: + These functions are evaluated at runtime by the stcode system (unless they are known at compile time), + so they cannot be used outside the :ref:`preshader` section. + +-------------------------------------------- +float time_phase(float period, float offset) +-------------------------------------------- + +Computes global time phase (number in range ``[0, 1)``) for specified period and offset. + +Returns ``frac((shadersGlobalTime + offset) / period)`` or ``shadersGlobalTime`` in case ``period == 0``, +where ``shadersGlobalTime`` is just the time from the start of the game (in seconds). + +.. code-block:: c + + (ps) { current_time@f1 = time_phase(0, 0); } + +------------------ +float sin(float x) +------------------ + +Computes ``sin`` function. + +.. code-block:: c + + (ps) { foo@f1 = sin(3.14); } + +------------------ +float cos(float x) +------------------ + +Computes ``cos`` function. + +.. code-block:: c + + (ps) { foo@f1 = cos(3.14); } + +--------------------------- +float pow(float x, float y) +--------------------------- + +Raises ``x`` to the power of ``y``. + +.. code-block:: c + + (ps) { foo@f1 = pow(1.2, 3.4); } + +-------------------------------- +float4 vecpow(float4 v, float a) +-------------------------------- + +Raises each component of vector ``v`` to the power of ``a``. + +.. code-block:: c + + local float4 v = (1, 2, 3, 4); + local float a = 3.33; + (ps) { foo@f1 = vecpow(v, a); } + +------------------- +float sqrt(float x) +------------------- + +Computes the square root of ``x``. + +.. code-block:: c + + (ps) { foo@f1 = sqrt(1.3); } + +--------------------------- +float min(float x, float y) +--------------------------- + +Finds the minimum of two values. + +.. code-block:: c + + (ps) { foo@f1 = min(-1, 1); } + +--------------------------- +float max(float x, float y) +--------------------------- + +Finds the maximum of two values. + +.. code-block:: c + + (ps) { foo@f1 = max(-1, 1); } + +------------------------------------- +float fsel(float a, float b, float c) +------------------------------------- + +Returns ``(a >= 0.0f) ? b : c`` + +.. code-block:: c + + (ps) { foo@f1 = fsel(1, 2, 3); } + +------------------------- +float4 sRGBread(float4 v) +------------------------- + +Raises RGB components of ``v`` to the power of ``2.2``. + +Returns ``float4(pow(v.r, 2.2f), pow(v.g, 2.2f), pow(v.b, 2.2f), v.a)`` + +.. code-block:: c + + (ps) { srgb_color@f3 = sRGBread(some_color); } + // alpha will be discarded when casting to float3 + +----------------------------------------- +float4 get_dimensions(texture t, int mip) +----------------------------------------- + +Fetches texture ``t`` information on mip level ``mip``. + +Returns ``float4(width, height, depth_or_array_slices, mip_levels)``. + +``depth_or_array_slices`` stores depth for volumetric textures or number of array slices for texture arrays. + +For cube textures, ``depth_or_array_slices = 1``. + + +.. code-block:: c + + texture ssao_tex; + (ps) { ssao_size@f4 = get_dimensions(ssao_tex, 0); } + +------------------------ +float get_size(buffer b) +------------------------ + +Fetches the size of buffer ``b`` in elements. + +Returns ``float(buffer_size_in_elements)``. + +.. code-block:: c + + buffer some_buf; + (ps) { buf_size@f1 = get_size(some_buf); } + +.. warning:: + ``get_size`` of ``(RW)ByteAddressBuffer`` will return the number of DWORDs (4 byte chunks) in a buffer. + This is contrary to ``(RW)ByteAddressBuffer::GetDimensions`` pure HLSL function, which returns the number of bytes. + +--------------------- +float4 get_viewport() +--------------------- + +Fetches viewport information. + +Returns ``float4(top_left_x, top_left_y, width, height)``. + +.. code-block:: c + + (ps) { viewport@f4 = get_viewport(); } + +------------------------- +int exists_tex(texture t) +------------------------- + +At runtime, checks if the texture ``t`` exists (is bound to the shader from C++ side). +You can think of it as a run time equivalent of ``t != NULL`` preshader check. +Return value can be saved to a variable and used for uniform HLSL branching. + +Usage: + +.. code-block:: c + + texture example_texture; + + (ps) { + example_texture@tex2d = example_texture; + example_texture_exists@i1 = exists_tex(example_texture); + } + + hlsl(ps) { + if (example_texture_exists) { /* ... */ } + } + +Returns ``1`` if texture exists, ``0`` otherwise. + +------------------------ +int exists_buf(buffer b) +------------------------ + +Similar to ``exists_tex``. +At runtime, checks if the buffer ``b`` exists (is bound to the shader from C++ side). +You can think of it as a run time equivalent of ``b != NULL`` preshader check. +Return value can be saved to a variable and used for uniform HLSL branching. + +Usage: + +.. code-block:: c + + buffer example_buffer; + + (ps) { + example_buffer@buf = example_buffer hlsl { + StructuredBuffer example_buffer@buf; + }; + example_buffer_exists@i1 = exists_buf(example_buffer); + } + + hlsl(ps) { + if (example_buffer_exists) { /* ... */ } + } + +Returns ``1`` if buffer exists, ``0`` otherwise. diff --git a/_sources/api-references/dagor-dshl/index/introduction.rst.txt b/_sources/api-references/dagor-dshl/index/introduction.rst.txt new file mode 100644 index 000000000..4ffc3cfed --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/introduction.rst.txt @@ -0,0 +1,6 @@ +************ +Introduction +************ + +Dagor Shading Language (``.dshl``) files are used to create data driven pre-shaders for easy C++ to HLSL data piping and permutations (pins). +The actual front end of shaders themselves is HLSL, and 'pure' HLSL functions can be found in ``.hlsl`` files or within ``hlsl { }`` blocks in ``.dshl`` files. diff --git a/_sources/api-references/dagor-dshl/index/keywords.rst.txt b/_sources/api-references/dagor-dshl/index/keywords.rst.txt new file mode 100644 index 000000000..e1688f8d9 --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/keywords.rst.txt @@ -0,0 +1,251 @@ +******** +Keywords +******** + +This page categorizes all keywords there are in DSHL and provides references to their description. + +---------- +Data types +---------- + +:ref:`data-types` + +- float +- float1 +- int +- bool + +- float2 +- half2 +- short2 + +- float3 + +- int4 +- float4 +- short4 +- half4 + +- float4x4 + +- texture +- buffer +- const_buffer + +-------- +Channels +-------- + +:ref:`channels` + +- color8 + +- ubyte4 +- short2n +- short4n +- ushort2n +- ushort4n +- udec3 +- dec3n + +- extra +- vcol +- pos +- norm +- tc +- lightmap + +- bounding_pack +- signed_pack +- unsigned_pack + +- mul_1k +- mul_2k +- mul_4k +- mul_8k +- mul_16k +- mul_32767 + +------------------------- +Conditionals and booleans +------------------------- + +:ref:`conditionals` + +- if +- else +- false +- true +- none +- NULL +- maybe + +-------------------- +Data types modifiers +-------------------- + +:ref:`data-types` + +- always_referenced +- no_warnings +- channel +- dynamic +- static +- const +- local +- global + +--------- +Materials +--------- + +:ref:`materials` + +- material +- texture +- diffuse +- emissive +- specular + +- two_sided +- real_two_sided + +- render_stage +- render_trans + +-------- +Hardware +-------- + +:ref:`hardware` + +- hardware +- vulkan +- metal +- metaliOS +- pc +- dx11 +- dx12 +- xbox +- scarlett +- ps4 +- ps5 +- fsh_4_0 +- fsh_5_0 +- fsh_6_0 +- fsh_6_6 +- bindless + +------ +Macros +------ + +:ref:`macros` + +- define_macro_if_not_defined +- macro +- endmacro + +--------- +Intervals +--------- + +:ref:`intervals` + +- interval +- assume +- optional + +-------- +Includes +-------- + +:ref:`includes` + +- include +- include_optional + +----------------- +Common directives +----------------- + +:ref:`directives` + +- no_dynstcode +- dont_render +- no_ablend +- error + +------------- +Shader blocks +------------- + +:ref:`shader-blocks` + +- block +- supports +- register + +------- +Shaders +------- + +:ref:`shaders` + +- shader +- compile + +-------------------------- +Graphics pipeline settings +-------------------------- + +:ref:`pipeline-states` + +- z_write +- z_test +- z_bias +- z_func +- slope_z_bias + +- stencil +- stencil_func +- stencil_ref +- stencil_pass +- stencil_fail +- stencil_zfail + +- blend_asrc +- blend_adst +- blend_src +- blend_dst + +- cull_mode +- alpha_to_coverage +- color_write +- view_instances + +---------------- +Global constants +---------------- + +:ref:`global-constants` + +- globtm +- projtm +- viewprojtm + +- local_view_x +- local_view_y +- local_view_z +- local_view_pos + +- world_local_x +- world_local_y +- world_local_z +- world_local_pos + +------------------- +Still uncategorized +------------------- + +- immediate_dword_count \ No newline at end of file diff --git a/_sources/api-references/dagor-dshl/index/materials.rst.txt b/_sources/api-references/dagor-dshl/index/materials.rst.txt new file mode 100644 index 000000000..ececf8b6a --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/materials.rst.txt @@ -0,0 +1,143 @@ +.. _materials: + +********* +Materials +********* + +Material is a combination of a shader and resources (diffuse, normals, other parameters). + +Often multiple assets share the same shader, but need to have different textures and properties. +In this case, each asset will have its own material *instance* with its specific resources. + +DSHL has a way to access these textures in shaders in a general, non asset-specific way. + +-------- +Textures +-------- + +Textures can be referenced by using ``material`` keyword. + +You, as a shader creator, specify how many ``material.texture[..]`` slots a shader must have just by referencing these slots in code. +Then, after shader compilation, referenced texture slots will appear in the shader bindump. +For instance, if you choose your shader in Asset Viewer material editor, these slots will be visible and you will be able to assign them the intended textures. + +Usage example: + +.. code-block:: c + + shader materials_example + { + texture diffuse = material.texture.diffuse; + texture normal = material.texture[1]; + // that's it, material texture channels are now defined + // and can be seen in asset viewer + + (ps) + { + diffuse_tex@static = diffuse; + normal_tex@static = normal; + } + // now these textures are accessible in hlsl{} blocks + } + +.. note:: + ``material.texture.diffuse`` is equivalent to ``material.texture[0]`` + +.. _material-parameters: + +---------- +Parameters +---------- + +In addition to textures, materials can also contain arbitrary parameters. +You declare these parameters as local variables in a shader using ``static`` or ``dynamic`` keyword, check :ref:`local-variables` to know the difference. +It is good practice to initialize them with some meaningful default value. + +Similar to textures, these parameters will be saved to the shader bindump and will be available for editing in Asset Viewer once you recompile the shader. + +.. code-block:: c + + static float some_parameter = 1.5; + dynamic float4 another_parameter = (1, 2, 3, 4); + + (ps) + { + some_parameter@f1 = some_parameter; + another_parameter@f4 = another_parameter; + } + +.. warning:: + Do not use ``dynamic`` parameters without the need as it introduces more overhead. See :ref:`local-variables` for more info. + +------------------- +Two sided rendering +------------------- + +There are two special material parameters available in DSHL: ``two_sided`` and ``real_two_sided``, which are +present in **every** material by default and can be set in Asset Viewer. + +These parameters act as booleans in DSHL: +you can do conditional statements :ref:`conditionals` on them (which will result in creation of shader variants). + +.. code-block:: c + + if (two_sided) + { + cull_mode = none; + } + +``two_sided`` is a hint that each triangle of this material should be rendered from both sides, +so culling should be disabled for this shader (which is done in the example). + +``real_two_sided`` is a hint that a special mesh will be used for rendering with this shader: +each triangle will be duplicated and flipped, so both sides of the mesh get to be rendered. +Note that it is not necessary to disable culling in this case as we have a *real* two-sided mesh (hence the name). + +---------------------- +render_stage directive +---------------------- + +Render stage can be specified for a shader using ``render_stage ``. + +.. code-block:: c + + shader materials_example + { + render_stage opaque; + // ... + } + +It is used to distinguish between different materials in the ``ShaderMesh`` class +(which can contain many materials and meshes), based on the render stage. + +For example, you can call ``ShaderMesh::getElems(STG_opaque)`` to get all materials from a ``ShaderMesh``, which have ``render_stage opaque`` specified in their DSHL shaders. +This can be useful if you want your materials to be drawn in a specific order. + +Available stages: + +- ``opaque`` -- opaque +- ``atest`` -- alpha test +- ``imm_decal`` -- immediate decals +- ``decal`` -- decals +- ``trans`` -- transparent +- ``distortion`` -- distortion + +There is also a ``render_trans`` legacy alias for ``render_stage trans``. + +**Color write mask** + +It is possible to use ``static int`` material parameter for a color mask :ref:`color-write-mask`. +Notice that you are specifiyng the mask for **all** render targets at once. + +.. code-block:: c + + static int writemask = 1904; // = (0b0111 << 4) | (0b0111 << 8) + // where 0b0111 is a bitmask for RGB + color_write = static writemask; + + // writemask of 1904 is equivalent to + // color_write[0] = rgb; + // color_write[1] = rgb; + +This example sets the color write mask of render targets 1 and 2 to ``rgb`` (if you are using the default value of ``writemask`` material parameter). +Other render targets will have a mask of ``0b0000``, meaning nothing will be drawn to them. diff --git a/_sources/api-references/dagor-dshl/index/pipeline-states.rst.txt b/_sources/api-references/dagor-dshl/index/pipeline-states.rst.txt new file mode 100644 index 000000000..90e3dcabf --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/pipeline-states.rst.txt @@ -0,0 +1,253 @@ +.. _pipeline-states: + +============================ +Pipeline state configuration +============================ + +DSHL has some state variables that are used for configuring fixed pipeline stages (blending, depth/stencil testing, etc.). +You can optionally define them inside a shader. + +-------- +Blending +-------- + +Blending settings can be configured in DSHL shader using the following syntax: + +.. code-block:: c + + blend_target = blend_factor; + +where ``blend_target`` is one of these state variables + +- ``blend_src`` -- blend source +- ``blend_dst`` -- blend destination +- ``blend_asrc`` -- blend alpha source +- ``blend_adst`` -- blend alpha destination + +and ``blend_factor`` is one of these keywords: + ++-------------------+---------------------------+----------------------------------+--------------------+ +| Keyword | Description | RGB Blend Factor | Alpha Blend Factor | ++===================+===========================+==================================+====================+ +| ``zero`` or ``0`` | Zero | (0, 0, 0) | 0 | ++-------------------+---------------------------+----------------------------------+--------------------+ +| ``one`` or ``1`` | One | (1, 1, 1) | 1 | ++-------------------+---------------------------+----------------------------------+--------------------+ +| ``sc`` | Source Color | (R_s, G_s, B_s) | A_s | ++-------------------+---------------------------+----------------------------------+--------------------+ +| ``isc`` | Inverse Source Color | (1 - R_s, 1 - G_s, 1 - B_s) | 1 - A_s | ++-------------------+---------------------------+----------------------------------+--------------------+ +| ``sa`` | Source Alpha | (A_s, A_s, A_s) | A_s | ++-------------------+---------------------------+----------------------------------+--------------------+ +| ``isa`` | Inverse Source Alpha | (1 - A_s, 1 - A_s, 1 - A_s) | 1 - A_s | ++-------------------+---------------------------+----------------------------------+--------------------+ +| ``dc`` | Destination Color | (R_d, G_d, B_d) | A_d | ++-------------------+---------------------------+----------------------------------+--------------------+ +| ``idc`` | Inverse Destination Color | (1 - R_d, 1 - G_d, 1 - B_d) | 1 - A_d | ++-------------------+---------------------------+----------------------------------+--------------------+ +| ``da`` | Destination Alpha | (A_d, A_d, A_d) | A_d | ++-------------------+---------------------------+----------------------------------+--------------------+ +| ``ida`` | Inverse Destination Alpha | (1 - A_d, 1 - A_d, 1 - A_d) | 1 - A_d | ++-------------------+---------------------------+----------------------------------+--------------------+ +| ``sasat`` | Source Alpha Saturation | (f, f, f); f = min(A_s, 1 - A_d) | 1 | ++-------------------+---------------------------+----------------------------------+--------------------+ +| ``bf`` | Blend Constant | (R_c, G_c, B_c) | A_c | ++-------------------+---------------------------+----------------------------------+--------------------+ +| ``ibf`` | Inverse Blend Constant | (1 - R_c, 1 - G_c, 1 - B_c) | 1 - A_c | ++-------------------+---------------------------+----------------------------------+--------------------+ + +where + +- ``(R_s, G_s, B_s)`` and ``A_s`` represent R, G, B, A components of the source (new value which shader just produced) +- ``(R_d, G_d, B_d)`` and ``A_d`` represent R, G, B, A components of the destination (old value in the current render target) +- ``(R_c, G_c, B_c)`` and ``A_c`` represent configurable blend constants + +Blending is performed using the following pseudocode: + +.. code-block:: c + + if (blendEnable) { + finalColor.rgb = (srcColorBlendFactor * srcColor.rgb) (dstColorBlendFactor * dstColor.rgb); + finalColor.a = (srcAlphaBlendFactor * srcColor.a) (dstAlphaBlendFactor * dstCoilor.a); + } else { + finalColor = srcColor; + } + + finalColor = finalColor & colorWriteMask; + +Example: + +.. code-block:: c + + blend_src = sa; blend_dst = 1; + blend_asrc = sa; blend_adst = 1; + +.. warning:: + Blending *operations* (as well as blending constants for ``bf`` and ``ibf`` blending modes) need to be configured in C++ code. + +If you don't configure blending factors in the shader, these defaults will be used: + +.. code-block:: c + + blend_src = 1; blend_dst = 0; + blend_asrc = 1; blend_adst = 0; + +**Independent blending** + +Dagor supports independent blending, i.e. different render targets may have different blending settings. +This is done by providing an index to ``blend_src, blend_dst, blend_asrc, blend_adst`` variables with ``[]`` operator. + +.. code-block:: c + + blend_src[0] = 1; blend_dst[0] = 0; + blend_src[1] = 0; blend_dst[1] = 1; + +Without an index, the desired blend factor affects all render targets. + +------------- +Depth/Stencil +------------- + +Depth and stencil tests can also be configured in DSHL using similar syntax. + +**Depth state variables** + +``z_write`` -- enables/disables writing to depth buffer. Valid values: ``true`` / ``false``. Default value: ``true``. + +``z_test`` -- enables/disables depth testing. Valid values: ``true`` / ``false``. Default value: ``true``. + +``z_func`` -- specifies comparison function for depth testing. Valid values: + +- ``equal`` evaluates to :math:`\text{reference} = \text{test}` +- ``notequal`` evaluates to :math:`\text{reference} \neq \text{test}` +- ``always`` always evaluates to ``true`` + +Default value is ``GREATER_OR_EQUAL`` (evaluates to :math:`\text{reference} \geq \text{test}`). +Note that this value cannot be set explicitly, as it is the default behavior, +because Dagor follows the convention that **closer** objects have **more** depth value. + +Example: + +.. code-block:: c + + z_write = false; + z_test = true; + z_func = always; + +**Stencil state variables** + +``stencil`` -- enables/disables stencil test. Valid values: ``true`` / ``false``. Default value: ``false``. + +``stencil_func`` -- specifies comparison function for stencil testing. Valid values: + +- ``never`` always evaluates to ``false`` +- ``less`` evaluates to :math:`\text{reference} < \text{test}` +- ``equal`` evaluates to :math:`\text{reference} = \text{test}` +- ``lessequal`` evaluates to :math:`\text{reference} \leq \text{test}` +- ``greater`` evaluates to :math:`\text{reference} > \text{test}` +- ``notequal`` evaluates to :math:`\text{reference} \neq \text{test}` +- ``greaterequal`` evaluates to :math:`\text{reference} \geq \text{test}` +- ``always`` always evaluates to ``true`` + +``stencil_ref`` -- specifies reference value for the stencil test. Valid values: ``int``, clamped to ``[0, 255]`` range. + +``stencil_pass`` -- specifies the action performed on samples that pass both stencil and depth tests. + +``stencil_fail`` -- specifies the action performed on samples that fail the stencil test. + +``stencil_zfail`` -- specifies the action performed on samples that pass the stencil test and fail the depth test. + +Valid actions: + +- ``keep`` -- keeps the current value. +- ``zero`` -- sets the value to ``0``. +- ``replace`` -- sets the value to reference ``stencil_ref`` value +- ``incrsat`` -- increments the current value and clamps to ``[0, 255]`` +- ``decrsat`` -- decrements the current value and clamps to ``[0, 255]`` +- ``incr`` -- increments the current value and wraps to ``0`` when the maximum value would have been exceeded. +- ``decr`` -- decrements the current value and wraps to ``255`` the maximum possible value when the value would go below ``0``. + +Example: + +.. code-block:: c + + stencil = true; + stencil_func = always; + stencil_pass = replace; + stencil_ref = 255; + stencil_zfail = keep; + stencil_fail = keep; + +------- +Culling +------- + +``cull_mode`` specifies culling mode. + +- ``ccw`` -- counterclockwise. +- ``cw`` -- clockwise. +- ``none`` -- no culling is done. + +Default value is ``ccw``. + +Example: + +.. code-block:: c + + cull_mode = cw; + +----------------- +Alpha to coverage +----------------- + +Alpha to coverage (A2C) maps the alpha output value from a pixel shader +to the coverage mask of MSAA. +This feature might be helpful for smoothing out the edges of alpha-tested texture (e.g. vegetation). + +For example, with 4x MSAA and A2C enabled, if the output alpha of a pixel is 0.5, +only 2 of the 4 coverage samples will store the color. + +Can be toggled by setting ``alpha_to_coverage`` to ``true`` / ``false``. + +--------------- +View instancing +--------------- + +View instancing feature allows a shader to be run multiple times in a single draw call to draw different view instances. +The ``SV_ViewID`` semantic is provided to the shader which defines the index of the view instance. +This feature is supported only on DX12 and enforces Shader Model 6.1 compilation. + +Maximum number of view instances is defined by ``MAX_VIEW_INSTANCES = 4``. +For example, using view instancing, you can capture a cube shadow map for a point light in 2 render passes with 3 view instances per pass. + +Valid syntax is ``view_instances = 1..4``. + +``view_instances = 1`` means one instance (which is the default case). + +.. _color-write-mask: + +---------------- +Color write mask +---------------- + +Color write mask can be configured with ``color_write`` state variable. +You can set the mask via RGBA swizzle or by an ``int`` number (in ``[0, 15]`` range). +So ``r = 0b0001``, ``g = 0b0010``, ``b = 0b0100``, ``a = 0b1000``. + +For example, + +.. code-block:: c + + color_write = rg; + // color_write = 3 is the same + // 3 = 0b0011 = rg + +Color mask supports multiple render targets, i.e. for each render target the mask can be different. +You can use ``[]`` operator to specify the mask for the specific render target. + +.. code-block:: c + + color_write = true; // sets RGBA for all RT + color_write[1] = rg; // sets RG for RT[1] + +By default, color mask is RGBA for all render targets. diff --git a/_sources/api-references/dagor-dshl/index/shaders.rst.txt b/_sources/api-references/dagor-dshl/index/shaders.rst.txt new file mode 100644 index 000000000..9d2d79a91 --- /dev/null +++ b/_sources/api-references/dagor-dshl/index/shaders.rst.txt @@ -0,0 +1,504 @@ +.. _shaders: + +******* +Shaders +******* + +Dagor Shading Language acts as a preprocessor/compiler for pure HLSL shaders. In DSHL, we can bind resources +for HLSL shaders, configure fixed shader stages (culling, Z test, ...) and more. +Pure HLSL code needs to be contained within ``hlsl{...}`` blocks. + +============================== +Defining and compiling shaders +============================== + +Let's look at a simple DSHL shader example: + +.. code-block:: c + + shader simple_shader + { + // this is the description of vertex buffer expected for the vertex shader + channel float3 pos=pos; // position + channel float3 vcol=vcol; // vertex color + + hlsl { + struct VsInput + { + float3 pos: POSITION0; + float3 color: COLOR0; + }; + + struct VsOutput + { + float4 pos : SV_POSITION; + float3 color : COLOR0; + }; + + VsOutput test_vertex(VsInput input) + { + VsOutput ret; + ret.pos = float4(input.pos, 1.0); + ret.color = input.color; + + return ret; + } + + float4 test_pixel(VsOutput input) : SV_Target0 + { + return float4(input.color.rgb, 1.0); + } + } + compile("target_vs", "test_vertex"); + compile("target_ps", "test_pixel"); + } + +Here, ``shader (name)`` defines the actual name that the shader will have after its compilation into pure HLSL. + +Channels ``pos`` and ``vcol`` describe the vertex buffer data that the vertex shaders expects to recieve. +DSHL preshader creates appropriate layout for the C++ code based on these ``channel`` variables. See :ref:`channels` for more info. + +After defining the shader in the ``hlsl`` block, you need to specify its entry point via ``compile("target_(stage)", "entry_function")``, where the +``entry_function`` should be the name of the respective shader function in the ``hlsl`` block and ``stage`` defines one of the following shader stages: + +- ``target_vs`` (vertex shader) +- ``target_hs`` (hull shader) +- ``target_ds`` (domain shader) +- ``target_gs`` (geometry shader) +- ``target_ps`` (pixel shader) +- ``target_cs`` (compute shader) +- ``target_ms`` (mesh shader) +- ``target_as`` (amplification shader) +- ``target_vs_for_gs`` (if vertex shader is used together with geometry shader on PS4/PS5, vertex shader must be compiled differently) +- ``target_vs_for_tess`` (if vertex shader is used together with tesselation shader on PS4/PS5, vertex shader must be compiled differently) +- ``target_vs_half`` (vertex shader with half type) +- ``target_ps_half`` (pixel shader with half type) + +You can also specify to which specific shader stage will the code from ``hlsl`` block go by specifying the shader stage in the parentheses, e.g. ``hlsl(stage) {...}`` +Available shaders are: ``ps``, ``vs``, ``cs``, ``ds``, ``hs``, ``gs``, ``ms``, ``as``. If you omit the specification, the code from ``hlsl{...}`` block will be +sent to all of these shaders. + +.. _preshader: + +========= +Preshader +========= + +In addition to declaring just the shader code itself, DSHL allows you to declare a pre-shader, +which is a script that allows you to easily pipe data from C++ to the shader. + +The most common use case for this piping are various bindings of textures and buffers: +instead of doing the classical dance of "pick the slot, set the texture to the slot, remember not to mess up and use the same slot twice", +you can bind variables to a shader through a global ``string`` to ``DSHL data type`` map called *shader variables*. +This map is in a 1-to-1 correspondence with the global DSHL variables you define in .dshl files :ref:`global-variables`, and is RW. + +So you can, for example, both read an ``int`` defined inside a shader from C++, and set a texture to a global ``texture`` variable defined inside a shader. +On the C++ side, you simply fill in this map using ``set_texture``, and on the shader side, you ask the preshader system to grab a certain shader +variable and set it to an HLSL variable. The syntax is as follows: + +.. code-block:: c + + (shader_stage) { + hlsl_variable_name @type_suffix = variable|expression [hlsl {/*hlsl text*/}] + } + +This code is then compiled by our shader compiler into a sequence of simple interpreted commands, +which are stored in the shader dump and executed before running a shader. + +Acceptable shader stages: + +- ``cs`` -- Compute Shader +- ``ps`` -- Pixel Shader +- ``vs`` -- Vertex Shader +- ``ms`` -- Mesh Shader + +Acceptable types: + ++-----------------+--------------------------------------------+ +| Postfix | Type | ++=================+============================================+ +| @f1 | float | ++-----------------+--------------------------------------------+ +| @f2 | float2 | ++-----------------+--------------------------------------------+ +| @f3 | float3 | ++-----------------+--------------------------------------------+ +| @f4 | float4 | ++-----------------+--------------------------------------------+ +| @f44 | float4x4 | ++-----------------+--------------------------------------------+ +| @i1 | int | ++-----------------+--------------------------------------------+ +| @i2 | int2 | ++-----------------+--------------------------------------------+ +| @i3 | int3 | ++-----------------+--------------------------------------------+ +| @i4 | int4 | ++-----------------+--------------------------------------------+ +| @u1 | uint | ++-----------------+--------------------------------------------+ +| @u2 | uint2 | ++-----------------+--------------------------------------------+ +| @u3 | uint3 | ++-----------------+--------------------------------------------+ +| @u4 | uint4 | ++-----------------+--------------------------------------------+ +| @tex | Texture | ++-----------------+--------------------------------------------+ +| @tex2d | Texture2D | ++-----------------+--------------------------------------------+ +| @tex3d | Texture3D | ++-----------------+--------------------------------------------+ +| @texArray | Texture2DArray | ++-----------------+--------------------------------------------+ +| @texCube | TextureCube | ++-----------------+--------------------------------------------+ +| @texCubeArray | TextureCubeArray | ++-----------------+--------------------------------------------+ +| @uav | Unordered Access View flag | ++-----------------+--------------------------------------------+ +| @smp | Texture with SamplerState | ++-----------------+--------------------------------------------+ +| @smp2d | Texture2D with SamplerState | ++-----------------+--------------------------------------------+ +| @smp3d | Texture3D with SamplerState | ++-----------------+--------------------------------------------+ +| @smpArray | Texture2DArray with SamplerState | ++-----------------+--------------------------------------------+ +| @smpCube | TextureCube with SamplerState | ++-----------------+--------------------------------------------+ +| @smpCubeArray | TextureCubeArray with SamplerState | ++-----------------+--------------------------------------------+ +| @shd | Texture2D with SamplerComparisonState | ++-----------------+--------------------------------------------+ +| @shdArray | Texture2DArray with SamplerComparisonState | ++-----------------+--------------------------------------------+ +| @buf | Buffer/StructuredBuffer | ++-----------------+--------------------------------------------+ +| @cbuf | ConstantBuffer | ++-----------------+--------------------------------------------+ +| @static | Material Texture2D with SamplerState | ++-----------------+--------------------------------------------+ +| @staticCube | Material TextureCube with SamplerState | ++-----------------+--------------------------------------------+ +| @staticTexArray | Material Texture2DArray with SamplerState | ++-----------------+--------------------------------------------+ +| @tlas | Top-level acceleration structure (RT) | ++-----------------+--------------------------------------------+ + +.. note:: + All variables declared in ``(vs)`` stage are also visible for ``hlsl(){...}`` blocks. + All variables declared in ``(ms)`` stage are also visible for ``hlsl(as){...}`` block. + +-------- +Examples +-------- + +Let's create ``float4x4`` matrix: + +.. code-block:: c + + (ps) { globtm_psf@f44 = { globtm_psf_0, globtm_psf_1, globtm_psf_2, globtm_psf_3 }; } + +Here, the HLSL variable of ``globtm_psf`` will be initialized by the preshader with the values of ``globtm_psf_0..3``, +which are all ``float4`` types, stored inside the global shader variable map. +It is the C++ code's responsibility to call + +.. code-block:: c + + set_color4(get_shader_variable_id("get_globtm_psf_X"), Point4(...)); + +for ``X=0..3`` to fill the rows with adequate values. Yes, the ``color4`` name is very unfortunate. + +For ``(vs)`` block there is a built-in ``globtm`` *shader variable* available. You can declare HLSL ``globtm`` directly from it: + +.. code-block:: c + + (ps) { globtm@f44 = globtm; } + +You can also operate on arrays + +.. code-block:: c + + (ps) { my_arr@type[] = {element1, element2, ..., elementN}; } + +--------------------- +Textures and samplers +--------------------- + +Default ``float4`` HLSL textures are defined via ``@tex2d, @tex3d, @texArray, @texCube, @texCubeArray`` postfixes. +For example, this code + +.. code-block:: c + + (ps) { + hlsl_texture@tex2d = some_texture; + hlsl_texarray@texArray = some_texarray; + } + +will be compiled to + +.. code-block:: c + + Texture2D hlsl_texture: register(t16); + Texture2D hlsl_texarray: register(t17); + // registers are automatically chosen by the compiler + +Postfixes ``@smp2d, @smp3d, @smpArray, @smpCube, @smpCubeArray`` ensure that a ``SamplerState`` object gets defined with texture/textures, +assigned to the same register number. + +For ``@shd, @shdArray`` postfixes, a ``SamplerComparisonState`` object also gets defined in addition to ``SamplerState`` +(``shd`` stands for shadow, as these textures are often used for shadows). + +For example, this code + +.. code-block:: c + + (ps) { + hlsl_texture@smp2d = some_texture; + hlsl_texarray@smpArray = some_texarray; + hlsl_shdtexture@shd = some_shdtexture; + } + +will be compiled to + +.. code-block:: c + + SamplerState hlsl_texture_samplerstate: register(s0); + SamplerState hlsl_texarray_samplerstate: register(s1); + SamplerState hlsl_shdtexture_samplerstate: register(s2); + + SamplerComparisonState hlsl_shdtexture_cmpSampler:register(s2); + + Texture2D hlsl_texture: register(t0); + Texture2DArray hlsl_texarray: register(t1); + Texture2D hlsl_shdtexture: register(t2); + +Note that you can use ``_samplerstate`` or ``_cmpSampler``, generated by the shader compiler, in ``hlsl{...}`` blocks +(e.g. ``hlsl_shdtexture_cmpSampler`` from the example). + +Postfixes ``@tex`` and ``@smp`` define a texture of a specific type and must be followed by ``hlsl{...}`` block +(which defines the texture type). + +.. code-block:: c + + (ps) { + // textures without samplers + uint_texture@tex = uint_texture hlsl { Texture2D uint_texture@tex; } + float_texarray@tex = float_texarray hlsl { Texture2DArray float_texarray@tex; } + + // textures with samplers + uint_texture@smp = uint_texture hlsl { Texture2D uint_texture@smp; } + float_texarray@smp = float_texarray hlsl { Texture2DArray float_texarray@smp; } + } + +----------------- +Material textures +----------------- + +Textures bound to a material (diffuse, normals, etc.) are called *material textures*. +In preshader, these textures must be treated differently than global or dynamic textures, +using ``@static, @staticCube, @staticTexArray`` postfixes. + +.. code-block:: c + + shader example_shader + { + texture diffuse_tex = material.texture.diffuse; + texture normal_tex = material.texture[1]; + texture cube_tex = material.texture[2]; + texture some_texarray = material.texture[3]; + + (ps) { + diffuse_tex@static = diffuse_tex; + normal_tex@static = normal_tex; + cube_tex@staticCube = cube_tex; + some_texarray@staticTexArray = some_texarray; + } + } + +Material textures are automatically used as bindless textures if you are compiling for DX12; +bindless is also supported for Vulkan and PlayStation (with special ``-enableBindless:on`` compiler flag). + +Inside HLSL blocks, material textures should be referenced by their getters ``get_()``, +instead of their names: + +.. code-block:: c + + hlsl(ps) { + float4 albedo = tex2DBindless(get_diffuse_tex(), input.diffuseTexCoord.uv); + } + +.. note:: + Even if bindless textures feature is disabled, the aformentioned syntax still applies. + +In case when bindless textures are used, ``MaterialProperties`` constant buffer will be filled with ``uint2`` +indices of such textures (first component indexes the texture, second component indexes the sampler). + +These indices are then used to retrieve the corresponding texture and sampler from ``static_textures[]`` and ``static_samplers[]`` arrays. + +This is what ``get_()`` essentialy does for you. + +------- +Buffers +------- + +``Buffer`` and ``ConstantBuffer`` declarations must be followed with ``hlsl{...}`` block. For example + +.. code-block:: c + + (ps) { + some@buf = my_buffer hlsl { + #include + StructuredBuffer some@buf; + } + } + + (ps) { + my_buf@cbuf = my_const_buffer hlsl { + #include + cbuffer my_buf@cbuf + { + MyStruct data; + }; + } + } + +------------------- +Hardcoded registers +------------------- + +You can bind any resource to a hardcoded register, while all auto resources will not overlap with it. +Also, the ``always_referenced`` keyword is not required, the integer variable will be saved in the dump and will be readable on the CPU side. + +.. code-block:: c + + int reg_no = 3; + + shader sh { + (ps) { + foo_vec@f4 : register(reg_no); + foo_tex@smp2d : register(reg_no); + foo_buf@buf : register(reg_no) hlsl { StructuredBuffer foo_buf@buf; }; + foo_uav@uav : register(reg_no) hlsl { RWStructuredBuffer foo_uav@uav; }; + } + } + +Register number must be declared as a global ``int`` variable. + +.. note:: + With this method of declaring a resource, no stcode will be generated. + +--------------------- +Unordered Access View +--------------------- + +Unordered Access View ``@uav`` postfix provides a hint for the shader compiler that the resource should be bound to the appropriate ``u`` register. +Note that such declaration must be followed with the ``hlsl{...}`` block to define the actual type of the UAV resource. + +.. code-block:: c + + buffer some_buffer; + texture some_texture; + + shader some_shader { + (cs) { + hlsl_buffer@uav = some_buffer hlsl { + RWStructuredBuffer hlsl_buffer@uav; + } + hlsl_texture@uav = some_texture hlsl { + RWTexture2D hlsl_texture@uav; + } + } + // ... + } + +-------------------------------- +Top-level Acceleration Structure +-------------------------------- + +For raytracing purposes, you can also declare a TLAS (top-level acceleration structure) like this: + +.. code-block:: c + + tlas some_tlas; + + shader some_shader { + (cs) { + hlsl_tlas@tlas = some_tlas; + } + // ... + } + +In HLSL terms, ``hlsl_tlas`` will have the type ``RaytracingAccelerationStructure``. + +.. _shader-blocks: + +============= +Shader blocks +============= + +Shader Blocks are an extension of the Preshader idea and define variables/constants which are common for multiple shaders that ``support`` them. +The intent is to optimize constant/texture switching. +For example: + +.. code-block:: c + + float4 world_view_pos; + + block(global_const|frame|scene|object) name_of_block + { + (ps) { world_view_pos@f3 = world_view_pos; } + (vs) { world_view_pos@f3 = world_view_pos; } + } + +Note that a ``block``, just like a ``shader``, defines a preshader script. +This is basically the main gist of why blocks are useful: +they allow you to extract a part of a preshader common to multiple shaders and execute it once when setting the block, not every time a shader is executed. +In this example, ``world_view_pos`` would be visible within pixel and vertex shader in each shader that supports this block. + +------------------- +Shader block layers +------------------- + +Specifier in ``block(...)`` parentheses is called a layer. It indicates how often the values inside the block are supposed to change. +Available layers are: + +- ``global_const`` (for global constants, supposed to change rarely) +- ``frame`` (for shader variables that are supposed to change once per frame) +- ``scene`` (for shader variables that are supposed to change when the rendering mode changes, within one frame) +- ``object`` (for shader variables that are supposed to change for each object) + +.. warning:: + Per-object blocks are evil and should be avoided at all costs. + They imply a draw-call-per-object model, which has historically proven itself antagonistic to performance. + +Rendering modes mentioned in the ``frame`` layer are defined by the user and can be specific for each shader. +For example, there are ``4`` scene blocks in ``rendinst_opaque_inc.dshl`` shader, that are switched throughout the rendering of a single frame: + +- ``rendinst_scene`` for color pass +- ``rendinst_depth_scene`` for depth pass +- ``rendinst_grassify_scene`` for grassify pass +- ``rendinst_voxelize_scene`` for voxelization pass + +------------------------------ +Using shader blocks in shaders +------------------------------ + +Syntax for using such blocks in shaders is as follows: + +.. code-block:: c + + shader shader_name + { + supports some_block; + supports some_other_block; + + hlsl(ps) { + // assuming world_view_pos was defined in one of these blocks + float3 multiplied_world_pos = 2.0 * world_view_pos; + ... + } + } + +With the support of multiple blocks you can use only variables from intersection of these blocks. diff --git a/_sources/api-references/dagor-ecs/dagor_ecs.md.txt b/_sources/api-references/dagor-ecs/dagor_ecs.md.txt new file mode 100644 index 000000000..80b9d2e9e --- /dev/null +++ b/_sources/api-references/dagor-ecs/dagor_ecs.md.txt @@ -0,0 +1,608 @@ +# Dagor ECS + +## Basic concepts + +**Entity:** An entity is a set of components created based on a template using +an initializer (a data set) for each component. It is important to note that an +entity is *not* a container; components are not stored "within" it. + +**EntityId:** This is the identifier for an entity, acting as a weak reference +with a limited number of reuse cycles (generation). + +**Component:** Essentially, a component is a pure data class without any code +and behaviour description, which is instead contained in ECS systems. While +components can be written in an Object-Oriented Programming (OOP) style, like +legacy (e.g., C with classes but without polymorphism), the methods should only +be invoked from ECS systems that receive components of the same type as +parameter. Components may include a copy constructor, comparison operator or/and +assignment operator, but at a minimum, they must have a constructor and +destructor, with additional elements necessary for serialization and tracking of +changes. + +**Templates:** The only way to create an entity is to specify a fully data-driven +template, which lists all the components of the entity (they might be assigned +to some default values). An optional initializer can be provided to +override these default values within the entity. + +**Archetype:** A specific list of components defines an archetype. All +components of entities sharing the same archetype are stored optimally in memory +(Structs of Arrays, SoA). Multiple templates can correspond to the same +archetype. Direct interaction with archetypes is not possiblle, as they are +framework entities, but it is useful to understand which archetype your template +corresponds to. + +**ComponentTypeManager:** This object manages the lifecycle (i.e., creation and +destruction) of non-PoD (Plain old Data) types, such as `visual_effect`, +`animchar`, `human_phys_actor`, etc. This is a table of functions, which +implement constructor, destructor, copy-constructor, comparison operator, +assignment operator, move operator, replicateCompare (comparison + assignment). +Only constructor and destructor would be essential. Copy constructor is required +for creating components with an initializer or template with data, but not +required when a template doesn’t contain data (only description is present). +Comparison / assignment operators are required for serialization and tracked +changes. Thus, when serialization and tracking are not needed operators can be +omitted. + +```{important} +In 99.9% cases ComponentTypeManager implementation is not needed. You should +only identify if the specified data type is relocatable or not (i.e. does +anything else contain a pointer to it), and declare it with standard macro +`ECS_DECLARE_BOXED_TYPE` (or `ECS_DECLARE_RELOCATABLE_TYPE`). Relocatable type +is faster and ensures better locality. It cannot be used if a data type (e.g. +`fixed_vector`) stores a pointer to itself (or if size of type is greater than +65536 bytes, which, hopefully, will never happen). +``` + +**System**: Pure functions, which work with a predefined list of components: + +- `onUpdate`. Pure function that is invoked each frame. Essentially, it is +BroadCast Event Immediate, but it is optimized for the case when there are a lot +of ES listeners of this Event (Stage). +- `onEvent`. Usually works with a specific Entity (the event is sent to a +particular entity). However, there could be BroadCast Events as well. `onEvent` +receives not only components tuples, but also a typed Event. Event can be +regularly postponed (and, in fact, it will be), but then it will be processed by +all of the relevant systems at once. +- `performQuery`. Pure function, which is invoked inside another function (see +below). Both BroadCast Query and `onUpdate` are queries + one parameter +(Event/Stage). + +**ChildComponent:** The component that is not a part of Entity. Initializers +(for creation) or “child” components in Object (a table) or Array. + +**Query:** A fast and convenient way of getting all necessary entities with +specified attributes (Components). That is to say, a query like `Get_All_Humans` +or `Get_All_Humans_With_Transform`. In fact, simple systems perform function on +all Query results for Stage/Event. + +**EntityManager:** This represents "the whole world" in the ECS context. + +**Mutation of Entity Archetype:** (a change in Entity Components). Archetypes +can only be mutated via `reCreateEntity`, which allows transitioning to a new +template by adding missing components and removing unnecessary ones from the old +template. If the new template corresponds to the same archetype, the operation +would be empty (no change). + +**Tracked/Replicated:** Dagor ECS can automatically track changes and trigger +events and/or replicate objects over a network. To enable this, entity +components need to be marked appropriately in the template. Non-PoD types must +implement comparison and assignment operators. + +There is an "optimized" variant of `replicateCompare(from, to)` (by default, +it’s `if(!(from == to)) {from = to; return true; } else return false;)`. If the +data type is rather complicated and large, but all changes in the object of this +type are securely encapsulated via "set" and "get" (mutable), then +generation/hash logic can be used for more optimal comparison. If the generation +hasn’t changed, then data hasn’t changed too. Example: `ecs::Objects`, +`ecs::Array`. + +**Replication:** Changes are replicated using an "eventually consistent" model, +meaning not all changes will be "visible" to the client in the exact order of +their appearance the server (some could be even missed), but all changes will +eventually be received by the clients. It is done in order to not resend +"obsolete" data, if the packet containing replication has been lost, while +relevant components have been changed. + +## Characteristics + +- **Components are Code-Free:** Components do not contain any code. They are not + OOP objects, as encapsulation, inheritance, and polymorphism contradict the + principles of ECS (Entity-Component-System). Methods, aside from getters and + mathematical operators, are also not present. (Refer to this + [video](https://youtu.be/QM1iUe6IofM) for more details.) + +- **Systems (`onUpdate`/`onEvent`) Are Data-Free:** Systems do not store or modify + data, including global or static variables (except for configuration data). + Systems operate exclusively on predefined data registered in advance. If an + Entity lacks the required components, it will not be processed by the System. + Conversely, if it contains the required components, it will be processed. + + However, the System remains unaware of any other components the Entity might + contain and cannot interact with them. An exception exists when working with + components of other Entities, which must be explicitly declared during + registration. The System is responsible for transforming the world from one + consistent state to another and cannot rely on the existence or behavior of + other systems. + +- **Deferred Creation and Destruction of Entities:** Entities are created and + destructed in a deferred manner, but no later than the end of the update + cycle. + +- **Deferred onEvent Execution:** The execution of `onEvent` is deferred, with + an unknown number of frames delay. + +- **System (`onUpdate`) Executes All at Once:** All Systems (`onUpdate`) are + executed simultaneously. The execution order of Systems (before/after) is + specified during ES registration and is subject to topological sorting. + +- **Optimal Memory Storage for Components:** Component data is stored in memory + optimally (Structure of Arrays, SoA), except for Boxed components. Boxed + components have optimization in the standard BoxedCreator template, which + allows sequential memory allocation, though fragmentation can still occur. + +- **Complex Systems Using Multiple Jobs/Queries:** You can write Systems + consisting of multiple Jobs/Queries. For this, the wrapping System is defined as + accepting no components, and Queries (of any required number and types) are + described within it. + +- **Multiple Invocations of Simple Systems and Queries:** Each simple System + (and each Query) can and will be invoked multiple times — once for each data + chunk of every Archetype that meets the requirements. + +- **Parallelism:** The execution of any `onUpdate` or broadcast `onEvent` can be + parallelized. This can happen per System (executing the code of a single + system across multiple threads, classic SIMD) or by executing multiple Systems + simultaneously. + + Since System(`onUpdate`)/`onEvent` explicitly declares which components are + read-only, and which are read-write during registration, the EntityManager can + accurately determine if there will be any Read/Write conflicts for any set of + Systems, allowing parallel execution provided no other ECS-related code is + invoked. However, this parallelism is not yet supported. SIMD execution within + a single system is possible but extremely dangerous and undesirable unless you + fully understand what you are doing. + + In *daNetGame-based* games this is specified in a query during declaration as + + ``` + `template void animchar_update_ecs_query(Callable ECS_CAN_PARALLEL_FOR(c, 4)); + ``` + + and for ES as + + ``` + void animchar_update_es(const UpdateStageInfo &, EntityId eid, Callable ECS_CAN_PARALLEL_FOR(c, 4)); + ``` + or in `es_order` as + + ``` + `es_name {mt{stage_name:i=quant_size;}} + ``` + + where + `stage_name` could be `es_act`, `es_before_render`, or others, and + `quant_size` is the minimum "quantum" of work (i.e., the minimum number of + tuples to be processed). This quantum size depends on the system: the larger + it is, the better (fewer switches), but if the system only needs to process 10 + tuples and the quantum is 10, there will be no parallelism. Generally, a good + quantum size is around "expected number of tuples/16" (so each of 4 threads + gets 4 chunks of work). However, if the work chunks are uneven in terms of + time (animations can be very simple or very complex), it's better to keep the + quantum small, such as 4 elements. + + ```{caution} + Do not use parallelism except in a small amount of isolated, slow code. + ``` + +- **Deferred `onEvent` Execution Based on Budget:** The execution of any + `onEvent` can be deferred by an arbitrary number of frames depending on + available resources ("budget"). Unfortunately, the budget is not in + milliseconds (because measuring that is slow) but in Events. Therefore, it is + crucial that a single `onEvent` does not cause significant delays. + +## Working Directly + +- **Working with Components Directly:** Direct manipulation of components is + allowed only under one condition — it must not occur inside + `onUpdate`/`onEvent`. + + If it does happen inside `onUpdate`/`onEvent` (for example, a trigger zone is + checking whether someone has entered or not), this must be explicitly declared + (via a Query). + + Such a system cannot be parallelized, either entirely (if it + potentially (re)writes to the entire world), with specific other systems (if it + explicitly declares which components it writes to), or it may only be + parallelized within itself (if it reads from the entire world). + +- **Avoid Get/Set:** In general, it is advisable to avoid using `get`/`set` + methods. + +## Entity States + +When writing network code, especially when dealing with an external Entity Id +(not included in a query/es) through get/set operations (which should be avoided +as much as possible), it is crucial to understand that an entity can exist in +one of four primary states during its lifecycle: + +1. **Non-Existent:** The entity does not exist. +2. **Exists but Empty (aka Allocated Handle):** The entity exists but does not + have any components. This can occur on the client side when there are + references to the entity, but it has not yet been created by the server. +3. **Exists and Empty, but Queued for Loading:** The entity exists, is empty, + but is queued for loading. This happens when an entity is created + asynchronously. +4. **Exists and Created:** The entity exists, and all required components are + present and loaded. + +For each of these states, there is a corresponding check (which may vary +depending on the ECS version but is always present). + +There are also more exotic states, such as an entity that has been +created/loaded but is missing some components because the entity is a composite +created through recreation (e.g., "base+foo+bar", where "foo" has not yet been +added). + +To avoid problems, instead of using `get`/`getRW` (which, in dev builds, will +assert in such cases but in release builds will still return a reference to +empty memory), use `getNullable`/g`etNullableRW`. An entirely empty entity will +return an "empty" template name. + +## Legacy (OOP) + +If you have an OOP object that you want to turn into a component, this does not +inherently violate the ECS paradigm. However, all the code (object methods) +should only be invoked within an update. + +Essentially, this is just about moving shared code for several +`onUpdate`/`onEvent` into a common location. + +However, the recommended approach is to extract such common code into a separate +shared library rather than leaving it as a class method to clearly distance it +from OOP. If the OOP object is polymorphic, this should not be used at all (and +it's better not to do this). + +## Difference in Approaches + +Let’s say you want to create triggers (e.g., something happens when entering a +trigger). Previously, you had a spherical trigger, and now you need a cubic one +as well. + +**OOP Approach:** + +```cpp +class IShapedTrigger { + virtual bool isInside(const Point3 &p) = 0; +} + +class BoxTrigger : public IShapedTrigger { + bool isInside(const Point3&) override; +} + +class SphereTrigger : public IShapedTrigger { + bool isInside(const Point3&) override; +} + +// Update code: +IShapedTrigger *trigger; +foreach (unit) { + if(trigger->isInside(unit.pos)) { + do_something(); + } +} +``` + +**ECS Approach:** + +```cpp +void sphere_trigger_es(int trigger, const Point3 &sphere_c, const float sphere_r) { + performQuery([&](Unit &unit) { + if (length(sphere_c - unit.pos) < sphere_r) { + sendEvent(IN_TRIGGER, Event(unit, trigger)); + } + }); +} + +void box_trigger_es(int trigger, const Point3 &box_0, const Point3 &box_1) { + performQuery([&](Unit &unit) { + if (unit.pos & BBox3(box_0, box_1)) { + sendEvent(IN_TRIGGER, Event(unit, trigger)); + } + }); +} + +onEvent(int trigger, Unit &unit) { + do_something(); +} +``` + +As you can see, both approaches are possible, but: + +1. **Deferred Execution:** `do_something` can be deferred in ECS, which is + beneficial rather than problematic. + +2. **Decoupling:** The `onEvent` system has no knowledge of what triggered the + event. It could be a spherical or cubic area, or even a special ability of a + Unit. The system doesn't care and doesn't need to know. This promotes + decoupling. + +3. **Debugging and Serialization:** The entire process can be fully debugged + graphically, serialized, and sent over the network as both an event and its + result. This allows transfer necessary calculations to the client (e.g., + graphical effects) without using `if` statements. + +4. **Extensibility:** The IShapeArea interface can be extended as broadly as + needed. A unit can be in multiple zones simultaneously if required. + +5. **Less Code:** Although it may seem that the amount of code is similar, the + OOP approach lacks members (e.g., box, sphere), the actual function + implementations, and instance creation code. The ECS version contains all the + necessary code (excluding what is generated by codegen). + +## Performance + +- **Typical Entity Characteristics:** In most game worlds, typical entities have + at least 5-10 components, and sometimes even several hundred, consuming + hundreds of bytes to tens of kilobytes of memory. + +- **Component Characteristics:** Components (members) are typically diverse, and + rarely does a single method interact with all components simultaneously. Thus, + OOP often results in patterns that are highly suboptimal in terms of cache + efficiency and branch prediction. + +- **Polymorphism in Entities:** Real-world entities often exhibit some form of + polymorphism, meaning multiple entities perform the same behavior on + semantically similar data. + +- **ECS vs. OOP:** ECS provides more efficient access to entities and their data + (via data duck typing) than classical OOP, but how does it fare in terms of + performance? + +- **DagorECS - Data-Oriented and Fast:** Dagor ECS is designed with a + data-oriented approach, it features high speed and excellent cache locality. + + +### Entity Creation + +- **Framework Overhead:** The overhead of the framework during entity creation + is negligible. + +- **Batch Creation:** Creating many entities (even with initializers) is + generally faster than creating a `vector` and adding them one by one. + It is slightly (~40%) slower than creating all entities at once (a speed that + is not achievable in real-world tasks, as it represents an upper limit) and + slightly less (~30%) slower than using `vector>` (which, as + we'll see, incurs a significant performance penalty). + +Here are some measurements for creating 30,000 entities, each consisting of 15 +POD components, with a total entity size of 516 bytes (one component is tracked, +no tracked means the component is not tracked): + +```cpp +struct Entity { + TMatrix transform = {TMatrix::IDENT}; + int iv = 10, ic2 = 10; + Point3 p = {1,0,0}; + TMatrix d[9] = {TMatrix::IDENT}; + Point3 v = {1,0,0}; + int ivCopy = 10; +}; +``` + +**Time to create 30,000 Entities:** + +``` +- daECS create (no tracked): 6788 us +- grow vector create: 10088 us +- best possible (single allocation) create: 4768 us +``` + +**Average time for mass creation:** `0.22 microseconds` per entity. This is the +synchronous creation time without any Event Systems (ES) catching creation +events for these entities. + +**Conclusion:** Entity creation in daECS is very fast! There is no need to +implement spawn pools or other such complexities. + +### Data Handling/Frame Update + +To evaluate this, we use the same entity and a trivial kinematic update: `pos += +dt * vel`. + +**Times marked as "best possible" represent the maximum achievable speeds for a +data-oriented design, utilizing two parallel arrays (NOT entities).** + +**With a "cold" cache:** + +``` +- daECS update: 49.45 us +- vector, inline: 460.20 us +- vector, inline: 502.40 us +- vector, virtual update: 683.45 us +- best possible, inline: 44.55 us +``` + +**With a "hot" cache:** + +``` +- daECS update: 35.7 us +- vector, inline: 299.8 us +- vector, inline: 346.0 us +- vector, virtual update: 561.8 us +- best possible: 34.7 us +``` + +**Performance Summary:** Despite the vastly greater convenience of the ECS +framework, it is more than 10 times faster than working with OOP entities in any +form (and especially faster than OOP with polymorphism). + +**Optimal Speeds:** The best achievable speeds are no more than 10% better with +a "cold" cache and practically identical with a "hot" cache. + +**Comparison with Other Frameworks:** For comparison with another well-known +data-oriented framework, Unity 2018 ECS: we have an exact implementation of the +Unity algorithm, and daECS performs approximately 4-8 times faster. + +**Conclusion:** Working with daECS is incredibly fast! + +## Codegen + +We have a *codegen* (code generation) tool that automatically generates +standardized bindings for system registration using "lambda" that process one +entity (tuple of components). + +This is a Python script that parses files to identify functions containing the +following patterns: + +- `*_es` +- `*_es_event_handler` +- `*_ecs_query` + +It then registers the system with the corresponding name. For example, functions +like `water_es(UpdateStageInfoAct)` and `water_es(UpdateStageInfoRender)` or +`water_es_event_handler(Event1)`/`water_es_event_handler(Event2)` would be +registered as two separate systems with their own set of components. + +The *codegen* recognizes typed `on_update` functions (where the first parameter +is the stage, with a specified type) and typed `event_handler` functions. + +**Parameter Binding:** + +- **Strict Name Binding:** All parameters are bound strictly by name. Names + cannot be omitted! If a name is required for behavior but the data itself is + not needed, use `ECS_REQUIRE(type name)`. + + For parameters listed in `ECS_REQUIRE` you can use `ecs::auto_type` (this is + not an actual type but serves to avoid unnecessary includes, etc.). + +- **Optional Parameters:** These either have a default value (e.g., `float + water_wind = 1.0f`) or are passed via pointer (e.g., `float *water_wind`). If + the parameter is optional, entities that lack such a parameter will be processed + with the default parameter (or `nullptr` if it’s a pointer). + +- **Implicit Component:** The `eid` component, of type `ecs::EntityId`, is + implicitly added to all templates. + +**Codegen Benefits:** + +All of this generated code is human-readable, meaning you can review and even +write it manually (though this is not recommended). *Codegen* makes the code +easier to read, reduces manual effort (and the errors that come with it), and +enables faster refactoring of selected ECS framework APIs. + +**ECS Directives:** + +- `ECS_TRACK(name1, name2)`: The system will "track" changes to components + `name1` and `name2`. +- `ECS_BEFORE(name1, name2) ECS_AFTER(name3)`: The system will execute before + `name1` and `name2`, but after `name3`. `nameX` can refer to the names of + other systems or synchronization points listed in `es_order`. Any system not + specified to run before `__first_sync_point` will always run after it. +- `ECS_NO_ORDER`: The execution order of this system is not important. +- `ECS_TAG(render, sound)`: The system will only run if the program is + configured with these tags (e.g., `server` for server-side, `gameClient` for + client-side, etc.). +- `ECS_ON_EVENT(on_appear)`: Which is a shortcut for + `ECS_ON_EVENT(ecs::EventEntityCreated, ecs::EventComponentsAppear)` +- `ECS_ON_EVENT(on_disappear)`: Which is a shortcut for + `ECS_ON_EVENT(ecs::EventEntityDestroyed, ecs::EventComponentsDisappear)`. +- `ECS_REQUIRE`, `ECS_REQUIRE_NOT`: These macros for *codegen* should be placed + directly before the ES function. For example: + + ```cpp + ECS_REQUIRE(int someName) ECS_REQUIRE_NOT(ecs::auto_type SomeAbsentName) + void foo_es(float hp) + { + // This function will only receive `hp` for entities that have the `someName` component (of type `int`) + // but do not have the `SomeAbsentName` component (type irrelevant). + } + ``` + + ```{important} + `ECS_REQUIRE` works via the annotate attribute, which unfortunately does not + annotate literals — only names (of arguments or functions). + ``` + + Therefore, the following will not work: + + ```cpp + void foo(int some_component = 1 ECS_REQUIRE(ecs::Tag some_tag)) // This won't work + ``` + + However, this will work: + + ```cpp + ECS_REQUIRE(ecs::Tag some_tag)) void foo(int some_component = 1) + ``` + +- `ECS_ON_EVENT(EventName, EventName2, ...)`: If the handler body needs to + perform the same operation for different events, use `ECS_ON_EVENT` to avoid + copy-pasting. + +**ECS core events:** + +Unicast events: + +- `EventEntityCreated`: Sent after entity was fully created & loaded. Sent only once. +- `EventEntityRecreated`: As previous, but might be sent several times. This + event takes place after reCreateEntity calls. +- `EventComponentsDisappear`: Event is called on recreate if this ES will no + longer apply (i.e. list of components no longer matches). +- `EventComponentsAppear`: Event is called on recreate if this ES will start + apply (i.e. list of components matches). +- `EventEntityDestroyed`: Sent before entity destruction. +- `EventComponentChanged`: Sent after existing component is changed. + + ```{important} + This is a unique, optimized event. It is triggered on the Entity System (ES) + only if the ES requires the component that has been modified. Unlike other + events, this event will not be received by an ES even if it matches the list + of components unless the modified component is included in the ES's list of + components. + ``` + +Broadcast events: + +- `EventEntityManagerEsOrderSet`: Sent after es order has been set. +- `EventEntityManagerBeforeClear`, `EventEntityManagerAfterClear`: Sent + before&after all scene (all entities) destruction. + +## Code Example + +``` +rect +{ + pos:p2 = 0,0 + rectSize:p2 = 0,0 + color:c=255,255,255,255 +} + +brick +{ + _extends:t="rect" + brick.pos:ip2 = 0,0 +} + +pad +{ + _extends:t="rect" + isPad:b=yes +} + +ball +{ + pos:p2 = 600,700 + vel:p2 = 330,-550 + radius:r = 5 + color:c=25,255,255,255 +} +``` + +## Video Lecture + +Anton Yudintsev's video lecture on ECS: + +- [Gameplay-Architecture-and-Design.mp4, +3.65 GB](https://drive.google.com/drive/folders/14Uj5yKAjt6ZgpOOr1q-cG417G_YE-MHg?usp=sharing) + + diff --git a/_sources/api-references/dagor-ecs/index.rst.txt b/_sources/api-references/dagor-ecs/index.rst.txt new file mode 100644 index 000000000..ff4452b1c --- /dev/null +++ b/_sources/api-references/dagor-ecs/index.rst.txt @@ -0,0 +1,15 @@ + +Dagor ECS +========================================= + +The Dagor ECS framework is a scalable entity-component-system architecture +within the Dagor Engine. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + dagor_ecs.md + schemeful_events.md + + diff --git a/_sources/api-references/dagor-ecs/schemeful_events.md.txt b/_sources/api-references/dagor-ecs/schemeful_events.md.txt new file mode 100644 index 000000000..acefd66fe --- /dev/null +++ b/_sources/api-references/dagor-ecs/schemeful_events.md.txt @@ -0,0 +1,391 @@ +# Schemeful Events (daScript, Quirrel, C++, Net) + +## Advantages of Schemeful Events + +- Events are universally compatible across scripting languages (daScript, + Quirrel). +- They can be transmitted both locally and over the network. +- They can be modified in real-time without restarting the game. +- They have a strict, validated structure, making all fields visible in Quirrel + and accessible as an instance, e.g., `evt.someField`. +- Full runtime information on the event structure (reflection) is available. +- C++ API support is provided for handling these events, if required. + +## Declaring an Event + +Each game directory contains an event declaration file, named in the format +`events_.das` (e.g., `events_cuisine_royale.das`). The event +declaration consists of an annotation and a description of the event structure. +The annotation specifies whether the event is `unicast` or `broadcast`, and +network routing, if needed, which is covered below. + +**Example:** `events_.das` + +``` +[event(unicast)] +struct CmdCreateMapPoint + x: float + z: float +``` + +```{note} +All events in the file `events_.das` are loaded before Quirrel, +enabling them to be accessed within it. Therefore, events declared for Quirrel +should be placed in this file. Although not mandatory for other events, it is +recommended for consistency. +``` + +## Creating an Event + +- **daScript:** An event is created like any regular instance structure, e.g., + `[[RqUseAbility ability_type=ability_type]]`. +- **Quirrel:** Here, strict validation ensures no typographical errors or + extraneous fields are included, `RqUseAbility({ability_type="ultimate"})`. + +## Subscribing to an Event + +- **daScript:** Use `on_event=RqUseAbility`, or explicitly set the type of the + first argument in the system (e.g., `evt: RqUseAbility...`). +- **Quirrel:** Use `local {OnAbilityCanceled} = require("dasevents")... + ::ecs.register_es("ability_canceling_es", { [OnAbilityCanceled] = @( evt, eid, + comp) ::dlog(evt.ability_type)`. +- **C++:** Events can be listened to by subscribing to the event name, e.g., + `ECS_ON_EVENT(eastl::integral_constant)`. + +## Sending Events (Server-to-Server, Client-to-Client) + +- **daScript:** Use the standard `sendEvent`, `broadcastEvent`. +- **Quirrel:** Similarly, use `::ecs.g_entity_mgr.sendEvent`, + `::ecs.g_entity_mgr.broadcastEvent`. + +## Sending Events Over the Network + +When declaring an event, specify the routing to determine its network path, +e.g., `[event(unicast, routing=ROUTING_SERVER_TO_CLIENT)]`, +`ROUTING_CLIENT_TO_SERVER`, or `ROUTING_CLIENT_CONTROLLED_ENTITY_TO_SERVER`. + +- **daScript:** Use `require net ... send_net_event(eid, evt)` or + `broadcast_net_event(evt)`. +- **Quirrel:** Use `local {CmdBlinkMarker, sendNetEvent, broadcastNetEvent} = + require("dasevents") ... sendNetEvent(eid, CmdBlinkMarker()) ... + broadcastNetEvent(CmdBlinkMarker(...))`. + +## Network Protocol Version + +All declared network events contribute to the protocol version. If the server +and client versions do not match, the client will disconnect from the session. +For script events (`[event]`), you can control this behavior by excluding +certain events from protocol calculations. In cases of a mismatch, this may +result in either an on-screen error or no notification. + +- `event(... net_liable=strict ...)` – The event participates in protocol + versioning; any mismatch triggers a disconnect (default behavior). +- `event(... net_liable=logerr ...)` – The event does not affect protocol + versioning; a log error is recorded if a mismatch occurs. +- `event(... net_liable=ignore ...)` – The event does not affect protocol + versioning; a log warning (`logwarn`) is recorded if a mismatch occurs. + +C++ events follow a similar logic but use the `NET_PROTO_VERSION` constant and +the count of network C++ events, without exceptions. + +## Event Version + +An explicit version can be assigned to an event. By default, all events are set +to version `0`. When working with `BitStream`, the version is required and will +assist in adapting the protocol if the stream content changes significantly. + +**Example:** `code.das` + +``` +[event(broadcast, version=1)] +struct TestEvent {} +``` + +## Sending Containers (Offline and Online) + +Dynamic arrays/containers can be sent along with events. Currently, the +supported types are `ecs::Object`, `ecs::IntList`, `ecs::FloatList`, +`ecs::Point3List`, and `ecs::Point4List`. + +Here's an example of sending such an event from daScript: + +**Example:** `code.das` + +``` +[event(broadcast)] +struct TestEvent + str : string + i : int + obj : ecs::Object const? + +... + using() <| $(var obj : Object) + obj |> set("foo", 1) + broadcastEvent([[TestEvent str="test event", i = 42, obj=ecs_addr(obj)]]) +``` + +```{important} +1. All container types in an event are stored as pointers. +2. When sending a container in an event, use the helper function + `ecs_addr(container)`. +``` + +Sending events from Quirrel follows a similar process: + +**Example:** `code.nut` + +```nut +let {CompObject} = require("ecs") +let {TestEvent, broadcastNetEvent} = require("dasevents") +... +let obj = CompObject() +obj["foo"] = 1 +broadcastNetEvent(TestEvent({str="test event", i=42, obj=obj})) +``` + +```{important} +- Any `ecs::Object` within an event will automatically include a field called + `fromconnid`, which stores the sender's connection ID (on the client side, + this is always `0`, indicating the server; on the server side, it holds the + actual connection number). +- If the container contents undergo substantial changes, it is advisable to + specify an event version (e.g., `[event(... version=1)]`). This will ensure + that clients or servers with outdated versions will no longer support the + event. +``` + +## Sending BitStream + +Similar to containers, a raw data stream (`BitStream`) can also be sent in an +event. When sending a `BitStream`, specifying an event version is mandatory. + +## Reflection + +Events possess an exact schema, accessible at runtime and retrievable from any +script or C++ code. + +- **C++:** All event structure information is stored in `ecs::EventsDB`, which + provides various methods such as `getEventScheme`, `hasEventScheme`, + `getFieldsCount` (for argument count), `getFieldOffset` (for field offset), + `getFieldName` (for field name), `findFieldIndex` (for field index), and + `getEventFieldValue` (for direct access to parameter values). + +- **daScript:** All of functions for C++ are also available in the `ecs` module + for daScript (e.g., `events_db_getFieldsCount`). For example, the **Events + DB** window in *ImGui* uses this API, see + `/prog/scripts/game/es/imgui/ecs_events_db.das`. + +- **Quirrel:** A detailed event printout is available when calling `::log(evt)`, + which outputs all event fields. An API with reflection support is also + provided, as demonstrated below: + +**Example:** `describe_event.nut` + +```nut +local function describeEvent(evt) { + if (evt == null) { + ::dlog("null event") + return + } + + local eventType = evt.getType() + local eventId = ::ecs.g_entity_mgr.getEventsDB().findEvent(eventType) + + local hasScheme = ::ecs.g_entity_mgr.getEventsDB().hasEventScheme(eventId) + if (!hasScheme) { + ::dlog($"event without scheme #{eventType}") + return + } + local fieldsCount = ::ecs.g_entity_mgr.getEventsDB().getFieldsCount(eventId) + ::dlog($"Event {eventType} fields count #{fieldsCount}") + + for (local i = 0; i < fieldsCount; i++) + { + local name = ::ecs.g_entity_mgr.getEventsDB().getFieldName(eventId, i) + local type = ::ecs.g_entity_mgr.getEventsDB().getFieldType(eventId, i) + local offset = ::ecs.g_entity_mgr.getEventsDB().getFieldOffset(eventId, i) + local value = ::ecs.g_entity_mgr.getEventsDB().getEventFieldValue(evt, eventId, i) + ::dlog($"field #{i} {name} <{type}> offset={offset} = '{value}'") + } +} +``` + +## C++ Event (cpp_event) + +In addition to dynamic events, it is possible to declare C++ events, for which +C++ code and SQ bindings will be generated. In Quirrel, handling these events is +identical to working with standard events, as is the case in daScript. + +When declaring a C++ event, the `with_scheme` argument is required. This is +necessary because some events cannot be converted into schemeful events due to +restrictions (fields must be basic ECS types or compatible containers only). + +**Example:** `events_.das` + +``` +[cpp_event(unicast, with_scheme)] +struct EventOnPlayerDash + from: float3 + to: float3 +``` + +The utility `/scripts/genDasevents.bat` will generate a `.h` and `.cpp` +file for this event (currently located at `prog/game/dasEvents.h/cpp`). + +## Quirrel Stubs / C++ Code Generation + +To generate the Quirrel stubs and C++ code automatically, run the batch file +`/scripts/genDasevents.bat`. If the batch file does not work, build the +daScript compiler manually once by running `jam -sPlatform=win64 +-sCheckedContainers=yes` in `/prog/aot`. + +## Filters + +You can manage the list of recipients for server-side das-events using filters. +This is helpful for targeting specific groups, such as only the player or the +player's team. When sending an event, specify the filter as an additional +argument. For instance, `send_net_event(eid, [[EnableSpectator]], +target_entity_conn(eid))`. The following filters are currently supported: + +- `broadcast` (default) – Sends to all recipients. + - equivalent in C++: `&net::broadcast_rcptf`. +- `target_entity_conn` – Sends the event only to the player (the `eid` receiving + the event must be the player's hero or player `eid`). + - equivalent in C++: `&rcptf::entity_ctrl_conn`. +- `entity_team` – Sends the event to the player's hero and team. + - equivalent in C++: `&rcptf::entity_team`. +- `possessed_and_spectated` – Sends the event to the player and any spectators + watching them. + - equivalent in C++: `&rcptf::possessed_and_spectated`. +- `possessed_and_spectated_player` – Similar to `possessed_and_spectated` but + targets the player instead of the hero. + - equivalent in C++: `&rcptf::possessed_and_spectated_player`. + +In daScript, a filter is a function returning an `array`, +which is referred to as a "filter" for consistency with C++ terminology. + +## Filters in Squirrel + +In Squirrel, as in daScript, event-sending methods have an optional parameter +where you can pass an array of connection IDs (i.e., an array of `int`). Below +is an example filter implemented in Squirrel: + +**Example:** `sq_filter.nut` + +```nut +local filtered_by_team_query = ecs.SqQuery("filtered_by_team_query", {comps_ro=[["team", ecs.TYPE_INT], ["connid",ecs.TYPE_INT]], comps_rq=["player"], comps_no=["playerIsBot"]}) + +local function filter_connids_by_team(team){ + local connids = [] + filtered_by_team_query.perform(function(eid, comp){ + connids.append(comp["connid"]) + },"and(ne(connid,{0}), eq(team,{1}))".subst(INVALID_CONNECTION_ID, team)) + return connids +} +``` + +And here is an example of sending an event using this filter: + +**Example:** `sq_send_event.nut` + +```nut +sendNetEvent(eid, RequestNextRespawnEntity({memberEid=eid}), filter_connids_by_team(target_team)) +``` + +## Filters in cpp_event + +When annotating a `cpp_event` with the `filter=` parameter and one of the +filters listed above, the code generation process will produce C++ code that +includes the specified filter as described above in parentheses. + +## Event Delivery Reliability + +By default, all events are sent with a reliability level of `RELIABLE_ORDERED`. +This can be modified using the `reliability` argument. Available reliability +levels include: + +- `UNRELIABLE` +- `UNRELIABLE_SEQUENCED` +- `RELIABLE_ORDERED` +- `RELIABLE_UNORDERED` + +## Enums + +If you need an enumerated type available in both scripts, there's no need to +write it in C++ and bind it separately for each language. The `genDasevents.bat` +utility now supports generating Squirrel code with enums directly from daScript. + +**Follow these steps:** + +1. Define the enum in daScript where needed (preferably in a separate file for + easy parsing during code generation). +2. Explicitly mark the enum with the `[export_enum]` annotation. +3. Add the file path to `genDasevents.bat` with the `--module + scripts/file_with_enum.das` argument. +4. Run `genDasevents.bat`. +5. Constructors for all enums will be available in + `/sq_globals/dasenums.nut`. + +## Utilities + +- `ecs.dump_events` – This console command prints all events, their schemas, and + schema hashes. If there are mismatches between client and server events, this + command can be run on both to compare outputs (the log will already contain + all necessary information for analysis). +- Additionally, there's an in-game window with detailed event information: open + the **ImGui menu** (`F2`) ▸ **Window** ▸ **ECS** ▸ **Events db**. + +Events db + +
+ +## FAQ + +###### I have a C++ network event and want to move its declaration to daScript while keeping the event in C++. (Example: `ECS_REGISTER_NET_EVENT(EventUserMarkDisabled, net::Er::Unicast, net::ROUTING_SERVER_TO_CLIENT, (&rcptf::entity_ctrl_conn));` + +Define the event in daScript with the `[cpp_event(unicast, with_scheme, +routing=ROUTING_SERVER_TO_CLIENT, filter=direct_connection)]` annotation, then +run `genDasevents.bat`. This will generate stubs, and the event will appear or +update in the `.h` and `.cpp` files. (`cpp_event + with_scheme` activates code +generation). + +--- + +###### I have a C++ network event and want to move it entirely to scripts (no need for it in C++). + +Follow the same steps as above, but use `[event(unicast, +routing=ROUTING_SERVER_TO_CLIENT)]`. Replace all `sendEvent` calls with +`send_net_event/sendNetEvent`, passing a filter function call like +`target_entity_conn(eid)` as the final argument. Running `genDasevents.bat` will +still be necessary to generate the stubs. + +--- + +###### I have a script-based event and need to migrate it to C++. + +Simply change the event annotation from `event` to `cpp_event`. Then, replace +all `send_net_event` calls with standard `sendEvent` calls. Run +`genDasevents.bat` to generate the stubs and C++ code. + +--- + +###### I added an event, but I see the following error in Squirrel: `[E] daRg: the index 'CmdHeroSpeech' does not exist`. + +Make sure the event is registered in the system before Quirrel loads. Each game +has an initialization script (e.g., `_init.das`). Load the script +containing the event in this initialization script to resolve the error. + +--- + +###### `genDasevents.bat` shows compilation errors and won't run. + +Rebuild the compiler. + +```{seealso} +For more information, see [daScript plugin for +VSCode](https://marketplace.visualstudio.com/items?itemName=profelis.dascript-plugin). +``` + + diff --git a/_sources/api-references/dagor-engine-docs/index.rst.txt b/_sources/api-references/dagor-engine-docs/index.rst.txt new file mode 100644 index 000000000..c57b35640 --- /dev/null +++ b/_sources/api-references/dagor-engine-docs/index.rst.txt @@ -0,0 +1,13 @@ + +Engine Libraries Docs +========================================= + + +Contents: + +.. toctree:: + :maxdepth: 4 + :glob: + + picture_image/index.rst + diff --git a/_sources/api-references/dagor-engine-docs/picture_image/Image.rst.txt b/_sources/api-references/dagor-engine-docs/picture_image/Image.rst.txt new file mode 100644 index 000000000..5aba6c6f8 --- /dev/null +++ b/_sources/api-references/dagor-engine-docs/picture_image/Image.rst.txt @@ -0,0 +1,44 @@ +.. autogenerated + +***** +Image +***** + + +*Source file: prog/engine/image/decodeFnameSuffix.h* + + +.. _image_rasterization: + +Image Rasterization +-------------------- + +Images can be of several formats, most common TIFF, PNG, JPG and SVG. + + +There can also be suffixes that allow to specify parameters of rasterization, separated with ``:``:: + + [<:W>[:H][:k|f|p]] + + W - width + H - height + K - keep aspect + F - force aspect + P - premultiplied alpha + +Width and Height can be used for svg and other format for better down/upsampling quality. +When both Width and Height are 0 then resampling is skipped (it may be useful to force premultiplied alpha leaving source picture +resolution as is using :0:P suffix). For vector graphics (such as .SVG) resolution (at least Width) is mandatory. + +Sample usage (in daRg for example):: + + Picture("image.svg:256:256:K:P") + or + Picture("b64://:256:256:K:P") + or + Picture("image.png:0:P") + or + Picture("image.png:512:256:P:F") + + + diff --git a/_sources/api-references/dagor-engine-docs/picture_image/PictureManager.rst.txt b/_sources/api-references/dagor-engine-docs/picture_image/PictureManager.rst.txt new file mode 100644 index 000000000..d25926ce7 --- /dev/null +++ b/_sources/api-references/dagor-engine-docs/picture_image/PictureManager.rst.txt @@ -0,0 +1,62 @@ +.. autogenerated + +************** +PictureManager +************** + + +*Source file: prog/engine/lib3d/picMgr.cpp* + + +.. seealso:: :ref:`image_rasterization` + +Picture Sources +--------------- + +Pictures can be files, resources, http resources, base64 encoded or dynamically rendered characters. + +Full image path can be with or without path to **PictureAtlas** (see below) ``[atlasPath#]``. + +If image path string starts with http or https - it is treated as url and image would be requested from this url. +If image path string doesn't have slashes and endswith ``*`` - it is treated as game built resource and would be loaded from .dxp.bin +files. If image path string starts with ``b64://`` it is supposed to be base64 encoded string file (usually svg). if image path string +starts with ``render`` string - it is supposed to be datablock string, that allow to render in atlas or separately dynamic render +objects, like characters. In other cases image path string should be path to image path (usually png, svg or jpg). + + +Picture Atlases +--------------- + + +Dagor allow to make dynamic atlases for images. +Such atlases improve rendering performance, cause allow to render several UI objects with one drawprimitive. + +To create atlas you need specify it's parameters in configuration file in datablock format. + +Picture atlas configuration format:: + + tex{ + dynAtlas:b=yes + rtTex:b=yes + name:t="myatlas" //for debugging? and for static (obsolete) atlases + size:ip2=512,512 //size in pixels + + maxAllowedPicSz:ip2=320,320 //max allowed picture size to rasterize. + //Will raise a logerr on attempt to rasterize bigger image. + premultiplyAlpha:b=yes + margin:i=1 //margin around pictures + picSrcFolder:t="/ui/uiskin/" + picReserve:i=128 + refHRes:i=1080 //reference size of vertcal resoultion. + //Atlas will proportionally scale on bigger resolutions, + //as we usually need pixel perfect rasterization of icons + } + + +To specify usage of picture atlas:: + + // "tex/mytex.tga" - real texture name + // "tex/myatlas#mytex" - picture "mytex" in tex/myatlas.blk + + + diff --git a/_sources/api-references/dagor-engine-docs/picture_image/index.rst.txt b/_sources/api-references/dagor-engine-docs/picture_image/index.rst.txt new file mode 100644 index 000000000..3470dd745 --- /dev/null +++ b/_sources/api-references/dagor-engine-docs/picture_image/index.rst.txt @@ -0,0 +1,15 @@ + +Dagor Engine Libraries +====================== + +Picture Manager documentation + + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + * + diff --git a/_sources/api-references/dagor-render/index.rst.txt b/_sources/api-references/dagor-render/index.rst.txt new file mode 100644 index 000000000..2ac521adc --- /dev/null +++ b/_sources/api-references/dagor-render/index.rst.txt @@ -0,0 +1,11 @@ + +Dagor Engine Render +=============================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + :glob: + + index/* + diff --git a/_sources/api-references/dagor-render/index/d3dAPI.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI.rst.txt new file mode 100644 index 000000000..92aebee8a --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI.rst.txt @@ -0,0 +1,11 @@ +D3D API +================================================= + +D3D API is our unified API which hides GAPI calls for different platforms. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + :glob: + + d3dAPI/* diff --git a/_sources/api-references/dagor-render/index/d3dAPI/Barrier.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/Barrier.rst.txt new file mode 100644 index 000000000..60208cfbe --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/Barrier.rst.txt @@ -0,0 +1,5 @@ +Barriers +================================================= + +.. autodoxygenfile:: dag_barrier.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/Bindless.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/Bindless.rst.txt new file mode 100644 index 000000000..9b25d5f6b --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/Bindless.rst.txt @@ -0,0 +1,5 @@ +Bindless resources API +================================================= + +.. autodoxygenfile:: dag_bindless.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/Buffers.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/Buffers.rst.txt new file mode 100644 index 000000000..720a63f63 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/Buffers.rst.txt @@ -0,0 +1,5 @@ +Buffers +================================================= + +.. autodoxygenfile:: dag_buffers.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/Command.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/Command.rst.txt new file mode 100644 index 000000000..330efb63b --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/Command.rst.txt @@ -0,0 +1,5 @@ +Driver commands +================================================= + +.. autodoxygenfile:: dag_commands.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/Dispatch.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/Dispatch.rst.txt new file mode 100644 index 000000000..3b6d0fa8e --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/Dispatch.rst.txt @@ -0,0 +1,5 @@ +Compute shader dispatch API +================================================= + +.. autodoxygenfile:: dag_dispatch.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/DispatchMesh.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/DispatchMesh.rst.txt new file mode 100644 index 000000000..56df28417 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/DispatchMesh.rst.txt @@ -0,0 +1,5 @@ +Mesh shader dispatch API +================================================= + +.. autodoxygenfile:: dag_dispatchMesh.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/Draw.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/Draw.rst.txt new file mode 100644 index 000000000..6069760a9 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/Draw.rst.txt @@ -0,0 +1,5 @@ +Draw calls API +================================================= + +.. autodoxygenfile:: dag_draw.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/Heap.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/Heap.rst.txt new file mode 100644 index 000000000..21d73b1e5 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/Heap.rst.txt @@ -0,0 +1,25 @@ +Heaps +================================================= + +Heaps API provides heap object allocation and resource placement in this heap objects. +Resources may be aliased if memory ranges of multiple resources are overlapping, +in this case alive/to-be-used resources must be marked active via :cpp:func:`activate_*` methods +and dead/non-used resources must be marked inactive via :cpp:func:`deactivate_*` methods + +Use :cpp:class:`ResourceDescription` to query required heap group, size and aligment with :cpp:func:`get_resource_allocation_properties` +Having this data, allocate fitting heap with :cpp:func:`create_resource_heap` and place resource there at will +with :cpp:func:`place_*_in_resource_heap` + +For :cpp:class:`ResourceHeapGroup` description see :cpp:class:`ResourceHeapGroupProperties` + +Callable d3d:: methods +================================================= + +.. doxygengroup:: HeapD3D + :project: d3dAPI + :members: + :undoc-members: + :content-only: + +.. autodoxygenfile:: dag_heap.h + :project: d3dAPI \ No newline at end of file diff --git a/_sources/api-references/dagor-render/index/d3dAPI/Info.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/Info.rst.txt new file mode 100644 index 000000000..0f2ddabe1 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/Info.rst.txt @@ -0,0 +1,7 @@ +Driver info API +================================================= + +This file containst the API that allows the user to get different information about the driver, its current state and the hardware it is running on. + +.. autodoxygenfile:: dag_info.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/Lock.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/Lock.rst.txt new file mode 100644 index 000000000..ebf5aaeee --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/Lock.rst.txt @@ -0,0 +1,5 @@ +GPU related locks +================================================= + +.. autodoxygenfile:: dag_lock.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/MatricesAndPerspective.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/MatricesAndPerspective.rst.txt new file mode 100644 index 000000000..c1a7e4e4c --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/MatricesAndPerspective.rst.txt @@ -0,0 +1,9 @@ +D3D API for work with matrices and perspective object +================================================= + +The file contains depricated methods that shouldn't be a part of d3d API. +We a re going to remove getters/setters because they are used for global state access. +Other matric calculation methods should be moved out of d3d namespace. + +.. autodoxygenfile:: dag_matricesAndPerspective.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/Query.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/Query.rst.txt new file mode 100644 index 000000000..8c2f61d83 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/Query.rst.txt @@ -0,0 +1,5 @@ +Queries +================================================= + +.. autodoxygenfile:: dag_query.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/RenderPass.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/RenderPass.rst.txt new file mode 100644 index 000000000..3e26ea8da --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/RenderPass.rst.txt @@ -0,0 +1,31 @@ +RenderPass +================================================= + +* See samples/testDrv3d/render_pass_tests.h for example usage + +Callable d3d:: methods + +.. doxygengroup:: RenderPassD3D + :project: d3dAPI + :members: + :undoc-members: + :content-only: + +================================================= + +Related structures + +.. doxygengroup:: RenderPassStructs + :project: d3dAPI + :members: + :undoc-members: + :content-only: + +================================================= + +Related constants + +.. doxygengroup:: RenderPassConsts + :project: d3dAPI + :members: + :content-only: diff --git a/_sources/api-references/dagor-render/index/d3dAPI/RenderState.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/RenderState.rst.txt new file mode 100644 index 000000000..50a5a1353 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/RenderState.rst.txt @@ -0,0 +1,8 @@ +Render State +================================================= + +.. autodoxygenfile:: dag_renderStateId.h + :project: d3dAPI + +.. autodoxygenfile:: dag_renderStates.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/RenderTarget.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/RenderTarget.rst.txt new file mode 100644 index 000000000..6f153de7a --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/RenderTarget.rst.txt @@ -0,0 +1,5 @@ +Render Targets +================================================= + +.. autodoxygenfile:: dag_renderTarget.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/ResUpdateBuffer.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/ResUpdateBuffer.rst.txt new file mode 100644 index 000000000..fe07ebbb5 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/ResUpdateBuffer.rst.txt @@ -0,0 +1,8 @@ +Resource update buffers +================================================= + +The file contains the API for so-called RUBs (Resource Update Buffers). +These are used to update contents of resources efficiently on modern graphics APIs. + +.. autodoxygenfile:: dag_resUpdateBuffer.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/Resource.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/Resource.rst.txt new file mode 100644 index 000000000..f07b524e6 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/Resource.rst.txt @@ -0,0 +1,5 @@ +Resources +================================================= + +.. autodoxygenfile:: dag_resource.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/RwResource.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/RwResource.rst.txt new file mode 100644 index 000000000..bb3c46e92 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/RwResource.rst.txt @@ -0,0 +1,5 @@ +Read/Write (UAV) resources +================================================= + +.. autodoxygenfile:: dag_rwResource.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/Sampler.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/Sampler.rst.txt new file mode 100644 index 000000000..b8876351c --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/Sampler.rst.txt @@ -0,0 +1,5 @@ +Samplers +================================================= + +.. autodoxygenfile:: dag_sampler.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/Shader.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/Shader.rst.txt new file mode 100644 index 000000000..74ea47154 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/Shader.rst.txt @@ -0,0 +1,5 @@ +Shader programs +================================================= + +.. autodoxygenfile:: dag_shader.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/ShaderConstants.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/ShaderConstants.rst.txt new file mode 100644 index 000000000..5eca3fa3e --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/ShaderConstants.rst.txt @@ -0,0 +1,5 @@ +Shader constants and const buffers +================================================= + +.. autodoxygenfile:: dag_shaderConstants.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/TiledResource.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/TiledResource.rst.txt new file mode 100644 index 000000000..493a376cf --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/TiledResource.rst.txt @@ -0,0 +1,5 @@ +Tiled Resource +================================================= + +.. autodoxygenfile:: dag_tiledResource.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/VariableRateShading.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/VariableRateShading.rst.txt new file mode 100644 index 000000000..171c2503c --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/VariableRateShading.rst.txt @@ -0,0 +1,5 @@ +Variable rate shading API +================================================= + +.. autodoxygenfile:: dag_variableRateShading.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/VertexIndexBuffer.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/VertexIndexBuffer.rst.txt new file mode 100644 index 000000000..04fee4483 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/VertexIndexBuffer.rst.txt @@ -0,0 +1,5 @@ +Vertex and Index buffer API +================================================= + +.. autodoxygenfile:: dag_vertexIndexBuffer.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/ViewScissor.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/ViewScissor.rst.txt new file mode 100644 index 000000000..38a416408 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/ViewScissor.rst.txt @@ -0,0 +1,5 @@ +View and Scissor d3d API +================================================= + +.. autodoxygenfile:: dag_viewScissor.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/constants.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/constants.rst.txt new file mode 100644 index 000000000..f6909ef5f --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/constants.rst.txt @@ -0,0 +1,8 @@ +Constants, Structures and Enumerations +================================================= + +.. autodoxygenfile:: dag_consts.h + :project: d3dAPI + +.. autodoxygenfile:: dag_consts_base.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/other.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/other.rst.txt new file mode 100644 index 000000000..42691dde2 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/other.rst.txt @@ -0,0 +1,5 @@ +All other methods +================================================= + +.. autodoxygenfile:: dag_driver.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dAPI/textures.rst.txt b/_sources/api-references/dagor-render/index/d3dAPI/textures.rst.txt new file mode 100644 index 000000000..a07fb2ec4 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dAPI/textures.rst.txt @@ -0,0 +1,8 @@ +Textures +================================================= + +.. autodoxygenfile:: dag_tex3d.h + :project: d3dAPI + +.. autodoxygenfile:: dag_texture.h + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/d3dHelpers.rst.txt b/_sources/api-references/dagor-render/index/d3dHelpers.rst.txt new file mode 100644 index 000000000..66e572690 --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dHelpers.rst.txt @@ -0,0 +1,10 @@ +Helper classes for D3D API +================================================= + +These classes are not part of core D3D API, but they simplifies common usages of D3D API. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + d3dHelpers/multidrawContext diff --git a/_sources/api-references/dagor-render/index/d3dHelpers/multidrawContext.rst.txt b/_sources/api-references/dagor-render/index/d3dHelpers/multidrawContext.rst.txt new file mode 100644 index 000000000..c746b48db --- /dev/null +++ b/_sources/api-references/dagor-render/index/d3dHelpers/multidrawContext.rst.txt @@ -0,0 +1,5 @@ +MultidrawContext +================================================= + +.. autodoxygenfile:: dag_multidrawContext.h + :project: d3dHelpers diff --git a/_sources/api-references/dagor-render/index/daBFG.rst.txt b/_sources/api-references/dagor-render/index/daBFG.rst.txt new file mode 100644 index 000000000..e5d17ee52 --- /dev/null +++ b/_sources/api-references/dagor-render/index/daBFG.rst.txt @@ -0,0 +1,22 @@ +daBFG API +================================================= + +daBFG is a library for constructing and executing a *frame graph*, a computational graph for specifying a rendering pipeline of an real time application. It supports many fun features, such as: + * Homogenous management of many types of resources: transient and temporal, CPU data, GPU textures and buffers, external resources like system backbuffers + * Memory aliasing for all internally managed resources (even temporal ones!) + * Automatic barriers + * Global state management: (fake) render passes, bindings, VRS and more! + * Multiplexing support: want to run your graph multiple times for VR? No problem! It just works (as long as you annotate node multiplexing modes correctly and don't do any global state crimes) + * More to come soon! + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + daBFG/core + daBFG/declaringNodes + daBFG/graphState + daBFG/runtime + daBFG/das + daBFG/bfg_ecs + daBFG/daBfgCore diff --git a/_sources/api-references/dagor-render/index/daBFG/bfg_ecs.rst.txt b/_sources/api-references/dagor-render/index/daBFG/bfg_ecs.rst.txt new file mode 100644 index 000000000..8f4caaacf --- /dev/null +++ b/_sources/api-references/dagor-render/index/daBFG/bfg_ecs.rst.txt @@ -0,0 +1,134 @@ +.. + This is auto generated file. See daBfg/api/das/docs + +.. _stdlib_bfg_ecs: + +============== +Bfg in das+ecs +============== + +Nodes can be stored in ecs **singleton** and in this case there is special function annotation :ref:`bfg_ecs_node ` for hot reloading. + +Function should take :ref:`NodeHandle ` or :ref:`NodeHandleVector ` as first argument and set up it. + +Another arguments of function can be any other components of singleton entity and will be passed to es macro as is. + +Possible arguments for bfg_ecs_node annotation itself: + +- ``on_appear`` - call function on appear of entity. +- ``on_event=EventName`` - call function on event. +- ``track=component_name`` - call function on change of component. + +Example: + +.. code-block:: das + + require daBfg.bfg_ecs + + [bfg_ecs_node(on_appear)] + def register_some_node(var some_node : NodeHandle&) + some_node <- root() |> registerNode("some_node") <| @(var registry : Registry) + + // Node requests, for example: + registry |> requestRenderPass |> color([[auto[] "some_tex"]]) + + return <- @ <| + + // Render code, for example: + query() <| $ [es] (some_shader : PostFxRenderer) + some_shader |> render() +++++++++++++++++++++ +Function annotations +++++++++++++++++++++ + +.. _handle-bfg_ecs-bfg_ecs_node: + +.. das:attribute:: bfg_ecs_node + +|function_annotation-bfg_ecs-bfg_ecs_node| + ++++++++ +Classes ++++++++ + +.. _struct-bfg_ecs-BfgEcsNodeAnnotation: + +.. das:attribute:: BfgEcsNodeAnnotation : AstFunctionAnnotation + +|class-bfg_ecs-BfgEcsNodeAnnotation| + +.. das:function:: BfgEcsNodeAnnotation.apply(self: AstFunctionAnnotation; func: FunctionPtr; group: ModuleGroup; args: AnnotationArgumentList const; errors: das_string) + +apply returns bool + ++--------+--------------------------------------------------------------------------------+ ++argument+argument type + ++========+================================================================================+ ++self + :ref:`ast::AstFunctionAnnotation ` + ++--------+--------------------------------------------------------------------------------+ ++func + :ref:`FunctionPtr ` + ++--------+--------------------------------------------------------------------------------+ ++group + :ref:`rtti::ModuleGroup ` + ++--------+--------------------------------------------------------------------------------+ ++args + :ref:`rtti::AnnotationArgumentList ` const+ ++--------+--------------------------------------------------------------------------------+ ++errors + :ref:`builtin::das_string ` + ++--------+--------------------------------------------------------------------------------+ + + +|method-bfg_ecs-BfgEcsNodeAnnotation.apply| + +.. das:function:: BfgEcsNodeAnnotation.declareReloadCallback(self: BfgEcsNodeAnnotation; func: FunctionPtr; parsed: BfgEcsNodeAnnotationArgs const; args: AnnotationArgumentList const) + ++--------+------------------------------------------------------------------------------------------+ ++argument+argument type + ++========+==========================================================================================+ ++self + :ref:`bfg_ecs::BfgEcsNodeAnnotation ` + ++--------+------------------------------------------------------------------------------------------+ ++func + :ref:`FunctionPtr ` + ++--------+------------------------------------------------------------------------------------------+ ++parsed + :ref:`bfg_ecs::BfgEcsNodeAnnotationArgs ` const+ ++--------+------------------------------------------------------------------------------------------+ ++args + :ref:`rtti::AnnotationArgumentList ` const + ++--------+------------------------------------------------------------------------------------------+ + + +|method-bfg_ecs-BfgEcsNodeAnnotation.declareReloadCallback| + +.. das:function:: BfgEcsNodeAnnotation.declareES(self: BfgEcsNodeAnnotation; func: FunctionPtr; parsed: BfgEcsNodeAnnotationArgs const; args: AnnotationArgumentList const) + ++--------+------------------------------------------------------------------------------------------+ ++argument+argument type + ++========+==========================================================================================+ ++self + :ref:`bfg_ecs::BfgEcsNodeAnnotation ` + ++--------+------------------------------------------------------------------------------------------+ ++func + :ref:`FunctionPtr ` + ++--------+------------------------------------------------------------------------------------------+ ++parsed + :ref:`bfg_ecs::BfgEcsNodeAnnotationArgs ` const+ ++--------+------------------------------------------------------------------------------------------+ ++args + :ref:`rtti::AnnotationArgumentList ` const + ++--------+------------------------------------------------------------------------------------------+ + + +|method-bfg_ecs-BfgEcsNodeAnnotation.declareES| + +.. das:function:: BfgEcsNodeAnnotation.parseArgs(self: BfgEcsNodeAnnotation; func: FunctionPtr; args: AnnotationArgumentList const; errors: das_string) + +parseArgs returns :ref:`bfg_ecs::BfgEcsNodeAnnotationArgs ` + ++--------+--------------------------------------------------------------------------------+ ++argument+argument type + ++========+================================================================================+ ++self + :ref:`bfg_ecs::BfgEcsNodeAnnotation ` + ++--------+--------------------------------------------------------------------------------+ ++func + :ref:`FunctionPtr ` + ++--------+--------------------------------------------------------------------------------+ ++args + :ref:`rtti::AnnotationArgumentList ` const+ ++--------+--------------------------------------------------------------------------------+ ++errors + :ref:`builtin::das_string ` + ++--------+--------------------------------------------------------------------------------+ + + +|method-bfg_ecs-BfgEcsNodeAnnotation.parseArgs| + + diff --git a/_sources/api-references/dagor-render/index/daBFG/core.rst.txt b/_sources/api-references/dagor-render/index/daBFG/core.rst.txt new file mode 100644 index 000000000..3fe8745e6 --- /dev/null +++ b/_sources/api-references/dagor-render/index/daBFG/core.rst.txt @@ -0,0 +1,28 @@ +Core Functions +================================================= + +The library exposes several global functions for controlling the global +graph state encapsulated inside the library, listed below. The graph +is always singular and global by design. This allows for the most +effective optimization of memory and other resources due to all +information being visible and available to the backend. + +However, for separating different logical parts of the global graph, +e.g. for different viewports (editor and game preview) all daBfg entities +(nodes, resources, automatic resolutions, etc) are namespaced. A node +might have the name "/foo/bar/node", but you never actually use this +name to refer to a node, as we don't want to be parsing strings. +Instead, wrapper objects describing a particular namespace are used. + +Hence, the code that wants to register various objects inside the graph, +like nodes and resolutions, must use the :cpp:class:`dabfg::NameSpace` +class to do so, although aliases for calling methods of this class on +the global namespace :cpp:func:`dabfg::root` are available. + +.. doxygengroup:: DabfgCore + :project: daBFG + :members: + +.. doxygengroup:: DabfgCoreAliases + :project: daBFG + :members: diff --git a/_sources/api-references/dagor-render/index/daBFG/daBfgCore.rst.txt b/_sources/api-references/dagor-render/index/daBFG/daBfgCore.rst.txt new file mode 100644 index 000000000..527b82366 --- /dev/null +++ b/_sources/api-references/dagor-render/index/daBFG/daBfgCore.rst.txt @@ -0,0 +1,674 @@ +.. + This is auto generated file. See daBfg/api/das/docs + +.. _stdlib_daBfgCore: + +==================== +DaBfgCore das module +==================== + +daBfgCore module contains data structures +and bindings from das to cpp. + + +++++++++++++ +Type aliases +++++++++++++ + +.. _alias-BindingsMap: + +.. das:attribute:: BindingsMap = fixedVectorMap`int`Binding`8 + +|typedef-daBfgCore-BindingsMap| + +++++++++++++ +Enumerations +++++++++++++ + +.. _enum-daBfgCore-NameSpaceNameId: + +.. das:attribute:: NameSpaceNameId + ++-------+-----+ ++Invalid+65535+ ++-------+-----+ + + +|enumeration-daBfgCore-NameSpaceNameId| + +.. _enum-daBfgCore-NodeNameId: + +.. das:attribute:: NodeNameId + ++-------+-----+ ++Invalid+65535+ ++-------+-----+ + + +|enumeration-daBfgCore-NodeNameId| + +.. _enum-daBfgCore-ResNameId: + +.. das:attribute:: ResNameId + ++-------+-----+ ++Invalid+65535+ ++-------+-----+ + + +|enumeration-daBfgCore-ResNameId| + +.. _enum-daBfgCore-History: + +.. das:attribute:: History + ++---------------------+-+ ++No +0+ ++---------------------+-+ ++ClearZeroOnFirstFrame+1+ ++---------------------+-+ ++DiscardOnFirstFrame +2+ ++---------------------+-+ + + +|enumeration-daBfgCore-History| + +.. _enum-daBfgCore-ResourceActivationAction: + +.. das:attribute:: ResourceActivationAction + ++---------------------------+-+ ++REWRITE_AS_COPY_DESTINATION+0+ ++---------------------------+-+ ++REWRITE_AS_UAV +1+ ++---------------------------+-+ ++REWRITE_AS_RTV_DSV +2+ ++---------------------------+-+ ++CLEAR_F_AS_UAV +3+ ++---------------------------+-+ ++CLEAR_I_AS_UAV +4+ ++---------------------------+-+ ++CLEAR_AS_RTV_DSV +5+ ++---------------------------+-+ ++DISCARD_AS_UAV +6+ ++---------------------------+-+ ++DISCARD_AS_RTV_DSV +7+ ++---------------------------+-+ + + +|enumeration-daBfgCore-ResourceActivationAction| + +.. _enum-daBfgCore-MultiplexingMode: + +.. das:attribute:: MultiplexingMode + ++-------------+-+ ++None +0+ ++-------------+-+ ++SuperSampling+1+ ++-------------+-+ ++SubSampling +2+ ++-------------+-+ ++Viewport +4+ ++-------------+-+ ++FullMultiplex+7+ ++-------------+-+ + + +|enumeration-daBfgCore-MultiplexingMode| + +.. _enum-daBfgCore-SideEffect: + +.. das:attribute:: SideEffect + ++--------+-+ ++None +0+ ++--------+-+ ++Internal+1+ ++--------+-+ ++External+2+ ++--------+-+ + + +|enumeration-daBfgCore-SideEffect| + +.. _enum-daBfgCore-Access: + +.. das:attribute:: Access + ++----------+-+ ++UNKNOWN +0+ ++----------+-+ ++READ_ONLY +1+ ++----------+-+ ++READ_WRITE+2+ ++----------+-+ + + +|enumeration-daBfgCore-Access| + +.. _enum-daBfgCore-Usage: + +.. das:attribute:: Usage + ++------------------------------------+--+ ++UNKNOWN +0 + ++------------------------------------+--+ ++COLOR_ATTACHMENT +1 + ++------------------------------------+--+ ++INPUT_ATTACHMENT +2 + ++------------------------------------+--+ ++DEPTH_ATTACHMENT +3 + ++------------------------------------+--+ ++DEPTH_ATTACHMENT_AND_SHADER_RESOURCE+4 + ++------------------------------------+--+ ++RESOLVE_ATTACHMENT +5 + ++------------------------------------+--+ ++SHADER_RESOURCE +6 + ++------------------------------------+--+ ++CONSTANT_BUFFER +7 + ++------------------------------------+--+ ++INDEX_BUFFER +8 + ++------------------------------------+--+ ++VERTEX_BUFFER +9 + ++------------------------------------+--+ ++COPY +10+ ++------------------------------------+--+ ++BLIT +11+ ++------------------------------------+--+ ++INDIRECTION_BUFFER +12+ ++------------------------------------+--+ ++VRS_RATE_TEXTURE +13+ ++------------------------------------+--+ + + +|enumeration-daBfgCore-Usage| + +.. _enum-daBfgCore-Stage: + +.. das:attribute:: Stage + ++---------------+--+ ++UNKNOWN +0 + ++---------------+--+ ++PRE_RASTER +1 + ++---------------+--+ ++POST_RASTER +2 + ++---------------+--+ ++COMPUTE +4 + ++---------------+--+ ++TRANSFER +8 + ++---------------+--+ ++RAYTRACE +16+ ++---------------+--+ ++ALL_GRAPHICS +3 + ++---------------+--+ ++ALL_INDIRECTION+21+ ++---------------+--+ + + +|enumeration-daBfgCore-Stage| + +.. _enum-daBfgCore-ResourceType: + +.. das:attribute:: ResourceType + ++-------+-+ ++Invalid+0+ ++-------+-+ ++Texture+1+ ++-------+-+ ++Buffer +2+ ++-------+-+ ++Blob +3+ ++-------+-+ + + +|enumeration-daBfgCore-ResourceType| + +.. _enum-daBfgCore-AutoResTypeNameId: + +.. das:attribute:: AutoResTypeNameId + ++-------+-----+ ++Invalid+65535+ ++-------+-----+ + + +|enumeration-daBfgCore-AutoResTypeNameId| + +.. _enum-daBfgCore-VariableRateShadingCombiner: + +.. das:attribute:: VariableRateShadingCombiner + ++---------------+-+ ++VRS_PASSTHROUGH+0+ ++---------------+-+ ++VRS_OVERRIDE +1+ ++---------------+-+ ++VRS_MIN +2+ ++---------------+-+ ++VRS_MAX +3+ ++---------------+-+ ++VRS_SUM +4+ ++---------------+-+ + + +|enumeration-daBfgCore-VariableRateShadingCombiner| + +.. _enum-daBfgCore-BindingType: + +.. das:attribute:: BindingType + ++----------+-+ ++ShaderVar +0+ ++----------+-+ ++ViewMatrix+1+ ++----------+-+ ++ProjMatrix+2+ ++----------+-+ ++Invalid +3+ ++----------+-+ + + +|enumeration-daBfgCore-BindingType| + +++++++++++++++++++ +Handled structures +++++++++++++++++++ + +.. _handle-daBfgCore-TextureResourceDescription: + +.. das:attribute:: TextureResourceDescription + +TextureResourceDescription fields are + ++----------+--------------------------------------------------------------------------------------+ ++height +uint + ++----------+--------------------------------------------------------------------------------------+ ++mipLevels +uint + ++----------+--------------------------------------------------------------------------------------+ ++activation+ :ref:`daBfgCore::ResourceActivationAction ` + ++----------+--------------------------------------------------------------------------------------+ ++width +uint + ++----------+--------------------------------------------------------------------------------------+ ++cFlags +uint + ++----------+--------------------------------------------------------------------------------------+ + + +|structure_annotation-daBfgCore-TextureResourceDescription| + +.. _handle-daBfgCore-VolTextureResourceDescription: + +.. das:attribute:: VolTextureResourceDescription + +|structure_annotation-daBfgCore-VolTextureResourceDescription| + +.. _handle-daBfgCore-ArrayTextureResourceDescription: + +.. das:attribute:: ArrayTextureResourceDescription + +|structure_annotation-daBfgCore-ArrayTextureResourceDescription| + +.. _handle-daBfgCore-CubeTextureResourceDescription: + +.. das:attribute:: CubeTextureResourceDescription + +|structure_annotation-daBfgCore-CubeTextureResourceDescription| + +.. _handle-daBfgCore-ArrayCubeTextureResourceDescription: + +.. das:attribute:: ArrayCubeTextureResourceDescription + +|structure_annotation-daBfgCore-ArrayCubeTextureResourceDescription| + +.. _handle-daBfgCore-ResourceData: + +.. das:attribute:: ResourceData + +ResourceData fields are + ++-------+--------------------------------------------------------------+ ++resType+ :ref:`daBfgCore::ResourceType ` + ++-------+--------------------------------------------------------------+ ++history+ :ref:`daBfgCore::History ` + ++-------+--------------------------------------------------------------+ + + +|structure_annotation-daBfgCore-ResourceData| + +.. _handle-daBfgCore-AutoResolutionData: + +.. das:attribute:: AutoResolutionData + +AutoResolutionData fields are + ++----------+------------------------------------------------------------------------+ ++multiplier+float + ++----------+------------------------------------------------------------------------+ ++id + :ref:`daBfgCore::AutoResTypeNameId ` + ++----------+------------------------------------------------------------------------+ + + +|structure_annotation-daBfgCore-AutoResolutionData| + +.. _handle-daBfgCore-ShaderBlockLayersInfo: + +.. das:attribute:: ShaderBlockLayersInfo + +ShaderBlockLayersInfo fields are + ++-----------+---+ ++sceneLayer +int+ ++-----------+---+ ++objectLayer+int+ ++-----------+---+ ++frameLayer +int+ ++-----------+---+ + + +|structure_annotation-daBfgCore-ShaderBlockLayersInfo| + +.. _handle-daBfgCore-VrsStateRequirements: + +.. das:attribute:: VrsStateRequirements + +VrsStateRequirements fields are + ++----------------+--------------------------------------------------------------------------------------------+ ++rateTextureResId+ :ref:`daBfgCore::ResNameId ` + ++----------------+--------------------------------------------------------------------------------------------+ ++pixelCombiner + :ref:`daBfgCore::VariableRateShadingCombiner ` + ++----------------+--------------------------------------------------------------------------------------------+ ++rateY +uint + ++----------------+--------------------------------------------------------------------------------------------+ ++vertexCombiner + :ref:`daBfgCore::VariableRateShadingCombiner ` + ++----------------+--------------------------------------------------------------------------------------------+ ++rateX +uint + ++----------------+--------------------------------------------------------------------------------------------+ + + +|structure_annotation-daBfgCore-VrsStateRequirements| + +.. _handle-daBfgCore-VirtualSubresourceRef: + +.. das:attribute:: VirtualSubresourceRef + +VirtualSubresourceRef fields are + ++--------+--------------------------------------------------------+ ++layer +uint + ++--------+--------------------------------------------------------+ ++nameId + :ref:`daBfgCore::ResNameId ` + ++--------+--------------------------------------------------------+ ++mipLevel+uint + ++--------+--------------------------------------------------------+ + + +|structure_annotation-daBfgCore-VirtualSubresourceRef| + +.. _handle-daBfgCore-Binding: + +.. das:attribute:: Binding + +Binding fields are + ++--------+------------------------------------------------------------+ ++bindType+ :ref:`daBfgCore::BindingType ` + ++--------+------------------------------------------------------------+ ++resource+ :ref:`daBfgCore::ResNameId ` + ++--------+------------------------------------------------------------+ ++history +bool + ++--------+------------------------------------------------------------+ + + +|structure_annotation-daBfgCore-Binding| + +.. _handle-daBfgCore-ResourceUsage: + +.. das:attribute:: ResourceUsage + +ResourceUsage fields are + ++---------+--------------------------------------------------+ ++stage + :ref:`daBfgCore::Stage ` + ++---------+--------------------------------------------------+ ++usageType+ :ref:`daBfgCore::Usage ` + ++---------+--------------------------------------------------+ ++access + :ref:`daBfgCore::Access ` + ++---------+--------------------------------------------------+ + + +|structure_annotation-daBfgCore-ResourceUsage| + +.. _handle-daBfgCore-ResourceRequest: + +.. das:attribute:: ResourceRequest + +ResourceRequest fields are + ++-----------+------------------------------------------------------------------+ ++usage + :ref:`daBfgCore::ResourceUsage ` + ++-----------+------------------------------------------------------------------+ ++slotRequest+bool + ++-----------+------------------------------------------------------------------+ ++optional +bool + ++-----------+------------------------------------------------------------------+ + + +|structure_annotation-daBfgCore-ResourceRequest| + +.. _handle-daBfgCore-BufferResourceDescription: + +.. das:attribute:: BufferResourceDescription + +BufferResourceDescription fields are + ++------------------+--------------------------------------------------------------------------------------+ ++viewFormat +uint + ++------------------+--------------------------------------------------------------------------------------+ ++activation + :ref:`daBfgCore::ResourceActivationAction ` + ++------------------+--------------------------------------------------------------------------------------+ ++elementCount +uint + ++------------------+--------------------------------------------------------------------------------------+ ++cFlags +uint + ++------------------+--------------------------------------------------------------------------------------+ ++elementSizeInBytes+uint + ++------------------+--------------------------------------------------------------------------------------+ + + +|structure_annotation-daBfgCore-BufferResourceDescription| + +.. _handle-daBfgCore-NodeStateRequirements: + +.. das:attribute:: NodeStateRequirements + +NodeStateRequirements fields are + ++---------------------+----------------------------------------------------------------------------------------------+ ++supportsWireframe +bool + ++---------------------+----------------------------------------------------------------------------------------------+ ++pipelineStateOverride+ :ref:`builtin::optional`OverrideState ` + ++---------------------+----------------------------------------------------------------------------------------------+ ++vrsState + :ref:`builtin::optional`VrsStateRequirements ` + ++---------------------+----------------------------------------------------------------------------------------------+ + + +|structure_annotation-daBfgCore-NodeStateRequirements| + +.. _handle-daBfgCore-VirtualPassRequirements: + +.. das:attribute:: VirtualPassRequirements + +VirtualPassRequirements fields are + ++----------------+----------------------------------------------------------------------------------------------------------+ ++colorAttachments+ :ref:`builtin::fixedVector`VirtualSubresourceRef`8 ` + ++----------------+----------------------------------------------------------------------------------------------------------+ ++depthReadOnly +bool + ++----------------+----------------------------------------------------------------------------------------------------------+ ++depthAttachment + :ref:`daBfgCore::VirtualSubresourceRef ` + ++----------------+----------------------------------------------------------------------------------------------------------+ + + +|structure_annotation-daBfgCore-VirtualPassRequirements| + +.. _handle-daBfgCore-NodeData: + +.. das:attribute:: NodeData + +NodeData fields are + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++multiplexingMode + :ref:`daBfgCore::MultiplexingMode ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++generation +uint16 + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++precedingNodeIds + :ref:`builtin::fixedVectorSet`NodeNameId`4 ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++modifiedResources + :ref:`builtin::fixedVectorSet`ResNameId`8 ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++followingNodeIds + :ref:`builtin::fixedVectorSet`NodeNameId`4 ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++resourceRequests + :ref:`builtin::fixedVectorMap`ResNameId`ResourceRequest`16 ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++readResources + :ref:`builtin::fixedVectorSet`ResNameId`8 ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++nodeSource + :ref:`builtin::das_string ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++shaderBlockLayers + :ref:`daBfgCore::ShaderBlockLayersInfo ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++bindings + :ref:`builtin::fixedVectorMap`int`Binding`8 ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++historyResourceReadRequests+ :ref:`builtin::fixedVectorMap`ResNameId`ResourceRequest`16 ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++stateRequirements + :ref:`builtin::optional`NodeStateRequirements ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++createdResources + :ref:`builtin::fixedVectorSet`ResNameId`8 ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++renderingRequirements + :ref:`builtin::optional`VirtualPassRequirements ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++renamedResources + :ref:`builtin::fixedVectorMap`ResNameId`ResNameId`8 ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++priority +int + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ ++sideEffect + :ref:`daBfgCore::SideEffect ` + ++---------------------------+--------------------------------------------------------------------------------------------------------------------------+ + + +|structure_annotation-daBfgCore-NodeData| + +.. _handle-daBfgCore-ResourceProvider: + +.. das:attribute:: ResourceProvider + +|structure_annotation-daBfgCore-ResourceProvider| + +.. _handle-daBfgCore-InternalRegistry: + +.. das:attribute:: InternalRegistry + +InternalRegistry fields are + ++----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ ++resources + :ref:`builtin::idIndexedMapping`ResNameId`ResourceData ` + ++----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ ++nodes + :ref:`builtin::idIndexedMapping`NodeNameId`NodeData ` + ++----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ ++knownNames+ :ref:`builtin::idNameMap`NameSpaceNameId`ResNameId`NodeNameId`AutoResTypeNameId ` + ++----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + + +|structure_annotation-daBfgCore-InternalRegistry| + +.. _handle-daBfgCore-NodeTracker: + +.. das:attribute:: NodeTracker + +|structure_annotation-daBfgCore-NodeTracker| + +.. _handle-daBfgCore-NodeHandle: + +.. das:attribute:: NodeHandle + +NodeHandle property operators are + ++-----+----+ ++valid+bool+ ++-----+----+ + + +|structure_annotation-daBfgCore-NodeHandle| + ++++++++++++++++++++ +Top level functions ++++++++++++++++++++ + + * :ref:`registerNode (arg0:daBfgCore::NodeTracker implicit;arg1:daBfgCore::NodeNameId const;arg2:__context const) : void ` + * :ref:`get_shader_variable_id (arg0:string const implicit) : int ` + * :ref:`fill_slot (arg0:daBfgCore::NameSpaceNameId const;arg1:string const implicit;arg2:daBfgCore::NameSpaceNameId const;arg3:string const implicit) : void ` + * :ref:`resetNode (arg0:daBfgCore::NodeHandle implicit) : void ` + +.. _function-_at_daBfgCore_c__c_registerNode_IH_ls_daBfgCore_c__c_NodeTracker_gr__CE16_ls_daBfgCore_c__c_NodeNameId_gr__C_c: + +.. das:function:: registerNode(arg0: NodeTracker implicit; arg1: NodeNameId const) + ++--------+-----------------------------------------------------------------------+ ++argument+argument type + ++========+=======================================================================+ ++arg0 + :ref:`daBfgCore::NodeTracker ` implicit+ ++--------+-----------------------------------------------------------------------+ ++arg1 + :ref:`daBfgCore::NodeNameId ` const + ++--------+-----------------------------------------------------------------------+ + + +|function-daBfgCore-registerNode| + +.. _function-_at_daBfgCore_c__c_get_shader_variable_id_CIs: + +.. das:function:: get_shader_variable_id(arg0: string const implicit) + +get_shader_variable_id returns int + ++--------+---------------------+ ++argument+argument type + ++========+=====================+ ++arg0 +string const implicit+ ++--------+---------------------+ + + +|function-daBfgCore-get_shader_variable_id| + +.. _function-_at_daBfgCore_c__c_fill_slot_CE16_ls_daBfgCore_c__c_NameSpaceNameId_gr__CIs_CE16_ls_daBfgCore_c__c_NameSpaceNameId_gr__CIs: + +.. das:function:: fill_slot(arg0: NameSpaceNameId const; arg1: string const implicit; arg2: NameSpaceNameId const; arg3: string const implicit) + ++--------+--------------------------------------------------------------------------+ ++argument+argument type + ++========+==========================================================================+ ++arg0 + :ref:`daBfgCore::NameSpaceNameId ` const+ ++--------+--------------------------------------------------------------------------+ ++arg1 +string const implicit + ++--------+--------------------------------------------------------------------------+ ++arg2 + :ref:`daBfgCore::NameSpaceNameId ` const+ ++--------+--------------------------------------------------------------------------+ ++arg3 +string const implicit + ++--------+--------------------------------------------------------------------------+ + + +|function-daBfgCore-fill_slot| + +.. _function-_at_daBfgCore_c__c_resetNode_IH_ls_daBfgCore_c__c_NodeHandle_gr_: + +.. das:function:: resetNode(arg0: NodeHandle implicit) + ++--------+---------------------------------------------------------------------+ ++argument+argument type + ++========+=====================================================================+ ++arg0 + :ref:`daBfgCore::NodeHandle ` implicit+ ++--------+---------------------------------------------------------------------+ + + +|function-daBfgCore-resetNode| + + diff --git a/_sources/api-references/dagor-render/index/daBFG/das.rst.txt b/_sources/api-references/dagor-render/index/daBFG/das.rst.txt new file mode 100644 index 000000000..648c9ace3 --- /dev/null +++ b/_sources/api-references/dagor-render/index/daBFG/das.rst.txt @@ -0,0 +1,1358 @@ +.. + This is auto generated file. See daBfg/api/das/docs + +.. _stdlib_daBfg: + +========== +Bfg in das +========== + +To use daBfg inside daScript you need first of all compile daBfg library with ``DABFG_ENABLE_DAS_INTERGRATION = yes``. + +This will compile das module that you can import with ``require daBfg.bfg_ecs`` +or ``require daBfg``, whether you need ecs support or not. + +DaScript daBfg methods are very similar to cpp methods, so usage will be the same, but with das syntax instead. + +:ref:`daBfg::registerNode ` registers node with provided name and declaration callback. +Returns :ref:`NodeHandle `. + +Declaration callback is a das lambda with one argument :ref:`Registry `. +It returns execute lambda. + +Inside declaration callback you describe node using registry argument. + +Cpp declaration code + +.. code-block:: cpp + + registry.orderMeAfter("some_node") + registry.requestRenderPass().color("rt_tex") + +Will be in das + +.. code-block:: das + + registry |> orderMeAfter("some_node") + registry |> requestRenderPass |> color([[auto "rt_tex"]]) + +Example: + +.. code-block:: das + + require daBfg + + def register_debug_visualization_node(var handle : NodeHandle& |#) + handle <- root() |> registerNode(debug_visualization_node_name) <| @(var registry : Registry) + if is_forward_rendering() + registry |> requestRenderPass |> color([[auto[] "target_after_under_water_fog"]]) |> depthRo("depth_for_transparent_effects") + else + registry |> orderMeAfter("tracers_node") + registry |> orderMeBefore("transparent_scene_late_node") + registry |> requestRenderPass |> color([[auto[] "opaque_final_target"]]) |> depthRw("depth_for_transparency") + + registry |> requestState() |> setFrameBlock("global_frame") + return <- @ <| + worldRenderer_renderDebug() + +++++++++++++ +Type aliases +++++++++++++ + +.. _alias-VrsRateTexture: + +.. das:attribute:: VrsRateTexture is a variant type + ++----+------------------------------------------------------------------------------------+ ++some+ :ref:`daBfg::VirtualResourceSemiRequest ` + ++----+------------------------------------------------------------------------------------+ ++none+void? + ++----+------------------------------------------------------------------------------------+ + + +|typedef-daBfg-VrsRateTexture| + +.. _alias-VirtualAttachmentResource: + +.. das:attribute:: VirtualAttachmentResource is a variant type + ++------+--------------------------------------------+ ++resUid+ :ref:`daBfg::ResUid ` + ++------+--------------------------------------------+ ++name +string + ++------+--------------------------------------------+ + + +|typedef-daBfg-VirtualAttachmentResource| + +.. _alias-TextureResolution: + +.. das:attribute:: TextureResolution is a variant type + ++-------+--------------------------------------------------------------------------+ ++res +tuple + ++-------+--------------------------------------------------------------------------+ ++autoRes+ :ref:`daBfg::AutoResolutionRequest ` + ++-------+--------------------------------------------------------------------------+ + + +|typedef-daBfg-TextureResolution| + +.. _struct-daBfg-NameSpaceRequest: + +.. das:attribute:: NameSpaceRequest + + + +NameSpaceRequest fields are + ++-----------+-------------------------------------------------------------------------+ ++nameSpaceId+ :ref:`daBfgCore::NameSpaceNameId ` + ++-----------+-------------------------------------------------------------------------+ ++nodeId + :ref:`daBfgCore::NodeNameId ` + ++-----------+-------------------------------------------------------------------------+ ++registry + :ref:`daBfgCore::InternalRegistry ` ?+ ++-----------+-------------------------------------------------------------------------+ + + +|structure-daBfg-NameSpaceRequest| + +.. _struct-daBfg-Registry: + +.. das:attribute:: Registry + + : NameSpaceRequest + +Registry fields are + ++-----------+-------------------------------------------------------------------------+ ++nameSpaceId+ :ref:`daBfgCore::NameSpaceNameId ` + ++-----------+-------------------------------------------------------------------------+ ++nodeId + :ref:`daBfgCore::NodeNameId ` + ++-----------+-------------------------------------------------------------------------+ ++registry + :ref:`daBfgCore::InternalRegistry ` ?+ ++-----------+-------------------------------------------------------------------------+ + + +|structure-daBfg-Registry| + +.. _struct-daBfg-NameSpace: + +.. das:attribute:: NameSpace + + + +NameSpace fields are + ++-----------+--------------------------------------------------------------------+ ++nameSpaceId+ :ref:`daBfgCore::NameSpaceNameId ` + ++-----------+--------------------------------------------------------------------+ + + +|structure-daBfg-NameSpace| + +.. _struct-daBfg-ResUid: + +.. das:attribute:: ResUid + + + +ResUid fields are + ++-------+--------------------------------------------------------+ ++nameId + :ref:`daBfgCore::ResNameId ` + ++-------+--------------------------------------------------------+ ++history+bool + ++-------+--------------------------------------------------------+ + + +|structure-daBfg-ResUid| + +.. _struct-daBfg-VirtualResourceRequestBase: + +.. das:attribute:: VirtualResourceRequestBase + + + +VirtualResourceRequestBase fields are + ++--------+-------------------------------------------------------------------------+ ++registry+ :ref:`daBfgCore::InternalRegistry ` ?+ ++--------+-------------------------------------------------------------------------+ ++resUid + :ref:`daBfg::ResUid ` + ++--------+-------------------------------------------------------------------------+ ++nodeId + :ref:`daBfgCore::NodeNameId ` + ++--------+-------------------------------------------------------------------------+ + + +|structure-daBfg-VirtualResourceRequestBase| + +.. _struct-daBfg-VirtualResourceHandle: + +.. das:attribute:: VirtualResourceHandle + + + +VirtualResourceHandle fields are + ++--------+-------------------------------------------------------------------------+ ++registry+ :ref:`daBfgCore::InternalRegistry ` ?+ ++--------+-------------------------------------------------------------------------+ ++resUid + :ref:`daBfg::ResUid ` + ++--------+-------------------------------------------------------------------------+ + + +|structure-daBfg-VirtualResourceHandle| + +.. _struct-daBfg-VirtualResourceCreationSemiRequest: + +.. das:attribute:: VirtualResourceCreationSemiRequest + + : VirtualResourceRequestBase + +VirtualResourceCreationSemiRequest fields are + ++--------+-------------------------------------------------------------------------+ ++registry+ :ref:`daBfgCore::InternalRegistry ` ?+ ++--------+-------------------------------------------------------------------------+ ++resUid + :ref:`daBfg::ResUid ` + ++--------+-------------------------------------------------------------------------+ ++nodeId + :ref:`daBfgCore::NodeNameId ` + ++--------+-------------------------------------------------------------------------+ + + +|structure-daBfg-VirtualResourceCreationSemiRequest| + +.. _struct-daBfg-VirtualResourceSemiRequest: + +.. das:attribute:: VirtualResourceSemiRequest + + : VirtualResourceRequestBase + +VirtualResourceSemiRequest fields are + ++--------+-------------------------------------------------------------------------+ ++registry+ :ref:`daBfgCore::InternalRegistry ` ?+ ++--------+-------------------------------------------------------------------------+ ++resUid + :ref:`daBfg::ResUid ` + ++--------+-------------------------------------------------------------------------+ ++nodeId + :ref:`daBfgCore::NodeNameId ` + ++--------+-------------------------------------------------------------------------+ + + +|structure-daBfg-VirtualResourceSemiRequest| + +.. _struct-daBfg-VirtualResourceRequest: + +.. das:attribute:: VirtualResourceRequest + + : VirtualResourceRequestBase + +VirtualResourceRequest fields are + ++--------+-------------------------------------------------------------------------+ ++registry+ :ref:`daBfgCore::InternalRegistry ` ?+ ++--------+-------------------------------------------------------------------------+ ++resUid + :ref:`daBfg::ResUid ` + ++--------+-------------------------------------------------------------------------+ ++nodeId + :ref:`daBfgCore::NodeNameId ` + ++--------+-------------------------------------------------------------------------+ + + +|structure-daBfg-VirtualResourceRequest| + +.. _struct-daBfg-VirtualTextureHandle: + +.. das:attribute:: VirtualTextureHandle + + : VirtualResourceHandle + +VirtualTextureHandle fields are + ++--------+-------------------------------------------------------------------------+ ++registry+ :ref:`daBfgCore::InternalRegistry ` ?+ ++--------+-------------------------------------------------------------------------+ ++resUid + :ref:`daBfg::ResUid ` + ++--------+-------------------------------------------------------------------------+ + + +|structure-daBfg-VirtualTextureHandle| + +.. _struct-daBfg-VirtualBufferHandle: + +.. das:attribute:: VirtualBufferHandle + + : VirtualResourceHandle + +VirtualBufferHandle fields are + ++--------+-------------------------------------------------------------------------+ ++registry+ :ref:`daBfgCore::InternalRegistry ` ?+ ++--------+-------------------------------------------------------------------------+ ++resUid + :ref:`daBfg::ResUid ` + ++--------+-------------------------------------------------------------------------+ + + +|structure-daBfg-VirtualBufferHandle| + +.. _struct-daBfg-VirtualTextureRequest: + +.. das:attribute:: VirtualTextureRequest + + : VirtualResourceRequest + +VirtualTextureRequest fields are + ++--------+-------------------------------------------------------------------------+ ++registry+ :ref:`daBfgCore::InternalRegistry ` ?+ ++--------+-------------------------------------------------------------------------+ ++resUid + :ref:`daBfg::ResUid ` + ++--------+-------------------------------------------------------------------------+ ++nodeId + :ref:`daBfgCore::NodeNameId ` + ++--------+-------------------------------------------------------------------------+ + + +|structure-daBfg-VirtualTextureRequest| + +.. _struct-daBfg-VirtualBufferRequest: + +.. das:attribute:: VirtualBufferRequest + + : VirtualResourceRequest + +VirtualBufferRequest fields are + ++--------+-------------------------------------------------------------------------+ ++registry+ :ref:`daBfgCore::InternalRegistry ` ?+ ++--------+-------------------------------------------------------------------------+ ++resUid + :ref:`daBfg::ResUid ` + ++--------+-------------------------------------------------------------------------+ ++nodeId + :ref:`daBfgCore::NodeNameId ` + ++--------+-------------------------------------------------------------------------+ + + +|structure-daBfg-VirtualBufferRequest| + +.. _struct-daBfg-StateRequest: + +.. das:attribute:: StateRequest + + + +StateRequest fields are + ++--------+-------------------------------------------------------------------------+ ++registry+ :ref:`daBfgCore::InternalRegistry ` ?+ ++--------+-------------------------------------------------------------------------+ ++nodeId + :ref:`daBfgCore::NodeNameId ` + ++--------+-------------------------------------------------------------------------+ + + +|structure-daBfg-StateRequest| + +.. _struct-daBfg-VrsRequirements: + +.. das:attribute:: VrsRequirements + + + +VrsRequirements fields are + ++--------------+--------------------------------------------------------------------------------------------+ ++rateX +uint + ++--------------+--------------------------------------------------------------------------------------------+ ++rateY +uint + ++--------------+--------------------------------------------------------------------------------------------+ ++rateTexture + :ref:`VrsRateTexture ` + ++--------------+--------------------------------------------------------------------------------------------+ ++vertexCombiner+ :ref:`daBfgCore::VariableRateShadingCombiner ` + ++--------------+--------------------------------------------------------------------------------------------+ ++pixelCombiner + :ref:`daBfgCore::VariableRateShadingCombiner ` + ++--------------+--------------------------------------------------------------------------------------------+ + + +|structure-daBfg-VrsRequirements| + +.. _struct-daBfg-VirtualPassRequest: + +.. das:attribute:: VirtualPassRequest + + + +VirtualPassRequest fields are + ++--------+-------------------------------------------------------------------------+ ++registry+ :ref:`daBfgCore::InternalRegistry ` ?+ ++--------+-------------------------------------------------------------------------+ ++nodeId + :ref:`daBfgCore::NodeNameId ` + ++--------+-------------------------------------------------------------------------+ + + +|structure-daBfg-VirtualPassRequest| + +.. _struct-daBfg-VirtualAttachmentRequest: + +.. das:attribute:: VirtualAttachmentRequest + + + +VirtualAttachmentRequest fields are + ++--------+--------------------------------------------------------------------+ ++resource+ :ref:`VirtualAttachmentResource ` + ++--------+--------------------------------------------------------------------+ ++mipLevel+uint + ++--------+--------------------------------------------------------------------+ ++layer +uint + ++--------+--------------------------------------------------------------------+ + + +|structure-daBfg-VirtualAttachmentRequest| + +.. _struct-daBfg-AutoResolutionRequest: + +.. das:attribute:: AutoResolutionRequest + + + +AutoResolutionRequest fields are + ++-------------+-------------------------------------------------------------------------+ ++autoResTypeId+ :ref:`daBfgCore::AutoResTypeNameId ` + ++-------------+-------------------------------------------------------------------------+ ++multiplier +float + ++-------------+-------------------------------------------------------------------------+ ++registry + :ref:`daBfgCore::InternalRegistry ` ?+ ++-------------+-------------------------------------------------------------------------+ + + +|structure-daBfg-AutoResolutionRequest| + +.. _struct-daBfg-Texture2dCreateInfo: + +.. das:attribute:: Texture2dCreateInfo + + + +Texture2dCreateInfo fields are + ++-------------+----------------------------------------------------+ ++resolution + :ref:`TextureResolution ` + ++-------------+----------------------------------------------------+ ++creationFlags+uint + ++-------------+----------------------------------------------------+ ++mipLevels +uint + ++-------------+----------------------------------------------------+ + + +|structure-daBfg-Texture2dCreateInfo| + +.. _struct-daBfg-BufferCreateInfo: + +.. das:attribute:: BufferCreateInfo + + + +BufferCreateInfo fields are + ++------------+----+ ++elementSize +uint+ ++------------+----+ ++elementCount+uint+ ++------------+----+ ++flags +uint+ ++------------+----+ ++format +uint+ ++------------+----+ + + +|structure-daBfg-BufferCreateInfo| + +.. _struct-daBfg-NamedSlot: + +.. das:attribute:: NamedSlot + + + +NamedSlot fields are + ++----+------+ ++name+string+ ++----+------+ + + +|structure-daBfg-NamedSlot| + ++++++++++++++++++++ +Top level functions ++++++++++++++++++++ + + * :ref:`root () : daBfg::NameSpace ` + * :ref:`/ (self:daBfg::NameSpace -const;child_name:string const) : daBfg::NameSpace ` + * :ref:`fillSlot (self:daBfg::NameSpace -const;slot:daBfg::NamedSlot const;res_name_space:daBfg::NameSpace const;res_name:string const) : void ` + * :ref:`registerNode (self:daBfg::NameSpace -const;name:string const;declaration_callback:lambda\<(var reg:daBfg::Registry -const):lambda\\> -const) : daBfgCore::NodeHandle ` + * :ref:`root (self:daBfg::Registry -const) : daBfg::NameSpaceRequest ` + * :ref:`/ (self:daBfg::NameSpaceRequest -const;child_name:string const) : daBfg::NameSpaceRequest ` + +.. _function-_at_daBfg_c__c_root: + +.. das:function:: root() + +root returns :ref:`daBfg::NameSpace ` + +|function-daBfg-root| + +.. _function-_at_daBfg_c__c_/_S_ls_daBfg_c__c_NameSpace_gr__Cs: + +.. das:function:: operator /(self: NameSpace; child_name: string const) + +/ returns :ref:`daBfg::NameSpace ` + ++----------+--------------------------------------------------+ ++argument +argument type + ++==========+==================================================+ ++self + :ref:`daBfg::NameSpace ` + ++----------+--------------------------------------------------+ ++child_name+string const + ++----------+--------------------------------------------------+ + + +|function-daBfg-/| + +.. _function-_at_daBfg_c__c_fillSlot_S_ls_daBfg_c__c_NameSpace_gr__CS_ls_daBfg_c__c_NamedSlot_gr__CS_ls_daBfg_c__c_NameSpace_gr__Cs: + +.. das:function:: fillSlot(self: NameSpace; slot: NamedSlot const; res_name_space: NameSpace const; res_name: string const) + ++--------------+--------------------------------------------------------+ ++argument +argument type + ++==============+========================================================+ ++self + :ref:`daBfg::NameSpace ` + ++--------------+--------------------------------------------------------+ ++slot + :ref:`daBfg::NamedSlot ` const+ ++--------------+--------------------------------------------------------+ ++res_name_space+ :ref:`daBfg::NameSpace ` const+ ++--------------+--------------------------------------------------------+ ++res_name +string const + ++--------------+--------------------------------------------------------+ + + +|function-daBfg-fillSlot| + +.. _function-_at_daBfg_c__c_registerNode_S_ls_daBfg_c__c_NameSpace_gr__Cs_N_ls_reg_gr_0_ls_S_ls_daBfg_c__c_Registry_gr__gr_1_ls_1_ls_v_gr__at__gr__at_: + +.. das:function:: registerNode(self: NameSpace; name: string const; declaration_callback: lambda<(var reg:daBfg::Registry -const):lambda>) + +registerNode returns :ref:`daBfgCore::NodeHandle ` + ++--------------------+-----------------------------------------------------------------------+ ++argument +argument type + ++====================+=======================================================================+ ++self + :ref:`daBfg::NameSpace ` + ++--------------------+-----------------------------------------------------------------------+ ++name +string const + ++--------------------+-----------------------------------------------------------------------+ ++declaration_callback+lambda<(reg: :ref:`daBfg::Registry ` ):lambda<>>+ ++--------------------+-----------------------------------------------------------------------+ + + +|function-daBfg-registerNode| + +.. _function-_at_daBfg_c__c_root_S_ls_daBfg_c__c_Registry_gr_: + +.. das:function:: root(self: Registry) + +root returns :ref:`daBfg::NameSpaceRequest ` + ++--------+------------------------------------------------+ ++argument+argument type + ++========+================================================+ ++self + :ref:`daBfg::Registry ` + ++--------+------------------------------------------------+ + + +|function-daBfg-root| + +.. _function-_at_daBfg_c__c_/_S_ls_daBfg_c__c_NameSpaceRequest_gr__Cs: + +.. das:function:: operator /(self: NameSpaceRequest; child_name: string const) + +/ returns :ref:`daBfg::NameSpaceRequest ` + ++----------+----------------------------------------------------------------+ ++argument +argument type + ++==========+================================================================+ ++self + :ref:`daBfg::NameSpaceRequest ` + ++----------+----------------------------------------------------------------+ ++child_name+string const + ++----------+----------------------------------------------------------------+ + + +|function-daBfg-/| + ++++++++++++++++++++++ +Registry manipulation ++++++++++++++++++++++ + + * :ref:`orderMeBefore (self:daBfg::Registry -const;name:string const) : daBfg::Registry ` + * :ref:`orderMeBefore (self:daBfg::Registry -const;names:array\ const) : daBfg::Registry ` + * :ref:`orderMeAfter (self:daBfg::Registry -const;name:string const) : daBfg::Registry ` + * :ref:`orderMeAfter (self:daBfg::Registry -const;names:array\ const) : daBfg::Registry ` + * :ref:`setPriority (self:daBfg::Registry -const;priority:int const) : daBfg::Registry ` + * :ref:`multiplex (self:daBfg::Registry -const;multiplexing_mode:daBfgCore::MultiplexingMode const) : daBfg::Registry ` + * :ref:`executionHas (self:daBfg::Registry -const;side_effect:daBfgCore::SideEffect const) : daBfg::Registry ` + * :ref:`create (self:daBfg::Registry -const;name:string const;history:daBfgCore::History const) : daBfg::VirtualResourceCreationSemiRequest ` + * :ref:`getResolution (self:daBfg::NameSpaceRequest -const;type_name:string const;multiplier:float const) : daBfg::AutoResolutionRequest ` + * :ref:`read (self:daBfg::NameSpaceRequest -const;name:string const) : daBfg::VirtualResourceSemiRequest ` + * :ref:`read (self:daBfg::NameSpaceRequest -const;slot:daBfg::NamedSlot const) : daBfg::VirtualResourceSemiRequest ` + * :ref:`history (self:daBfg::NameSpaceRequest -const;name:string -const) : daBfg::VirtualResourceSemiRequest ` + * :ref:`modify (self:daBfg::NameSpaceRequest -const;name:string const) : daBfg::VirtualResourceSemiRequest ` + * :ref:`modify (self:daBfg::NameSpaceRequest -const;slot:daBfg::NamedSlot const) : daBfg::VirtualResourceSemiRequest ` + * :ref:`rename (self:daBfg::NameSpaceRequest -const;from:string const;to:string const;history:daBfgCore::History const) : daBfg::VirtualResourceSemiRequest ` + * :ref:`get (resolution:daBfg::AutoResolutionRequest const) : int2 ` + * :ref:`requestState (self:daBfg::Registry -const) : daBfg::StateRequest ` + * :ref:`requestRenderPass (self:daBfg::Registry -const) : daBfg::VirtualPassRequest ` + +.. _function-_at_daBfg_c__c_orderMeBefore_S_ls_daBfg_c__c_Registry_gr__Cs: + +.. das:function:: orderMeBefore(self: Registry; name: string const) + +orderMeBefore returns :ref:`daBfg::Registry ` + ++--------+------------------------------------------------+ ++argument+argument type + ++========+================================================+ ++self + :ref:`daBfg::Registry ` + ++--------+------------------------------------------------+ ++name +string const + ++--------+------------------------------------------------+ + + +|function-daBfg-orderMeBefore| + +.. _function-_at_daBfg_c__c_orderMeBefore_S_ls_daBfg_c__c_Registry_gr__C1_ls_s_gr_A: + +.. das:function:: orderMeBefore(self: Registry; names: array const) + +orderMeBefore returns :ref:`daBfg::Registry ` + ++--------+------------------------------------------------+ ++argument+argument type + ++========+================================================+ ++self + :ref:`daBfg::Registry ` + ++--------+------------------------------------------------+ ++names +array const + ++--------+------------------------------------------------+ + + +|function-daBfg-orderMeBefore| + +.. _function-_at_daBfg_c__c_orderMeAfter_S_ls_daBfg_c__c_Registry_gr__Cs: + +.. das:function:: orderMeAfter(self: Registry; name: string const) + +orderMeAfter returns :ref:`daBfg::Registry ` + ++--------+------------------------------------------------+ ++argument+argument type + ++========+================================================+ ++self + :ref:`daBfg::Registry ` + ++--------+------------------------------------------------+ ++name +string const + ++--------+------------------------------------------------+ + + +|function-daBfg-orderMeAfter| + +.. _function-_at_daBfg_c__c_orderMeAfter_S_ls_daBfg_c__c_Registry_gr__C1_ls_s_gr_A: + +.. das:function:: orderMeAfter(self: Registry; names: array const) + +orderMeAfter returns :ref:`daBfg::Registry ` + ++--------+------------------------------------------------+ ++argument+argument type + ++========+================================================+ ++self + :ref:`daBfg::Registry ` + ++--------+------------------------------------------------+ ++names +array const + ++--------+------------------------------------------------+ + + +|function-daBfg-orderMeAfter| + +.. _function-_at_daBfg_c__c_setPriority_S_ls_daBfg_c__c_Registry_gr__Ci: + +.. das:function:: setPriority(self: Registry; priority: int const) + +setPriority returns :ref:`daBfg::Registry ` + ++--------+------------------------------------------------+ ++argument+argument type + ++========+================================================+ ++self + :ref:`daBfg::Registry ` + ++--------+------------------------------------------------+ ++priority+int const + ++--------+------------------------------------------------+ + + +|function-daBfg-setPriority| + +.. _function-_at_daBfg_c__c_multiplex_S_ls_daBfg_c__c_Registry_gr__CE_ls_daBfgCore_c__c_MultiplexingMode_gr_: + +.. das:function:: multiplex(self: Registry; multiplexing_mode: MultiplexingMode const) + +multiplex returns :ref:`daBfg::Registry ` + ++-----------------+----------------------------------------------------------------------------+ ++argument +argument type + ++=================+============================================================================+ ++self + :ref:`daBfg::Registry ` + ++-----------------+----------------------------------------------------------------------------+ ++multiplexing_mode+ :ref:`daBfgCore::MultiplexingMode ` const+ ++-----------------+----------------------------------------------------------------------------+ + + +|function-daBfg-multiplex| + +.. _function-_at_daBfg_c__c_executionHas_S_ls_daBfg_c__c_Registry_gr__CE8_ls_daBfgCore_c__c_SideEffect_gr_: + +.. das:function:: executionHas(self: Registry; side_effect: SideEffect const) + +executionHas returns :ref:`daBfg::Registry ` + ++-----------+----------------------------------------------------------------+ ++argument +argument type + ++===========+================================================================+ ++self + :ref:`daBfg::Registry ` + ++-----------+----------------------------------------------------------------+ ++side_effect+ :ref:`daBfgCore::SideEffect ` const+ ++-----------+----------------------------------------------------------------+ + + +|function-daBfg-executionHas| + +.. _function-_at_daBfg_c__c_create_S_ls_daBfg_c__c_Registry_gr__Cs_CE8_ls_daBfgCore_c__c_History_gr_: + +.. das:function:: create(self: Registry; name: string const; history: History const) + +create returns :ref:`daBfg::VirtualResourceCreationSemiRequest ` + ++--------+----------------------------------------------------------+ ++argument+argument type + ++========+==========================================================+ ++self + :ref:`daBfg::Registry ` + ++--------+----------------------------------------------------------+ ++name +string const + ++--------+----------------------------------------------------------+ ++history + :ref:`daBfgCore::History ` const+ ++--------+----------------------------------------------------------+ + + +|function-daBfg-create| + +.. _function-_at_daBfg_c__c_getResolution_S_ls_daBfg_c__c_NameSpaceRequest_gr__Cs_Cf: + +.. das:function:: getResolution(self: NameSpaceRequest; type_name: string const; multiplier: float const) + +getResolution returns :ref:`daBfg::AutoResolutionRequest ` + ++----------+----------------------------------------------------------------+ ++argument +argument type + ++==========+================================================================+ ++self + :ref:`daBfg::NameSpaceRequest ` + ++----------+----------------------------------------------------------------+ ++type_name +string const + ++----------+----------------------------------------------------------------+ ++multiplier+float const + ++----------+----------------------------------------------------------------+ + + +|function-daBfg-getResolution| + +.. _function-_at_daBfg_c__c_read_S_ls_daBfg_c__c_NameSpaceRequest_gr__Cs: + +.. das:function:: read(self: NameSpaceRequest; name: string const) + +read returns :ref:`daBfg::VirtualResourceSemiRequest ` + ++--------+----------------------------------------------------------------+ ++argument+argument type + ++========+================================================================+ ++self + :ref:`daBfg::NameSpaceRequest ` + ++--------+----------------------------------------------------------------+ ++name +string const + ++--------+----------------------------------------------------------------+ + + +|function-daBfg-read| + +.. _function-_at_daBfg_c__c_read_S_ls_daBfg_c__c_NameSpaceRequest_gr__CS_ls_daBfg_c__c_NamedSlot_gr_: + +.. das:function:: read(self: NameSpaceRequest; slot: NamedSlot const) + +read returns :ref:`daBfg::VirtualResourceSemiRequest ` + ++--------+----------------------------------------------------------------+ ++argument+argument type + ++========+================================================================+ ++self + :ref:`daBfg::NameSpaceRequest ` + ++--------+----------------------------------------------------------------+ ++slot + :ref:`daBfg::NamedSlot ` const + ++--------+----------------------------------------------------------------+ + + +|function-daBfg-read| + +.. _function-_at_daBfg_c__c_history_S_ls_daBfg_c__c_NameSpaceRequest_gr__s: + +.. das:function:: history(self: NameSpaceRequest; name: string) + +history returns :ref:`daBfg::VirtualResourceSemiRequest ` + ++--------+----------------------------------------------------------------+ ++argument+argument type + ++========+================================================================+ ++self + :ref:`daBfg::NameSpaceRequest ` + ++--------+----------------------------------------------------------------+ ++name +string + ++--------+----------------------------------------------------------------+ + + +|function-daBfg-history| + +.. _function-_at_daBfg_c__c_modify_S_ls_daBfg_c__c_NameSpaceRequest_gr__Cs: + +.. das:function:: modify(self: NameSpaceRequest; name: string const) + +modify returns :ref:`daBfg::VirtualResourceSemiRequest ` + ++--------+----------------------------------------------------------------+ ++argument+argument type + ++========+================================================================+ ++self + :ref:`daBfg::NameSpaceRequest ` + ++--------+----------------------------------------------------------------+ ++name +string const + ++--------+----------------------------------------------------------------+ + + +|function-daBfg-modify| + +.. _function-_at_daBfg_c__c_modify_S_ls_daBfg_c__c_NameSpaceRequest_gr__CS_ls_daBfg_c__c_NamedSlot_gr_: + +.. das:function:: modify(self: NameSpaceRequest; slot: NamedSlot const) + +modify returns :ref:`daBfg::VirtualResourceSemiRequest ` + ++--------+----------------------------------------------------------------+ ++argument+argument type + ++========+================================================================+ ++self + :ref:`daBfg::NameSpaceRequest ` + ++--------+----------------------------------------------------------------+ ++slot + :ref:`daBfg::NamedSlot ` const + ++--------+----------------------------------------------------------------+ + + +|function-daBfg-modify| + +.. _function-_at_daBfg_c__c_rename_S_ls_daBfg_c__c_NameSpaceRequest_gr__Cs_Cs_CE8_ls_daBfgCore_c__c_History_gr_: + +.. das:function:: rename(self: NameSpaceRequest; from: string const; to: string const; history: History const) + +rename returns :ref:`daBfg::VirtualResourceSemiRequest ` + ++--------+----------------------------------------------------------------+ ++argument+argument type + ++========+================================================================+ ++self + :ref:`daBfg::NameSpaceRequest ` + ++--------+----------------------------------------------------------------+ ++from +string const + ++--------+----------------------------------------------------------------+ ++to +string const + ++--------+----------------------------------------------------------------+ ++history + :ref:`daBfgCore::History ` const + ++--------+----------------------------------------------------------------+ + + +|function-daBfg-rename| + +.. _function-_at_daBfg_c__c_get_CS_ls_daBfg_c__c_AutoResolutionRequest_gr_: + +.. das:function:: get(resolution: AutoResolutionRequest const) + +get returns int2 + ++----------+--------------------------------------------------------------------------------+ ++argument +argument type + ++==========+================================================================================+ ++resolution+ :ref:`daBfg::AutoResolutionRequest ` const+ ++----------+--------------------------------------------------------------------------------+ + + +|function-daBfg-get| + +.. _function-_at_daBfg_c__c_requestState_S_ls_daBfg_c__c_Registry_gr_: + +.. das:function:: requestState(self: Registry) + +requestState returns :ref:`daBfg::StateRequest ` + ++--------+------------------------------------------------+ ++argument+argument type + ++========+================================================+ ++self + :ref:`daBfg::Registry ` + ++--------+------------------------------------------------+ + + +|function-daBfg-requestState| + +.. _function-_at_daBfg_c__c_requestRenderPass_S_ls_daBfg_c__c_Registry_gr_: + +.. das:function:: requestRenderPass(self: Registry) + +requestRenderPass returns :ref:`daBfg::VirtualPassRequest ` + ++--------+------------------------------------------------+ ++argument+argument type + ++========+================================================+ ++self + :ref:`daBfg::Registry ` + ++--------+------------------------------------------------+ + + +|function-daBfg-requestRenderPass| + +++++++++++++++++++++ +Request manipulation +++++++++++++++++++++ + + * :ref:`texture (self:daBfg::VirtualResourceCreationSemiRequest -const;info:daBfg::Texture2dCreateInfo const) : daBfg::VirtualTextureRequest ` + * :ref:`texture (self:daBfg::VirtualResourceSemiRequest -const) : daBfg::VirtualTextureRequest ` + * :ref:`buffer (self:daBfg::VirtualResourceCreationSemiRequest -const;info:daBfg::BufferCreateInfo const) : daBfg::VirtualBufferRequest ` + * :ref:`buffer (self:daBfg::VirtualResourceSemiRequest -const) : daBfg::VirtualBufferRequest ` + * :ref:`blob (self:daBfg::VirtualResourceSemiRequest -const) : daBfg::VirtualResourceRequest ` + * :ref:`modifyRequest (self:daBfg::VirtualResourceRequest -const;modifier:block\<(var request:daBfgCore::ResourceRequest -const):void\> const) : void ` + * :ref:`handle (self:daBfg::VirtualTextureRequest const) : daBfg::VirtualTextureHandle ` + * :ref:`handle (self:daBfg::VirtualBufferRequest const) : daBfg::VirtualBufferHandle ` + * :ref:`view (handle:daBfg::VirtualTextureHandle const) : DagorResPtr::ManagedTexView ` + * :ref:`view (handle:daBfg::VirtualBufferHandle const) : DagorResPtr::ManagedBufView ` + * :ref:`setFrameBlock (self:daBfg::StateRequest -const;name:string const) : daBfg::StateRequest ` + * :ref:`setSceneBlock (self:daBfg::StateRequest -const;name:string const) : daBfg::StateRequest ` + * :ref:`setObjectBlock (self:daBfg::StateRequest -const;name:string const) : daBfg::StateRequest ` + * :ref:`allowWireFrame (self:daBfg::StateRequest -const) : daBfg::StateRequest ` + * :ref:`allowVrs (self:daBfg::StateRequest -const;vrs:daBfg::VrsRequirements const) : daBfg::StateRequest ` + * :ref:`enableOverride (self:daBfg::StateRequest -const;das_override:DagorDriver3D::OverrideRenderState const) : daBfg::StateRequest ` + * :ref:`color (self:daBfg::VirtualPassRequest -const;attachments:array\ const) : daBfg::VirtualPassRequest ` + * :ref:`optional (self:auto(TT) -const) : TT ` + * :ref:`useAs (self:auto(TT) -const;usageType:daBfgCore::Usage const) : TT ` + * :ref:`atStage (self:auto(TT) -const;stage:daBfgCore::Stage const) : TT ` + * :ref:`bindToShaderVar (self:auto(TT) -const;name:string const) : TT ` + * :ref:`color (self:daBfg::VirtualPassRequest -const;requests:daBfg::VirtualTextureRequest const[]) : daBfg::VirtualPassRequest ` + * :ref:`color (self:daBfg::VirtualPassRequest -const;names:string const[]) : daBfg::VirtualPassRequest ` + * :ref:`depthRw (self:daBfg::VirtualPassRequest -const;attachment:auto const) : daBfg::VirtualPassRequest ` + * :ref:`depthRo (self:daBfg::VirtualPassRequest -const;attachment:auto const) : daBfg::VirtualPassRequest ` + +.. _function-_at_daBfg_c__c_texture_S_ls_daBfg_c__c_VirtualResourceCreationSemiRequest_gr__CS_ls_daBfg_c__c_Texture2dCreateInfo_gr_: + +.. das:function:: texture(self: VirtualResourceCreationSemiRequest; info: Texture2dCreateInfo const) + +texture returns :ref:`daBfg::VirtualTextureRequest ` + ++--------+----------------------------------------------------------------------------------------------------+ ++argument+argument type + ++========+====================================================================================================+ ++self + :ref:`daBfg::VirtualResourceCreationSemiRequest ` + ++--------+----------------------------------------------------------------------------------------------------+ ++info + :ref:`daBfg::Texture2dCreateInfo ` const + ++--------+----------------------------------------------------------------------------------------------------+ + + +|function-daBfg-texture| + +.. _function-_at_daBfg_c__c_texture_S_ls_daBfg_c__c_VirtualResourceSemiRequest_gr_: + +.. das:function:: texture(self: VirtualResourceSemiRequest) + +texture returns :ref:`daBfg::VirtualTextureRequest ` + ++--------+------------------------------------------------------------------------------------+ ++argument+argument type + ++========+====================================================================================+ ++self + :ref:`daBfg::VirtualResourceSemiRequest ` + ++--------+------------------------------------------------------------------------------------+ + + +|function-daBfg-texture| + +.. _function-_at_daBfg_c__c_buffer_S_ls_daBfg_c__c_VirtualResourceCreationSemiRequest_gr__CS_ls_daBfg_c__c_BufferCreateInfo_gr_: + +.. das:function:: buffer(self: VirtualResourceCreationSemiRequest; info: BufferCreateInfo const) + +buffer returns :ref:`daBfg::VirtualBufferRequest ` + ++--------+----------------------------------------------------------------------------------------------------+ ++argument+argument type + ++========+====================================================================================================+ ++self + :ref:`daBfg::VirtualResourceCreationSemiRequest ` + ++--------+----------------------------------------------------------------------------------------------------+ ++info + :ref:`daBfg::BufferCreateInfo ` const + ++--------+----------------------------------------------------------------------------------------------------+ + + +|function-daBfg-buffer| + +.. _function-_at_daBfg_c__c_buffer_S_ls_daBfg_c__c_VirtualResourceSemiRequest_gr_: + +.. das:function:: buffer(self: VirtualResourceSemiRequest) + +buffer returns :ref:`daBfg::VirtualBufferRequest ` + ++--------+------------------------------------------------------------------------------------+ ++argument+argument type + ++========+====================================================================================+ ++self + :ref:`daBfg::VirtualResourceSemiRequest ` + ++--------+------------------------------------------------------------------------------------+ + + +|function-daBfg-buffer| + +.. _function-_at_daBfg_c__c_blob_S_ls_daBfg_c__c_VirtualResourceSemiRequest_gr_: + +.. das:function:: blob(self: VirtualResourceSemiRequest) + +blob returns :ref:`daBfg::VirtualResourceRequest ` + ++--------+------------------------------------------------------------------------------------+ ++argument+argument type + ++========+====================================================================================+ ++self + :ref:`daBfg::VirtualResourceSemiRequest ` + ++--------+------------------------------------------------------------------------------------+ + + +|function-daBfg-blob| + +.. _function-_at_daBfg_c__c_modifyRequest_S_ls_daBfg_c__c_VirtualResourceRequest_gr__CN_ls_request_gr_0_ls_H_ls_daBfgCore_c__c_ResourceRequest_gr__gr_1_ls_v_gr__builtin_: + +.. das:function:: modifyRequest(self: VirtualResourceRequest; modifier: block<(var request:daBfgCore::ResourceRequest -const):void> const) + ++--------+--------------------------------------------------------------------------------------------------+ ++argument+argument type + ++========+==================================================================================================+ ++self + :ref:`daBfg::VirtualResourceRequest ` + ++--------+--------------------------------------------------------------------------------------------------+ ++modifier+block<(request: :ref:`daBfgCore::ResourceRequest ` ):void> const+ ++--------+--------------------------------------------------------------------------------------------------+ + + +|function-daBfg-modifyRequest| + +.. _function-_at_daBfg_c__c_handle_CS_ls_daBfg_c__c_VirtualTextureRequest_gr_: + +.. das:function:: handle(self: VirtualTextureRequest const) + +handle returns :ref:`daBfg::VirtualTextureHandle ` + ++--------+--------------------------------------------------------------------------------+ ++argument+argument type + ++========+================================================================================+ ++self + :ref:`daBfg::VirtualTextureRequest ` const+ ++--------+--------------------------------------------------------------------------------+ + + +|function-daBfg-handle| + +.. _function-_at_daBfg_c__c_handle_CS_ls_daBfg_c__c_VirtualBufferRequest_gr_: + +.. das:function:: handle(self: VirtualBufferRequest const) + +handle returns :ref:`daBfg::VirtualBufferHandle ` + ++--------+------------------------------------------------------------------------------+ ++argument+argument type + ++========+==============================================================================+ ++self + :ref:`daBfg::VirtualBufferRequest ` const+ ++--------+------------------------------------------------------------------------------+ + + +|function-daBfg-handle| + +.. _function-_at_daBfg_c__c_view_CS_ls_daBfg_c__c_VirtualTextureHandle_gr_: + +.. das:function:: view(handle: VirtualTextureHandle const) + +view returns :ref:`DagorResPtr::ManagedTexView ` + ++--------+------------------------------------------------------------------------------+ ++argument+argument type + ++========+==============================================================================+ ++handle + :ref:`daBfg::VirtualTextureHandle ` const+ ++--------+------------------------------------------------------------------------------+ + + +|function-daBfg-view| + +.. _function-_at_daBfg_c__c_view_CS_ls_daBfg_c__c_VirtualBufferHandle_gr_: + +.. das:function:: view(handle: VirtualBufferHandle const) + +view returns :ref:`DagorResPtr::ManagedBufView ` + ++--------+----------------------------------------------------------------------------+ ++argument+argument type + ++========+============================================================================+ ++handle + :ref:`daBfg::VirtualBufferHandle ` const+ ++--------+----------------------------------------------------------------------------+ + + +|function-daBfg-view| + +.. _function-_at_daBfg_c__c_setFrameBlock_S_ls_daBfg_c__c_StateRequest_gr__Cs: + +.. das:function:: setFrameBlock(self: StateRequest; name: string const) + +setFrameBlock returns :ref:`daBfg::StateRequest ` + ++--------+--------------------------------------------------------+ ++argument+argument type + ++========+========================================================+ ++self + :ref:`daBfg::StateRequest ` + ++--------+--------------------------------------------------------+ ++name +string const + ++--------+--------------------------------------------------------+ + + +|function-daBfg-setFrameBlock| + +.. _function-_at_daBfg_c__c_setSceneBlock_S_ls_daBfg_c__c_StateRequest_gr__Cs: + +.. das:function:: setSceneBlock(self: StateRequest; name: string const) + +setSceneBlock returns :ref:`daBfg::StateRequest ` + ++--------+--------------------------------------------------------+ ++argument+argument type + ++========+========================================================+ ++self + :ref:`daBfg::StateRequest ` + ++--------+--------------------------------------------------------+ ++name +string const + ++--------+--------------------------------------------------------+ + + +|function-daBfg-setSceneBlock| + +.. _function-_at_daBfg_c__c_setObjectBlock_S_ls_daBfg_c__c_StateRequest_gr__Cs: + +.. das:function:: setObjectBlock(self: StateRequest; name: string const) + +setObjectBlock returns :ref:`daBfg::StateRequest ` + ++--------+--------------------------------------------------------+ ++argument+argument type + ++========+========================================================+ ++self + :ref:`daBfg::StateRequest ` + ++--------+--------------------------------------------------------+ ++name +string const + ++--------+--------------------------------------------------------+ + + +|function-daBfg-setObjectBlock| + +.. _function-_at_daBfg_c__c_allowWireFrame_S_ls_daBfg_c__c_StateRequest_gr_: + +.. das:function:: allowWireFrame(self: StateRequest) + +allowWireFrame returns :ref:`daBfg::StateRequest ` + ++--------+--------------------------------------------------------+ ++argument+argument type + ++========+========================================================+ ++self + :ref:`daBfg::StateRequest ` + ++--------+--------------------------------------------------------+ + + +|function-daBfg-allowWireFrame| + +.. _function-_at_daBfg_c__c_allowVrs_S_ls_daBfg_c__c_StateRequest_gr__CS_ls_daBfg_c__c_VrsRequirements_gr_: + +.. das:function:: allowVrs(self: StateRequest; vrs: VrsRequirements const) + +allowVrs returns :ref:`daBfg::StateRequest ` + ++--------+--------------------------------------------------------------------+ ++argument+argument type + ++========+====================================================================+ ++self + :ref:`daBfg::StateRequest ` + ++--------+--------------------------------------------------------------------+ ++vrs + :ref:`daBfg::VrsRequirements ` const+ ++--------+--------------------------------------------------------------------+ + + +|function-daBfg-allowVrs| + +.. _function-_at_daBfg_c__c_enableOverride_S_ls_daBfg_c__c_StateRequest_gr__CS_ls_DagorDriver3D_c__c_OverrideRenderState_gr_: + +.. das:function:: enableOverride(self: StateRequest; das_override: OverrideRenderState const) + +enableOverride returns :ref:`daBfg::StateRequest ` + ++------------+--------------------------------------------------------------------------------------------+ ++argument +argument type + ++============+============================================================================================+ ++self + :ref:`daBfg::StateRequest ` + ++------------+--------------------------------------------------------------------------------------------+ ++das_override+ :ref:`DagorDriver3D::OverrideRenderState ` const+ ++------------+--------------------------------------------------------------------------------------------+ + + +|function-daBfg-enableOverride| + +.. _function-_at_daBfg_c__c_color_S_ls_daBfg_c__c_VirtualPassRequest_gr__C1_ls_S_ls_daBfg_c__c_VirtualAttachmentRequest_gr__gr_A: + +.. das:function:: color(self: VirtualPassRequest; attachments: array const) + +color returns :ref:`daBfg::VirtualPassRequest ` + ++-----------+---------------------------------------------------------------------------------------------+ ++argument +argument type + ++===========+=============================================================================================+ ++self + :ref:`daBfg::VirtualPassRequest ` + ++-----------+---------------------------------------------------------------------------------------------+ ++attachments+array< :ref:`daBfg::VirtualAttachmentRequest ` > const+ ++-----------+---------------------------------------------------------------------------------------------+ + + +|function-daBfg-color| + +.. _function-_at_daBfg_c__c_optional_Y_ls_TT_gr_.: + +.. das:function:: optional(self: auto(TT)) + +optional returns TT + ++--------+-------------+ ++argument+argument type+ ++========+=============+ ++self +auto(TT) + ++--------+-------------+ + + +|function-daBfg-optional| + +.. _function-_at_daBfg_c__c_useAs_Y_ls_TT_gr_._CE8_ls_daBfgCore_c__c_Usage_gr_: + +.. das:function:: useAs(self: auto(TT); usageType: Usage const) + +useAs returns TT + ++---------+------------------------------------------------------+ ++argument +argument type + ++=========+======================================================+ ++self +auto(TT) + ++---------+------------------------------------------------------+ ++usageType+ :ref:`daBfgCore::Usage ` const+ ++---------+------------------------------------------------------+ + + +|function-daBfg-useAs| + +.. _function-_at_daBfg_c__c_atStage_Y_ls_TT_gr_._CE8_ls_daBfgCore_c__c_Stage_gr_: + +.. das:function:: atStage(self: auto(TT); stage: Stage const) + +atStage returns TT + ++--------+------------------------------------------------------+ ++argument+argument type + ++========+======================================================+ ++self +auto(TT) + ++--------+------------------------------------------------------+ ++stage + :ref:`daBfgCore::Stage ` const+ ++--------+------------------------------------------------------+ + + +|function-daBfg-atStage| + +.. _function-_at_daBfg_c__c_bindToShaderVar_Y_ls_TT_gr_._Cs: + +.. das:function:: bindToShaderVar(self: auto(TT); name: string const) + +bindToShaderVar returns TT + ++--------+-------------+ ++argument+argument type+ ++========+=============+ ++self +auto(TT) + ++--------+-------------+ ++name +string const + ++--------+-------------+ + + +|function-daBfg-bindToShaderVar| + +.. _function-_at_daBfg_c__c_color_S_ls_daBfg_c__c_VirtualPassRequest_gr__C[-1]S_ls_daBfg_c__c_VirtualTextureRequest_gr_: + +.. das:function:: color(self: VirtualPassRequest; requests: VirtualTextureRequest const[]) + +color returns :ref:`daBfg::VirtualPassRequest ` + ++--------+------------------------------------------------------------------------------------+ ++argument+argument type + ++========+====================================================================================+ ++self + :ref:`daBfg::VirtualPassRequest ` + ++--------+------------------------------------------------------------------------------------+ ++requests+ :ref:`daBfg::VirtualTextureRequest ` const[-1]+ ++--------+------------------------------------------------------------------------------------+ + + +|function-daBfg-color| + +.. _function-_at_daBfg_c__c_color_S_ls_daBfg_c__c_VirtualPassRequest_gr__C[-1]s: + +.. das:function:: color(self: VirtualPassRequest; names: string const[]) + +color returns :ref:`daBfg::VirtualPassRequest ` + ++--------+--------------------------------------------------------------------+ ++argument+argument type + ++========+====================================================================+ ++self + :ref:`daBfg::VirtualPassRequest ` + ++--------+--------------------------------------------------------------------+ ++names +string const[-1] + ++--------+--------------------------------------------------------------------+ + + +|function-daBfg-color| + +.. _function-_at_daBfg_c__c_depthRw_S_ls_daBfg_c__c_VirtualPassRequest_gr__C.: + +.. das:function:: depthRw(self: VirtualPassRequest; attachment: auto const) + +depthRw returns :ref:`daBfg::VirtualPassRequest ` + ++----------+--------------------------------------------------------------------+ ++argument +argument type + ++==========+====================================================================+ ++self + :ref:`daBfg::VirtualPassRequest ` + ++----------+--------------------------------------------------------------------+ ++attachment+auto const + ++----------+--------------------------------------------------------------------+ + + +|function-daBfg-depthRw| + +.. _function-_at_daBfg_c__c_depthRo_S_ls_daBfg_c__c_VirtualPassRequest_gr__C.: + +.. das:function:: depthRo(self: VirtualPassRequest; attachment: auto const) + +depthRo returns :ref:`daBfg::VirtualPassRequest ` + ++----------+--------------------------------------------------------------------+ ++argument +argument type + ++==========+====================================================================+ ++self + :ref:`daBfg::VirtualPassRequest ` + ++----------+--------------------------------------------------------------------+ ++attachment+auto const + ++----------+--------------------------------------------------------------------+ + + +|function-daBfg-depthRo| + + diff --git a/_sources/api-references/dagor-render/index/daBFG/declaringNodes.rst.txt b/_sources/api-references/dagor-render/index/daBFG/declaringNodes.rst.txt new file mode 100644 index 000000000..890c80e19 --- /dev/null +++ b/_sources/api-references/dagor-render/index/daBFG/declaringNodes.rst.txt @@ -0,0 +1,71 @@ +Declaring a Node +================================================= + +The basic syntax for creating a new node is as follows: + +.. code-block:: cpp + + auto handle = dabfg::register_node("node_name", DABFG_PP_NODE_SRC, + [](dabfg::Registry registry) + { + // use registry's methods to declare what your node does + return []() + { + // dispatch GPU commands + }; + }); + +The outer lambda is referred to as the *declaration callback* and is executed rarely, in most cases even once. +The declaration callback returns another lambda, referred to as the *execution callback*, which can be executed once or several times per frame depending on the current multiplexing settings. +See :doc:`runtime` for further information on runtime behavior. +Below is a comprehensive documentation of :cpp:class:`dabfg::Registry` and the related request builder objects. +These must be used inside the declaration callback for specifying the following data: + + * What resources your node is going to operate on, + * What it is going to do with them, + * What bindings it requires for executing it's work (shader resources, render targets, etc) + * What global state the node requires (e.g. shader blocks) + * Additional metadata (multiplexing mode, priority, explicit dependencies, etc) + +.. doxygenclass:: dabfg::Registry + :project: daBFG + :members: + +.. doxygenclass:: dabfg::NameSpaceRequest + :project: daBFG + :members: + +.. doxygenclass:: dabfg::AutoResolutionRequest + :project: daBFG + :members: + +.. doxygennamespace:: dabfg::multiplexing + :project: daBFG + :members: + +.. doxygenstruct:: dabfg::VrsRequirements + :project: daBFG + :members: + +.. doxygenclass:: dabfg::StateRequest + :project: daBFG + :members: + +.. doxygenfile:: resourceCreation.h + :project: daBFG + +.. doxygenclass:: dabfg::VirtualResourceCreationSemiRequest + :project: daBFG + :members: + +.. doxygenclass:: dabfg::VirtualResourceSemiRequest + :project: daBFG + :members: + +.. doxygenclass:: dabfg::VirtualResourceRequest + :project: daBFG + :members: + +.. doxygenclass:: dabfg::VirtualPassRequest + :project: daBFG + :members: diff --git a/_sources/api-references/dagor-render/index/daBFG/graphState.rst.txt b/_sources/api-references/dagor-render/index/daBFG/graphState.rst.txt new file mode 100644 index 000000000..5b69752bd --- /dev/null +++ b/_sources/api-references/dagor-render/index/daBFG/graphState.rst.txt @@ -0,0 +1,23 @@ +Controlling the Graph State +================================================= + +When a node is created using :cpp:func:`dabfg::register_node`, a handle +object is returned that must be used to control the lifetime of this +node. As soon as the handle is destroyed, the node is removed from the +graph. + +The recommended approach for managing handles is to use feature specific +daECS entities. The idea is to encapsulate all of the "settings" required +for creating a node for a feature as well as a handle for that node +inside a single entity and automatically re-create the node when the +settings change using ECS tracking capabilities. When the feature is +disabled, the entity is destroyed and the node is removed from the graph +automagically. + +Note also that the handles are generational, so it is safe to simply +assign a new node handle to a component without explicitly resetting the +old node handle. + +.. doxygenclass:: dabfg::NodeHandle + :project: daBFG + :members: diff --git a/_sources/api-references/dagor-render/index/daBFG/runtime.rst.txt b/_sources/api-references/dagor-render/index/daBFG/runtime.rst.txt new file mode 100644 index 000000000..8194e98e5 --- /dev/null +++ b/_sources/api-references/dagor-render/index/daBFG/runtime.rst.txt @@ -0,0 +1,31 @@ +Dispatching Work in Nodes at Runtime +================================================= + +The general aim of the daBfg API is to do as much boiler-plate stuff for you as possible. +It can automatically manage resources, bind them to shader vars, etc. +However, when porting legacy code to daBfg, it is often necessary to do some of the work yourself by getting direct access to FG-managed textures and buffers. +When working with CPU blobs, getting the data from inside them is often the primary concern. +To facilitate this, it is possible to extract a handle to a resource inside the declaration callback using the :func:`dabfg::VirtualResourceRequest::handle` method. +This handle should then be captured inside the execution callback and dereferenced to get access to the ManagedResView encapsulating a physical GPU resource and it's D3DRESID (acquired by registering it within the engine resource manager). + +.. code-block:: cpp + + auto handle = dabfg::register_node("node_name", DABFG_PP_NODE_SRC, + [](dabfg::Registry registry) + { + auto texHndl = registry.read("my_tex") + .texture() + .atStage(dabfg::Stage::PS) + .useAs(dabfg::Usage::SHADER_RESOURCE) + .handle(); // Is only callable after the stage/usage were specified + return [texHndl]() + { + legacy_code(texHndl.view()); + }; + }); + +Below is the full documentation of the VirtualResourceHandle class. + +.. doxygenclass:: dabfg::VirtualResourceHandle + :project: daBFG + :members: diff --git a/_sources/api-references/dagor-render/index/resMgr.rst.txt b/_sources/api-references/dagor-render/index/resMgr.rst.txt new file mode 100644 index 000000000..319cb98d2 --- /dev/null +++ b/_sources/api-references/dagor-render/index/resMgr.rst.txt @@ -0,0 +1,15 @@ +Managed Resources +================================================= + +Dagor provides a resource management system built on top of the d3d API. +This system handles streaming of texture assets (through integration with +the d3d API drivers), resource lifetime management, and indirect access +to resources through managed IDs or string names. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + resMgr/resid + resMgr/general + resMgr/textures diff --git a/_sources/api-references/dagor-render/index/resMgr/general.rst.txt b/_sources/api-references/dagor-render/index/resMgr/general.rst.txt new file mode 100644 index 000000000..0617cf5fe --- /dev/null +++ b/_sources/api-references/dagor-render/index/resMgr/general.rst.txt @@ -0,0 +1,5 @@ +General Resource Management +================================================= + +.. autodoxygenfile:: dag_resMgr.h + :project: d3dHelpers diff --git a/_sources/api-references/dagor-render/index/resMgr/resid.rst.txt b/_sources/api-references/dagor-render/index/resMgr/resid.rst.txt new file mode 100644 index 000000000..55b6cd492 --- /dev/null +++ b/_sources/api-references/dagor-render/index/resMgr/resid.rst.txt @@ -0,0 +1,19 @@ +Resource IDs +================================================= + +.. doxygenclass:: D3DRESID + :project: d3dAPI + :members: + :undoc-members: + +.. doxygenvariable:: BAD_D3DRESID + :project: d3dAPI + +Legacy aliases are also provided for compatibility with older code from +times where only textures were supported for resource management. + +.. doxygentypedef:: TEXTUREID + :project: d3dAPI + +.. doxygenvariable:: BAD_TEXTUREID + :project: d3dAPI diff --git a/_sources/api-references/dagor-render/index/resMgr/textures.rst.txt b/_sources/api-references/dagor-render/index/resMgr/textures.rst.txt new file mode 100644 index 000000000..f0a153476 --- /dev/null +++ b/_sources/api-references/dagor-render/index/resMgr/textures.rst.txt @@ -0,0 +1,5 @@ +Texture Management +================================================= + +.. autodoxygenfile:: dag_texMgr.h + :project: d3dHelpers diff --git a/_sources/api-references/dagor-render/index/resourceSlot.rst.txt b/_sources/api-references/dagor-render/index/resourceSlot.rst.txt new file mode 100644 index 000000000..b1045a4bc --- /dev/null +++ b/_sources/api-references/dagor-render/index/resourceSlot.rst.txt @@ -0,0 +1,60 @@ +Resource slots +================================================= + +resourceSlot is a declarative api for changing resource between +nodes in daBFG + +You can think about slot as "more virtual" frame graph resource. +This type of resource can change size and resource creation flags +while frame graph execution. + +Use slots instead of usual resources if: + +* Node have to read from and write to some resource at the same time +* Size or type of resource need to be changed in some node + +For work with resource slots you need: + +* Start from usual ``dabfg::register_node``, see :doc:`daBFG/declaringNodes` +* Replace ``dabfg::NodeHandle`` with ``resource_slot::NodeHandleWithSlotsAccess`` +* Replace ``dabfg::register_node`` with ``resource_slot::register_access`` + + * Declaration callback will get additional parameter ``resource_slot::State slotsState`` + +* Add ``action_list`` for the node: + + * If node creates a first resource for slot, node should declare + ``Create{slot_name, created_resource_name}`` + + * Node gets name of resource for filling the slot after node + with ``slotsState.resourceToCreateFor`` + + * If node updates a resource in the slot, node should declare + ``Update{slot_name, updated_resource_name, priority}`` + + * Node gets name of resource for filling the slot after node + with ``slotsState.resourceToCreateFor`` + * Node gets name of resource, that was in the slot before + the node with ``slotsState.resourceToReadFrom`` + * Nodes with higher priority will be scheduled after nodes with lower priority + + * If node read a resource from the slot, node should declare ``Read{slot_name}`` + + * Node gets name of resource, that was in the slot before + the node with ``slotsState.resourceToReadFrom`` + * Optionally, node can declare read priority for read intermediate + resource from the slot. By default read nodes will be scheduled + after all updating nodes. + +For detailed info see :doc:`resourceSlot/registerAccess` + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + resourceSlot/registerAccess + resourceSlot/nodeHandleWithSlotsAccess + resourceSlot/resolveAccess + resourceSlot/resource_slot_ecs + resourceSlot/resource_slot_das + resourceSlot/ResourceSlotCore \ No newline at end of file diff --git a/_sources/api-references/dagor-render/index/resourceSlot/ResourceSlotCore.rst.txt b/_sources/api-references/dagor-render/index/resourceSlot/ResourceSlotCore.rst.txt new file mode 100644 index 000000000..ccc85a1a1 --- /dev/null +++ b/_sources/api-references/dagor-render/index/resourceSlot/ResourceSlotCore.rst.txt @@ -0,0 +1,111 @@ +.. + This is auto generated file. See daBfg/api/das/docs + +.. _stdlib_ResourceSlotCore: + +=========================== +ResourceSlotCore das module +=========================== + +ResourceSlotCore das module gives low-level bindings to cpp. + + +++++++++++++++++++ +Handled structures +++++++++++++++++++ + +.. _handle-ResourceSlotCore-NodeHandleWithSlotsAccess: + +.. das:attribute:: NodeHandleWithSlotsAccess + +NodeHandleWithSlotsAccess property operators are + ++-----+----+ ++valid+bool+ ++-----+----+ + + +|structure_annotation-ResourceSlotCore-NodeHandleWithSlotsAccess| + +.. _handle-ResourceSlotCore-ActionList: + +.. das:attribute:: ActionList + +|structure_annotation-ResourceSlotCore-ActionList| + +.. _handle-ResourceSlotCore-State: + +.. das:attribute:: State + +|structure_annotation-ResourceSlotCore-State| + +++++++++++++++++ +State operations +++++++++++++++++ + + * :ref:`resourceToReadFrom (state:ResourceSlotCore::State const implicit;slot_name:string const implicit) : string const ` + * :ref:`resourceToCreateFor (state:ResourceSlotCore::State const implicit;slot_name:string const implicit) : string const ` + +.. _function-_at_ResourceSlotCore_c__c_resourceToReadFrom_CIH_ls_ResourceSlotCore_c__c_State_gr__CIs: + +.. das:function:: resourceToReadFrom(state: State const implicit; slot_name: string const implicit) + +resourceToReadFrom returns string const + ++---------+-------------------------------------------------------------------------------+ ++argument +argument type + ++=========+===============================================================================+ ++state + :ref:`ResourceSlotCore::State ` const implicit+ ++---------+-------------------------------------------------------------------------------+ ++slot_name+string const implicit + ++---------+-------------------------------------------------------------------------------+ + + +|function-ResourceSlotCore-resourceToReadFrom| + +.. _function-_at_ResourceSlotCore_c__c_resourceToCreateFor_CIH_ls_ResourceSlotCore_c__c_State_gr__CIs: + +.. das:function:: resourceToCreateFor(state: State const implicit; slot_name: string const implicit) + +resourceToCreateFor returns string const + ++---------+-------------------------------------------------------------------------------+ ++argument +argument type + ++=========+===============================================================================+ ++state + :ref:`ResourceSlotCore::State ` const implicit+ ++---------+-------------------------------------------------------------------------------+ ++slot_name+string const implicit + ++---------+-------------------------------------------------------------------------------+ + + +|function-ResourceSlotCore-resourceToCreateFor| + +++++++++++++++ +Handle methods +++++++++++++++ + + * :ref:`NodeHandleWithSlotsAccess () : ResourceSlotCore::NodeHandleWithSlotsAccess ` + * :ref:`reset (handle:ResourceSlotCore::NodeHandleWithSlotsAccess implicit) : void ` + +.. _function-_at_ResourceSlotCore_c__c_NodeHandleWithSlotsAccess: + +.. das:function:: NodeHandleWithSlotsAccess() + +NodeHandleWithSlotsAccess returns :ref:`ResourceSlotCore::NodeHandleWithSlotsAccess ` + +|function-ResourceSlotCore-NodeHandleWithSlotsAccess| + +.. _function-_at_ResourceSlotCore_c__c_reset_IH_ls_ResourceSlotCore_c__c_NodeHandleWithSlotsAccess_gr_: + +.. das:function:: reset(handle: NodeHandleWithSlotsAccess implicit) + ++--------+-----------------------------------------------------------------------------------------------------------------+ ++argument+argument type + ++========+=================================================================================================================+ ++handle + :ref:`ResourceSlotCore::NodeHandleWithSlotsAccess ` implicit+ ++--------+-----------------------------------------------------------------------------------------------------------------+ + + +|function-ResourceSlotCore-reset| + + diff --git a/_sources/api-references/dagor-render/index/resourceSlot/nodeHandleWithSlotsAccess.rst.txt b/_sources/api-references/dagor-render/index/resourceSlot/nodeHandleWithSlotsAccess.rst.txt new file mode 100644 index 000000000..2bd7f2e12 --- /dev/null +++ b/_sources/api-references/dagor-render/index/resourceSlot/nodeHandleWithSlotsAccess.rst.txt @@ -0,0 +1,6 @@ +Node and slot access handle +================================================= + +.. doxygenstruct:: resource_slot::NodeHandleWithSlotsAccess + :project: resourceSlot + :members: diff --git a/_sources/api-references/dagor-render/index/resourceSlot/registerAccess.rst.txt b/_sources/api-references/dagor-render/index/resourceSlot/registerAccess.rst.txt new file mode 100644 index 000000000..77c59ca43 --- /dev/null +++ b/_sources/api-references/dagor-render/index/resourceSlot/registerAccess.rst.txt @@ -0,0 +1,21 @@ +Register request for access to slots storage +============================================ + +.. doxygenfunction:: resource_slot::register_access + :project: resourceSlot + +.. doxygenstruct:: resource_slot::State + :project: resourceSlot + :members: + +.. doxygenstruct:: resource_slot::Create + :project: resourceSlot + :members: + +.. doxygenstruct:: resource_slot::Update + :project: resourceSlot + :members: + +.. doxygenstruct:: resource_slot::Read + :project: resourceSlot + :members: \ No newline at end of file diff --git a/_sources/api-references/dagor-render/index/resourceSlot/resolveAccess.rst.txt b/_sources/api-references/dagor-render/index/resourceSlot/resolveAccess.rst.txt new file mode 100644 index 000000000..999ef2006 --- /dev/null +++ b/_sources/api-references/dagor-render/index/resourceSlot/resolveAccess.rst.txt @@ -0,0 +1,6 @@ +Perform access requests +================================================= + + +.. doxygenfunction:: resource_slot::resolve_access + :project: resourceSlot diff --git a/_sources/api-references/dagor-render/index/resourceSlot/resource_slot_das.rst.txt b/_sources/api-references/dagor-render/index/resourceSlot/resource_slot_das.rst.txt new file mode 100644 index 000000000..0c9af81d1 --- /dev/null +++ b/_sources/api-references/dagor-render/index/resourceSlot/resource_slot_das.rst.txt @@ -0,0 +1,142 @@ +.. + This is auto generated file. See daBfg/api/das/docs + +.. _stdlib_resource_slot: + +==================== +Resource slot in das +==================== + +Storing in :ref:`das+ecs ` is more convenient. + +However, we can store :ref:`NodeHandleWithSlotsAccess ` outside ecs with `daBfg.resource_slot` module. + +Unfortunately, NodeHandleWithSlotsAccess can't be stored in local +das variable, because das doesn't call destructors for local types. +If you really need to store handle outside ecs, you have to store +handle in heap or make binding for storing it on cpp-side. + +Also hot-reload will work automatically for nodes inside +:ref:`ecs `. + +.. code-block:: das + + require daBfg.resource_slot + + some_cpp_binding <| $(var handle : NodeHandleWithSlotsAccess &) + some_struct.handle <- root() |> registerAccess("node_name", [[SlotActions update <- [{auto Update("slot_name", "texture_name", 100)}] ]]) <| @(slots_state; var registry : Registry) + + return <- @ <| + // some render code + + ++++++++++ +Constants ++++++++++ + +.. _global-resource_slot-DEFAULT_READ_PRIORITY: + +.. das:attribute:: DEFAULT_READ_PRIORITY = 2147483647 + +|variable-resource_slot-DEFAULT_READ_PRIORITY| + +.. _struct-resource_slot-Create: + +.. das:attribute:: Create + + + +Create fields are + ++--------+------+ ++slot +string+ ++--------+------+ ++resource+string+ ++--------+------+ + + +|structure-resource_slot-Create| + +.. _struct-resource_slot-Update: + +.. das:attribute:: Update + + + +Update fields are + ++--------+------+ ++slot +string+ ++--------+------+ ++resource+string+ ++--------+------+ ++priority+int + ++--------+------+ + + +|structure-resource_slot-Update| + +.. _struct-resource_slot-Read: + +.. das:attribute:: Read + + + +Read fields are + ++--------+------+ ++slot +string+ ++--------+------+ ++priority+int + ++--------+------+ + + +|structure-resource_slot-Read| + +.. _struct-resource_slot-SlotActions: + +.. das:attribute:: SlotActions + + + +SlotActions fields are + ++------+-------------------------------------------------------------------+ ++create+array< :ref:`resource_slot::Create ` >+ ++------+-------------------------------------------------------------------+ ++update+array< :ref:`resource_slot::Update ` >+ ++------+-------------------------------------------------------------------+ ++read +array< :ref:`resource_slot::Read ` > + ++------+-------------------------------------------------------------------+ + + +|structure-resource_slot-SlotActions| + ++++++++++++++++ +Register access ++++++++++++++++ + + * :ref:`registerAccess (self:daBfg::NameSpace -const;name:string const;slot_decl:resource_slot::SlotActions const;declaration_callback:lambda\<(slots_state:ResourceSlotCore::State const;var reg:daBfg::Registry -const):lambda\\> -const) : ResourceSlotCore::NodeHandleWithSlotsAccess ` + +.. _function-_at_resource_slot_c__c_registerAccess_S_ls_daBfg_c__c_NameSpace_gr__Cs_CS_ls_resource_slot_c__c_SlotActions_gr__N_ls_slots_state;reg_gr_0_ls_CH_ls_ResourceSlotCore_c__c_State_gr_;S_ls_daBfg_c__c_Registry_gr__gr_1_ls_1_ls_v_gr__at__gr__at_: + +.. das:function:: registerAccess(self: NameSpace; name: string const; slot_decl: SlotActions const; declaration_callback: lambda<(slots_state:ResourceSlotCore::State const;var reg:daBfg::Registry -const):lambda>) + +registerAccess returns :ref:`ResourceSlotCore::NodeHandleWithSlotsAccess ` + ++--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ ++argument +argument type + ++====================+==========================================================================================================================================================+ ++self + :ref:`daBfg::NameSpace ` + ++--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ ++name +string const + ++--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ ++slot_decl + :ref:`resource_slot::SlotActions ` const + ++--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ ++declaration_callback+lambda<(slots_state: :ref:`ResourceSlotCore::State ` const;reg: :ref:`daBfg::Registry ` ):lambda<>>+ ++--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ + + +|function-resource_slot-registerAccess| + + diff --git a/_sources/api-references/dagor-render/index/resourceSlot/resource_slot_ecs.rst.txt b/_sources/api-references/dagor-render/index/resourceSlot/resource_slot_ecs.rst.txt new file mode 100644 index 000000000..f731d4af2 --- /dev/null +++ b/_sources/api-references/dagor-render/index/resourceSlot/resource_slot_ecs.rst.txt @@ -0,0 +1,178 @@ +.. + This is auto generated file. See daBfg/api/das/docs + +.. _stdlib_resource_slot_ecs: + +======================== +Resource slot in das+ecs +======================== + +We can handle in ecs :ref:`NodeHandleWithSlotsAccess ` as we handle :ref:`NodeHandle ` + +Let's say we have das code for node: + +.. code-block:: das + + require daBfg.bfg_ecs + + [bfg_ecs_node(on_appear)] + def register_some_node(var some_node_handle : NodeHandle&) + + some_node_handle <- root() |> registerNode("some_node") <| @(slots_state; var registry : Registry) + + registry |> create("some_node_output_tex", History No) |> texture(...) + registry |> requestRenderPass |> color([[auto[] "some_node_output_tex"]]) + + registry |> read("some_node_input_tex") |> texture |> atStage(Stage POST_RASTER) |> bindToShaderVar("some_shader_var") + + return <- @ <| + query() <| $ [es] (some_renderer : PostFxRenderer) + some_renderer |> render + + +We can convert it to read texture from and write back to resource slot `slot_name`: + +.. code-block:: das + + require daBfg.resource_slot_ecs + + [resource_slot_ecs(on_appear)] + def register_some_node(var some_node_handle : NodeHandleWithSlotsAccess&) + + some_node_handle <- root() |> registerAccess("some_node", [[SlotActions update <- [{Update slot="slot_name", resource="some_node_output_tex", priority=100}] ]]) <| @(slots_state; var registry : Registry) + + registry |> create(slots_state |> resourceToCreateFor("slot_name"), History No) |> texture(...) + registry |> requestRenderPass |> color([[auto[] slots_state |> resourceToCreateFor("postfx_input_slot")]]) + + registry |> read(slots_state |> resourceToReadFrom("slot_name")) |> texture |> atStage(Stage POST_RASTER) |> bindToShaderVar("some_shader_var") + + return <- @ <| + query() <| $ [es] (some_renderer : PostFxRenderer) + some_renderer |> render + ++++++++++++++++++++++++ +Difference with bfg_ecs ++++++++++++++++++++++++ + ++---------------------------+---------------------------------------------------+ ++bfg_ecs +resource_slot_ecs + ++===========================+===================================================+ ++require daBfg.bfg_ecs + require daBfg.resource_slot_ecs + ++---------------------------+---------------------------------------------------+ ++[bfg_ecs_node(on_appear)] + [resource_slot_ecs(on_appear)] + ++---------------------------+---------------------------------------------------+ ++NodeHandle + NodeHandleWithSlotsAccess + ++---------------------------+---------------------------------------------------+ ++registerNode("node_name") + registerAccess("node_name", [[SlotActions ... ]]) + ++---------------------------+---------------------------------------------------+ ++@(var registry : Registry) + @(slots_state; var registry : Registry) + ++---------------------------+---------------------------------------------------+ ++"some_node_input_tex" + `slots_state |> resourceToReadFrom("slot_name")` + ++---------------------------+---------------------------------------------------+ ++"some_node_output_tex" + `slots_state |> resourceToCreateFor("slot_name")` + ++---------------------------+---------------------------------------------------+ + +:ref:`SlotActions ` have 3 possible properties: + +- create : array<:ref:`Create `> +- update : array<:ref:`Update `> +- read : array<:ref:`Read `> + +See also: :ref:`registerAccess ` + + +++++++++++++++++++++ +Function annotations +++++++++++++++++++++ + +.. _handle-resource_slot_ecs-resource_slot_ecs: + +.. das:attribute:: resource_slot_ecs + +|function_annotation-resource_slot_ecs-resource_slot_ecs| + ++++++++ +Classes ++++++++ + +.. _struct-resource_slot_ecs-ResourceSlotEcsAnnotation: + +.. das:attribute:: ResourceSlotEcsAnnotation : AstFunctionAnnotation + +|class-resource_slot_ecs-ResourceSlotEcsAnnotation| + +.. das:function:: ResourceSlotEcsAnnotation.apply(self: AstFunctionAnnotation; func: FunctionPtr; group: ModuleGroup; args: AnnotationArgumentList const; errors: das_string) + +apply returns bool + ++--------+--------------------------------------------------------------------------------+ ++argument+argument type + ++========+================================================================================+ ++self + :ref:`ast::AstFunctionAnnotation ` + ++--------+--------------------------------------------------------------------------------+ ++func + :ref:`FunctionPtr ` + ++--------+--------------------------------------------------------------------------------+ ++group + :ref:`rtti::ModuleGroup ` + ++--------+--------------------------------------------------------------------------------+ ++args + :ref:`rtti::AnnotationArgumentList ` const+ ++--------+--------------------------------------------------------------------------------+ ++errors + :ref:`builtin::das_string ` + ++--------+--------------------------------------------------------------------------------+ + + +|method-resource_slot_ecs-ResourceSlotEcsAnnotation.apply| + +.. das:function:: ResourceSlotEcsAnnotation.parseArgs(self: ResourceSlotEcsAnnotation; func: FunctionPtr; args: AnnotationArgumentList const; errors: das_string) + +parseArgs returns :ref:`resource_slot_ecs::ResSlotEcsAnnotationArgs ` + ++--------+----------------------------------------------------------------------------------------------------------+ ++argument+argument type + ++========+==========================================================================================================+ ++self + :ref:`resource_slot_ecs::ResourceSlotEcsAnnotation ` + ++--------+----------------------------------------------------------------------------------------------------------+ ++func + :ref:`FunctionPtr ` + ++--------+----------------------------------------------------------------------------------------------------------+ ++args + :ref:`rtti::AnnotationArgumentList ` const + ++--------+----------------------------------------------------------------------------------------------------------+ ++errors + :ref:`builtin::das_string ` + ++--------+----------------------------------------------------------------------------------------------------------+ + + +|method-resource_slot_ecs-ResourceSlotEcsAnnotation.parseArgs| + +.. das:function:: ResourceSlotEcsAnnotation.declareReloadCallback(self: ResourceSlotEcsAnnotation; func: FunctionPtr; parsed: ResSlotEcsAnnotationArgs const; args: AnnotationArgumentList const) + ++--------+--------------------------------------------------------------------------------------------------------------+ ++argument+argument type + ++========+==============================================================================================================+ ++self + :ref:`resource_slot_ecs::ResourceSlotEcsAnnotation ` + ++--------+--------------------------------------------------------------------------------------------------------------+ ++func + :ref:`FunctionPtr ` + ++--------+--------------------------------------------------------------------------------------------------------------+ ++parsed + :ref:`resource_slot_ecs::ResSlotEcsAnnotationArgs ` const+ ++--------+--------------------------------------------------------------------------------------------------------------+ ++args + :ref:`rtti::AnnotationArgumentList ` const + ++--------+--------------------------------------------------------------------------------------------------------------+ + + +|method-resource_slot_ecs-ResourceSlotEcsAnnotation.declareReloadCallback| + +.. das:function:: ResourceSlotEcsAnnotation.declareES(self: ResourceSlotEcsAnnotation; func: FunctionPtr; parsed: ResSlotEcsAnnotationArgs const; args: AnnotationArgumentList const) + ++--------+--------------------------------------------------------------------------------------------------------------+ ++argument+argument type + ++========+==============================================================================================================+ ++self + :ref:`resource_slot_ecs::ResourceSlotEcsAnnotation ` + ++--------+--------------------------------------------------------------------------------------------------------------+ ++func + :ref:`FunctionPtr ` + ++--------+--------------------------------------------------------------------------------------------------------------+ ++parsed + :ref:`resource_slot_ecs::ResSlotEcsAnnotationArgs ` const+ ++--------+--------------------------------------------------------------------------------------------------------------+ ++args + :ref:`rtti::AnnotationArgumentList ` const + ++--------+--------------------------------------------------------------------------------------------------------------+ + + +|method-resource_slot_ecs-ResourceSlotEcsAnnotation.declareES| + + diff --git a/_sources/api-references/index.rst.txt b/_sources/api-references/index.rst.txt new file mode 100644 index 000000000..698b50835 --- /dev/null +++ b/_sources/api-references/index.rst.txt @@ -0,0 +1,17 @@ + +API References and Documentation +========================================= + +Access detailed references for the Dagor Engine's API and documentation. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + dagor-render/index.rst + quirrel-modules/index.rst + dagor-engine-docs/index.rst + dagor-ecs/index.rst + dagor-dshl/index.rst + + diff --git a/_sources/api-references/quirrel-modules/dargbox/gamelib.input.rst.txt b/_sources/api-references/quirrel-modules/dargbox/gamelib.input.rst.txt new file mode 100644 index 000000000..8feebbb21 --- /dev/null +++ b/_sources/api-references/quirrel-modules/dargbox/gamelib.input.rst.txt @@ -0,0 +1,73 @@ +.. autogenerated + +************* +gamelib.input +************* + +module 'gamelib.input' + + + +*Source file: prog/tools/dargbox/gamelib/input.cpp* + +Usage:: + + let { get_button_state, get_mouse_pos, get_joystick_axis } = require("gamelib.input") + +or:: + + from "gamelib.input" import * + +.. code-block:: sq + + //'gamelib.input' exports: + { + function get_button_state(arg0): integer_or_float or string -> _undocumented_ + function get_mouse_pos() + function get_joystick_axis(arg0): integer_or_float -> _undocumented_ + } + + +.. sq:function:: function get_button_state(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float or string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer_or_float or string`` + +.. sq:function:: function get_mouse_pos() + +.. sq:function:: function get_joystick_axis(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer_or_float`` + +/; + + dag::ConstSpan::Entry> buttonsRawSlice = btn_name_map.getMapRaw(); + Sqrat::Table buttonNames(vm); + Sqrat::Table buttonIds(vm); + for (auto &e : buttonsRawSlice) + { + buttonIds.SetValue(e.name, e.id); + buttonNames.SetValue(e.id, e.name); + } + buttonIds.FreezeSelf(); + buttonNames.FreezeSelf(); + exports.SetValue("buttonIds", buttonIds); + exports.SetValue("buttonNames", buttonNames); + + module_mgr->addNativeModule("gamelib.input", exports); +} + +} // namespace input + +} // namespace gamelib + + diff --git a/_sources/api-references/quirrel-modules/dargbox/index.rst.txt b/_sources/api-references/quirrel-modules/dargbox/index.rst.txt new file mode 100644 index 000000000..befc6ab09 --- /dev/null +++ b/_sources/api-references/quirrel-modules/dargbox/index.rst.txt @@ -0,0 +1,15 @@ + +dargbox +======= + +Docs for DargBox - darg utlitiy application and sandbox. + + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + * + diff --git a/_sources/api-references/quirrel-modules/index.rst.txt b/_sources/api-references/quirrel-modules/index.rst.txt new file mode 100644 index 000000000..af6a127bd --- /dev/null +++ b/_sources/api-references/quirrel-modules/index.rst.txt @@ -0,0 +1,19 @@ + +Quirrel Modules Docs +========================================= + + +Contents: + +.. toctree:: + :maxdepth: 4 + :glob: + + quirrel-modules/quirrel_gamelibs/index.rst + quirrel-modules/quirrel_daECS/index.rst + quirrel-modules/darg_framework/index.rst + dargbox/index.rst + quirrel-modules/daNetGameLibs/index.rst + quirrel-modules/daNetGame/index.rst + quirrel-modules/soundSystem/index.rst + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/control.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/control.rst.txt new file mode 100644 index 000000000..30844885d --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/control.rst.txt @@ -0,0 +1,60 @@ +.. autogenerated + +******* +control +******* + +module 'control' + + + +*Source file: prog/daNetGame/input/inputControls.cpp* + +Usage:: + + let { SensScale } = require("control") + +or:: + + from "control" import * + +.. code-block:: sq + + //'control' exports: + { + class SensScale + } + + +--------------- +class SensScale +--------------- + +.. sq:attribute:: var SensScale.humanAiming + +.. sq:attribute:: var SensScale.humanTpsCam + +.. sq:attribute:: var SensScale.humanFpsCam + +.. sq:attribute:: var SensScale.vehicleCam + +.. sq:attribute:: var SensScale.planeCam + +/; + + + + + + + + Sqrat::Table controlTable(moduleMgr->getVM()); + controlTable // + .Func("save_config", save_config) + .Func("reset_to_default", reset_to_default) + .Func("restore_saved_config", restore_saved_config) + .Func("controls_were_reset", controls_were_reset) + .Func("clear_controls_were_reset", clear_controls_were_reset) + .Func("get_sens_scale", [] { return &sens_scale; }) +/* + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/index.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/index.rst.txt new file mode 100644 index 000000000..f5a99c3a1 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/index.rst.txt @@ -0,0 +1,15 @@ + +daNetGame +========= + +Docs for daNetGame Quirrel Modules. DaNetGame is framework for building games + + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + * + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/net.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/net.rst.txt new file mode 100644 index 000000000..fe8256955 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/net.rst.txt @@ -0,0 +1,49 @@ +.. autogenerated + +*** +net +*** + +module 'net' + + + +*Source file: prog/daNetGame/net/netBindSq.cpp* + +Usage:: + + let { get_user_id, add_entity_in_net_scope, get_sync_time, get_dasevent_net_version } = require("net") + +or:: + + from "net" import * + +.. code-block:: sq + + //'net' exports: + { + function get_user_id() + function add_entity_in_net_scope() + function get_sync_time() + function get_dasevent_net_version() + } + + +.. sq:function:: function get_user_id() + +.. sq:function:: function add_entity_in_net_scope() + +.. sq:function:: function get_sync_time() + +.. sq:function:: function get_dasevent_net_version() + +/; + tbl.SetValue("NET_PROTO_VERSION", NET_PROTO_VERSION); // todo: split by game? + + if (!existingModule) + module_mgr->addNativeModule("net", tbl); +} + +} // namespace net + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/settings.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/settings.rst.txt new file mode 100644 index 000000000..0b6378b0d --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/settings.rst.txt @@ -0,0 +1,254 @@ +.. autogenerated + +******** +settings +******** + +module 'settings' + + + +*Source file: prog/daNetGame/main/settings.cpp* + +Usage:: + + let { get_setting_by_blk_path, set_setting_by_blk_path, set_setting_by_blk_path_and_save, remove_setting_by_blk_path, save_settings, save_changed_settings, are_settings_changes_committed, commit_settings_changes } = require("settings") + +or:: + + from "settings" import * + +.. code-block:: sq + + //'settings' exports: + { + function get_setting_by_blk_path(arg0): string -> _undocumented_ + function set_setting_by_blk_path(arg0, arg1): string, any_type -> _undocumented_ + function set_setting_by_blk_path_and_save(arg0, arg1): string, any_type -> _undocumented_ + function remove_setting_by_blk_path(arg0, arg1): string, any_type -> _undocumented_ + function save_settings() + function save_changed_settings(changed_fields): Sqrat::Array -> null + function are_settings_changes_committed() + function commit_settings_changes(): -> null + } + + +.. sq:function:: function get_setting_by_blk_path(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: function set_setting_by_blk_path(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + ``nparamscheck:3`` + + ``typecheck mask: any_type, string, any_type`` + +.. sq:function:: function set_setting_by_blk_path_and_save(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + ``nparamscheck:3`` + + ``typecheck mask: any_type, string, any_type`` + +.. sq:function:: function remove_setting_by_blk_path(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string, any_type`` + +.. sq:function:: function save_settings() + + ``nparamscheck:1`` + +.. sq:function:: function save_changed_settings(changed_fields) + + :param changed_fields: + :type changed_fields: Sqrat::Array + + :return: null + +.. sq:function:: function are_settings_changes_committed() + +.. sq:function:: function commit_settings_changes() + + :return: null + +/; + return tbl; +} + +static void fill_changes_name_map(FastNameMap &name_map, const DataBlock &blk, const String &path_so_far) +{ + for (int i = 0; i < blk.blockCount(); i++) + { + const DataBlock &childBlk = *blk.getBlock(i); + fill_changes_name_map(name_map, childBlk, path_so_far + childBlk.getBlockName() + "/"); + } + + for (int i = 0; i < blk.paramCount(); i++) + name_map.addNameId(path_so_far + blk.getParamName(i)); +} + +static void settings_explorer_window() +{ + // Ideas: + // - search filter + + static bool editMode = false, autoApplyEdits = true, needCopySettings = true; + bool applyEdits = false; + + ImGui::BeginMenuBar(); + if (ImGui::BeginMenu("Actions")) + { + if (ImGui::MenuItem("Dump to log")) + { + DynamicMemGeneralSaveCB dump(framemem_ptr()); + dgs_get_settings()->saveToTextStream(dump); + dump.write("\0", 1); + debug("Settings dump:\n%s", dump.data()); + } + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("Modes")) + { + ImGui::Checkbox("Edit mode", &editMode); + ImGui::Checkbox("Auto-apply edits", &autoApplyEdits); + ImGui::EndMenu(); + } + if (editMode) + { + ImGui::SameLine(ImGui::GetWindowWidth() - (autoApplyEdits ? 70 : 200)); // Align buttons to the right + if (ImGui::Button(autoApplyEdits ? "Refresh" : "Revert and refresh")) + needCopySettings = true; + if (!autoApplyEdits) + if (ImGui::Button("Apply")) + applyEdits = true; + } + ImGui::EndMenuBar(); + + if (editMode) + { + static DataBlock settingsCopy; + static DataBlock settingsChanges; + if (needCopySettings) + { + settingsCopy.setFrom(::dgs_get_settings()); + settingsChanges.clearData(); + needCopySettings = false; + } + DataBlock settingsChangesThisFrame(framemem_ptr()); + ImGuiDagor::BlkEdit(&settingsCopy, &settingsChangesThisFrame, true, "dgs_get_settings"); + if (!settingsChangesThisFrame.isEmpty()) + { + merge_data_block_and_save_order(settingsCopy, settingsChangesThisFrame); + merge_data_block(settingsChanges, settingsChangesThisFrame); + } + if ((applyEdits || autoApplyEdits) && !settingsChanges.isEmpty()) + { + ::dgs_apply_config_blk(settingsChanges, true, false, true); + FastNameMap changesNameMap; + String pathSoFar; + fill_changes_name_map(changesNameMap, settingsChanges, pathSoFar); + apply_settings_changes(changesNameMap); + needCopySettings = true; + } + } + else + { + ImGuiDagor::Blk(::dgs_get_settings(), true, "dgs_get_settings"); + } +} + +static void gameparams_explorer_window() +{ + ImGui::BeginMenuBar(); + if (ImGui::BeginMenu("Actions")) + { + if (ImGui::MenuItem("Dump to log")) + { + DynamicMemGeneralSaveCB dump(framemem_ptr()); + dgs_get_game_params()->saveToTextStream(dump); + dump.write("\0", 1); + debug("GameParams dump:\n%s", dump.data()); + } + ImGui::EndMenu(); + } + ImGui::EndMenuBar(); + + ImGuiDagor::Blk(::dgs_get_game_params(), true, "dgs_get_game_params"); +} + +REGISTER_IMGUI_WINDOW_EX("Settings", "Settings explorer", nullptr, 100, ImGuiWindowFlags_MenuBar, settings_explorer_window); +REGISTER_IMGUI_WINDOW_EX("Settings", "GameParams explorer", nullptr, 100, ImGuiWindowFlags_MenuBar, gameparams_explorer_window); + + +void dgs_apply_changes_to_config(DataBlock &config_blk, bool need_merge_cmd, const OverrideFilter *override_filter) +{ + DataBlock cmdBlk; + if (need_merge_cmd) + dgs_apply_command_line_to_config(&cmdBlk, override_filter); + + // check cmd block first + const char *presetName = nullptr; + if (need_merge_cmd) + presetName = cmdBlk.getBlockByNameEx("graphics")->getStr("consolePreset", nullptr); + + if (presetName == nullptr) // From saved data + presetName = config_blk.getBlockByNameEx("graphics")->getStr("consolePreset", nullptr); + + if (presetName == nullptr) // From common settings for default + presetName = ::dgs_get_settings()->getBlockByNameEx("graphics")->getStr("consolePreset", nullptr); + + // first apply graphic preset settings + if (presetName != nullptr) + dgs_apply_console_preset_params(config_blk, presetName); + + // second apply cmd changes, overwrite all graphic preset settings if they are exist + if (need_merge_cmd) + merge_data_block(config_blk, cmdBlk); +} + +void dgs_apply_console_preset_params(DataBlock &config_blk, const char *preset_name) +{ + const char *presetsListBlockName = "consoleGraphicalPresets"; + const DataBlock *presetsBlk = ::dgs_get_settings()->getBlockByName(presetsListBlockName); + if (!presetsBlk) + { + debug("Not exist block '%s' in settings.blk. Cannot read '%s' console preset name.", presetsListBlockName, preset_name); + return; + } + + const DataBlock *presetParamsBlk = presetsBlk->getBlockByName(preset_name); + if (!presetParamsBlk) + { + debug("ERROR: Not found console preset '%s' in '%s' block.", preset_name, presetsListBlockName); + return; + } + + debug("Apply console preset '%s'.", preset_name); + merge_data_block(config_blk, *presetParamsBlk); +} + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/videomode.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/videomode.rst.txt new file mode 100644 index 000000000..bc78e17b5 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGame/videomode.rst.txt @@ -0,0 +1,145 @@ +.. autogenerated + +********* +videomode +********* + +module 'videomode' + + + +*Source file: prog/daNetGame/ui/uiVideoMode.cpp* + +Usage:: + + let { apply_video_settings, get_video_modes, get_available_monitors, get_monitor_info, get_current_window_resolution, is_fullscreen_enabled, get_dlss_state, get_xess_state, get_fsr_supported, get_dlssg_support_state, set_dlssg_suppressed, is_dlss_quality_available_at_resolution, is_xess_quality_available_at_resolution, get_performance_display_mode_support, get_low_latency_modes, is_inline_rt_supported, is_dx12, is_vulkan, is_gui_driver_select_enabled, is_upsampling, is_hdr_available, is_hdr_enabled, change_paper_white_nits, change_gamma, is_vrr_supported, get_default_static_resolution_scale, is_rendinst_tessellation_supported, is_only_low_gi_supported, is_hfr_supported } = require("videomode") + +or:: + + from "videomode" import * + +.. code-block:: sq + + //'videomode' exports: + { + function apply_video_settings(changed_fields): Sqrat::Array -> null + function get_video_modes() + function get_available_monitors() + function get_monitor_info() + function get_current_window_resolution() + function is_fullscreen_enabled() + function get_dlss_state() + function get_xess_state() + function get_fsr_supported() + function get_dlssg_support_state() + function set_dlssg_suppressed() + function is_dlss_quality_available_at_resolution() + function is_xess_quality_available_at_resolution() + function get_performance_display_mode_support() + function get_low_latency_modes() + function is_inline_rt_supported() + function is_dx12() + function is_vulkan() + function is_gui_driver_select_enabled() + function is_upsampling() + function is_hdr_available(arg0): string -> _undocumented_ + function is_hdr_enabled() + function change_paper_white_nits(field): sqObject -> null + function change_gamma(field): sqObject -> null + function is_vrr_supported() + function get_default_static_resolution_scale() + function is_rendinst_tessellation_supported() + function is_only_low_gi_supported() + function is_hfr_supported() + } + + +.. sq:function:: function apply_video_settings(changed_fields) + + :param changed_fields: + :type changed_fields: Sqrat::Array + + :return: null + +.. sq:function:: function get_video_modes() + +.. sq:function:: function get_available_monitors() + +.. sq:function:: function get_monitor_info() + +.. sq:function:: function get_current_window_resolution() + +.. sq:function:: function is_fullscreen_enabled() + +.. sq:function:: function get_dlss_state() + +.. sq:function:: function get_xess_state() + +.. sq:function:: function get_fsr_supported() + +.. sq:function:: function get_dlssg_support_state() + +.. sq:function:: function set_dlssg_suppressed() + +.. sq:function:: function is_dlss_quality_available_at_resolution() + +.. sq:function:: function is_xess_quality_available_at_resolution() + +.. sq:function:: function get_performance_display_mode_support() + +.. sq:function:: function get_low_latency_modes() + +.. sq:function:: function is_inline_rt_supported() + +.. sq:function:: function is_dx12() + +.. sq:function:: function is_vulkan() + +.. sq:function:: function is_gui_driver_select_enabled() + +.. sq:function:: function is_upsampling() + +.. sq:function:: function is_hdr_available(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: function is_hdr_enabled() + +.. sq:function:: function change_paper_white_nits(field) + + :param field: + :type field: sqObject + + :return: null + +.. sq:function:: function change_gamma(field) + + :param field: + :type field: sqObject + + :return: null + +.. sq:function:: function is_vrr_supported() + +.. sq:function:: function get_default_static_resolution_scale() + +.. sq:function:: function is_rendinst_tessellation_supported() + +.. sq:function:: function is_only_low_gi_supported() + +.. sq:function:: function is_hfr_supported() + +/; + moduleMgr->addNativeModule("videomode", aTable); +} + +} // namespace videomode + +} // namespace ui + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/gpuBenchmark.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/gpuBenchmark.rst.txt new file mode 100644 index 000000000..e598e676f --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/gpuBenchmark.rst.txt @@ -0,0 +1,97 @@ +.. autogenerated + +************ +gpuBenchmark +************ + +module 'gpuBenchmark' + + + +*Source file: prog/daNetGameLibs/gpu_benchmark/ui/gpuBenchmark.cpp* + +Usage:: + + let { initGraphicsAutodetect, isGpuBenchmarkRunning, startGpuBenchmark, closeGraphicsAutodetect, getGpuBenchmarkDuration, getPresetFor60Fps, getPresetForMaxQuality, getPresetForMaxFPS } = require("gpuBenchmark") + +or:: + + from "gpuBenchmark" import * + +.. code-block:: sq + + //'gpuBenchmark' exports: + { + function initGraphicsAutodetect(): -> null + function isGpuBenchmarkRunning(): -> bool + function startGpuBenchmark(): -> null + function closeGraphicsAutodetect(): -> null + function getGpuBenchmarkDuration(): -> float + function getPresetFor60Fps(): -> string + function getPresetForMaxQuality(): -> string + function getPresetForMaxFPS(): -> string + } + + +.. sq:function:: function initGraphicsAutodetect() + + :return: null + +.. sq:function:: function isGpuBenchmarkRunning() + + :return: bool + +.. sq:function:: function startGpuBenchmark() + + :return: null + +.. sq:function:: function closeGraphicsAutodetect() + + :return: null + +.. sq:function:: function getGpuBenchmarkDuration() + + :return: float + +.. sq:function:: function getPresetFor60Fps() + + :return: string + +.. sq:function:: function getPresetForMaxQuality() + + :return: string + +.. sq:function:: function getPresetForMaxFPS() + + :return: string + +/; + return tbl; +} + +} // namespace gpubenchmark + +static bool gpu_benchmark_console_handler(const char *argv[], int argc) +{ + int found = 0; + CONSOLE_CHECK_NAME("benchmark", "run_benchmak", 1, 1) + { + GraphicsAutodetect *graphicsAutodetect = gpubenchmark::get_graphics_autodetect(); + if (graphicsAutodetect) + { + console::print("Benchmark already running."); + } + else + { + gpubenchmark::make_graphics_autodetect_entity(gpubenchmark::Selfdestruct::YES); + console::print_d("Running benchmark for %ds...", (int)gpubenchmark::getGpuBenchmarkDuration()); + gpubenchmark::startGpuBenchmark(); + } + } + return found; +} + +REGISTER_CONSOLE_HANDLER(gpu_benchmark_console_handler); +extern const size_t ecs_pull_gpu_benchmark_ui = 0; + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/index.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/index.rst.txt new file mode 100644 index 000000000..f349e3971 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/index.rst.txt @@ -0,0 +1,15 @@ + +daNetGameLibs +============= + +Docs for daNetGameLibs Quirrel Modules. DaNetGameLibs can be used in any daNetGame based project + + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + * + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.debug.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.debug.rst.txt new file mode 100644 index 000000000..f9fdebfc5 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.debug.rst.txt @@ -0,0 +1,35 @@ +.. autogenerated + +********** +daRg.debug +********** + +module 'daRg.debug' + + + +*Source file: prog/gameLibs/daRg/scriptBinding.cpp* + +Usage:: + + let { } = require("daRg.debug") + +or:: + + from "daRg.debug" import * + +.. code-block:: sq + + //'daRg.debug' exports: + { + } + + + dargDebug.Func("requireFontSizeSlot", dbg_set_require_font_size_slot); + module_mgr->addNativeModule("daRg.debug", dargDebug); +} + +} // namespace binding + +} // namespace darg + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.rst.txt new file mode 100644 index 000000000..b74c5455b --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.rst.txt @@ -0,0 +1,1752 @@ +.. autogenerated + +**** +daRg +**** + +module 'daRg' + + + +*Source file: prog/gameLibs/daRg/elementRef.cpp* + +Usage:: + + let { KBD_BIT_CAPS_LOCK, KBD_BIT_NUM_LOCK, KBD_BIT_SCROLL_LOCK, PANEL_ANCHOR_NONE, PANEL_ANCHOR_SCENE, PANEL_ANCHOR_VRSPACE, PANEL_ANCHOR_HEAD, PANEL_ANCHOR_LEFTHAND, PANEL_ANCHOR_RIGHTHAND, PANEL_ANCHOR_ENTITY, PANEL_GEOMETRY_NONE, PANEL_GEOMETRY_RECTANGLE, PANEL_RC_NONE, PANEL_RC_FACE_LEFT_HAND, PANEL_RC_FACE_RIGHT_HAND, PANEL_RC_FACE_HEAD, PANEL_RC_FACE_HEAD_LOCK_Y, PANEL_RC_FACE_ENTITY, PANEL_RENDER_CAST_SHADOW, PANEL_RENDER_OPAQUE, PANEL_RENDER_ALWAYS_ON_TOP, GuiScene, SceneConfig, anim_start, anim_request_stop, anim_skip, anim_skip_delay, set_kb_focus, capture_kb_focus, calc_comp_size, move_mouse_cursor, get_mouse_cursor_pos, resolve_button_id, gui_scene, FLOW_PARENT_RELATIVE, FLOW_HORIZONTAL, FLOW_VERTICAL, ALIGN_LEFT, ALIGN_TOP, ALIGN_RIGHT, ALIGN_BOTTOM, ALIGN_CENTER, VECTOR_WIDTH, VECTOR_COLOR, VECTOR_FILL_COLOR, VECTOR_MID_COLOR, VECTOR_OUTER_LINE, VECTOR_CENTER_LINE, VECTOR_INNER_LINE, VECTOR_TM_OFFSET, VECTOR_TM_SCALE, VECTOR_LINE, VECTOR_LINE_INDENT_PX, VECTOR_LINE_INDENT_PCT, VECTOR_ELLIPSE, VECTOR_SECTOR, VECTOR_RECTANGLE, VECTOR_POLY, VECTOR_INVERSE_POLY, VECTOR_OPACITY, VECTOR_LINE_DASHED, VECTOR_NOP, VECTOR_QUADS, FFT_NONE, FFT_SHADOW, FFT_GLOW, FFT_BLUR, FFT_OUTLINE, O_HORIZONTAL, O_VERTICAL, TOVERFLOW_CLIP, TOVERFLOW_CHAR, TOVERFLOW_WORD, TOVERFLOW_LINE, DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT, EVENT_BREAK, EVENT_CONTINUE, GESTURE_DETECTOR_DRAG, GESTURE_DETECTOR_PINCH, GESTURE_DETECTOR_ROTATE, Linear, InQuad, OutQuad, InOutQuad, InCubic, OutCubic, InOutCubic, InQuintic, OutQuintic, InOutQuintic, InQuart, OutQuart, InOutQuart, InSine, OutSine, InOutSine, InCirc, OutCirc, InOutCirc, InExp, OutExp, InOutExp, InElastic, OutElastic, InOutElastic, InBack, OutBack, InOutBack, InBounce, OutBounce, InOutBounce, InOutBezier, CosineFull, InStep, OutStep, Blink, DoubleBlink, BlinkSin, BlinkCos, Discrete8, Shake4, Shake6, S_KB_FOCUS, S_HOVER, S_TOP_HOVER, S_ACTIVE, S_MOUSE_ACTIVE, S_KBD_ACTIVE, S_HOTKEY_ACTIVE, S_TOUCH_ACTIVE, S_JOYSTICK_ACTIVE, S_VR_ACTIVE, S_DRAG, MR_NONE, MR_T, MR_R, MR_B, MR_L, MR_LT, MR_RT, MR_LB, MR_RB, MR_AREA, FMT_NO_WRAP, FMT_KEEP_SPACES, FMT_IGNORE_TAGS, FMT_HIDE_ELLIPSIS, FMT_AS_IS, DEVID_KEYBOARD, DEVID_MOUSE, DEVID_JOYSTICK, DEVID_TOUCH, DEVID_VR, KEEP_ASPECT_NONE, KEEP_ASPECT_FIT, KEEP_ASPECT_FILL, AXIS_L_THUMB_H, AXIS_L_THUMB_V, AXIS_R_THUMB_H, AXIS_R_THUMB_V, AXIS_L_TRIGGER, AXIS_R_TRIGGER, AXIS_LR_TRIGGER, XMB_STOP, XMB_CONTINUE, R_PROCESSED, SIZE_TO_CONTENT, Fonts, AnimProp, color, bgColor, fgColor, fillColor, borderColor, opacity, rotate, scale, translate, fValue, picSaturate, brightness, Behaviors, ScrollHandler, JoystickAxisObservable, ElemGroup, Behavior, Picture, Immediate, FormattedText, IGenVideoPlayer, IGenSound, DragAndDropState, EventDataRect, MouseClickEventData, HotkeyEventData, HoverEventData, MoveToAreaTarget, Color, sw, sh, flex, fontH, pw, ph, elemw, elemh, locate_element_source, get_element_info, get_font_metrics, resolve_button, setFontDefHt, getFontDefHt, getFontInitialHt, calc_str_box, LottieAnimation, ElementRef } = require("daRg") + +or:: + + from "daRg" import * + +.. code-block:: sq + + //'daRg' exports: + { + const KBD_BIT_CAPS_LOCK + const KBD_BIT_NUM_LOCK + const KBD_BIT_SCROLL_LOCK + const PANEL_ANCHOR_NONE + const PANEL_ANCHOR_SCENE + const PANEL_ANCHOR_VRSPACE + const PANEL_ANCHOR_HEAD + const PANEL_ANCHOR_LEFTHAND + const PANEL_ANCHOR_RIGHTHAND + const PANEL_ANCHOR_ENTITY + const PANEL_GEOMETRY_NONE + const PANEL_GEOMETRY_RECTANGLE + const PANEL_RC_NONE + const PANEL_RC_FACE_LEFT_HAND + const PANEL_RC_FACE_RIGHT_HAND + const PANEL_RC_FACE_HEAD + const PANEL_RC_FACE_HEAD_LOCK_Y + const PANEL_RC_FACE_ENTITY + const PANEL_RENDER_CAST_SHADOW + const PANEL_RENDER_OPAQUE + const PANEL_RENDER_ALWAYS_ON_TOP + class GuiScene + class SceneConfig + function anim_start() + function anim_request_stop() + function anim_skip() + function anim_skip_delay() + function set_kb_focus() + function capture_kb_focus() + function calc_comp_size(arg0): null or table or closure_and_nativeclosure or class_instance or class -> _undocumented_ + function move_mouse_cursor(arg0, arg1, ...): any_type, bool, any_type -> _undocumented_ + function get_mouse_cursor_pos(arg0, ...): class_instance, any_type -> _undocumented_ + function resolve_button_id(arg0): string -> _undocumented_ + value gui_scene + const FLOW_PARENT_RELATIVE + const FLOW_HORIZONTAL + const FLOW_VERTICAL + const ALIGN_LEFT + const ALIGN_TOP + const ALIGN_RIGHT + const ALIGN_BOTTOM + const ALIGN_CENTER + const VECTOR_WIDTH + const VECTOR_COLOR + const VECTOR_FILL_COLOR + const VECTOR_MID_COLOR + const VECTOR_OUTER_LINE + const VECTOR_CENTER_LINE + const VECTOR_INNER_LINE + const VECTOR_TM_OFFSET + const VECTOR_TM_SCALE + const VECTOR_LINE + const VECTOR_LINE_INDENT_PX + const VECTOR_LINE_INDENT_PCT + const VECTOR_ELLIPSE + const VECTOR_SECTOR + const VECTOR_RECTANGLE + const VECTOR_POLY + const VECTOR_INVERSE_POLY + const VECTOR_OPACITY + const VECTOR_LINE_DASHED + const VECTOR_NOP + const VECTOR_QUADS + const FFT_NONE + const FFT_SHADOW + const FFT_GLOW + const FFT_BLUR + const FFT_OUTLINE + const O_HORIZONTAL + const O_VERTICAL + const TOVERFLOW_CLIP + const TOVERFLOW_CHAR + const TOVERFLOW_WORD + const TOVERFLOW_LINE + const DIR_UP + const DIR_DOWN + const DIR_LEFT + const DIR_RIGHT + const EVENT_BREAK + const EVENT_CONTINUE + const GESTURE_DETECTOR_DRAG + const GESTURE_DETECTOR_PINCH + const GESTURE_DETECTOR_ROTATE + const Linear + const InQuad + const OutQuad + const InOutQuad + const InCubic + const OutCubic + const InOutCubic + const InQuintic + const OutQuintic + const InOutQuintic + const InQuart + const OutQuart + const InOutQuart + const InSine + const OutSine + const InOutSine + const InCirc + const OutCirc + const InOutCirc + const InExp + const OutExp + const InOutExp + const InElastic + const OutElastic + const InOutElastic + const InBack + const OutBack + const InOutBack + const InBounce + const OutBounce + const InOutBounce + const InOutBezier + const CosineFull + const InStep + const OutStep + const Blink + const DoubleBlink + const BlinkSin + const BlinkCos + const Discrete8 + const Shake4 + const Shake6 + const S_KB_FOCUS + const S_HOVER + const S_TOP_HOVER + const S_ACTIVE + const S_MOUSE_ACTIVE + const S_KBD_ACTIVE + const S_HOTKEY_ACTIVE + const S_TOUCH_ACTIVE + const S_JOYSTICK_ACTIVE + const S_VR_ACTIVE + const S_DRAG + const MR_NONE + const MR_T + const MR_R + const MR_B + const MR_L + const MR_LT + const MR_RT + const MR_LB + const MR_RB + const MR_AREA + const FMT_NO_WRAP + const FMT_KEEP_SPACES + const FMT_IGNORE_TAGS + const FMT_HIDE_ELLIPSIS + const FMT_AS_IS + const DEVID_KEYBOARD + const DEVID_MOUSE + const DEVID_JOYSTICK + const DEVID_TOUCH + const DEVID_VR + const KEEP_ASPECT_NONE + const KEEP_ASPECT_FIT + const KEEP_ASPECT_FILL + const AXIS_L_THUMB_H + const AXIS_L_THUMB_V + const AXIS_R_THUMB_H + const AXIS_R_THUMB_V + const AXIS_L_TRIGGER + const AXIS_R_TRIGGER + const AXIS_LR_TRIGGER + const XMB_STOP + const XMB_CONTINUE + const R_PROCESSED + const SIZE_TO_CONTENT + value Fonts + enum AnimProp + value color + value bgColor + value fgColor + value fillColor + value borderColor + value opacity + value rotate + value scale + value translate + value fValue + value picSaturate + value brightness + table Behaviors + class ScrollHandler + class JoystickAxisObservable + class ElemGroup + class Behavior + class Picture + class Immediate + class FormattedText + class IGenVideoPlayer + class IGenSound + class DragAndDropState + class EventDataRect + class MouseClickEventData + class HotkeyEventData + class HoverEventData + class MoveToAreaTarget + function Color(arg0, arg1, arg2, arg3, ...): integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type -> _undocumented_ + function sw() + function sh() + function flex(arg0, ...): integer_or_float, any_type -> _undocumented_ + function fontH(arg0): integer_or_float -> _undocumented_ + function pw(arg0): integer_or_float -> _undocumented_ + function ph(arg0): integer_or_float -> _undocumented_ + function elemw(arg0): integer_or_float -> _undocumented_ + function elemh(arg0): integer_or_float -> _undocumented_ + function locate_element_source(arg0): class_instance -> _undocumented_ + function get_element_info(arg0): class_instance -> _undocumented_ + function get_font_metrics(arg0, ...): integer, any_type -> _undocumented_ + function resolve_button(fontId, fontHt): integer, float -> table + function setFontDefHt(font_name, pix_ht): string, integer -> bool + function getFontDefHt(font_name): string -> integer + function getFontInitialHt(font_name): string -> integer + function calc_str_box(element_or_text, element_or_style): string|closure_and_nativeclosure|table, table|closure_and_nativeclosure|null -> array + class LottieAnimation + class ElementRef + } + + +.. sq:attribute:: const KBD_BIT_CAPS_LOCK = 1 + +.. sq:attribute:: const KBD_BIT_NUM_LOCK = 2 + +.. sq:attribute:: const KBD_BIT_SCROLL_LOCK = 4 + +.. sq:attribute:: const PANEL_ANCHOR_NONE = int(PanelAnchor::None) + +.. sq:attribute:: const PANEL_ANCHOR_SCENE = int(PanelAnchor::Scene) + +.. sq:attribute:: const PANEL_ANCHOR_VRSPACE = int(PanelAnchor::VRSpace) + +.. sq:attribute:: const PANEL_ANCHOR_HEAD = int(PanelAnchor::Head) + +.. sq:attribute:: const PANEL_ANCHOR_LEFTHAND = int(PanelAnchor::LeftHand) + +.. sq:attribute:: const PANEL_ANCHOR_RIGHTHAND = int(PanelAnchor::RightHand) + +.. sq:attribute:: const PANEL_ANCHOR_ENTITY = int(PanelAnchor::Entity) + +.. sq:attribute:: const PANEL_GEOMETRY_NONE = int(PanelGeometry::None) + +.. sq:attribute:: const PANEL_GEOMETRY_RECTANGLE = int(PanelGeometry::Rectangle) + +.. sq:attribute:: const PANEL_RC_NONE = int(PanelRotationConstraint::None) + +.. sq:attribute:: const PANEL_RC_FACE_LEFT_HAND = int(PanelRotationConstraint::FaceLeftHand) + +.. sq:attribute:: const PANEL_RC_FACE_RIGHT_HAND = int(PanelRotationConstraint::FaceRightHand) + +.. sq:attribute:: const PANEL_RC_FACE_HEAD = int(PanelRotationConstraint::FaceHead) + +.. sq:attribute:: const PANEL_RC_FACE_HEAD_LOCK_Y = int(PanelRotationConstraint::FaceHeadLockY) + +.. sq:attribute:: const PANEL_RC_FACE_ENTITY = int(PanelRotationConstraint::FaceEntity) + +.. sq:attribute:: const PANEL_RENDER_CAST_SHADOW = int(darg_panel_renderer::RenderFeatures::CastShadow) + +.. sq:attribute:: const PANEL_RENDER_OPAQUE = int(darg_panel_renderer::RenderFeatures::Opaque) + +.. sq:attribute:: const PANEL_RENDER_ALWAYS_ON_TOP = int(darg_panel_renderer::RenderFeatures::AlwaysOnTop) + +-------------- +class GuiScene +-------------- + +.. sq:function:: method GuiScene.setUpdateHandler(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: closure_and_nativeclosure or null + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, closure_and_nativeclosure or null`` + +.. sq:function:: method GuiScene.setShutdownHandler(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: closure_and_nativeclosure or null + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, closure_and_nativeclosure or null`` + +.. sq:function:: method GuiScene.setHotkeysNavHandler(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: closure_and_nativeclosure or null + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, closure_and_nativeclosure or null`` + +.. sq:function:: method GuiScene.addPanel(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param arg2: autodoc from typemask/paramscheck + :type arg2: closure_and_nativeclosure or table + + ``nparamscheck:3`` + + ``typecheck mask: class_instance, integer, closure_and_nativeclosure or table`` + +.. sq:function:: method GuiScene.removePanel(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer`` + +.. sq:function:: method GuiScene.mark_panel_dirty(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer`` + +.. sq:function:: method GuiScene.setXmbFocus(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: null or table + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, null or table`` + +.. sq:function:: method GuiScene.getCompAABBbyKey() + +.. sq:function:: method GuiScene.setConfigProps(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: table + + ``nparamscheck:2`` + + ``typecheck mask: any_type, table`` + +.. sq:function:: method GuiScene.haveActiveCursorOnPanels() + +.. sq:function:: method GuiScene.clearTimer() + +.. sq:attribute:: property GuiScene.config + + ``readonly`` + +.. sq:function:: method GuiScene.getAllObservables() + +.. sq:attribute:: property GuiScene.cursorPresent + + ``readonly`` + +.. sq:attribute:: property GuiScene.cursorOverStickScroll + + ``readonly`` + +.. sq:attribute:: property GuiScene.cursorOverClickable + + ``readonly`` + +.. sq:attribute:: property GuiScene.hoveredClickableInfo + + ``readonly`` + +.. sq:attribute:: property GuiScene.keyboardLayout + + ``readonly`` + +.. sq:attribute:: property GuiScene.keyboardLocks + + ``readonly`` + +.. sq:attribute:: property GuiScene.updateCounter + + ``readonly`` + +.. sq:attribute:: property GuiScene.circleButtonAsAction + + ``readonly`` + +.. sq:attribute:: property GuiScene.xmbMode + + ``readonly`` + +.. sq:function:: method GuiScene.getJoystickAxis() + +.. sq:function:: method GuiScene.enableInput() + +.. sq:function:: method GuiScene.forceCursorActive(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: bool or null + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, bool or null`` + +/; + +#define V(x) .Var(#x, &SceneConfig::x) + + + + + + +----------------- +class SceneConfig +----------------- + + Sqrat::Class> sqSceneConfig(sqvm, "SceneConfig"); + sqSceneConfig + + +.. sq:attribute:: var SceneConfig.defaultFont + + .SquirrelProp("defaultFont", SceneConfig::getDefaultFontId, SceneConfig::setDefaultFontId) + + +.. sq:attribute:: var SceneConfig.defaultFontSize + + .SquirrelProp("defaultFontSize", SceneConfig::getDefaultFontSize, SceneConfig::setDefaultFontSize) + + +.. sq:attribute:: var SceneConfig.kbCursorControl + + V(kbCursorControl) + + +.. sq:attribute:: var SceneConfig.gamepadCursorControl + + V(gamepadCursorControl) + + +.. sq:attribute:: var SceneConfig.gamepadCursorSpeed + + V(gamepadCursorSpeed) + + +.. sq:attribute:: var SceneConfig.gamepadCursorHoverMaxTime + + V(gamepadCursorHoverMaxTime) + + +.. sq:attribute:: var SceneConfig.gamepadCursorAxisV + + V(gamepadCursorAxisV) + + +.. sq:attribute:: var SceneConfig.gamepadCursorAxisH + + V(gamepadCursorAxisH) + + +.. sq:attribute:: var gamepadCursorHoverMinMul + + V(gamepadCursorHoverMinMul) + + +.. sq:attribute:: var SceneConfig.gamepadCursorHoverMaxMul + + V(gamepadCursorHoverMaxMul) + + +.. sq:attribute:: var SceneConfig.gamepadCursorDeadZone + + V(gamepadCursorDeadZone) + + +.. sq:attribute:: var SceneConfig.gamepadCursorNonLin + + V(gamepadCursorNonLin) + + +.. sq:attribute:: var SceneConfig.reportNestedWatchedUpdate + + V(reportNestedWatchedUpdate) + + +.. sq:attribute:: var SceneConfig.joystickScrollAxisH + + V(joystickScrollAxisH) + + +.. sq:attribute:: var SceneConfig.joystickScrollAxisV + + V(joystickScrollAxisV) + + +.. sq:attribute:: var SceneConfig.clickRumbleEnabled + + V(clickRumbleEnabled) + + +.. sq:attribute:: var SceneConfig.clickRumbleLoFreq + + V(clickRumbleLoFreq) + + +.. sq:attribute:: var SceneConfig.clickRumbleHiFreq + + V(clickRumbleHiFreq) + + +.. sq:attribute:: var SceneConfig.clickRumbleDuration + + V(clickRumbleDuration) + + +.. sq:attribute:: var SceneConfig.dirPadRepeatDelay + + V(dirPadRepeatDelay) + + +.. sq:attribute:: var SceneConfig.dirPadRepeatTime + + V(dirPadRepeatTime) + + +.. sq:attribute:: var SceneConfig.useDefaultCursor + + V(useDefaultCursor) + + +.. sq:attribute:: var SceneConfig.defaultCursor + + V(defaultCursor) + + +.. sq:attribute:: var SceneConfig.clickPriority + + V(actionClickByBehavior) + .Prop("defSceneBgColor", &SceneConfig::getDefSceneBgColor, &SceneConfig::setDefSceneBgColor) + .Prop("defTextColor", &SceneConfig::getDefTextColor, &SceneConfig::setDefTextColor) + .SquirrelFunc("setClickButtons", &SceneConfig::setClickButtons, 2, "xa") + .SquirrelFunc("getClickButtons", &SceneConfig::getClickButtons, 1, "x") +/* + + + + + +.. sq:function:: function anim_start() + +.. sq:function:: function anim_request_stop() + +.. sq:function:: function anim_skip() + +.. sq:function:: function anim_skip_delay() + +.. sq:function:: function set_kb_focus() + +.. sq:function:: function capture_kb_focus() + +.. sq:function:: function calc_comp_size(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: null or table or closure_and_nativeclosure or class_instance or class + + ``nparamscheck:2`` + + ``typecheck mask: any_type, null or table or closure_and_nativeclosure or class_instance or class`` + +.. sq:function:: function move_mouse_cursor(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: bool + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, any_type, bool`` + +.. sq:function:: function get_mouse_cursor_pos(arg0, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-1`` + + ``typecheck mask: any_type, class_instance`` + +.. sq:function:: function resolve_button_id(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:attribute:: gui_scene = instance of GuiScene + + ``type: GuiScene`` + +/; + + moduleMgr->addNativeModule("daRg", dargModuleExports); +} + + +} // namespace darg + +.. sq:attribute:: const FLOW_PARENT_RELATIVE + +.. sq:attribute:: const FLOW_HORIZONTAL + +.. sq:attribute:: const FLOW_VERTICAL + +.. sq:attribute:: const ALIGN_LEFT = ALIGN_LEFT + +.. sq:attribute:: const ALIGN_TOP = ALIGN_TOP + +.. sq:attribute:: const ALIGN_RIGHT = ALIGN_RIGHT + +.. sq:attribute:: const ALIGN_BOTTOM = ALIGN_BOTTOM + +.. sq:attribute:: const ALIGN_CENTER = ALIGN_CENTER + +.. sq:attribute:: const VECTOR_WIDTH + +.. sq:attribute:: const VECTOR_COLOR + +.. sq:attribute:: const VECTOR_FILL_COLOR + +.. sq:attribute:: const VECTOR_MID_COLOR + +.. sq:attribute:: const VECTOR_OUTER_LINE + +.. sq:attribute:: const VECTOR_CENTER_LINE + +.. sq:attribute:: const VECTOR_INNER_LINE + +.. sq:attribute:: const VECTOR_TM_OFFSET + +.. sq:attribute:: const VECTOR_TM_SCALE + +.. sq:attribute:: const VECTOR_LINE + +.. sq:attribute:: const VECTOR_LINE_INDENT_PX + +.. sq:attribute:: const VECTOR_LINE_INDENT_PCT + +.. sq:attribute:: const VECTOR_ELLIPSE + +.. sq:attribute:: const VECTOR_SECTOR + +.. sq:attribute:: const VECTOR_RECTANGLE + +.. sq:attribute:: const VECTOR_POLY + +.. sq:attribute:: const VECTOR_INVERSE_POLY + +.. sq:attribute:: const VECTOR_OPACITY + +.. sq:attribute:: const VECTOR_LINE_DASHED + +.. sq:attribute:: const VECTOR_NOP + +.. sq:attribute:: const VECTOR_QUADS + +.. sq:attribute:: const FFT_NONE + +.. sq:attribute:: const FFT_SHADOW + +.. sq:attribute:: const FFT_GLOW + +.. sq:attribute:: const FFT_BLUR + +.. sq:attribute:: const FFT_OUTLINE + +.. sq:attribute:: const O_HORIZONTAL + +.. sq:attribute:: const O_VERTICAL + +.. sq:attribute:: const TOVERFLOW_CLIP + +.. sq:attribute:: const TOVERFLOW_CHAR + +.. sq:attribute:: const TOVERFLOW_WORD + +.. sq:attribute:: const TOVERFLOW_LINE + +.. sq:attribute:: const DIR_UP + +.. sq:attribute:: const DIR_DOWN + +.. sq:attribute:: const DIR_LEFT + +.. sq:attribute:: const DIR_RIGHT + +.. sq:attribute:: const EVENT_BREAK = GuiScene::EVENT_BREAK + +.. sq:attribute:: const EVENT_CONTINUE = GuiScene::EVENT_CONTINUE + +.. sq:attribute:: const GESTURE_DETECTOR_DRAG = GestureDetector::Type::DRAG + +.. sq:attribute:: const GESTURE_DETECTOR_PINCH = GestureDetector::Type::PINCH + +.. sq:attribute:: const GESTURE_DETECTOR_ROTATE = GestureDetector::Type::ROTATE + +.. sq:attribute:: const Linear + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InQuad + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutQuad + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutQuad + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InCubic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutCubic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutCubic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InQuintic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutQuintic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutQuintic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InQuart + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutQuart + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutQuart + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InSine + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutSine + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutSine + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InCirc + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutCirc + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutCirc + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InExp + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutExp + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutExp + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InElastic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutElastic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutElastic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InBack + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutBack + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutBack + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InBounce + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutBounce + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutBounce + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutBezier + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const CosineFull + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InStep + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutStep + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const Blink + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const DoubleBlink + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const BlinkSin + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const BlinkCos + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const Discrete8 + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const Shake4 + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const Shake6 + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const S_KB_FOCUS + +State flag for keyboard focus. + +.. sq:attribute:: const S_HOVER + +.. sq:attribute:: const S_TOP_HOVER + +.. sq:attribute:: const S_ACTIVE + +state flag for 'pressed' button. + +.. sq:attribute:: const S_MOUSE_ACTIVE + +state flag for 'pressed' button with mouse. + +.. sq:attribute:: const S_KBD_ACTIVE + +state flag for 'pressed' button with keyboard. + +.. sq:attribute:: const S_HOTKEY_ACTIVE + +state flag for 'pressed' button with hotkey. + +.. sq:attribute:: const S_TOUCH_ACTIVE + +state flag for pressed button with touch device. + +.. sq:attribute:: const S_JOYSTICK_ACTIVE + +state flag for pressed button with joystick/gamepad device. + +.. sq:attribute:: const S_VR_ACTIVE + +state flag for pressed button with VR controller. + +.. sq:attribute:: const S_DRAG + +state flag for dragged state. + +.. sq:attribute:: const MR_NONE + +.MOVE_RESIZE Beahvior constants, to define where was point started move or resize + +.. sq:attribute:: const MR_T + +.. sq:attribute:: const MR_R + +.. sq:attribute:: const MR_B + +.. sq:attribute:: const MR_L + +.. sq:attribute:: const MR_LT + +.. sq:attribute:: const MR_RT + +.. sq:attribute:: const MR_LB + +.. sq:attribute:: const MR_RB + +.. sq:attribute:: const MR_AREA + +.. sq:attribute:: const FMT_NO_WRAP + +.. sq:attribute:: const FMT_KEEP_SPACES + +.. sq:attribute:: const FMT_IGNORE_TAGS + +.. sq:attribute:: const FMT_HIDE_ELLIPSIS + +.. sq:attribute:: const FMT_AS_IS + +.. sq:attribute:: const DEVID_KEYBOARD + +.. sq:attribute:: const DEVID_MOUSE + +.. sq:attribute:: const DEVID_JOYSTICK + +.. sq:attribute:: const DEVID_TOUCH + +.. sq:attribute:: const DEVID_VR + +.. sq:attribute:: const KEEP_ASPECT_NONE + +.. sq:attribute:: const KEEP_ASPECT_FIT + +.. sq:attribute:: const KEEP_ASPECT_FILL + +.. sq:attribute:: const AXIS_L_THUMB_H + +.. sq:attribute:: const AXIS_L_THUMB_V + +.. sq:attribute:: const AXIS_R_THUMB_H + +.. sq:attribute:: const AXIS_R_THUMB_V + +.. sq:attribute:: const AXIS_L_TRIGGER + +.. sq:attribute:: const AXIS_R_TRIGGER + +.. sq:attribute:: const AXIS_LR_TRIGGER + +.. sq:attribute:: const XMB_STOP + +.. sq:attribute:: const XMB_CONTINUE + +.. sq:attribute:: const R_PROCESSED + +.. sq:attribute:: const SIZE_TO_CONTENT + +.. sq:attribute:: Fonts + + + + + +------------- +enum AnimProp +------------- + + + + +.. sq:attribute:: color + +.. sq:attribute:: bgColor + +.. sq:attribute:: fgColor + +.. sq:attribute:: fillColor + +.. sq:attribute:: borderColor + +.. sq:attribute:: opacity + +.. sq:attribute:: rotate + +.. sq:attribute:: scale + +.. sq:attribute:: translate + +.. sq:attribute:: fValue + +.. sq:attribute:: picSaturate + +.. sq:attribute:: brightness + +/; + + + + + + +--------------- +table Behaviors +--------------- + + +.. sq:attribute:: const Behaviors.Button + + BHV(Button, bhv_button) + + +.. sq:attribute:: const Behaviors.TextArea + + BHV(TextArea, bhv_text_area) + + +.. sq:attribute:: const Behaviors.TextInput + + BHV(TextInput, bhv_text_input) + + +.. sq:attribute:: const Behaviors.Slider + + BHV(Slider, bhv_slider) + + +.. sq:attribute:: const Behaviors.Pannable + + BHV(Pannable, bhv_pannable) + + +.. sq:attribute:: const Behaviors.Pannable2touch + + BHV(Pannable2touch, bhv_pannable_2touch) + + +.. sq:attribute:: const Behaviors.SwipeScroll + + BHV(SwipeScroll, bhv_swipe_scroll) + + +.. sq:attribute:: const Behaviors.MoveResize + + BHV(MoveResize, bhv_move_resize) + + +.. sq:attribute:: const Behaviors.ComboPopup + + BHV(ComboPopup, bhv_combo_popup) + + +.. sq:attribute:: const Behaviors.SmoothScrollStack + + BHV(SmoothScrollStack, bhv_smooth_scroll_stack) + + +.. sq:attribute:: const Behaviors.Marquee + + BHV(Marquee, bhv_marquee) + + +.. sq:attribute:: const Behaviors.WheelScroll + + BHV(WheelScroll, bhv_wheel_scroll) + + +.. sq:attribute:: const Behaviors.ScrollEvent + + BHV(ScrollEvent, bhv_scroll_event) + + +.. sq:attribute:: const Behaviors.InspectPicker + + BHV(InspectPicker, bhv_inspect_picker) + + +.. sq:attribute:: const Behaviors.RtPropUpdate + + BHV(RtPropUpdate, bhv_rt_prop_update) + + +.. sq:attribute:: const Behaviors.RecalcHandler + + BHV(RecalcHandler, bhv_recalc_handler) + + +.. sq:attribute:: const Behaviors.DragAndDrop + + BHV(DragAndDrop, bhv_drag_and_drop) + + +.. sq:attribute:: const Behaviors.FpsBar + + BHV(FpsBar, bhv_fps_bar) + + +.. sq:attribute:: const Behaviors.LatencyBar + + BHV(LatencyBar, bhv_latency_bar) + + +.. sq:attribute:: const Behaviors.OverlayTransparency + + BHV(OverlayTransparency, bhv_overlay_transparency) + +.. sq:attribute:: const Behaviors.BoundToArea + + place object inside an area (like placing tooltip under cursor BUT inside screen) + + +.. sq:attribute:: const Behaviors.Movie + + + fields in component description: + + @code: + movie:string = + loop:boolean = default true. Should video be looped + sound:string = path to .mp3 sound file. By default movie file with .mp3 added (like ".mp3".). + enableSound:boolean = default true. Will play sound if sound track exists. Note: sound is not synced with video. + onStart: function = optional callback, called when movie started + onError: function = optional callback, called when playback failed to start + onFinish: function = optional callback, called when movie finished/terminated (can be used to remove it from layout) + code@ + + + +.. note:: + + Note: sound is played only for one-shot video. + + + +.. sq:attribute:: const Behaviors.Parallax + +.. sq:attribute:: const Behaviors.PieMenu + +.. sq:attribute:: const Behaviors.TransitionSize + +.. sq:attribute:: const Behaviors.TrackMouse + +.. sq:attribute:: const Behaviors.MoveToArea + +.. sq:attribute:: const Behaviors.ProcessPointingInput + +.. sq:attribute:: const Behaviors.ProcessGesture + +.. sq:attribute:: const Behaviors.EatInput + +.. sq:attribute:: const Behaviors.TextAreaEdit + + + + + + +------------------- +class ScrollHandler +------------------- + +.. sq:method:: ScrollHandler() + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ScrollHandler.scrollToX() + +.. sq:function:: method ScrollHandler.scrollToY() + +.. sq:function:: method ScrollHandler.scrollToChildren() + +.. sq:attribute:: property ScrollHandler.elem + + ``readonly`` + +/; + + + + + + + +---------------------------- +class JoystickAxisObservable +---------------------------- + + Sqrat::DerivedClass joyAxisObservable(sqvm, "JoystickAxisObservable"); + joyAxisObservable // + .Prop("value", &JoystickAxisObservable::getValue) + .Var("resolution", &JoystickAxisObservable::resolution) + .Var("deadzone", &JoystickAxisObservable::deadzone) +/* + + + + +--------------- +class ElemGroup +--------------- + + + + + +-------------- +class Behavior +-------------- + + + + + +------------- +class Picture +------------- + +.. sq:method:: Picture(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: null or string + + ``typecheck mask: any_type, null or string`` + + + + + +------------------------------- +class Immediate extends Picture +------------------------------- + +.. sq:method:: Immediate(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: null or string + + ``typecheck mask: any_type, null or string`` + + + + + +------------------- +class FormattedText +------------------- + + + + + +--------------------- +class IGenVideoPlayer +--------------------- + + + + + +--------------- +class IGenSound +--------------- + + + + + +---------------------- +class DragAndDropState +---------------------- + + + + + +------------------- +class EventDataRect +------------------- + +.. sq:attribute:: EventDataRect.l + +.. sq:attribute:: EventDataRect.t + +.. sq:attribute:: EventDataRect.r + +.. sq:attribute:: EventDataRect.b + + + + + +------------------------- +class MouseClickEventData +------------------------- + +.. sq:attribute:: property MouseClickEventData.targetRect + + ``readonly`` + +/; +#undef V + + + + + + + +--------------------- +class HotkeyEventData +--------------------- + + Sqrat::Class> sqHotkeyEventData(sqvm, "HotkeyEventData"); + sqHotkeyEventData.Prop("targetRect", &HotkeyEventData::getTargetRect); + + + + + + +-------------------- +class HoverEventData +-------------------- + + Sqrat::Class> sqHoverEventData(sqvm, "HoverEventData"); + sqHoverEventData.Prop("targetRect", &HoverEventData::getTargetRect); + + Sqrat::Class sqTransitAll(sqvm, "TransitAll"); + sqTransitAll.Ctor(); + + EditableText::bind_script(exports); + + + + + + +---------------------- +class MoveToAreaTarget +---------------------- + + Sqrat::Class sqBhvMoveToAreaTarget(sqvm, "BhvMoveToAreaTarget"); + sqBhvMoveToAreaTarget // + .Func("set", &BhvMoveToAreaTarget::set) + .Func("clear", &BhvMoveToAreaTarget::clear) +/* + + + + +.. sq:function:: function Color(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer_or_float + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-4`` + + ``typecheck mask: any_type, integer_or_float, integer_or_float, integer_or_float, integer_or_float`` + +.. sq:function:: function sw() + +.. sq:function:: function sh() + +.. sq:function:: function flex(arg0, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-1`` + + ``typecheck mask: any_type, integer_or_float`` + +.. sq:function:: function fontH(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer_or_float`` + +.. sq:function:: function pw(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer_or_float`` + +.. sq:function:: function ph(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer_or_float`` + +.. sq:function:: function elemw(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer_or_float`` + +.. sq:function:: function elemh(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer_or_float`` + +.. sq:function:: function locate_element_source(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: any_type, class_instance`` + +.. sq:function:: function get_element_info(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: any_type, class_instance`` + +.. sq:function:: function get_font_metrics(arg0, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, integer`` + +.. sq:function:: function resolve_button(fontId, fontHt) + + :param fontId: + :type fontId: integer + + :param fontHt: optional, default is _def_fontHt font height set in font + :type fontHt: float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + + :return: font_params + :rtype: table + + + + +.. code-block:: + :caption: font_params + + + { + _def_fontHt : def height + fontHt : height + capsHt : height of H + lineSpacing : linespacing + ascent + descent + lowercaseHeight : height of x + } + @code + + + +.. sq:function:: function setFontDefHt(font_name, pix_ht) + + :param font_name: + :type font_name: string + + :param pix_ht: + :type pix_ht: integer + + :return: bool + +.. sq:function:: function getFontDefHt(font_name) + + :param font_name: + :type font_name: string + + :return: integer + +.. sq:function:: function getFontInitialHt(font_name) + + :param font_name: + :type font_name: string + + :return: integer + +.. sq:function:: function calc_str_box(element_or_text, element_or_style) + + :param element_or_text: should be string of text or darg component description with 'text' in it + :type element_or_text: string|closure_and_nativeclosure|table + + :param element_or_style: optional, if first element is text, it should be provided with font properties + :type element_or_style: table|closure_and_nativeclosure|null + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, string or table or closure_and_nativeclosure, table or closure_and_nativeclosure or null`` + + :return: return array of two objects with width and height of text + :rtype: array + + + +/; + + register_constants(sqvm); + register_fonts(exports); + register_anim_props(sqvm); + + register_std_behaviors(module_mgr); + + register_rendobj_script_ids(sqvm); + + Cursor::bind_script(exports); + ElementRef::bind_script(sqvm); + Sqrat::Class> sqElement(sqvm, "@Element"); + + bind_das(exports); + + Sqrat::Table dargDebug(sqvm); + + +------------------------------------- +class LottieAnimation extends Picture +------------------------------------- + +.. sq:method:: LottieAnimation(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: null or string + + ``typecheck mask: any_type, null or string`` + + + + + +---------------- +class ElementRef +---------------- + +.. sq:function:: method ElementRef.getCompDesc() + +.. sq:function:: method ElementRef.getScreenPosX(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getScreenPosY(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getWidth(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getHeight(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getContentWidth(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getContentHeight(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getScrollOffsX(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getScrollOffsY(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +/; +} + +} // namespace darg + + + + + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/darg_framework/index.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/darg_framework/index.rst.txt new file mode 100644 index 000000000..b1b053a33 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/darg_framework/index.rst.txt @@ -0,0 +1,15 @@ + +daRg framework +============== + +Docs for DaRG - Dagor Reactive GUI framework, based on Quirrel language and FRP. + + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + * + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/darg_framework/renderCanvas.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/darg_framework/renderCanvas.rst.txt new file mode 100644 index 000000000..a625098da --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/darg_framework/renderCanvas.rst.txt @@ -0,0 +1,190 @@ +.. autogenerated + +************ +renderCanvas +************ + + for render canvas + +*Source file: prog/gameLibs/daRg/canvasDraw.cpp* + + +use it to draw in canvas + + +.. sq:function:: function line(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: array + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + ``nparamscheck:4`` + + ``typecheck mask: userdata, array, integer_or_float, any_type`` + +function comment + +.. sq:function:: function line_dashed(arg0, arg1, arg2, arg3, arg4) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: array + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer_or_float + + :param arg4: autodoc from typemask/paramscheck + :type arg4: any_type + + ``nparamscheck:6`` + + ``typecheck mask: userdata, array, integer_or_float, integer_or_float, integer_or_float, any_type`` + +.. sq:function:: function fill_poly(arg0, arg1, arg2, arg3) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: array + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + :param arg3: autodoc from typemask/paramscheck + :type arg3: any_type + + ``nparamscheck:5`` + + ``typecheck mask: userdata, array, integer_or_float, any_type, any_type`` + +.. sq:function:: function fill_inverse_poly(arg0, arg1, arg2, arg3) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: array + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + :param arg3: autodoc from typemask/paramscheck + :type arg3: any_type + + ``nparamscheck:5`` + + ``typecheck mask: userdata, array, integer_or_float, any_type, any_type`` + +.. sq:function:: function ellipse(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer_or_float + + :param arg4: autodoc from typemask/paramscheck + :type arg4: integer_or_float + + :param arg5: autodoc from typemask/paramscheck + :type arg5: any_type + + :param arg6: autodoc from typemask/paramscheck + :type arg6: any_type + + :param arg7: autodoc from typemask/paramscheck + :type arg7: any_type + + ``nparamscheck:9`` + + ``typecheck mask: userdata, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type, any_type, any_type`` + +.. sq:function:: function sector(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer_or_float + + :param arg4: autodoc from typemask/paramscheck + :type arg4: integer_or_float + + :param arg5: autodoc from typemask/paramscheck + :type arg5: integer_or_float + + :param arg6: autodoc from typemask/paramscheck + :type arg6: integer_or_float + + :param arg7: autodoc from typemask/paramscheck + :type arg7: any_type + + :param arg8: autodoc from typemask/paramscheck + :type arg8: any_type + + :param arg9: autodoc from typemask/paramscheck + :type arg9: any_type + + ``nparamscheck:11`` + + ``typecheck mask: userdata, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type, any_type, any_type`` + +.. sq:function:: function rect(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer_or_float + + :param arg4: autodoc from typemask/paramscheck + :type arg4: integer_or_float + + :param arg5: autodoc from typemask/paramscheck + :type arg5: any_type + + :param arg6: autodoc from typemask/paramscheck + :type arg6: any_type + + :param arg7: autodoc from typemask/paramscheck + :type arg7: any_type + + ``nparamscheck:9`` + + ``typecheck mask: userdata, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type, any_type, any_type`` + +/; +} + +} // namespace darg + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.netevent.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.netevent.rst.txt new file mode 100644 index 000000000..e30f946ec --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.netevent.rst.txt @@ -0,0 +1,96 @@ +.. autogenerated + +************ +ecs.netevent +************ + +module 'ecs.netevent' + + + +*Source file: prog/gameLibs/ecs/scripts/sq/netsqevent.cpp* + +Usage:: + + let { server_send_net_sqevent, server_broadcast_net_sqevent, client_request_unicast_net_sqevent, client_request_broadcast_net_sqevent } = require("ecs.netevent") + +or:: + + from "ecs.netevent" import * + +.. code-block:: sq + + //'ecs.netevent' exports: + { + function server_send_net_sqevent(arg0, arg1, arg2, ...): integer, class_instance, array or null, any_type -> _undocumented_ + function server_broadcast_net_sqevent(arg0, arg1, ...): class_instance, array or null, any_type -> _undocumented_ + function client_request_unicast_net_sqevent(arg0, arg1, ...): integer, class_instance or null, any_type -> _undocumented_ + function client_request_broadcast_net_sqevent(arg0, ...): class_instance or null, any_type -> _undocumented_ + } + + +.. sq:function:: function server_send_net_sqevent(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + :param arg2: autodoc from typemask/paramscheck + :type arg2: array or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, integer, class_instance, array or null`` + +.. sq:function:: function server_broadcast_net_sqevent(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: array or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, class_instance, array or null`` + +.. sq:function:: function client_request_unicast_net_sqevent(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, integer, class_instance or null`` + +.. sq:function:: function client_request_broadcast_net_sqevent(arg0, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, class_instance or null`` + +/; + module_mgr->addNativeModule("ecs.netevent", exports); +} + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.rst.txt new file mode 100644 index 000000000..7f3ad67fe --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.rst.txt @@ -0,0 +1,1174 @@ +.. autogenerated + +*** +ecs +*** + +module 'ecs' + + + +*Source file: prog/gameLibs/ecs/scripts/sq/sqcoredaECS.cpp* + +Usage:: + + let { set_callback_timer, set_callback_timer_rt, clear_callback_timer, set_timer, clear_timer, BaseList, ListRO, List, COMP_FLAG_REPLICATED, COMP_FLAG_CHANGE_EVENT, INVALID_ENTITY_ID, EVCAST_UNICAST, EVCAST_BROADCAST, Event, SchemelessEvent, SQEvent, TemplateDB, EventsDB, Template, EntityManager, CompObjectRO, CompObject, CompArray, SqQuery, EntityId, _dbg_get_all_comps_inspect, _dbg_get_comp_val_inspect, obsolete_dbg_get_comp_val, get_comp_type, obsolete_dbg_set_comp_val, get_comp_flags, get_semantic_type, calc_hash, calc_hash_int, TYPE_NULL, TYPE_STRING, TYPE_INT8, TYPE_UINT8, TYPE_INT16, TYPE_UINT16, TYPE_INT, TYPE_UINT, TYPE_INT64, TYPE_UINT64, TYPE_FLOAT, TYPE_POINT2, TYPE_POINT3, TYPE_POINT4, TYPE_IPOINT2, TYPE_IPOINT3, TYPE_IPOINT4, TYPE_DPOINT3, TYPE_BOOL, TYPE_MATRIX, TYPE_EID, TYPE_COLOR, TYPE_OBJECT, TYPE_ARRAY, TYPE_SHARED_OBJECT, TYPE_SHARED_ARRAY, TYPE_INT_LIST, TYPE_UINT16_LIST, TYPE_STRING_LIST, TYPE_EID_LIST, TYPE_FLOAT_LIST, TYPE_POINT2_LIST, TYPE_POINT3_LIST, TYPE_POINT4_LIST, TYPE_IPOINT2_LIST, TYPE_IPOINT3_LIST, TYPE_IPOINT4_LIST, TYPE_BOOL_LIST, TYPE_TMATRIX_LIST, TYPE_COLOR_LIST, TYPE_INT64_LIST, TYPE_UINT64_LIST, TYPE_TAG, TYPE_AUTO, clear_vm_entity_systems, register_entity_system, modify_es_list, start_es_loading, end_es_loading, g_entity_mgr } = require("ecs") + +or:: + + from "ecs" import * + +.. code-block:: sq + + //'ecs' exports: + { + function set_callback_timer(handler, interval, repeat): sqObject, float, bool -> Object + function set_callback_timer_rt(handler, interval, repeat): sqObject, float, bool -> Object + function clear_callback_timer(handler): sqObject -> null + function set_timer(arg0): table -> _undocumented_ + function clear_timer(arg0): table -> _undocumented_ + class BaseList + class ListRO + class List + value COMP_FLAG_REPLICATED + value COMP_FLAG_CHANGE_EVENT + value INVALID_ENTITY_ID + value EVCAST_UNICAST + value EVCAST_BROADCAST + class Event + class SchemelessEvent + class SQEvent + class TemplateDB + class EventsDB + class Template + class EntityManager + class CompObjectRO + class CompObject + class CompArray + class SqQuery + class EntityId + function _dbg_get_all_comps_inspect(arg0): integer -> _undocumented_ + function _dbg_get_comp_val_inspect(arg0, arg1, ...): integer, string, any_type -> _undocumented_ + function obsolete_dbg_get_comp_val(arg0, arg1, ...): integer, string, any_type -> _undocumented_ + function get_comp_type(eid, comp_name): ecs::EntityId, string -> integer + function obsolete_dbg_set_comp_val(arg0, arg1, ...): integer, string, any_type -> _undocumented_ + function get_comp_flags(eid, comp): ecs::EntityId, string -> integer + function get_semantic_type(type_name): string -> component_type_t + function calc_hash(arg0): string -> _undocumented_ + function calc_hash_int(arg0): string -> _undocumented_ + value TYPE_NULL + const TYPE_STRING + const TYPE_INT8 + const TYPE_UINT8 + const TYPE_INT16 + const TYPE_UINT16 + const TYPE_INT + const TYPE_UINT + const TYPE_INT64 + const TYPE_UINT64 + const TYPE_FLOAT + const TYPE_POINT2 + const TYPE_POINT3 + const TYPE_POINT4 + const TYPE_IPOINT2 + const TYPE_IPOINT3 + const TYPE_IPOINT4 + const TYPE_DPOINT3 + const TYPE_BOOL + const TYPE_MATRIX + const TYPE_EID + const TYPE_COLOR + const TYPE_OBJECT + const TYPE_ARRAY + const TYPE_SHARED_OBJECT + const TYPE_SHARED_ARRAY + const TYPE_INT_LIST + const TYPE_UINT16_LIST + const TYPE_STRING_LIST + const TYPE_EID_LIST + const TYPE_FLOAT_LIST + const TYPE_POINT2_LIST + const TYPE_POINT3_LIST + const TYPE_POINT4_LIST + const TYPE_IPOINT2_LIST + const TYPE_IPOINT3_LIST + const TYPE_IPOINT4_LIST + const TYPE_BOOL_LIST + const TYPE_TMATRIX_LIST + const TYPE_COLOR_LIST + const TYPE_INT64_LIST + const TYPE_UINT64_LIST + const TYPE_TAG + const TYPE_AUTO + function clear_vm_entity_systems() + function register_entity_system(arg0, arg1, arg2, arg3, ...): string, table, table, table or null, any_type -> _undocumented_ + function modify_es_list(arg0): closure_and_nativeclosure -> _undocumented_ + function start_es_loading() + function end_es_loading() + value g_entity_mgr + } + + +.. sq:function:: function set_callback_timer(handler, interval, repeat) + + :param handler: + :type handler: sqObject + + :param interval: + :type interval: float + + :param repeat: + :type repeat: bool + + :return: Object + +.. sq:function:: function set_callback_timer_rt(handler, interval, repeat) + + :param handler: + :type handler: sqObject + + :param interval: + :type interval: float + + :param repeat: + :type repeat: bool + + :return: Object + +.. sq:function:: function clear_callback_timer(handler) + + :param handler: + :type handler: sqObject + + :return: null + +.. sq:function:: function set_timer(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: table + + ``nparamscheck:2`` + + ``typecheck mask: any_type, table`` + +.. sq:function:: function clear_timer(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: table + + ``nparamscheck:2`` + + ``typecheck mask: any_type, table`` + +/; +} + + +void shutdown_timers(HSQUIRRELVM /*vm + +-------------- +class BaseList +-------------- + + + **This is not real class. Just all List classes has this methods!** + + Real classes are following: + * CompIntList(RO) + * CompUInt16List(RO) + * CompStringList(RO) + * CompEidList(RO) + * CompFloatList(RO) + * CompPoint2List(RO) + * CompPoint3List(RO) + * CompPoint4List(RO) + * CompIPoint2List(RO) + * CompIPoint3List(RO) + * CompBoolList(RO) + * CompTMatrixList(RO) + * CompColorList(RO) + * CompInt64List(RO) + * CompUInt64List(RO) + + +.. sq:method:: BaseList() + +.. sq:function:: operator BaseList._get(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, any_type`` + +.. sq:function:: operator BaseList._nexti(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer or null + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer or null`` + +.. sq:function:: method BaseList.len() + +.. sq:function:: method BaseList.indexof(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, any_type, integer`` + +.. sq:function:: method BaseList.getAll(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method BaseList.isReadOnly(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method BaseList.listType(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +/; + + if (readonly) + + + + + + +--------------------------------- +class ListRO extends ecs.BaseList +--------------------------------- + + + sqListClass // + .SquirrelFunc("_set", readonly_method_error, 3, "xi.") + .SquirrelFunc("append", readonly_method_error, -2, "x.i") + .SquirrelFunc("insert", readonly_method_error, -3, "xi.i") + .SquirrelFunc("remove", readonly_method_error, 2, "xi") + .SquirrelFunc("pop", readonly_method_error, 1, "x") + .SquirrelFunc("clear", readonly_method_error, 1, "x") +/* + + + + +------------------------------- +class List extends ecs.BaseList +------------------------------- + +.. sq:function:: operator List._set(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + ``nparamscheck:3`` + + ``typecheck mask: class_instance, integer, any_type`` + +.. sq:function:: method List.append(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, any_type, integer`` + +.. sq:function:: method List.insert(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: class_instance, integer, any_type, integer`` + +.. sq:function:: method List.remove(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer`` + +.. sq:function:: method List.pop(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method List.clear() + +/; + + tbl.Bind(type_name, sqListClass); +} + +template +static void bind_list_type(HSQUIRRELVM vm, Sqrat::Table &tbl, const char *type_name) +{ + using TS = eastl::fixed_string; +bind_list_class, TypeRO, ItemType, /*ro + + + + + +.. sq:attribute:: COMP_FLAG_REPLICATED + +.. sq:attribute:: COMP_FLAG_CHANGE_EVENT + +.. sq:attribute:: INVALID_ENTITY_ID + +.. sq:attribute:: EVCAST_UNICAST + +.. sq:attribute:: EVCAST_BROADCAST + +----------- +class Event +----------- + +.. sq:function:: method Event.getType() + + + + + +----------------------------------- +class SchemelessEvent extends Event +----------------------------------- + +.. sq:method:: SchemelessEvent() + + + + + +----------------------------------------- +class SQEvent extends ecs.SchemelessEvent +----------------------------------------- + +.. sq:method:: SQEvent() + + + + + +---------------- +class TemplateDB +---------------- + +.. sq:function:: method TemplateDB.getTemplateByName() + +.. sq:function:: method TemplateDB.size() + +.. sq:function:: method TemplateDB.getTemplateMetaInfo() + +.. sq:function:: method TemplateDB.getComponentMetaInfo() + +.. sq:function:: method TemplateDB.hasComponentMetaInfo() + +/; + + + + + + + +-------------- +class EventsDB +-------------- + + Sqrat::Class> sqEventsDB(vm, "EventsDB"); + sqEventsDB // + .Func("findEvent", &EventsDB::findEvent) + .Func("hasEventScheme", &EventsDB::hasEventScheme) + .Func("getFieldsCount", &EventsDB::getFieldsCount) + .Func("findFieldIndex", &EventsDB::findFieldIndex) + .Func("getFieldName", &EventsDB::getFieldName) + .Func("getFieldType", &EventsDB::getFieldType) + .Func("getFieldOffset", &EventsDB::getFieldOffset) + .SquirrelFunc("getEventFieldValue", evtdb_get_event_field, 4, ".xii") +/* + + + + +-------------- +class Template +-------------- + +.. sq:function:: method Template.getName() + +.. sq:function:: method Template.getBase() + +.. sq:function:: method Template.getCompVal(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, string`` + +.. sq:function:: method Template.getCompValNullable(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, string`` + +.. sq:function:: method Template.hasComponent() + +.. sq:function:: method Template.getNumParentTemplates() + +.. sq:function:: method Template.getParentTemplate() + +.. sq:function:: method Template.getComponentsNames(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method Template.getTags(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +/; + + + typedef bool (EntityManager::*removeCompFunc)(EntityId, const char *); + + + + + + + +------------------- +class EntityManager +------------------- + + Sqrat::Class> sqEntityManager(vm, "EntityManager"); + sqEntityManager // + .Func("destroyEntity", (bool(EntityManager::*)(const ecs::EntityId &)) & EntityManager::destroyEntity) + .Func("doesEntityExist", &EntityManager::doesEntityExist) + .Func("getNumEntities", &EntityManager::getNumEntities) + + //.Func("getNumComponents", &EntityManager::getNumComponents) + + .SquirrelFunc("sendEvent", emgr_send_event, 3, "xix") + .SquirrelFunc("broadcastEvent", emgr_bcast_event, 2, "xx") + + //.Func("getEntityTemplate", &EntityManager::getEntityTemplate) + .Func("getEntityTemplateName", &EntityManager::getEntityTemplateName) + .Func("getEntityFutureTemplateName", &EntityManager::getEntityFutureTemplateName) + .GlobalFunc("getTemplateDB", emgr_get_tempate_db) // FIXME: sqrat binding is not supports returning references from member + // functions + .GlobalFunc("getEventsDB", emgr_get_events_db) + .SquirrelFunc("createEntity", create_entity, -3, "xstc|o") + .SquirrelFunc("createEntitySync", create_entity_sync, -3, "xst|o") + .SquirrelFunc("reCreateEntityFrom", recreate_entity, -4, "xistc|o") + .SquirrelFunc("createTemplate", create_template, -3, "xstssis") + .GlobalFunc("getComponentType", emgr_get_component_type) + .GlobalFunc("getComponentTypeName", emgr_get_component_type_name) + .GlobalFunc("getTypeName", emgr_get_type_name) +/* + +.. sq:attribute:: var EntityManager.dt + +.. sq:attribute:: var EntityManager.curTime + +/; + + + + + + + + +------------------ +class CompObjectRO +------------------ + + Sqrat::Class sqCompObjectRO(vm, "CompObjectRO"); + sqCompObjectRO // + .SquirrelFunc("isReadOnly", comp_is_readonly, 1, "x") +.SquirrelFunc("getAll", comp_obj_get_all sqCompObject(vm, "CompObject"); + sqCompObject // + .SquirrelFunc("isReadOnly", comp_is_readonly, 1, "x") + .SquirrelFunc("getAll", comp_obj_get_all, 1, "x") + .SquirrelFunc("_get", comp_obj_get, 2, "xs") + .SquirrelFunc("_set", comp_obj_set, 3, "xs.") + .SquirrelFunc("_newslot", comp_obj_set, 3, "xs.") + .SquirrelFunc("_nexti", comp_obj_nexti, 2, "xs|o") + .SquirrelFunc("remove", comp_obj_erase, 2, "xs") + .GlobalFunc("len", comp_t_len) +/* + +.. sq:function:: method CompObject.isReadOnly(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method CompObject.getAll(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: operator CompObject._get(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer`` + +.. sq:function:: operator CompObject._set(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + ``nparamscheck:3`` + + ``typecheck mask: class_instance, integer, any_type`` + +.. sq:function:: operator CompObject._nexti(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer or null + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer or null`` + +.. sq:function:: method CompObject.len() + +.. sq:function:: method CompObject.indexof(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, any_type, integer`` + +.. sq:function:: method CompObject.append(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, any_type, integer`` + +.. sq:function:: method CompObject.insert(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: class_instance, integer, any_type, integer`` + +.. sq:function:: method CompObject.remove(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer`` + +.. sq:function:: method CompObject.pop(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +/; + + + + + + + +--------------------------------------- +class CompArray extends ecs.CompArrayRO +--------------------------------------- + + + Sqrat::DerivedClass sqCompArray(vm, "CompArray"); + sqCompArray // + .SquirrelFunc("isReadOnly", comp_is_readonly, 1, "x") + .SquirrelFunc("getAll", comp_arr_get_all, 1, "x") + .SquirrelFunc("_get", comp_arr_get, 2, "x.") + .SquirrelFunc("_set", comp_arr_set, 3, "xi.") + .SquirrelFunc("_nexti", comp_arr_nexti, 2, "xi|o") + .GlobalFunc("len", comp_t_len) + .SquirrelFunc("indexof", comp_arr_indexof, -2, "x.i") + .SquirrelFunc("append", comp_arr_append, -2, "x.i") + .SquirrelFunc("insert", comp_arr_insert, -3, "xi.i") + .SquirrelFunc("remove", comp_arr_remove, 2, "xi") + .SquirrelFunc("pop", comp_arr_pop, 1, "x") + .GlobalFunc("clear", comp_arr_clear) +/* + + + + +------------- +class SqQuery +------------- + +.. sq:method:: SqQuery(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: table + + :param arg2: autodoc from typemask/paramscheck + :type arg2: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: class_instance, string, table, string`` + +.. sq:function:: method SqQuery.perform(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer or closure_and_nativeclosure + + :param arg2: autodoc from typemask/paramscheck + :type arg2: closure_and_nativeclosure or string or null + + :param arg3: autodoc from typemask/paramscheck + :type arg3: string or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, integer or closure_and_nativeclosure, closure_and_nativeclosure or string or null, string or null`` + +.. sq:function:: operator SqQuery._call(arg0, arg1, arg2, arg3, arg4, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer or closure_and_nativeclosure + + :param arg3: autodoc from typemask/paramscheck + :type arg3: closure_and_nativeclosure or string or null + + :param arg4: autodoc from typemask/paramscheck + :type arg4: string or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: class_instance, any_type, integer or closure_and_nativeclosure, closure_and_nativeclosure or string or null, string or null`` + +/; + + + + + + + +-------------- +class EntityId +-------------- + + Sqrat::Class sqEntityId(vm, "EntityId"); + sqEntityId.SquirrelCtor(eid_ctor, -1, "xi"); + + Sqrat::DerivedClass> sqEventGetterProxy(vm, "EventDataGetter"); + + sqEventGetterProxy.Var("data", &EventDataGetter::sqData); + + + + + + tblEcs // + .Func("get_component_name_by_idx", get_component_name_by_idx) + .Func("get_component_name_by_hash", get_component_name_by_hash) + .SquirrelFunc("register_sq_event", register_sq_event, -2, ".sb|ii|o") +/* + +.. sq:function:: function _dbg_get_all_comps_inspect(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer`` + +.. sq:function:: function _dbg_get_comp_val_inspect(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, integer, string`` + +.. sq:function:: function obsolete_dbg_get_comp_val(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, integer, string`` + +.. sq:function:: function get_comp_type(eid, comp_name) + + :param eid: + :type eid: ecs::EntityId + + :param comp_name: + :type comp_name: string + + :return: integer + +.. sq:function:: function obsolete_dbg_set_comp_val(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, integer, string`` + +.. sq:function:: function get_comp_flags(eid, comp) + + :param eid: + :type eid: ecs::EntityId + + :param comp: + :type comp: string + + :return: integer + +.. sq:function:: function get_semantic_type(type_name) + + :param type_name: + :type type_name: string + + :return: component_type_t + +.. sq:function:: function calc_hash(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: function calc_hash_int(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:attribute:: TYPE_NULL + +.. sq:attribute:: const TYPE_STRING + +.. sq:attribute:: const TYPE_INT8 + +.. sq:attribute:: const TYPE_UINT8 + +.. sq:attribute:: const TYPE_INT16 + +.. sq:attribute:: const TYPE_UINT16 + +.. sq:attribute:: const TYPE_INT + +.. sq:attribute:: const TYPE_UINT + +.. sq:attribute:: const TYPE_INT64 + +.. sq:attribute:: const TYPE_UINT64 + +.. sq:attribute:: const TYPE_FLOAT + +.. sq:attribute:: const TYPE_POINT2 + +.. sq:attribute:: const TYPE_POINT3 + +.. sq:attribute:: const TYPE_POINT4 + +.. sq:attribute:: const TYPE_IPOINT2 + +.. sq:attribute:: const TYPE_IPOINT3 + +.. sq:attribute:: const TYPE_IPOINT4 + +.. sq:attribute:: const TYPE_DPOINT3 + +.. sq:attribute:: const TYPE_BOOL + +.. sq:attribute:: const TYPE_MATRIX + +.. sq:attribute:: const TYPE_EID + +.. sq:attribute:: const TYPE_COLOR + +.. sq:attribute:: const TYPE_OBJECT + +.. sq:attribute:: const TYPE_ARRAY + +.. sq:attribute:: const TYPE_SHARED_OBJECT + +.. sq:attribute:: const TYPE_SHARED_ARRAY + +.. sq:attribute:: const TYPE_INT_LIST + +.. sq:attribute:: const TYPE_UINT16_LIST + +.. sq:attribute:: const TYPE_STRING_LIST + +.. sq:attribute:: const TYPE_EID_LIST + +.. sq:attribute:: const TYPE_FLOAT_LIST + +.. sq:attribute:: const TYPE_POINT2_LIST + +.. sq:attribute:: const TYPE_POINT3_LIST + +.. sq:attribute:: const TYPE_POINT4_LIST + +.. sq:attribute:: const TYPE_IPOINT2_LIST + +.. sq:attribute:: const TYPE_IPOINT3_LIST + +.. sq:attribute:: const TYPE_IPOINT4_LIST + +.. sq:attribute:: const TYPE_BOOL_LIST + +.. sq:attribute:: const TYPE_TMATRIX_LIST + +.. sq:attribute:: const TYPE_COLOR_LIST + +.. sq:attribute:: const TYPE_INT64_LIST + +.. sq:attribute:: const TYPE_UINT64_LIST + +.. sq:attribute:: const TYPE_TAG + +.. sq:attribute:: const TYPE_AUTO + +.. sq:function:: function clear_vm_entity_systems() + +.. sq:function:: function register_entity_system(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: table + + :param arg2: autodoc from typemask/paramscheck + :type arg2: table + + :param arg3: autodoc from typemask/paramscheck + :type arg3: table or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-4`` + + ``typecheck mask: any_type, string, table, table, table or null`` + +.. sq:function:: function modify_es_list(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: closure_and_nativeclosure + + ``nparamscheck:2`` + + ``typecheck mask: any_type, closure_and_nativeclosure`` + +.. sq:function:: function start_es_loading() + +.. sq:function:: function end_es_loading() + +.. sq:attribute:: g_entity_mgr = instance of EntityManager class + + ``type: class_instance`` + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/index.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/index.rst.txt new file mode 100644 index 000000000..753436b89 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/index.rst.txt @@ -0,0 +1,15 @@ + +Quirrel ECS +=========== + +Docs for Quirrel modules for dagor ECS + + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + * + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/net.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/net.rst.txt new file mode 100644 index 000000000..e7d678a05 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/net.rst.txt @@ -0,0 +1,59 @@ +.. autogenerated + +*** +net +*** + +module 'net' + + + +*Source file: prog/gameLibs/ecs/scripts/sq/netBindSq.cpp* + +Usage:: + + let { is_server, has_network, get_replay_proto_version, INVALID_CONNECTION_ID } = require("net") + +or:: + + from "net" import * + +.. code-block:: sq + + //'net' exports: + { + function is_server() + function has_network() + function get_replay_proto_version() + value INVALID_CONNECTION_ID + } + + +.. sq:function:: function is_server() + +.. sq:function:: function has_network() + +.. sq:function:: function get_replay_proto_version() + +.. sq:attribute:: INVALID_CONNECTION_ID + +/; +#define DC(x) tbl.SetValue(#x, x); + DANET_DEFINE_DISCONNECTION_CAUSES +#undef DC + + ecs::sq::EventsBind< +#define NET_ECS_EVENT(e, ...) e, + NET_ECS_EVENTS +#undef NET_ECS_EVENT + ecs::sq::term_event_t>::bindall(tbl); + + if (!existingModule) + module_mgr->addNativeModule("net", tbl); +} + +} // namespace sq + +} // namespace ecs + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/DataBlock.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/DataBlock.rst.txt new file mode 100644 index 000000000..895c69044 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/DataBlock.rst.txt @@ -0,0 +1,363 @@ +.. autogenerated + +********* +DataBlock +********* + +module 'DataBlock' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/sqratDataBlock.cpp* + +Usage:: + + let DataBlock = require("DataBlock") + +or:: + + from "DataBlock" import * + +.. code-block:: sq + + //'DataBlock' exports: + class DataBlock + + +--------------- +class DataBlock +--------------- + +.. sq:method:: DataBlock(arg0, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-1`` + + ``typecheck mask: class_instance, class_instance`` + +.. sq:function:: method DataBlock.formatAsString(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: table or integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer_or_float + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-1`` + + ``typecheck mask: class_instance, table or integer_or_float, integer_or_float, integer_or_float`` + +.. sq:function:: method DataBlock.getBlock() + +.. sq:function:: method DataBlock.addBlock() + +.. sq:function:: method DataBlock.addNewBlock() + +.. sq:function:: method DataBlock.getStr() + +.. sq:function:: method DataBlock.getBool() + +.. sq:function:: method DataBlock.getReal() + +.. sq:function:: method DataBlock.getPoint4() + +.. sq:function:: method DataBlock.getPoint3() + +.. sq:function:: method DataBlock.getPoint2() + +.. sq:function:: method DataBlock.getTm() + +.. sq:function:: method DataBlock.getE3dcolor() + +.. sq:function:: method DataBlock.setStr() + +.. sq:function:: method DataBlock.setBool() + +.. sq:function:: method DataBlock.setReal() + +.. sq:function:: method DataBlock.setPoint4() + +.. sq:function:: method DataBlock.setPoint3() + +.. sq:function:: method DataBlock.setPoint2() + +.. sq:function:: method DataBlock.setTm() + +.. sq:function:: method DataBlock.setE3dcolor() + +.. sq:function:: method DataBlock.addStr() + +.. sq:function:: method DataBlock.addBool() + +.. sq:function:: method DataBlock.addReal() + +.. sq:function:: method DataBlock.addPoint3() + +.. sq:function:: method DataBlock.addPoint4() + +.. sq:function:: method DataBlock.addPoint2() + +.. sq:function:: method DataBlock.addTm() + +.. sq:function:: method DataBlock.addE3dcolor() + +.. sq:function:: method DataBlock.removeParam() + +.. sq:function:: method DataBlock.removeParamById() + +.. sq:function:: method DataBlock.removeBlock() + +.. sq:function:: method DataBlock.removeBlockById() + +.. sq:function:: method DataBlock.__getVersion(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method DataBlock.findParam() + +.. sq:function:: method DataBlock.paramExists() + +.. sq:function:: method DataBlock.getBlockByName() + +.. sq:function:: method DataBlock.setParamFrom() + +.. sq:function:: method DataBlock.setParamsFrom() + +.. sq:function:: method DataBlock.setFrom() + +.. sq:function:: method DataBlock.setInt() + +.. sq:function:: method DataBlock.setInt64() + +.. sq:function:: method DataBlock.addInt() + +.. sq:function:: method DataBlock.getIPoint3() + +.. sq:function:: method DataBlock.setIPoint3() + +.. sq:function:: method DataBlock.addIPoint3() + +.. sq:function:: method DataBlock.getParamTypeAnnotation(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer`` + +.. sq:function:: method DataBlock.getParamValue(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer`` + +.. sq:function:: method DataBlock.getInt(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, string`` + +.. sq:function:: operator DataBlock._set(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + ``nparamscheck:3`` + + ``typecheck mask: class_instance, string`` + +.. sq:function:: operator DataBlock._get(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + ``nparamscheck:2`` + + ``typecheck mask: class_instance`` + +.. sq:function:: operator DataBlock._modulo(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, string`` + +.. sq:function:: operator DataBlock._newslot(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + ``nparamscheck:3`` + + ``typecheck mask: class_instance, string`` + +.. sq:function:: operator DataBlock._nexti() + +.. sq:function:: method DataBlock.loadFromText(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer + + ``nparamscheck:3`` + + ``typecheck mask: class_instance, string, integer`` + +.. sq:function:: method DataBlock.set_root() + +.. sq:function:: method DataBlock.setParseIncludesAsParams() + +.. sq:function:: method DataBlock.getParseIncludesAsParams() + +.. sq:function:: method DataBlock.setParseOverridesNotApply() + +.. sq:function:: method DataBlock.getParseOverridesNotApply() + +.. sq:function:: method DataBlock.setParseOverridesIgnored() + +.. sq:function:: method DataBlock.getParseOverridesIgnored() + +.. sq:function:: method DataBlock.setParseCommentsAsParams() + +.. sq:function:: method DataBlock.getParseCommentsAsParams() + +/; + + if (allow_file_access) + { + (void)sqDataBlock // + .SquirrelFunc("load", blk_load, 2, "xs") + .SquirrelFunc("tryLoad", blk_try_load, -2, "xs") + .SquirrelFunc("saveToTextFile", blk_saveToTextFile, 2, "xs") + .SquirrelFunc("saveToTextFileCompact", blk_saveToTextFileCompact, 2, "xs") +/* + +.. sq:function:: method DataBlock.load(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, string`` + +.. sq:function:: method DataBlock.tryLoad(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, string`` + +.. sq:function:: method DataBlock.saveToTextFile(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, string`` + +.. sq:function:: method DataBlock.saveToTextFileCompact(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, string`` + +/; + } +#undef FUNC + + Sqrat::Object classObj(sqDataBlock.GetObject(), vm); + module_mgr->addNativeModule("DataBlock", classObj); +} + +} // namespace bindquirrel + + + + + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/base64.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/base64.rst.txt new file mode 100644 index 000000000..7fe6077de --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/base64.rst.txt @@ -0,0 +1,77 @@ +.. autogenerated + +****** +base64 +****** + +module 'base64' + + + +*Source file: prog/gameLibs/quirrel/base64/base64.cpp* + +Usage:: + + let { encodeString, decodeString, encodeJson, encodeBlk, encodeBlob } = require("base64") + +or:: + + from "base64" import * + +.. code-block:: sq + + //'base64' exports: + { + function encodeString(text): string -> string + function decodeString(text): string -> string + function encodeJson(obj): sqObject -> string + function encodeBlk(blk): DataBlock -> string + function encodeBlob(arg0): class_instance -> _undocumented_ + } + + +.. sq:function:: function encodeString(text) + + :param text: + :type text: string + + :return: string + +.. sq:function:: function decodeString(text) + + :param text: + :type text: string + + :return: string + +.. sq:function:: function encodeJson(obj) + + :param obj: + :type obj: sqObject + + :return: string + +.. sq:function:: function encodeBlk(blk) + + :param blk: + :type blk: DataBlock + + :return: string + +.. sq:function:: function encodeBlob(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: any_type, class_instance`` + +/; + + mgr->addNativeModule("base64", b64); +} + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/browser.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/browser.rst.txt new file mode 100644 index 000000000..63325a301 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/browser.rst.txt @@ -0,0 +1,92 @@ +.. autogenerated + +******* +browser +******* + +module 'browser' + + + +*Source file: prog/gameLibs/quirrel/sqWebBrowser/sqWebBrowser.cpp* + +Usage:: + + let { can_use_embeded_browser, browser_go_back, browser_reload_page, browser_go, browser_get_current_url, browser_get_current_title, browser_add_window_method } = require("browser") + +or:: + + from "browser" import * + +.. code-block:: sq + + //'browser' exports: + { + function can_use_embeded_browser(): -> bool + function browser_go_back(): -> null + function browser_reload_page(): -> null + function browser_go(url): string -> null + function browser_get_current_url() + function browser_get_current_title() + function browser_add_window_method(name, params_cnt): string, unsigned -> null + } + + +Opens and control embeded web browser. Requires native cef binary and its integration + + +.. sq:function:: function can_use_embeded_browser() + + :return: bool + +.. sq:function:: function browser_go_back() + + :return: null + +.. sq:function:: function browser_reload_page() + + :return: null + +.. sq:function:: function browser_go(url) + + :param url: + :type url: string + + :return: null + +.. sq:function:: function browser_get_current_url() + +.. sq:function:: function browser_get_current_title() + +.. sq:function:: function browser_add_window_method(name, params_cnt) + + :param name: + :type name: string + + :param params_cnt: + :type params_cnt: unsigned + + :return: null + +/; + + using namespace webbrowser; + +#define CONST(x) tbl.SetValue(#x, x) + CONST(BROWSER_EVENT_INITIALIZED); + CONST(BROWSER_EVENT_DOCUMENT_READY); + CONST(BROWSER_EVENT_FAIL_LOADING_FRAME); + CONST(BROWSER_EVENT_CANT_DOWNLOAD); + + CONST(BROWSER_EVENT_FINISH_LOADING_FRAME); + CONST(BROWSER_EVENT_BEGIN_LOADING_FRAME); + CONST(BROWSER_EVENT_NEED_RESEND_FRAME); + CONST(BROWSER_EVENT_BROWSER_CRASHED); +#undef CONST + + sq_modules_mgr->addNativeModule("browser", tbl); +} + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/console.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/console.rst.txt new file mode 100644 index 000000000..7b296cdd1 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/console.rst.txt @@ -0,0 +1,378 @@ +.. autogenerated + +******* +console +******* + +module 'console' + + + +*Source file: prog/gameLibs/quirrel/sqConsole/sqConsole.cpp* + +Usage:: + + let { register_command, console_register_command, setObjPrintFunc, setConsoleObjPrintFunc, console_command, command } = require("console") + +or:: + + from "console" import * + +.. code-block:: sq + + //'console' exports: + { + function register_command(arg0, arg1, arg2, arg3, ...): closure_and_nativeclosure, string, string, string, any_type -> _undocumented_ + function console_register_command(arg0, arg1, arg2, arg3, ...): closure_and_nativeclosure, string, string, string, any_type -> _undocumented_ + function setObjPrintFunc(arg0): closure_and_nativeclosure or null -> _undocumented_ + function setConsoleObjPrintFunc(arg0): closure_and_nativeclosure or null -> _undocumented_ + function console_command() + function command() + } + + +.. sq:function:: function register_command(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: closure_and_nativeclosure + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param arg2: autodoc from typemask/paramscheck + :type arg2: string + + :param arg3: autodoc from typemask/paramscheck + :type arg3: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, closure_and_nativeclosure, string, string, string`` + +.. sq:function:: function console_register_command(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: closure_and_nativeclosure + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param arg2: autodoc from typemask/paramscheck + :type arg2: string + + :param arg3: autodoc from typemask/paramscheck + :type arg3: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, closure_and_nativeclosure, string, string, string`` + +.. sq:function:: function setObjPrintFunc(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: closure_and_nativeclosure or null + + ``nparamscheck:2`` + + ``typecheck mask: any_type, closure_and_nativeclosure or null`` + +.. sq:function:: function setConsoleObjPrintFunc(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: closure_and_nativeclosure or null + + ``nparamscheck:2`` + + ``typecheck mask: any_type, closure_and_nativeclosure or null`` + +.. sq:function:: function console_command() + +.. sq:function:: function command() + +/; + + module_mgr->addNativeModule("console", exports); + + add_con_proc(this); + } + + + void clearScriptObjects() + { + scriptCommands.clear(); + objPrintFunc.Release(); + } + + +private: + void registerClosure(eastl::string const &name, ClosureInfo &closure_info) { scriptCommands[name] = closure_info; } + + + bool processCommand(const char *argv[], int argc) override { return executeScript(argv, argc) || callScriptHandler(argv, argc); } + + + bool callScriptHandler(const char *argv[], int argc) + { + if (ICommandProcessor::cmdCollector) + { + for (auto const &cmd : scriptCommands) + console::collector_cmp(argv[0], argc, cmd.first.c_str(), cmd.second.nParams, cmd.second.nParams, + cmd.second.description.c_str(), cmd.second.argsDescription.c_str()); + return false; + } + auto it = scriptCommands.find(argv[0]); + if (it == scriptCommands.end()) + return false; + + ClosureInfo &cinfo = it->second; + int found = console::collector_cmp(argv[0], argc, argv[0], cinfo.nParams, cinfo.nParams, cinfo.description.c_str(), + cinfo.argsDescription.c_str()); + if (found != 1) + return false; + + String params(framemem_ptr()); + params += '['; + for (int i = 1; i < argc; i++) + { + params += argv[i]; + if (i < argc - 1) + params += ", "; + } + params += ']'; + + Sqrat::Object sqParams = str_to_sqobj_via_json(sqvm, params); + + eastl::vector sqArray; + if (sqParams.GetType() == OT_ARRAY) + { + Sqrat::Array array(sqParams); + int n = array.Length(); + sqArray.resize(n); + for (int i = 0; i < n; ++i) + sqArray[i] = array[i]; + } + + SQPrintCollector printCollector(sqvm); + if (!cinfo.closure.ExecuteDynArgs(sqArray.data(), sqArray.size())) + console::error("failed to execute command: %s", printCollector.output.str()); + else + console::print_d(printCollector.output.str()); + + + return true; + } + + + bool executeScript(const char *argv[], int argc) + { + if (argc == 0 || !sqvm || !execCmd) + return false; + + int found = console::collector_cmp(argv[0], argc, execCmd, 2, 100); + if (found != 1 || ICommandProcessor::cmdCollector) + return false; + + String code(framemem_ptr()); + for (int i = 1; i < argc; i++) + { + code += argv[i]; + if (i < argc - 1) + code += " "; + } + + HSQUIRRELVM vm = sqvm; + SqStackChecker stackCheck(vm); + Sqrat::string errMsg; + SQPrintCollector printCollector(vm); + + String scriptSrc(framemem_ptr()); + scriptSrc.printf(0, "return (@() (\n\ + %s\n\ + ))()", + code.c_str()); + + stackCheck.check(); + + + HSQOBJECT bindings = interactiveEnv; + + if (SQ_SUCCEEDED(sq_compile(vm, scriptSrc.c_str(), scriptSrc.length(), "interactive", true, &bindings))) + { + HSQOBJECT scriptClosure; + sq_getstackobj(vm, -1, &scriptClosure); + Sqrat::Function func(vm, Sqrat::Object(vm), scriptClosure); + Sqrat::Object result; + if (func.Evaluate(result)) + { + Sqrat::Table objFormatSettings(vm); + objFormatSettings.SetValue("silentMode", true); + objFormatSettings.SetValue("printFn", make_func_obj(vm, sq_debug_print_to_output_str, "console_print_collect", 2)); + + Sqrat::Function debugTableDataSq = objPrintFunc; + if (debugTableDataSq.IsNull()) + { + debug("SqConsole: object printing function not found for this VM, 'tostring()' will be used instead"); + Sqrat::Object stubFunc = make_func_obj(vm, stub_debug_table_data, "stubDebugTableData", -2, nullptr); + debugTableDataSq = Sqrat::Function(vm, Sqrat::Object(vm), stubFunc); + } + + if (!debugTableDataSq.IsNull()) + debugTableDataSq.Execute(result, objFormatSettings); + } + sq_pop(vm, 1); // script closure + } + + stackCheck.check(); + + console::print_d(printCollector.output.str()); + + if (!errMsg.empty()) + console::error(errMsg.c_str()); + + return true; + } + + void destroy() override {} + + static SQInteger sqRegisterCommand(HSQUIRRELVM vm); + static SQInteger setObjPrintFunc(HSQUIRRELVM vm); + + +private: + HSQUIRRELVM sqvm; + Sqrat::Function objPrintFunc; + Sqrat::Table interactiveEnv; + String execCmd; + + eastl::hash_map scriptCommands; + + friend void create_script_console_processor(SqModules *module_mgr, const char *cmd); +}; + +static eastl::map sq_console_processors; + +void create_script_console_processor(SqModules *module_mgr, const char *cmd) +{ + HSQUIRRELVM vm = module_mgr->getVM(); + auto ins = sq_console_processors.insert(vm); + if (ins.second) // if inserted + ins.first->second.init(module_mgr, cmd); + else + { + SqConsoleProcessor &sqcp = ins.first->second; + if ((!cmd != sqcp.execCmd.empty()) || (cmd && !sqcp.execCmd.empty() && sqcp.execCmd != cmd)) + G_ASSERTF(0, "Console processor is already registered for this VM with different command: %s vs %s", cmd ? cmd : "", + !sqcp.execCmd.empty() ? sqcp.execCmd.c_str() : ""); + } +} + +void destroy_script_console_processor(HSQUIRRELVM vm) { sq_console_processors.erase(vm); } + + +void clear_script_console_processor(HSQUIRRELVM vm) +{ + auto it = sq_console_processors.find(vm); + if (it != sq_console_processors.end()) + it->second.clearScriptObjects(); +} + + +SQInteger SqConsoleProcessor::sqRegisterCommand(HSQUIRRELVM vm) +{ + auto sconIt = sq_console_processors.find(vm); + if (sconIt == sq_console_processors.end()) + return sq_throwerror(vm, "Script console is not active for this VM"); + + SQInteger nargs = sq_gettop(vm); + ClosureInfo closureInfo; + if (SQ_FAILED(sq_getclosureinfo(vm, 2, &closureInfo.nParams, &closureInfo.nFreevars))) + return SQ_ERROR; + + HSQOBJECT closureObj; + sq_getstackobj(vm, 2, &closureObj); + + closureInfo.closure = Sqrat::Function(vm, Sqrat::Object(vm), closureObj); + + if (SQ_FAILED(sq_getclosurename(vm, 2))) + return SQ_ERROR; + const char *closureName = nullptr; + bool anon = false; + if (SQ_FAILED(sq_getstring(vm, -1, &closureName)) || !closureName || closureName[0] == '(') + anon = true; + + eastl::string cmd; + if (nargs > 2) + { + const char *arg = nullptr; + G_VERIFY(SQ_SUCCEEDED(sq_getstring(vm, 3, &arg))); + if (!arg || !*arg) + return sq_throwerror(vm, "Command name must not be empty"); + + cmd = arg; + } + else if (!anon) + cmd = closureName; + else + return sq_throwerror(vm, "sqRegisterCommand: you must specify name for anonymous closure"); + +#if DAGOR_DBGLEVEL > 0 + if (nargs > 3) + { + const char *arg = nullptr; + G_VERIFY(SQ_SUCCEEDED(sq_getstring(vm, 4, &arg))); + closureInfo.description = arg; + } +#endif + +#if DAGOR_DBGLEVEL > 0 + if (nargs > 4) + { + const char *arg = nullptr; + G_VERIFY(SQ_SUCCEEDED(sq_getstring(vm, 5, &arg))); + closureInfo.argsDescription = arg; + } + else if (sq_isclosure(closureObj)) + { + eastl::string argsDesc; + SQFunctionProto *sq_function_proto = closureObj._unVal.pClosure->_function; + for (int i = 1, n = sq_function_proto->_nparameters; i < n; ++i) + { + SQObjectPtr parameter = sq_function_proto->_parameters[i]; + if (sq_isstring(parameter)) + { + const char *paramName = _stringval(parameter); + argsDesc.append_sprintf("<%s> ", paramName); + } + } + closureInfo.argsDescription = argsDesc; + } +#endif + + sconIt->second.registerClosure(cmd, closureInfo); + return 0; +} + + +SQInteger SqConsoleProcessor::setObjPrintFunc(HSQUIRRELVM vm) +{ + auto sconIt = sq_console_processors.find(vm); + if (sconIt == sq_console_processors.end()) + return sq_throwerror(vm, "Script console is not active for this VM"); + + SqConsoleProcessor &self = sconIt->second; + + Sqrat::Var func(vm, 2); + if (!func.value.IsNull()) + self.objPrintFunc = Sqrat::Function(vm, Sqrat::Object(vm), func.value); + else + self.objPrintFunc.Release(); + return 0; +} + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daEditorEmbedded.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daEditorEmbedded.rst.txt new file mode 100644 index 000000000..4fad1f33d --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daEditorEmbedded.rst.txt @@ -0,0 +1,81 @@ +.. autogenerated + +**************** +daEditorEmbedded +**************** + +module 'daEditorEmbedded' + + + +*Source file: prog/gameLibs/daEditorE/daEditorE_sq.cpp* + +Usage:: + + let { setEditMode, getEditMode, isFreeCamMode, DE4_MODE_SELECT, DE4_MODE_MOVE, DE4_MODE_MOVE_SURF, DE4_MODE_ROTATE, DE4_MODE_SCALE, DE4_MODE_POINT_ACTION, DE4_CMD_DROP, DE4_CMD_DEL, setWorkMode, getWorkMode, setPointActionPreview } = require("daEditorEmbedded") + +or:: + + from "daEditorEmbedded" import * + +.. code-block:: sq + + //'daEditorEmbedded' exports: + { + function setEditMode() + function getEditMode() + function isFreeCamMode() + value DE4_MODE_SELECT + value DE4_MODE_MOVE + value DE4_MODE_MOVE_SURF + value DE4_MODE_ROTATE + value DE4_MODE_SCALE + value DE4_MODE_POINT_ACTION + value DE4_CMD_DROP + value DE4_CMD_DEL + function setWorkMode() + function getWorkMode() + function setPointActionPreview() + } + + +.. sq:function:: function setEditMode() + +.. sq:function:: function getEditMode() + +.. sq:function:: function isFreeCamMode() + +.. sq:attribute:: DE4_MODE_SELECT + +.. sq:attribute:: DE4_MODE_MOVE + +.. sq:attribute:: DE4_MODE_MOVE_SURF + +.. sq:attribute:: DE4_MODE_ROTATE + +.. sq:attribute:: DE4_MODE_SCALE + +.. sq:attribute:: DE4_MODE_POINT_ACTION + +.. sq:attribute:: DE4_CMD_DROP + +.. sq:attribute:: DE4_CMD_DEL + +.. sq:function:: function setWorkMode() + +.. sq:function:: function getWorkMode() + +.. sq:function:: function setPointActionPreview() + +/; + module_mgr->addNativeModule("daEditorEmbedded", daEditor); +} + + +void ObjectEditor::updateToolbarButtons() +{ + sqeventbus::send_event("daEditorEmbedded.onDeSetWorkMode", Json::Value(workMode.c_str())); + sqeventbus::send_event("daEditorEmbedded.onDeSetEditMode", Json::Value(editMode)); +} + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.debug.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.debug.rst.txt new file mode 100644 index 000000000..f9fdebfc5 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.debug.rst.txt @@ -0,0 +1,35 @@ +.. autogenerated + +********** +daRg.debug +********** + +module 'daRg.debug' + + + +*Source file: prog/gameLibs/daRg/scriptBinding.cpp* + +Usage:: + + let { } = require("daRg.debug") + +or:: + + from "daRg.debug" import * + +.. code-block:: sq + + //'daRg.debug' exports: + { + } + + + dargDebug.Func("requireFontSizeSlot", dbg_set_require_font_size_slot); + module_mgr->addNativeModule("daRg.debug", dargDebug); +} + +} // namespace binding + +} // namespace darg + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.rst.txt new file mode 100644 index 000000000..b74c5455b --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.rst.txt @@ -0,0 +1,1752 @@ +.. autogenerated + +**** +daRg +**** + +module 'daRg' + + + +*Source file: prog/gameLibs/daRg/elementRef.cpp* + +Usage:: + + let { KBD_BIT_CAPS_LOCK, KBD_BIT_NUM_LOCK, KBD_BIT_SCROLL_LOCK, PANEL_ANCHOR_NONE, PANEL_ANCHOR_SCENE, PANEL_ANCHOR_VRSPACE, PANEL_ANCHOR_HEAD, PANEL_ANCHOR_LEFTHAND, PANEL_ANCHOR_RIGHTHAND, PANEL_ANCHOR_ENTITY, PANEL_GEOMETRY_NONE, PANEL_GEOMETRY_RECTANGLE, PANEL_RC_NONE, PANEL_RC_FACE_LEFT_HAND, PANEL_RC_FACE_RIGHT_HAND, PANEL_RC_FACE_HEAD, PANEL_RC_FACE_HEAD_LOCK_Y, PANEL_RC_FACE_ENTITY, PANEL_RENDER_CAST_SHADOW, PANEL_RENDER_OPAQUE, PANEL_RENDER_ALWAYS_ON_TOP, GuiScene, SceneConfig, anim_start, anim_request_stop, anim_skip, anim_skip_delay, set_kb_focus, capture_kb_focus, calc_comp_size, move_mouse_cursor, get_mouse_cursor_pos, resolve_button_id, gui_scene, FLOW_PARENT_RELATIVE, FLOW_HORIZONTAL, FLOW_VERTICAL, ALIGN_LEFT, ALIGN_TOP, ALIGN_RIGHT, ALIGN_BOTTOM, ALIGN_CENTER, VECTOR_WIDTH, VECTOR_COLOR, VECTOR_FILL_COLOR, VECTOR_MID_COLOR, VECTOR_OUTER_LINE, VECTOR_CENTER_LINE, VECTOR_INNER_LINE, VECTOR_TM_OFFSET, VECTOR_TM_SCALE, VECTOR_LINE, VECTOR_LINE_INDENT_PX, VECTOR_LINE_INDENT_PCT, VECTOR_ELLIPSE, VECTOR_SECTOR, VECTOR_RECTANGLE, VECTOR_POLY, VECTOR_INVERSE_POLY, VECTOR_OPACITY, VECTOR_LINE_DASHED, VECTOR_NOP, VECTOR_QUADS, FFT_NONE, FFT_SHADOW, FFT_GLOW, FFT_BLUR, FFT_OUTLINE, O_HORIZONTAL, O_VERTICAL, TOVERFLOW_CLIP, TOVERFLOW_CHAR, TOVERFLOW_WORD, TOVERFLOW_LINE, DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT, EVENT_BREAK, EVENT_CONTINUE, GESTURE_DETECTOR_DRAG, GESTURE_DETECTOR_PINCH, GESTURE_DETECTOR_ROTATE, Linear, InQuad, OutQuad, InOutQuad, InCubic, OutCubic, InOutCubic, InQuintic, OutQuintic, InOutQuintic, InQuart, OutQuart, InOutQuart, InSine, OutSine, InOutSine, InCirc, OutCirc, InOutCirc, InExp, OutExp, InOutExp, InElastic, OutElastic, InOutElastic, InBack, OutBack, InOutBack, InBounce, OutBounce, InOutBounce, InOutBezier, CosineFull, InStep, OutStep, Blink, DoubleBlink, BlinkSin, BlinkCos, Discrete8, Shake4, Shake6, S_KB_FOCUS, S_HOVER, S_TOP_HOVER, S_ACTIVE, S_MOUSE_ACTIVE, S_KBD_ACTIVE, S_HOTKEY_ACTIVE, S_TOUCH_ACTIVE, S_JOYSTICK_ACTIVE, S_VR_ACTIVE, S_DRAG, MR_NONE, MR_T, MR_R, MR_B, MR_L, MR_LT, MR_RT, MR_LB, MR_RB, MR_AREA, FMT_NO_WRAP, FMT_KEEP_SPACES, FMT_IGNORE_TAGS, FMT_HIDE_ELLIPSIS, FMT_AS_IS, DEVID_KEYBOARD, DEVID_MOUSE, DEVID_JOYSTICK, DEVID_TOUCH, DEVID_VR, KEEP_ASPECT_NONE, KEEP_ASPECT_FIT, KEEP_ASPECT_FILL, AXIS_L_THUMB_H, AXIS_L_THUMB_V, AXIS_R_THUMB_H, AXIS_R_THUMB_V, AXIS_L_TRIGGER, AXIS_R_TRIGGER, AXIS_LR_TRIGGER, XMB_STOP, XMB_CONTINUE, R_PROCESSED, SIZE_TO_CONTENT, Fonts, AnimProp, color, bgColor, fgColor, fillColor, borderColor, opacity, rotate, scale, translate, fValue, picSaturate, brightness, Behaviors, ScrollHandler, JoystickAxisObservable, ElemGroup, Behavior, Picture, Immediate, FormattedText, IGenVideoPlayer, IGenSound, DragAndDropState, EventDataRect, MouseClickEventData, HotkeyEventData, HoverEventData, MoveToAreaTarget, Color, sw, sh, flex, fontH, pw, ph, elemw, elemh, locate_element_source, get_element_info, get_font_metrics, resolve_button, setFontDefHt, getFontDefHt, getFontInitialHt, calc_str_box, LottieAnimation, ElementRef } = require("daRg") + +or:: + + from "daRg" import * + +.. code-block:: sq + + //'daRg' exports: + { + const KBD_BIT_CAPS_LOCK + const KBD_BIT_NUM_LOCK + const KBD_BIT_SCROLL_LOCK + const PANEL_ANCHOR_NONE + const PANEL_ANCHOR_SCENE + const PANEL_ANCHOR_VRSPACE + const PANEL_ANCHOR_HEAD + const PANEL_ANCHOR_LEFTHAND + const PANEL_ANCHOR_RIGHTHAND + const PANEL_ANCHOR_ENTITY + const PANEL_GEOMETRY_NONE + const PANEL_GEOMETRY_RECTANGLE + const PANEL_RC_NONE + const PANEL_RC_FACE_LEFT_HAND + const PANEL_RC_FACE_RIGHT_HAND + const PANEL_RC_FACE_HEAD + const PANEL_RC_FACE_HEAD_LOCK_Y + const PANEL_RC_FACE_ENTITY + const PANEL_RENDER_CAST_SHADOW + const PANEL_RENDER_OPAQUE + const PANEL_RENDER_ALWAYS_ON_TOP + class GuiScene + class SceneConfig + function anim_start() + function anim_request_stop() + function anim_skip() + function anim_skip_delay() + function set_kb_focus() + function capture_kb_focus() + function calc_comp_size(arg0): null or table or closure_and_nativeclosure or class_instance or class -> _undocumented_ + function move_mouse_cursor(arg0, arg1, ...): any_type, bool, any_type -> _undocumented_ + function get_mouse_cursor_pos(arg0, ...): class_instance, any_type -> _undocumented_ + function resolve_button_id(arg0): string -> _undocumented_ + value gui_scene + const FLOW_PARENT_RELATIVE + const FLOW_HORIZONTAL + const FLOW_VERTICAL + const ALIGN_LEFT + const ALIGN_TOP + const ALIGN_RIGHT + const ALIGN_BOTTOM + const ALIGN_CENTER + const VECTOR_WIDTH + const VECTOR_COLOR + const VECTOR_FILL_COLOR + const VECTOR_MID_COLOR + const VECTOR_OUTER_LINE + const VECTOR_CENTER_LINE + const VECTOR_INNER_LINE + const VECTOR_TM_OFFSET + const VECTOR_TM_SCALE + const VECTOR_LINE + const VECTOR_LINE_INDENT_PX + const VECTOR_LINE_INDENT_PCT + const VECTOR_ELLIPSE + const VECTOR_SECTOR + const VECTOR_RECTANGLE + const VECTOR_POLY + const VECTOR_INVERSE_POLY + const VECTOR_OPACITY + const VECTOR_LINE_DASHED + const VECTOR_NOP + const VECTOR_QUADS + const FFT_NONE + const FFT_SHADOW + const FFT_GLOW + const FFT_BLUR + const FFT_OUTLINE + const O_HORIZONTAL + const O_VERTICAL + const TOVERFLOW_CLIP + const TOVERFLOW_CHAR + const TOVERFLOW_WORD + const TOVERFLOW_LINE + const DIR_UP + const DIR_DOWN + const DIR_LEFT + const DIR_RIGHT + const EVENT_BREAK + const EVENT_CONTINUE + const GESTURE_DETECTOR_DRAG + const GESTURE_DETECTOR_PINCH + const GESTURE_DETECTOR_ROTATE + const Linear + const InQuad + const OutQuad + const InOutQuad + const InCubic + const OutCubic + const InOutCubic + const InQuintic + const OutQuintic + const InOutQuintic + const InQuart + const OutQuart + const InOutQuart + const InSine + const OutSine + const InOutSine + const InCirc + const OutCirc + const InOutCirc + const InExp + const OutExp + const InOutExp + const InElastic + const OutElastic + const InOutElastic + const InBack + const OutBack + const InOutBack + const InBounce + const OutBounce + const InOutBounce + const InOutBezier + const CosineFull + const InStep + const OutStep + const Blink + const DoubleBlink + const BlinkSin + const BlinkCos + const Discrete8 + const Shake4 + const Shake6 + const S_KB_FOCUS + const S_HOVER + const S_TOP_HOVER + const S_ACTIVE + const S_MOUSE_ACTIVE + const S_KBD_ACTIVE + const S_HOTKEY_ACTIVE + const S_TOUCH_ACTIVE + const S_JOYSTICK_ACTIVE + const S_VR_ACTIVE + const S_DRAG + const MR_NONE + const MR_T + const MR_R + const MR_B + const MR_L + const MR_LT + const MR_RT + const MR_LB + const MR_RB + const MR_AREA + const FMT_NO_WRAP + const FMT_KEEP_SPACES + const FMT_IGNORE_TAGS + const FMT_HIDE_ELLIPSIS + const FMT_AS_IS + const DEVID_KEYBOARD + const DEVID_MOUSE + const DEVID_JOYSTICK + const DEVID_TOUCH + const DEVID_VR + const KEEP_ASPECT_NONE + const KEEP_ASPECT_FIT + const KEEP_ASPECT_FILL + const AXIS_L_THUMB_H + const AXIS_L_THUMB_V + const AXIS_R_THUMB_H + const AXIS_R_THUMB_V + const AXIS_L_TRIGGER + const AXIS_R_TRIGGER + const AXIS_LR_TRIGGER + const XMB_STOP + const XMB_CONTINUE + const R_PROCESSED + const SIZE_TO_CONTENT + value Fonts + enum AnimProp + value color + value bgColor + value fgColor + value fillColor + value borderColor + value opacity + value rotate + value scale + value translate + value fValue + value picSaturate + value brightness + table Behaviors + class ScrollHandler + class JoystickAxisObservable + class ElemGroup + class Behavior + class Picture + class Immediate + class FormattedText + class IGenVideoPlayer + class IGenSound + class DragAndDropState + class EventDataRect + class MouseClickEventData + class HotkeyEventData + class HoverEventData + class MoveToAreaTarget + function Color(arg0, arg1, arg2, arg3, ...): integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type -> _undocumented_ + function sw() + function sh() + function flex(arg0, ...): integer_or_float, any_type -> _undocumented_ + function fontH(arg0): integer_or_float -> _undocumented_ + function pw(arg0): integer_or_float -> _undocumented_ + function ph(arg0): integer_or_float -> _undocumented_ + function elemw(arg0): integer_or_float -> _undocumented_ + function elemh(arg0): integer_or_float -> _undocumented_ + function locate_element_source(arg0): class_instance -> _undocumented_ + function get_element_info(arg0): class_instance -> _undocumented_ + function get_font_metrics(arg0, ...): integer, any_type -> _undocumented_ + function resolve_button(fontId, fontHt): integer, float -> table + function setFontDefHt(font_name, pix_ht): string, integer -> bool + function getFontDefHt(font_name): string -> integer + function getFontInitialHt(font_name): string -> integer + function calc_str_box(element_or_text, element_or_style): string|closure_and_nativeclosure|table, table|closure_and_nativeclosure|null -> array + class LottieAnimation + class ElementRef + } + + +.. sq:attribute:: const KBD_BIT_CAPS_LOCK = 1 + +.. sq:attribute:: const KBD_BIT_NUM_LOCK = 2 + +.. sq:attribute:: const KBD_BIT_SCROLL_LOCK = 4 + +.. sq:attribute:: const PANEL_ANCHOR_NONE = int(PanelAnchor::None) + +.. sq:attribute:: const PANEL_ANCHOR_SCENE = int(PanelAnchor::Scene) + +.. sq:attribute:: const PANEL_ANCHOR_VRSPACE = int(PanelAnchor::VRSpace) + +.. sq:attribute:: const PANEL_ANCHOR_HEAD = int(PanelAnchor::Head) + +.. sq:attribute:: const PANEL_ANCHOR_LEFTHAND = int(PanelAnchor::LeftHand) + +.. sq:attribute:: const PANEL_ANCHOR_RIGHTHAND = int(PanelAnchor::RightHand) + +.. sq:attribute:: const PANEL_ANCHOR_ENTITY = int(PanelAnchor::Entity) + +.. sq:attribute:: const PANEL_GEOMETRY_NONE = int(PanelGeometry::None) + +.. sq:attribute:: const PANEL_GEOMETRY_RECTANGLE = int(PanelGeometry::Rectangle) + +.. sq:attribute:: const PANEL_RC_NONE = int(PanelRotationConstraint::None) + +.. sq:attribute:: const PANEL_RC_FACE_LEFT_HAND = int(PanelRotationConstraint::FaceLeftHand) + +.. sq:attribute:: const PANEL_RC_FACE_RIGHT_HAND = int(PanelRotationConstraint::FaceRightHand) + +.. sq:attribute:: const PANEL_RC_FACE_HEAD = int(PanelRotationConstraint::FaceHead) + +.. sq:attribute:: const PANEL_RC_FACE_HEAD_LOCK_Y = int(PanelRotationConstraint::FaceHeadLockY) + +.. sq:attribute:: const PANEL_RC_FACE_ENTITY = int(PanelRotationConstraint::FaceEntity) + +.. sq:attribute:: const PANEL_RENDER_CAST_SHADOW = int(darg_panel_renderer::RenderFeatures::CastShadow) + +.. sq:attribute:: const PANEL_RENDER_OPAQUE = int(darg_panel_renderer::RenderFeatures::Opaque) + +.. sq:attribute:: const PANEL_RENDER_ALWAYS_ON_TOP = int(darg_panel_renderer::RenderFeatures::AlwaysOnTop) + +-------------- +class GuiScene +-------------- + +.. sq:function:: method GuiScene.setUpdateHandler(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: closure_and_nativeclosure or null + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, closure_and_nativeclosure or null`` + +.. sq:function:: method GuiScene.setShutdownHandler(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: closure_and_nativeclosure or null + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, closure_and_nativeclosure or null`` + +.. sq:function:: method GuiScene.setHotkeysNavHandler(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: closure_and_nativeclosure or null + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, closure_and_nativeclosure or null`` + +.. sq:function:: method GuiScene.addPanel(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param arg2: autodoc from typemask/paramscheck + :type arg2: closure_and_nativeclosure or table + + ``nparamscheck:3`` + + ``typecheck mask: class_instance, integer, closure_and_nativeclosure or table`` + +.. sq:function:: method GuiScene.removePanel(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer`` + +.. sq:function:: method GuiScene.mark_panel_dirty(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer`` + +.. sq:function:: method GuiScene.setXmbFocus(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: null or table + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, null or table`` + +.. sq:function:: method GuiScene.getCompAABBbyKey() + +.. sq:function:: method GuiScene.setConfigProps(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: table + + ``nparamscheck:2`` + + ``typecheck mask: any_type, table`` + +.. sq:function:: method GuiScene.haveActiveCursorOnPanels() + +.. sq:function:: method GuiScene.clearTimer() + +.. sq:attribute:: property GuiScene.config + + ``readonly`` + +.. sq:function:: method GuiScene.getAllObservables() + +.. sq:attribute:: property GuiScene.cursorPresent + + ``readonly`` + +.. sq:attribute:: property GuiScene.cursorOverStickScroll + + ``readonly`` + +.. sq:attribute:: property GuiScene.cursorOverClickable + + ``readonly`` + +.. sq:attribute:: property GuiScene.hoveredClickableInfo + + ``readonly`` + +.. sq:attribute:: property GuiScene.keyboardLayout + + ``readonly`` + +.. sq:attribute:: property GuiScene.keyboardLocks + + ``readonly`` + +.. sq:attribute:: property GuiScene.updateCounter + + ``readonly`` + +.. sq:attribute:: property GuiScene.circleButtonAsAction + + ``readonly`` + +.. sq:attribute:: property GuiScene.xmbMode + + ``readonly`` + +.. sq:function:: method GuiScene.getJoystickAxis() + +.. sq:function:: method GuiScene.enableInput() + +.. sq:function:: method GuiScene.forceCursorActive(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: bool or null + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, bool or null`` + +/; + +#define V(x) .Var(#x, &SceneConfig::x) + + + + + + +----------------- +class SceneConfig +----------------- + + Sqrat::Class> sqSceneConfig(sqvm, "SceneConfig"); + sqSceneConfig + + +.. sq:attribute:: var SceneConfig.defaultFont + + .SquirrelProp("defaultFont", SceneConfig::getDefaultFontId, SceneConfig::setDefaultFontId) + + +.. sq:attribute:: var SceneConfig.defaultFontSize + + .SquirrelProp("defaultFontSize", SceneConfig::getDefaultFontSize, SceneConfig::setDefaultFontSize) + + +.. sq:attribute:: var SceneConfig.kbCursorControl + + V(kbCursorControl) + + +.. sq:attribute:: var SceneConfig.gamepadCursorControl + + V(gamepadCursorControl) + + +.. sq:attribute:: var SceneConfig.gamepadCursorSpeed + + V(gamepadCursorSpeed) + + +.. sq:attribute:: var SceneConfig.gamepadCursorHoverMaxTime + + V(gamepadCursorHoverMaxTime) + + +.. sq:attribute:: var SceneConfig.gamepadCursorAxisV + + V(gamepadCursorAxisV) + + +.. sq:attribute:: var SceneConfig.gamepadCursorAxisH + + V(gamepadCursorAxisH) + + +.. sq:attribute:: var gamepadCursorHoverMinMul + + V(gamepadCursorHoverMinMul) + + +.. sq:attribute:: var SceneConfig.gamepadCursorHoverMaxMul + + V(gamepadCursorHoverMaxMul) + + +.. sq:attribute:: var SceneConfig.gamepadCursorDeadZone + + V(gamepadCursorDeadZone) + + +.. sq:attribute:: var SceneConfig.gamepadCursorNonLin + + V(gamepadCursorNonLin) + + +.. sq:attribute:: var SceneConfig.reportNestedWatchedUpdate + + V(reportNestedWatchedUpdate) + + +.. sq:attribute:: var SceneConfig.joystickScrollAxisH + + V(joystickScrollAxisH) + + +.. sq:attribute:: var SceneConfig.joystickScrollAxisV + + V(joystickScrollAxisV) + + +.. sq:attribute:: var SceneConfig.clickRumbleEnabled + + V(clickRumbleEnabled) + + +.. sq:attribute:: var SceneConfig.clickRumbleLoFreq + + V(clickRumbleLoFreq) + + +.. sq:attribute:: var SceneConfig.clickRumbleHiFreq + + V(clickRumbleHiFreq) + + +.. sq:attribute:: var SceneConfig.clickRumbleDuration + + V(clickRumbleDuration) + + +.. sq:attribute:: var SceneConfig.dirPadRepeatDelay + + V(dirPadRepeatDelay) + + +.. sq:attribute:: var SceneConfig.dirPadRepeatTime + + V(dirPadRepeatTime) + + +.. sq:attribute:: var SceneConfig.useDefaultCursor + + V(useDefaultCursor) + + +.. sq:attribute:: var SceneConfig.defaultCursor + + V(defaultCursor) + + +.. sq:attribute:: var SceneConfig.clickPriority + + V(actionClickByBehavior) + .Prop("defSceneBgColor", &SceneConfig::getDefSceneBgColor, &SceneConfig::setDefSceneBgColor) + .Prop("defTextColor", &SceneConfig::getDefTextColor, &SceneConfig::setDefTextColor) + .SquirrelFunc("setClickButtons", &SceneConfig::setClickButtons, 2, "xa") + .SquirrelFunc("getClickButtons", &SceneConfig::getClickButtons, 1, "x") +/* + + + + + +.. sq:function:: function anim_start() + +.. sq:function:: function anim_request_stop() + +.. sq:function:: function anim_skip() + +.. sq:function:: function anim_skip_delay() + +.. sq:function:: function set_kb_focus() + +.. sq:function:: function capture_kb_focus() + +.. sq:function:: function calc_comp_size(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: null or table or closure_and_nativeclosure or class_instance or class + + ``nparamscheck:2`` + + ``typecheck mask: any_type, null or table or closure_and_nativeclosure or class_instance or class`` + +.. sq:function:: function move_mouse_cursor(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: bool + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, any_type, bool`` + +.. sq:function:: function get_mouse_cursor_pos(arg0, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-1`` + + ``typecheck mask: any_type, class_instance`` + +.. sq:function:: function resolve_button_id(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:attribute:: gui_scene = instance of GuiScene + + ``type: GuiScene`` + +/; + + moduleMgr->addNativeModule("daRg", dargModuleExports); +} + + +} // namespace darg + +.. sq:attribute:: const FLOW_PARENT_RELATIVE + +.. sq:attribute:: const FLOW_HORIZONTAL + +.. sq:attribute:: const FLOW_VERTICAL + +.. sq:attribute:: const ALIGN_LEFT = ALIGN_LEFT + +.. sq:attribute:: const ALIGN_TOP = ALIGN_TOP + +.. sq:attribute:: const ALIGN_RIGHT = ALIGN_RIGHT + +.. sq:attribute:: const ALIGN_BOTTOM = ALIGN_BOTTOM + +.. sq:attribute:: const ALIGN_CENTER = ALIGN_CENTER + +.. sq:attribute:: const VECTOR_WIDTH + +.. sq:attribute:: const VECTOR_COLOR + +.. sq:attribute:: const VECTOR_FILL_COLOR + +.. sq:attribute:: const VECTOR_MID_COLOR + +.. sq:attribute:: const VECTOR_OUTER_LINE + +.. sq:attribute:: const VECTOR_CENTER_LINE + +.. sq:attribute:: const VECTOR_INNER_LINE + +.. sq:attribute:: const VECTOR_TM_OFFSET + +.. sq:attribute:: const VECTOR_TM_SCALE + +.. sq:attribute:: const VECTOR_LINE + +.. sq:attribute:: const VECTOR_LINE_INDENT_PX + +.. sq:attribute:: const VECTOR_LINE_INDENT_PCT + +.. sq:attribute:: const VECTOR_ELLIPSE + +.. sq:attribute:: const VECTOR_SECTOR + +.. sq:attribute:: const VECTOR_RECTANGLE + +.. sq:attribute:: const VECTOR_POLY + +.. sq:attribute:: const VECTOR_INVERSE_POLY + +.. sq:attribute:: const VECTOR_OPACITY + +.. sq:attribute:: const VECTOR_LINE_DASHED + +.. sq:attribute:: const VECTOR_NOP + +.. sq:attribute:: const VECTOR_QUADS + +.. sq:attribute:: const FFT_NONE + +.. sq:attribute:: const FFT_SHADOW + +.. sq:attribute:: const FFT_GLOW + +.. sq:attribute:: const FFT_BLUR + +.. sq:attribute:: const FFT_OUTLINE + +.. sq:attribute:: const O_HORIZONTAL + +.. sq:attribute:: const O_VERTICAL + +.. sq:attribute:: const TOVERFLOW_CLIP + +.. sq:attribute:: const TOVERFLOW_CHAR + +.. sq:attribute:: const TOVERFLOW_WORD + +.. sq:attribute:: const TOVERFLOW_LINE + +.. sq:attribute:: const DIR_UP + +.. sq:attribute:: const DIR_DOWN + +.. sq:attribute:: const DIR_LEFT + +.. sq:attribute:: const DIR_RIGHT + +.. sq:attribute:: const EVENT_BREAK = GuiScene::EVENT_BREAK + +.. sq:attribute:: const EVENT_CONTINUE = GuiScene::EVENT_CONTINUE + +.. sq:attribute:: const GESTURE_DETECTOR_DRAG = GestureDetector::Type::DRAG + +.. sq:attribute:: const GESTURE_DETECTOR_PINCH = GestureDetector::Type::PINCH + +.. sq:attribute:: const GESTURE_DETECTOR_ROTATE = GestureDetector::Type::ROTATE + +.. sq:attribute:: const Linear + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InQuad + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutQuad + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutQuad + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InCubic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutCubic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutCubic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InQuintic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutQuintic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutQuintic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InQuart + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutQuart + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutQuart + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InSine + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutSine + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutSine + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InCirc + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutCirc + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutCirc + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InExp + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutExp + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutExp + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InElastic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutElastic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutElastic + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InBack + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutBack + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutBack + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InBounce + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutBounce + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutBounce + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InOutBezier + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const CosineFull + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const InStep + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const OutStep + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const Blink + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const DoubleBlink + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const BlinkSin + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const BlinkCos + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const Discrete8 + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const Shake4 + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const Shake6 + +Easing function for prebuilt animations functions. + +.. sq:attribute:: const S_KB_FOCUS + +State flag for keyboard focus. + +.. sq:attribute:: const S_HOVER + +.. sq:attribute:: const S_TOP_HOVER + +.. sq:attribute:: const S_ACTIVE + +state flag for 'pressed' button. + +.. sq:attribute:: const S_MOUSE_ACTIVE + +state flag for 'pressed' button with mouse. + +.. sq:attribute:: const S_KBD_ACTIVE + +state flag for 'pressed' button with keyboard. + +.. sq:attribute:: const S_HOTKEY_ACTIVE + +state flag for 'pressed' button with hotkey. + +.. sq:attribute:: const S_TOUCH_ACTIVE + +state flag for pressed button with touch device. + +.. sq:attribute:: const S_JOYSTICK_ACTIVE + +state flag for pressed button with joystick/gamepad device. + +.. sq:attribute:: const S_VR_ACTIVE + +state flag for pressed button with VR controller. + +.. sq:attribute:: const S_DRAG + +state flag for dragged state. + +.. sq:attribute:: const MR_NONE + +.MOVE_RESIZE Beahvior constants, to define where was point started move or resize + +.. sq:attribute:: const MR_T + +.. sq:attribute:: const MR_R + +.. sq:attribute:: const MR_B + +.. sq:attribute:: const MR_L + +.. sq:attribute:: const MR_LT + +.. sq:attribute:: const MR_RT + +.. sq:attribute:: const MR_LB + +.. sq:attribute:: const MR_RB + +.. sq:attribute:: const MR_AREA + +.. sq:attribute:: const FMT_NO_WRAP + +.. sq:attribute:: const FMT_KEEP_SPACES + +.. sq:attribute:: const FMT_IGNORE_TAGS + +.. sq:attribute:: const FMT_HIDE_ELLIPSIS + +.. sq:attribute:: const FMT_AS_IS + +.. sq:attribute:: const DEVID_KEYBOARD + +.. sq:attribute:: const DEVID_MOUSE + +.. sq:attribute:: const DEVID_JOYSTICK + +.. sq:attribute:: const DEVID_TOUCH + +.. sq:attribute:: const DEVID_VR + +.. sq:attribute:: const KEEP_ASPECT_NONE + +.. sq:attribute:: const KEEP_ASPECT_FIT + +.. sq:attribute:: const KEEP_ASPECT_FILL + +.. sq:attribute:: const AXIS_L_THUMB_H + +.. sq:attribute:: const AXIS_L_THUMB_V + +.. sq:attribute:: const AXIS_R_THUMB_H + +.. sq:attribute:: const AXIS_R_THUMB_V + +.. sq:attribute:: const AXIS_L_TRIGGER + +.. sq:attribute:: const AXIS_R_TRIGGER + +.. sq:attribute:: const AXIS_LR_TRIGGER + +.. sq:attribute:: const XMB_STOP + +.. sq:attribute:: const XMB_CONTINUE + +.. sq:attribute:: const R_PROCESSED + +.. sq:attribute:: const SIZE_TO_CONTENT + +.. sq:attribute:: Fonts + + + + + +------------- +enum AnimProp +------------- + + + + +.. sq:attribute:: color + +.. sq:attribute:: bgColor + +.. sq:attribute:: fgColor + +.. sq:attribute:: fillColor + +.. sq:attribute:: borderColor + +.. sq:attribute:: opacity + +.. sq:attribute:: rotate + +.. sq:attribute:: scale + +.. sq:attribute:: translate + +.. sq:attribute:: fValue + +.. sq:attribute:: picSaturate + +.. sq:attribute:: brightness + +/; + + + + + + +--------------- +table Behaviors +--------------- + + +.. sq:attribute:: const Behaviors.Button + + BHV(Button, bhv_button) + + +.. sq:attribute:: const Behaviors.TextArea + + BHV(TextArea, bhv_text_area) + + +.. sq:attribute:: const Behaviors.TextInput + + BHV(TextInput, bhv_text_input) + + +.. sq:attribute:: const Behaviors.Slider + + BHV(Slider, bhv_slider) + + +.. sq:attribute:: const Behaviors.Pannable + + BHV(Pannable, bhv_pannable) + + +.. sq:attribute:: const Behaviors.Pannable2touch + + BHV(Pannable2touch, bhv_pannable_2touch) + + +.. sq:attribute:: const Behaviors.SwipeScroll + + BHV(SwipeScroll, bhv_swipe_scroll) + + +.. sq:attribute:: const Behaviors.MoveResize + + BHV(MoveResize, bhv_move_resize) + + +.. sq:attribute:: const Behaviors.ComboPopup + + BHV(ComboPopup, bhv_combo_popup) + + +.. sq:attribute:: const Behaviors.SmoothScrollStack + + BHV(SmoothScrollStack, bhv_smooth_scroll_stack) + + +.. sq:attribute:: const Behaviors.Marquee + + BHV(Marquee, bhv_marquee) + + +.. sq:attribute:: const Behaviors.WheelScroll + + BHV(WheelScroll, bhv_wheel_scroll) + + +.. sq:attribute:: const Behaviors.ScrollEvent + + BHV(ScrollEvent, bhv_scroll_event) + + +.. sq:attribute:: const Behaviors.InspectPicker + + BHV(InspectPicker, bhv_inspect_picker) + + +.. sq:attribute:: const Behaviors.RtPropUpdate + + BHV(RtPropUpdate, bhv_rt_prop_update) + + +.. sq:attribute:: const Behaviors.RecalcHandler + + BHV(RecalcHandler, bhv_recalc_handler) + + +.. sq:attribute:: const Behaviors.DragAndDrop + + BHV(DragAndDrop, bhv_drag_and_drop) + + +.. sq:attribute:: const Behaviors.FpsBar + + BHV(FpsBar, bhv_fps_bar) + + +.. sq:attribute:: const Behaviors.LatencyBar + + BHV(LatencyBar, bhv_latency_bar) + + +.. sq:attribute:: const Behaviors.OverlayTransparency + + BHV(OverlayTransparency, bhv_overlay_transparency) + +.. sq:attribute:: const Behaviors.BoundToArea + + place object inside an area (like placing tooltip under cursor BUT inside screen) + + +.. sq:attribute:: const Behaviors.Movie + + + fields in component description: + + @code: + movie:string = + loop:boolean = default true. Should video be looped + sound:string = path to .mp3 sound file. By default movie file with .mp3 added (like ".mp3".). + enableSound:boolean = default true. Will play sound if sound track exists. Note: sound is not synced with video. + onStart: function = optional callback, called when movie started + onError: function = optional callback, called when playback failed to start + onFinish: function = optional callback, called when movie finished/terminated (can be used to remove it from layout) + code@ + + + +.. note:: + + Note: sound is played only for one-shot video. + + + +.. sq:attribute:: const Behaviors.Parallax + +.. sq:attribute:: const Behaviors.PieMenu + +.. sq:attribute:: const Behaviors.TransitionSize + +.. sq:attribute:: const Behaviors.TrackMouse + +.. sq:attribute:: const Behaviors.MoveToArea + +.. sq:attribute:: const Behaviors.ProcessPointingInput + +.. sq:attribute:: const Behaviors.ProcessGesture + +.. sq:attribute:: const Behaviors.EatInput + +.. sq:attribute:: const Behaviors.TextAreaEdit + + + + + + +------------------- +class ScrollHandler +------------------- + +.. sq:method:: ScrollHandler() + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ScrollHandler.scrollToX() + +.. sq:function:: method ScrollHandler.scrollToY() + +.. sq:function:: method ScrollHandler.scrollToChildren() + +.. sq:attribute:: property ScrollHandler.elem + + ``readonly`` + +/; + + + + + + + +---------------------------- +class JoystickAxisObservable +---------------------------- + + Sqrat::DerivedClass joyAxisObservable(sqvm, "JoystickAxisObservable"); + joyAxisObservable // + .Prop("value", &JoystickAxisObservable::getValue) + .Var("resolution", &JoystickAxisObservable::resolution) + .Var("deadzone", &JoystickAxisObservable::deadzone) +/* + + + + +--------------- +class ElemGroup +--------------- + + + + + +-------------- +class Behavior +-------------- + + + + + +------------- +class Picture +------------- + +.. sq:method:: Picture(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: null or string + + ``typecheck mask: any_type, null or string`` + + + + + +------------------------------- +class Immediate extends Picture +------------------------------- + +.. sq:method:: Immediate(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: null or string + + ``typecheck mask: any_type, null or string`` + + + + + +------------------- +class FormattedText +------------------- + + + + + +--------------------- +class IGenVideoPlayer +--------------------- + + + + + +--------------- +class IGenSound +--------------- + + + + + +---------------------- +class DragAndDropState +---------------------- + + + + + +------------------- +class EventDataRect +------------------- + +.. sq:attribute:: EventDataRect.l + +.. sq:attribute:: EventDataRect.t + +.. sq:attribute:: EventDataRect.r + +.. sq:attribute:: EventDataRect.b + + + + + +------------------------- +class MouseClickEventData +------------------------- + +.. sq:attribute:: property MouseClickEventData.targetRect + + ``readonly`` + +/; +#undef V + + + + + + + +--------------------- +class HotkeyEventData +--------------------- + + Sqrat::Class> sqHotkeyEventData(sqvm, "HotkeyEventData"); + sqHotkeyEventData.Prop("targetRect", &HotkeyEventData::getTargetRect); + + + + + + +-------------------- +class HoverEventData +-------------------- + + Sqrat::Class> sqHoverEventData(sqvm, "HoverEventData"); + sqHoverEventData.Prop("targetRect", &HoverEventData::getTargetRect); + + Sqrat::Class sqTransitAll(sqvm, "TransitAll"); + sqTransitAll.Ctor(); + + EditableText::bind_script(exports); + + + + + + +---------------------- +class MoveToAreaTarget +---------------------- + + Sqrat::Class sqBhvMoveToAreaTarget(sqvm, "BhvMoveToAreaTarget"); + sqBhvMoveToAreaTarget // + .Func("set", &BhvMoveToAreaTarget::set) + .Func("clear", &BhvMoveToAreaTarget::clear) +/* + + + + +.. sq:function:: function Color(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer_or_float + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-4`` + + ``typecheck mask: any_type, integer_or_float, integer_or_float, integer_or_float, integer_or_float`` + +.. sq:function:: function sw() + +.. sq:function:: function sh() + +.. sq:function:: function flex(arg0, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-1`` + + ``typecheck mask: any_type, integer_or_float`` + +.. sq:function:: function fontH(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer_or_float`` + +.. sq:function:: function pw(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer_or_float`` + +.. sq:function:: function ph(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer_or_float`` + +.. sq:function:: function elemw(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer_or_float`` + +.. sq:function:: function elemh(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer_or_float`` + +.. sq:function:: function locate_element_source(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: any_type, class_instance`` + +.. sq:function:: function get_element_info(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: any_type, class_instance`` + +.. sq:function:: function get_font_metrics(arg0, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, integer`` + +.. sq:function:: function resolve_button(fontId, fontHt) + + :param fontId: + :type fontId: integer + + :param fontHt: optional, default is _def_fontHt font height set in font + :type fontHt: float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + + :return: font_params + :rtype: table + + + + +.. code-block:: + :caption: font_params + + + { + _def_fontHt : def height + fontHt : height + capsHt : height of H + lineSpacing : linespacing + ascent + descent + lowercaseHeight : height of x + } + @code + + + +.. sq:function:: function setFontDefHt(font_name, pix_ht) + + :param font_name: + :type font_name: string + + :param pix_ht: + :type pix_ht: integer + + :return: bool + +.. sq:function:: function getFontDefHt(font_name) + + :param font_name: + :type font_name: string + + :return: integer + +.. sq:function:: function getFontInitialHt(font_name) + + :param font_name: + :type font_name: string + + :return: integer + +.. sq:function:: function calc_str_box(element_or_text, element_or_style) + + :param element_or_text: should be string of text or darg component description with 'text' in it + :type element_or_text: string|closure_and_nativeclosure|table + + :param element_or_style: optional, if first element is text, it should be provided with font properties + :type element_or_style: table|closure_and_nativeclosure|null + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, string or table or closure_and_nativeclosure, table or closure_and_nativeclosure or null`` + + :return: return array of two objects with width and height of text + :rtype: array + + + +/; + + register_constants(sqvm); + register_fonts(exports); + register_anim_props(sqvm); + + register_std_behaviors(module_mgr); + + register_rendobj_script_ids(sqvm); + + Cursor::bind_script(exports); + ElementRef::bind_script(sqvm); + Sqrat::Class> sqElement(sqvm, "@Element"); + + bind_das(exports); + + Sqrat::Table dargDebug(sqvm); + + +------------------------------------- +class LottieAnimation extends Picture +------------------------------------- + +.. sq:method:: LottieAnimation(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: null or string + + ``typecheck mask: any_type, null or string`` + + + + + +---------------- +class ElementRef +---------------- + +.. sq:function:: method ElementRef.getCompDesc() + +.. sq:function:: method ElementRef.getScreenPosX(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getScreenPosY(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getWidth(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getHeight(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getContentWidth(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getContentHeight(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getScrollOffsX(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method ElementRef.getScrollOffsY(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +/; +} + +} // namespace darg + + + + + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dacoll.trace.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dacoll.trace.rst.txt new file mode 100644 index 000000000..c4e181690 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dacoll.trace.rst.txt @@ -0,0 +1,65 @@ +.. autogenerated + +************ +dacoll.trace +************ + +module 'dacoll.trace' + + + +*Source file: prog/gameLibs/quirrel/sqDacoll/sqDacoll.cpp* + +Usage:: + + let { rayhit_normalized, traceray_normalized } = require("dacoll.trace") + +or:: + + from "dacoll.trace" import * + +.. code-block:: sq + + //'dacoll.trace' exports: + { + function rayhit_normalized(&from, &dir, t): integer, integer, float -> bool + function traceray_normalized(arg0, arg1, arg2): class_instance, class_instance, float or integer -> _undocumented_ + } + + +.. sq:function:: function rayhit_normalized(&from, &dir, t) + + :param &from: + :type &from: integer + + :param &dir: + :type &dir: integer + + :param t: + :type t: float + + :return: bool + +.. sq:function:: function traceray_normalized(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + :param arg2: autodoc from typemask/paramscheck + :type arg2: float or integer + + ``nparamscheck:4`` + + ``typecheck mask: any_type, class_instance, class_instance, float or integer`` + +/; + + module_mgr->addNativeModule("dacoll.trace", nsTbl); +} + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.clipboard.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.clipboard.rst.txt new file mode 100644 index 000000000..0f2d5c709 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.clipboard.rst.txt @@ -0,0 +1,52 @@ +.. autogenerated + +*************** +dagor.clipboard +*************** + +module 'dagor.clipboard' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorClipboard.cpp* + +Usage:: + + let { set_clipboard_text, get_clipboard_text } = require("dagor.clipboard") + +or:: + + from "dagor.clipboard" import * + +.. code-block:: sq + + //'dagor.clipboard' exports: + { + function set_clipboard_text(arg0): string -> _undocumented_ + function get_clipboard_text() + } + + +.. sq:function:: function set_clipboard_text(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: function get_clipboard_text() + + ``nparamscheck:1`` + + ``typecheck mask: any_type`` + +/; + module_mgr->addNativeModule("dagor.clipboard", exports); +} + + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.debug.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.debug.rst.txt new file mode 100644 index 000000000..edd6b43f1 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.debug.rst.txt @@ -0,0 +1,113 @@ +.. autogenerated + +*********** +dagor.debug +*********** + +module 'dagor.debug' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/sqratDagorDebug.cpp* + +Usage:: + + let { debug, fatal, screenlog, logerr, console_print, debug_dump_stack, assert, assertf, get_log_filename } = require("dagor.debug") + +or:: + + from "dagor.debug" import * + +.. code-block:: sq + + //'dagor.debug' exports: + { + function debug(msg): string -> null + function fatal(msg): string -> null + function screenlog(msg): string -> null + function logerr(arg0): string -> _undocumented_ + function console_print() + function debug_dump_stack() + function assert(arg0, arg1, ...): any_type, string, any_type -> _undocumented_ + function assertf(arg0, arg1): any_type, string -> _undocumented_ + function get_log_filename() + } + + +.. sq:function:: function debug(msg) + + :param msg: + :type msg: string + + :return: null + +.. sq:function:: function fatal(msg) + + :param msg: + :type msg: string + + :return: null + +.. sq:function:: function screenlog(msg) + + :param msg: + :type msg: string + + :return: null + +.. sq:function:: function logerr(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: function console_print() + +.. sq:function:: function debug_dump_stack() + + ``nparamscheck:1`` + + ``typecheck mask: any_type`` + +.. sq:function:: function assert(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, any_type, string`` + +.. sq:function:: function assertf(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + ``nparamscheck:3`` + + ``typecheck mask: any_type, any_type, string`` + +.. sq:function:: function get_log_filename() + +/; + logerr_interceptor_bind_api(nsTbl); + + module_mgr->addNativeModule("dagor.debug", nsTbl); + + Sqrat::Table perfTbl(vm); + + + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.folders.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.folders.rst.txt new file mode 100644 index 000000000..e4aa8f6ee --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.folders.rst.txt @@ -0,0 +1,105 @@ +.. autogenerated + +************* +dagor.folders +************* + +module 'dagor.folders' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorFolders.cpp* + +Usage:: + + let { get_exe_dir, get_game_dir, get_temp_dir, get_gamedata_dir, get_local_appdata_dir, get_common_appdata_dir, get_downloads_dir } = require("dagor.folders") + +or:: + + from "dagor.folders" import * + +.. code-block:: sq + + //'dagor.folders' exports: + { + function get_exe_dir(arg0): table -> _undocumented_ + function get_game_dir(arg0): table -> _undocumented_ + function get_temp_dir(arg0): table -> _undocumented_ + function get_gamedata_dir(arg0): table -> _undocumented_ + function get_local_appdata_dir(arg0): table -> _undocumented_ + function get_common_appdata_dir(arg0): table -> _undocumented_ + function get_downloads_dir(arg0): table -> _undocumented_ + } + + +.. sq:function:: function get_exe_dir(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: table + + ``nparamscheck:1`` + + ``typecheck mask: any_type, table`` + +.. sq:function:: function get_game_dir(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: table + + ``nparamscheck:1`` + + ``typecheck mask: any_type, table`` + +.. sq:function:: function get_temp_dir(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: table + + ``nparamscheck:1`` + + ``typecheck mask: any_type, table`` + +.. sq:function:: function get_gamedata_dir(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: table + + ``nparamscheck:1`` + + ``typecheck mask: any_type, table`` + +.. sq:function:: function get_local_appdata_dir(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: table + + ``nparamscheck:1`` + + ``typecheck mask: any_type, table`` + +.. sq:function:: function get_common_appdata_dir(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: table + + ``nparamscheck:1`` + + ``typecheck mask: any_type, table`` + +.. sq:function:: function get_downloads_dir(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: table + + ``nparamscheck:1`` + + ``typecheck mask: any_type, table`` + +/; + + module_mgr->addNativeModule("dagor.folders", exports); +} + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.rst.txt new file mode 100644 index 000000000..47f31f33f --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.rst.txt @@ -0,0 +1,202 @@ +.. autogenerated + +******** +dagor.fs +******** + +module 'dagor.fs' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorFS.cpp* + +Usage:: + + let { , file_exists, dir_exists, mkdir, mkpath, scan_folder, find_files, read_text_from_file, read_text_from_file_on_disk, stat } = require("dagor.fs") + +or:: + + from "dagor.fs" import * + +.. code-block:: sq + + //'dagor.fs' exports: + { + warning + function file_exists(path): string -> bool + function dir_exists(path): string -> bool + function mkdir(path): string -> bool + function mkpath(path): string -> bool + function scan_folder({root, vromfs, realfs, recursive, files_suffix, directories_only}): table -> array + function find_files(file_mask, params): string, table -> array + function read_text_from_file(arg0): string -> string + function read_text_from_file_on_disk(arg0): string -> string + function stat(filename): string -> table|null + } + + + + + +.. warning:: + + All functions in this module are sync. + Better never use them in production code, cause this can cause freeze and fps stutter (and usually will). + + + +.. sq:function:: function file_exists(path) + + :param path: + :type path: string + + :return: bool + +.. sq:function:: function dir_exists(path) + + :param path: + :type path: string + + :return: bool + +.. sq:function:: function mkdir(path) + + :param path: + :type path: string + + :return: bool + +.. sq:function:: function mkpath(path) + + :param path: + :type path: string + + :return: bool + +.. sq:function:: function scan_folder({root, vromfs, realfs, recursive, files_suffix, directories_only}) + + :param root: where to start scan + :type root: string + + :param vromfs: scan in vromfs + :type vromfs: bool + + :param realfs: scan in real file system + :type realfs: bool + + :param recursive: scan in real file system + :type recursive: bool + + :param files_suffix: suffix of files to be included in result + :type files_suffix: string + + :param directories_only: return only directories (works for realfs only) + :type directories_only: bool + + ``nparamscheck:2`` + + ``typecheck mask: any_type, table`` + + ``Function is kwarged - arguments passed in a table`` + + :return: array of found files with path on root + :rtype: array + + + + + +.. sq:function:: function find_files(file_mask, params) + + :param file_mask: file mask like *.nut or foo/some.nut + :type file_mask: string + + :param params: table of params, the only possible param is {maxCount:i = -1} (-1 is default, means no limit) + :type params: table + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, string, table`` + + :return: array of file_info + :rtype: array + + + + +.. code-block:: file_info + :caption: file_info + + + {name:s, isDirectory:b, isReadOnly:b, isHidden:b, size:i, accessTime:i, modifyTime:i} + + + +.. sq:function:: function read_text_from_file(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + + :return: file as string + :rtype: string + + + will open file from in VROMS only in some cases (on platforms different then PC, on not allowed modding) + + +.. sq:function:: function read_text_from_file_on_disk(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + + :return: file as string + :rtype: string + + + will open file from disk only + + +.. sq:function:: function stat(filename) + + :param filename: path to file to get info + :type filename: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + + :return: file_stat or or null if file not found + :rtype: table|null + + + + +.. code-block:: file_stat + :caption: file_stat + + + {size:i, atime:i, mtime:i, ctime:i} + + +/; + + module_mgr->addNativeModule("dagor.fs", exports); +} + + +void register_dagor_fs_vrom_module(SqModules *module_mgr) +{ + HSQUIRRELVM vm = module_mgr->getVM(); + Sqrat::Table exports(vm); + + + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.vrom.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.vrom.rst.txt new file mode 100644 index 000000000..d8cbac916 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.vrom.rst.txt @@ -0,0 +1,35 @@ +.. autogenerated + +************* +dagor.fs.vrom +************* + +module 'dagor.fs.vrom' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorFS.cpp* + +Usage:: + + let { } = require("dagor.fs.vrom") + +or:: + + from "dagor.fs.vrom" import * + +.. code-block:: sq + + //'dagor.fs.vrom' exports: + { + } + + + exports.SquirrelFunc("scan_vrom_folder", sq_scan_vrom_folder, 2, ".t"); + + module_mgr->addNativeModule("dagor.fs.vrom", exports); +} + + +} // namespace bindquirrel + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.http.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.http.rst.txt new file mode 100644 index 000000000..b1304c9ae --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.http.rst.txt @@ -0,0 +1,184 @@ +.. autogenerated + +********** +dagor.http +********** + +module 'dagor.http' + + + +*Source file: prog/gameLibs/quirrel/http/sqHttpClient.cpp* + +Usage:: + + let { requestHttp, httpRequest, httpAbort, httpDownload, HTTP_SUCCESS, HTTP_FAILED, HTTP_ABORTED, HTTP_SHUTDOWN } = require("dagor.http") + +or:: + + from "dagor.http" import * + +.. code-block:: sq + + //'dagor.http' exports: + { + function requestHttp({method, url, userAgent, headers, data, json, callback, context, respEventId, timeout_ms, waitable, needResponseHeaders = "default)"}): table -> integer + function httpRequest(arg0): table -> _undocumented_ + function httpAbort(arg0): integer -> _undocumented_ + function httpDownload(request_id): integer -> _undocumented_ + value HTTP_SUCCESS + value HTTP_FAILED + value HTTP_ABORTED + value HTTP_SHUTDOWN + } + + +.. sq:function:: function requestHttp({method, url, userAgent, headers, data, json, callback, context, respEventId, timeout_ms, waitable, needResponseHeaders = "default)"}) + + :param method: ("POST" (default), "GET", "HEAD"), optional + :type method: string + + :param url: + :type url: string + + :param userAgent: (optional) + :type userAgent: string + + :param headers: {string:string} (optional) + :type headers: table + + :param data: (optional) : request data which is treated as from-urlencoded data. If specified, json field is omitted + :type data: string|table|class_instance|class + + :param json: (optional) : request data which is treated as json data. If specified, data field is omitted + :type json: string|table|class_instance|class + + :param callback: ({status, http_code, response, headers}), optional + :type callback: any_type + + :param context: user data specific for request response, optional + :type context: table + + :param respEventId: (optional) : event id to send into eventbus + :type respEventId: string + + :param timeout_ms: (optional), DEF_REQUEST_TIMEOUT_MS by default (10 seconds) + :type timeout_ms: integer + + :param waitable: (optional, false by default) : if true then this request will be waited for on app shutdown + :type waitable: bool + + :param needResponseHeaders: , default = default) + :type needResponseHeaders: by + + ``Function is kwarged - arguments passed in a table`` + + :return: request id + :rtype: integer + + + + + +response in eventbus data or in callback will be table + + +.. code-block:: + :caption: response + + + { + "status" : integer (SUCCESS, FAILED, ABORTED) + "http_code" : integer + "context" : null | table | string + "headers" : table, optional + "reponce" : blob, optional + } + + + +.. sq:function:: function httpRequest(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: table + + ``nparamscheck:2`` + + ``typecheck mask: any_type, table`` + +.. sq:function:: function httpAbort(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer`` + +.. sq:function:: function httpDownload(request_id) + + :param request_id: + :type request_id: integer + + ``nparamscheck:2`` + + ``typecheck mask: any_type, table`` + +.. sq:attribute:: HTTP_SUCCESS + +.. sq:attribute:: HTTP_FAILED + +.. sq:attribute:: HTTP_ABORTED + +.. sq:attribute:: HTTP_SHUTDOWN + +/; + module_mgr->addNativeModule("dagor.http", nsTbl); +} + +void http_client_wait_active_requests(int timeout_ms) +{ + if (active_requests.empty()) + return; + int deadLineTime = timeout_ms ? get_time_msec() + timeout_ms : 0; + do + { + auto wit = eastl::find_if(active_requests.begin(), active_requests.end(), [](const auto &req) { return req->waitable; }); + if (wit != active_requests.end() && (!timeout_ms || get_time_msec() <= deadLineTime)) + { + httprequests::poll(); + sleep_msec(10); + } + else + break; + } while (1); +} + + +void http_client_on_vm_shutdown(HSQUIRRELVM vm) +{ + for (auto &req : active_requests) + { + if (req->callback.GetVM() == vm || req->context.GetVM() == vm) + { + req->callback.Release(); + req->context.Release(); + } + } + whitelists.erase(vm); +} + + +void http_set_domains_whitelist(HSQUIRRELVM vm, const eastl::vector &domains) +{ + eastl::hash_set &wl = whitelists[vm]; + wl.clear(); + wl.insert(domains.begin(), domains.end()); +} + + +void http_set_blocking_wait_mode(bool on) { blocking_wait_mode = on; } + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.iso8601.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.iso8601.rst.txt new file mode 100644 index 000000000..c78dd8410 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.iso8601.rst.txt @@ -0,0 +1,84 @@ +.. autogenerated + +************* +dagor.iso8601 +************* + +module 'dagor.iso8601' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/sqratIso8601Time.cpp* + +Usage:: + + let { parse_msec, parse_unix_time, format_msec, format_unix_time } = require("dagor.iso8601") + +or:: + + from "dagor.iso8601" import * + +.. code-block:: sq + + //'dagor.iso8601' exports: + { + function parse_msec(iso8601str): string -> integer + function parse_unix_time(iso8601str): string -> integer + function format_msec(ts): integer -> string + function format_unix_time(ts): integer -> string + } + + +.. sq:function:: function parse_msec(iso8601str) + + :param iso8601str: ISO-8601 timestamp + :type iso8601str: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + + :return: UNIX timestamp in milliseconds + :rtype: integer + +.. sq:function:: function parse_unix_time(iso8601str) + + Converts ISO-8601 timestamp string to UNIX timestamp integer. + + :param iso8601str: ISO-8601 timestamp + :type iso8601str: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + + :return: UNIX timestamp + :rtype: integer + +.. sq:function:: function format_msec(ts) + + :param ts: UNIX timestamp in milliseconds + :type ts: integer + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer`` + + :return: ISO-8601 timestamp + :rtype: string + +.. sq:function:: function format_unix_time(ts) + + Converts UNIX timestamp integer to ISO-8601 timestamp string. + + :param ts: UNIX timestamp + :type ts: integer + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer`` + + :return: ISO-8601 timestamp + :rtype: string + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.localize.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.localize.rst.txt new file mode 100644 index 000000000..ba46d0d6c --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.localize.rst.txt @@ -0,0 +1,118 @@ +.. autogenerated + +************** +dagor.localize +************** + +module 'dagor.localize' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/localization.cpp* + +Usage:: + + let { loc, getLocTextForLang, processHypenationsCN, processHypenationsJP, doesLocTextExist, getCurrentLanguage, getForceLanguage, setLanguageToSettings, initLocalization } = require("dagor.localize") + +or:: + + from "dagor.localize" import * + +.. code-block:: sq + + //'dagor.localize' exports: + { + function loc(arg0, ...): string or null, any_type -> _undocumented_ + function getLocTextForLang(arg0, arg1, ...): string, string or null, any_type -> _undocumented_ + function processHypenationsCN(arg0): string -> _undocumented_ + function processHypenationsJP(arg0): string -> _undocumented_ + function doesLocTextExist(arg0): string -> _undocumented_ + function getCurrentLanguage() + function getForceLanguage() + function setLanguageToSettings() + function initLocalization(arg0, arg1, ...): class_instance, string, any_type -> _undocumented_ + } + + +.. sq:function:: function loc(arg0, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, string or null`` + +.. sq:function:: function getLocTextForLang(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, string, string or null`` + +.. sq:function:: function processHypenationsCN(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: function processHypenationsJP(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: function doesLocTextExist(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: function getCurrentLanguage() + +.. sq:function:: function getForceLanguage() + +.. sq:function:: function setLanguageToSettings() + +.. sq:function:: function initLocalization(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, class_instance, string`` + +/; + module_mgr->addNativeModule("dagor.localize", exports); +} + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.math.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.math.rst.txt new file mode 100644 index 000000000..f6aa4bd4b --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.math.rst.txt @@ -0,0 +1,665 @@ +.. autogenerated + +********** +dagor.math +********** + +module 'dagor.math' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/sqratDagorMath.cpp* + +Usage:: + + let { Point2, Point3, Point4, Quat, IPoint3, E3DCOLOR, Color4, matrix_to_euler, euler_to_quat, dir_to_quat, quat_to_euler, quat_to_matrix, quat_rotation_arc, qinterp, cvt, make_tm_quat, make_tm_axis } = require("dagor.math") + +or:: + + from "dagor.math" import * + +.. code-block:: sq + + //'dagor.math' exports: + { + class Point2 + class Point3 + class Point4 + class Quat + class IPoint3 + class E3DCOLOR + class Color4 + function matrix_to_euler(&tm): TMatrix -> integer + function euler_to_quat(&e): integer -> inline Quat + function dir_to_quat(&p): integer -> inline Quat + function quat_to_euler(&quat): Quat -> integer + function quat_to_matrix(&quat): Quat -> inline TMatrix + function quat_rotation_arc() + function qinterp() + function cvt() + function make_tm_quat() + function make_tm_axis() + } + + +------------ +class Point2 +------------ + +.. sq:method:: Point2(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance or integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + ``typecheck mask: any_type, class_instance or integer_or_float, integer_or_float`` + +.. sq:attribute:: var Point2.x + +.. sq:attribute:: var Point2.y + +.. sq:function:: method Point2.lengthSq() + +.. sq:function:: method Point2.length() + +.. sq:function:: method Point2.normalize() + +.. sq:function:: operator Point2._add(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance`` + +.. sq:function:: operator Point2._sub(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance`` + +.. sq:function:: operator Point2._mul(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance or integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance or integer_or_float`` + +.. sq:function:: operator Point2._unm(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +/; + + + + + + + +------------ +class Point3 +------------ + + Sqrat::Class sqPoint3(vm, "Point3"); + sqPoint3 // + .SquirrelCtor(math_flt_vector_ctor, 0, ".x|nnn") + .Var("x", &Point3::x) + .Var("y", &Point3::y) + .Var("z", &Point3::z) + .Func("lengthSq", &Point3::lengthSq) + .Func("length", &Point3::length) + .Func("normalize", &Point3::normalize) + .SquirrelFunc("_add", op_add, 2, "xx") + .SquirrelFunc("_sub", op_sub, 2, "xx") + .SquirrelFunc("_mul", op_mul, 2, "xx|n") + .SquirrelFunc("_modulo", op_cross, 2, "xx") + .SquirrelFunc("_unm", op_unm, 1, "x") +/* + +.. sq:method:: Point3(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance or integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + ``typecheck mask: any_type, class_instance or integer_or_float, integer_or_float, integer_or_float`` + +.. sq:attribute:: var Point3.x + +.. sq:attribute:: var Point3.y + +.. sq:attribute:: var Point3.z + +.. sq:function:: method Point3.lengthSq() + +.. sq:function:: method Point3.length() + +.. sq:function:: method Point3.normalize() + +/; + + + + + + + +------------ +class Point4 +------------ + + Sqrat::Class sqPoint4(vm, "Point4"); + sqPoint4 // + .SquirrelCtor(math_flt_vector_ctor, 0, ".x|nnnn") + .Var("x", &Point4::x) + .Var("y", &Point4::y) + .Var("z", &Point4::z) + .Var("w", &Point4::w) + .Func("lengthSq", &Point4::lengthSq) + .Func("length", &Point4::length) + .SquirrelFunc("_add", op_add, 2, "xx") + .SquirrelFunc("_sub", op_sub, 2, "xx") + .SquirrelFunc("_mul", op_mul, 2, "xx|n") + .SquirrelFunc("_modulo", op_cross, 2, "xx") + .SquirrelFunc("_unm", op_unm, 1, "x") +/* + +.. sq:method:: Point4(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``typecheck mask: any_type, class_instance`` + +.. sq:function:: method Point4.orthonormalize() + +.. sq:function:: operator Point4._mul(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance or integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance or integer_or_float`` + +.. sq:function:: operator Point4._add(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance`` + +.. sq:function:: operator Point4._sub(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance`` + +.. sq:function:: operator Point4._modulo(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance`` + +.. sq:function:: operator Point4._set(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: class_instance or integer_or_float + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: class_instance, integer_or_float, class_instance or integer_or_float`` + +.. sq:function:: method Point4.setcol(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: class_instance or integer_or_float + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: class_instance, integer_or_float, class_instance or integer_or_float`` + +.. sq:function:: operator Point4._unm(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method Point4.inverse() + +.. sq:function:: operator Point4._get(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + ``nparamscheck:2`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method Point4.getcol(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + ``nparamscheck:2`` + + ``typecheck mask: class_instance`` + +/; + + + + + + + +---------- +class Quat +---------- + + Sqrat::Class sqQuat(vm, "Quat"); + sqQuat // + .SquirrelCtor(quat_ctor, 0, ".x|nnnn") + .Var("x", &Quat::x) + .Var("y", &Quat::y) + .Var("z", &Quat::z) + .Var("w", &Quat::w) + .SquirrelFunc("_mul", op_mul, 2, "xx|n") + .SquirrelFunc("_mul", op_mul_tm, 2, "xx") + .SquirrelFunc("_unm", op_unm, 1, "x") + .Func("normalize", &Quat::normalize) +/* + +.. sq:method:: Quat(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance or integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + ``typecheck mask: any_type, class_instance or integer_or_float, integer_or_float`` + +.. sq:attribute:: var Quat.x + +.. sq:attribute:: var Quat.y + +.. sq:function:: operator Quat._add(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance`` + +.. sq:function:: operator Quat._sub(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance`` + +.. sq:function:: operator Quat._unm(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +/; + + + + + + + +------------- +class IPoint3 +------------- + + Sqrat::Class sqIPoint3(vm, "IPoint3"); + sqIPoint3 // + .SquirrelCtor(math_int_vector_ctor, 0, ".x|nnn") + .Var("x", &IPoint3::x) + .Var("y", &IPoint3::y) + .Var("z", &IPoint3::z) + .SquirrelFunc("_add", op_add, 2, "xx") + .SquirrelFunc("_sub", op_sub, 2, "xx") + .SquirrelFunc("_unm", op_unm, 1, "x") +/* + +.. sq:method:: IPoint3(arg0, arg1, arg2, arg3) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance or integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer_or_float + + ``typecheck mask: any_type, class_instance or integer_or_float, integer_or_float, integer_or_float, integer_or_float`` + +.. sq:attribute:: var IPoint3.x + +.. sq:attribute:: var IPoint3.y + +.. sq:attribute:: var IPoint3.z + +.. sq:attribute:: var IPoint3.w + +.. sq:function:: operator IPoint3._add(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance`` + +.. sq:function:: operator IPoint3._sub(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance`` + +.. sq:function:: operator IPoint3._unm(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +/; + + + + + + + +-------------- +class E3DCOLOR +-------------- + + Sqrat::Class sqE3DCOLOR(vm, "E3DCOLOR"); + sqE3DCOLOR // + .SquirrelCtor(e3dcolor_ctor, 0, ".x|nnnn") + .Var("r", &E3DCOLOR::r) + .Var("g", &E3DCOLOR::g) + .Var("b", &E3DCOLOR::b) + .Var("a", &E3DCOLOR::a) + .Var("u", &E3DCOLOR::u) +/* + +.. sq:method:: E3DCOLOR(arg0, arg1, arg2, arg3) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance or integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer_or_float + + ``typecheck mask: any_type, class_instance or integer_or_float, integer_or_float, integer_or_float, integer_or_float`` + +.. sq:attribute:: var E3DCOLOR.r + +.. sq:attribute:: var E3DCOLOR.g + +.. sq:attribute:: var E3DCOLOR.b + +.. sq:function:: operator E3DCOLOR._add(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance`` + +.. sq:function:: operator E3DCOLOR._sub(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance`` + +.. sq:function:: operator E3DCOLOR._mul(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance or integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, class_instance or integer_or_float`` + +.. sq:function:: method E3DCOLOR.set(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + ``nparamscheck:3`` + + ``typecheck mask: integer_or_float, integer_or_float, integer_or_float`` + +/; + + + + + + + +------------ +class Color4 +------------ + + Sqrat::Class sqColor4(vm, "Color4"); + sqColor4 // + .SquirrelCtor(color4_ctor, 0, ".x|nnnn") + .Var("r", &Color4::r) + .Var("g", &Color4::g) + .Var("b", &Color4::b) + .Var("a", &Color4::a) + .SquirrelFunc("_add", op_add, 2, "xx") + .SquirrelFunc("_sub", op_sub, 2, "xx") + .SquirrelFunc("_mul", op_mul, 2, "xx|n") + .SquirrelFunc("set", c4_set, 4, "nnnn") +/* + + + + +.. sq:function:: function matrix_to_euler(&tm) + + :param &tm: + :type &tm: TMatrix + + :return: integer + +.. sq:function:: function euler_to_quat(&e) + + :param &e: + :type &e: integer + + :return: inline Quat + +.. sq:function:: function dir_to_quat(&p) + + :param &p: + :type &p: integer + + :return: inline Quat + +.. sq:function:: function quat_to_euler(&quat) + + :param &quat: + :type &quat: Quat + + :return: integer + +.. sq:function:: function quat_to_matrix(&quat) + + :param &quat: + :type &quat: Quat + + :return: inline TMatrix + +.. sq:function:: function quat_rotation_arc() + +.. sq:function:: function qinterp() + +.. sq:function:: function cvt() + +.. sq:function:: function make_tm_quat() + +.. sq:function:: function make_tm_axis() + +/; + +#define BIND(cn) nsTbl.Bind(#cn, sq##cn); + BIND(Point2); + BIND(Point3); + BIND(Point4); + BIND(TMatrix); + BIND(IPoint2); + BIND(IPoint3); + BIND(IPoint4); + BIND(DPoint3); + BIND(E3DCOLOR); + BIND(Color3); + BIND(Color4); + BIND(Quat); +#undef BIND + + module_mgr->addNativeModule("dagor.math", nsTbl); +} + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.memtrace.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.memtrace.rst.txt new file mode 100644 index 000000000..82797ed0c --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.memtrace.rst.txt @@ -0,0 +1,63 @@ +.. autogenerated + +************** +dagor.memtrace +************** + +module 'dagor.memtrace' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/sqratDagorDebug.cpp* + +Usage:: + + let { get_quirrel_object_size, get_quirrel_object_size_as_string, is_quirrel_object_larger_than, reset_all, set_huge_alloc_threshold, dump_all, get_memory_allocated_kb } = require("dagor.memtrace") + +or:: + + from "dagor.memtrace" import * + +.. code-block:: sq + + //'dagor.memtrace' exports: + { + function get_quirrel_object_size() + function get_quirrel_object_size_as_string() + function is_quirrel_object_larger_than(arg0, arg1): any_type, integer -> _undocumented_ + function reset_all() + function set_huge_alloc_threshold(): -> previously + function dump_all() + function get_memory_allocated_kb(): -> integer + } + + +.. sq:function:: function get_quirrel_object_size() + +.. sq:function:: function get_quirrel_object_size_as_string() + +.. sq:function:: function is_quirrel_object_larger_than(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:3`` + + ``typecheck mask: any_type, any_type, integer`` + +.. sq:function:: function reset_all() + +.. sq:function:: function set_huge_alloc_threshold() + + :return: previously + +.. sq:function:: function dump_all() + +.. sq:function:: function get_memory_allocated_kb() + + :return: integer + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.perf.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.perf.rst.txt new file mode 100644 index 000000000..f0f02fce0 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.perf.rst.txt @@ -0,0 +1,32 @@ +.. autogenerated + +********** +dagor.perf +********** + +module 'dagor.perf' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/sqratDagorDebug.cpp* + +Usage:: + + let { } = require("dagor.perf") + +or:: + + from "dagor.perf" import * + +.. code-block:: sq + + //'dagor.perf' exports: + { + } + + + perfTbl // + .Func("get_avg_cpu_only_cycle_time_usec", getAvgCpuOnlyCycleTimeUsec) + .Func("reset_summed_cpu_only_cycle_time", []() { workcycleperf::reset_summed_cpu_only_cycle_time(); }) +/* + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.profiler.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.profiler.rst.txt new file mode 100644 index 000000000..d7cf77fec --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.profiler.rst.txt @@ -0,0 +1,78 @@ +.. autogenerated + +************** +dagor.profiler +************** + +module 'dagor.profiler' + + + +*Source file: prog/gameLibs/quirrel/sqDebugger/scriptProfiler.cpp* + +Usage:: + + let { dump, reset_values, get_total_time, detect_slow_calls, start, stop, stop_and_save_to_file } = require("dagor.profiler") + +or:: + + from "dagor.profiler" import * + +.. code-block:: sq + + //'dagor.profiler' exports: + { + function dump(): -> null + function reset_values(): -> null + function get_total_time(): -> integer + function detect_slow_calls(msec_threshold): integer -> null + function start() + function stop() + function stop_and_save_to_file(arg0): string -> _undocumented_ + } + + +.. sq:function:: function dump() + + :return: null + +.. sq:function:: function reset_values() + + :return: null + +.. sq:function:: function get_total_time() + + :return: integer + +.. sq:function:: function detect_slow_calls(msec_threshold) + + :param msec_threshold: + :type msec_threshold: integer + + :return: null + +.. sq:function:: function start() + +.. sq:function:: function stop() + +.. sq:function:: function stop_and_save_to_file(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +/; + + module_mgr->addNativeModule("dagor.profiler", exports); +} + + +void scriptprofile::shutdown(HSQUIRRELVM vm) { g_PerfProfile.shutdown(vm); } + + +#endif + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.random.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.random.rst.txt new file mode 100644 index 000000000..31c7dc4bd --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.random.rst.txt @@ -0,0 +1,108 @@ +.. autogenerated + +************ +dagor.random +************ + +module 'dagor.random' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/random.cpp* + +Usage:: + + let { rnd, frnd, srnd, rnd_float, rnd_int, set_rnd_seed, get_rnd_seed, gauss_rnd, uint32_hash, uint_noise1D, uint_noise2D, uint_noise3D } = require("dagor.random") + +or:: + + from "dagor.random" import * + +.. code-block:: sq + + //'dagor.random' exports: + { + function rnd(): -> integer + function frnd(): -> float + function srnd(): -> float + function rnd_float(a, b): float, float -> float + function rnd_int(a, b): integer, integer -> integer + function set_rnd_seed(seed): integer -> null + function get_rnd_seed(): -> integer + function gauss_rnd(arg0): integer_or_float -> _undocumented_ + function uint32_hash() + function uint_noise1D() + function uint_noise2D() + function uint_noise3D() + } + + +.. sq:function:: function rnd() + + :return: integer + +.. sq:function:: function frnd() + + :return: float + +.. sq:function:: function srnd() + + :return: float + +.. sq:function:: function rnd_float(a, b) + + :param a: + :type a: float + + :param b: + :type b: float + + :return: float + +.. sq:function:: function rnd_int(a, b) + + :param a: + :type a: integer + + :param b: + :type b: integer + + :return: integer + +.. sq:function:: function set_rnd_seed(seed) + + :param seed: + :type seed: integer + + :return: null + +.. sq:function:: function get_rnd_seed() + + :return: integer + +.. sq:function:: function gauss_rnd(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer_or_float`` + +.. sq:function:: function uint32_hash() + +.. sq:function:: function uint_noise1D() + +.. sq:function:: function uint_noise2D() + +.. sq:function:: function uint_noise3D() + +/; + + module_mgr->addNativeModule("dagor.random", exports); +} + + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.shell.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.shell.rst.txt new file mode 100644 index 000000000..e7f792f6e --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.shell.rst.txt @@ -0,0 +1,50 @@ +.. autogenerated + +*********** +dagor.shell +*********** + +module 'dagor.shell' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorShell.cpp* + +Usage:: + + let { shell_execute } = require("dagor.shell") + +or:: + + from "dagor.shell" import * + +.. code-block:: sq + + //'dagor.shell' exports: + { + function shell_execute(params): table -> _undocumented_ + } + + +.. sq:function:: function shell_execute(params) + + :param params: table to get result + :type params: table + + ``nparamscheck:2`` + + ``typecheck mask: any_type, table`` + + + + +.. code-block:: params + :caption: params + + + {cmd:string, file:string, dir:string, params:string, force_sync:boolean} + file or dir should be set. params is optional + + + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.file_handlers.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.file_handlers.rst.txt new file mode 100644 index 000000000..362761ab6 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.file_handlers.rst.txt @@ -0,0 +1,49 @@ +.. autogenerated + +************************** +dagor.system.file_handlers +************************** + +module 'dagor.system.file_handlers' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorSystemFileHandlers.cpp* + +Usage:: + + let { get_meta_info_from_screenshot, init_file_drop_handler } = require("dagor.system.file_handlers") + +or:: + + from "dagor.system.file_handlers" import * + +.. code-block:: sq + + //'dagor.system.file_handlers' exports: + { + function get_meta_info_from_screenshot(name): string -> DataBlock + function init_file_drop_handler() + } + + +.. sq:function:: function get_meta_info_from_screenshot(name) + + :param name: path of the screenshot file + :type name: string + + :return: datablock with screenshot meta info + :rtype: DataBlock + +.. sq:function:: function init_file_drop_handler() + +/; + + module_mgr->addNativeModule("dagor.system.file_handlers", exports); +} + +void cleanup_dagor_system_file_handlers() { release_file_drop_handler(); } + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.rst.txt new file mode 100644 index 000000000..5e97a3767 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.rst.txt @@ -0,0 +1,185 @@ +.. autogenerated + +************ +dagor.system +************ + +module 'dagor.system' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorSystem.cpp* + +Usage:: + + let { dgs_get_settings, exit, get_arg_value_by_name, get_log_directory, get_all_arg_values_by_name, get_primary_screen_info, message_box, set_app_window_title, argv, DBGLEVEL, SANITIZER, ARCH_BITS, MB_OK, MB_OK_CANCEL, MB_YES_NO, MB_RETRY_CANCEL, MB_ABORT_RETRY_IGNORE, MB_YES_NO_CANCEL, MB_CANCEL_TRY_CONTINUE, MB_DEF_BUTTON_1, MB_DEF_BUTTON_2, MB_DEF_BUTTON_3, MB_ICON_ERROR, MB_ICON_WARNING, MB_ICON_QUESTION, MB_ICON_INFORMATION, MB_TOPMOST, MB_FOREGROUND, MB_NATIVE_DLG, MB_FAIL, MB_CLOSE, MB_BUTTON_1, MB_BUTTON_2, MB_BUTTON_3 } = require("dagor.system") + +or:: + + from "dagor.system" import * + +.. code-block:: sq + + //'dagor.system' exports: + { + function dgs_get_settings(): -> DataBlock + function exit(exit_code): integer -> null + function get_arg_value_by_name(): -> string|null + function get_log_directory() + function get_all_arg_values_by_name(name): string -> array|null + function get_primary_screen_info() + function message_box(mbx_title, mbx_text, mbx_level): string, string, integer -> _undocumented_ + function set_app_window_title(title, s): string, any_type -> null + const argv + const DBGLEVEL + const SANITIZER + const ARCH_BITS + const MB_OK + const MB_OK_CANCEL + const MB_YES_NO + const MB_RETRY_CANCEL + const MB_ABORT_RETRY_IGNORE + const MB_YES_NO_CANCEL + const MB_CANCEL_TRY_CONTINUE + const MB_DEF_BUTTON_1 + const MB_DEF_BUTTON_2 + const MB_DEF_BUTTON_3 + const MB_ICON_ERROR + const MB_ICON_WARNING + const MB_ICON_QUESTION + const MB_ICON_INFORMATION + const MB_TOPMOST + const MB_FOREGROUND + const MB_NATIVE_DLG + const MB_FAIL + const MB_CLOSE + const MB_BUTTON_1 + const MB_BUTTON_2 + const MB_BUTTON_3 + } + + +.. sq:function:: function dgs_get_settings() + + :return: datablock with game settings + :rtype: DataBlock + +.. sq:function:: function exit(exit_code) + + :param exit_code: + :type exit_code: integer + + :return: null + +.. sq:function:: function get_arg_value_by_name() + + :return: null if no named argument provided + :rtype: string|null + +.. sq:function:: function get_log_directory() + +.. sq:function:: function get_all_arg_values_by_name(name) + + :param name: + :type name: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + + :return: returns null or list [value1, value2,...] of all command line arguments provided in -name:value1 -name2:value2 + :rtype: array|null + +format + +.. sq:function:: function get_primary_screen_info() + +.. sq:function:: function message_box(mbx_title, mbx_text, mbx_level) + + :param mbx_title: + :type mbx_title: string + + :param mbx_text: + :type mbx_text: string + + :param mbx_level: can be error, warning, info level + :type mbx_level: integer + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, string, string, integer`` + +.. sq:function:: function set_app_window_title(title, s) + + :param title: + :type title: string + + :param s: title + :type s: any_type + + :return: null + +.. sq:attribute:: const argv + + ``type: array`` + +.. sq:attribute:: const DBGLEVEL + +.. sq:attribute:: const SANITIZER + +.. sq:attribute:: const ARCH_BITS + +.. sq:attribute:: const MB_OK + +.. sq:attribute:: const MB_OK_CANCEL + +.. sq:attribute:: const MB_YES_NO + +.. sq:attribute:: const MB_RETRY_CANCEL + +.. sq:attribute:: const MB_ABORT_RETRY_IGNORE + +.. sq:attribute:: const MB_YES_NO_CANCEL + +.. sq:attribute:: const MB_CANCEL_TRY_CONTINUE + +.. sq:attribute:: const MB_DEF_BUTTON_1 + +.. sq:attribute:: const MB_DEF_BUTTON_2 + +.. sq:attribute:: const MB_DEF_BUTTON_3 + +.. sq:attribute:: const MB_ICON_ERROR + +.. sq:attribute:: const MB_ICON_WARNING + +.. sq:attribute:: const MB_ICON_QUESTION + +.. sq:attribute:: const MB_ICON_INFORMATION + +.. sq:attribute:: const MB_TOPMOST + +.. sq:attribute:: const MB_FOREGROUND + +.. sq:attribute:: const MB_NATIVE_DLG + +.. sq:attribute:: const MB_FAIL + +.. sq:attribute:: const MB_CLOSE + +.. sq:attribute:: const MB_BUTTON_1 + +.. sq:attribute:: const MB_BUTTON_2 + +.. sq:attribute:: const MB_BUTTON_3 + +/; + +#undef GUI_CONST + + module_mgr->addNativeModule("dagor.system", exports); +} + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.time.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.time.rst.txt new file mode 100644 index 000000000..8f313b6fa --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.time.rst.txt @@ -0,0 +1,136 @@ +.. autogenerated + +********** +dagor.time +********** + +module 'dagor.time' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorTime.cpp* + +Usage:: + + let { ref_time_ticks, get_time_usec, get_time_msec, get_local_unixtime, format_unixtime, unixtime_to_local_timetbl, local_timetbl_to_unixtime, unixtime_to_utc_timetbl, utc_timetbl_to_unixtime } = require("dagor.time") + +or:: + + from "dagor.time" import * + +.. code-block:: sq + + //'dagor.time' exports: + { + function ref_time_ticks() + function get_time_usec() + function get_time_msec(): -> integer + function get_local_unixtime(): -> integer + function format_unixtime(fmt, ts, ts): string, time_t, integer -> string + function unixtime_to_local_timetbl(ts): integer -> table + function local_timetbl_to_unixtime(localTimeTbl): table -> integer + function unixtime_to_utc_timetbl(ts): integer -> table + function utc_timetbl_to_unixtime(utcTimeTbl): table -> integer + } + + +Date/time getters and converters. + +.. sq:function:: function ref_time_ticks() + +.. sq:function:: function get_time_usec() + +.. sq:function:: function get_time_msec() + + Returns the number of milliseconds that have passed since the client was started. + + :return: Milliseconds since client start + :rtype: integer + +.. sq:function:: function get_local_unixtime() + + Returns UNIX timestamp from the local machine clock. Don't trust it too much, because user can set a fake time on his + + :return: UNIX timestamp from local machine clock + :rtype: integer + +machine manually. + +.. sq:function:: function format_unixtime(fmt, ts, ts) + + :param fmt: + :type fmt: string + + :param ts: + :type ts: time_t + + :param ts: UNIX timestamp to format + :type ts: integer + + :return: Formatted string + :rtype: string + +.. sq:function:: function unixtime_to_local_timetbl(ts) + + Converts UNIX timestamp to Local time table. + + :param ts: UNIX timestamp + :type ts: integer + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer`` + + :return: Local time table + :rtype: table + +.. sq:function:: function local_timetbl_to_unixtime(localTimeTbl) + + Converts Local time table to UNIX timestamp. + + :param localTimeTbl: Local time table + :type localTimeTbl: table + + ``nparamscheck:2`` + + ``typecheck mask: any_type, table`` + + :return: UNIX timestamp + :rtype: integer + +.. sq:function:: function unixtime_to_utc_timetbl(ts) + + Converts UNIX timestamp to UTC time table. + + :param ts: UNIX timestamp + :type ts: integer + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer`` + + :return: UTC time table + :rtype: table + +.. sq:function:: function utc_timetbl_to_unixtime(utcTimeTbl) + + Converts UTC time table to UNIX timestamp. + + :param utcTimeTbl: UTC time table + :type utcTimeTbl: table + + ``nparamscheck:2`` + + ``typecheck mask: any_type, table`` + + :return: UNIX timestamp + :rtype: integer + +/; + + module_mgr->addNativeModule("dagor.time", nsTbl); +} + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.workcycle.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.workcycle.rst.txt new file mode 100644 index 000000000..8c3f11db7 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.workcycle.rst.txt @@ -0,0 +1,131 @@ +.. autogenerated + +*************** +dagor.workcycle +*************** + +module 'dagor.workcycle' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorWorkCycle.cpp* + +Usage:: + + let { defer, deferOnce, setTimeout, resetTimeout, setInterval, clearTimer } = require("dagor.workcycle") + +or:: + + from "dagor.workcycle" import * + +.. code-block:: sq + + //'dagor.workcycle' exports: + { + function defer(arg0): closure_and_nativeclosure -> _undocumented_ + function deferOnce(arg0): closure_and_nativeclosure -> _undocumented_ + function setTimeout(time_in_seconds, func, id = null): integer_or_float, closure_and_nativeclosure, any_type -> _undocumented_ + function resetTimeout(time_in_seconds, func, id = null): integer_or_float, closure_and_nativeclosure, any_type -> _undocumented_ + function setInterval(period_in_seconds, func, id = null): integer_or_float, closure_and_nativeclosure, any_type -> _undocumented_ + function clearTimer(&id_): sqObject -> null + } + + +.. sq:function:: function defer(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: closure_and_nativeclosure + + ``nparamscheck:2`` + + ``typecheck mask: any_type, closure_and_nativeclosure`` + +.. sq:function:: function deferOnce(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: closure_and_nativeclosure + + ``nparamscheck:2`` + + ``typecheck mask: any_type, closure_and_nativeclosure`` + + + +.. sq:function:: function setTimeout(time_in_seconds, func, id = null) + + :param time_in_seconds: time in seconds on which function would be called + :type time_in_seconds: integer_or_float + + :param func: function to be called on time + :type func: closure_and_nativeclosure + + :param id: optional id of timer. If not provided closure 'func' is used as id + :type id: any_type + + + + + +.. sq:function:: function resetTimeout(time_in_seconds, func, id = null) + + :param time_in_seconds: time in seconds on which function would be called + :type time_in_seconds: integer_or_float + + :param func: function to be called on time + :type func: closure_and_nativeclosure + + :param id: optional id of timer. If not provided closure 'func' is used as id + :type id: any_type + + + + + +.. sq:function:: function setInterval(period_in_seconds, func, id = null) + + :param period_in_seconds: period of time in seconds on which function would be called + :type period_in_seconds: integer_or_float + + :param func: function to be called on time + :type func: closure_and_nativeclosure + + :param id: optional id of timer. If not provided closure 'func' is used as id + :type id: any_type + + + + +.. sq:function:: function clearTimer(&id_) + + :param &id_: + :type &id_: sqObject + + :return: null + +/; + + module_mgr->addNativeModule("dagor.workcycle", nsTbl); + + eastl::string vmNameStr((vm_name && *vm_name) ? vm_name : ""); + run_action_on_main_thread([vm, au = auto_update_from_idle_cycle, name = vmNameStr] { + VmData &v = vms[vm]; + v.autoUpdateFromIdleCycle = au; + v.name = name; + }); +} + +void clear_workcycle_actions(HSQUIRRELVM vm) +{ + auto it = vms.find(vm); + if (it != vms.end()) + { + it->second.timers.clear(); + it->second.deferredCalls.clear(); + } +} + +void cleanup_dagor_workcycle_module(HSQUIRRELVM vm) { vms.erase(vm); } + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dainput2.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dainput2.rst.txt new file mode 100644 index 000000000..e97552d0c --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dainput2.rst.txt @@ -0,0 +1,663 @@ +.. autogenerated + +******** +dainput2 +******** + +module 'dainput2' + + + +*Source file: prog/gameLibs/daInput/actionSqBind.cpp* + +Usage:: + + let { SingleButtonId, DigitalActionBinding, AnalogAxisActionBinding, AnalogStickActionBinding } = require("dainput2") + +or:: + + from "dainput2" import * + +.. code-block:: sq + + //'dainput2' exports: + { + class SingleButtonId + class DigitalActionBinding + class AnalogAxisActionBinding + class AnalogStickActionBinding + } + + +-------------------- +class SingleButtonId +-------------------- + +.. sq:attribute:: property SingleButtonId.devId + + integer + +.. sq:attribute:: property SingleButtonId.btnId + + integer + + + + + +-------------------------- +class DigitalActionBinding +-------------------------- + +.. sq:attribute:: property DigitalActionBinding.devId + + integer + +.. sq:attribute:: property DigitalActionBinding.ctrlId + + integer + +.. sq:attribute:: property DigitalActionBinding.eventType + + integer + +.. sq:attribute:: property DigitalActionBinding.axisCtrlThres + + integer + +.. sq:attribute:: property DigitalActionBinding.btnCtrl + + bool + +.. sq:attribute:: property DigitalActionBinding.stickyToggle + + bool + +.. sq:attribute:: property DigitalActionBinding.unordCombo + + bool + +.. sq:attribute:: property DigitalActionBinding.modCnt + + integer + +.. sq:attribute:: property DigitalActionBinding.mod + + array + + + + + +----------------------------- +class AnalogAxisActionBinding +----------------------------- + +.. sq:attribute:: property AnalogAxisActionBinding.devId + + integer + +.. sq:attribute:: property AnalogAxisActionBinding.axisId + + integer + +.. sq:attribute:: property AnalogAxisActionBinding.invAxis + + bool + +.. sq:attribute:: property AnalogAxisActionBinding.axisRelativeVal + + bool + +.. sq:attribute:: property AnalogAxisActionBinding.instantIncDecBtn + + bool + +.. sq:attribute:: property AnalogAxisActionBinding.quantizeValOnIncDecBtn + + bool + +.. sq:attribute:: property AnalogAxisActionBinding.modCnt + + integer + +.. sq:attribute:: property AnalogAxisActionBinding.mod + + array + +.. sq:attribute:: property AnalogAxisActionBinding.minBtn + +.. sq:attribute:: property AnalogAxisActionBinding.maxBtn + +.. sq:attribute:: property AnalogAxisActionBinding.incBtn + +.. sq:attribute:: property AnalogAxisActionBinding.decBtn + +.. sq:attribute:: property AnalogAxisActionBinding.deadZoneThres + + float + +.. sq:attribute:: property AnalogAxisActionBinding.nonLin + + float + +.. sq:attribute:: property AnalogAxisActionBinding.maxVal + + float + +.. sq:attribute:: property AnalogAxisActionBinding.relIncScale + + float + + + + + +------------------------------ +class AnalogStickActionBinding +------------------------------ + +.. sq:attribute:: property AnalogStickActionBinding.devId + + integer + +.. sq:attribute:: property AnalogStickActionBinding.axisXId + + integer + +.. sq:attribute:: property AnalogStickActionBinding.axisYId + + integer + +.. sq:attribute:: property AnalogStickActionBinding.axisXinv + + bool + +.. sq:attribute:: property AnalogStickActionBinding.axisYinv + + bool + +.. sq:attribute:: property AnalogStickActionBinding.modCnt + + integer + +.. sq:attribute:: property AnalogStickActionBinding.mod + + array + +.. sq:attribute:: property AnalogStickActionBinding.minXBtn + +.. sq:attribute:: property AnalogStickActionBinding.maxXBtn + +.. sq:attribute:: property AnalogStickActionBinding.minYBtn + +.. sq:attribute:: property AnalogStickActionBinding.maxYBtn + +.. sq:attribute:: property AnalogStickActionBinding.deadZoneThres + + float + +.. sq:attribute:: property AnalogStickActionBinding.axisSnapAngK + + float + +.. sq:attribute:: property AnalogStickActionBinding.nonLin + + float + +.. sq:attribute:: property AnalogStickActionBinding.maxVal + + float + +.. sq:attribute:: property AnalogStickActionBinding.sensScale + + float + +.. sq:attribute:: const AnalogStickActionBinding.DEV_none + +.. sq:attribute:: const AnalogStickActionBinding.DEV_kbd + +.. sq:attribute:: const AnalogStickActionBinding.DEV_pointing + +.. sq:attribute:: const AnalogStickActionBinding.DEV_gamepad + +.. sq:attribute:: const AnalogStickActionBinding.DEV_joy + +.. sq:attribute:: const AnalogStickActionBinding.DEV_nullstub + +.. sq:attribute:: const AnalogStickActionBinding.DEV_USED_mouse + +.. sq:attribute:: const AnalogStickActionBinding.DEV_USED_kbd + +.. sq:attribute:: const AnalogStickActionBinding.DEV_USED_gamepad + +.. sq:attribute:: const AnalogStickActionBinding.DEV_USED_touch + +.. sq:attribute:: const AnalogStickActionBinding.TYPEGRP__MASK + +.. sq:attribute:: const AnalogStickActionBinding.TYPEGRP_DIGITAL + +.. sq:attribute:: const AnalogStickActionBinding.TYPE_BUTTON + +.. sq:attribute:: const AnalogStickActionBinding.TYPEGRP_AXIS + +.. sq:attribute:: const AnalogStickActionBinding.TYPE_TRIGGER + +.. sq:attribute:: const AnalogStickActionBinding.TYPE_STEERWHEEL + +.. sq:attribute:: const AnalogStickActionBinding.TYPEGRP_STICK + +.. sq:attribute:: const AnalogStickActionBinding.TYPE_SYSMOUSE + +.. sq:attribute:: const AnalogStickActionBinding.TYPE_ABSMOUSE + +.. sq:attribute:: const AnalogStickActionBinding.TYPE_STICK + +.. sq:attribute:: const AnalogStickActionBinding.TYPE_STICK_DELTA + +.. sq:attribute:: const AnalogStickActionBinding.BAD_ACTION_HANDLE + +.. sq:attribute:: const AnalogStickActionBinding.BAD_ACTION_SET_HANDLE + +.. sq:attribute:: const AnalogStickActionBinding.AXIS_NULL_ID + +.. sq:attribute:: const AnalogStickActionBinding.BTN_NULL_ID + +.. sq:attribute:: const AnalogStickActionBinding.BTN_pressed + +.. sq:attribute:: const AnalogStickActionBinding.BTN_pressed_long + +.. sq:attribute:: const AnalogStickActionBinding.BTN_pressed2 + +.. sq:attribute:: const AnalogStickActionBinding.BTN_pressed3 + +.. sq:attribute:: const AnalogStickActionBinding.BTN_released + +.. sq:attribute:: const AnalogStickActionBinding.BTN_released_short + +.. sq:attribute:: const AnalogStickActionBinding.BTN_released_long + +.. sq:attribute:: const AnalogStickActionBinding.ST_in_progress + +.. sq:attribute:: const AnalogStickActionBinding.ST_finished + +.. sq:attribute:: const AnalogStickActionBinding.ST_cancelled + +.. sq:attribute:: const AnalogStickActionBinding.GAMEPAD_VENDOR_UNKNOWN + +.. sq:attribute:: const AnalogStickActionBinding.GAMEPAD_VENDOR_MICROSOFT + +.. sq:attribute:: const AnalogStickActionBinding.GAMEPAD_VENDOR_SONY + +.. sq:attribute:: const AnalogStickActionBinding.GAMEPAD_VENDOR_NINTENDO + +.. sq:function:: method AnalogStickActionBinding.set_long_press_time() + +.. sq:function:: method AnalogStickActionBinding.get_long_press_time() + +.. sq:function:: method AnalogStickActionBinding.set_double_click_time() + +.. sq:function:: method AnalogStickActionBinding.get_double_click_time() + +.. sq:function:: method AnalogStickActionBinding.get_actions_config_version() + +.. sq:function:: method AnalogStickActionBinding.reset_actions_binding() + +.. sq:function:: method AnalogStickActionBinding.append_actions_binding() + +.. sq:function:: method AnalogStickActionBinding.clear_actions_binding() + +.. sq:function:: method AnalogStickActionBinding.load_actions_binding(&blk, column) + + :param &blk: + :type &blk: DataBlock + + :param column: + :type column: integer + + :return: null + +.. sq:function:: method AnalogStickActionBinding.save_actions_binding() + +.. sq:function:: method AnalogStickActionBinding.get_actions_binding_columns() + +.. sq:function:: method AnalogStickActionBinding.get_tag_str() + +.. sq:function:: method AnalogStickActionBinding.set_actions_binding_column_active() + +.. sq:function:: method AnalogStickActionBinding.get_actions_binding_column_active() + +.. sq:function:: method AnalogStickActionBinding.get_digital_action_state() + +.. sq:function:: method AnalogStickActionBinding.get_analog_axis_action_state() + +.. sq:function:: method AnalogStickActionBinding.get_analog_stick_action_state() + +.. sq:function:: method AnalogStickActionBinding.set_analog_axis_action_state() + +.. sq:function:: method AnalogStickActionBinding.get_digital_action_binding() + +.. sq:function:: method AnalogStickActionBinding.get_analog_axis_action_binding() + +.. sq:function:: method AnalogStickActionBinding.get_analog_stick_action_binding() + +.. sq:function:: method AnalogStickActionBinding.is_action_binding_set(a, col) + + :param a: + :type a: dainput::action_handle_t + + :param col: + :type col: integer + + :return: bool + +.. sq:function:: method AnalogStickActionBinding.get_analog_stick_action_smooth_value() + +.. sq:function:: method AnalogStickActionBinding.set_analog_stick_action_smooth_value() + +.. sq:function:: method AnalogStickActionBinding.get_action_handle() + +.. sq:function:: method AnalogStickActionBinding.get_action_type() + +.. sq:function:: method AnalogStickActionBinding.get_action_name() + +.. sq:function:: method AnalogStickActionBinding.is_action_active() + +.. sq:function:: method AnalogStickActionBinding.is_action_internal() + +.. sq:function:: method AnalogStickActionBinding.is_action_stateful(action) + + :param action: + :type action: dainput::action_handle_t + + :return: bool + +.. sq:function:: method AnalogStickActionBinding.get_group_tag_for_action() + +.. sq:function:: method AnalogStickActionBinding.get_group_tag_str_for_action() + +.. sq:function:: method AnalogStickActionBinding.get_action_set_handle() + +.. sq:function:: method AnalogStickActionBinding.get_action_set_name() + +.. sq:function:: method AnalogStickActionBinding.get_action_set_actions(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer`` + +.. sq:function:: method AnalogStickActionBinding.setup_action_set(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param arg2: autodoc from typemask/paramscheck + :type arg2: array + + ``nparamscheck:3`` + + ``typecheck mask: any_type, string, array`` + +.. sq:function:: method AnalogStickActionBinding.clear_action_set_actions() + +.. sq:function:: method AnalogStickActionBinding.reset_action_set_stack() + +.. sq:function:: method AnalogStickActionBinding.activate_action_set() + +.. sq:function:: method AnalogStickActionBinding.get_action_set_stack_depth() + +.. sq:function:: method AnalogStickActionBinding.get_action_set_stack_item() + +.. sq:function:: method AnalogStickActionBinding.get_current_action_set() + +.. sq:function:: method AnalogStickActionBinding.set_breaking_action_set() + +.. sq:function:: method AnalogStickActionBinding.get_action_binding() + +.. sq:function:: method AnalogStickActionBinding.set_action_binding() + +.. sq:function:: method AnalogStickActionBinding.reset_action_binding() + +.. sq:function:: method AnalogStickActionBinding.get_actions_count() + +.. sq:function:: method AnalogStickActionBinding.get_action_handle_by_ord() + +.. sq:function:: method AnalogStickActionBinding.get_action_sets_count() + +.. sq:function:: method AnalogStickActionBinding.get_action_set_handle_by_ord() + +.. sq:function:: method AnalogStickActionBinding.start_recording_bindings() + +.. sq:function:: method AnalogStickActionBinding.start_recording_bindings_for_single_button() + +.. sq:function:: method AnalogStickActionBinding.is_recording_in_progress() + +.. sq:function:: method AnalogStickActionBinding.is_recording_complete() + +.. sq:function:: method AnalogStickActionBinding.finish_recording_bindings() + +.. sq:function:: method AnalogStickActionBinding.reset_digital_action_sticky_toggle() + +.. sq:function:: method AnalogStickActionBinding.get_last_used_device_mask() + +.. sq:function:: method AnalogStickActionBinding.get_overall_button_clicks_count() + +.. sq:function:: method AnalogStickActionBinding.enable_darg_events_for_button_clicks() + +.. sq:function:: method AnalogStickActionBinding.send_action_event() + +.. sq:function:: method AnalogStickActionBinding.send_action_terminated_event() + +.. sq:function:: method AnalogStickActionBinding.set_digital_event_progress_monitor(func) + + :param func: + :type func: closure_and_nativeclosure + + :return: null + +.. sq:function:: method AnalogStickActionBinding.enable_debug_traces() + +.. sq:function:: method AnalogStickActionBinding.check_bindings_conflicts(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param arg2: autodoc from typemask/paramscheck + :type arg2: class_instance + + ``nparamscheck:3`` + + ``typecheck mask: any_type, integer, class_instance`` + +.. sq:function:: method AnalogStickActionBinding.check_bindings_hides_action(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param arg2: autodoc from typemask/paramscheck + :type arg2: class_instance + + ``nparamscheck:3`` + + ``typecheck mask: any_type, integer, class_instance`` + +.. sq:function:: method AnalogStickActionBinding.check_bindings_conflicts_one() + +.. sq:function:: method AnalogStickActionBinding.get_action_bindings_text(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: method AnalogStickActionBinding.format_ctrl_name(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer + + :param arg3: autodoc from typemask/paramscheck + :type arg3: bool + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, integer, integer, bool`` + +.. sq:function:: method AnalogStickActionBinding.set_main_gamepad_stick_dead_zone(stick_idx, dzone) + + :param stick_idx: + :type stick_idx: integer + + :param dzone: + :type dzone: float + + :return: null + +.. sq:function:: method AnalogStickActionBinding.set_joystick_stick_dead_zone(stick_idx, dzone) + + :param stick_idx: + :type stick_idx: integer + + :param dzone: + :type dzone: float + + :return: null + +.. sq:function:: method AnalogStickActionBinding.get_main_gamepad_stick_dead_zone(stick_idx) + + :param stick_idx: + :type stick_idx: integer + + :return: float + +.. sq:function:: method AnalogStickActionBinding.get_joystick_stick_dead_zone(stick_idx) + + :param stick_idx: + :type stick_idx: integer + + :return: float + +.. sq:function:: method AnalogStickActionBinding.get_main_gamepad_stick_dead_zone_abs(stick_idx) + + :param stick_idx: + :type stick_idx: integer + + :return: float + +.. sq:function:: method AnalogStickActionBinding.get_joystick_stick_dead_zone_abs(stick_idx) + + :param stick_idx: + :type stick_idx: integer + + :return: float + +.. sq:function:: method AnalogStickActionBinding.enable_joystick_gyroscope(enable) + + :param enable: + :type enable: bool + + :return: null + +.. sq:function:: method AnalogStickActionBinding.set_default_preset_prefix() + +.. sq:function:: method AnalogStickActionBinding.get_default_preset_prefix() + +.. sq:function:: method AnalogStickActionBinding.load_user_config() + +.. sq:function:: method AnalogStickActionBinding.save_user_config() + +.. sq:function:: method AnalogStickActionBinding.get_user_config_base_preset() + +.. sq:function:: method AnalogStickActionBinding.is_user_config_customized() + +.. sq:function:: method AnalogStickActionBinding.reset_user_config_to_preset() + +.. sq:function:: method AnalogStickActionBinding.reset_user_config_to_currest_preset() + +.. sq:function:: method AnalogStickActionBinding.get_user_props() + +.. sq:function:: method AnalogStickActionBinding.is_user_props_customized() + +.. sq:function:: method AnalogStickActionBinding.dump_action_sets() + +.. sq:function:: method AnalogStickActionBinding.dump_action_sets_stack() + +.. sq:function:: method AnalogStickActionBinding.dump_action_set() + +/; + + Sqrat::Class sqSingleButtonId(vm, "SingleButtonId"); + sqSingleButtonId // + .SQ_BIND_PROP(SingleButtonId, devId) + .SQ_BIND_PROP(SingleButtonId, btnId) +/* +/; + + Sqrat::Class(vm, "AnalogAxisActionBinding") // + .SQ_BIND_PROP(AnalogAxisActionBinding, devId) + .SQ_BIND_PROP(AnalogAxisActionBinding, axisId) + .SQ_BIND_PROP(AnalogAxisActionBinding, invAxis) + .SQ_BIND_PROP(AnalogAxisActionBinding, axisRelativeVal) + .SQ_BIND_PROP(AnalogAxisActionBinding, instantIncDecBtn) + .SQ_BIND_PROP(AnalogAxisActionBinding, quantizeValOnIncDecBtn) + + .SQ_BIND_PROP(AnalogAxisActionBinding, modCnt) + .SQ_BIND_PROP(AnalogAxisActionBinding, mod) + .SQ_BIND_PROP(AnalogAxisActionBinding, minBtn) + .SQ_BIND_PROP(AnalogAxisActionBinding, maxBtn) + .SQ_BIND_PROP(AnalogAxisActionBinding, incBtn) + .SQ_BIND_PROP(AnalogAxisActionBinding, decBtn) + .SQ_BIND_PROP(AnalogAxisActionBinding, deadZoneThres) + .SQ_BIND_PROP(AnalogAxisActionBinding, nonLin) + .SQ_BIND_PROP(AnalogAxisActionBinding, maxVal) + .SQ_BIND_PROP(AnalogAxisActionBinding, relIncScale) +/* +/; + + Sqrat::Class(vm, "DigitalAction") // + .SQ_BIND_MEMBER_VAR(DigitalAction, bState) + .SQ_BIND_MEMBER_VAR(DigitalAction, bActive) + .SQ_BIND_MEMBER_VAR(DigitalAction, bActivePrev) +/* +/; + + Sqrat::Class(vm, "AnalogStickAction") // + .SQ_BIND_MEMBER_VAR(AnalogStickAction, x) + .SQ_BIND_MEMBER_VAR(AnalogStickAction, y) + .SQ_BIND_MEMBER_VAR(AnalogStickAction, bActive) + .SQ_BIND_MEMBER_VAR(AnalogStickAction, bActivePrev) +/* + + + + + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dasevents.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dasevents.rst.txt new file mode 100644 index 000000000..b524b998d --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dasevents.rst.txt @@ -0,0 +1,69 @@ +.. autogenerated + +********* +dasevents +********* + +module 'dasevents' + + + +*Source file: prog/gameLibs/daECS/net/dasevents/dasEventsSQ.cpp* + +Usage:: + + let { sendNetEvent, broadcastNetEvent } = require("dasevents") + +or:: + + from "dasevents" import * + +.. code-block:: sq + + //'dasevents' exports: + { + function sendNetEvent(arg0, arg1, arg2, ...): integer, class_instance, array or null, any_type -> _undocumented_ + function broadcastNetEvent(arg0, arg1, ...): class_instance, array or null, any_type -> _undocumented_ + } + + +.. sq:function:: function sendNetEvent(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + :param arg2: autodoc from typemask/paramscheck + :type arg2: array or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, integer, class_instance, array or null`` + +.. sq:function:: function broadcastNetEvent(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: array or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, class_instance, array or null`` + +/; + + if (!existingModule) + module_mgr->addNativeModule("dasevents", tbl); +} + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/datacache.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/datacache.rst.txt new file mode 100644 index 000000000..a942b54d5 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/datacache.rst.txt @@ -0,0 +1,105 @@ +.. autogenerated + +********* +datacache +********* + +module 'datacache' + + + +*Source file: prog/gameLibs/quirrel/sqDataCache/datacache.cpp* + +Usage:: + + let { init_cache, request_entry, abort_requests, del_entry, get_all_entries, ERR_UNKNOWN, ERR_OK, ERR_PENDING, ERR_IO, ERR_ABORTED, ERR_MEMORY_LIMIT } = require("datacache") + +or:: + + from "datacache" import * + +.. code-block:: sq + + //'datacache' exports: + { + function init_cache(cache_name, params): string, Sqrat::Table -> null + function request_entry(cache_name, entry_key): string, string -> null + function abort_requests(cache_name): string -> null + function del_entry(cache_name, entry_key): string, string -> bool + function get_all_entries(arg0): string -> _undocumented_ + value ERR_UNKNOWN + value ERR_OK + value ERR_PENDING + value ERR_IO + value ERR_ABORTED + value ERR_MEMORY_LIMIT + } + + +.. sq:function:: function init_cache(cache_name, params) + + :param cache_name: + :type cache_name: string + + :param params: + :type params: Sqrat::Table + + :return: null + +.. sq:function:: function request_entry(cache_name, entry_key) + + :param cache_name: + :type cache_name: string + + :param entry_key: + :type entry_key: string + + :return: null + +.. sq:function:: function abort_requests(cache_name) + + :param cache_name: + :type cache_name: string + + :return: null + +.. sq:function:: function del_entry(cache_name, entry_key) + + :param cache_name: + :type cache_name: string + + :param entry_key: + :type entry_key: string + + :return: bool + +.. sq:function:: function get_all_entries(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:attribute:: ERR_UNKNOWN + +.. sq:attribute:: ERR_OK + +.. sq:attribute:: ERR_PENDING + +.. sq:attribute:: ERR_IO + +.. sq:attribute:: ERR_ABORTED + +.. sq:attribute:: ERR_MEMORY_LIMIT + +/; + module_mgr->addNativeModule("datacache", nsTbl); +} + +void shutdown_datacache() { datacaches.clear(); } + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.netevent.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.netevent.rst.txt new file mode 100644 index 000000000..e30f946ec --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.netevent.rst.txt @@ -0,0 +1,96 @@ +.. autogenerated + +************ +ecs.netevent +************ + +module 'ecs.netevent' + + + +*Source file: prog/gameLibs/ecs/scripts/sq/netsqevent.cpp* + +Usage:: + + let { server_send_net_sqevent, server_broadcast_net_sqevent, client_request_unicast_net_sqevent, client_request_broadcast_net_sqevent } = require("ecs.netevent") + +or:: + + from "ecs.netevent" import * + +.. code-block:: sq + + //'ecs.netevent' exports: + { + function server_send_net_sqevent(arg0, arg1, arg2, ...): integer, class_instance, array or null, any_type -> _undocumented_ + function server_broadcast_net_sqevent(arg0, arg1, ...): class_instance, array or null, any_type -> _undocumented_ + function client_request_unicast_net_sqevent(arg0, arg1, ...): integer, class_instance or null, any_type -> _undocumented_ + function client_request_broadcast_net_sqevent(arg0, ...): class_instance or null, any_type -> _undocumented_ + } + + +.. sq:function:: function server_send_net_sqevent(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + :param arg2: autodoc from typemask/paramscheck + :type arg2: array or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, integer, class_instance, array or null`` + +.. sq:function:: function server_broadcast_net_sqevent(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: array or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, class_instance, array or null`` + +.. sq:function:: function client_request_unicast_net_sqevent(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, integer, class_instance or null`` + +.. sq:function:: function client_request_broadcast_net_sqevent(arg0, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, class_instance or null`` + +/; + module_mgr->addNativeModule("ecs.netevent", exports); +} + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.rst.txt new file mode 100644 index 000000000..7f3ad67fe --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.rst.txt @@ -0,0 +1,1174 @@ +.. autogenerated + +*** +ecs +*** + +module 'ecs' + + + +*Source file: prog/gameLibs/ecs/scripts/sq/sqcoredaECS.cpp* + +Usage:: + + let { set_callback_timer, set_callback_timer_rt, clear_callback_timer, set_timer, clear_timer, BaseList, ListRO, List, COMP_FLAG_REPLICATED, COMP_FLAG_CHANGE_EVENT, INVALID_ENTITY_ID, EVCAST_UNICAST, EVCAST_BROADCAST, Event, SchemelessEvent, SQEvent, TemplateDB, EventsDB, Template, EntityManager, CompObjectRO, CompObject, CompArray, SqQuery, EntityId, _dbg_get_all_comps_inspect, _dbg_get_comp_val_inspect, obsolete_dbg_get_comp_val, get_comp_type, obsolete_dbg_set_comp_val, get_comp_flags, get_semantic_type, calc_hash, calc_hash_int, TYPE_NULL, TYPE_STRING, TYPE_INT8, TYPE_UINT8, TYPE_INT16, TYPE_UINT16, TYPE_INT, TYPE_UINT, TYPE_INT64, TYPE_UINT64, TYPE_FLOAT, TYPE_POINT2, TYPE_POINT3, TYPE_POINT4, TYPE_IPOINT2, TYPE_IPOINT3, TYPE_IPOINT4, TYPE_DPOINT3, TYPE_BOOL, TYPE_MATRIX, TYPE_EID, TYPE_COLOR, TYPE_OBJECT, TYPE_ARRAY, TYPE_SHARED_OBJECT, TYPE_SHARED_ARRAY, TYPE_INT_LIST, TYPE_UINT16_LIST, TYPE_STRING_LIST, TYPE_EID_LIST, TYPE_FLOAT_LIST, TYPE_POINT2_LIST, TYPE_POINT3_LIST, TYPE_POINT4_LIST, TYPE_IPOINT2_LIST, TYPE_IPOINT3_LIST, TYPE_IPOINT4_LIST, TYPE_BOOL_LIST, TYPE_TMATRIX_LIST, TYPE_COLOR_LIST, TYPE_INT64_LIST, TYPE_UINT64_LIST, TYPE_TAG, TYPE_AUTO, clear_vm_entity_systems, register_entity_system, modify_es_list, start_es_loading, end_es_loading, g_entity_mgr } = require("ecs") + +or:: + + from "ecs" import * + +.. code-block:: sq + + //'ecs' exports: + { + function set_callback_timer(handler, interval, repeat): sqObject, float, bool -> Object + function set_callback_timer_rt(handler, interval, repeat): sqObject, float, bool -> Object + function clear_callback_timer(handler): sqObject -> null + function set_timer(arg0): table -> _undocumented_ + function clear_timer(arg0): table -> _undocumented_ + class BaseList + class ListRO + class List + value COMP_FLAG_REPLICATED + value COMP_FLAG_CHANGE_EVENT + value INVALID_ENTITY_ID + value EVCAST_UNICAST + value EVCAST_BROADCAST + class Event + class SchemelessEvent + class SQEvent + class TemplateDB + class EventsDB + class Template + class EntityManager + class CompObjectRO + class CompObject + class CompArray + class SqQuery + class EntityId + function _dbg_get_all_comps_inspect(arg0): integer -> _undocumented_ + function _dbg_get_comp_val_inspect(arg0, arg1, ...): integer, string, any_type -> _undocumented_ + function obsolete_dbg_get_comp_val(arg0, arg1, ...): integer, string, any_type -> _undocumented_ + function get_comp_type(eid, comp_name): ecs::EntityId, string -> integer + function obsolete_dbg_set_comp_val(arg0, arg1, ...): integer, string, any_type -> _undocumented_ + function get_comp_flags(eid, comp): ecs::EntityId, string -> integer + function get_semantic_type(type_name): string -> component_type_t + function calc_hash(arg0): string -> _undocumented_ + function calc_hash_int(arg0): string -> _undocumented_ + value TYPE_NULL + const TYPE_STRING + const TYPE_INT8 + const TYPE_UINT8 + const TYPE_INT16 + const TYPE_UINT16 + const TYPE_INT + const TYPE_UINT + const TYPE_INT64 + const TYPE_UINT64 + const TYPE_FLOAT + const TYPE_POINT2 + const TYPE_POINT3 + const TYPE_POINT4 + const TYPE_IPOINT2 + const TYPE_IPOINT3 + const TYPE_IPOINT4 + const TYPE_DPOINT3 + const TYPE_BOOL + const TYPE_MATRIX + const TYPE_EID + const TYPE_COLOR + const TYPE_OBJECT + const TYPE_ARRAY + const TYPE_SHARED_OBJECT + const TYPE_SHARED_ARRAY + const TYPE_INT_LIST + const TYPE_UINT16_LIST + const TYPE_STRING_LIST + const TYPE_EID_LIST + const TYPE_FLOAT_LIST + const TYPE_POINT2_LIST + const TYPE_POINT3_LIST + const TYPE_POINT4_LIST + const TYPE_IPOINT2_LIST + const TYPE_IPOINT3_LIST + const TYPE_IPOINT4_LIST + const TYPE_BOOL_LIST + const TYPE_TMATRIX_LIST + const TYPE_COLOR_LIST + const TYPE_INT64_LIST + const TYPE_UINT64_LIST + const TYPE_TAG + const TYPE_AUTO + function clear_vm_entity_systems() + function register_entity_system(arg0, arg1, arg2, arg3, ...): string, table, table, table or null, any_type -> _undocumented_ + function modify_es_list(arg0): closure_and_nativeclosure -> _undocumented_ + function start_es_loading() + function end_es_loading() + value g_entity_mgr + } + + +.. sq:function:: function set_callback_timer(handler, interval, repeat) + + :param handler: + :type handler: sqObject + + :param interval: + :type interval: float + + :param repeat: + :type repeat: bool + + :return: Object + +.. sq:function:: function set_callback_timer_rt(handler, interval, repeat) + + :param handler: + :type handler: sqObject + + :param interval: + :type interval: float + + :param repeat: + :type repeat: bool + + :return: Object + +.. sq:function:: function clear_callback_timer(handler) + + :param handler: + :type handler: sqObject + + :return: null + +.. sq:function:: function set_timer(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: table + + ``nparamscheck:2`` + + ``typecheck mask: any_type, table`` + +.. sq:function:: function clear_timer(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: table + + ``nparamscheck:2`` + + ``typecheck mask: any_type, table`` + +/; +} + + +void shutdown_timers(HSQUIRRELVM /*vm + +-------------- +class BaseList +-------------- + + + **This is not real class. Just all List classes has this methods!** + + Real classes are following: + * CompIntList(RO) + * CompUInt16List(RO) + * CompStringList(RO) + * CompEidList(RO) + * CompFloatList(RO) + * CompPoint2List(RO) + * CompPoint3List(RO) + * CompPoint4List(RO) + * CompIPoint2List(RO) + * CompIPoint3List(RO) + * CompBoolList(RO) + * CompTMatrixList(RO) + * CompColorList(RO) + * CompInt64List(RO) + * CompUInt64List(RO) + + +.. sq:method:: BaseList() + +.. sq:function:: operator BaseList._get(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, any_type`` + +.. sq:function:: operator BaseList._nexti(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer or null + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer or null`` + +.. sq:function:: method BaseList.len() + +.. sq:function:: method BaseList.indexof(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, any_type, integer`` + +.. sq:function:: method BaseList.getAll(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method BaseList.isReadOnly(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method BaseList.listType(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +/; + + if (readonly) + + + + + + +--------------------------------- +class ListRO extends ecs.BaseList +--------------------------------- + + + sqListClass // + .SquirrelFunc("_set", readonly_method_error, 3, "xi.") + .SquirrelFunc("append", readonly_method_error, -2, "x.i") + .SquirrelFunc("insert", readonly_method_error, -3, "xi.i") + .SquirrelFunc("remove", readonly_method_error, 2, "xi") + .SquirrelFunc("pop", readonly_method_error, 1, "x") + .SquirrelFunc("clear", readonly_method_error, 1, "x") +/* + + + + +------------------------------- +class List extends ecs.BaseList +------------------------------- + +.. sq:function:: operator List._set(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + ``nparamscheck:3`` + + ``typecheck mask: class_instance, integer, any_type`` + +.. sq:function:: method List.append(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, any_type, integer`` + +.. sq:function:: method List.insert(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: class_instance, integer, any_type, integer`` + +.. sq:function:: method List.remove(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer`` + +.. sq:function:: method List.pop(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method List.clear() + +/; + + tbl.Bind(type_name, sqListClass); +} + +template +static void bind_list_type(HSQUIRRELVM vm, Sqrat::Table &tbl, const char *type_name) +{ + using TS = eastl::fixed_string; +bind_list_class, TypeRO, ItemType, /*ro + + + + + +.. sq:attribute:: COMP_FLAG_REPLICATED + +.. sq:attribute:: COMP_FLAG_CHANGE_EVENT + +.. sq:attribute:: INVALID_ENTITY_ID + +.. sq:attribute:: EVCAST_UNICAST + +.. sq:attribute:: EVCAST_BROADCAST + +----------- +class Event +----------- + +.. sq:function:: method Event.getType() + + + + + +----------------------------------- +class SchemelessEvent extends Event +----------------------------------- + +.. sq:method:: SchemelessEvent() + + + + + +----------------------------------------- +class SQEvent extends ecs.SchemelessEvent +----------------------------------------- + +.. sq:method:: SQEvent() + + + + + +---------------- +class TemplateDB +---------------- + +.. sq:function:: method TemplateDB.getTemplateByName() + +.. sq:function:: method TemplateDB.size() + +.. sq:function:: method TemplateDB.getTemplateMetaInfo() + +.. sq:function:: method TemplateDB.getComponentMetaInfo() + +.. sq:function:: method TemplateDB.hasComponentMetaInfo() + +/; + + + + + + + +-------------- +class EventsDB +-------------- + + Sqrat::Class> sqEventsDB(vm, "EventsDB"); + sqEventsDB // + .Func("findEvent", &EventsDB::findEvent) + .Func("hasEventScheme", &EventsDB::hasEventScheme) + .Func("getFieldsCount", &EventsDB::getFieldsCount) + .Func("findFieldIndex", &EventsDB::findFieldIndex) + .Func("getFieldName", &EventsDB::getFieldName) + .Func("getFieldType", &EventsDB::getFieldType) + .Func("getFieldOffset", &EventsDB::getFieldOffset) + .SquirrelFunc("getEventFieldValue", evtdb_get_event_field, 4, ".xii") +/* + + + + +-------------- +class Template +-------------- + +.. sq:function:: method Template.getName() + +.. sq:function:: method Template.getBase() + +.. sq:function:: method Template.getCompVal(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, string`` + +.. sq:function:: method Template.getCompValNullable(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, string`` + +.. sq:function:: method Template.hasComponent() + +.. sq:function:: method Template.getNumParentTemplates() + +.. sq:function:: method Template.getParentTemplate() + +.. sq:function:: method Template.getComponentsNames(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method Template.getTags(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +/; + + + typedef bool (EntityManager::*removeCompFunc)(EntityId, const char *); + + + + + + + +------------------- +class EntityManager +------------------- + + Sqrat::Class> sqEntityManager(vm, "EntityManager"); + sqEntityManager // + .Func("destroyEntity", (bool(EntityManager::*)(const ecs::EntityId &)) & EntityManager::destroyEntity) + .Func("doesEntityExist", &EntityManager::doesEntityExist) + .Func("getNumEntities", &EntityManager::getNumEntities) + + //.Func("getNumComponents", &EntityManager::getNumComponents) + + .SquirrelFunc("sendEvent", emgr_send_event, 3, "xix") + .SquirrelFunc("broadcastEvent", emgr_bcast_event, 2, "xx") + + //.Func("getEntityTemplate", &EntityManager::getEntityTemplate) + .Func("getEntityTemplateName", &EntityManager::getEntityTemplateName) + .Func("getEntityFutureTemplateName", &EntityManager::getEntityFutureTemplateName) + .GlobalFunc("getTemplateDB", emgr_get_tempate_db) // FIXME: sqrat binding is not supports returning references from member + // functions + .GlobalFunc("getEventsDB", emgr_get_events_db) + .SquirrelFunc("createEntity", create_entity, -3, "xstc|o") + .SquirrelFunc("createEntitySync", create_entity_sync, -3, "xst|o") + .SquirrelFunc("reCreateEntityFrom", recreate_entity, -4, "xistc|o") + .SquirrelFunc("createTemplate", create_template, -3, "xstssis") + .GlobalFunc("getComponentType", emgr_get_component_type) + .GlobalFunc("getComponentTypeName", emgr_get_component_type_name) + .GlobalFunc("getTypeName", emgr_get_type_name) +/* + +.. sq:attribute:: var EntityManager.dt + +.. sq:attribute:: var EntityManager.curTime + +/; + + + + + + + + +------------------ +class CompObjectRO +------------------ + + Sqrat::Class sqCompObjectRO(vm, "CompObjectRO"); + sqCompObjectRO // + .SquirrelFunc("isReadOnly", comp_is_readonly, 1, "x") +.SquirrelFunc("getAll", comp_obj_get_all sqCompObject(vm, "CompObject"); + sqCompObject // + .SquirrelFunc("isReadOnly", comp_is_readonly, 1, "x") + .SquirrelFunc("getAll", comp_obj_get_all, 1, "x") + .SquirrelFunc("_get", comp_obj_get, 2, "xs") + .SquirrelFunc("_set", comp_obj_set, 3, "xs.") + .SquirrelFunc("_newslot", comp_obj_set, 3, "xs.") + .SquirrelFunc("_nexti", comp_obj_nexti, 2, "xs|o") + .SquirrelFunc("remove", comp_obj_erase, 2, "xs") + .GlobalFunc("len", comp_t_len) +/* + +.. sq:function:: method CompObject.isReadOnly(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: method CompObject.getAll(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +.. sq:function:: operator CompObject._get(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer`` + +.. sq:function:: operator CompObject._set(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + ``nparamscheck:3`` + + ``typecheck mask: class_instance, integer, any_type`` + +.. sq:function:: operator CompObject._nexti(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer or null + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer or null`` + +.. sq:function:: method CompObject.len() + +.. sq:function:: method CompObject.indexof(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, any_type, integer`` + +.. sq:function:: method CompObject.append(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, any_type, integer`` + +.. sq:function:: method CompObject.insert(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: class_instance, integer, any_type, integer`` + +.. sq:function:: method CompObject.remove(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + ``nparamscheck:2`` + + ``typecheck mask: class_instance, integer`` + +.. sq:function:: method CompObject.pop(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +/; + + + + + + + +--------------------------------------- +class CompArray extends ecs.CompArrayRO +--------------------------------------- + + + Sqrat::DerivedClass sqCompArray(vm, "CompArray"); + sqCompArray // + .SquirrelFunc("isReadOnly", comp_is_readonly, 1, "x") + .SquirrelFunc("getAll", comp_arr_get_all, 1, "x") + .SquirrelFunc("_get", comp_arr_get, 2, "x.") + .SquirrelFunc("_set", comp_arr_set, 3, "xi.") + .SquirrelFunc("_nexti", comp_arr_nexti, 2, "xi|o") + .GlobalFunc("len", comp_t_len) + .SquirrelFunc("indexof", comp_arr_indexof, -2, "x.i") + .SquirrelFunc("append", comp_arr_append, -2, "x.i") + .SquirrelFunc("insert", comp_arr_insert, -3, "xi.i") + .SquirrelFunc("remove", comp_arr_remove, 2, "xi") + .SquirrelFunc("pop", comp_arr_pop, 1, "x") + .GlobalFunc("clear", comp_arr_clear) +/* + + + + +------------- +class SqQuery +------------- + +.. sq:method:: SqQuery(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: table + + :param arg2: autodoc from typemask/paramscheck + :type arg2: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: class_instance, string, table, string`` + +.. sq:function:: method SqQuery.perform(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer or closure_and_nativeclosure + + :param arg2: autodoc from typemask/paramscheck + :type arg2: closure_and_nativeclosure or string or null + + :param arg3: autodoc from typemask/paramscheck + :type arg3: string or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: class_instance, integer or closure_and_nativeclosure, closure_and_nativeclosure or string or null, string or null`` + +.. sq:function:: operator SqQuery._call(arg0, arg1, arg2, arg3, arg4, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer or closure_and_nativeclosure + + :param arg3: autodoc from typemask/paramscheck + :type arg3: closure_and_nativeclosure or string or null + + :param arg4: autodoc from typemask/paramscheck + :type arg4: string or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: class_instance, any_type, integer or closure_and_nativeclosure, closure_and_nativeclosure or string or null, string or null`` + +/; + + + + + + + +-------------- +class EntityId +-------------- + + Sqrat::Class sqEntityId(vm, "EntityId"); + sqEntityId.SquirrelCtor(eid_ctor, -1, "xi"); + + Sqrat::DerivedClass> sqEventGetterProxy(vm, "EventDataGetter"); + + sqEventGetterProxy.Var("data", &EventDataGetter::sqData); + + + + + + tblEcs // + .Func("get_component_name_by_idx", get_component_name_by_idx) + .Func("get_component_name_by_hash", get_component_name_by_hash) + .SquirrelFunc("register_sq_event", register_sq_event, -2, ".sb|ii|o") +/* + +.. sq:function:: function _dbg_get_all_comps_inspect(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + ``nparamscheck:2`` + + ``typecheck mask: any_type, integer`` + +.. sq:function:: function _dbg_get_comp_val_inspect(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, integer, string`` + +.. sq:function:: function obsolete_dbg_get_comp_val(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, integer, string`` + +.. sq:function:: function get_comp_type(eid, comp_name) + + :param eid: + :type eid: ecs::EntityId + + :param comp_name: + :type comp_name: string + + :return: integer + +.. sq:function:: function obsolete_dbg_set_comp_val(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, integer, string`` + +.. sq:function:: function get_comp_flags(eid, comp) + + :param eid: + :type eid: ecs::EntityId + + :param comp: + :type comp: string + + :return: integer + +.. sq:function:: function get_semantic_type(type_name) + + :param type_name: + :type type_name: string + + :return: component_type_t + +.. sq:function:: function calc_hash(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: function calc_hash_int(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:attribute:: TYPE_NULL + +.. sq:attribute:: const TYPE_STRING + +.. sq:attribute:: const TYPE_INT8 + +.. sq:attribute:: const TYPE_UINT8 + +.. sq:attribute:: const TYPE_INT16 + +.. sq:attribute:: const TYPE_UINT16 + +.. sq:attribute:: const TYPE_INT + +.. sq:attribute:: const TYPE_UINT + +.. sq:attribute:: const TYPE_INT64 + +.. sq:attribute:: const TYPE_UINT64 + +.. sq:attribute:: const TYPE_FLOAT + +.. sq:attribute:: const TYPE_POINT2 + +.. sq:attribute:: const TYPE_POINT3 + +.. sq:attribute:: const TYPE_POINT4 + +.. sq:attribute:: const TYPE_IPOINT2 + +.. sq:attribute:: const TYPE_IPOINT3 + +.. sq:attribute:: const TYPE_IPOINT4 + +.. sq:attribute:: const TYPE_DPOINT3 + +.. sq:attribute:: const TYPE_BOOL + +.. sq:attribute:: const TYPE_MATRIX + +.. sq:attribute:: const TYPE_EID + +.. sq:attribute:: const TYPE_COLOR + +.. sq:attribute:: const TYPE_OBJECT + +.. sq:attribute:: const TYPE_ARRAY + +.. sq:attribute:: const TYPE_SHARED_OBJECT + +.. sq:attribute:: const TYPE_SHARED_ARRAY + +.. sq:attribute:: const TYPE_INT_LIST + +.. sq:attribute:: const TYPE_UINT16_LIST + +.. sq:attribute:: const TYPE_STRING_LIST + +.. sq:attribute:: const TYPE_EID_LIST + +.. sq:attribute:: const TYPE_FLOAT_LIST + +.. sq:attribute:: const TYPE_POINT2_LIST + +.. sq:attribute:: const TYPE_POINT3_LIST + +.. sq:attribute:: const TYPE_POINT4_LIST + +.. sq:attribute:: const TYPE_IPOINT2_LIST + +.. sq:attribute:: const TYPE_IPOINT3_LIST + +.. sq:attribute:: const TYPE_IPOINT4_LIST + +.. sq:attribute:: const TYPE_BOOL_LIST + +.. sq:attribute:: const TYPE_TMATRIX_LIST + +.. sq:attribute:: const TYPE_COLOR_LIST + +.. sq:attribute:: const TYPE_INT64_LIST + +.. sq:attribute:: const TYPE_UINT64_LIST + +.. sq:attribute:: const TYPE_TAG + +.. sq:attribute:: const TYPE_AUTO + +.. sq:function:: function clear_vm_entity_systems() + +.. sq:function:: function register_entity_system(arg0, arg1, arg2, arg3, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: table + + :param arg2: autodoc from typemask/paramscheck + :type arg2: table + + :param arg3: autodoc from typemask/paramscheck + :type arg3: table or null + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-4`` + + ``typecheck mask: any_type, string, table, table, table or null`` + +.. sq:function:: function modify_es_list(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: closure_and_nativeclosure + + ``nparamscheck:2`` + + ``typecheck mask: any_type, closure_and_nativeclosure`` + +.. sq:function:: function start_es_loading() + +.. sq:function:: function end_es_loading() + +.. sq:attribute:: g_entity_mgr = instance of EntityManager class + + ``type: class_instance`` + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/entity_editor.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/entity_editor.rst.txt new file mode 100644 index 000000000..3bef95b2d --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/entity_editor.rst.txt @@ -0,0 +1,269 @@ +.. autogenerated + +************* +entity_editor +************* + +module 'entity_editor' + + + +*Source file: prog/gameLibs/publicInclude/daEditorE/editorCommon/inGameEditor.inc.cpp* + +Usage:: + + let { DE4_MODE_CREATE_ENTITY, get_instance, get_saved_components, get_template_name_for_ui, reset_component, save_component, save_add_template, save_del_template, is_editor_activated, is_any_entity_selected, is_asset_wnd_shown, get_scene_filepath, clear_entity_save_order, add_entity_save_order_comp, clear_groups, add_group_require, add_group_variant, add_group_variext, get_ecs_tags, set_start_work_mode, get_point_action_op, get_point_action_mod, get_point_action_has_pos, get_point_action_pos, get_point_action_ext_id, get_point_action_ext_name, get_point_action_ext_mtx, get_point_action_ext_sph, get_point_action_ext_eid, gather_ri_by_sphere, get_ri_from_entity, make_cam_spawn_tm } = require("entity_editor") + +or:: + + from "entity_editor" import * + +.. code-block:: sq + + //'entity_editor' exports: + { + value DE4_MODE_CREATE_ENTITY + function get_instance() + function get_saved_components(arg0): integer -> _undocumented_ + function get_template_name_for_ui(eid_int): SQInteger -> string + function reset_component(eid_int, comp_name): SQInteger, string -> null + function save_component(eid_int, comp_name): SQInteger, string -> null + function save_add_template(eid_int, templ_name): SQInteger, string -> null + function save_del_template(eid_int, templ_name): SQInteger, string -> null + function is_editor_activated(): -> bool + function is_any_entity_selected(): -> bool + function is_asset_wnd_shown(): -> bool + function get_scene_filepath() + function clear_entity_save_order(): -> null + function add_entity_save_order_comp(comp_name_start): string -> null + function clear_groups(): -> null + function add_group_require(group_name, require): string, string -> null + function add_group_variant(group_name, variant): string, string -> null + function add_group_variext(group_name, variant, tsuffix): string, string, string -> null + function get_ecs_tags() + function set_start_work_mode(mode): string -> null + function get_point_action_op() + function get_point_action_mod(): -> integer + function get_point_action_has_pos(): -> bool + function get_point_action_pos(): -> integer + function get_point_action_ext_id() + function get_point_action_ext_name() + function get_point_action_ext_mtx(): -> TMatrix + function get_point_action_ext_sph(): -> integer + function get_point_action_ext_eid(): -> integer + function gather_ri_by_sphere(arg0, arg1, arg2, arg3): float, float, float, float -> _undocumented_ + function get_ri_from_entity(arg0): integer -> _undocumented_ + function make_cam_spawn_tm(): -> TMatrix + } + + +.. sq:attribute:: DE4_MODE_CREATE_ENTITY + +.. sq:function:: function get_instance() + +.. sq:function:: function get_saved_components(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + ``nparamscheck:2`` + + ``typecheck mask: table, integer`` + +.. sq:function:: function get_template_name_for_ui(eid_int) + + :param eid_int: + :type eid_int: SQInteger + + :return: string + +.. sq:function:: function reset_component(eid_int, comp_name) + + :param eid_int: + :type eid_int: SQInteger + + :param comp_name: + :type comp_name: string + + :return: null + +.. sq:function:: function save_component(eid_int, comp_name) + + :param eid_int: + :type eid_int: SQInteger + + :param comp_name: + :type comp_name: string + + :return: null + +.. sq:function:: function save_add_template(eid_int, templ_name) + + :param eid_int: + :type eid_int: SQInteger + + :param templ_name: + :type templ_name: string + + :return: null + +.. sq:function:: function save_del_template(eid_int, templ_name) + + :param eid_int: + :type eid_int: SQInteger + + :param templ_name: + :type templ_name: string + + :return: null + +.. sq:function:: function is_editor_activated() + + :return: bool + +.. sq:function:: function is_any_entity_selected() + + :return: bool + +.. sq:function:: function is_asset_wnd_shown() + + :return: bool + +.. sq:function:: function get_scene_filepath() + +.. sq:function:: function clear_entity_save_order() + + :return: null + +.. sq:function:: function add_entity_save_order_comp(comp_name_start) + + :param comp_name_start: + :type comp_name_start: string + + :return: null + +.. sq:function:: function clear_groups() + + :return: null + +.. sq:function:: function add_group_require(group_name, require) + + :param group_name: + :type group_name: string + + :param require: + :type require: string + + :return: null + +.. sq:function:: function add_group_variant(group_name, variant) + + :param group_name: + :type group_name: string + + :param variant: + :type variant: string + + :return: null + +.. sq:function:: function add_group_variext(group_name, variant, tsuffix) + + :param group_name: + :type group_name: string + + :param variant: + :type variant: string + + :param tsuffix: + :type tsuffix: string + + :return: null + +.. sq:function:: function get_ecs_tags() + + ``nparamscheck:1`` + + ``typecheck mask: any_type`` + +.. sq:function:: function set_start_work_mode(mode) + + :param mode: + :type mode: string + + :return: null + +.. sq:function:: function get_point_action_op() + +.. sq:function:: function get_point_action_mod() + + :return: integer + +.. sq:function:: function get_point_action_has_pos() + + :return: bool + +.. sq:function:: function get_point_action_pos() + + :return: integer + +.. sq:function:: function get_point_action_ext_id() + +.. sq:function:: function get_point_action_ext_name() + +.. sq:function:: function get_point_action_ext_mtx() + + :return: TMatrix + +.. sq:function:: function get_point_action_ext_sph() + + :return: integer + +.. sq:function:: function get_point_action_ext_eid() + + :return: integer + +.. sq:function:: function gather_ri_by_sphere(arg0, arg1, arg2, arg3) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: float + + ``nparamscheck:5`` + + ``typecheck mask: table, float, float, float, float`` + +.. sq:function:: function get_ri_from_entity(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer + + ``nparamscheck:2`` + + ``typecheck mask: table, integer`` + +.. sq:function:: function make_cam_spawn_tm() + + :return: TMatrix + +/; + module_mgr->addNativeModule("entity_editor", exports); +} + + +IDaEditor4EmbeddedComponent &get_da_editor4() { return *daEd4; } +void da_editor4_setup_scene(const char *fpath) +{ + objEd_sceneFilePath = fpath; + if (objEd) + objEd->setupNewScene(fpath); +} + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/eventbus.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/eventbus.rst.txt new file mode 100644 index 000000000..a3f3b0f6e --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/eventbus.rst.txt @@ -0,0 +1,140 @@ +.. autogenerated + +******** +eventbus +******** + +module 'eventbus' + + + +*Source file: prog/gameLibs/quirrel/sqEventBus/sqEventBus.cpp* + +Usage:: + + let { eventbus_subscribe, eventbus_subscribe_onehit, eventbus_unsubscribe, eventbus_send, eventbus_send_foreign, eventbus_has_listeners, eventbus_has_foreign_listeners } = require("eventbus") + +or:: + + from "eventbus" import * + +.. code-block:: sq + + //'eventbus' exports: + { + function eventbus_subscribe(arg0, arg1, arg2, ...): string, closure_and_nativeclosure, array or string, any_type -> _undocumented_ + function eventbus_subscribe_onehit(arg0, arg1, arg2, ...): string, closure_and_nativeclosure, array or string, any_type -> _undocumented_ + function eventbus_unsubscribe(arg0, arg1): string, closure_and_nativeclosure -> _undocumented_ + function eventbus_send() + function eventbus_send_foreign() + function eventbus_has_listeners() + function eventbus_has_foreign_listeners() + } + + +.. sq:function:: function eventbus_subscribe(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: closure_and_nativeclosure + + :param arg2: autodoc from typemask/paramscheck + :type arg2: array or string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, string, closure_and_nativeclosure, array or string`` + +.. sq:function:: function eventbus_subscribe_onehit(arg0, arg1, arg2, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: closure_and_nativeclosure + + :param arg2: autodoc from typemask/paramscheck + :type arg2: array or string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-3`` + + ``typecheck mask: any_type, string, closure_and_nativeclosure, array or string`` + +.. sq:function:: function eventbus_unsubscribe(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: closure_and_nativeclosure + + ``nparamscheck:3`` + + ``typecheck mask: any_type, string, closure_and_nativeclosure`` + +.. sq:function:: function eventbus_send() + + ``nparamscheck:1`` + +.. sq:function:: function eventbus_send_foreign() + + ``nparamscheck:1`` + +.. sq:function:: function eventbus_has_listeners() + + ``nparamscheck:1`` + +.. sq:function:: function eventbus_has_foreign_listeners() + + ``nparamscheck:1`` + +/; + + module_mgr->addNativeModule("eventbus", api); +} + + +void unbind(HSQUIRRELVM vm) +{ + ScopedLockWriteTemplate guard(vmsLock); + G_ASSERT(!interlocked_acquire_load(is_in_send)); + vms.erase(vm); +} + + +void clear_on_reload(HSQUIRRELVM vm) +{ + ScopedLockReadTemplate guard(vmsLock); + G_ASSERT(!interlocked_acquire_load(is_in_send)); + auto itVm = vms.find(vm); + if (itVm != vms.end()) + { + ScopedLockWriteTemplate handlerGuard(itVm->second.handlersLock); + itVm->second.handlers.clear(); + } +} + + +void do_with_vm(const eastl::function &callback) +{ + ScopedLockReadTemplate guard(vmsLock); + // return any VM to allow creating script objects that will be passed to all VMs + auto it = vms.begin(); + callback(it != vms.end() ? it->first : nullptr); +} + + +void set_native_event_handler(NativeEventHandler handler) { g_native_event_handler = handler; } + + +} // namespace sqeventbus + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/executable.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/executable.rst.txt new file mode 100644 index 000000000..c6aaf10c5 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/executable.rst.txt @@ -0,0 +1,39 @@ +.. autogenerated + +********** +executable +********** + +module 'executable' + + + +*Source file: prog/gameLibs/quirrel/executable/executable.cpp* + +Usage:: + + let { is_exports_symbol } = require("executable") + +or:: + + from "executable" import * + +.. code-block:: sq + + //'executable' exports: + { + function is_exports_symbol(arg, arg): string, string -> integer + } + + +.. sq:function:: function is_exports_symbol(arg, arg) + + :param arg: + :type arg: string + + :param arg: + :type arg: string + + :return: integer + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/frp.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/frp.rst.txt new file mode 100644 index 000000000..493849287 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/frp.rst.txt @@ -0,0 +1,121 @@ +.. autogenerated + +*** +frp +*** + +module 'frp' + + + +*Source file: prog/gameLibs/quirrel/frp/frp.cpp* + +Usage:: + + let { Watched, Computed, FRP_INITIAL, FRP_DONT_CHECK_NESTED } = require("frp") + +or:: + + from "frp" import * + +.. code-block:: sq + + //'frp' exports: + { + class Watched + class Computed + const FRP_INITIAL + const FRP_DONT_CHECK_NESTED + } + + +------------- +class Watched +------------- + + Sqrat::DerivedClass> scriptValueObservable(vm, + "ScriptValueObservable"); + scriptValueObservable // + .SquirrelCtor(ScriptValueObservable::script_ctor, -1) + .Prop("value", &ScriptValueObservable::getValue) + .Func("get", &ScriptValueObservable::getValue) + .Prop("timeChangeReq", &ScriptValueObservable::getTimeChangeReq) + .Prop("timeChanged", &ScriptValueObservable::getTimeChanged) + .SquirrelFunc("trigger", &ScriptValueObservable::sqTrigger, 1, "x") + .Func("trace", &ScriptValueObservable::trace) + .Func("whiteListMutatorClosure", &ScriptValueObservable::whiteListMutatorClosure) + .SquirrelFunc("update", &ScriptValueObservable::updateViaMethod, 2, "x") + .SquirrelFunc("set", &ScriptValueObservable::updateViaMethod, 2, "x") + .SquirrelFunc("modify", &ScriptValueObservable::modify, 2, "xc") + .SquirrelFunc("_call", &ScriptValueObservable::updateViaCallMm, 3, "x") + .SquirrelFunc("mutate", &ScriptValueObservable::mutate, 2, "xc") + .SquirrelFunc("_newslot", &ScriptValueObservable::_newslot, 3, "x") + .SquirrelFunc("_delslot", &ScriptValueObservable::_delslot, 2, "x") +/* + + + + +------------------------------ +class Computed extends Watched +------------------------------ + +.. sq:method:: Computed() + +.. sq:function:: method Computed.update() + +.. sq:function:: method Computed.mutate() + +.. sq:function:: method Computed.set() + +.. sq:function:: method Computed.modify() + +.. sq:function:: operator Computed._call() + +.. sq:function:: operator Computed._newslot() + +.. sq:function:: operator Computed._delslot() + +.. sq:attribute:: property Computed.used + + ``readonly`` + +.. sq:function:: method Computed._noComputeErrorFor() + +.. sq:function:: method Computed.getSources(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + ``nparamscheck:1`` + + ``typecheck mask: class_instance`` + +/; + + Sqrat::Table exports(vm); + exports.Bind("Watched", scriptValueObservable); + exports.Bind("Computed", sqComputedValue); + + + + + + + exports // + .SquirrelFunc("set_nested_observable_debug", set_nested_observable_debug, 2, ".b") + .SquirrelFunc("make_all_observables_immutable", make_all_observables_immutable, 2, ".b") + .SquirrelFunc("set_default_deferred", set_default_deferred, 2, ".bb") + .SquirrelFunc("set_recursive_sources", set_recursive_sources, 2, ".b") + .SquirrelFunc("set_slow_update_threshold_usec", set_slow_update_threshold_usec, 2, ".i") + .SquirrelFunc("recalc_all_computed_values", recalc_all_computed_values, 1, ".") + .SquirrelFunc("gather_graph_stats", gather_graph_stats, 1, ".") + .SquirrelFunc("update_deferred", update_deferred, 1, ".") + .SquirrelFunc("register_stub_observable_class", ObservablesGraph::register_stub_observable_class, 2, ".y") +/* + +.. sq:attribute:: const FRP_INITIAL + +.. sq:attribute:: const FRP_DONT_CHECK_NESTED + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/hash.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/hash.rst.txt new file mode 100644 index 000000000..57d27cfe0 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/hash.rst.txt @@ -0,0 +1,88 @@ +.. autogenerated + +**** +hash +**** + +module 'hash' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/hash.cpp* + +Usage:: + + let { md5, sha1, crc32, crc32_int } = require("hash") + +or:: + + from "hash" import * + +.. code-block:: sq + + //'hash' exports: + { + function md5(arg0): string -> _undocumented_ + function sha1(arg0): string -> _undocumented_ + function crc32(arg0, arg1, ...): string, integer, any_type -> _undocumented_ + function crc32_int(arg0, arg1, ...): string, integer, any_type -> _undocumented_ + } + + +.. sq:function:: function md5(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: function sha1(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: function crc32(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, string, integer`` + +.. sq:function:: function crc32_int(arg0, arg1, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, string, integer`` + +/; + + module_mgr->addNativeModule("hash", exports); +} + + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/index.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/index.rst.txt new file mode 100644 index 000000000..816f21c97 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/index.rst.txt @@ -0,0 +1,15 @@ + +Quirrel Gamelibs Native Modules +=============================== + +Docs for Quirrel modules extracted from source in gameLibs + + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + * + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/json.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/json.rst.txt new file mode 100644 index 000000000..8c430e2c0 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/json.rst.txt @@ -0,0 +1,86 @@ +.. autogenerated + +**** +json +**** + +module 'json' + + + +*Source file: prog/gameLibs/quirrel/quirrel_json/quirrel_json.cpp* + +Usage:: + + let { parse_json, parse_json_from_zstd_stream, object_to_json_string, object_to_zstd_json } = require("json") + +or:: + + from "json" import * + +.. code-block:: sq + + //'json' exports: + { + function parse_json(string): string -> null|string|integer_or_float|table|array + function parse_json_from_zstd_stream(blob): string -> null|string|integer_or_float|table|array + function object_to_json_string(object): null|string|integer_or_float|table|array|bool -> bool + function object_to_zstd_json(arg0, ...): any_type, any_type -> _undocumented_ + } + + +.. sq:function:: function parse_json(string) + + :param string: string that would be parsed to json + :type string: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string`` + + :return: quirrel object + :rtype: null|string|integer_or_float|table|array + + + + +.. sq:function:: function parse_json_from_zstd_stream(blob) + + :param blob: blob with ztsd stream that would be parsed to json + :type blob: string + + ``nparamscheck:2`` + + ``typecheck mask: any_type, class_instance`` + + :return: quirrel object + :rtype: null|string|integer_or_float|table|array + + + + +.. sq:function:: function object_to_json_string(object) + + :param object: object that will be converted to json + :type object: null|string|integer_or_float|table|array|bool + + :return: blob with compressed json string + :rtype: bool + + + +.. sq:function:: function object_to_zstd_json(arg0, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, any_type`` + + + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/jwt.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/jwt.rst.txt new file mode 100644 index 000000000..2d5adf32f --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/jwt.rst.txt @@ -0,0 +1,58 @@ +.. autogenerated + +*** +jwt +*** + +module 'jwt' + + + +*Source file: prog/gameLibs/quirrel/sqJwt/sqJwt.cpp* + +Usage:: + + let { decode } = require("jwt") + +or:: + + from "jwt" import * + +.. code-block:: sq + + //'jwt' exports: + { + function decode(jwt_string, key): string, string -> table + } + + +.. sq:function:: function decode(jwt_string, key) + + :param jwt_string: + :type jwt_string: string + + :param key: + :type key: string + + ``nparamscheck:3`` + + ``typecheck mask: any_type, string, string`` + + :return: return decoded jwt table with {header=, payload=} or {error=string} + :rtype: table + + + + Error can be one of following:: + + "OK", + "INVALID_TOKEN", + "WRONG_HEADER", + "INVALID_TOKEN_TYPE", + "INVALID_TOKEN_SIGNATURE_ALGORITHM", + "INVALID_PAYLOAD_COMPRESSION", + "WRONG_PAYLOAD", + "SIGNATURE_VERIFICATION_FAILED" + + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/modules.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/modules.rst.txt new file mode 100644 index 000000000..0b4ca5494 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/modules.rst.txt @@ -0,0 +1,40 @@ +.. autogenerated + +******* +modules +******* + +module 'modules' + + + +*Source file: prog/gameLibs/quirrel/sqModules/sqModules.cpp* + +Usage:: + + let { get_native_module_names, on_module_unload } = require("modules") + +or:: + + from "modules" import * + +.. code-block:: sq + + //'modules' exports: + { + function get_native_module_names(): -> list + function on_module_unload() + } + + +.. sq:function:: function get_native_module_names() + + :return: list + +.. sq:function:: function on_module_unload() + + ``nparamscheck:1`` + +register modules unload callback + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/nestdb.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/nestdb.rst.txt new file mode 100644 index 000000000..7c33e1663 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/nestdb.rst.txt @@ -0,0 +1,87 @@ +.. autogenerated + +****** +nestdb +****** + +module 'nestdb' + + + +*Source file: prog/gameLibs/quirrel/nestdb/nestdb.cpp* + +Usage:: + + let { ndbWrite, ndbRead, ndbTryRead, ndbExists, ndbDelete } = require("nestdb") + +or:: + + from "nestdb" import * + +.. code-block:: sq + + //'nestdb' exports: + { + function ndbWrite(arg0, arg1): string or array, any_type -> _undocumented_ + function ndbRead(arg0): string or array -> _undocumented_ + function ndbTryRead(arg0): string or array -> _undocumented_ + function ndbExists(arg0): string or array -> _undocumented_ + function ndbDelete(arg0): string or array -> _undocumented_ + } + + +.. sq:function:: function ndbWrite(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string or array + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + ``nparamscheck:3`` + + ``typecheck mask: any_type, string or array, any_type`` + +.. sq:function:: function ndbRead(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string or array + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string or array`` + +.. sq:function:: function ndbTryRead(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string or array + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string or array`` + +.. sq:function:: function ndbExists(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string or array + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string or array`` + +.. sq:function:: function ndbDelete(arg0) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string or array + + ``nparamscheck:2`` + + ``typecheck mask: any_type, string or array`` + +/; + module_mgr->addNativeModule("nestdb", exports); +} + +} // namespace nestdb + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/net.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/net.rst.txt new file mode 100644 index 000000000..e7d678a05 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/net.rst.txt @@ -0,0 +1,59 @@ +.. autogenerated + +*** +net +*** + +module 'net' + + + +*Source file: prog/gameLibs/ecs/scripts/sq/netBindSq.cpp* + +Usage:: + + let { is_server, has_network, get_replay_proto_version, INVALID_CONNECTION_ID } = require("net") + +or:: + + from "net" import * + +.. code-block:: sq + + //'net' exports: + { + function is_server() + function has_network() + function get_replay_proto_version() + value INVALID_CONNECTION_ID + } + + +.. sq:function:: function is_server() + +.. sq:function:: function has_network() + +.. sq:function:: function get_replay_proto_version() + +.. sq:attribute:: INVALID_CONNECTION_ID + +/; +#define DC(x) tbl.SetValue(#x, x); + DANET_DEFINE_DISCONNECTION_CAUSES +#undef DC + + ecs::sq::EventsBind< +#define NET_ECS_EVENT(e, ...) e, + NET_ECS_EVENTS +#undef NET_ECS_EVENT + ecs::sq::term_event_t>::bindall(tbl); + + if (!existingModule) + module_mgr->addNativeModule("net", tbl); +} + +} // namespace sq + +} // namespace ecs + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/pathfinder.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/pathfinder.rst.txt new file mode 100644 index 000000000..70438962f --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/pathfinder.rst.txt @@ -0,0 +1,114 @@ +.. autogenerated + +********** +pathfinder +********** + +module 'pathfinder' + + + +*Source file: prog/gameLibs/quirrel/sqPathFinder/sqPathFinder.cpp* + +Usage:: + + let { project_to_nearest_navmesh_point, project_to_nearest_navmesh_point_no_obstacles, check_path, find_path, traceray_navmesh, POLYFLAG_GROUND, POLYFLAG_OBSTACLE, POLYFLAG_LADDER, POLYFLAG_JUMP, POLYFLAG_BLOCKED } = require("pathfinder") + +or:: + + from "pathfinder" import * + +.. code-block:: sq + + //'pathfinder' exports: + { + function project_to_nearest_navmesh_point(&wish_pos, horz_extents): integer, float -> integer + function project_to_nearest_navmesh_point_no_obstacles(&wish_pos, &horz_extents): integer, integer -> integer + function check_path() + function find_path(arg0, arg1, arg2, arg3, arg4, ...): class_instance, class_instance, float, float, float, any_type -> _undocumented_ + function traceray_navmesh(&start_pos, &end_pos, dist_to_path): integer, integer, float -> integer + value POLYFLAG_GROUND + value POLYFLAG_OBSTACLE + value POLYFLAG_LADDER + value POLYFLAG_JUMP + value POLYFLAG_BLOCKED + } + + +.. sq:function:: function project_to_nearest_navmesh_point(&wish_pos, horz_extents) + + :param &wish_pos: + :type &wish_pos: integer + + :param horz_extents: + :type horz_extents: float + + :return: integer + +.. sq:function:: function project_to_nearest_navmesh_point_no_obstacles(&wish_pos, &horz_extents) + + :param &wish_pos: + :type &wish_pos: integer + + :param &horz_extents: + :type &horz_extents: integer + + :return: integer + +.. sq:function:: function check_path() + +.. sq:function:: function find_path(arg0, arg1, arg2, arg3, arg4, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: class_instance + + :param arg1: autodoc from typemask/paramscheck + :type arg1: class_instance + + :param arg2: autodoc from typemask/paramscheck + :type arg2: float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: float + + :param arg4: autodoc from typemask/paramscheck + :type arg4: float + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-5`` + + ``typecheck mask: any_type, class_instance, class_instance, float, float, float`` + +.. sq:function:: function traceray_navmesh(&start_pos, &end_pos, dist_to_path) + + :param &start_pos: + :type &start_pos: integer + + :param &end_pos: + :type &end_pos: integer + + :param dist_to_path: + :type dist_to_path: float + + :return: integer + +.. sq:attribute:: POLYFLAG_GROUND + +.. sq:attribute:: POLYFLAG_OBSTACLE + +.. sq:attribute:: POLYFLAG_LADDER + +.. sq:attribute:: POLYFLAG_JUMP + +.. sq:attribute:: POLYFLAG_BLOCKED + +/; + + module_mgr->addNativeModule("pathfinder", nsTbl); +} + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/platform.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/platform.rst.txt new file mode 100644 index 000000000..c83c7dece --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/platform.rst.txt @@ -0,0 +1,139 @@ +.. autogenerated + +******** +platform +******** + +module 'platform' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/platformMisc.cpp* + +Usage:: + + let { get_locale_lang, get_locale_country, get_platform_string_id, get_console_model, get_console_model_revision, get_default_lang, is_gdk_used, UNKNOWN, PS4, PS4_PRO, XBOXONE, XBOXONE_S, XBOXONE_X, XBOX_LOCKHART, XBOX_ANACONDA, PS5, PS5_PRO, NINTENDO_SWITCH } = require("platform") + +or:: + + from "platform" import * + +.. code-block:: sq + + //'platform' exports: + { + function get_locale_lang() + function get_locale_country() + function get_platform_string_id() + function get_console_model(): -> integer + function get_console_model_revision() + function get_default_lang() + function is_gdk_used(): -> bool + const UNKNOWN + const PS4 + const PS4_PRO + const XBOXONE + const XBOXONE_S + const XBOXONE_X + const XBOX_LOCKHART + const XBOX_ANACONDA + const PS5 + const PS5_PRO + const NINTENDO_SWITCH + } + + +.. sq:function:: function get_locale_lang() + + ``nparamscheck:1`` + + ``typecheck mask: any_type`` + +.. sq:function:: function get_locale_country() + + ``nparamscheck:1`` + + ``typecheck mask: any_type`` + +.. sq:function:: function get_platform_string_id() + +.. sq:function:: function get_console_model() + + :return: integer + +.. sq:function:: function get_console_model_revision() + +.. sq:function:: function get_default_lang() + +.. sq:function:: function is_gdk_used() + + :return: bool + +/; +#define SET_CONST(n) tbl.SetValue(#n, SQInteger((int)ConsoleModel::n)); + + +.. sq:attribute:: const UNKNOWN + + SET_CONST(UNKNOWN) + + +.. sq:attribute:: const PS4 + + SET_CONST(PS4) + + +.. sq:attribute:: const PS4_PRO + + SET_CONST(PS4_PRO) + + +.. sq:attribute:: const XBOXONE + + SET_CONST(XBOXONE) + + +.. sq:attribute:: const XBOXONE_S + + SET_CONST(XBOXONE_S) + + +.. sq:attribute:: const XBOXONE_X + + SET_CONST(XBOXONE_X) + + +.. sq:attribute:: const XBOX_LOCKHART + + SET_CONST(XBOX_LOCKHART) + + +.. sq:attribute:: const XBOX_ANACONDA + + SET_CONST(XBOX_ANACONDA) + + +.. sq:attribute:: const PS5 + + SET_CONST(PS5) + + +.. sq:attribute:: const PS5_PRO + + SET_CONST(PS5_PRO) + + +.. sq:attribute:: const NINTENDO_SWITCH + + SET_CONST(NINTENDO_SWITCH) +#undef SET_CONST + return tbl; +} + + +void bindquirrel::register_platform_module(SqModules *module_mgr) +{ + module_mgr->addNativeModule("platform", make_platform_exports(module_mgr->getVM())); +} + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/regexp2.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/regexp2.rst.txt new file mode 100644 index 000000000..408fe9827 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/regexp2.rst.txt @@ -0,0 +1,72 @@ +.. autogenerated + +******* +regexp2 +******* + +module 'regexp2' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/bindSqrat.cpp* + +Usage:: + + let regexp2 = require("regexp2") + +or:: + + from "regexp2" import * + +.. code-block:: sq + + //'regexp2' exports: + class regexp2 + + +------------- +class regexp2 +------------- + +.. sq:method:: regexp2(regexp_string) + + :param regexp_string: + :type regexp_string: string + +.. sq:function:: method regexp2.match() + +.. sq:function:: method regexp2.fullmatch() + +.. sq:function:: method regexp2.replace() + +.. sq:function:: method regexp2.multiExtract(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: any_type + + :param arg1: autodoc from typemask/paramscheck + :type arg1: any_type + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + ``nparamscheck:3`` + +.. sq:function:: method regexp2.pattern() + +/; + + module_mgr->addNativeModule("regexp2", Sqrat::Object(regexp2.GetObject(), vm)); +} + +void register_utf8(SqModules *module_mgr) +{ + HSQUIRRELVM vm = module_mgr->getVM(); + Sqrat::Class utf8(vm, "utf8"); + + + + + + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/renderCanvas.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/renderCanvas.rst.txt new file mode 100644 index 000000000..a625098da --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/renderCanvas.rst.txt @@ -0,0 +1,190 @@ +.. autogenerated + +************ +renderCanvas +************ + + for render canvas + +*Source file: prog/gameLibs/daRg/canvasDraw.cpp* + + +use it to draw in canvas + + +.. sq:function:: function line(arg0, arg1, arg2) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: array + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + ``nparamscheck:4`` + + ``typecheck mask: userdata, array, integer_or_float, any_type`` + +function comment + +.. sq:function:: function line_dashed(arg0, arg1, arg2, arg3, arg4) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: array + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer_or_float + + :param arg4: autodoc from typemask/paramscheck + :type arg4: any_type + + ``nparamscheck:6`` + + ``typecheck mask: userdata, array, integer_or_float, integer_or_float, integer_or_float, any_type`` + +.. sq:function:: function fill_poly(arg0, arg1, arg2, arg3) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: array + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + :param arg3: autodoc from typemask/paramscheck + :type arg3: any_type + + ``nparamscheck:5`` + + ``typecheck mask: userdata, array, integer_or_float, any_type, any_type`` + +.. sq:function:: function fill_inverse_poly(arg0, arg1, arg2, arg3) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: array + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: any_type + + :param arg3: autodoc from typemask/paramscheck + :type arg3: any_type + + ``nparamscheck:5`` + + ``typecheck mask: userdata, array, integer_or_float, any_type, any_type`` + +.. sq:function:: function ellipse(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer_or_float + + :param arg4: autodoc from typemask/paramscheck + :type arg4: integer_or_float + + :param arg5: autodoc from typemask/paramscheck + :type arg5: any_type + + :param arg6: autodoc from typemask/paramscheck + :type arg6: any_type + + :param arg7: autodoc from typemask/paramscheck + :type arg7: any_type + + ``nparamscheck:9`` + + ``typecheck mask: userdata, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type, any_type, any_type`` + +.. sq:function:: function sector(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer_or_float + + :param arg4: autodoc from typemask/paramscheck + :type arg4: integer_or_float + + :param arg5: autodoc from typemask/paramscheck + :type arg5: integer_or_float + + :param arg6: autodoc from typemask/paramscheck + :type arg6: integer_or_float + + :param arg7: autodoc from typemask/paramscheck + :type arg7: any_type + + :param arg8: autodoc from typemask/paramscheck + :type arg8: any_type + + :param arg9: autodoc from typemask/paramscheck + :type arg9: any_type + + ``nparamscheck:11`` + + ``typecheck mask: userdata, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type, any_type, any_type`` + +.. sq:function:: function rect(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: integer_or_float + + :param arg1: autodoc from typemask/paramscheck + :type arg1: integer_or_float + + :param arg2: autodoc from typemask/paramscheck + :type arg2: integer_or_float + + :param arg3: autodoc from typemask/paramscheck + :type arg3: integer_or_float + + :param arg4: autodoc from typemask/paramscheck + :type arg4: integer_or_float + + :param arg5: autodoc from typemask/paramscheck + :type arg5: any_type + + :param arg6: autodoc from typemask/paramscheck + :type arg6: any_type + + :param arg7: autodoc from typemask/paramscheck + :type arg7: any_type + + ``nparamscheck:9`` + + ``typecheck mask: userdata, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type, any_type, any_type`` + +/; +} + +} // namespace darg + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sound.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sound.rst.txt new file mode 100644 index 000000000..995529d23 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sound.rst.txt @@ -0,0 +1,312 @@ +.. autogenerated + +***** +sound +***** + +module 'sound' + + + +*Source file: prog/gameLibs/soundSystem/quirrel/soundSystemSq.cpp* + +Usage:: + + let { INVALID_SOUND_HANDLE, SOUND_STREAM_ERROR, SOUND_STREAM_CLOSED, SOUND_STREAM_OPENED, SOUND_STREAM_CONNECTING, SOUND_STREAM_BUFFERING, SOUND_STREAM_STOPPED, SOUND_STREAM_PAUSED, SOUND_STREAM_PLAYING, sound_debug_trace, sound_play_one_shot_3d, sound_play_one_shot, sound_release_all_instances, sound_play, sound_set_volume, sound_init_event, sound_release_event, sound_set_3d_attr, sound_set_var, sound_get_length, sound_set_timeline_pos, sound_get_timeline_pos, sound_start, sound_keyoff, sound_abandon, sound_is_playing, sound_init_stream, sound_open_stream, sound_close_stream, sound_set_stream_pos, sound_release_stream, sound_get_stream_state, sound_get_stream_state_name, sound_get_output_devices, sound_get_record_devices, sound_set_output_device, sound_set_callbacks } = require("sound") + +or:: + + from "sound" import * + +.. code-block:: sq + + //'sound' exports: + { + value INVALID_SOUND_HANDLE + value SOUND_STREAM_ERROR + value SOUND_STREAM_CLOSED + value SOUND_STREAM_OPENED + value SOUND_STREAM_CONNECTING + value SOUND_STREAM_BUFFERING + value SOUND_STREAM_STOPPED + value SOUND_STREAM_PAUSED + value SOUND_STREAM_PLAYING + function sound_debug_trace(text): string -> null + function sound_play_one_shot_3d(name, &pos): string, integer -> null + function sound_play_one_shot(name): string -> null + function sound_release_all_instances(name): string -> null + function sound_play(arg0, ...): string, any_type -> _undocumented_ + function sound_set_volume(snd, volume): string, float -> null + function sound_init_event(name, path): string, string -> sound_handle_t + function sound_release_event(event_handle): sndsys::sound_handle_t -> null + function sound_set_3d_attr(event_handle, &pos): sndsys::sound_handle_t, integer -> null + function sound_set_var(event_handle, var_name, value): sndsys::sound_handle_t, string, float -> null + function sound_get_length(name): string -> integer + function sound_set_timeline_pos(event_handle, position): sndsys::sound_handle_t, integer -> null + function sound_get_timeline_pos(event_handle): sndsys::sound_handle_t -> integer + function sound_start(event_handle): sndsys::sound_handle_t -> null + function sound_keyoff(event_handle): sndsys::sound_handle_t -> bool + function sound_abandon(event_handle, delay): sndsys::sound_handle_t, float -> null + function sound_is_playing(event_handle): sndsys::sound_handle_t -> bool + function sound_init_stream(url, &min_max_distance): string, integer -> sound_handle_t + function sound_open_stream(stream_handle): sndsys::sound_handle_t -> null + function sound_close_stream(stream_handle): sndsys::sound_handle_t -> null + function sound_set_stream_pos(stream_handle, &pos): sndsys::sound_handle_t, integer -> null + function sound_release_stream(stream_handle): sndsys::sound_handle_t -> null + function sound_get_stream_state(stream_handle): sndsys::sound_handle_t -> StreamState + function sound_get_stream_state_name() + function sound_get_output_devices() + function sound_get_record_devices() + function sound_set_output_device(dev_id): integer -> null + function sound_set_callbacks(callbacks_): sqObject -> null + } + + +.. sq:attribute:: INVALID_SOUND_HANDLE + +.. sq:attribute:: SOUND_STREAM_ERROR + +.. sq:attribute:: SOUND_STREAM_CLOSED + +.. sq:attribute:: SOUND_STREAM_OPENED + +.. sq:attribute:: SOUND_STREAM_CONNECTING + +.. sq:attribute:: SOUND_STREAM_BUFFERING + +.. sq:attribute:: SOUND_STREAM_STOPPED + +.. sq:attribute:: SOUND_STREAM_PAUSED + +.. sq:attribute:: SOUND_STREAM_PLAYING + +.. sq:function:: function sound_debug_trace(text) + + :param text: + :type text: string + + :return: null + +.. sq:function:: function sound_play_one_shot_3d(name, &pos) + + :param name: + :type name: string + + :param &pos: + :type &pos: integer + + :return: null + +.. sq:function:: function sound_play_one_shot(name) + + :param name: + :type name: string + + :return: null + +.. sq:function:: function sound_release_all_instances(name) + + :param name: + :type name: string + + :return: null + +.. sq:function:: function sound_play(arg0, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: function sound_set_volume(snd, volume) + + :param snd: + :type snd: string + + :param volume: + :type volume: float + + :return: null + +.. sq:function:: function sound_init_event(name, path) + + :param name: + :type name: string + + :param path: + :type path: string + + :return: sound_handle_t + +.. sq:function:: function sound_release_event(event_handle) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :return: null + +.. sq:function:: function sound_set_3d_attr(event_handle, &pos) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :param &pos: + :type &pos: integer + + :return: null + +.. sq:function:: function sound_set_var(event_handle, var_name, value) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :param var_name: + :type var_name: string + + :param value: + :type value: float + + :return: null + +.. sq:function:: function sound_get_length(name) + + :param name: + :type name: string + + :return: integer + +.. sq:function:: function sound_set_timeline_pos(event_handle, position) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :param position: + :type position: integer + + :return: null + +.. sq:function:: function sound_get_timeline_pos(event_handle) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :return: integer + +.. sq:function:: function sound_start(event_handle) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :return: null + +.. sq:function:: function sound_keyoff(event_handle) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :return: bool + +.. sq:function:: function sound_abandon(event_handle, delay) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :param delay: + :type delay: float + + :return: null + +.. sq:function:: function sound_is_playing(event_handle) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :return: bool + +.. sq:function:: function sound_init_stream(url, &min_max_distance) + + :param url: + :type url: string + + :param &min_max_distance: + :type &min_max_distance: integer + + :return: sound_handle_t + +.. sq:function:: function sound_open_stream(stream_handle) + + :param stream_handle: + :type stream_handle: sndsys::sound_handle_t + + :return: null + +.. sq:function:: function sound_close_stream(stream_handle) + + :param stream_handle: + :type stream_handle: sndsys::sound_handle_t + + :return: null + +.. sq:function:: function sound_set_stream_pos(stream_handle, &pos) + + :param stream_handle: + :type stream_handle: sndsys::sound_handle_t + + :param &pos: + :type &pos: integer + + :return: null + +.. sq:function:: function sound_release_stream(stream_handle) + + :param stream_handle: + :type stream_handle: sndsys::sound_handle_t + + :return: null + +.. sq:function:: function sound_get_stream_state(stream_handle) + + :param stream_handle: + :type stream_handle: sndsys::sound_handle_t + + :return: StreamState + +.. sq:function:: function sound_get_stream_state_name() + +.. sq:function:: function sound_get_output_devices() + + ``nparamscheck:1`` + + ``typecheck mask: any_type`` + +.. sq:function:: function sound_get_record_devices() + + ``nparamscheck:1`` + + ``typecheck mask: any_type`` + +.. sq:function:: function sound_set_output_device(dev_id) + + :param dev_id: + :type dev_id: integer + + :return: null + +.. sq:function:: function sound_set_callbacks(callbacks_) + + :param callbacks_: + :type callbacks_: sqObject + + :return: null + +/; + + return soundTbl; +} + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/statsd.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/statsd.rst.txt new file mode 100644 index 000000000..d42a24bd6 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/statsd.rst.txt @@ -0,0 +1,119 @@ +.. autogenerated + +****** +statsd +****** + +module 'statsd' + + + +*Source file: prog/gameLibs/quirrel/sqStatsd/sqStatsd.cpp* + +Usage:: + + let { send_counter, send_gauge, send_gauge_dec, send_gauge_inc, send_profile, send_histogram } = require("statsd") + +or:: + + from "statsd" import * + +.. code-block:: sq + + //'statsd' exports: + { + function send_counter(metric_name, value, tags = {}): string, integer, table -> _undocumented_ + function send_gauge(metric_name, value, tags = {}): string, integer, table -> _undocumented_ + function send_gauge_dec(metric_name, value, tags = {}): string, integer, table -> _undocumented_ + function send_gauge_inc(metric_name, value, tags = {}): string, float, table -> _undocumented_ + function send_profile(metric_name, value, tags = {}): string, integer, table -> _undocumented_ + function send_histogram(metric_name, value, tags = {}): string, integer, table -> _undocumented_ + } + + + + +.. sq:function:: function send_counter(metric_name, value, tags = {}) + + :param metric_name: + :type metric_name: string + + :param value: + :type value: integer + + :param tags: tags for metrics + :type tags: table + + + + +.. sq:function:: function send_gauge(metric_name, value, tags = {}) + + :param metric_name: + :type metric_name: string + + :param value: + :type value: integer + + :param tags: tags for metrics + :type tags: table + + + + +.. sq:function:: function send_gauge_dec(metric_name, value, tags = {}) + + :param metric_name: + :type metric_name: string + + :param value: + :type value: integer + + :param tags: tags for metrics + :type tags: table + + + + +.. sq:function:: function send_gauge_inc(metric_name, value, tags = {}) + + :param metric_name: + :type metric_name: string + + :param value: + :type value: float + + :param tags: tags for metrics + :type tags: table + + + + +.. sq:function:: function send_profile(metric_name, value, tags = {}) + + :param metric_name: + :type metric_name: string + + :param value: + :type value: integer + + :param tags: tags for metrics + :type tags: table + + + + +.. sq:function:: function send_histogram(metric_name, value, tags = {}) + + :param metric_name: + :type metric_name: string + + :param value: + :type value: integer + + :param tags: tags for metrics + :type tags: table + + + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sysinfo.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sysinfo.rst.txt new file mode 100644 index 000000000..c998bea37 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sysinfo.rst.txt @@ -0,0 +1,97 @@ +.. autogenerated + +******* +sysinfo +******* + +module 'sysinfo' + + + +*Source file: prog/gameLibs/quirrel/sqSysInfo/sqSysInfo.cpp* + +Usage:: + + let { get_user_system_info, inline_raytracing_available, get_battery, is_charging, get_thermal_state, get_battery_capacity_mah, get_network_connection_type, TS_NORMAL, TS_LIGHT, TS_MODERATE, TS_SEVERE, TS_CRITICAL, TS_EMERGENCY, TS_SHUTDOWN } = require("sysinfo") + +or:: + + from "sysinfo" import * + +.. code-block:: sq + + //'sysinfo' exports: + { + function get_user_system_info(): -> DataBlock + function inline_raytracing_available(): -> bool + function get_battery(): -> float + function is_charging(): -> bool + function get_thermal_state(): -> int + function get_battery_capacity_mah(): -> int + function get_network_connection_type(): -> int + value TS_NORMAL + value TS_LIGHT + value TS_MODERATE + value TS_SEVERE + value TS_CRITICAL + value TS_EMERGENCY + value TS_SHUTDOWN + } + + +.. sq:function:: function get_user_system_info() + + :return: datablock of user system info + :rtype: DataBlock + +.. sq:function:: function inline_raytracing_available() + + :return: returns true if inline raytracing is available on device, otherwise false + :rtype: bool + +.. sq:function:: function get_battery() + + :return: return battery level from 0.0 to 1.0. When battery level unknown return -1.0 + :rtype: float + +.. sq:function:: function is_charging() + + :return: return "is battery charging" + :rtype: bool + +.. sq:function:: function get_thermal_state() + + :return: return capacity of battery or -1 if it is unavailable + :rtype: int + +.. sq:function:: function get_battery_capacity_mah() + + :return: -1 -- Unknown, 0 -- Not connected, 1 -- Cellular, 2 -- Wi-Fi + :rtype: int + +.. sq:function:: function get_network_connection_type() + + :return: return thermal state. from TS_NORMAL to TS_SHUTDOWN + :rtype: int + +.. sq:attribute:: TS_NORMAL + +.. sq:attribute:: TS_LIGHT + +.. sq:attribute:: TS_MODERATE + +.. sq:attribute:: TS_SEVERE + +.. sq:attribute:: TS_CRITICAL + +.. sq:attribute:: TS_EMERGENCY + +.. sq:attribute:: TS_SHUTDOWN + +/; + + module_mgr->addNativeModule("sysinfo", nsTbl); +} +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/utf8.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/utf8.rst.txt new file mode 100644 index 000000000..5f4fbbf6a --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/utf8.rst.txt @@ -0,0 +1,45 @@ +.. autogenerated + +**** +utf8 +**** + +module 'utf8' + + + +*Source file: prog/gameLibs/quirrel/bindQuirrelEx/bindSqrat.cpp* + +Usage:: + + let utf8 = require("utf8") + +or:: + + from "utf8" import * + +.. code-block:: sq + + //'utf8' exports: + class utf8 + + +---------- +class utf8 +---------- + + utf8 // + .Ctor() + + .Func("_tostring", &Utf8::str) + .Func("str", &Utf8::str) + .Func("charCount", &Utf8::charCount) + .Func("strtr", &Utf8::strtr) + .SquirrelFunc("slice", utf8_slice, -2, nullptr) + .SquirrelFunc("indexof", utf8_indexof, -2, nullptr) +/* + + + + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/win.registry.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/win.registry.rst.txt new file mode 100644 index 000000000..64fbd6d05 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/win.registry.rst.txt @@ -0,0 +1,154 @@ +.. autogenerated + +************ +win.registry +************ + +module 'win.registry' + + + +*Source file: prog/gameLibs/quirrel/win_registry/win_registry.cpp* + +Usage:: + + let { regKeyExists, regValueExists, getRegString, getRegInt, deleteRegKey, deleteRegValue, setRegString, setRegInt, HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS } = require("win.registry") + +or:: + + from "win.registry" import * + +.. code-block:: sq + + //'win.registry' exports: + { + function regKeyExists(root, path): integer, string -> bool + function regValueExists(root, path, name): integer, string, string -> bool + function getRegString() + function getRegInt(root, path, name, def): integer, string, string, integer -> integer + function deleteRegKey(root, path): integer, string -> bool + function deleteRegValue(root, path, name): integer, string, string -> bool + function setRegString(root, path, name, val): integer, string, string, string -> bool + function setRegInt(root, path, name, val): integer, string, string, integer -> bool + value HKEY_CLASSES_ROOT + value HKEY_CURRENT_CONFIG + value HKEY_CURRENT_USER + value HKEY_LOCAL_MACHINE + value HKEY_USERS + } + + +.. sq:function:: function regKeyExists(root, path) + + :param root: + :type root: integer + + :param path: + :type path: string + + :return: bool + +.. sq:function:: function regValueExists(root, path, name) + + :param root: + :type root: integer + + :param path: + :type path: string + + :param name: + :type name: string + + :return: bool + +.. sq:function:: function getRegString() + +.. sq:function:: function getRegInt(root, path, name, def) + + :param root: + :type root: integer + + :param path: + :type path: string + + :param name: + :type name: string + + :param def: + :type def: integer + + :return: integer + +.. sq:function:: function deleteRegKey(root, path) + + :param root: + :type root: integer + + :param path: + :type path: string + + :return: bool + +.. sq:function:: function deleteRegValue(root, path, name) + + :param root: + :type root: integer + + :param path: + :type path: string + + :param name: + :type name: string + + :return: bool + +.. sq:function:: function setRegString(root, path, name, val) + + :param root: + :type root: integer + + :param path: + :type path: string + + :param name: + :type name: string + + :param val: + :type val: string + + :return: bool + +.. sq:function:: function setRegInt(root, path, name, val) + + :param root: + :type root: integer + + :param path: + :type path: string + + :param name: + :type name: string + + :param val: + :type val: integer + + :return: bool + +.. sq:attribute:: HKEY_CLASSES_ROOT + +.. sq:attribute:: HKEY_CURRENT_CONFIG + +.. sq:attribute:: HKEY_CURRENT_USER + +.. sq:attribute:: HKEY_LOCAL_MACHINE + +.. sq:attribute:: HKEY_USERS + +/; + + module_mgr->addNativeModule("win.registry", win_registry); +} + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/yupfile_parse.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/yupfile_parse.rst.txt new file mode 100644 index 000000000..d8f5c0a31 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/yupfile_parse.rst.txt @@ -0,0 +1,60 @@ +.. autogenerated + +************* +yupfile_parse +************* + +module 'yupfile_parse' + + + +*Source file: prog/gameLibs/quirrel/yupfile_parse/yupfile_parse.cpp* + +Usage:: + + let { getStr, getInt } = require("yupfile_parse") + +or:: + + from "yupfile_parse" import * + +.. code-block:: sq + + //'yupfile_parse' exports: + { + function getStr(arg0, arg1): string, string -> _undocumented_ + function getInt(arg0, arg1): string, string -> _undocumented_ + } + + +.. sq:function:: function getStr(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + ``nparamscheck:3`` + + ``typecheck mask: any_type, string, string`` + +.. sq:function:: function getInt(arg0, arg1) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param arg1: autodoc from typemask/paramscheck + :type arg1: string + + ``nparamscheck:3`` + + ``typecheck mask: any_type, string, string`` + +/; + module_mgr->addNativeModule("yupfile_parse", exports); +} + +} // namespace bindquirrel + + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/soundSystem/index.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/soundSystem/index.rst.txt new file mode 100644 index 000000000..e438ce450 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/soundSystem/index.rst.txt @@ -0,0 +1,15 @@ + +soundSystem +=========== + +Docs for soundSystem Quirrel Modules. DaNetGameLibs can be used in any daNetGame based project + + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + * + diff --git a/_sources/api-references/quirrel-modules/quirrel-modules/soundSystem/sound.rst.txt b/_sources/api-references/quirrel-modules/quirrel-modules/soundSystem/sound.rst.txt new file mode 100644 index 000000000..995529d23 --- /dev/null +++ b/_sources/api-references/quirrel-modules/quirrel-modules/soundSystem/sound.rst.txt @@ -0,0 +1,312 @@ +.. autogenerated + +***** +sound +***** + +module 'sound' + + + +*Source file: prog/gameLibs/soundSystem/quirrel/soundSystemSq.cpp* + +Usage:: + + let { INVALID_SOUND_HANDLE, SOUND_STREAM_ERROR, SOUND_STREAM_CLOSED, SOUND_STREAM_OPENED, SOUND_STREAM_CONNECTING, SOUND_STREAM_BUFFERING, SOUND_STREAM_STOPPED, SOUND_STREAM_PAUSED, SOUND_STREAM_PLAYING, sound_debug_trace, sound_play_one_shot_3d, sound_play_one_shot, sound_release_all_instances, sound_play, sound_set_volume, sound_init_event, sound_release_event, sound_set_3d_attr, sound_set_var, sound_get_length, sound_set_timeline_pos, sound_get_timeline_pos, sound_start, sound_keyoff, sound_abandon, sound_is_playing, sound_init_stream, sound_open_stream, sound_close_stream, sound_set_stream_pos, sound_release_stream, sound_get_stream_state, sound_get_stream_state_name, sound_get_output_devices, sound_get_record_devices, sound_set_output_device, sound_set_callbacks } = require("sound") + +or:: + + from "sound" import * + +.. code-block:: sq + + //'sound' exports: + { + value INVALID_SOUND_HANDLE + value SOUND_STREAM_ERROR + value SOUND_STREAM_CLOSED + value SOUND_STREAM_OPENED + value SOUND_STREAM_CONNECTING + value SOUND_STREAM_BUFFERING + value SOUND_STREAM_STOPPED + value SOUND_STREAM_PAUSED + value SOUND_STREAM_PLAYING + function sound_debug_trace(text): string -> null + function sound_play_one_shot_3d(name, &pos): string, integer -> null + function sound_play_one_shot(name): string -> null + function sound_release_all_instances(name): string -> null + function sound_play(arg0, ...): string, any_type -> _undocumented_ + function sound_set_volume(snd, volume): string, float -> null + function sound_init_event(name, path): string, string -> sound_handle_t + function sound_release_event(event_handle): sndsys::sound_handle_t -> null + function sound_set_3d_attr(event_handle, &pos): sndsys::sound_handle_t, integer -> null + function sound_set_var(event_handle, var_name, value): sndsys::sound_handle_t, string, float -> null + function sound_get_length(name): string -> integer + function sound_set_timeline_pos(event_handle, position): sndsys::sound_handle_t, integer -> null + function sound_get_timeline_pos(event_handle): sndsys::sound_handle_t -> integer + function sound_start(event_handle): sndsys::sound_handle_t -> null + function sound_keyoff(event_handle): sndsys::sound_handle_t -> bool + function sound_abandon(event_handle, delay): sndsys::sound_handle_t, float -> null + function sound_is_playing(event_handle): sndsys::sound_handle_t -> bool + function sound_init_stream(url, &min_max_distance): string, integer -> sound_handle_t + function sound_open_stream(stream_handle): sndsys::sound_handle_t -> null + function sound_close_stream(stream_handle): sndsys::sound_handle_t -> null + function sound_set_stream_pos(stream_handle, &pos): sndsys::sound_handle_t, integer -> null + function sound_release_stream(stream_handle): sndsys::sound_handle_t -> null + function sound_get_stream_state(stream_handle): sndsys::sound_handle_t -> StreamState + function sound_get_stream_state_name() + function sound_get_output_devices() + function sound_get_record_devices() + function sound_set_output_device(dev_id): integer -> null + function sound_set_callbacks(callbacks_): sqObject -> null + } + + +.. sq:attribute:: INVALID_SOUND_HANDLE + +.. sq:attribute:: SOUND_STREAM_ERROR + +.. sq:attribute:: SOUND_STREAM_CLOSED + +.. sq:attribute:: SOUND_STREAM_OPENED + +.. sq:attribute:: SOUND_STREAM_CONNECTING + +.. sq:attribute:: SOUND_STREAM_BUFFERING + +.. sq:attribute:: SOUND_STREAM_STOPPED + +.. sq:attribute:: SOUND_STREAM_PAUSED + +.. sq:attribute:: SOUND_STREAM_PLAYING + +.. sq:function:: function sound_debug_trace(text) + + :param text: + :type text: string + + :return: null + +.. sq:function:: function sound_play_one_shot_3d(name, &pos) + + :param name: + :type name: string + + :param &pos: + :type &pos: integer + + :return: null + +.. sq:function:: function sound_play_one_shot(name) + + :param name: + :type name: string + + :return: null + +.. sq:function:: function sound_release_all_instances(name) + + :param name: + :type name: string + + :return: null + +.. sq:function:: function sound_play(arg0, ...) + + :param arg0: autodoc from typemask/paramscheck + :type arg0: string + + :param ...: this function accepts unlimited arguments + :type ...: any_type + + ``nparamscheck:-2`` + + ``typecheck mask: any_type, string`` + +.. sq:function:: function sound_set_volume(snd, volume) + + :param snd: + :type snd: string + + :param volume: + :type volume: float + + :return: null + +.. sq:function:: function sound_init_event(name, path) + + :param name: + :type name: string + + :param path: + :type path: string + + :return: sound_handle_t + +.. sq:function:: function sound_release_event(event_handle) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :return: null + +.. sq:function:: function sound_set_3d_attr(event_handle, &pos) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :param &pos: + :type &pos: integer + + :return: null + +.. sq:function:: function sound_set_var(event_handle, var_name, value) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :param var_name: + :type var_name: string + + :param value: + :type value: float + + :return: null + +.. sq:function:: function sound_get_length(name) + + :param name: + :type name: string + + :return: integer + +.. sq:function:: function sound_set_timeline_pos(event_handle, position) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :param position: + :type position: integer + + :return: null + +.. sq:function:: function sound_get_timeline_pos(event_handle) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :return: integer + +.. sq:function:: function sound_start(event_handle) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :return: null + +.. sq:function:: function sound_keyoff(event_handle) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :return: bool + +.. sq:function:: function sound_abandon(event_handle, delay) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :param delay: + :type delay: float + + :return: null + +.. sq:function:: function sound_is_playing(event_handle) + + :param event_handle: + :type event_handle: sndsys::sound_handle_t + + :return: bool + +.. sq:function:: function sound_init_stream(url, &min_max_distance) + + :param url: + :type url: string + + :param &min_max_distance: + :type &min_max_distance: integer + + :return: sound_handle_t + +.. sq:function:: function sound_open_stream(stream_handle) + + :param stream_handle: + :type stream_handle: sndsys::sound_handle_t + + :return: null + +.. sq:function:: function sound_close_stream(stream_handle) + + :param stream_handle: + :type stream_handle: sndsys::sound_handle_t + + :return: null + +.. sq:function:: function sound_set_stream_pos(stream_handle, &pos) + + :param stream_handle: + :type stream_handle: sndsys::sound_handle_t + + :param &pos: + :type &pos: integer + + :return: null + +.. sq:function:: function sound_release_stream(stream_handle) + + :param stream_handle: + :type stream_handle: sndsys::sound_handle_t + + :return: null + +.. sq:function:: function sound_get_stream_state(stream_handle) + + :param stream_handle: + :type stream_handle: sndsys::sound_handle_t + + :return: StreamState + +.. sq:function:: function sound_get_stream_state_name() + +.. sq:function:: function sound_get_output_devices() + + ``nparamscheck:1`` + + ``typecheck mask: any_type`` + +.. sq:function:: function sound_get_record_devices() + + ``nparamscheck:1`` + + ``typecheck mask: any_type`` + +.. sq:function:: function sound_set_output_device(dev_id) + + :param dev_id: + :type dev_id: integer + + :return: null + +.. sq:function:: function sound_set_callbacks(callbacks_) + + :param callbacks_: + :type callbacks_: sqObject + + :return: null + +/; + + return soundTbl; +} + + diff --git a/_sources/assets/about-assets/about_assets.md.txt b/_sources/assets/about-assets/about_assets.md.txt new file mode 100644 index 000000000..4e87d5b0e --- /dev/null +++ b/_sources/assets/about-assets/about_assets.md.txt @@ -0,0 +1,259 @@ +# Introduction to Assets + +## Overview + +Assets refer to all types of resources used in the *Dagor Engine Tools*. + +You can find a list of supported asset types in your project in the +[`application.blk`](../all-about-blk/application_blk.md) file. This file is a +key resource for configuring how the tools interact with your project. + +```text +assets{ + types{} +} +``` + +Within `application.blk` file, the base path to the asset directory is specified +as `base:t=`. + +Assets are classified into three main categories: + +1. **Editor-only assets**: These are resources used exclusively by the editor, + such as for exporting levels. Examples include materials, prefabs, spline + classes, and others. + +2. **Game-exported assets**: These resources are exported into the game + (indicated by the `export{}` block in `application.blk`). They are stored in + `.grp` files within the game. Typically, the level editor uses the exported + game resources for performance reasons. + +3. **Textures**: Although these are usually exported into the game, they are + stored in `.dxp.bin` files. The editor uses a texture cache rather than the + exported textures, allowing for real-time texture modifications. + +## Asset Formats and Management + +Assets for both the game and tools are stored in `.blk` files, which come in two +formats: + +- **Modern format**: `..blk` (e.g., + `my_house.rendinst.blk`). +- **Legacy format**: `.blk`, where the asset type must be specified + within the `.blk` file. + +Each asset's `.blk` file contains all the parameters required by the exporter +for that specific resource. Each type of resource has its own build tool plugin +and dedicated code in the game. + +In some cases, the description within the `.blk` file is minimal. For example, a +texture asset might only require the texture name (if it's in `.dds` format). In +other cases, like effects, the entire asset is defined within the `.blk` file, +and the [*Asset +Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) acts as +its editor. + +Most assets do not have dedicated editing tools. The primary method for creating +these assets is through manual editing and hot-reloading using the tools. + +However, to avoid manually creating `.blk` files for every simple asset type +(e.g., textures, skeletons, dynamic models), *Dagor* supports a highly flexible +system for creating virtual assets - through a +[`.folder.blk`](../all-about-blk/folder_blk.md) file placed within the asset +directory. + +In practice, simply placing textures and models into the appropriate directories +is sufficient in 99.99% of cases. Numerous rules, such as LOD (Level of Detail) +switching distances and texture conversion rules, will be generated +automatically. + +```{note} +All resource names must be **unique**. While the system generally functions if +resources are unique within their type, it is advisable to ensure globally +unique names. + +``` + +## Asset Types and Their Rules + +### Texture Assets + +A brief overview of texture asset parameters (all are optional, and for standard +diffuse `.dds` textures, nothing may need to be specified. For `.tga` files, two +parameters are typically required: `convert:b=yes`, `fmt:="DXT1|DXT5"`): + +```text +contents{ + convert:b=yes; fmt:t="DXT1|DXT5" + mipmapType:t=mipmapGenerate + mipFilter:t="filterKaiser"; mipFilterAlpha:r=40; mipFilterStretch:r=2 + addrU:t="wrap"; addrV:t="wrap"; + swizzleARGB:t="RAG0" + hqMip:i=3; mqMip:i=3; lqMip:i=4 + PC{ + hqMip:i=2; mqMip:i=2; lqMip:i=3; + } + gamma:r=1 + colorPadding:b=no + // alphaCoverageThresMip9:i=200 + // alphaCoverage:b=no + // rtMipGen:b=no + // aniFunc:t="abs"; + // anisotropy:i=8 + addrU:t="wrap"; addrV:t="wrap"; +} +``` + +- `convert`: Converts the texture (mandatory for all `.tga` or `.psd` textures). +- `fmt:t`: Specifies the format to convert to (options include `DXT1`, `DXT5`, + `ARGB`, `L8`, `A8L8`, `L16`). +- `mipmapType:t`: Method for generating mipmaps (`mipmapGenerate`, + `mipmapUseExisting`, `mipmapNone`). +- `mipFilter`: Specifies the filter used to generate mipmaps (`filterKaiser`, + `filterBox`, `filterCubic`). +- `hqMip`, `mqMip`, `lqMip`: Specifies which mip level to use at high, medium, + and low quality settings. +- `swizzleARGB`: Specifies how to swizzle the texture channels. Typically not + needed. +- `gamma`: Gamma correction value (`1` for normal maps and masks, default is + `2.2`). +- `addrU`, `addrV`: Texture addressing mode (`wrap`, `clamp`, `border`). + +### Dynamic Models and Rendering Instances + +```text +lod{ + range:r=70; fname:t="$1.lod00.dag"; +} +lod{ + range:r=200; fname:t="$1.lod01.dag"; +} +lod{ + range:r=550; fname:t="$1.lod02.dag"; +} +lod{ + range:r=4000; fname:t="$1.lod03.dag"; +} +ref_skeleton:t="$1_skeleton" +texref_prefix:t="low_" +all_animated:b=yes +``` + +- `lod`: LOD parameters. + - `range:r`: LOD distance. + - `fname:t`: Optional filename, defaults to `$1.lod.dag`. +- `texref_prefix:t`: Prefix added to all texture references in the model. +- `ref_skeleton:t`: Reference skeleton for dynamic models, necessary for correct + preview in [*Asset + Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md). +- `all_animated:b`: Indicates that all objects in the model should be + considered animated, i.e., having their own matrices. + +### Composite Dynamic Models + +Composite dynamic models are structures composed of multiple dynamic models that +share a common skeleton. + +Below are the rules for creating a +[`.skeleton.blk`](../all-about-blk/skeleton_blk.md) file for a composite model, +using a tank with several turret and gun options as an example: + +```text +name:t="tank_body.lod00.dag" +attachSubSkel{ + attach_to:t="bone_turret" + skel_file:t="turret_a.lod00.dag" + skel_node:t="bone_turret" + attachSubSkel{ + attach_to:t="bone_gun_a" + skel_file:t="gun_a.lod00.dag" + skel_node:t="bone_gun_a" + } + attachSubSkel{ + attach_to:t="bone_gun_b" + skel_file:t="gun_b.lod00.dag" + skel_node:t="bone_gun_b" + add_prefix:t="G1:" + } + attachSubSkel{ + attach_to:t="bone_gun_c" + skel_file:t="gun_b.lod00.dag" + skel_node:t="bone_gun_b" + add_prefix:t="G2:" + } +} +attachSubSkel{ + attach_to:t="bone_turret" + skel_file:t="turret_b.lod00.dag" + skel_node:t="bone_turret" + add_prefix:t="T1:" +} +``` + +- `name:t`: Parent model name. +- `attachSubSkel{}`: Block for adding a dynamic model. + - `attach_to:t`: Node in the parent skeleton to which the additional dynamic + model is linked. + - `skel_file:t`: Child model file name. + - `skel_node:t`: Node in the child model's skeleton to link with the parent. + - `add_prefix:t`: Prefix for all child model nodes. + +In the `.skeleton.blk` file above, the skeleton generated from the `tank_body` +model is extended with the turrets `turret_a` and `turret_b`, which are attached +to the `bone_turret`. On `turret_a`, two unique guns, `gun_a` and `gun_b`, are +attached to `bone_gun_a`, `bone_gun_b`, and `bone_gun_c`. However, `gun_b` is +attached twice to different bones. + +Since we are creating a single shared skeleton, it is critical to avoid +duplicate node names. To address this, a unique prefix is added to the nodes of +each duplicate. The two copies of `bone_gun_b`, forming different branches in +the hierarchy, received prefixes `G1` and `G2`. Similarly, the nodes in +`turret_b` were prefixed with `T1`. + +```{important} +- When specifying the attachment node, do not include automatically added +prefixes. +- If a child model is attached to a node with the same name as one of its +bones, the previous node is removed from the hierarchy. There won't be a +duplicate – don't worry. +``` + +While theoretically, you can create a very deep hierarchy of dependencies, +simpler structures are easier to manage. Always evaluate the necessity of adding +new levels before doing that. + +A multi-level hierarchy might look like this: + +```text +name:t="papa.lod00.dag" +attachSubSkel{ + attach_to:t="bone_papa" + skel_file:t="child.lod00.dag" + skel_node:t="bone_child" + add_prefix:t="layer01:" + attachSubSkel{ + attach_to:t="bone_child" + skel_file:t="child.lod00.dag" + skel_node:t="bone_child" + add_prefix:t="layer02:" + attachSubSkel{ + attach_to:t="bone_child" + skel_file:t="child.lod00.dag" + skel_node:t="bone_child" + add_prefix:t="layer03:" + attachSubSkel{ + attach_to:t="bone_child" + skel_file:t="child.lod00.dag" + skel_node:t="bone_child" + add_prefix:t="layer04:" + } + } + } +} +``` + +This hierarchy demonstrates a parent model (`papa.lod00.dag`) with multiple +layers of child models attached, each with its own prefix to ensure uniqueness +and proper hierarchy management. + + diff --git a/_sources/assets/about-assets/how-to-test-assets-on-maps/how_to_test_assets_on_maps.md.txt b/_sources/assets/about-assets/how-to-test-assets-on-maps/how_to_test_assets_on_maps.md.txt new file mode 100644 index 000000000..001d75e02 --- /dev/null +++ b/_sources/assets/about-assets/how-to-test-assets-on-maps/how_to_test_assets_on_maps.md.txt @@ -0,0 +1,194 @@ +# How to Test Assets on Maps (Basic Workflow) + +This guide provides essential steps for testing assets on maps. Note that there +are differences between *War Thunder* and *daNetGame*-based projects. + +## Build Changes in Assets + +If you've made changes to an asset, open it in [*Asset +Viewer*](../../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) and +build the corresponding components: + +- **Material changes:** Build the asset group (grp) + + + +
+ +- **Collision changes:** Build the collision group (grp) + + + +
+ +- **Texture changes:** Build the texture bin + + + +
+ +- **Multiple changes or uncertainty:** Build the entire folder (this may take + longer depending on the number of assets and packs in the folder/subfolders) + + + +
+ +## Export the Map with the Asset + +1. **Launch [*daEditor*](../../../dagor-tools/daeditor/daeditor/daeditor.md)** + and open the map you want to modify. In the **Landscape** tab, place the + asset using the **Create entity** tool. + + + +
+ +2. **Export the map** via **Project ▸ Export to game (PC format)**. + + + +
+ +3. **Confirm all dialog boxes** and choose the place to export level. A + successful export will replace the current map file. + + + +
+ +## Launching the Level + +The method for launching the level varies by project. + +### daNetGame-based projects + +The following steps related to *daNetGame*-based projects are described using +the *Enlisted* project as an example. + +To see your map in the game, you should launch the scene that includes your map, +which is a `.blk` file. There are two main approaches: + +**Using the Launcher:** + +1. Run `/enlisted/game/z_enlisted_launcher.bat` +2. Select the correct mission from the dropdown (the one with your exported + map). Customize mode, graphics settings, etc., if needed. +3. Click **Play** to launch the game. + +**Manually:** + +1. Create a `.bat` file in the `/enlisted/game/` directory. +2. Open it with a text editor (e.g., *Notepad*, *Notepad++*, *VSCode*). +3. Add the following line: + + ``` + @start win64\\enlisted-dev.exe -scene:gamedata/scenes/.blk -config:disableMenu:b=yes + ``` + +4. Save and run the `.bat` file to launch your scene. + +While the launcher is the preferred method, manual execution is useful for +testing new scenes that haven't been added to the launcher yet. + +### Enlisted CDK + +1. Launch `/Enlisted/modsEditor.bat` +2. Select your scene. Choose the team, mode, and other settings using the + wrench icon. +3. Click **Load** or double-click the scene name to open it. + +### War Thunder + +In *War Thunder*, you will use the *Mission Editor*, which *daNetGame*-projects +do not have. You will have to create your mission using the following steps: + +1. **Select Vehicle Type** from the dropdown: + - **armada:** Aircraft + - **tankModels:** Tanks + - **ships:** Ships + (Others are non-playable.) + + Place the unit on the map using the **Create Unit** button, then click the + map to position it. + + + +
+ + ```{note} + Aircraft will appear in the air, while tanks and ships will be placed on + land. + ``` + +2. **Change Vehicle Properties:** If the wrong vehicle type is selected, modify + it in the **Properties** panel (press `P` after selecting the unit). + + + +
+ + + After that you will have to choose: + - Vehicle model + - Weapon type (you may set to `default`) + - Bullets (usually `HE` or `default`) + - Bullets count + + It can be done in the same unit's **Properties** panel: + + + +
+ +3. **Configure Mission Properties:** + + - Find your unit's army number (different parties - different armies in pvp) + in unit's **Properties** panel. + + + +
+ + - Assign the unit's army number to **Team A** in **Mission Settings** + panel (deselect unit and press `P` button). + + + +
+ + - Specify your unit in **wing** inset. + + + + + +
+ + In the same **Mission Settings** panel: + + - **name:** give the name to your mission; + - **type:** select **singleMission**; + - **level:** choose the location where the mission will start (otherwise, your vehicle + will spawn on default water location by default). + + + +
+ +4. **Save the Mission:** Save your mission in + `/develop/gameBase/gameData/missions`. + + + +
+ + ```{important} + Be sure to save after every change – there is no autosave. + ``` + +5. **Play the Mission:** Once ready, click the **Play** button. + + + + diff --git a/_sources/assets/about-assets/how-to-test-assets-on-maps/index.rst.txt b/_sources/assets/about-assets/how-to-test-assets-on-maps/index.rst.txt new file mode 100644 index 000000000..f3a62e5b1 --- /dev/null +++ b/_sources/assets/about-assets/how-to-test-assets-on-maps/index.rst.txt @@ -0,0 +1,13 @@ + +How to Test Assets on Maps +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + how_to_test_assets_on_maps.md + + + + diff --git a/_sources/assets/about-assets/index.rst.txt b/_sources/assets/about-assets/index.rst.txt new file mode 100644 index 000000000..9db81b42d --- /dev/null +++ b/_sources/assets/about-assets/index.rst.txt @@ -0,0 +1,16 @@ + +Assets +========================================= + +Asset types, formats, and configuration of resources. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + about_assets.md + how-to-test-assets-on-maps/index.rst + ladders/index.rst + occluder/index.rst + + diff --git a/_sources/assets/about-assets/ladders/climbable_ladders.md.txt b/_sources/assets/about-assets/ladders/climbable_ladders.md.txt new file mode 100644 index 000000000..9f2104993 --- /dev/null +++ b/_sources/assets/about-assets/ladders/climbable_ladders.md.txt @@ -0,0 +1,153 @@ +# Climbable Ladders + +## General Overview and Structure + +In *daNetGame*-projects, there is a technology for climbing vertical (or +near-vertical) ladders. + +Vertical ladders that are part of gameplay (which players can climb) are +actually composite objects. They consist of two components: + +1. Visual geometry (`*.dag`) +2. Game object (`*ladder.gameObj.blk`). + +```{note} +The name of the `.blk` file must follow the convention with the `ladder` suffix +and the `*.gameObj.blk` extension. +``` + +### Geometry Parameters + +The visual geometry has no special distinctive features – everything is standard +and straightforward. It’s simply a model of a ladder with a specific number of +steps (the number of steps is important as it will be used in the game object). + +```{important} +The only critical point to observe is that the steps must be spaced evenly. +Otherwise, the character's hands and feet may not correctly align with the steps +during climbing. +``` + +### Game Object Parameters + +The game object (gameObj) is a procedurally generated object (similar to +*wall_holes*, *indoor walls*, etc.). To create it, you need to generate a text +file (`*ladder.gameObj.blk`) with the description of the ladder: + +- `volumeType:t="box"` – the geometric type of the generated gameplay area, + similar to meshes, boxes, convex shapes in collisions. We specifically use the + `box` type. + +- `boxSz:r=0.5` – defines the distance from the center to any side of the box. + This value represents half the side of a cube, meaning the default value of + `0.5` generates a 1m cube. By default, it's set to `0.5`, and we do not change + this. It has minimal impact since the size of the box will later be defined by + the matrix in the composite object (as ladders are not cubic in shape). + +- `isLadder:b=yes` – specifies that this game object is a ladder. + +- `ladderStepsCount:i=14` – the number of steps (this is important as it affects + the character’s hand and foot placement on the actual ladder geometry). + +The actual size of the game object is determined in the composite object via its +matrix, which integrates the visual geometry with the game object. This allows +the game object to match the proportions required for the specific ladder. + +## Creating the Ladder Game Object + +### General Guidelines + +1. You do not necessarily need to create a new game object. You can reuse an + existing one by transforming it within the composite object to fit your + ladder. + + ```{note} + However, it’s crucial to remember that the game object contains a predefined + number of steps, which must not be altered. Changing it would break the + ladders where this object is already in use. If the step count does not suit + your needs, create a new object. + ``` + +2. Avoid modifying the default cube size (`boxSz:r=0.5`, i.e., 1m per side). If, + for any reason, you decide to change this value, you must ensure that the + size is adjusted accordingly when creating the composite object in *3ds Max* + (discussed below). Otherwise, the results in *3ds Max* and [*Asset + Viewer*](../../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) will + not match. + +3. It doesn't matter whether the ladders are standalone objects or part of a + building – each case is unique. If a ladder is used multiple times, it makes + more sense to have it as a separate object. If the ladder is unique to a + specific building, it can remain part of the building's geometry (consider + optimization, LODs, etc.). + + The technology remains the same – each ladder must have a game object added + to it via the composite object. + +4. It’s best to store `*ladder.gameObj.blk` alongside the visual geometry. + +5. Unless required for gameplay, avoid adding collision to every step in the + physics system. The physical collision does not interact with the climbing + animation – it only collides with the capsule. + +6. The game object should span *from the bottom step to the top step*. + Otherwise, there may be incorrect hand and foot positioning. + +An example using the `wood_ladder_a` model is shown here: + + + + + + +```{note} +As of July 2023, the system is set up so that *the character can only climb from +the X side of the game object*. Climbing from other sides may not work or may +behave incorrectly. + + + + --- + +``` + +### Methods for Creating the Game Object + +#### Method 1 + +1. In the *3ds Max* scene, create a cube with dimensions 1x1x1m, with its pivot + point at the center. If you’ve changed the size of `boxSz:r=0.5`, you need to + adjust the cube size accordingly. + +2. Scale the cube to match the dimensions of the ladder. + +3. Export the composite object (ladder + game object) using available tools + (such as [*dag2rires*](../../../dagor-tools/dag2rires/dag2rires.md)). + + + + --- + +#### Method 2 + +1. In [*daEditor*](../../../dagor-tools/daeditor/daeditor/daeditor.md), place + the pre-created `*ladder.gameObj.blk`. + +2. Scale it to match the ladder’s dimensions. + +3. Export the composite object (or the entire building) using the menu option + **Landscape** ▸ **Export as composite**. + + + + --- + + + + --- + +## Related Articles + +- [Infantry NavMesh Generation for Vertical Ladders](navmesh_gen_vert_ladders.md) + + diff --git a/_sources/assets/about-assets/ladders/index.rst.txt b/_sources/assets/about-assets/ladders/index.rst.txt new file mode 100644 index 000000000..c7e664c87 --- /dev/null +++ b/_sources/assets/about-assets/ladders/index.rst.txt @@ -0,0 +1,12 @@ + +Ladders +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + climbable_ladders.md + navmesh_gen_vert_ladders.md + + diff --git a/_sources/assets/about-assets/ladders/navmesh_gen_vert_ladders.md.txt b/_sources/assets/about-assets/ladders/navmesh_gen_vert_ladders.md.txt new file mode 100644 index 000000000..80eaaa0ac --- /dev/null +++ b/_sources/assets/about-assets/ladders/navmesh_gen_vert_ladders.md.txt @@ -0,0 +1,215 @@ +# Infantry NavMesh Generation for Vertical Ladders + +## Overview + +This article outlines the principles behind NavMesh generation for vertical +ladders and discusses common errors that prevent NavMesh from being generated +for ladders. + +```{warning} +Vertical ladders are often problematic for gameplay. Think carefully before +adding them to a level. However, if there is no alternative, please review this +article and consider the important nuances of designing ladders from the +perspective of AI navigation. +``` + +## How NavMesh Generation for Vertical Ladders Works + +The pathfinding for vertical ladders functions as follows. Each ladder has a +gameObj file like `ladder_template.gameObj.blk`, which contains: + +- `volumeType:t="box"` – The type of primitive displayed in + [*daEditor*](../../../dagor-tools/daeditor/daeditor/). +- `boxSz:r=0.5` – The size of the base primitive. +- `isLadder:b=yes` – A flag indicating that this is a ladder. +- `ladderStepsCount:i=13` – The number of steps on the ladder. + +This gameObj is used to describe the geometry of the ladder along which a +character can climb vertically. + +**Example** of a composite object: ladder geometry + its gameObj: + + + +--- + +During NavMesh generation in the location, each such gameObj is identified, and +the zones near the ends of the gameObj are analyzed: if there are NavMesh +polygons within a radius of <0.5m from the ends of the gameObj, a link is +created between the polygons through the vertical ladder. + +This link is used by AI for pathfinding across NavMesh through vertical ladders. + +**Examples** of NavMesh link generation through vertical ladders: + + + + +
Conditions metConditions not met
+ + + + +--- + +## Common Design Errors for Vertical Ladders + +Let's examine design errors that prevent link generation. These are typically +specific cases where the conditions for NavMesh generation are not met. To +create a NavMesh link through a vertical ladder, NavMesh polygons must be +generated within a radius of <0.5m from the ends of the gameObj. + +### Incorrect Ladder GameObj + +The gameObj dimensions prevent the link from being generated. + + + + + + + + +
ProblemSolution
The gameObj has insufficient dimensions to meet the conditions for link generation.Adjust the dimensions of the gameObj or set up a proper composite object with a gameObj that satisfies the link generation conditions.
SchemeExample
+ + + + +--- + + + + + + + + +
ProblemSolution
The gameObj has excessive dimensions, preventing the conditions for link generation from being met.Adjust the dimensions of the gameObj or set up a proper composite object with a gameObj that satisfies the link generation conditions.
SchemeExample
+ + + + +--- + + + + + + + + +
ProblemSolution
Two ladder composite objects with gameObjs are placed consecutively. Since there is no NavMesh at the junction of the gameObjs, the link cannot be generated.Only one gameObj should be used per ladder segment.
SchemeExample
+ + + + +--- + +### Problematic Ladder Geometry + +The ladder geometry prevents the NavMesh generation conditions from being met. + + + + + + + + +
ProblemSolution
The ladder has additional structural elements that obstruct NavMesh generation at the necessary distance to meet the link conditions.To resolve this, experiment with the design – solutions vary depending on the ladder and the adjacent platform. In some cases, moving the elements is enough, while in others, the ladder geometry must be modified or replaced.
SchemeExample
+ + + +--- + +### Problematic Environment Geometry + +The ladder leads to a location where NavMesh cannot be generated. + + + + + + + + +
ProblemSolution
Obstacles block access to the ladder, or other geometry obstructs NavMesh generation.It is important to clear the path to the ladder so that NavMesh can be generated nearby. Technically, obstacles do not prevent link generation, but the path will remain blocked for AI until the obstacles are destroyed.
SchemeExample
+ + + + +--- + + + + + + + + +
ProblemSolution
There isn't enough ceiling height for the attic floor to be suitable for NavMesh generation.This is often a geometry issue, so it's important to plan for sufficient ceiling height in advance. Incorrect NavMesh generation settings could also be the issue, such as setting the minimum ceiling height too low for NavMesh generation.
SchemeExample
+ + + + +--- + + + + + + + + +
ProblemSolution
Complex geometry on steep slopes is unsuitable for NavMesh generation.This is generally a geometry issue, so during the blocking phase, make sure the geometry along paths is suitable for NavMesh generation. Incorrect NavMesh settings, such as an overly restricted slope angle, may also be the cause.
SchemeExample
+ + + + +--- + + + + + + + + +
ProblemSolution
No NavMesh is available for link generation. The ladder is placed so that the player can climb it and clear a railing, but for link generation, NavMesh polygons are required. NavMesh does not generate on railings due to their size, and the end of the gameObj is too far from the nearest NavMesh polygons.The solution is to ensure the ladder leads to a properly generated NavMesh polygon. In this case, remove the railing or adjust the ladder length appropriately.
SchemeExample
+ + + + +--- + + + + + + + + +
ProblemSolution
NavMesh will not generate in water deeper than 2m, which prevents the creation of a link.The water depth needs to be reduced.
SchemeExample
+ + + + +--- + +### Code Limitations + +Cases not supported by the code: + + + + + + + + +
ProblemSolution
Links cannot be generated for intermediate platforms. The code does not account for intermediate platforms along the ladder's path. Each platform must have its own ladder for AI navigation. However, since an overabundance of vertical ladders is undesirable, plan more convenient paths in advance.In this case, you can keep the vertical ladder for climbing to the middle level and create ramp-like geometry for reaching the top level.
SchemeExample
+ + + + + diff --git a/_sources/assets/about-assets/occluder/index.rst.txt b/_sources/assets/about-assets/occluder/index.rst.txt new file mode 100644 index 000000000..6e3508684 --- /dev/null +++ b/_sources/assets/about-assets/occluder/index.rst.txt @@ -0,0 +1,12 @@ + +Occluder Box +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + occluder_box.md + + + diff --git a/_sources/assets/about-assets/occluder/occluder_box.md.txt b/_sources/assets/about-assets/occluder/occluder_box.md.txt new file mode 100644 index 000000000..6e733494d --- /dev/null +++ b/_sources/assets/about-assets/occluder/occluder_box.md.txt @@ -0,0 +1,186 @@ +# Occluder Box + +## Overview + +An *occluder box* is a specialized geometry used to improve performance. Every +object that fully obscured by occluder box is excluded from rendering. Partially +obscured objects stay intact. + + +If any part of an object extends beyond the occluder box, +it will reappear: see [video +1](https://drive.google.com/file/d/1JOlqzVnGlJNNe9yyexRqOIjiz75PWi74/view?usp=sharing) +and [video +2](https://drive.google.com/file/d/1B6ZvtDnbLyorXTSYhPW4ooVFcv0oTCC_/view?usp=sharing) +for reference. + +## Creating an Occluder Box + +To create an occluder box for an object, follow these steps: + +1. Create a Box object. +2. Name the object `occluder_box`. +3. Create a material using the *Dagor Dagorrat Material 2* shader. + + + +
+ +4. Set the shader class to `gi_black` (for better visibility, it's + recommended to choose a material color that contrasts with the object, like + bright red). + + + + + --- + +5. Assign the material to the object named `occluder_box`. +6. Open the object's properties and uncheck the **Renderable** option (this will + prevent potential issues later on). + + + + + --- + +7. In the **User Defined** tab, input the following: + + ``` + renderable:b=no + cast_shadows:b=no + occluder:b=yes + collidable:b=no + ``` + + + + **User Defined Properties:** + + - `renderable:b=no` – Disables the object from being rendered. + - `cast_shadows:b=no` – Prevents the object from casting shadows. + - `occluder:b=yes` – Designates the object as an occluder. + - `collidable:b=no` – Disables collision generation. + +
+ + ```{important} + Unchecking the **collidable** option in the Dagor object properties does not + achieve the same result! + + To verify this, check the asset in the [*Asset + Viewer*](../../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md). If + the occluder box is visible in the collision data, the setup is incorrect. + The collision should not include an `occluder_box` node. + + + + ``` + +8. Convert the `occluder_box` object to `Editable Poly` or apply an `Edit Poly` + modifier. +9. Adjust the size to fit the object it should occlude. Specific size + requirements are detailed below. + +## Editing the Occluder Box + +The *occluder box* is aptly named because only its bounding box matters, +regardless of its orientation. Therefore, the following rules apply when +creating an occluder box: + +1. The occluder box should never extend beyond the object's geometry. + + + + + --- + +2. It should fill as much of the object's internal space as possible, similar to + UV mapping, without exceeding the object's boundaries. + + + +
+ +3. Rotating the occluder box is highly discouraged. + + Here is an example of an unrotated occluder box: + + + + +
+ + And here's how it looks when rotated: + + + + + --- + +4. **Do not** name the object anything other than `occluder_box`. +5. The occluder box should be placed in the `LOD00` layer. + +```{tip} +If you need to remove an occluder box, delete its polygons while retaining the +object and its properties as described. +``` + +## Verifying Occluder Box Setup + +There are several ways to verify if the occluder box is set up correctly: + +1. In [*Asset + Viewer*](../../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md), the + occluder box is displayed as a white rectangle. + + If it's not visible, ensure the proper setting is enabled. If the occluder + box appears misaligned (as shown in the image), you will need to correct it + in *3ds Max*. + + + +
+ +2. During in-game testing, you can observe the occluder box in action by + pressing `F3` to display the wireframe, see + [video](https://drive.google.com/file/d/1JOlqzVnGlJNNe9yyexRqOIjiz75PWi74/view?usp=sharing) + for reference. + + If objects behind the occluder do not disappear, disappear too early, too + late, or not at all, recheck the setup based on the guidelines above. If the + occluder box is incorrectly configured, you will likely encounter issues + similar to those shown in [video + 1](https://drive.google.com/file/d/11DACcju6HsO-XCd0W82-qG-AouQRvGN-/view?usp=sharing) + and [video + 2](https://drive.google.com/file/d/15J1qdlZV3IpcrAudYAyTK4kJU-DoYdTB/view?usp=sharing). + +## Examples of Well-Configured Occluder Boxes + +Here are several example images of correctly set up occluder boxes. + + + + + + + + +## Commands for Displaying Occluders + +- `render.debug occlusion` – Shows occluders and their statistics. +- `render.debug occlusion occluded` – Displays bounding boxes of occluded + objects. + +Toggle commands: +- `render.debug occlusion boxes` +- `render.debug occlusion stats` +- `render.debug occlusion occludedv` +- `render.debug occlusion not_occluded` + +Additionally, you can use: +- `occlusion.enabled` – Enables or disables occlusion rendering entirely. +- `rendinst.check_occlusion` – Enables or disables occlusion for render + instances. + + diff --git a/_sources/assets/all-about-blk/application_blk.md.txt b/_sources/assets/all-about-blk/application_blk.md.txt new file mode 100644 index 000000000..2ae0d431b --- /dev/null +++ b/_sources/assets/all-about-blk/application_blk.md.txt @@ -0,0 +1,637 @@ +# application.blk + +The `application.blk` file is a key configuration file for the Dagor Engine +Tools, detailing the setup and customization of various aspects of the editors +and builders, including rendering options, shader configurations, shadow +settings, asset management, and game-specific settings. This file contains +multiple blocks, each dedicated to specific functions and settings. + +Below is a description of each block within the `application.blk` file: + +## Root Level Parameters + +- **collision**: Specifies the collision detection system to be used. +- **shaders**: Defines the path to the shaders. +- **useDynrend**: A boolean flag to enable or disable dynamic rendering. + +## dynamicDeferred{} Block + +This block configures settings for the dynamic deferred rendering system, +including supported options, default rendering options, debug display options, +and various rendering formats. + +- **supportsRopt{} Block**: Defines which rendering options are supported. + - **render shadows**: Enables shadow rendering. + - **render VSM shadows**: Enables variance shadow map shadows. + - **use SSAO**: Enables screen space ambient occlusion. + - **use SSR**: Enables screen space reflections. + - **no sun, no amb, no envi refl, no transp, no postfx**: Enables sun, + ambient, environmental reflections, transparency, and post-processing + effects, respectively. +- **defaultRopt{} Block**: Sets the default rendering options. + - **render VSM shadows**: Enables variance shadow map shadows. + - **no sun, no amb, no envi refl, no transp, no postfx**: Enables sun, + ambient, environmental reflections, transparency, and post-processing + effects, respectively. +- **dbgShow{} Block**: Configures debug display options with various rendering + indices for different components. + - **diffuse**: Diffuse component. + - **specular**: Specular component. + - **normal**: Normal vector component. + - **smoothness**: Smoothness (or roughness) component. + - **base_color**: Base color of the material. + - **metallness**: Metallic component. + - **material**: Material ID. + - **ssao**: Screen space ambient occlusion (SSAO). + - **ao**: Ambient occlusion (AO). + - **albedo_ao**: Maps the albedo multiplied by ambient occlusion. + - **final_ao**: Maps the final ambient occlusion. + - **preshadow**: Maps the pre-shadow (shadow map before applying shadows). + - **translucency**: Maps the translucency component. + - **translucency_color**: Maps the translucency color component. + - **ssr**: Maps the screen space reflections (SSR). + - **ssr_strength**: Maps the strength of the screen space reflections. +- **sceneFmt, postfxFmt, ssaoFmt**: Specifies formats for scene, post-processing + effects, and SSAO. +- **postfx_sRGB_backbuf_write**: Enables/disables sRGB back buffer writing for + post-processing effects. +- **gbufCount**: Sets the number of G-buffers. +- **gbufFmt0, gbufFmt1, gbufFmt2**: Defines formats for the G-buffers. +- **shadowPreset{} Block**: Defines presets for shadow mapping parameters. These + presets are used to configure the resolution and distance for shadow maps, as + well as the variance shadow maps (VSM). + - **name**: Defines the name of the shadow preset, describing its + configuration in terms of map size and maximum distance. + - **csmSize**: Sets the size of the cascaded shadow map (CSM). + - **csmMaxDist**: Sets the maximum distance for the cascaded shadow map. + - **vsmSize**: Sets the size of the variance shadow map (VSM). + - **vsmMaxDist**: Sets the maximum distance for the variance shadow map. +- **hdrMode, postfx, vsmAllowed, grassTranslucency**: Configures high dynamic + range mode, post-processing effects, VSM allowance, and grass translucency. + +## clipmap{} Block + +Configures settings for clipmap rendering, which is typically used for large +terrains. + +- **sideSize, stackCount, texelSize, step, finalSize, cacheCnt, bufferCnt**: + Defines various parameters for the clipmap, including size, number of stacks, + texel size, step size, final size, cache count, and buffer count. +- **cache_tex0, cache_tex1, cache_tex2, buf_tex0, buf_tex1, buf_tex2**: + Specifies formats for cache textures and buffer textures. +- **useUAVFeedback, useToroidalHeightmap**: Enables UAV feedback and toroidal + heightmap usage. + +## hdr_mode{} Block + +Specifies the high dynamic range mode settings. + +- **ps3, real**: Enables specific HDR modes. + +## SDK{} Block + +Defines settings related to the SDK (Software Development Kit). + +- **sdk_folder, levels_folder**: Paths to the SDK directory and levels + directory. +- **daeditor3x_additional_plugins**: Path to additional plugins for the editor. +- **exclude_dll**: Regex pattern to exclude specific `.dll` files. +- **allow_debug_bitmap_dump**: Enables debug bitmap dumping. +- **levelExpSHA1Tags{} Block**: Defines a list of SHA-1 tags associated with + various elements within a level. Each tag represents a specific type of data + or asset that is included in the level export process. + - **tag**: Defines a certain tag. + +## game{} Block + +Contains game-specific settings and paths. + +- **game_folder, levels_bin_folder**: Paths to the game directory and levels + binary directory. +- **physmat, params, entities, scene, car_params**: Paths to various game + configuration files. +- **texStreamingFile, texStreamingBlock, navmesh_layers**: Paths and settings + related to texture streaming and navigation mesh layers. + +## levelsBlkPrefix{} Block + +Configures prefix settings for level blocks. + +- **useExportBinPath**: Enables the use of export binary path. +- **try**: Path to try for level export. + +## assets{} Block + +Defines the parameters and settings related to the handling of game assets, +including their types, base paths, export settings, impostor rendering +parameters, and build configurations. + +- **types{} Block**: Lists various asset types used in the game. Specifies + various asset types such as textures (`tex`), prefabs (`prefab`), render + instances (`rendInst`), effects (`fx`), and more. + - **type**: Specifies the type of asset. +- **base**: Defines the base directory for asset storage. +- **export{} Block**: Contains settings for exporting assets. + - **types{} Block**: Specifies the types of assets to be exported. + - **type**: Specifies the type of asset. + - **cache**: Defines the cache directory used during export. + - **useCache2Fast**: Enables fast caching. + - **profiles{} Block**: Defines export profiles. + - **dedicatedServer{} Block**: A profile for dedicated servers. + - **strip_d3d_res**: Removes Direct3D resources. + - **collapse_packs**: Collapses packs. + - **reject_exp**: Specifies asset types to reject during export. + - **destination{} Block**: Specifies export destinations for different + platforms. + - **PC**: PC destination path. + - **"PC~~dedicatedServer"**: PC dedicated server destination path. + - **iOS**: iOS destination path. + - **allow_patch**: Disables patching. + - **additional{} Block**: Additional export settings. + - **destGrpHdrCache{} Block**: Configures the group header cache in VROMFS for + export. + - **packages{} Block**: Manages asset packages. + - **forceExplicitList**: Enables explicit package list usage. + - **outer_space{} Block**: Specifies settings for the *OuterSpace* + package. + - **outer_space_hq{} Block**: Specifies settings for the high-quality + *OuterSpace* package. + - **stripPrefix**: Specifies the prefix to strip from all package file paths. + - **addTexPrefix**: Defines the prefix to add for texture packages. + - **packlist**: Specifies the pack list file to maintain the current list of + valid packs. + - **defaultDdsxTexPack**: Defines the default DDSX (DirectDraw Surface) + texture pack file. + - **rtMipGenAllowed**: Disables real-time mipmap generation. + - **folderDefaults{} Block**: Specifies default settings for directories when + certain properties are not explicitly defined for a specific directory. + - **ddsxTexPack**: Defines that if a directory does not have an explicitly + defined `ddsxTexPack`, it can inherit this property from its parent + directory. + - **gameResPack**: Defines that if a directory does not have an explicitly + defined `gameResPack`, it can inherit this property from its parent + directory. + - **plugins{} Block**: Specifies the locations of export plugins. + - **folder**: Path to the directory. + - **perTypeDest{} Block**: Defines destination packages for specific asset + types. +- **perTypeDest{} Block**: Manages destination settings per asset type. + - **package{} Block**: Specifies package settings. + - **pack{} Block**: Specifies pack settings. + - **tifMask**: Indicates that assets related to mask textures are grouped + into the certain package. + - **land**: Indicates that assets related to landscape elements are + grouped into the certain package. + - **collision**: Indicates that assets related to collision detection are + grouped into the certain package. +- **impostor{} Block**: Defines settings for impostor rendering (simplified + representations of complex objects to improve performance). + - **data_folder**: Specifies the directory for impostor data. + - **aoBrightness**: Adjusts ambient occlusion brightness. + - **aoFalloffStart**: Sets the start distance for ambient occlusion falloff. + - **aoFalloffStop**: Sets the stop distance for ambient occlusion falloff. + - **preshadowEnabled**: Enables pre-shadowing. + - **textureQualityLevels{} Block**: Defines texture quality levels. + - **qualityLevel{} Block**: Quality levels based on: + - **minHeight**: Defines minimum height. + - **textureHeight**: Defines texture height. +- **build{} Block**: Configures general build settings. + - **maxJobs**: Maximum number of build jobs. + - **stateGraph{} Block**: Defines state graph settings. + - **cppOutDir**: Specifies the output directory for state graph C++ files. + - **dynModel{} Block**: Sets parameters for dynamic models. + - **descListOutPath**: Specifies the output path for the description list of + dynamic models. + - **separateModelMatToDescBin**: Enables storing of model materials + separately in the description binary file. + - **ignoreMappingInPrepareBillboardMesh**: Enables ignoring texture mapping + during the preparation of billboard meshes. + - **enableMeshNodeCollapse**: Enables the collapsing of mesh nodes. + - **maxBonesCount**: Sets the maximum number of bones that can be used in + the skeletal animation of a dynamic model. + - **setBonePerVertex**: Specifies the number of bones influencing each + vertex. + - **maxVPRConst**: Sets the maximum number of vertex shader constant + registers. + - **useDirectBones**: Enables the use of direct bone transformations. + - **remapShaders{} Block**: Maps original shader names to new or alternative + shaders, provides specific remapping rules, and optionally denies certain + shaders from being used. + - **denyShaders{} Block**: Specifies a regular expression to deny shaders + whose names match the pattern. + - **bat_shader**: Sets mapping for `bat_shader`. + - **rendinst_simple**: Sets mapping for `rendinst_simple`. + - **rendinst_simple_glass**: Sets mapping for `rendinst_simple_glass`. + - **glass**: Sets mapping for `glass`. + - **glass_refraction**: Sets mapping for `glass_refraction`. + - **simple**: Sets mapping for `dynamic_simple`. + - **dynamic_simple**: Sets mapping for `dynamic_simple`. + - **dynamic_null**:: Sets mapping for `dynamic_null`. + - **propeller_front**: Sets mapping for `propeller_front`. + - **propeller_side**: Sets mapping for `propeller_side`. + - **dynamic_glass_chrome**: Sets mapping for `dynamic_glass_chrome`. + - **dynamic_masked_chrome**: Sets mapping for `dynamic_masked_chrome`. + - **dynamic_masked_glass_chrome**: Sets mapping for + `dynamic_masked_glass_chrome`. + - **dynamic_illum**: Sets mapping for `dynamic_illum`. + - **dynamic_mirror**: Sets mapping for `dynamic_mirror`. + - **dynamic_alpha_blend**: Sets mapping for `dynamic_alpha_blend`. + - **glass_crack**: Sets mapping for `glass_crack`. + - **collimator**: Sets mapping for `collimator`. + - **aces_weapon_fire**: Sets mapping for `aces_weapon_fire`. + - **land_mesh_combined**: Sets mapping for `land_mesh_combined`. + - **land_mesh_combined_2x**: Sets mapping for `land_mesh_combined_2x`. + - **random_grass**: Sets mapping for `random_grass`. + - **tracer_head**: Sets mapping for `tracer_head`. + - **gi_black**: Sets mapping for `gi_black`. + - **rendInst{} Block**: Configures render instance settings, shader remapping, + and material processing. + - **ignoreMappingInPrepareBillboardMesh**: Enables ignoring the mapping when + preparing billboard meshes. + - **descListOutPath**: Specifies the output path for the descriptor list of + rendering instances. + - **impostorParamsOutPath**: Specifies the output path for impostor + parameters. + - **separateModelMatToDescBin**: Enables separating the model materials into + a descriptor binary. + - **forceRiExtra**: Enables the inclusion of extra rendering instance data. + - **remapShaders{} Block**: Maps original shader names to new or alternative + shaders, similar to the `remapShaders{} Block` in the `dynModel{} Block`. + - **processMat{} Block**: Specifies material processing settings. + - **collision{} Block**: Defines settings for collision data. + - **preferZSTD**: Enables a preference for ZSTD compression algorithm. + - **writePrecookedFmt**: Enables writing the collision data in a pre-cooked + format. + - **skeleton{} Block**: Defines settings for skeleton data compression. + - **preferZSTD**: Enables a preference for ZSTD compression algorithm. + - **a2d{} Block**: Defines settings for 2D assets data compression. + - **preferZSTD**: Enables a preference for ZSTD compression algorithm. + - **tex{} Block**: Defines texture settings. + - **defMaxTexSz**: Sets the default maximum texture size. + - **iOS{} Block**: Configures settings for iOS platform. + - **defMaxTexSz**: Sets the maximum texture size. + - **and{} Block**: Configures settings for Android platform** + - **defMaxTexSz**: Sets the maximum texture size. + - **physObj{} Block**: Configures physical object properties. + - **ragdoll{} Block**: Specifies ragdoll physics for characters. + - **def_density**: Sets the default density. + - **def_massType**: Defines the default mass type. + - **def_collType**: Specifies the default collision type. + - **name_full{} Block**: Defines the physical properties and constraints + for the whole character. + - **name_tail{} Block**: Specifies the joints for different parts of the + characters body. + - **" Pelvis"{} Block** + - **Joint{} Block** + - **type**: Defined joint type. + - **minLimit**: Minimum rotational limits for the joint in X, Y, and + Z axes. + - **maxLimit**: Maximum rotational limits for the joint in X, Y, and + Z axes. + - **Damping**: Controls how quickly the joint's motion slows down. + - **Twist Damping**: Specified damping applied to rotational movements. + - **" Spine1"{} Block** + - **Joint{} Block** + - **type**: Defined joint type. + - **minLimit**: Minimum rotational limits for the joint in X, Y, and + Z axes. + - **maxLimit**: Maximum rotational limits for the joint in X, Y, and + Z axes. + - **Damping**: Controls how quickly the joint's motion slows down. + - **Twist Damping**: Specified damping applied to rotational + movements. + - **" R Calf"{} Block** + - **Joint{} Block** + - **type**: Defined joint type. + - **minLimit**: Minimum rotational limits for the joint in X, Y, and + Z axes. + - **Damping**: Controls how quickly the joint's motion slows down. + - **"@clone-last: L Calf"{} Block**: Clones the settings from the `"R + Calf"` joint for the left calf. + - **" R Foot"{} Block** + - **Joint{} Block** + - **type**: Defined joint type. + - **minLimit**: Minimum rotational limits for the joint in X, Y, and + Z axes. + - **maxLimit**: Maximum rotational limits for the joint in X, Y, and + Z axes. + - **Damping**: Controls how quickly the joint's motion slows down. + - **Twist Damping**: Specified damping applied to rotational + movements. + - **"@clone-last: L Foot"{} Block**: Clones the settings from the `"R + Foot"` joint for the left foot. + - **Override{} Block**: Overrides the parameters. + - **swapLimZ**: Swaps the limits for the Z-axis. + - **" Neck"{} Block** + - **Joint{} Block** + - **type**: Defined joint type. + - **minLimit**: Minimum rotational limits for the joint in X, Y, and + Z axes. + - **maxLimit**: Maximum rotational limits for the joint in X, Y, and + Z axes. + - **Damping**: Controls how quickly the joint's motion slows down. + - **Twist Damping**: Specified damping applied to rotational + movements. + - **" Head"{} Block** + - **Reference**: References the neck bone for alignment. + - **Joint{} Block** + - **type**: Defined joint type. + - **minLimit**: Minimum rotational limits for the joint in X, Y, and + Z axes. + - **maxLimit**: Maximum rotational limits for the joint in X, Y, and + Z axes. + - **Damping**: Controls how quickly the joint's motion slows down. + - **Twist Damping**: Specified damping applied to rotational + movements. + - **def_helper{} Block**: Sets default helper settings. + - **physObj**: Enables treating object as a physical object. + - **animated_node**: Enables treating object as an animated node. + - **twist_ctrl{} Block**: Specifies the configuration for controlling the + twisting motion of certain bones in the character's rig. + - **node0**: Specifies the starting bone or node for the twist control. + - **node1**: Specifies the ending bone or node for the twist control. + - **twistNode**: Defines the node that will handle the twisting effect + between `node0` and `node1`. + - **twistNode**: An additional twist node, which might be used to + enhance or refine the twisting effect. + - **angDiff:**: Specifies the angular difference or rotation applied to + the twist nodes. + - **lshader{} Block**: Manages the location of shader subgraphs. + - **subgraphsFolder**: Specifies the folder path where shader subgraphs are + stored. + - **preferZSTD**: Enables settings for ZSTD compression. + - **preferZLIB**: Enables settings for ZLIB compression. + - **writeDdsxTexPackVer**: Sets the version for writing DDS texture packs. + - **writeGameResPackVer**: Sets the version for writing game resource packs. + +## level_metrics{} Block + +Defines metrics for levels and plugins. + +- **whole_level{} Block**: Maximum sizes and counts for textures and level data. + - **textures_size**: Maximum total size of textures allowed for the entire + level. + - **level_size**: Maximum total size of the level data. + - **textures_count**: Maximum number of textures allowed in the level. +- **plugin{} Block**: Metrics for collision plugins. + - **name:t="Collision"**: Name of the plugin or category. In this case, it + pertains to `collision` data. + - **max_size**: Maximum size of collision data allowed. +- **plugin{} Block**: Metrics for occluders plugins. + - **name:t="Occluders"**: Name of the plugin or category related to + `occluders`. + - **max_triangles**: Maximum number of triangles allowed for occluder data. +- **plugin{} Block**: Metrics for environment plugins. + - **name:t="Environment"**: Name of the plugin or category related to + `environment` data. + - **max_faces**: Maximum number of faces allowed in the environment data. + - **znear_min**: Minimum value for the near clipping plane in the + environment's rendering setup. + - **znear_max**: Maximum value for the near clipping plane. + - **zfar_min**: Minimum value for the far clipping plane in the environment's + rendering setup. + - **zfar_max**: Maximum value for the far clipping plane. + - **z_ratio_max**: Maximum ratio of the distance between far and near clipping + planes to the near clipping plane. + +## genObjTypes{} Block + +Lists general object types. + +- **type**: Various object types used by the tools. + +## dagored_visibility_tags{} Block + +Configures visibility tags for different plugins. + +- **plugin{} Block**: Names of plugins and their associated tags for visibility. + +## dagored_disabled_plugins{} Block + +Lists plugins that are disabled. + +- **disable**: Names of plugins that are disabled in the editor. + +## daEditorExportOrder{} Block + +Defines the order in which various game elements and assets are exported by the +editor. This ensures that dependencies are resolved and that assets are +processed in the correct sequence. + +- **plugin**: Specifies the plugins used by the editor in a specific sequence. + +## lightmap{} Block + +Configures settings for generating lightmaps, which are precomputed lighting +information used for static objects. + +- **High{} Block**: A quality preset defining the number of passes and settings + per light. + - **passes**: Number of passes or iterations for generating the lightmap. + - **cub5**: Enables using the 5-face cubemaps. + - **perLight**: Enables generating lightmaps per each light source. + - **map{} Block**: Defines the settings for the lightmap textures, specifies + the resolution of the lightmaps used. + - **size**: Size of the lightmap texture. + +## projectDefaults{} Block + +Defines default project-wide settings. + +- **disableGrass**: Enables grass rendering. +- **gpuGrass**: Enables grass rendering on the GPU + - **riMgr{} Block**: Configures settings for render instance management. + - **type**: Specifies the type of render instance manager to use. + - **gridCellSize**: Sets the size of the grid cell for rendering instances. + - **subGridSize**: Defines the size of the sub-grid within the main grid. + - **minGridCellSize**: Sets the minimum size for a grid cell. + - **minGridCellCount**: Specifies the minimum number of grid cells. + - **writeOptTree**: Enables the writing of an optimized tree for rendering + instances. + - **packedRIBB**: Enables packed render instance bounding boxes. + - **gen{} Block**: Configures generation settings for different platforms. + - **PC**, **and**, **iOS**: Enables generation for PC, Android, and iOS. + - **tmInst12x32bit**: Enables a specific rendering instance mode. + - **maxRiGenPerCell**: Sets the maximum number of render instances generated + per each cell. + - **perInstDataDwords**: Specifies the number of DWORDs per instance data. + - **perInstDataUseSeed**: Enables the use of seed data for instances. + - **prefabMgr{} Block**: Configures the prefab manager for handling reusable + game objects. + - **clipmapShaderRE**: Defines a regular expression for selecting shaders + related to clipmaps. + - **envi{} Block**: Environment settings, including sky rendering and weather + types. + - **type**: Specifies the type of environment. + - **znear**: Sets the near clipping plane distance. + - **zfar**: Sets the far clipping plane distance. + - **skiesFilePathPrefix**: Defines the file path prefix for sky-related + files. + - **skiesWeatherTypes**: Specifies the file for weather types. + - **skiesPresets**: Defines the file pattern for weather presets. + - **skiesGlobal**: Sets the global environment file. + - **daSkiesDepthTex**: Specifies the depth texture for the skies. + - **enviNames**: Enables specific environment names. + - **morning**: Enables morning environment. + - **day**: Enables day environment. + - **evening**: Enables evening environment. + - **night**: Enables night environment. + - **skies**: Placeholder for additional sky settings. + - **hmap{} Block**: Heightmap settings for terrain. + - **type**: Specifies the type of heightmap to use. + - **scnExport{} Block**: Export settings for scenes. + - **removeInsideFaces**: Enables removing inner faces during scene export. + - **preferZSTD**: Enables a preference for ZSTD compression algorithm. + - **preferZLIB**: Enables a preference for ZLIB compression algorithm. + +## shader_glob_vars_scheme{} Block + +Global shader variables configuration. + +- **common{} Block**: Common settings for shaders. + - **assetViewer{} Block**: Specific settings for the *Asset Viewer*, including + anti-aliasing options. + - **caption**: Defines the caption or label for a setting within the *Asset + Viewer*. + - **show_no_aa**: Controls the display of assets without anti-aliasing. + +## heightMap{} Block + +Configures settings for heightmaps, which define terrain elevation and other +surface details. + +- **useMeshSurface**: Enables mesh surface using for height map generation. +- **requireTileTexe**: Enables tile textures required for height maps. +- **hasColorTex**: Enables color textures presenting in the height map. +- **hasLightmapTex**: Enables lightmap textures presenting in the height map. +- **storeNxzInLtmapTex**: Enables storing normal and height (NxZ) data in the + lightmap texture. +- **genFwdRadius**: Defines the forward radius for height map generation. +- **genBackRadius**: Defines the backward radius for height map generation. +- **genDiscardRadius**: Defines the discard radius for height map generation. +- **landClassLayers{} Block**: Defines various layers used in height maps. Each + layer specifies its properties and attributes. + - **layer{} Block**: Represents a distinct layer in the height map. + - **name**: The name of the layer. + - **bits**: The bit width for this layer. + - **attr**: The attribute associated with this layer. +- **lightmapCvtProps{} Block**: Defines properties for converting lightmaps. + This includes format settings, swizzling, addressing, mipmap levels, and gamma + correction. + - **fmt**: The format for the lightmap texture. + - **swizzleARGB**: The swizzling pattern for the lightmap texture. + - **addr**: The addressing mode for the lightmap texture. + - **hqMip**; **mqMip**; **lqMip**: Mipmap levels for high, medium, and low + quality. + - **gamma**: The gamma correction value. + - **iOS{} Block**, **and{} Block**: Platform-specific format settings. + +## additional_platforms{} Block + +Lists additional platforms for which the tools are configured. + +- **platform**: Specifies the platform. + +## parameters{} Block + +Defines general parameters for the tools. + +- **maxTraceDistance**: Maximum distance for tracing operations, such as ray + casting. + +## AssetLight{} Block + +Configures lighting assets, including dynamic cube textures and level of detail +(LOD) settings. + +- **shader_var**: Shader variable for dynamic cube textures. +- **blur_lods**: Enables LOD blurring. +- **bound_with_camera**: Enables binding the lighting to the camera. + +## defProjectLocal{} Block + +Defines local project settings, particularly camera control settings for +different types of camera modes. + +- **freeCamera{} Block**: Configures settings for a free-moving camera, + typically used for debugging or exploration purposes. + - **move_step**: The step size for camera movement. + - **strife_step**: The step size for strafing movement. + - **control_multiplier**: The multiplier for camera control, affecting how + responsive the camera is to input. +- **maxCamera{} Block**: Configures settings for a maximum control camera, which + might be used for more precise control. + - **move_step**: The step size for camera movement. + - **strife_step**: The step size for strafing movement. + - **control_multiplier**: The multiplier for camera control, offering more + fine-grained control compared to the `freeCamera` settings. + +## animCharView{} Block + +Defines variables and first-person shooter (FPS) views for character animation. + +- **vars{} Block**: Contains various enumerations and ranges for character + states and animations. These settings allow for detailed control over + character behavior and animation. + - **weapon_mod_state{} Block**: Enumeration for weapon modification states. + - **weapon_selected{} Block**: Enumeration for selected weapons. + - **vehicle_selected{} Block**: Enumeration for selected vehicles. + - **seat_type{} Block**: Enumeration for seat types. + - **heal_item_selected{} Block**: Enumeration for selected healing items. + - **weap_state{} Block**: Enumeration for weapon states. + - **pos_state{} Block**: Enumeration for position states. + - **move_state{} Block**: Enumeration for movement states. + - **move_ang{} Block**: Defines the angle range for movement with minimum, + maximum, and step values. + - **pers_course{} Block**: Defines the personal course angle with minimum, + maximum, and step values. + - **aim_pitch{} Block**: Defines the aim pitch angle with minimum, maximum, + and step values. + - **torso_lean{} Block**: Defines the torso lean angle with minimum, maximum, + and step values. + - **torso_rotate{} Block**: Defines the torso rotation angle with minimum, + maximum, and step values. + - **bolt_action{} Block**: Progress for bolt action with a trackbar for UI + representation. + - **reload_progress{} Block**: Progress for reloading with a trackbar for UI + representation. + - **reload_style{} Block**: Enumeration for reload styles. + - **single_reload_progress{} Block**: Progress for single reload with a + trackbar for UI representation. + - **single_reload_state{} Block**: Enumeration for single reload states. + - **device_progress{} Block**: Progress for device usage with a trackbar for + UI representation. + - **device_state{} Block**: Enumeration for device states. + - **deflection_progress{} Block**: Progress for deflection with a trackbar for + UI representation. + - **deflect_angle{} Block**: Angle for deflection with a trackbar for UI + representation. + - **l.hand_ik_mul{} Block**: Multiplier for left-hand IK with a trackbar for + UI representation. + - **r.hand_ik_mul{} Block**: Multiplier for right-hand IK with a trackbar for + UI representation. + - **changeweapon_progress{} Block**: Progress for changing weapons with a + trackbar for UI representation. + - **throw_progress{} Block**: Progress for throwing with a trackbar for UI + representation. + - **action_progress{} Block**: Progress for actions with a trackbar for UI + representation. + - **recover_progress{} Block**: Progress for recovery with a trackbar for UI + representation. + - **gesture_progress{} Block**: Progress for gestures with a trackbar for UI + representation. +- **fps_view{} Block**: Define the first-person shooter views for different + scenarios. + - **name**: Name of the view. + - **node**: Node to attach the camera. + - **camOfs**: Camera offset. + - **camAxis**: Camera axis. + - **camUpAxis**: Camera up axis. + - **fixed_dir**: Whether the direction is fixed. + - **pitch_param**: Parameter for pitch. + - **yaw_param**: Parameter for yaw. + - **znear**: Near clipping plane. + - **zfar**: Far clipping plane. + - **hideNodes{} Block**: Nodes to hide during rendering. + + diff --git a/_sources/assets/all-about-blk/composit_blk.md.txt b/_sources/assets/all-about-blk/composit_blk.md.txt new file mode 100644 index 000000000..edb068969 --- /dev/null +++ b/_sources/assets/all-about-blk/composit_blk.md.txt @@ -0,0 +1,1441 @@ +# .composit.blk + +## What is a Composite Object? + +A composite object is not an object, but a text file in the `.blk` format, which +contains a list of reference objects and some of their parameters. These files +are named according to specific conventions and always include one of the +following suffixes: + +- `_cmp.composit.blk`: Simple composite object. +- `_random.composit.blk`: Composite object with randomness (replacing objects or + making objects disappear). +- `_gameobj.composit.blk`: Composite object containing game objects. + +The primary purpose of composite objects is to simplify the work of level +designers. For example, they can assemble a house with interior elements without +manually placing each element every time. + +From the game's perspective, there is no difference between objects placed +individually or by a composite object. In the game, all objects from the +composite file are loaded as independent objects. + +```{note} +The game engine does not recognize composite objects; they are solely +for convenience in arranging and editing sets of objects on a map. Only the +objects themselves (render instances, prefabs, etc.) are exported into the game +level. Composite files (`.blk` files) are not used beyond the editor. +``` + +## Contents of .composit.blk Files + +Composite objects consist of an enumeration of objects with certain parameters: + +- Object names. +- Placement coordinates. +- Probability of including an object (or replacing it with another or with an + empty space). + +## Example of Declaring a Single Object + +``` +className:t="composit" +node{ + name:t="obj_name:rendInst" + tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]] +} +``` + +In this example: + +- **className:t="composit"**: Indicates that this `.blk` file will be treated as + a composite by the engine. +- **node{}**: Represents an individual building block of our composite object + (node). Ensure all curly braces are correctly matched; a missing or extra + brace will break the composite. +- **name:t="obj_name:rendInst"**: Specifies the name and type of the node. Here, + "obj_name" is a render instance. + +If there are no "duplicates" (objects with the same name but different types), +you can simply specify the name without a type: + +``` +name:t="obj_name" +``` + +This simple naming indicates the object's placement at specified coordinates +without additional parameters like disappearance or replacement. + +By all means, you shouldn't have any cases when type specification is necessary: +it is required only when there are full namesakes of different types, for +example "asset:rendinst" (`asset.lod00.dag`), "asset:composit" +(`asset.composit.blk`) and "asset:prefab" (`asset.dag`), which should not be +done at all. + +If there are no namesakes, it is sufficient to record without specifying the +type: `name:t="obj_name"`. + +This is a simple object name. Simple in the sense that we can't do anything with +it (set the probability of disappearance, substitution by another object, etc.). +We just say that there is such an object at such coordinates. If this string is +missing or `name:t=""`, then the node will be "empty" – no asset will be drawn +in it. + +We can set here either a rendInst, a composite or a game object (discussed +below). Composite doesn't care what it refers to – it's just a text file with a +list of objects placed in certain places. Names are given without extensions. +That is, instead of `table_a.lod00.dag`, you should just specify `table_a`. Or, +instead of `table_a_plates_cmp.composit.blk`, we set `table_a_plates_cmp`. + +```{warning} + +For the tools, the **asset that was found earlier is prioritized**. For example, +from two objects in the same directory `table_a.composit.blk` and +`table_a.lod00.dag` the engine will call `table_a.composit.blk` (in alphabetical +order `.composit` will be found before `.lod`), but if the composite, for +example, is in the subdirectory "/composits/", then the first will be the +`.lod`. Thus, simply rearranging resources in a new way can break a +compositor referring to "namesakes" without an explicitly specified type. + +For this reason, it is often an error when a composite refers to a `.dag` of +the same name. That is, a `table_a` rendInst is specified inside + `table_a.composit.blk`. The engine will not call the `table_a` rendInst – it + will call the `table_a` composite. Because of this, we get into recursion + (when an object refers to itself an infinite number of times). + +So always call composites by content. For example, +`is_table_a_dinner_chairs_cmp.composit.blk` (a dining table with chairs), or +`is_book_case_shelf_0_7m_a_cmp.composit.blk` (a 0.7-meter shelf for a bookcase). + +However, there are still situations when you want to set the same names. For +example, we already have `table_a` (rendInst) in multiple places. And, after 2 +years, it became necessary to put plates on it. + +We can make a composite `table_a_plates_cmp.composit.blk`, in which to add +plates and replace it in these multiple places (and then overwrite it with +future edits). + +``` + +This is the matrix of the object: + +``` +tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]] +``` + +```{note} +This is a matrix, not an indication of the object's rotation in degrees or +scales in percent. **Do not try to pick up parameters through a text editor**. +They should be generated by a script or obtained when creating a composite +object in one of the editors. Only the last block of the matrix is the position +of the object in space, in meters. This block can be edited through a text +editor. +``` + +If no matrix is specified at all, it will be equal to the one above. Zero +offsets and rotation, unit size. + +```{note} +The matrix specifies the transforms relative to the **parent** of our node. +In the example above, the parent is the composite itself, i.e. the offset is +specified relative to the pivot of the entire composite. However, this is not +always the case. More on this later. +``` + +## Example of Declaring a Random Node + +If we want one of several variants to be placed in the specified coordinates +instead of one particular asset, then we need to specify the node differently. + +``` +node{ + ent{ + name:t="obj_name1"; weight:r=1; + } + ent{ + name:t="obj_name2"; weight:r=1; + } +} +``` + +Here, instead of always having the same asset, we randomly choose one of the two +with equal probability. There can also be other parameters inside `node{}`, such +as a matrix. Only `"name:t"` cannot be specified at the same time as `ent{}`. + +``` +ent{} +``` + +This is how an **entity block** is allocated – there can be several of them +inside a node, but only one at a time will be output. + +Accordingly, if we specify only one `ent{}` block, we will get exactly the same +result as in the first example. There is always only one option to choose from. + +Inside there is already familiar to us parameter `name:t`, which works exactly +the same way as in nodes. In addition, a new parameter `weight:r` has been +added. If the parameter was not specified, it would be equal to `1` by default. + +The higher its value **is compared to the weight of other nodes**, the higher +the probability that random will choose this option. The weight can be written +in any "dimension" – 0.0001 or 1000 – it is not the number itself that matters, +but how much it is greater/lower than the weight of its neighbors. We specify +the values that are easier to perceive. + +```{note} +Unlike nodes, entities do not have their own matrix and other parameters. Only +the name and weight. The rest of the parameters are taken from the node in which +they are located. +``` + +The syntax allows you to separate entity parameters not only by semicolon, but +also by jumping to the new line. The two methods in the example below are +equivalent. Tabulation is used only to improve readability, in fact it will work +without indentation, and all blocks are separated only by curly braces. + +``` +ent{name:t="obj_name"; weight:r=1;} + +ent{ + name:t="obj_name" + weight:r=1 +} +``` + +When creating a random node in a text editor, the second option may be more +convenient if the entity name is very long. + +What should we do if we want to sometimes not spawn anything? Add the empty +entity mentioned earlier. As we remember, an empty name or no `name:t` parameter +will give us an empty node: + +``` +node{ + ent{ + name:t="obj_name1"; weight:r=1; + } + ent{ + name:t="obj_name2"; weight:r=1; + } + ent{ + name:t=""; weight:r=2; + } +} +``` + +Now half the time nothing is drawn, because the weight of the empty node is +equal to the total weight of the other entities. + +```{note} +If you have built a composite that randomizes a single node (e.g. a chair to a +similar one) – it's a must to give it a name `*_random.composit.blk` – a simple +composite object. +``` + +It will work without it. But this composite will be arranged by a human, and the +search needs a meaningful name that explains what is inside without having to +open each `.blk` and check the contents. + +## Example of Declaring Multiple Objects + +Let's reinforce our knowledge by going through the same steps multiple times. In +practice, it's unnecessary to use different node formats side by side (as it can +complicate readability), but each method works. + +``` +className:t="composit" + +// Standard object declaration. Without a specified matrix, it will have zero +rotation, zero offset, and a scale of `1`: + +node{ + name:t="obj_name0" +} + +// Random entity with a single option behaves the same as the block above. +The "default" matrix is identical to its absence: + +node{ + ent{ + name:t="obj_name1"; weight:r=1; + } + tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]] +} + +// One of the objects or nothing is chosen with equal probability: + +node{ + ent{ + name:t="obj_name2" // Parameters can be separated by line breaks. + weight:r=1 + } + ent{ + name:t="obj_name3"; weight:r=1; // Or by semicolons. + } + ent{ + name:t=""; weight:r=1; + } + tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]] +} +``` + +## Example of Declaring Random Transforms + +As we discussed earlier, using a different format is required to select from +multiple entities. The process is similar for random object placement – rather +than a matrix, we use special parameters: + +### Available Parameters for Randomization + +``` +node{ + offset_x:p2=0, 0 + offset_y:p2=0, 0 + offset_z:p2=0, 0 + rot_x:p2=0, 0 + rot_y:p2=0, 0 + rot_z:p2=0, 0 + scale:p2=1, 0 + yScale:p2=1, 0 +} +``` + +All the parameters are optional but cannot be used simultaneously with a +matrix. If a matrix is specified, any of these will be ignored. + +- `offset_*:p2` - Specifies the object's position along the corresponding axes in + meters. Replace the `*` with the axis letter. The first value is the absolute + offset, and the second is the allowed deviation in both directions after that. + For example, a value of `3, 0.5` means the final coordinate will be between + 2.5 and 3.5 meters. If unspecified, it defaults to `0, 0`. + +- `rot_*:p2` - Similarly specifies rotation in degrees. To set any random + rotation around an axis, just input `0, 180` – random values will cover a full + rotation around the axis (from −180° to 180°). Defaults to `0, 0` if + unspecified. + +- `yScale:p2` - Unlike rotation and offset, scaling on all axes cannot be + randomized independently. The exception is the Y-axis, which points upward in + Dagor. The first value is the initial scale, and the second is the deviation. + Defaults to `1, 0` if unspecified. + +- `scale:p2` - Uniform scaling on all axes. Defaults to `1, 0` and can be used + alongside Y-axis scaling. + +### Random Transforms for Multiple Composites Simultaneously + +The example above is inconvenient when controlling multiple composites +simultaneously, such as creating randomly slightly open windows using multiple +rendering instances for visual variety. Each shutter could be assigned its +random rotation parameter, but making adjustments would be cumbersome. To change +the angle, you'd have to go through all references to these shutters in every +composite – slow and prone to error. To avoid this, parameters can be placed in +a separate `.blk`. + +### Structure of a File with Random Transforms and Naming Conventions + +Technically, the composite will accept any name, but since people will work with +them, the file name should be meaningful. Common suffixes are `_rot.blk` for +rotations, `_offset.blk` for offsets, or `_transform.blk` for both in a general +file. If some objects have left and right versions with different rotation +directions, add the suffixes `_l` and `_r` accordingly. + +For example, for left window shutters, it makes sense to create a file +`_shutter_rot_l.blk` with: + +``` +rot_y:p2=85, 5 +rot_z:p2=0, 0.8 +``` +And for the right ones, `_shutter_rot_r.blk` with the corresponding rotations +for the right side. This file can then be included in the composite of the +shutter, for example, +`name_city_house_window_shutter_1200x1900_a_l_cmp.composit.blk`: + +``` +className:t="composit" + +node{ + name:t="name_city_house_window_shutter_1200x1900_a_l" + include "_shutter_rot_l.blk" +} +``` + +```{important} + +- The path to the `_shutter_rot_l.blk` file is absolute. In the example above, +the including file is in the same directory as the composite. If you place this +file elsewhere, specify the full path in the command line format. +- We are effectively substituting the shutter's `.dag` file +`name_city_house_window_shutter_1200x1900_a_l.lod00.dag` with a composite that +has a random rotation, +`name_city_house_window_shutter_1200x1900_a_l_cmp.composit.blk`. This means we +include this `_shutter_rot_l.blk` in the composite of a single shutter – nothing +else is there. This is the composite that will later be placed in the windows, +instead of the shutter itself. + +``` + +### Why Use Includes in Nested Composites? + +- **Priority of the Matrix**: Remember, the matrix has a higher priority. If the + node is not at the "zero" of the composite, the only way to change its + position is through random offset parameters along the unused axes. + +- **Avoid Doing This in the "Outer" Composite, Though It Works:** + +``` +className:t="composit" +node{ + name:t="name_city_house_window_shutter_1200x1900_a_l" + include "_shutter_rot_l.blk" + offset_y:p2=0.7, 0 + offset_x:p2=1, 0 + offset_z:p2=2, 0 +} +node{ + name:t="name_city_house_window_shutter_1200x1900_a_l" + include "_shutter_rot_l.blk" + offset_y:p2=0.7, 0 + offset_x:p2=1, 0 + offset_z:p2=-2, 0 +} +``` + +This will work and move the shutter to the specified coordinates, but all +editors currently operate with matrices by default – exporting transforms this +way won't be possible. Positioning with this way is only feasible through +blind manual `.blk` editing – not the most convenient or fastest method. + +- **Potential for Duplicate Transformations**: Without seeing the contents of + the included `.blk`, it's easy to duplicate non-visible transformations, which + can lead to bugs. Each `include` is replaced on the fly with the contents of + the specified file. If a parameter is specified twice, only the first instance + will be applied. + +Here's how inattentiveness can break things: + +``` +className:t="composit" +node{ + name:t="name_city_house_window_shutter_1200x1900_a_l" + rot_y:p2=90, 0 // First transformation specified before include, shutter will + include "_shutter_rot_l.blk" // always stick at 90°, ignoring Y randomization +} +node{ + name:t="name_city_house_window_shutter_1200x1900_a_l" + include "_shutter_rot_l.blk" + rot_y:p2=90, 0 // Second declaration of a parameter already present in the + // include – attempting to rotate an additional 90° on Y will + // be ignored. +} +``` + +## Example of Node Hierarchy in Composites + +Inside the `node{}` block, there can be more than just a list of its parameters. +Another `node{}` can be placed inside. In this case, the inner node is +considered a child, and its transforms are calculated not from zero but from the +parent's matrix. + +``` +className:t="composit" + +node{ + tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 1, 0]] + node{ + name:t="obj_name0" + tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 1]] + } +} +``` + +In the example above, `"obj_name0"` is written inside another `node{}`, meaning +it inherits the offset. The upper node is an "empty" one with an offset of one +meter along the Y-axis. The node with the object has an offset of `1` meter +along the Z-axis in its matrix, but remember that matrices combine. Relative to +the composite's center, it will be offset along both Y and Z. We can set other +coordinates for it, add another block with different objects next to it, etc. + +It's not frequently used, but it's possible. Composites are exported from +*daEditor* this way – all nodes are parented to an empty node with a default +matrix. In text form, such composites are harder to perceive, and until +recently, we didn't have the ability to visually edit composites, so practical +use is still rare. + +### Practical Example of Node Hierarchy Use + +Let's imagine we have two tables 0.7 meters tall and two cups. We want one of +the tables to be randomly selected in the composite and rotated. The cups should +also be chosen randomly, placed near one side, and shifted only along the +table's length. They should also rotate and, perhaps, sometimes not appear at +all. We can implement this as follows: + +``` +className:t="composit" + +node{ + rot_y:p2=0, 10 + ent{ + name:t="table_a"; + } + ent{ + name:t="table_b"; + } + node{ + offset_y:p2=0.7, 0 + offset_z:p2=0.2, 0.05 + offset_x:p2=0, 0.25 + rot_y:p2=0, 180 + ent{ + name:t="cup_a"; + } + ent{ + name:t="cup_b"; + } + ent{ + name:t=""; + } + } +} +``` + +Breaking it down: +- The parent node has a random rotation from −10° to 10°. One of the tables is + drawn with equal probability since each entity has a weight of one, as we + didn't manually set a different value. +- The cup node is nested inside the table node, meaning its offset occurs + relative to the table, considering its rotation. Afterward, an absolute offset + of 0.7 meters upward is added – the cup should always be on the tabletop, no + randomization needed. But since we want to randomize other transforms, we + can't use a matrix, so we set it this way. +- We then shift closer to the edge by 0.2 meters to place it off-center and add + a bit of randomness – from 0.15 to 0.25, so it doesn't fall off at the + extremes. +- Along the table's length, the distance is more significant – let it randomize + equally in both directions. The absolute offset is not set, and the deviation + is from −0.25 to 0.25 meters. +- Finally, we add a completely random rotation – from −180° to 180°. + +![Randomized rotation](_images/comp_blk_table_cup.jpg) + +```{important} + +For one-time use, this approach is faster than the old method, where a separate +subcomposite was created for each random element. One for selecting cups and +their rotation. Another for choosing the table. Then one for placing the cup on +the table with an offset. And finally, the top-level one, which slightly rotates +the table with the cup on it. But here – just one! However, if cups are to be +placed, for example, on shelves or in cabinets, it makes more sense to store +them in their own subcomposite so you don't have to add a third cup to the +table, cabinet, and shelf composites one by one. If cups are only found on these +tables for some reason, then yes, don't create unnecessary entities. + +Thus, the correct application of this approach is for parts of a whole, which +shouldn't be found with the same set of transforms. For example, randomly +opening car doors, the hood, or the whole/intact/missing windshield in their +coordinates relative to the body can be done this way. Similarly, cabinet doors, +unless it's a modular system with the possibility of attachment at different +coordinates. + +If composite parts might be needed elsewhere, move them to a subcomposite to +simplify reuse and potential future edits. If a node with certain transforms and +randomness is only required once, for example, as part of a unique object, the +single composite approach is preferable. + +``` + +## Game Objects + +### Overview + +Game objects, or `gameObj`, are interactive elements within the game that are +dynamic and have a direct impact on gameplay. Examples of such objects include +health kits, ammunition, weapons, and other equipment. These objects are +automatically generated from an object known as `loot_box`. + +Typically, these objects are placed on various horizontal surfaces such as +tables, chairs, shelves, and cabinets. + +### Example Node Description + +``` +node{ + name:t="loot_box:gameObj" + tm:m=[[0.3, 0, 0] [0, 0.3, 0] [0, 0, 0.3] [0, 0.6, 0]] +} +``` + +In this block `name:t="loot_box:gameObj"` specifies the object name along with +its type. The format is mandatory. + +As discussed earlier, while omitting the type might work if there are no +conflicting assets of different types, it is crucial to specify the type when +editing the composite in text format. This ensures clarity and prevents +errors. + +### Creation Process + +Unfortunately, these nodes are not generated automatically through *dag2riRes* +or the *daEditor*. They must be manually scripted. + +You can (and should) place a cube named `loot_box` at the desired locations in +your scene/editor and then export them into a composite. The placement process +is identical to that of regular render instances. However, all these cubes will +initially be recorded as: + +``` +name:t="loot_box" +``` + +Therefore, after exporting, you will need to manually update each of these +objects within the composite, assigning them the correct parameters as described +above. + +```{important} +After adding game objects to a composite, it is **mandatory** to name it using +the format `*_gameobj.composit.blk` to distinguish it as a simple composite +object. +``` + +### Other Types of Game Objects + +`loot_box` is not the only type of game object that needs to be placed in the +environment. Other commonly used game objects include `indoor_wall`, +`wall_hole`, and `envi_probe` for accurate indoor lighting and reflections, +vertical ladders, light sources, such as flickering lights, and many more. + +## Chain Destruction and Composite Nodes + +### Chain Destruction + +We can assign certain assets the *parent* type within the game's parameters (not +within the models – this is done in our internal `.blk` files). All objects +without an assigned *parent* are considered *children*. When a *parent* is +destroyed, all *children* whose collisions intersect the bounding box of the +*parent* will also be destroyed. + +```{important} +The system operates strictly as follows: **One *parent* destroys all *children* +whose collisions intersect its bounding box.** + +This means: + +- *Children* cannot destroy *parents*. +- *Children* **cannot** destroy other *children*. Only those *children* whose +collisions intersect the bounding box of the *parent* will be destroyed. +- No subsequent chain of destruction will occur; the system is rigid and does +not support additional logic beyond these rules. + +``` + +#### Examples + +Let's take an example, where we have an urn as a *parent*: + +![Urn as a parent](_images/comp_blk_parent.jpg) + +and an amphora as a *child*: + +![Amphora as a child](_images/comp_blk_child.jpg) + +**Placement Scenario 1:** All correct. The *child’s* collision (the "spike" +at the bottom) enters the bounding box of the *parent* urn. Destroy the +*parent*, and the amphora will also be destroyed. + +![Placement Scenario 1](_images/comp_blk_option_1.jpg) + +**Placement Scenario 2:** Ambiguous. If we want to destroy the amphora +through the urn, it's correct – the side collision of the amphora enters the +urn's bounding box. But if we don't want that (since the amphora is just +standing next to the urn, not on it), it’s incorrect. The amphora will be +destroyed because of the urn. + +![Placement Scenario 2](_images/comp_blk_option_2.jpg) + +**Placement Scenario 3:** Incorrect. The *parent* urn is hanging in the air. +Destroy it, and the amphora will collapse too. But if we destroy the amphora, +the *parent* urn will remain hanging. + +![Placement Scenario 3](_images/comp_blk_option_3.jpg) + +**Placement Scenario 4:** Incorrect. When the *parent* urn is destroyed, only +the middle amphora will be destroyed because its collision enters the *parent's* +bounding box. The top amphora will remain hanging in the air. + +![Placement Scenario 4](_images/comp_blk_option_4.jpg) + +**Placement Scenario 5:** As an exception, *parents* can destroy other *parents* +following the same rules (and only within the immediate "circle" – collision +contact with the first destroyed *parent* is required). A special parameter must +be manually defined in the properties (in the same `.blk` files) to enable this. +It is not a default behavior for all *parents*, but a specific feature. + +![Placement Scenario 5](_images/comp_blk_option_5.jpg) + +```{important} +Do not overuse this feature, as it is difficult to predict how and where objects +will be positioned in the game. For instance, we once allowed this *parent* +barrel to destroy other *parents*. It successfully took down a *parent* tent and +*parent* ammunition crates, as shown above. +``` + +### Object Placement Rules + +**Why Discuss Destruction in this Section?** + +Because developers often forget that **the game knows nothing about +composites.** This has already been emphasized multiple times at the beginning, +and let's discuss it again. + +Only the objects and their matrices are exported into the game. A vast hierarchy +of a house with decorators, down to the last random composite vase, will be +exported into the game as a hundred objects with matrices. **No composites will +exist in the game!** + +Similarly, objects cannot just destroy their neighbors arbitrarily. Only +*parents* destroy *children* (and sometimes other *parents*). + +Thus, do not create composites where objects are stacked mindlessly on top of +each other! **A composite is not magic.** It’s merely a list of objects – it +won't assist with destruction mechanics! + +#### Examples + +**Placement Scenario 1:** Canned cans on a cupboard shelf. Logically, the only +*parent* here is the cupboard. Destroy it – everything inside it wil be +destroyed. It turns out that the cans lie on top of each other and they are not +*parents*. If we shoot the bottom can – the top one will remain hanging in the +air. + +![Placement Scenario 1](_images/comp_blk_option_6.jpg) + +**Placement Scenario 2:** On top of the closet are individual *non-parent* +objects: an upside-down shoebox lid, the shoe box itself inside the shoe box lid +and a shoe inside that shoe box. According to the rules this is incorrect, +because you can try and shoot the lid from under the box, and the box from under +the shoe. But here the thicknesses and dimensions are so small that this can be +neglected. This is an acceptable violation that in most cases will never be +noticed. + +![Placement Scenario 2](_images/comp_blk_option_7.jpg) + +**Placement Scenario 3:** The issue has already been resolved, so here is an old +screenshot that doesn't quite capture the correct angle. In the center, we can +observe a typical problem where the *child* object (a basin) hasn't been +properly aligned with its *parent* (a wardrobe), which at this point has already +been destroyed. However, our focus here is on the arrangement to the right – the +artistic stacking of basins on top of the wardrobe. It looks impressive, but it +will be 100% noticeable when the lower basins start getting destroyed before the +upper ones. + +![Placement Scenario 3](_images/comp_blk_option_8.jpg) + +```{important} +**Summary:** + +1. Avoid stacking objects on top of each other without clearly defining which is + the *parent* and which is the *child*. + +2. *Child* objects should only be placed on their *parent* in a single layer. + Any objects that do not collide with the *parent's* bounding box will not be + destroyed correctly. + +3. If you need to create a complex composition that cannot be achieved with the + current setup due to these limitations, request permission to create a unique + rendering composition that will break apart using a destruction mechanism. +``` + +### Hierarchy of Composites + +#### Problems with Poor Hierarchy + +A common issue when creating composites is that all objects are often placed +within a single large composite. The rationale behind this approach is +understandable – it's easier to arrange everything in one scene, export it, and +forget about it. + +However, the problem is that work with composites never truly ends there. Errors +are inevitable, and revisions are guaranteed. At some point, these revisions +will occur directly in the composite's `.blk` file, not in the original scene +where everything was initially arranged. Once this happens, the original scene +becomes obsolete, and all work shifts to the `.blk` file. + +This can lead to significant issues. For example, consider a composite: + +![Interior](_images/comp_blk_interior_1.jpg) + +Imagine that every object here is not part of a subcomposite but is instead +manually placed within this composite (for the sake of example, though this is +not actually the case). + +Let's examine the typical problems that might arise using this setup. Take this +cabinet with vases: + +![Cabinet with vases](_images/comp_blk_interior_2.jpg) + +Notice that it’s placed in several locations: + +![Cabinet with vases at several places](_images/comp_blk_interior_3.jpg) + +The designer, seeking efficiency, may simply copy and paste the entire setup +elsewhere in the scene. The result is identical arrangements throughout the +house, with perhaps one or two vases changed to give the illusion of randomness. + +We've previously discussed chain destruction. Now, imagine you didn’t quite +align one of the vases with the cabinet, and it ends up hanging in the air when +the cabinet below is destroyed. + +This introduces several problems: + +- Remember, this setup has been copied across multiple locations in the house. +- Some vases may also be standing independently, scattered on the floor, for + instance. + +You’ll need to painstakingly search through the composite, identify each vase, +and adjust their positions individually. + +Now, consider needing to place this cabinet with vases outside, with the +landscape involved. Either the vases will clip through the cabinet, or they'll +float above it while the cabinet sits on the ground. + +Procedural rotations and shifts are nearly impossible in such a scenario. Keep +in mind that these adjustments often can't be automated and need to be manually +tweaked after tools like *daEditor* or *dag2riRes*. In a large composite, this +becomes utterly impractical. + +Additionally, performing simple randomization, such as swapping one cabinet for +another, becomes highly inconvenient. You’ll have to sift through hundreds of +lines. + +The root cause of these problems is the unreadability of the composite. It’s +nearly impossible to quickly make any adjustments in such a tangled mess. In +extreme cases, an entire house’s furnishings (minus the house itself) might be +crammed into a single composite, like this: + +![Entire house's furniture](_images/comp_blk_interior_4.jpg) + +Typically, we don’t assign tasks to "create a composite for a single house." +More often, the tasks involve "creating 15 houses with full furnishings," +handled by 5-8 different team members. Each person ends up spending an enormous +amount of time individually setting up unique render instances for their houses, +instead of leveraging low-level random composites created by a dedicated team +member—a method that could save everyone hours of work. + +It's understandable that every artist wants to create something unique, perhaps +to tell a story or guide the player towards a specific thought, like "this is +where the homeowner loved to admire their favorite vase on this cabinet." But no +one will notice these details because in an online shooter the environment needs +to: + +- Fit seamlessly into the overall scene; +- Not interfere with gameplay. + +What players will notice is a poorly placed object that disrupts their aim due +to collision issues. You will notice the massive headache when you try to find +that object in a composite with hundreds of lines. And your colleagues will +notice the time wasted on manually arranging objects instead of using pre-made +sets. + +```{important} +**Summary of Problems** + +- Uncontrolled propagation of errors. +- Inability to align object groups with terrain. +- Lack of variety. +- Excessive time spent manually adding variety to the scene. +- Unreadable composite files, making it extremely difficult to understand what + is located where and what it controls. +- Inability to reuse composites, preventing the use of ready-made asset groups + in neighboring houses. +``` + +To avoid these issues, it's crucial to adhere to strict composite hierarchy +rules. + +#### Proper Hierarchy + +The hierarchy of composites should be broken down to the smallest procedural +modification of an object. Let’s use the example of vases and cabinets: + +1. **Create composites for each small procedural modification of an object:** + + - Procedural rotations/shifts (e.g., rotating vases around their axis). + - Object randomization (e.g., swapping cabinets or vases for similar ones). + +2. **From the composites created in step 1, build composites for object + groups.** + - Create several variations of vases arranged on a cabinet. + - Combine these variations into a single random composite like "random vase + arrangement on cabinet." + +3. **From the composites created in step 2, create a random composite for + "cabinets with random vase arrangements."** + +4. **From the composites created in step 3, assemble a composite for furnishing + a large object, such as "random cabinets with vases placed around the + object."** + +5. **Finally, include the composite from step 3 in the overall "house" + composite, along with similar composites for "windows-doors," "exterior + decor," "interior decor," etc.** + +```{note} +Unfortunately, there is no universal composite structure – it all depends on +what you’re creating. If you need a random composite for a single cabinet, you +might only need one level of hierarchy – a random composite for that cabinet, +where you can specify shifts, rotations, and randomization. + +But if you're creating a furniture and dishware store, you may need 3-6 levels +of composite hierarchy. + +The key is to start with the lowest level of composites and work your way up +step by step. This approach ensures everything remains as editable and fixable +as possible. You'll be able to resolve any placement issues across all game maps +by simply tweaking a few numbers in one small, unobtrusive file. +``` + +## Nuances about Composites + +### Additional Notes on Naming Conventions + +As previously mentioned multiple times throughout this chapter, including at the +beginning, let's clarify a few key points: + +1. **Composites vs. Render Instances:** Unlike render instances, composites + don't take up space in the game client (they simply aren't included). + Therefore, it’s not a significant issue if you copy successful composites + from other maps and rename them for your own purposes. This approach helps + you avoid potential problems if the original composite’s creator decides to + modify it, which could disrupt your setup. + +2. **Detailed Naming:** Always name composites as descriptively as possible, + including all relevant prefixes and suffixes designated for both composites + and render instances. This is crucial because, for example, you might create + a composite intended for interior use but fail to include the `is_` prefix. A + colleague might then mistakenly use it outdoors and add landscape alignment, + causing the composite to sink into the ground in all your buildings. + +3. **Proper Use of Composites:** Those placing existing composites should also + pay close attention to their intended use. If a composite is clearly marked + for interior use, **do not** place it outside. Instead, duplicate it, give it + a new name, and avoid any issues. + +4. **Random Composites:** If the composite involves randomization, include the + numbers of the randomized objects in the name. For example, + `is_table_abc_random.composit.blk`. + +5. **Content Ownership:** Clearly indicate the thematic ownership of a composite + in its name. For instance, if you're creating a composite of ancient vases, + name it accordingly so that colleagues don't unknowingly place it in a + futuristic setting. + +### Object Placement on Terrain and Relative to Each Other + +You might have noticed that when exporting composites from the editor, they +often include an additional parameter, `place_type:i=1`, in the nodes. For +example: + +``` +node{ + name:t="fachwerk_horse_cart_a_cmp" + tm:m=[[0.999018, 0, -0.0443057] [0, 1, 0] [0.0443057, 0, 0.999018] [-6.7688, 0.0028134, -1.22241]] + place_type:i=1 +} +node{ + name:t="haystack_i" + tm:m=[[0.020657, 0, 0.999787] [0, 1, 0] [-0.999787, 0, 0.020657] [6.92909, 0, -1.47888]] + place_type:i=3 +} +``` + +These values can range from 1 to 6 (or potentially even higher). + +This occurs because you exported objects that were placed on the terrain +according to specific rules. + +![Object properties](_images/comp_blk_object_prop.jpg) + +**Placement Types:** + +- **place pivot - place_type:i=1:** Vertical placement of the object's pivot on + the terrain (pivot in Dagger is at 0.0.0). Suitable for large, tall objects + that extend deep into the ground (buildings, poles, large piles of + debris)—essentially anything unaffected by terrain height variations. + +![place_type:i=1](_images/comp_blk_place_type_1.jpg) + +- **place pivot and use normal - place_type:i=2:** Placement of the pivot on the + terrain, using the normal at the pivot point (if the terrain is uneven, the + object will tilt according to the normal). Best for smaller items that need to + conform to the terrain's shape (e.g., barrels, buckets, bicycles, cans). Large + objects might not align correctly if their pivot is on the edge of a slope, + causing part of the object to float in the air. Use this only for small + assets. + +![place_type:i=2](_images/comp_blk_place_type_2.jpg) + +- **place 3-point (bbox) - place_type:i=3:** Placement using three points of the + object's bounding box. The bounding box is built based on the object's maximum + geometry limits, and the object is placed on the ground at three of its + extreme points, accounting for terrain height variations. This method is more + precise than type 2 but slightly more demanding on the editor. It’s needed for + large objects that must conform to terrain undulations (e.g., haystacks, piles + of boards, ladders, carts, vehicles). + + ![place_type:i=3](_images/comp_blk_place_type_3.jpg) + + ```{note} + If the object extends below zero (e.g., piles, foundations), it may be pushed + up because the placement is based on the bounding box, which is built on the + outermost geometry points. For such objects, use types 1 or 2. + ``` + +- **place foundation (bbox) - place_type:i=4:** Vertical placement on the + terrain so that the entire base of the bounding box is **not above** the + terrain. The object may partially extend below the terrain but will never + float above it. + + ![place_type:i=4](_images/comp_blk_place_type_4.jpg) + +- **place on water (floatable) - place_type:i=5:** Vertical placement on a water + plane (yes, water has a plane). + + ![place_type:i=5](_images/comp_blk_place_type_5.jpg) + +- **place pivot with rendInst collision - place_type:i=6:** Vertical placement + of the render instance’s pivot on the collision of another render instance. + + ![place_type:i=6](_images/comp_blk_place_type_6.jpg) + + Works well on simple objects: + + ![place_type:i=6](_images/comp_blk_place_type_6_1.jpg) + + but struggles with complex ones as it may not correctly identify the collision + surface: + + ![place_type:i=6](_images/comp_blk_place_type_6_2.jpg) + +```{important} +When exporting composites from the *daEditor*, ensure you set the placement +types for each component of the future composite (e.g., every barrel, bucket, +and vehicle). + +When exporting composites from a *3ds Max* scene, manually assign these +parameters to the appropriate objects in the final composite. + +Do not export composites without these parameters and then apply them to the +entire composite afterward (e.g., setting the entire exterior decoration +composite of a house to `place_type:i=3`). This often leads to bugs, as it’s +unclear what is used as the pivot or bounding box. + +Always assign the correct placement types to the objects intended for them. +``` + +## Object Placement Precision + +In any game, objects are placed on a grid according to their pivot point (recall +that the pivot for Dagger is at 0.0.0). This means that objects cannot be placed +with greater precision than the smallest unit allowed by the grid, which we can +refer to as the *Dagger millimeter*. + +As a result, objects placed in non-zero positions will align perfectly only when +the composite has no rotation or offset. + +For instance, a house with DP (dynamic positioning) components will remain +perfectly aligned regardless of rotation or displacement because both the +house’s base and its DP components are exported relative to zero at the correct +positions. They are exported this way to ensure optimal placement. + +However, objects like windows, doors, or paintings that are hung on walls made +of debris or bricks may "drift" when the composite is rotated or moved, +especially paintings. But don't worry. + +In *War Thunder*, the placement grid isn't precise enough for this to cause +significant issues – we have large margins for error. In *daNetGame-based* +games, this "drifting" only happens in the *Asset Viewer* and *daEditor*. When +the location is exported, a much higher level of precision is used than in the +tools, so objects generally align correctly. While you should check the final +placement, you don't need to worry that it will be "just as bad" as it appears +in the *daEditor*. + +### Examples + +- **Editor View**: + +![Editor view](_images/comp_blk_editor_view.jpg) + +- **In-Game View:** + +![In-game view](_images/comp_blk_in_game_view.jpg) + +### Special Parameters + +Composites have several parameters designed for specific, limited-use cases. + +#### War Thunder + +**`quantizeTm:b=yes`**: This parameter should be applied outside the nodes +(immediately after the line `className:t="composit"`) when combining the +geometry of a render instance with the collision of a prefab in a composite. + +These object types have different positioning precision on the map (prefabs are +less precise). Additionally, prefabs have even less precision when it comes to +rotation. Therefore, when combining these two objects, the collision almost +always fails to align with the visual geometry. + +This parameter forces the prefab to align exactly with the coordinates of the +render instance. + +``` +className:t="composit" +quantizeTm:b=yes +node{ + tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]] + node{ + name:t="sheer_cliff_a" + tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]] + } + node{ + name:t="sheer_cliff_a_prefab_collision:prefab" + tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]] + } +} +``` + +#### daNetGame-based Games + +**Random Object Seeds**: In *daNetGame-based* game, all objects within a +composite, for example, share the same color scheme. This means you won’t find a +house with windows and doors of varying colors – the colors differ as you move +across the map, but each house’s windows and doors will always share a uniform +color. + +This is intentional – each composite is assigned exactly one seed (a randomly +chosen value, essentially). This seed is applied from the top-level composite +down to the most nested object. + +This approach has pros and cons. For instance, all the furniture, toys, and +dishes inside a house will be uniformly colored. This makes it impossible to +create something like a fabric shop, where you’d expect fabrics of different +colors, because all the fabrics will share one color. Similarly, identical +furniture items will show the same level of wear. + +This can be addressed using the `ignoreParentInstSeed:b=yes` parameter, which is +applied to the specific object (or composite) that should have a different seed +from the parent composite. + +For example, if you want each piece of fabric in a store to have a different +color, you need to apply this seed to **each fabric node** within the composite, +not to the overall "arranged fabrics" composite. Otherwise, the entire composite +will have a different seed, but the objects within it will share a single seed. + +**Correct Example**: The shoe and its box will have different seeds and +therefore different colors. + +``` +node{ + name:t="is_high_heel_shoe_a" + ignoreParentInstSeed:b=yes + tm:m=[[0.0888685, 0.939605, 0.205868] [0.49344, -0.244331, 0.902145] [0.896062, 0.0213662, -0.484326] [-2.40811, 1.9364, -31.9424]] +} +node{ + name:t="is_high_heel_shoebox_a_opened" + ignoreParentInstSeed:b=yes + tm:m=[[0.0765914, 0, -0.997063] [0, 1, 0] [0.997063, 0, 0.0765914] [-4.67105, 2.93796, -24.8412]] +} +``` + +**Incorrect Example**: Although the entire composite of items will have a +different seed from the main composite, all items within it will share the same +seed. + +``` +node{ + name:t="city_1_department_store_shops_stuff_cmp" + ignoreParentInstSeed:b=yes + tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]] +} +``` +```{important} +**Summary** + +Apply this parameter to specific render instances or composites that need to +have a different seed from the main composite. + +**Do not** apply it to the entire composite expecting everything inside to +become randomized – it won’t. All nested objects will still share a common seed, +even if it differs from the main composite’s seed. +``` + +### Checklist + +Before considering composites as finished, you should verify the following: + +- **Correct display of the composite object in Asset Viewer**: Ensure nothing is + misplaced or missing, and everything appears as intended. + +- **Correct generation of variable objects using the "Generate Random Seed" + button in the right panel**: Check that nothing overlaps or disappears + unexpectedly, and no extra objects are loaded. + +- **No errors in the Asset Viewer log**: Monitor the console for red error lines + related to asset display issues in the composite due to incorrect naming, + missing textures, or other unfinished work. + + The composite log typically only indicates that an object isn’t displaying. + You’ll need to open the problematic object itself to see what the log says + about it. + +## Creating a Standard Composite Object + +Having discussed the structure and theory behind composite objects, let’s now +delve into the actual creation process. There are several methods available for +creating a composite object, each with its own advantages and disadvantages: + +- [**Manual Creation**](#manual-creation) +- [**Using the daEditor**](#using-the-daeditor) +- [**Using the dag2riRes Script**](#using-the-dag2rires-script) +- [**Using the Composite Editor in Asset Viewer**](#using-the-composite-editor-in-asset-viewer) +- [**Using the dag4blend Add-on in Blender**](#using-the-dag4blend-add-on-in-blender) +- [**Creating Random Composites in 3ds Max**](#creating-random-composites-in-3ds-max) + +### Manual Creation + +There isn't much to elaborate on here. You simply create a file with the +extension `.composit.blk` and manually define a series of nodes, specifying the +object names and their coordinates. + +This method is only practical when you need to add parts of a single object +without any offsets, such as the walls of a house, its indoor furnishings, +decals, decor, and ground (everything being geometry or subcomposites centered +at the house's "zero" point). + +**Pros:** + +- All composite object parameters are accessible in a single text file. +- No need for the original scene file; you only need a new or existing + `.composit.blk` file. + +**Cons:** + +- **Blind Work:** You can’t see the result while working, making it challenging + to align objects correctly. +- **Matrix Definitions:** Manually defining matrices is virtually impossible – + let the computer handle that. + +This method is typically used as part of a pipeline to refine non-random +composite objects generated by other means. + +### Using the daEditor + +This method is simple: + +1. Place the necessary objects in the editor as desired. +2. Select the objects, starting with the central one (which will later become + the composite’s center). +3. In the **Landscape** tab, select the **Export as Composit** option: + + ![Using daEditor](_images/comp_blk_using_editor.jpg) + +**Pros:** + +- Easy to apply. +- Unlike the manual method, it simplifies editing object transforms – matrices + are automatically calculated. + +**Cons:** + +- **Composite Center:** You can't control the composite’s center. When selecting + multiple objects with a frame, it’s impossible to predict which one will + become the "zero" point. When selecting objects sequentially, the first + selected object becomes the "zero" coordinate, which isn't always convenient. + You can’t set a center outside of an object. +- **Random Transformations:** Only fixed matrices and specific assets are + allowed; you can’t set random transformations or objects. + +A workaround is to add an additional object at the desired center, start +selecting from it, and then delete this placeholder after exporting the final +composite. However, this isn't particularly convenient. + +This method is typically used to create simple object sets (e.g., piles of +debris, rows of barrels, log stacks). Adding randomness requires further +refinement by other methods. + +### Using the dag2riRes Script + +This is another relatively simple method. While the description may seem +complex, after trying it out, the steps will become logical and clear, requiring +minimal effort from the developer. The key is to follow the steps in order, as +missing one will force you to start over. + +The idea behind this method is to assemble the composite from objects in *3ds +Max*, export them as a `.dag` file, and then use the script to convert `.dag` +into `.composit.blk`. The script also allows you to split all objects exported +into one `.dag` file into individual `.dag` files. + +**Pros:** + +- **Real-Time Preview:** Move nodes directly in the viewport with instant + feedback. +- **Snapping Option:** Allows for more precise placement of objects if needed. + +**Cons:** + +- **No Randomization:** You can’t define random transformations or entities. +- **No Include Statements:** Unable to include general transformations. + +**Workflow:** + +1. Import all the base-level LODs of models into one scene that you plan to use + in the composite. +2. Attach each model into a single object (if they were split across multiple + objects in their scenes). +3. Name each model as its corresponding DAG, minus the `.lod00.dag` suffix + (e.g., if the DAG is `table_a.lod00.dag`, name the model `table_a`). +4. Reset the model's pivot to `0.0.0`, and zero out rotation and scale. Failing + to do so will result in incorrect matrix calculations in the final composite + (non-zeroed parameters will affect the matrices). + - For example, if the pivot isn’t at `0.0.0` but remains a meter along the + X-axis, the model will shift that distance in the composite. +5. Assign a three-digit postfix to each object: `*_000` (e.g., `table_a` becomes + `table_a_000`). + - When cloning, ensure the three-digit postfix remains intact: `table_a_001`, + `table_a_002`, etc. +6. The object that will serve as the composite’s center should have the postfix + `*_origin` instead of `_000` (e.g., `table_origin`). +7. Position the objects as desired, cloning them within the scene as references + or instances. Ensure the rotation, position, and scale match your intended + adjustments. +8. Export the final layout as a single `.dag` into the directory with the + *dag2riRes* script. It’s easier to keep the DAG name consistent to avoid + confusion later. +9. Run the script, which will generate a `composit.res.blk` file alongside the + `.dag` (more details below). +10. Rename and move the `composit.res.blk` file to the desired location. Ensure + the composite name is correct – refer to the beginning of the document for + naming conventions. + +```{important} +If several nodes in the *3ds Max* scene are linked into a hierarchy before +export, the script will treat the entire hierarchy as a single node named after +the root object. +``` + +**Running the dag2riRes Script:** + +1. Open FAR or the command line. +2. Navigate to the `_Dag2riRes` directory. +3. Enter the following command: + + ``` + dag2riRes-dev.exe -s: -d:simple_dags -no_tex + ``` + + where `` is your DAG file’s name. You can assign any name. + +**Naming Reminder:** + +Make sure to name the final composite correctly! Not just the name but also the +postfixes. + +- `*_cmp.composit.blk` – Simple composite object. +- `*_random.composit.blk` – Composite object with randomization (object + substitution, object disappearance). +- `*_gameobj.composit.blk` – Composite object containing game objects. + +### Using the Composite Editor in Asset Viewer + +It's a relatively new option, still under development, so some basic features +might be missing at the time of writing and will be added over time. + +**Pros:** + +- **Highly Visual:** You can see the results of your work in real-time in the + viewport. +- **Works with .composit.blk:** Allows editing existing composites without + needing the original *3ds Max* scene. +- **Randomization:** Nodes can be created with random entity selection. +- **Transform Randomization:** Nodes can be created with random transforms. + +**Cons:** + +- **In Development:** Performance issues when editing large composites + (thousands of nodes), especially noticeable in *daNetGame-based* games due to + frequent use of multiple nested structures. +- **No Multi-Node Selection:** Can only move nodes one by one. +- **No Undo:** If you move a node and change your mind, you must either manually + revert it or reload from disk, losing all unsaved changes. +- **Limited Gizmo:** Only available in world coordinates – can't move an asset + along one of its own axes in the viewport. +- **No Include Support:** Currently, there is no support for `include` + statements. +- **Interface Development:** Some elements might not be intuitive. + +In addition to adding `includes`, it allows you to fully create a hierarchy of +composites. + +### Using the dag4blend Add-on in Blender + +It's part of the *dag4blend* add-on, which was previously a simple +importer-exporter. It's a new option, also under development. + +**Pros:** + +- **Composite Import:** You can import composites without needing the original + *blend* scene. All you need is the `.composit.blk` file and the asset DAGs + (applicable only to the version with geometry import). +- **High Visual Clarity:** The workflow is highly visual, making it easier to + see and manage your changes. +- **Convenient Workflow:** Features like snapping, multi-node selection, and + more make it significantly easier to work with, similar to the ease of use in + *3ds Max*. +- **Random Entity Nodes:** You can directly create nodes that include random + entity selection. +- **Random Transform Nodes:** You can directly create nodes with randomized + transforms. +- **Subcomposite Editing:** You can decompose and edit any subcomposite at its + final position within the parent composite, allowing you to see the exact + final node placements. +- **Composite-to-DAG Conversion:** Offers the ability to convert composites into + DAGs. +- **Game Object Conversion:** Allows converting `gameObj` nodes into meshes and + converting a mesh’s bounding box into a `gameObj` node, which simplifies the + placement of elements like indoor walls, wall holes, environmental probes, + etc. + +**Cons:** + +- **No Include Support:** Currently, there is no support for `include` + statements. +- **Limited Random Node Preview:** The visibility of entities within random + nodes must be manually toggled; they are not randomized automatically. +- **Game Object Preview:** The preview for `gameObj`s must be manually + configured; otherwise, they appear as empty nodes. +- **No Random Transform Preview:** There is no preview available for randomized + transforms. +- **Axis Confusion:** *Blender* uses the Z-axis as the upward direction, whereas + the Dagor Engine uses the Y-axis. This difference must be considered when + defining parameters for random transforms. + +### Creating Random Composites in 3ds Max + +When planning to use random objects in nodes, it's best to prepare for this in +advance, during the composite assembly in *3ds Max*. This is crucial to avoid +randomization issues later. If you skip this step, you might find a chair +clipping through a table, or a table through a dresser in the final composite. + +For instance, suppose you want to create a random composite of chairs placed +around a table, with the chairs being of different sizes and shapes. You would +combine them into one object and name it after the final random composite (e.g., +`chairs_abc_random` for a composite named `chairs_abc_random.composit.blk`). + +![Using 3ds Max](_images/comp_blk_using_3ds_max.jpg) + +You should use this combined geometry during placement to see the boundaries of +the objects that will be randomized in the node. + +To configure the randomization itself, further refinement of the composite by +other methods is necessary. + diff --git a/_sources/assets/all-about-blk/config_and_settings_blk.md.txt b/_sources/assets/all-about-blk/config_and_settings_blk.md.txt new file mode 100644 index 000000000..7e215cd06 --- /dev/null +++ b/_sources/assets/all-about-blk/config_and_settings_blk.md.txt @@ -0,0 +1,44 @@ +# .config.blk and .settings.blk + +Dagor-based games use a primary configuration file named `.settings.blk` +(referred to as `dgs_settings` in the game code) for fundamental settings. For a +detailed description of the file format, see +[.blk File Format](../../dagor-tools/blk/blk.md#blk-file-format) section. + +## Purpose of .settings.blk + +`.settings.blk` stores essential settings such as: + +- Resolution +- Debug settings +- Video mode +- Sound settings + +In general, any settings required before the game is fully initialized are found +here. + +## Configuration Management + +1. **Automatic Patching**: The engine automatically attempts to patch + `.settings.blk` with `.config.blk`. When the game modifies settings, it saves + them to `.config.blk`, which is then applied to `.settings.blk` upon loading. + +2. **Allowed Overrides**: The permissible overrides are specified within the + `__allowedConfigOverrides{}` block in `.settings.blk`. In non-release builds, + all settings are allowed to be overridden. + +3. **Command Line Modifications**: Any property that can be overridden may also + be modified via the command line. For example, running `game.exe + -config:debug/watchdog:b=no` is equivalent to adding `debug{watchdog:b=no}` + to `.config.blk`. + +## Game-Specific Adjustments + +In certain games, the `.settings.blk` and `.config.blk` files are named +`.settings.blk` and `.config.blk`, respectively. The +`` is provided via the `-game:` command line argument or +specified in the code. + +These mechanisms ensure a flexible and robust configuration management system +to meet different game requirements and development stages. + diff --git a/_sources/assets/all-about-blk/folder_blk.md.txt b/_sources/assets/all-about-blk/folder_blk.md.txt new file mode 100644 index 000000000..11f9c6220 --- /dev/null +++ b/_sources/assets/all-about-blk/folder_blk.md.txt @@ -0,0 +1,376 @@ +# .folder.blk + +## .blk File Types + +The [`.blk` files](../../dagor-tools/blk/blk.md#blk-file-format) interacting +with *assets* (all types of resources in *Dagor Engine*) can be categorized +into: + +- resource `..blk` file types – the `.blk` files that process the + asset itself (extract collision, animation, create destruction, etc.) to + create a game resource of a certain class. A list of supported resources in + your project can be found in `application.blk`. +- `composit.blk` – the `.blk` files that describe the handling of the final game + resource (composites). + +We will focus on `..blk` files in more detail. + +```{seealso} +For more information on composite files, see [.composit.blk](./composit_blk.md). +``` + +After exporting from *3ds Max*, we usually obtain a `.dag` file or a `.tif` file +in the case of textures. These files are inert and cannot be used without the +engine's tools, and the engine needs instructions on how to handle them. + +This is where `..blk` files come into play. They define the +processing parameters for assets, turning them into "virtual" resources. From a +single `.dag` file, we can generate an level of detail (LOD), collision, +skeleton, and more, provided the necessary objects and properties are included. + +The `..blk` files must be named according to the final resource name +in the game (in the [*Asset +Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md)) and must +contain the asset type (``) in the filename, as it contains semantics +that are used later in config interpretation. + +For example: + +- `hangar_watch_tower_d.rendinst.blk` – game resource `hangar_watch_tower_d` + (rendinst), +- `hangar_watch_tower_d.blk` – same as above, but it can be a rendinst or prefab + (defined within the file), +- `hangar_watch_tower_d_collision.collision.blk` – game resource + `hangar_watch_tower_d_collision` (collision), +- `airfield_workshop_a_overlay.tex.blk` – game resource + `airfield_workshop_a_overlay` (texture). + +To avoid manually creating a `.blk` file for every simple asset, such as `.dag`, +textures, skeletons, animations, dynamic models, etc., *Dagor* supports a highly +flexible system for creating virtual assets. + +`.folder.blk` is a type of resource `..blk` files that process assets +in batches. + +The `.folder.blk` file places in the assets directory and in most cases, it is +sufficient to simply place textures and models in the appropriate directories. +All numerous rules, such as LOD switching distances, texture conversion rules, +etc., will be created automatically. + +```{note} +Resources must be uniquely named. In most cases, everything works fine if +resources are uniquely named within their type, but it is preferable to have a +fully unique name. +``` + +## Syntax of .folder.blk + +### General Principles + +The `.folder.blk` file defines how and where assets are exported, how they are +found, and the rules for creating virtual resource `..blk` files. + +For assets, the `..blk` rules are always applied first if they exist +(i.e., if `my_asset.dynmodel.blk` exists, the rule for creating an asset named +`my_asset` will not be executed). Afterward, the rules from the `.folder.blk` +file next to the asset are applied, followed by the rules from `.folder.blk` +files higher in the directory hierarchy until a `stopProcessing:b=true` +directive is encountered. + +To understand which rules apply to your file (e.g., `my_texture.tif` or +`my_model.dag`), start from the directory where the asset is located and look +for the nearest `.folder.blk` file up the hierarchy. + +```{seealso} +For more information, see +[.blk File Format](../../dagor-tools/blk/blk.md#blk-file-format). +``` + +## Asset Scanning and Export Rules + +### Basic parameters + +- `inherit_rules:b=true\false` – apply the rules from `.folder.blk` higher up + the hierarchy. +- `scan_assets:b=true\false` – scan assets in this directory. +- `scan_folders:b=true\false` – scan subdirectories in this directory. +- `exported:b=true\false` – whether the content is exported to the game. + + ```{important} + It is highly recommended to use a special directory with checkboxes if you are + going to make test assets that you want to commit and pass on to others, but + not include for everyone. + ``` + +#### Export{} Block + +The export parameters can be specified either directly through names or via +[special keywords](#special-keywords). + +##### Basic Parameters + +- `ddsxTexPack:t=""` – defines the name or texture packs for the current + directory and all nested directories, unless overridden by another rule, + possible values: , special keyword. + +- `gameResPack:t=""` – defines the name of resource packs for the current + directory and all nested directories, unless overridden by another rule, + possible values: , special keyword. + + **Examples:** + + ``` + ddsxTexPack:t="combat_suits.dxp.bin" + gameResPack:t="combat_suits.grp" + ``` + + ``` + ddsxTexPack:t="*name_src" + gameResPack:t="*name_src" + ``` + +##### Optional Parameters + +- `ddsxTexPackPrefix:t=""` or `gameResPackPrefix:t=""` – defines the prefix + before the package name, possible values: prefix. + + **Example:** + + ``` + ddsxTexPackPrefix:t="aircrafts/" + ``` + +- `package:t=""` – defines the name of additional resource packs, possible + values: or `*` – means put in root pack (default value). + + **Examples:** + + ``` + package:t="outer_space" + ``` + + ``` + package:t="*" + ``` + +##### Special Keywords + +- `*name_src` – the name of the directory containing the **asset** will be used + as the pack name. +- `*path_src` – the path to the directory containing the **asset** will be used + as the pack name. +- `*name` – the name of the directory containing the `.folder.blk` file will be + used as the pack name. +- `*path` – the path to the directory containing the `.folder.blk` file + will be used as the pack name. +- `*parent` – the name of the parent directory will be used as the pack name. + +##### Explanations + +1. For example, for this file structure: + +``` + dir_1 + ├── .folder.blk + └── dir_2 + └── asset +``` + +- `*name_src`, `*path_src`: the `dir_2` name (or `dir_1/dir_2` path) will be + used as the pack name. +- `*name`, `*path`: the `dir_1` name (or `dir_1` path) will be used as the + pack name. +- `*parent`: the `dir_1` name will be used as the pack name. + +2. This is how the `*parent` key works: + +```cpp + if (p[0] != '*') + { + if (p[0] == '/') + return p + 1; + if (!prefix[0]) + return p; + buf.printf(260, "%s%s", prefix, p); + return buf; + } + + if (stricmp(p, "*parent") == 0) + { + fidx = mgr.getFolder(fidx).parentIdx; + if (fidx != -1) + { + p = mgr.getFolder(fidx).exportProps.getStr(paramName, def_val); + continue; + } + p = NULL; + break; + } + else if (stricmp(p, "*name") == 0) + { + buf.printf(260, "%s%s%s", prefix, mgr.getFolder(fidx).folderName.str(), pack_suffix); + return buf; + } + else if (stricmp(p, "*name_src") == 0) + { + buf.printf(260, "%s%s%s", prefix, mgr.getFolder(src_fidx).folderName.str(), pack_suffix); + return buf; + } + else if (stricmp(p, "*path") == 0) + { + makeRelFolderPath(buf, mgr, fidx); + buf2.printf(260, "%s%s%s", prefix, buf.str(), pack_suffix); + return buf2; + } + else if (stricmp(p, "*path_src") == 0) + { + makeRelFolderPath(buf, mgr, src_fidx); + buf2.printf(260, "%s%s%s", prefix, buf.str(), pack_suffix); + return buf2; + } +``` + +#### Virtual Resource Blocks (virtual_res{}) + +Virtual resource blocks (`virtual_res{}`) are used to create assets. They are +applied sequentially from top to bottom within a `.folder.blk` file, and then +from `.folder.blk` files higher in the directory hierarchy, until a +`stopProcessing:b=true` directive is encountered or all `.folder.blk` files in +the hierarchy are processed. + +``` +virtual_res_blk{ + find:t="^(.*)\.dds$" + exclude:t="^(.*_nm)\.dds$" + className:t="tex" + name:t="low_$1" + stopProcessing:b=false + contents{} +} +``` + +##### Key Parameters + +- **find**: A regular expression to locate files for which the virtual resource + `..blk` will be created. +- **exclude**: A regular expression for excluding files that match the `find` + pattern. +- **className**: Specifies the type of asset in your project. +- **name**: The asset's name. By default, this corresponds to the first + capturing group in the `find` pattern (`name:t="$1"`). You can construct the + name using values from capturing groups ($1 ... $9) and other characters. +- **stopProcessing**: Defaults to `true`, meaning no further `virtual res blk` + rules will be applied to the matched file. Set to `false` if you want to + create multiple assets (e.g., dynamic model, render instance, prefab, + skeleton, character) from one texture/model. + +All other parameters are specified within the `contents{}` block and are +typically specific to the asset type. + +#### Specialized Blocks: content{}, tag{} + +Within the `contents{}` block, you can include specialization blocks based on +*tags*. Tags are generated from all directory names in the full path to the file +(excluding the base asset path). + +For example, for `develop/assets/test/warthunder/model/abc.tif`, the tags would +be `test`, `warthunder`, and `model`. Specialization block names follow the +format `tag:TTT{}`, such as: + +``` +contents{ + hqMip:i=1 + //... + "tag:warthunder"{ + hqMip:i=0 + } +} +``` + +If applicable specialization blocks are present (i.e., the full path contains +the specified tags), their contents are merged into the main `contents{}` for +the asset. If multiple specialization blocks apply, their contents are merged in +the order they appear within the `contents{}` block. + +This approach allows for different properties to be set for similar assets +located in various directories with specific names, without duplicating the +`.folder.blk`. + +#### Additional Details + +Typically, virtual assets do not need to specify the file name for the resource +parameter (such as the texture name or `.dag` file). These are passed by default +and equal to the name of the file from which the resource is created. However, +you can specify a different file if needed (e.g., creating a dynamic model from +`my_dynmodel.txt` with a reference to `dag_my_dynmodel.lod00.dag`). + +#### Common Parameters for Most Assets + +- `ddsxTexPack:t`, `gameResPack:t`, `package:t=`: See + [above](#basic-parameters-1) for details. +- `export_PC:b`: Whether to export the asset for the specified platform + (substitute `PC` with any 4-character platform code: `_PS4`, `_and`, `ios`, + `PS3`, etc.). + +## Using Regexp Rules + +[Regular expressions](https://en.wikipedia.org/wiki/Regular_expression) are used +in `.folder.blk` for resource generation, which starts with internal +subdirectories, not external ones. + +### Regular Expression Patterns + +1. **LOD Files** + ``` + find:t="^(.*)\.lod00\.dag$" + ``` +2. **Texture and Mask Files** + ``` + find:t="^((.*_mask)|(.*_tex_m))\.tif$" + ``` + +### Regular Expression Symbols Explained + +- `^` : Asserts the position at the start of the line. +- `.` : Matches any single character except for line terminators. +- `*` : Matches the preceding element zero or more times. +- `\` : Escapes the following character, treating it as a literal. +- `$` : Asserts the position at the end of the line. + +### Processing Control + +- `stopProcessing:b=false` : Indicates whether to continue processing or + reprocess the already found and processed items. + +### Examples + +#### Rendering and Prefab Creation + +To generate renderings from `.lod00.dag` files and create prefabs from them, +use: + +``` +find:t="^(.*)\.lod00\.dag$" +``` + +#### Texture Processing + +To find and process all files matching `"^(.*_n\.tif$"` and convert them to +`.dds` format with swizzling, then process all remaining `.tif` files: + +``` +virtual_res_blk{ + find:t="^(.*_n(_dmg|_expl|_inside)?)\.tif$" + swizzleARGB:t="RAG0" +} + +virtual_res_blk{ + find:t="^(.*)\.tif$" + convert:b=yes; fmt:t="DXT1|DXT5" +} +``` + +These examples demonstrate how to use regular expressions to find specific file +types and perform various actions on them within the `.folder.blk` framework. + + diff --git a/_sources/assets/all-about-blk/index.rst.txt b/_sources/assets/all-about-blk/index.rst.txt new file mode 100644 index 000000000..11be8c750 --- /dev/null +++ b/_sources/assets/all-about-blk/index.rst.txt @@ -0,0 +1,19 @@ + +All about .blk +========================================= + +The .blk files and their interaction with assets. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + application_blk.md + composit_blk.md + config_and_settings_blk.md + folder_blk.md + skeleton_blk.md + spline_blk.md + + + diff --git a/_sources/assets/all-about-blk/skeleton_blk.md.txt b/_sources/assets/all-about-blk/skeleton_blk.md.txt new file mode 100644 index 000000000..e0249fecc --- /dev/null +++ b/_sources/assets/all-about-blk/skeleton_blk.md.txt @@ -0,0 +1,115 @@ +# .skeleton.blk + +## Purpose of .skeleton.blk + +Composite models are constructed from multiple dynamic models that share a +common skeleton. Below are the rules for creating a `.skeleton.blk` file for a +composite model. + +## Examples + +Let's break down the configuration using the example of a tank with various +turret and gun options. + +``` +name:t="tank_body.lod00.dag" +attachSubSkel{ + attach_to:t="bone_turret" + skel_file:t="turret_a.lod00.dag" + skel_node:t="bone_turret" + attachSubSkel{ + attach_to:t="bone_gun_a" + skel_file:t="gun_a.lod00.dag" + skel_node:t="bone_gun_a" + } + attachSubSkel{ + attach_to:t="bone_gun_b" + skel_file:t="gun_b.lod00.dag" + skel_node:t="bone_gun_b" + add_prefix:t="G1:" + } + attachSubSkel{ + attach_to:t="bone_gun_c" + skel_file:t="gun_b.lod00.dag" + skel_node:t="bone_gun_b" + add_prefix:t="G2:" + } +} +attachSubSkel{ + attach_to:t="bone_turret" + skel_file:t="turret_b.lod00.dag" + skel_node:t="bone_turret" + add_prefix:t="T1:" +} +``` + +### Parameter Details + +- `name:t=`: The name of the parent model. +- `attachSubSkel`: Block for adding a dynamic model. + - `attach_to:t=`: Node in the parent skeleton to which the dynamic model is + linked. + - `skel_file:t=`: Name of the child model. + - `skel_node:t=`: Node in the child skeleton that links to the parent + skeleton. + - `add_prefix:t=`: Prefix for all nodes of the child model. + +### Explanation + +In the `.skeleton.blk` example above, we add the `turret_a` and `turret_b` +models to the skeleton generated by `tank_body`, linking them to the +`bone_turret`. Additionally, we attach the guns `gun_a` and `gun_b` to the nodes +`bone_gun_a`, `bone_gun_b`, and `bone_gun_c` of `turret_a`, with `gun_b` being +linked twice to different bones. + +Since we are creating a single common skeleton, there cannot be nodes with +identical names. To address this, we assign a unique prefix to the nodes of each +duplicate. For instance, the nodes of the two copies of `bone_gun_b` receive the +prefixes `G1` and `G2`, while the nodes of `turret_b` receive the prefix `T1`. + +```{important} +- When specifying the attachment node, do not account for the automatically + added prefixes. +- If a child node is linked to a node with the same name, the previous node is +removed from the hierarchy to avoid duplicates. +``` + +### Hierarchical Dependencies + +While it's possible to create long chains of dependencies, simpler structures +are easier to manage. Before adding another level, ensure its necessity. + +A multi-level hierarchy might look like this: + +``` +name:t="papa.lod00.dag" +attachSubSkel{ + attach_to:t="bone_papa" + skel_file:t="child.lod00.dag" + skel_node:t="bone_child" + add_prefix:t="layer01:" + attachSubSkel{ + attach_to:t="bone_child" + skel_file:t="child.lod00.dag" + skel_node:t="bone_child" + add_prefix:t="layer02:" + attachSubSkel{ + attach_to:t="bone_child" + skel_file:t="child.lod00.dag" + skel_node:t="bone_child" + add_prefix:t="layer03:" + attachSubSkel{ + attach_to:t="bone_child" + skel_file:t="child.lod00.dag" + skel_node:t="bone_child" + add_prefix:t="layer04:" + } + } + } +} +``` + +This structure allows for extensive customization while maintaining +manageability by using prefixes to avoid naming conflicts and ensure proper +hierarchy. + diff --git a/_sources/assets/all-about-blk/spline_blk.md.txt b/_sources/assets/all-about-blk/spline_blk.md.txt new file mode 100644 index 000000000..72c860486 --- /dev/null +++ b/_sources/assets/all-about-blk/spline_blk.md.txt @@ -0,0 +1,474 @@ +# spline.blk + +## loft{} Block + +Procedural transparency independent of spline control points. + +- **randomOpacityMulAcross:p2=1,0.2** – Random transparency variation across the + spline. +- **randomOpacityMulAlong:p2=1,0.2** – Random transparency variation along the + spline. + + - The first number indicates the overall reduction in the heightmap of the + spline texture. + - The second number indicates the delta change in the heightmap of the spline + texture. + + + +--- + + + +--- + +This feature allows for adding variation to roads and sidewalks. For instance, +sand may randomly appear, blending with the tile pattern. + +- **name:t="afg_road_c"** – The name of the spline. +- **matName:t="afg_road_c"** – The material reference for the spline. +- **loftLayerOrder:i=0** – Rendering layer order. The spline with the highest + `i` value is rendered last. +- **subdivCount:i=0** – Linear subdivision between spline points (higher values + create smoother transitions). +- **shapeSubdivCount:i=0** – Linear subdivision of the loft geometry relative to + the spline's width, for example: + + + + +

shapeSubdivCount:i=8

shapeSubdivCount:i=0 (or 1)

+ + + + +--- + +- **flipUV:b=0** – Swaps the `u` and `v` channels in the UVW mapping. +- **vTile:r=1.0** – Texture scaling along the spline width, for example: + + + + + +

vTile:r=1.0

vTile:r=2.0

vTile:r=0.5

+ + + + + +--- + +- **uSize:r=10.0** – Texture scaling along the spline length. + + The ratio of `uSize` to `vTile` is directly influenced by the parameters in + the **shape** block (see below). + +- **extrude:b=0** – When set to `1`, the loft geometry is extruded (gains + thickness) + + ```{note} + This parameter currently has no effect. + ``` + +- **cullcw:b=0** – Inverts the spline normals. +- **offset:p2=0, 0** – Offsets the loft geometry relative to the spline: + - The first value offsets the loft relative to the spline width. + - The second value offsets the loft vertically relative to the spline: + + + + + +

offset:p2 = 0, 0

offset:p2 = 5.5, 0

offset:p2 = -5.5, 0

+ + + + + + --- + + + +

offset:p2 = 0, -5

+ + + + --- + +- **placeAboveHt:r=100** – Distance from the heightmap to the spline where the + spline projection occurs. + +The following parameters apply only to lofts. If the spline only projects a +texture and is not baked, this section can be omitted. If this block is enabled, +a check will always be performed, potentially causing long load times (up to +several minutes) in the +[*daEditor*](../../dagor-tools/daeditor/daeditor/daeditor.md). + +- **roadBehavior:b=0** – Enables the road behavior block. If disabled, the loft + is placed directly onto the landscape mesh. This setting is rarely needed (95% + of cases). +- **htTestStep:r=100** – Number of points between spline control points where + conditions for `followHills` and `followHollows` will be checked. Cannot be + zero (could crash the *daEditor*). +- **followHills:b=0** – Ensures the loft is not drawn beneath hills (lifts the + loft to match hill height when enabled). +- **followHollows:b=0** – Ensures the loft is not drawn over depressions (lowers + the loft to match the depth when enabled). +- **maxHerr:r=1.5** – (Needs clarification) +- **roadTestWidth:r=4.0** – Distance from the center of the spline where + conditions of this block are tested. +- **curvatureStrength:r=0** – Controls the influence of spline curvature on loft geometry subdivision. +- **minStep:r=1** – Minimum distance between subdivisions, in meters. +- **maxStep:r=1000** – Maximum subdivision distance, in meters (see screenshots). + + **Examples:** + + - **curvatureStrength:r=1, minStep:r=1, maxStep:r=100** – Subdivides the loft where needed based on spline curvature, reducing unnecessary triangles: + + + + --- + + - **curvatureStrength:r=0, minStep:r=1, maxStep:r=4** – Evenly spaced loft subdivisions, independent of spline curvature. + + + + --- + + - **curvatureStrength:r=0, minStep:r=1, maxStep:r=1000** – Optimized for splines with two points and linear interpolation. + + + + + --- + +- **integral_mapping_length:b=0** – When set to `1`, calculates arc length using + integration (see [Arc length](https://en.wikipedia.org/wiki/Arc_length)). + +- **sweepWidth:r=200** – Removes render instances generated by **LandClasses** + (e.g., trees or houses intersecting with roads or riverbanks). + +- **addFuzzySweepHalfWidth:r=50** – Creates a "rough" mask or scatter effect + (should not exceed the value of `sweepWidth`). + +- **sweep2Width:r=50** – Removes render instances even generated by this spline + in the **objGen{}** block (useful for intersections of roads, e.g., an asphalt + road with a tree-lined avenue intersecting a dirt road). + +## node_flags{} Block + +- **renderable:b=1** – Enables rendering of the loft. + +- **collidable:b=1** – Enables collision for the loft. + +## shape{} Block + +- **closed:b=0** – Closes the loft's cross-section. + +The **shape{}** block manages the positions of the loft profile points. A +minimum of two points is required. + +**Example:** + +**pt:p4= -5.0, 0.0, 1.0, 0.0** where: +- **-5.0** – Offset of the point along the spline’s width, 5 meters from the + center. +- **0.0** – Vertical offset of the point, relative to the spline (no vertical + offset). +- **1.0** – UV coordinate shift along the spline’s length (this parameter has no + effect). +- **0.0** – UV coordinate shift along the spline’s width. + +**Example:** + +- **pt:p4= 5.0, 0.0, 1.0, 0.0** – This point is offset 5 meters in the opposite + direction, with the same vertical and UV settings. + + + + +The final loft will have a width of 10 meters and be vertically aligned with the +spline’s control points (see screenshot). The ratio of **vTile** to **uSize** is +1:10 (as described above). + +**Example of a more complex curved profile:** + +- **pt:p4= -7.5, 0.0, 0.0, 0.0** +- **pt:p4= -5.0, 1.0, 0.0, 0.2** +- **pt:p4= 5.0, 1.0, 0.0, 0.8** +- **pt:p4= 7.5, 0.0, 0.0, 1.0** + + + + +The final loft will have a width of 15 meters (ranging from -7.5 to 7.5 meters) +and will be vertically aligned with the spline control points. The middle +section, 10 meters wide, will be raised 1 meter above the spline. + +In the example above, the triangles of the loft behave uniformly. To +differentiate the behavior of points in the loft, the **group{}** block is used. + +**Example:** + +``` +group{ + pt:p4= -7.5, 0.0, 0.0, 0.0 +} + +group{ + pt:p4= -5.0, 1.0, 0.25, 0.25 + pt:p4= 5.0, 1.0, 0.75, 0.75 +} + +group{ + pt:p4= 7.5, 0.0, 1.0, 1.0 +} +``` + +Grouping loft points defines their varying behavior. + +**Example:** + +``` +group{ + type:t="rel_to_collision" + pt:p4= -7.5, 0.0, 0.0, 0.0 +} + +group{ + type:t="move_to_min" + pt:p4= -5.0, 1.0, 0.25, 0.25 + pt:p4= 5.0, 1.0, 0.75, 0.75 +} + +group{ + type:t="rel_to_collision" + pt:p4= 7.5, 0.0, 1.0, 1.0 +} +``` + + + + +The resulting loft consists of three groups. The vertical positions of the +middle group's points match the lowest vertical coordinate of the spline's +control points (`type:t="move_to_min"`). The two outer groups are "dropped" onto +the collision object (in this case, the heightmap is used as the collision). + +## colliders{} Block + +The **colliders{}** block defines the objects with which the spline collides. + +- **use:t="HeightMap"** – Collides with the heightmap. +- **use:t="(srv) Prefab entities"** – Collides with prefab entities. +- **use:t="(filter) Generated by spline"** – Collides with objects generated by + the spline itself. +- **use:t="SGeometry"** – Collides with scene geometry. + +## obj_generate{} Block + +The **obj_generate{}** block is responsible for placing objects along the +spline. + +- **rseed:i = 111** – Random seed for generating random values. It is essential + to use unique seeds for different **obj_generate{}** blocks; otherwise, it + will cause a syntax error. + +- **setSeedToEntities:b=yes** – Enables randomization for composite objects. + Without this, the same random element will be generated repeatedly, instead of + different ones each time. + +- **placeAtPoint:b=true** – Places objects at the spline points, which is useful + for precise placements, such as poles in a city. The step value (discussed + below) will also apply. + +- **step:p2 = 10, 0** – The first value is the distance (step) between objects, + while the second value defines a range for random variation. For example: + - **step:p2 = 10, 0** – Objects are placed exactly 10 meters apart. + - **step:p2 = 10, 2** – A random value between 0 and 2 meters is added (or + subtracted) to the 10-meter step, creating varied distances between objects. + + + + +When using the **genTag** system, the step must be larger than the widest +object’s width. Otherwise, the distance between objects will be determined by +the **step**, not the object’s **width**. + +- **offset:p2 = 0.0, 0.0** – The first value shifts the object’s position along + the spline, and the second defines the range for random variation. + +- **placeAboveHt:r=100** – Objects are projected onto the ground within a + 100-meter distance. + +- **startPadding:r=3.5; endPadding:r=3.5** – These parameters define the + exclusion zones at the start and end of the spline, where no objects will be + generated. + +- **orientation:t="normal"** – Controls the orientation of the objects during + placement. Possible values include: + - **orientation:t="normal"** – Objects are not aligned; their tilt depends on + the surface's normal beneath them. + + + + --- + + - **orientation:t="fence"** – Objects are aligned along the spline, with no + tilt. + + + + --- + + - **orientation:t="fence_normal"** – Objects are aligned along the spline, and + their tilt depends on the surface’s normal. + + + + --- + +- **tightFenceOrient:b=yes** – Aligns objects along chords. As the name + suggests, this is useful for fences. Instead of placing objects on the spline + itself, they are positioned on a chord defined by the object’s width. Chords + are generated along the spline until they fit within its length. If the last + chord is shorter than the object’s **width**, the object will not be + generated, leaving a gap. To avoid gaps, you can use "filler" objects by + setting **integral_end_entity:b=yes**. + + + + --- + +- **tightFenceIntegral:t="spline"** – Makes chords ignore spline nodes. + +- **tightFenceIntegral:t="segment"** – Treats each segment of the spline as a + separate spline. Useful for generating fences along irregular contours. + +- **tightFenceIntegral:t="corner"** – Filler objects are placed only at corners. + +- **placeAtVeryStart:b=yes** and **placeAtVeryEnd:b=yes** – Ensures objects are + placed at the very start or end of the spline, regardless of their frequency + or padding. + +To add unique objects at the start or end of the spline (without repetition +along the middle), use a zero step: **step:p2 = 0, 0**. + +### object{} Block + +These parameters relate to the objects themselves, as defined in the +**object{}** block. + +**Example:** + +``` +object{ + genTag:t="a" + width:r=17 + name:t="modern_siding_suburb_building_a" + weight:r=1 + + rot_x:p2=0, 0 + rot_y:p2=0, 0 + rot_z:p2=0, 0 + + offset_x:p2= 0, 0 + offset_y:p2= 0, 0 + offset_z:p2= 12, 0 + + scale:p2=1.0, 0.0 + yScale:p2=1.0, 0 +} +``` + +Where: + +- **genTagSeq:t="a"** – The sequence (pattern) of objects used for placement. + - **genTagSeq:t="a"** – Only objects with **genTag:t="a"** will be placed. If + there are multiple objects with the same tag, they will be randomly selected, + and their selection frequency is controlled by **weight**. If the sequence + contains multiple identical tags (e.g., **genTagSeq:t="aaaaaaa"** or + **genTagSeq:t="a"**), the result is the same. + - **genTagSeq:t="ab"** – Alternates between objects with **genTag:t="a"** and + **genTag:t="b"**. + - **genTagSeq:t="abbccaccabcca"** – Alternates between objects with four + different **genTags**. + + **Examples:** + + - **genTagSeq:t="a"** + + + + --- + + - **genTagSeq:t="ab"** + + + + --- + + - **genTagSeq:t="abc"** + + + + --- + +- **width:r=17** – Distance between consecutive objects of the current type (17 + meters in this case). + +- **name:t="modern_siding_suburb_building_a"** – Reference to the object. + +- **weight:r=1** – The probability (frequency) of selecting this object when + randomly chosen from a group of objects with the same **genTag**. + +- **rot_x, rot_y, rot_z** – Rotation of the object in three planes with a random + value. + +- **offset_x, offset_y, offset_z** – Random offsets along the three axes. + +- **scale:p2** – Uniform scale with a random value. + +- **yScale:p2** – Vertical scale with a random value. + +- **integral_end_entity:b=yes** – Marks the object as a "filler" when using + **tightFenceOrient**. This object will be scaled or stretched to fit the + remaining spline length. This parameter only affects the last object in a + sequence. + +Objects marked with **integral_end_entity** may not be generated (if their +**genTag** is not used in **genTagSeq**) but will still be used as fillers at +the end of the spline. + +For correct operation and to avoid excessive distortion, it is recommended to +create multiple filler objects. Typically, in addition to the main object, you +should have three-quarter, half, and quarter-length versions. To allow scaling, +specify values in the **xzScale:p2** parameter. + + + + --- + +## Shape to Loft HDA + +This script converts a polygonal shape into the coordinates of loft points, +allowing these values to be substituted into a spline class: +[**dgr_shape_to_loft.hda**](./_images/dgr_shape_to_loft.hda). + +The tool is designed to facilitate the translation of polygonal geometry into a +usable format for lofting, enabling smoother integration of custom shapes into +spline-based workflows. + +--- + +To visually display the loft geometry in the editor and adjust the parameters: + +1. Open the `*.mat.blk` file and set **render_landmesh_combined=0** to + **render_landmesh_combined=1**. +2. Open the `*.spline.blk` file and press Ctrl+S to apply the changes made to + `*.mat.blk`. + +The wireframe of the loft geometry will then be visible by pressing `F3`. + + diff --git a/_sources/assets/animations/animation_export.md.txt b/_sources/assets/animations/animation_export.md.txt new file mode 100644 index 000000000..a7556553b --- /dev/null +++ b/_sources/assets/animations/animation_export.md.txt @@ -0,0 +1,150 @@ +# Animation Export + +### Common Guideline + +Animations are stored in the `.a2d` format. To export an animation from 3ds Max, +follow these steps: + +1. **Ensure Visibility:** All layers containing bones, as well as the bones + themselves, must be unhidden and visible. + +2. **Export Settings:** Specify the starting and ending frames for the animation + in the export settings. **Automatic frame detection does not work**. + +3. **Add Note Tracks:** In the **Track View**▸**Dope Sheet**, add a Note Track + to any of the animated bones. + + ```{seealso} + For more information on adding and editing Note Tracks, see + [Add Note Track](https://help.autodesk.com/view/3DSMAX/2024/ENU/?guid=GUID-658E12E7-CE32-48BF-A3CE-A289356F48A3). + ``` + + Add two keys to the Note Track: + - At frame 0: set a key with the label `start`. + - At the last frame: set a key with the label `end`. + + These keys correspond to the `key_start` and `key_end` parameters in the + `animtree.blk` file of the unit. You can change the labels as needed. + + ```{seealso} + For more information, see + [.blk File Format](../../dagor-tools/blk/blk.md). + ``` + +4. **Bone Consistency:** The number of bones and their linking order must match + between the target model (the one the animation will be applied to) and the + bones exported to the `.a2d` file. + +### Asset Transfer Between Projects + +When transferring assets between projects, **shader discrepancies** may occur, +resulting in errors. To address this: +- Use `F4` to edit the `.dag` files in FAR (configured for studio-specific + settings) and ensure shader compatibility. +- Note that the `dynamic_simple` shader is universally available across studio + projects and is recommended during the initial stages of asset transfer. + +**Custom Properties** in 3ds Max cannot be adjusted post-transfer. +Unfortunately, importing `.dag` files may cause skin data to break. However, you +can modify the properties using `Alt`+`F4` in FAR. + +```{warning} +Be cautious with the syntax: **errors in syntax will not trigger warnings, and +unsaved changes will be discarded**. +``` + +### Limitations + +- **Bone Limit:** A maximum of 200 bones per node with skin is supported. While + theoretically extendable to 255, current shader limitations cap the limit at + 200. +- **Triangle Limit:** A maximum of 65,534 triangles per node is allowed. + +### Project-Specific Custom Object Properties + +Different projects may have unique requirements for **Custom Object Properties** +to ensure proper generation of virtual assets. For example: + +- **Enlisted:** Each skinned object must include the following properties: + + ```text + animated_node:b=yes + collidable:b=no + massType:t="none" + ``` + + Omitting these properties will result in general errors during dynamic model + generation. + +- **CRSED:** Such requirements do not apply. + + ```{tip} + If you have questions regarding this section, reach out to the author directly + at {octicon}`mail;1.4em;sd-text-info` . + ``` + +### Animation Description in `animtree.blk` + +Animations must be described in the `animtree.blk` of the corresponding block. +For War Thunder-based projects, this involves two blocks: + +1. **AnimBlendNodeLeaf{} block:** + + ```text + AnimBlendNodeLeaf{ + a2d:t="animation_file.a2d" // Animation file name + + continuous{ + name:t="animation_name" // Animation name + key_start:t="start" // Start key + key_end:t="end" // End key + time:r=1 // Playback duration + own_timer:b=yes + eoa_irq:b=yes + addMoveDirH:r=-90 // Direction of unit movement + addMoveDist:r=1.33 // Distance covered per playback time + } + } + ``` + +2. **hub{} block:** + + ```text + hub{ + name:t="animation_file" // Animation name + const:b=yes // Indicates whether the animation loops + } + ``` + +Remember that the `animtree.blk` is also an exportable resource. To see it in +the game, you must perform a `daBuild`. + +### Animation Export Description in `.blk` + +The export description for animations in `.blk` format: + +```text +file:t=some.a2d + +opt:b=yes // Conservative optimization +posEps:r=0.01 +rotEps:r=0.2 +sclEps:r=0.1 +``` + +For `.folder.blk` files: + +```text +virtual_res_blk{ + find:t="^(.*)\.a2d$" + className:t="a2d" + contents{ + opt:b=yes // Conservative optimization + posEps:r=0.01 + rotEps:r=0.2 + sclEps:r=0.1 + } +} +``` + + diff --git a/_sources/assets/animations/index.rst.txt b/_sources/assets/animations/index.rst.txt new file mode 100644 index 000000000..b079d36c1 --- /dev/null +++ b/_sources/assets/animations/index.rst.txt @@ -0,0 +1,11 @@ + +Animations +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + animation_export.md + + diff --git a/_sources/assets/index.rst.txt b/_sources/assets/index.rst.txt new file mode 100644 index 000000000..4c33e67b3 --- /dev/null +++ b/_sources/assets/index.rst.txt @@ -0,0 +1,21 @@ + +Assets and Assets Management +========================================= + +Managing assets in the Dagor Engine, including types, properties, and +configurations. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + about-assets/index.rst + all-about-blk/index.rst + animations/index.rst + lighting/index.rst + materials/index.rst + shaders/index.rst + + + + diff --git a/_sources/assets/lighting/adding_light_fixtures_to_building_composites.md.txt b/_sources/assets/lighting/adding_light_fixtures_to_building_composites.md.txt new file mode 100644 index 000000000..3396d7682 --- /dev/null +++ b/_sources/assets/lighting/adding_light_fixtures_to_building_composites.md.txt @@ -0,0 +1,79 @@ +# Adding Light Fixtures to Building Composites + +## Overview + +This article explains how to add light fixtures to existing building composites, +using the *Enlisted* project as an example. However, the process is generally +applicable to any *daNetGame*-based projects. + +## Preparing Workspace + +For efficient and streamlined work with large composites, you will need to open +three [*Asset +Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) windows +and one [*daEditor*](../../dagor-tools/daeditor/daeditor/daeditor.md) window. + +1. Open *daEditor* and select the desired map. In this example, it’s the *Battle + of Berlin*. +2. Locate the building composite you want to modify and copy its name. For this + guide, we will use *goebbels_villa* as the example. +3. In the first *Asset Viewer* window, find the composite of the selected + building. +4. In the second *Asset Viewer* window, open the composite that contains the + light fixtures or the one where the lights will be placed. +5. In the third *Asset Viewer* window, open the specific light fixture that will + be added to the composite. + +Your workspace should look something like this: + +![Workspace](./_images/adding_light_fixtures_01.jpg) + +## Adding Light Fixture + +The easiest way to add your light fixture is by replacing an existing object +within the composite. While not the only method, this approach is currently the +fastest, requiring minimal steps. Importantly, it preserves the original +composite’s pivot points and avoids the need for manual edits in a text editor. + +1. Select any convenient object within the composite and duplicate it by + dragging the pivot arrows while holding down `Shift`. In the pop-up window, + click **OK**. + + ![Adding Light Fixture](./_images/adding_light_fixtures_02.jpg) + +2. In the *Outliner* window, select the duplicated asset, right-click on it, and + choose **Change asset**. + + ![Adding Light Fixture](./_images/adding_light_fixtures_03.jpg) + +3. In the pop-up window, type the name of the required light fixture in the + `Filter` field (e.g., `is_chandelier_h_tall_double_on_cmp`). In the *ALL* + tab, navigate to the directory where the light fixture is located. Then, + select the asset from the list in the lower window and click **Select + asset**. This will replace the existing object with the desired light + fixture. + + ![Adding Light Fixture](./_images/adding_light_fixtures_04.jpg) + + ![Adding Light Fixture](./_images/adding_light_fixtures_05.jpg) + +4. Adjust the position of the light fixture as needed, then save the composite. +5. After saving, check the changes in the parent composite using the first + *Asset Viewer* window and the *daEditor* window. +6. If any adjustments are needed, make the necessary changes in the appropriate + window, save again, and verify the updates in other windows. + + ![Adding Light Fixture](./_images/adding_light_fixtures_06.jpg) + +### Exporting the Map + +If everything looks correct, export the map from *daEditor* by navigating to +**Project** ▸ **Export to Game (PC Format)**. In the following windows, click +**OK** without changing any settings. When prompted, overwrite the existing map +by clicking **OK** in the dialog box. + + ![Exporting the Map](./_images/adding_light_fixtures_07.jpg) + +Finally, launch the game and check for any bugs or issues. + + diff --git a/_sources/assets/lighting/flickering_lights.md.txt b/_sources/assets/lighting/flickering_lights.md.txt new file mode 100644 index 000000000..a38ab8e28 --- /dev/null +++ b/_sources/assets/lighting/flickering_lights.md.txt @@ -0,0 +1,760 @@ +# Flickering Lights + +## General Workflow + +A flickering light source object is composed of several components. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Object Type

Naming Template

Description

Base RendInstindustrial_lamp_steel_wall_a.lod**.dagThis is the model used as + the base for creating a flickering lamp. In some cases, it may not be + required, especially if you are designing a lamp from scratch with built-in + flickering functionality.
RendInst without Emissiveindustrial_lamp_steel_wall_a_base.lod**.dagA detached part of the + object without any emissive properties, exported as a separate render + instance. + + This is necessary for: + + - Casting shadows (render instance shadows are significantly computationally + cheaper than dynamic models shadows). + - Destroying the light source (lights disappear when the render instance + whose bounding box contains the centers of the light sources is destroyed). + - Visually destroying the object (render instances are easily [destroyed via + destructors](../about-assets/customizing_asset_destructions.md). Dealing with + dynamic models is more complex, so we make them disappear following the light + source rules – their pivots must fall within the bounding box of the + destroyed render instance). + + Simply put, when the render instance is destroyed, the dynamic model + disappears, the light source is removed, and the render instance breaks apart + via the destructor.
DynModel with Emissiveindustrial_lamp_steel_wall_a_flicker_dynmodel.lod**.dagA detached part of the + overall model, exported with a dynamic glowing shader. Essentially, this + is the part that will glow and flicker.
AnimCharindustrial_lamp_steel_wall_a_flicker_char.animChar.blkA simple .blk file that + contains references to the dynamic model and its skeleton. Technically, this + is necessary because we cannot place a dynamic model directly on the map, as + it's not a static object. However, placing an animChar is possible. + + Example: + + - dynModel:t="industrial_lamp_steel_wall_a_flicker_dynmodel" + - skeleton:t="industrial_lamp_steel_wall_a_flicker_skeleton"
GameObj (Flickering Light)industrial_lamp_steel_wall_a_flicker_8m_light.gameObj.blkA .blk file containing the + name of the light source template from lights.blk file in the + /prog directory. It is placed in + develop/assets/common/gameRes/gameObjects directory. This game object will + be placed on the map as a "flickering light source" with an 8-meter radius.
GameObj (Flickering DynModel)industrial_lamp_steel_wall_a_flicker_8m_mesh.gameObj.blkA .blk file containing the + name of the light source template from lights.blk file in the + /prog directory. It is placed in + develop/assets/common/gameRes/gameObjects directory. This game object will + be placed on the map as a "flickering dynamic model".
Compositeindustrial_lamp_steel_wall_a_flicker_8m_cmp.composit.blkThis composite.blk file + includes: + + - The base render instance: industrial_lamp_steel_wall_a_base.lod**.dag + - The flickering light game object: industrial_lamp_steel_wall_a_flicker_8m_light.gameObj.blk + - The flickering dynamic model game object: industrial_lamp_steel_wall_a_flicker_8m_mesh.gameObj.blk
Flicker and Light Source Templates + (All templates are located in lights.blk file in the /prog directory)industrial_lamp_steel_wall_a_flicker_8m_templateFlicker Template. Defines + the flicker parameters.
industrial_lamp_steel_wall_a_flicker_8m_lightFlickering Light Source + Template. Links the light source to the flicker behavior (you can use a + ready-made light source or make your own). The file has the same name as the + industrial_lamp_steel_wall_a_flicker_8m_light.gameObj.blk file.
industrial_lamp_steel_wall_a_flicker_8m_meshFlickering Dynamic Model + Template. Links the dynamic model to the flicker behavior (via AnimChar). + The file has the same name as the industrial_lamp_steel_wall_a_flicker_8m_mesh.gameObj.blk file.
+ +```{important} +Pay attention to the file name postfixes highlighted in the text, for example: `industrial_lamp_steel_wall_a_**flicker_8m_light**`. Please follow the same +naming conventions for your files and templates. +``` + +## Working with Geometry + +For flickering light sources, the visual model must be divided into two parts: +the **Render Instance** and the **Dynamic Model**. The reasons for this have +already been outlined: + +- **Shadow Casting**: + + Shadow casting for light sources from static models and dynamic models is + enabled separately in the [light source template](./lights.md). While shadows + from static objects impact performance, the effect is not as significant. + However, shadows from dynamic models are very computationally expensive. That + is the reason why they are rarely used. If the entire light fixture is made + into a dynamic model, the light source inside it will not cast a shadow on the + fixture. + +- **Destruction**: + + [The render instance is replaced with a destructible version when + destroyed](../about-assets/customizing_asset_destructions.md). This is a + straightforward mechanism. In contrast, substituting the entire lamp dynamic + model with a broken version involves a new, more complex pipeline, which isn't + practical. Therefore, we destroy the dynamic model alongside the render + instance. In this case, the dynamic model simply disappears, and the destroyed + render instance is replaced with a damaged version of the dynamic model’s + section, broken as necessary. + +```{important} +If you're creating rare lamps that will be placed in around 10 locations on the +map and need to always flicker, follow the pipeline outlined in this article. + +If you're creating lamps that will be used extensively across the map, with only +a few needing to flicker, follow this approach: + +- Create a standard render instance with emissive properties for the majority of + placements. +- Separately, create the flickering lamps using the current pipeline. + +For example, for the current lamp, you'll have two distinct objects: + +- `industrial_lamp_steel_wall_a_on.lod**.dag` – a render instance of the + constantly illuminated lamp. +- `industrial_lamp_steel_wall_a_flicker_8m_cmp.composit.blk` – a composite file + for the flickering lamp. +``` + +The example used here is the lamp `industrial_lamp_steel_wall_a`: + +![industrial_lamp_steel_wall_a](./_images/industrial_lamp_steel_wall_a.jpg) + +### RendInst + DynModel (Geometry Splitting) + +A practical splitting between the render instance and the dynamic model is as +follows: + +- **Dynamic Model**: Contains the bulb and part of the lamp that uses a lightmap + with an emissive intensity mask in the alpha channel of the texture. +- **Render Instance**: Includes everything non-emissive and elements that cast + interesting shadows, such as the protective bulb net. While the protective net + could be part of the dynamic model (since it is illuminated), this would + result in flat, uninteresting shadows. The net adds variation and depth to the + shadow. + + + + +```{important} +To prevent de-synchronization between the matrices of the dynamic model and the +render instance, their pivots must align (positioned correctly in the scene +before exporting to `.dag` files). In the image above, they are shown side by +side for demonstration purposes only. +``` + +### Naming of Exported Objects + +For an object initially named `industrial_lamp_steel_wall_a.lod**.dag`, the +split render instance and dynamic model should be named as follows: + +- **RendInst**: `industrial_lamp_steel_wall_a_base.lod**.dag` – the non-emissive + base, to which the rest is added. +- **Dynamic Model**: `industrial_lamp_steel_wall_a_flicker_dynmodel.lod**.dag` – + the flickering dynamic model. + +### Shaders + +- **RendInst**: Uses standard shaders based on the asset creation technology. +- **Dynamic Model**: Uses a dynamic emissive shader, typically the + [dynamic_emissive](../shaders/dng-shaders/rendinst_emissive.md) shader. + +### Destructions + +As mentioned earlier, destruction is only applied to render instances. Since +destroying dynamic models is more complex, both the dynamic models and light +sources will simply vanish when the associated render instance is destroyed, as +long as they are within its bounding box. + +```{important} +"Automatic" destruction of lights and dynamic models will only occur under the +following conditions: +1. Their pivots must be inside the bounding box of the destroyed render + instance. If they merely touch the edge, destruction will not occur. +2. The property `destroyable_with_rendinst:tag{}` must be specified in their + templates. Most lights (99%) inherit this property from their base templates, + so it typically doesn’t need to be added manually. However, for each new + dynamic model, you must include this property in the template, such as in + `industrial_lamp_steel_wall_a_flicker_8m_mesh`. +``` + +To properly configure destruction, you only need to: + +1. Create a standard `_destr` for the render instance. +2. Define the render instance destruction in `rendinst_dmg.blk` according to + standard guidelines. + +```{important} +When destroying the render instance, the entire model must be affected, meaning +the destruction process must cover both the static and dynamic parts. Otherwise, +the dynamic model will disappear abruptly, leaving gaps in the remaining render +instance's geometry. +``` + +Here’s the proper destruction process: + + + + + + +

Render Instance

Dynamic Model

Render Instance Dynamic Model Destruction

Render Instance Dynamic Model Destruction DMG(optional)

+ + + + + + +## Working with Textures and Materials + +Some key considerations: + +- The emissive mask, which is stored in the alpha channel of the albedo texture + based on the + [rendinst_emissive/dynamic_emissive](../shaders/dng-shaders/rendinst_emissive.md) + shader system, should only be baked for the part of the model included in the + dynamic model. Flickering is not supported for the render instance. + +- Therefore, the render instance should not use an emissive shader unless + specifically required by the artistic design (e.g., in a sci-fi setting). + +- Keep in mind that the flickering light source does not account for the light + color or the emissive color in the material. You must manually adjust the + emissive color to match the desired light color (or vice versa if you're + creating a new light). There is no automatic synchronization between them. + +- Unless required by the artistic design, avoid baking colored light into the + albedo texture. Doing so will restrict the emissive color options for the + model (if someone else wishes to use it with a different color). The color and + intensity of the emissive effect are controlled in the + [rendinst_emissive/dynamic_emissive](../shaders/dng-shaders/rendinst_emissive.md) + shader settings. + +- As a result, if you need two identical lamps with different emission colors + (e.g., white and red), you must create two separate dynamic models with + different emissive material settings. This won’t be possible if the emissive + color is baked into the albedo. + +- Be aware that the [*Asset + Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) does not + accurately display emissive color and intensity. All testing should be done + in-game. Do not rely on the *Asset Viewer* for accurate results. + +## Configuring the .folder.blk + +If you’re unsure how the system handles `.dag` files and distinguishes between +dynamic models and render instances, please refer to the following +documentation: + +- [.blk](../../dagor-tools/blk/blk.md) +- [.folder.blk](../all-about-blk/folder_blk.md) +- [Assets Philosophy](../about-assets/about_assets.md) + +### Static Geometry Processing + +As usual, follow the standard procedure for processing static geometry. The only +thing to note is that if you're handling static geometry at the beginning of the +`.folder.blk`, make sure to **exclude dynamic models**. Failing to do so will +cause them to be processed incorrectly. + +**Example:** + +``` +virtual_res_blk{ + find:t="^(.*)\.lod00\.dag$" + exclude:t = "_destr\.lod00\.dag$" + exclude:t = "_dynmodel\.lod00\.dag$" + className:t="rendInst" + contents{ + lod{range:r=12;} + lod{range:r=30;} + lod{range:r=80;} + allowProxyMat:b=yes + } +} +``` + +If you process dynamic models first, no exclusion is needed later (since a +resource processed twice will not be handled again). Just remember to remove +unnecessary `stopProcessing:b=false` flags. + +### Dynamic Geometry Processing + +In Dagor Engine’s logic, a dynamic model is considered a dynamic model if: + +1. It uses dynamic shaders. +2. It has a skeleton. + +We’ve already assigned dynamic shaders in the materials, so now we need to +create the skeleton: + +``` +virtual_res_blk{ // Skeleton creation block + find:t="^((.*)_dynmodel)\.lod00\.dag$" // Find all LOD00s with the _dynmodel postfix + stopProcessing:b=false // Allows reprocessing of these .dag files in the next block + + className:t="skeleton" // Treat the found assets as skeletons (extracting data to build a skeleton asset) + name:t="$2_skeleton" // Name the skeleton using the dynamic model name ($2) with a _skeleton postfix + contents{ // Additional data processing rules + addSkinNodes:b=yes + reduceNodes:b=yes + } +} + +virtual_res_blk{ // Dynamic model creation block + find:t="^((.*)_dynmodel)\.lod00\.dag$" // Find all LOD00s with the _dynmodel postfix (due to the previous block's stopProcessing:b=false) + stopProcessing:b=false // Likely a redundant parameter here. + className:t="DynModel" // Process the found assets as dynamic models (extracting data to build the dynamic model asset) + name:t="$2_dynmodel" // Name the dynamic model as $2_dynmodel (i.e., dynamic model name with _dynmodel postfix) + contents{ // Additional data processing rules + lod{range:r=12;} // LOD distances + lod{range:r=30;} + lod{range:r=80;} + ref_skeleton:t="$2_skeleton" // Reference the skeleton created in the previous block + } +} +``` + +```{important} +There may be some confusion regarding the naming of assets. We process objects +with the `_dynmodel` postfix, then assign two additional postfixes in the +skeleton and dynamic model creation blocks: + +- `_skeleton` +- `_dynmodel` + +This might lead to an expectation of names like: + +- `_dynmodel_skeleton` +- `_dynmodel_dynmodel` + +However, the *Asset Viewer* shows correct names without the redundant +`_dynmodel`. + +![Important: Naming Considerations](./_images/industrial_lamp_steel_wall_a_07.jpg) + +This is due to the search query defined in the +`find:t="^((.*)_dynmodel)\.lod00\.dag$"` statement. + +Had the query been `find:t="^(.*_dynmodel)\.lod00\.dag$"`, the entire dynamic +model name, including `_dynmodel`, would be treated as the object name ($2). The +query we use ensures that only the inner-most group (i.e., the core object name +without `_dynmodel`) is treated as the object name. +``` + +### Collision Processing + +As we know, collisions are now processed through file includes like `include +"#/develop/assets/_ri_collision_lod1.blk"`. By default, this include will also +affect dynamic models, as it doesn't exclude them. A logical approach would be +to first include the dynamic model collision block, but dynamic models don’t +handle collisions the same way – they are processed through damage models (DMs). + +Thus, a hybrid processing solution is needed: + +``` +include "#/develop/assets/_ri_collision_lod1.blk" // Include RenderInst collision processing. +"@override-last"{ // Override parameters from the included file. + "@override:find":t="^(.*)_dynmodel\.lod01\.dag$" // Find LOD01s specifically for dynamic models. + "@override:contents"{gameResPack:t="game_logic.grp"; defCollidable:b=no;} // Set assembly parameters for dynamic model collisions. + stopProcessing:b=no // Likely a redundant parameter here. +} + +include "#/develop/assets/_ri_collision_lod1.blk" // Repeat the RenderInst collision processing include. +``` + +This hybrid approach ensures that both the render instances and dynamic models +are handled appropriately within the collision pipeline. + +### AnimChar + +Technically, we cannot directly place a dynamic model on the map or use it +within the flicker templates we need. However, we can achieve this with an +animChar (animated character). Despite the abstract name, it allows us to manage +dynamic resources effectively. + +In essence, the animChar file lists the dynamic resources that should be applied +to a specific animated model (flickering light is simply another form of +animation). + +For instance, the `industrial_lamp_steel_wall_a_flicker_char.animChar.blk` +contains the following two lines: + +``` +dynModel:t="industrial_lamp_steel_wall_a_flicker_dynmodel" // Dynamic model +skeleton:t="industrial_lamp_steel_wall_a_flicker_skeleton" // Associated skeleton +``` + +Place the animChar file alongside the dynamic model, naming it after the model +with the suffix `_char.animChar.blk`. No additional `.folder.blk` processing is +required. + +### GameObjects + +[*Game Objects*](../about-assets/gameobjects/gameobjects.md) are essentially +placeholders, containers, or dummies with the same name as the related template. +They are used to position objects in the environment or to add them to template +composites. GameObjects provide the matrix information needed to trigger effects +like sound (SFX), visual effects (VFX), game triggers, and light sources. + +Typically, GameObjects are stored in a common directory with other GameObjects. +In *daNetGame-based* projects, for example, this would be located at: + +`//develop/assets/common/gameRes/gameObjects/` + +We need the following: + +1. `industrial_lamp_steel_wall_a_flicker_8m_light.gameObj.blk` – This GameObject + represents the flickering light source (with an 8-meter radius) and will be + placed on the map as a light source. Inside the `.blk` file, define: + + ``` + volumeType:t="point" + ``` + +2. `industrial_lamp_steel_wall_a_flicker_8m_mesh.gameObj.blk` – This GameObject + represents the flickering dynamic model and will be placed on the map as the + dynamic object. Inside the `.blk` file, define: + + ``` + volumeType:t="point" + ref_dynmodel:t="industrial_lamp_steel_wall_a_flicker_dynmodel" + ``` + + ```{important} + Make sure to reference the correct dynamic model; otherwise, incorrect + resources may be loaded. + ``` + +### Composite Object + +To place everything on the map, you’ll need to create a composite object, which +will include: +- The base render instance +- The flickering light game object +- The flickering dynamic model game object + +Don’t forget to adjust the orientation of the light source based on the lamp’s +configuration (usually, lights are directed sideways along the X-axis). +Additionally, for optimal visuals, make use of [photometric light +sources](./photometric_lights.md) in *daNetGame*-based projects. + +An example composite file for the flickering lamp: + +``` +className:t="composit" + +node{ + name:t="industrial_lamp_steel_wall_a_base:rendInst" + tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]] +} + +node{ + name:t="industrial_lamp_steel_wall_a_flicker_8m_mesh:gameObj" + tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]] +} + +node{ + name:t="industrial_lamp_steel_wall_a_flicker_8m_light:gameObj" + tm:m=[[0.961074, 0.27629, 0] [-2.08593e-08, 7.25591e-08, 1] [0.27629, -0.961074, 7.54979e-08] [0.624191, -0.270539, 0.0204315]] +} +``` + +### Light and Flicker Templates + +Flicker sources are defined by templates, similar to light source templates, and +are stored in the `lights.blk` file within the `/prog` directory. For +example: + +`/prog/gameBase/content/common/gamedata/templates/lights.blk` + +These templates usually extend from or use base templates found in +`light_flicker.blk`, which is located in the "global" `prog` directory: + +`/prog/daNetGameLibs/light_flicker/templates/light_flicker.blk` + +These templates define the flickering behavior for light sources and/or emissive +intensity for dynamic models using +[rendinst_emissive/dynamic_emissive](../shaders/dng-shaders/rendinst_emissive.md) +shaders. + +In general, three templates cover 99% of the cases, and they follow a specific +order. Using our current lamp as an example: + +1. `industrial_lamp_steel_wall_a_flicker_8m_template` – Flicker template that + defines flicker parameters (frequency, pauses, emissive intensity, etc.). +2. `industrial_lamp_steel_wall_a_flicker_8m_light` – Flickering light template, + which links a light source (either an existing one or a custom one) to the + flicker behavior defined above. +3. `industrial_lamp_steel_wall_a_flicker_8m_mesh` – Flickering lamp template, + which links the flicker template to the dynamic model via the animChar. + +The relationship between these templates is as follows: + +- The flicker template links to: + - The flickering light template. + - The flickering dynamic model template. + +You don’t always need to create new templates from scratch. If you have an +appropriate flicker template, you can reuse it by linking it to the required +light and dynamic model. However, the flickering lamp template (for the dynamic +model) will need to be recreated each time, as it uses specific animChars. + +The flicker and flickering light templates can be reused in various combinations +and scenarios. + +```{caution} +All templates are named after the lamps they are created for. Reusing templates +is possible, but this naming scheme can lead to confusion. It's up to you to +decide whether to recreate all templates from scratch or reuse existing ones +(though they may be named after other objects). +``` + +### Flicker Template + +```{important} +The randomization settings for flickering will apply synchronously to all +identical lamps. This means that if you place two identical lamps next to each +other, they will flicker randomly but in sync! Each lamp can look very artistic, +but the sync flickering may not be desirable almost in all cases. + +If you need to place multiple identical flickering lamps in close proximity, +create several flicker templates (and corresponding templates) along with +multiple composites, then place them randomly. +``` + +Let’s review the flicker template for the current lamp +(`/prog/gameBase/content/common/gamedata/templates/lights.blk`): + +``` +industrial_lamp_steel_wall_a_flicker_8m_template{ + _use:t="light_flicker_with_sparks" + + light_flicker__attack_time:p2 = 0.01, 0.15 // Transition time from "off" to "on" + light_flicker__on_time:p2 = 1, 10 // Duration of "on" state + light_flicker__release_time:p2 = 0.75, 1.25 // Transition time from "on" to "off" + light_flicker__off_time:p2 = 0.01, 6 // Duration of "off" state + + light_flicker__on_brightness:p2 = 1.0, 1.6 // Brightness during "on" state, multiplied by light__brightness + light_flicker__off_brightness:p2 = 0.0, 0.2 // Brightness during "off" state, multiplied by light__brightness + + light_flicker__noise_brightness_on:p2 = 0.5, 1.0 // Noise amplitude multiplier during "on" state + light_flicker__noise_brightness_off:p2 = 0.0, 1.0 // Noise amplitude multiplier during "off" state + light_flicker__noise_time:r = 17.0 // Noise frequency (per second) +} +``` + +This template extends the root template `_use:t="light_flicker_with_sparks"`, +which contains additional parameters, including settings for sparks (covered in +the [VFX](./flickering_lights.md#vfx) section). + +The key thing to understand about flicker parameter configuration is that each +parameter has a minimum and maximum value, and a random value between the two is +selected for each cycle. This allows you to create both uniform and highly +random flickering patterns. + +Overall, the flicker effect is described by the following parameters, which +we’ll explore in detail below. + +![Flicker Template](./_images/industrial_lamp_steel_wall_a_08.jpg) + +### Cycle Elements + +- `light_flicker__attack_time:p2 = 0.01, 0.15`: Time required for the light + source to transition from the "off" to "on" state. The time, in seconds, for + the light source to ignite. With these parameters, each new cycle will take + between `0.01` and `0.15` seconds. + +- `light_flicker__on_time:p2 = 0.01, 0.5`: Duration of the "on" state. The time, + in seconds, the light source will remain lit. + +- `light_flicker__release_time:p2 = 0.25, 0.75`: Time required for the light + source to transition from the "on" to "off" state. The time, in seconds, for + the light source to fade out. + +- `light_flicker__off_time:p2 = 0.01, 4`: Duration of the "off" state. The time, + in seconds, the light source will remain off. + +### Brightness Control + +- `light_flicker__on_brightness:p2 = 0.6, 1.0`: Brightness multiplier during + the "on" state. Multiplies the brightness of the base light source or + emissive shader when the light is on. + +- `light_flicker__off_brightness:p2 = 0.0, 0.1`: Brightness multiplier during + the "off" state. Multiplies the brightness of the base light source or + emissive shader when the light is off. + +### Additional Micro-Noise + +- `light_flicker__noise_brightness_on:p2=0.25,1.0`: Multiplier for low/high + noise amplitude when the light is "on". Multiplies the micro-flickering + effect during the "on" state, based on the `light_flicker__on_brightness`. + +- `light_flicker__noise_brightness_off:p2=0.0,1.0`: Multiplier for low/high + noise amplitude when the light is "off". Multiplies the micro-flickering + effect during the "off" state, based on the `light_flicker__off_brightness`. + +- `light_flicker__noise_time:r=50.0`: Noise frequency (per second). The + frequency of micro-flickering. This value is deterministic and does not + involve randomness. + +### VFX + +We can choose from various base templates, which are extended in our +implementation. Examples include: + +- `_use:t="light_flicker"`: Basic template without additional effects. +- `_use:t="light_flicker_with_sparks"`: Adds sparks and sound effects, suitable + for indoor lamps. +- `_use:t="light_flicker_with_sparks_nightly"`: Adds sparks and sound effects + only during nighttime, which is appropriate for outdoor lights. + +The sparks will appear as shown below: + +![VFX](./_images/industrial_lamp_steel_wall_a_09.jpg) + +The chance of sparks appearing can be overridden using the parameter +`light_flicker__sparksEffectSpawnChance:r=0.3`. + +Other settings are embedded in the base template `light_flicker.blk` in the +global program. By default, the `envir_sparks_burst_tiny_smoke` VFX is used, but +future updates will allow customization of the VFX. + +### Flickering Light Template (Light Source) + +As an example, consider `industrial_lamp_steel_wall_a_flicker_8m_light`: + +``` +industrial_lamp_steel_wall_a_flicker_8m_light{ + _use:t="spot_light_little_b" + _use:t="light_flicker_updater_light" + light_flicker_updater__template:t="industrial_lamp_steel_wall_a_flicker_8m_template" +} +``` + +This template includes: + +- `_use:t="spot_light_little_b"`: Inherits the light source. However, you can + override the light source parameters as needed. For example: + + ``` + light__max_radius:r=7 + light__color:c=208, 191, 152, 255 + light__brightness:r=121 + light__nightly:b=no + ``` + +- `_use:t="light_flicker_updater_light": A required parameter for flickering + light source templates. Synchronizes the flickering effect. + +- `light_flicker_updater__template:t="industrial_lamp_steel_wall_a_flicker_8m_template"`: + Points to our flickering settings template from the previous section. + +```{important} +Regarding `_use:t="spot_light_little_b"` + +It’s recommended to create a unique light source for each new lamp. This +approach eliminates the need for overrides within the template. Layering +extended light sources on top of each other can create issues when trying to +modify the settings of a specific light source. You would need to ensure that no +other light source is extending it. + +Alternatively, instead of extending a light source, you could define it entirely +within the current template. However, in this case, the light source would +always be tied to the flickering template. Typically, flickering light sources +are used to add variation to non-flickering lights. For example, in a hallway +with several identical lamps, only some of them flicker. It makes sense to use a +single reference light source for both variants. +``` + +### Flickering Dynamic Model Template + +For example, consider `industrial_lamp_steel_wall_a_flicker_8m_mesh`: + +``` +industrial_lamp_steel_wall_a_flicker_8m_mesh{ + _use:t="light_flicker_updater_mesh" + animchar__res:t="industrial_lamp_steel_wall_a_flicker_char" + light_flicker_updater__template:t="industrial_lamp_steel_wall_a_flicker_8m_template" + "destroyable_with_rendinst:tag" {} +} +``` + +This template includes: + +- `_use:t="light_flicker_updater_mesh"`: A required parameter for flickering + dynamic model templates. Synchronizes the flickering effect. + +- `animchar__res:t="industrial_lamp_steel_wall_a_flicker_char"`: Specifies the + animation character for our model. This effectively transmits the flickering + effect to the dynamic model. + +- `light_flicker_updater__template:t="industrial_lamp_steel_wall_a_flicker_8m_template"`: + Points to our flickering settings template. + +- `"destroyable_with_rendinst:tag" {}`: Specifies that the dynamic model should + disappear if its pivot intersects with the bounding box of a destroyed render + instance. + +```{note} +All emissive settings of the dynamic model (except for color, likely) will be +overridden by the parameters from the flickering template +(`industrial_lamp_steel_wall_a_flicker_8m_template`). +``` + + diff --git a/_sources/assets/lighting/index.rst.txt b/_sources/assets/lighting/index.rst.txt new file mode 100644 index 000000000..97b22eed9 --- /dev/null +++ b/_sources/assets/lighting/index.rst.txt @@ -0,0 +1,17 @@ + +Lighting +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + lights_creation_guide.md + lights.md + flickering_lights.md + photometric_lights.md + adding_light_fixtures_to_building_composites.md + replacing_or_modifying_lights.md + lighting_catalog.md + + diff --git a/_sources/assets/lighting/lighting_catalog.md.txt b/_sources/assets/lighting/lighting_catalog.md.txt new file mode 100644 index 000000000..1a97b03a5 --- /dev/null +++ b/_sources/assets/lighting/lighting_catalog.md.txt @@ -0,0 +1,453 @@ +# Lighting Catalog + +This catalog is continuously updated. + +- bunker_lamp_ceiling_b_on + +![bunker_lamp_ceiling_b_on](./_images/light_cat_bunker_lamp_ceiling_b_on.jpg) + +- is_chandelier_m_onoff_cmp + +![is_chandelier_m_onoff_cmp](./_images/light_cat_is_chandelier_m_onoff_cmp.jpg) + +- is_chandelier_m_damaged_onoff_cmp + +![is_chandelier_m_damaged_onoff_cmp](./_images/light_cat_is_chandelier_m_damaged_onoff_cmp.jpg) + +- is_chandelier_m_damaged_on_cmp + +![is_chandelier_m_damaged_on_cmp](./_images/light_cat_is_chandelier_m_damaged_on_cmp.jpg) + +- town_lamp_a_on + +![town_lamp_a_on](./_images/light_cat_town_lamp_a_on.jpg) + +- is_african_lamp_a_glass_on + +![is_african_lamp_a_glass_on](./_images/light_cat_is_african_lamp_a_glass_on.jpg) + +- is_lamp_ceiling_a_on_cmp + +![is_lamp_ceiling_a_on_cmp](./_images/light_cat_is_lamp_ceiling_a_on_cmp.jpg) + +- is_lamp_ceiling_b_on_cmp + +![is_lamp_ceiling_b_on_cmp](./_images/light_cat_is_lamp_ceiling_b_on_cmp.jpg) + +- normandy_railway_bunker_a_projector_a_on_cmp + +![normandy_railway_bunker_a_projector_a_on_cmp](./_images/light_cat_normandy_railway_bunker_a_projector_a_on_cmp.jpg) + +- factory_lamp_c_d_on_cmp + +![factory_lamp_c_d_on_cmp](./_images/light_cat_factory_lamp_c_d_on_cmp.jpg) + +- garage_floor_lamp_b_on + +![garage_floor_lamp_b_on](./_images/light_cat_garage_floor_lamp_b_on.jpg) + +- factory_lamp_a_d_on_cmp + +![factory_lamp_a_d_on_cmp](./_images/light_cat_factory_lamp_a_d_on_cmp.jpg) + +- factory_lamp_a_e_on_cmp + +![factory_lamp_a_e_on_cmp](./_images/light_cat_factory_lamp_a_e_on_cmp.jpg) + +- factory_warning_lamp_a_on_cmp + +![factory_warning_lamp_a_on_cmp](./_images/light_cat_factory_warning_lamp_a_on_cmp.jpg) + +- hangar_projector_a_on_cmp + +![hangar_projector_a_on_cmp](./_images/light_cat_hangar_projector_a_on_cmp.jpg) + +- us_ammunition_bunker_lamp_ceiling_a_on + +![us_ammunition_bunker_lamp_ceiling_a_on](./_images/light_cat_us_ammunition_bunker_lamp_ceiling_a_on.jpg) + +- factory_lamp_b_a_on_cmp + +![factory_lamp_b_a_on_cmp](./_images/light_cat_factory_lamp_b_a_on_cmp.jpg) + +- factory_lamp_b_b_on_cmp + +![factory_lamp_b_b_on_cmp](./_images/light_cat_factory_lamp_b_b_on_cmp.jpg) + +- factory_lamp_b_c_on_cmp + +![factory_lamp_b_c_on_cmp](./_images/light_cat_factory_lamp_b_c_on_cmp.jpg) + +- factory_lamp_b_d_on_cmp + +![factory_lamp_b_d_on_cmp](./_images/light_cat_factory_lamp_b_d_on_cmp.jpg) + +- factory_lamp_c_a_on_cmp + +![factory_lamp_c_a_on_cmp](./_images/light_cat_factory_lamp_c_a_on_cmp.jpg) + +- factory_lamp_c_b_on_cmp + +![factory_lamp_c_b_on_cmp](./_images/light_cat_factory_lamp_c_b_on_cmp.jpg) + +- factory_lamp_c_c_on_cmp + +![factory_lamp_c_c_on_cmp](./_images/light_cat_factory_lamp_c_c_on_cmp.jpg) + +- is_troglodyte_lamp_a_on_cmp + +![is_troglodyte_lamp_a_on_cmp](./_images/light_cat_is_troglodyte_lamp_a_on_cmp.jpg) + +- is_troglodyte_lamp_b_on_cmp + +![is_troglodyte_lamp_b_on_cmp](./_images/light_cat_is_troglodyte_lamp_b_on_cmp.jpg) + +- is_troglodyte_lamp_c_on_cmp + +![is_troglodyte_lamp_c_on_cmp](./_images/light_cat_is_troglodyte_lamp_c_on_cmp.jpg) + +- is_troglodyte_lamp_d_on_cmp + +![is_troglodyte_lamp_d_on_cmp](./_images/light_cat_is_troglodyte_lamp_d_on_cmp.jpg) + +- is_troglodyte_lamp_e_on_cmp + +![is_troglodyte_lamp_e_on_cmp](./_images/light_cat_is_troglodyte_lamp_e_on_cmp.jpg) + +- is_troglodyte_lamp_f_on_cmp + +![is_troglodyte_lamp_f_on_cmp](./_images/light_cat_is_troglodyte_lamp_f_on_cmp.jpg) + +- is_troglodyte_lamp_g_on_cmp + +![is_troglodyte_lamp_g_on_cmp](./_images/light_cat_is_troglodyte_lamp_g_on_cmp.jpg) + +- factory_lamp_c_on_cmp + +![factory_lamp_c_on_cmp](./_images/light_cat_factory_lamp_c_on_cmp.jpg) + +- factory_lamp_e_a_on_cmp + +![factory_lamp_e_a_on_cmp](./_images/light_cat_factory_lamp_e_a_on_cmp.jpg) + +- factory_lamp_d_a_on_cmp + +![factory_lamp_d_a_on_cmp](./_images/light_cat_factory_lamp_d_a_on_cmp.jpg) + +- factory_lamp_d_b_on_cmp + +![factory_lamp_d_b_on_cmp](./_images/light_cat_factory_lamp_d_b_on_cmp.jpg) + +- factory_lamp_d_c_on_cmp + +![factory_lamp_d_c_on_cmp](./_images/light_cat_factory_lamp_d_c_on_cmp.jpg) + +- factory_lamp_e_b_on_cmp + +![factory_lamp_e_b_on_cmp](./_images/light_cat_factory_lamp_e_b_on_cmp.jpg) + +- factory_lamp_f_c_on_cmp + +![factory_lamp_f_c_on_cmp](./_images/light_cat_actory_lamp_f_c_on_cmp.jpg) + +- factory_lamp_e_c_on_cmp + +![factory_lamp_e_c_on_cmp](./_images/light_cat_factory_lamp_e_c_on_cmp.jpg) + +- factory_lamp_f_a_on_cmp + +![factory_lamp_f_a_on_cmp](./_images/light_cat_factory_lamp_f_a_on_cmp.jpg) + +- factory_lamp_f_b_on_cmp + +![factory_lamp_f_b_on_cmp](./_images/light_cat_factory_lamp_f_b_on_cmp.jpg) + +- industrial_lamp_steel_floor_a_far_on_cmp + +![industrial_lamp_steel_floor_a_far_on_cmp](./_images/light_cat_industrial_lamp_steel_floor_a_far_on_cmp.jpg) + +- industrial_lamp_steel_wall_a_far_on_cmp + +![industrial_lamp_steel_wall_a_far_on_cmp](./_images/light_cat_industrial_lamp_steel_wall_a_far_on_cmp.jpg) + +- factory_lamp_g_on_cmp + +![factory_lamp_g_on_cmp](./_images/light_cat_factory_lamp_g_on_cmp.jpg) + +- lamppost_q_on_cmp + +![lamppost_q_on_cmp](./_images/light_cat_lamppost_q_on_cmp.jpg) + +- is_lamp_wall_f_on + +![is_lamp_wall_f_on](./_images/light_cat_is_lamp_wall_f_on.jpg) + +- wall_lamp_a_onoff_b_cmp + +![wall_lamp_a_onoff_b_cmp](./_images/light_cat_wall_lamp_a_onoff_b_cmp.jpg) + +- berlin_lamp_c_on_cmp + +![berlin_lamp_c_on_cmp](./_images/light_cat_berlin_lamp_c_on_cmp.jpg) + +- lamp_wall_e_a_on_cmp + +![lamp_wall_e_a_on_cmp](./_images/light_cat_lamp_wall_e_a_on_cmp.jpg) + +- is_lamp_wall_e_sh_on_cmp + +![is_lamp_wall_e_sh_on_cmp](./_images/light_cat_is_lamp_wall_e_sh_on_cmp.jpg) + +- bunker_lamp_wall_a_on + +![bunker_lamp_wall_a_on](./_images/light_cat_bunker_lamp_wall_a_on.jpg) + +- is_lamp_wall_g_on_cmp + +![is_lamp_wall_g_on_cmp](./_images/light_cat_is_lamp_wall_g_on_cmp.jpg) + +- 150cm_flak_sw_37_on_cmp + +![150cm_flak_sw_37_on_cmp](./_images/light_cat_150cm_flak_sw_37_on_cmp.jpg) + +- garage_floor_lamp_a_b_on + +![garage_floor_lamp_a_b_on](./_images/light_cat_garage_floor_lamp_a_b_on.jpg) + +- cdk_lamp_a_on_cmp + +![cdk_lamp_a_on_cmp](./_images/light_cat_cdk_lamp_a_on_cmp.jpg) + +- 150cm_flak_sw_37_statick_on_cmp + +![150cm_flak_sw_37_statick_on_cmp](./_images/light_cat_150cm_flak_sw_37_statick_on_cmp.jpg) + +- bunker_lamp_oil_a_on_hook_cmp + +![bunker_lamp_oil_a_on_hook_cmp](./_images/light_cat_bunker_lamp_oil_a_on_hook_cmp.jpg) + +- is_lamp_celling_a_b_on_cmp + +![is_lamp_celling_a_b_on_cmp](./_images/light_cat_is_lamp_celling_a_b_on_cmp.jpg) + +- is_lamp_celling_a_on_cmp + +![is_lamp_celling_a_on_cmp](./_images/light_cat_is_lamp_celling_a_on_cmp.jpg) + +- is_lamp_celling_c_on_cmp + +![is_lamp_celling_c_on_cmp](./_images/light_cat_is_lamp_celling_c_on_cmp.jpg) + +- is_chandelier_h_tall_on_cmp + +![is_chandelier_h_tall_on_cmp](./_images/light_cat_is_chandelier_h_tall_on_cmp.jpg) + +- is_lamp_celling_b_a_dmg_on_cmp + +![is_lamp_celling_b_a_dmg_on_cmp](./_images/light_cat_is_lamp_celling_b_a_dmg_on_cmp.jpg) + +- is_chandelier_a_on_cmp + +![is_chandelier_a_on_cmp](./_images/light_cat_is_chandelier_a_on_cmp.jpg) + +- is_lamp_celling_b_b_dmg_on_cmp + +![is_lamp_celling_b_b_dmg_on_cmp](./_images/light_cat_is_lamp_celling_b_b_dmg_on_cmp.jpg) + +- is_chandelier_b_on_cmp + +![is_chandelier_b_on_cmp](./_images/light_cat_is_chandelier_b_on_cmp.jpg) + +- is_lantern_hanging_a_on + +![is_lantern_hanging_a_on](./_images/light_cat_is_lantern_hanging_a_on.jpg) + +- is_lantern_hanging_ceiling_a_on + +![is_lantern_hanging_ceiling_a_on](./_images/light_cat_is_lantern_hanging_ceiling_a_on.jpg) + +- is_lantern_hanging_wall_a_on + +![is_lantern_hanging_wall_a_on](./_images/light_cat_is_lantern_hanging_wall_a_on.jpg) + +- is_lamp_wall_a_on_cmp + +![is_lamp_wall_a_on_cmp](./_images/light_cat_is_lamp_wall_a_on_cmp.jpg) + +- is_lamp_celling_b_on_cmp + +![is_lamp_celling_b_on_cmp](./_images/light_cat_is_lamp_celling_b_on_cmp.jpg) + +- is_chandelier_h_on_cmp + +![is_chandelier_h_on_cmp](./_images/light_cat_is_chandelier_h_on_cmp.jpg) + +- wooden_power_pole_d_on_cmp + +![wooden_power_pole_d_on_cmp](./_images/light_cat_wooden_power_pole_d_on_cmp.jpg) + +- wooden_power_pole_f_on_cmp + +![wooden_power_pole_f_on_cmp](./_images/light_cat_wooden_power_pole_f_on_cmp.jpg) + +- wooden_power_pole_d_glass_on + +![wooden_power_pole_d_glass_on](./_images/light_cat_wooden_power_pole_d_glass_on.jpg) + +- lamppost_a_on_cmp + +![lamppost_a_on_cmp](./_images/light_cat_lamppost_a_on_cmp.jpg) + +- lamppost_b_on_cmp + +![lamppost_b_on_cmp](./_images/light_cat_lamppost_b_on_cmp.jpg) + +- lamppost_c_on_cmp + +![lamppost_c_on_cmp](./_images/light_cat_lamppost_c_on_cmp.jpg) + +- lamppost_d_on_cmp + +![lamppost_d_on_cmp](./_images/light_cat_lamppost_d_on_cmp.jpg) + +- lamppost_e_on_cmp + +![lamppost_e_on_cmp](./_images/light_cat_lamppost_e_on_cmp.jpg) + +- lamppost_f_on_cmp + +![lamppost_f_on_cmp](./_images/light_cat_lamppost_f_on_cmp.jpg) + +- lamppost_g_on_cmp + +![lamppost_g_on_cmp](./_images/light_cat_lamppost_g_on_cmp.jpg) + +- lamppost_h_on_cmp + +![lamppost_h_on_cmp](./_images/light_cat_lamppost_h_on_cmp.jpg) + +- lamppost_i_on_cmp + +![lamppost_i_on_cmp](./_images/light_cat_lamppost_i_on_cmp.jpg) + +- lamppost_j_on_cmp + +![lamppost_j_on_cmp](./_images/light_cat_lamppost_j_on_cmp.jpg) + +- lamppost_k_on_cmp + +![lamppost_k_on_cmp](./_images/light_cat_lamppost_k_on_cmp.jpg) + +- lamppost_l_on_always_cmp + +![lamppost_l_on_always_cmp](./_images/light_cat_lamppost_l_on_always_cmp.jpg) + +- lamppost_m_on_cmp + +![lamppost_m_on_cmp](./_images/light_cat_lamppost_m_on_cmp.jpg) + +- wall_lamp_a_on_cmp + +![wall_lamp_a_on_cmp](./_images/light_cat_wall_lamp_a_on_cmp.jpg) + +- lamppost_huge_a_on_cmp + +![lamppost_huge_a_on_cmp](./_images/light_cat_lamppost_huge_a_on_cmp.jpg) + +- lamppost_huge_b_on_cmp + +![lamppost_huge_b_on_cmp](./_images/light_cat_lamppost_huge_b_on_cmp.jpg) + +- lamppost_huge_c_on_cmp + +![lamppost_huge_c_on_cmp](./_images/light_cat_lamppost_huge_c_on_cmp.jpg) + +- lamppost_huge_a_glass_on + +![lamppost_huge_a_glass_on](./_images/light_cat_lamppost_huge_a_glass_on.jpg) + +- lamppost_a_glass_on + +![lamppost_a_glass_on](./_images/light_cat_lamppost_a_glass_on.jpg) + +- lamppost_b_glass_on + +![lamppost_b_glass_on](./_images/light_cat_lamppost_b_glass_on.jpg) + +- lamppost_c_glass_on + +![lamppost_c_glass_on](./_images/light_cat_lamppost_c_glass_on.jpg) + +- lamppost_d_glass_on + +![lamppost_d_glass_on](./_images/light_cat_lamppost_d_glass_on.jpg) + +- lamppost_f_glass_on + +![lamppost_f_glass_on](./_images/light_cat_lamppost_f_glass_on.jpg) + +- lamppost_g_glass_on + +![lamppost_g_glass_on](./_images/light_cat_lamppost_g_glass_on.jpg) + +- lamppost_i_glass_on + +![lamppost_i_glass_on](./_images/light_cat_lamppost_i_glass_on.jpg) + +- lamppost_j_glass_on + +![lamppost_j_glass_on](./_images/light_cat_lamppost_j_glass_on.jpg) + +- lamppost_k_glass_on + +![lamppost_k_glass_on](./_images/light_cat_lamppost_k_glass_on.jpg) + +- lamppost_l_glass_always_on + +![lamppost_l_glass_always_on](./_images/light_cat_lamppost_l_glass_always_on.jpg) + +- lamppost_l_glass_on + +![lamppost_l_glass_on](./_images/light_cat_lamppost_l_glass_on.jpg) + +- lamppost_m_glass_on + +![lamppost_m_glass_on](./_images/light_cat_lamppost_m_glass_on.jpg) + +- wall_lamp_a_glass_on + +![wall_lamp_a_glass_on](./_images/light_cat_wall_lamp_a_glass_on.jpg) + +- bonfire_a_vfx_cmp + +![bonfire_a_vfx_cmp](./_images/light_cat_bonfire_a_vfx_cmp.jpg) + +- is_lamp_table_a + +![is_lamp_table_a](./_images/light_cat_is_lamp_table_a.jpg) + +- is_lamp_floor_a + +![is_lamp_floor_a](./_images/light_cat_is_lamp_floor_a.jpg) + +- is_table_lamp_b + +![is_table_lamp_b](./_images/light_cat_is_table_lamp_b.jpg) + +- is_table_lamp_a + +![is_table_lamp_a](./_images/light_cat_is_table_lamp_a.jpg) + +- is_lamp_wall_b + +![is_lamp_wall_b](./_images/light_cat_is_lamp_wall_b.jpg) + +- is_lamp_wall_c + +![is_lamp_wall_c](./_images/light_cat_is_lamp_wall_c.jpg) + +- is_lamp_wall_d + +![is_lamp_wall_d](./_images/light_cat_is_lamp_wall_d.jpg) + + diff --git a/_sources/assets/lighting/lights.md.txt b/_sources/assets/lighting/lights.md.txt new file mode 100644 index 000000000..d18e07b51 --- /dev/null +++ b/_sources/assets/lighting/lights.md.txt @@ -0,0 +1,210 @@ +# Lights + +## Overview + +This article discusses the mechanics and configuration of environmental light +sources, which are used as elements of the game world, added to composite +objects, or placed by level designers as game objects (gameobj). + +- Light sources are templates located in the `lights.blk` file within the + `/prog` directory. +- They can be configured either via the `.blk` file or through the mission + editor (`F12`). However, the editor uses only for configuring settings. To + save changes, you must manually copy them back into the `.blk` file. +- Globally, light sources fall into two categories: **omni** (spherical) and + **spot** (a 90-degree directional cone). +- Lights are added to the scene as `gameobj`. More details about this process + are provided below. +- It's a good practice to name both the light sources and visual models with + details about their radius and color (if necessary). +- Avoid reusing the same light sources in different environments. For instance, + if you have a chandelier hanging five meters above the ground, do not use the + same light at eight meters. Create a separate object with its own settings. In + reality, larger rooms require stronger bulbs. + +## Key Considerations When Creating a New Light Source + +1. **Spotlights vs. Omni Lights**: Spotlights illuminate an area six times + smaller than omni lights, and they are also six times faster in terms of + performance. Whenever possible, use spotlights instead of omni lights. + +2. **Extending Light Templates**: Creating or configuring a new light source + often involves adding a new visual model, such as a lamp or spotlight. Always + create a new light source by extending the original template unless there’s a + special reason to modify an existing one. This ensures that future changes to + a light source don’t unintentionally affect other lights that extend from it. + + From a performance standpoint, there is no difference between ten clones of a + single light source and ten unique lights with the same parameters. + Therefore, don’t hesitate to increase the number of light sources. When + naming them, use descriptive titles that indicate their specific use, + including references to the visual model. + +## Light Source Parameters and Configuration + +### light__color + +Defines the light color using RGBA values from `0` to `255`. The alpha channel +(A) has no effect in this context. + +### light__brightness + +It's crucial to configure brightness in conjunction with the light's maximum +radius. + +- Do not set the brightness higher than necessary for the maximum radius. + Excessive brightness degrades visual quality, affects the eye adaptation + system, and can negatively impact gameplay. +- Always adjust brightness individually for each light source instead of copying + values from other lights. Balance brightness with the maximum radius of the + light. + +When configuring natural light sources like torches, candles, kerosene lamps, or +campfires, avoid using overly saturated yellow-orange colors or excessively high +brightness levels. + +### light__max_radius + +Defines the boundary of the light’s influence. The edge is soft, with a gradient +extending inward. The gradient strength is fixed and represents a percentage of +the radius. + +- **Optimize Radius and Brightness Together**: As with brightness, configure the + radius so it matches the brightness. Overlapping light radii harm performance, + so keep radii as small as possible and ensure minimal overlap between lights. + +```{important} +The maximum visible distance of a light with white color (255, 255, 255) is 3 +meters for every unit of brightness. +``` + +For convenience, here’s a table showing the relationship between brightness and +radius: + +| Brightness | Max Radius | +|:----------:|:----------:| +| 0.25 | 0.75 | +| 0.75 | 2.25 | +| 3 | 9 | +| 5 | 15 | +| 10 | 30 | + +Set the radius slightly below these values for optimization purposes, but never +exceed them. Additionally, take into account the effect of IES textures – since +light rays rarely reach their maximum value in such profiles, the maximum radius +should be adjusted accordingly on a case-by-case basis. However, the values in +the table should not be exceeded. + +### spot_light__shadows / omni_light__shadows + +Enable shadows for large light sources that illuminate an entire room. Avoid +using shadows for minor lights like desk lamps or wall sconces, as shadows are +resource-intensive. + +### spot_light__dynamic_obj_shadows / omni_light__dynamic_obj_shadows + +**Use with extreme caution**. This is very performance-intensive and should only +be applied to large, significant, and unique light sources. On a given map, +there should be no more than two or three such lights. Ideally, dynamic shadows +should not be used at all unless absolutely necessary. + +### spot_light__shadow_shrink / omni_light__shadow_shrink + +This parameter controls shadow softness and is set using integer numbers (no +decimals). + +- Wide visual light sources (like a campfire) should have soft shadows, while + small sources (like a bulb) should have sharper shadows. +- The valid range is from `0` to `2`. + + + + +

0

2

+ + + + +### spot_light__inner_attenuation + +This parameter is specific to spotlights and controls the softness of the +spotlight’s edge. + +- `0` for maximum blur, `1` for sharp edges. + + + + +

0

1

+ + + + +### light__texture_name + +These are photometric data textures used for volumetric shadow mapping. Detailed +information can be found in a [Photometric Lights](./photometric_lights.md) +article. + +- IES textures have negligible file size and should be placed in the common + directory: + + ``` + /develop/assets/manmade_common/textures/ies + ``` +- Feel free to create new textures to fit your needs if no existing ones are + suitable. Name them descriptively, preferably including the name of the visual + model they are paired with, and begin with `ies_*`. For example, + `ies_barsed_lamp_b`. + +### light__nightly + +This is a binary setting (`yes`/`no`). When activated, the light will turn on +only during night time. + +### light__use_box + +This setting, enabled by default for all omni lights, is a binary (`yes`/`no`) +option that controls whether the light is restricted to render only within an +envi_probe (typically indoors). If the light is used outdoors, this should be +disabled. Spotlights are usually sufficient for outdoor lighting. + +## Configuring Emission Strength for Visual Models + +For configuring emission on shaders used by lamps and other visual models +associated with light sources, refer to the following shaders: + +- [rendinst_simple_glass](../shaders/dng-shaders/rendinst_simple_glass.md) +- [rendinst_emissive/dynamic_emissive](../shaders/dng-shaders/rendinst_emissive.md) + +It’s important to keep in mind that overly bright emission, like excessive light +brightness, can ruin the visual quality, interfere with eye adaptation, and +negatively impact gameplay. Adjust emission to be as subtle as possible. + +## GameObj + +To add a light source to a composite object, create a gameObject for it and +place it in `*/develop/assets/common/gameRes/gameObjects` directory. Name the +file: `template_name.gameObj.blk`. + +```{seealso} +For more information, see +[gameObjects](../about-assets/gameobjects/gameobjects.md). +``` + +If the light source is used with a dynamic model (which cannot be drawn in +*daEditor*), you can add the following line to the `gameObj` to display the +model in the editor: + +``` +ref_dynmodel:t="name_of_dynmodel" +``` + +## Restriction Box + +It’s possible to further limit the influence of light sources using the +`omni_light_restriction_box.gameObj.blk` object. This is useful for preventing +light from passing through walls, for example. Despite the name containing +`omni_light`, this object also works for spotlights. + + diff --git a/_sources/assets/lighting/lights_creation_guide.md.txt b/_sources/assets/lighting/lights_creation_guide.md.txt new file mode 100644 index 000000000..4562edbb5 --- /dev/null +++ b/_sources/assets/lighting/lights_creation_guide.md.txt @@ -0,0 +1,163 @@ +# Lights Creation Guide + +## Main Point + +The key rule when working with lighting is to carefully check the source +placement results. The radius of light sources should be sufficient to +illuminate the necessary parts of a room or area, but not exceed reasonable +limits. For instance, it’s inappropriate to use a light source designed for a +small guardhouse to illuminate a large hangar. + +## Light Source + +Templates for light sources are located in the `lights.blk` file within the +`/prog` directory. For example, in *daNetGame*-based projects, it +can be found here: + +`/prog/gameBase/content/common/gamedata/templates/lights.blk` + +Details about light source settings are discussed in the [Lights](./lights.md) +article. + +**Key points:** + +- For each new visual model, create and configure a new light source, including + the visual model's name in the light source name (along with functional + parameters such as light radius if needed). +- Prefer to use **spot** lights over **omni** lights. +- Light sources can be adjusted via the mission editor (`F12` in-game). These + changes won’t be saved but can be previewed immediately. +- To change the time of day, use the browser-based tool [Var + Editor](http://127.0.0.1:23456/editvar). +- Balance brightness and maximum radius when configuring light sources. +- If creating an **omni** light for outdoor use (outside an `envi_probe`), + ensure the `light__use_box` parameter is disabled; otherwise, the light won’t + be rendered outside. +- Avoid activating shadows if possible. +- If shadows are enabled, they should only apply to static objects. Dynamic + objects may have a unique light source if necessary. +- Always check shadows in-game, as enabled shadows may degrade the scene in + certain situations, depending on the light source's position relative to the + visual model. +- If the light source's visual model can be destroyed, add the parameter + `destroyable_with_rendinst:tag` to the light source template. +- If the light source is only active during nighttime (e.g., a street lamp), add + the parameter `light__nightly:b=yes` to the template. + +### IES Textures + +Details on creating IES textures are covered in the [Photometric +Lights](./photometric_lights.md) article. Don’t hesitate to generate multiple +IES textures. Name them according to the light source and/or visual model. + +### Flickering Source + +For more information on flickering light sources, refer to the [Flickering +Lights](./flickering_lights.md) article. + +To correctly set up a flickering light source, the following entities must be +created: + +1. A flickering light source. + + ```{note} + This is not the same as a light source; refer to the + [article](./flickering_lights.md) for details. + ``` + +2. A dynamic visual model with an animation controller. +3. A template linking the animChar of the dynamic model to the flickering + source. Don’t forget to specify destructibility if the dynamic model can be + destroyed. +4. A gameObj template linking the animChar of the dynamic model to the + flickering source. +5. A light source. +6. A template linking the light source to the flickering source. +7. A gameObj template linking the light source to the flickering source. +8. A composite file combining the two gameObjects: one for linking the + flickering source to the dynamic model and the other for linking the + flickering source to the light source. + +## Visual Model + +This refers to the geometric model of the light source, such as a lamp, +spotlight, torch, or any other visual representation of a light source. + +Consider whether the light source requires flickering. For emergency lights, +torches, and most lamps (since many can have flickering variants), create a +dynamic model with an emissive surface and, if necessary, a render instance +base. The logic behind separating the visual model into render instances and +dynamic models, as well as their preparation, is detailed in the [Flickering +Lights](./flickering_lights.md) article. + +### Emission Strength + +There are no exact values for emission strength since it depends on factors like +the albedo, emission mask, and the size of the emissive surface. Configure the +emission strength individually, keeping in mind that lower values are generally +better. Excessive emission can disrupt the camera's adaptation and negatively +impact gameplay. + +More details on configuring emission can be found in [this +article](../shaders/dng-shaders/rendinst_emissive.md). + +## GameObj + +```{seealso} +For more information, see +[gameObjects](../about-assets/gameobjects/gameobjects.md). +``` + +Create a gameObj for both the light source and the dynamic visual model. In +*daNetGame*-based projects, for example, they are located here: + +`/develop/assets/common/gameRes/gameObjects` + +For convenience, ensure to define a reference model in the gameObj. For example: + +`ref_dynmodel:t="lamppost_d_glass_flicker_dynmodel"` + +This is necessary to display the geometry in the +[*daEditor*](../../dagor-tools/daeditor/daeditor/daeditor.md). + +## Restriction Box + +The *Restriction Box* is a gameObj used to cut off light. It’s required for +light sources that don’t cast shadows, to prevent light from passing through +walls. Typically, it’s not included in the composite file with the light source, +but rather placed manually at the location or added to the composite file for +the entire building. + +The object is named: + +`omni_light_restriction_box.gameObj.blk` + +## Composite + +[Composite](../all-about-blk/composit_blk.md) file can use the same visual model +but have different light sources. In such cases, make sure to include the light +source functionality in the composite file name. Always specify the radius in +the names of composites containing light sources, e.g.: + +`factory_lamp_a_flicker_10m_cmp.composit.blk` + +A composite containing a light source may consist of: + +- **RendInst** – static base, which can be destructible and include destruction + logic. +- **GameObj** template describing the light source or linking the light source + to the flickering source. +- **GameObj** template using a dynamic model, in case the light source has a + flickering variant. +- **Restriction Box** for cutting off light, though it is often placed + separately and not included in the composite with the light source. + +## Placing Light Sources + +Remember to account for the light radius when placing light sources. The same +light source cannot be used to illuminate both a small room and a large hall. +This would either leave the hall under-illuminated or cause the small room to be +over-lit. Excessive brightness not only breaks visual immersion but also +disrupts gameplay. + + diff --git a/_sources/assets/lighting/photometric_lights.md.txt b/_sources/assets/lighting/photometric_lights.md.txt new file mode 100644 index 000000000..ba4c98e4e --- /dev/null +++ b/_sources/assets/lighting/photometric_lights.md.txt @@ -0,0 +1,395 @@ +# Photometric Lights (IES) + +## Overview + +In *daNetGame*-based projects, along with traditional light sources like spot or +omni, you can also add photometric light sources using the [IES +format](https://blog.ansi.org/2020/02/standard-file-photometric-data-ies-lm-63-19/). + +An IES file is essentially a text file that defines the distribution of light +intensity from a source, based on angles in 3D space. The format specification +can be found +[here](http://expertunion.ru/normyi-osvescheniya/iesna-lm-63-1995-opisanie-formata-ies.html). + +You can download ready-made IES files from the internet, as most lighting +manufacturers provide IES profiles for their products. There are also extensive +IES libraries available, containing thousands of profiles suitable for various +visualization needs. + +Alternatively, you can create IES profiles manually using various editors. I’ve +used this [IES +generator](https://lightonline.ru/documents/Other/IES_Generator.html), which is +simple to use: you draw the light profile in the vertical plane with the mouse. +The resulting profile is then "rotated" around the vertical axis (similar to the +*Lathe* modifier in *3ds Max*, which creates a 3D object from a spline). +However, this tool cannot create non-symmetrical IES profiles along both axes, +meaning the light distribution cannot vary simultaneously on walls and floors. + +![Photometric Light Sources](./_images/photometric_lights_01.jpg) + +If more complex IES profiles are needed, you'll have to find and test other +software, or search for existing IES files. For simpler tasks, this tool +suffices. Examples are provided at the end of this article. + +## Integrating IES Files in daNetGame-based Projects + +Once you've downloaded or created an IES file, place it in the following +directory: + +``` +//develop/assets/manmade_common/textures/ies +``` + +The following block in the global `foled.blk` file handles the processing of IES +files: + +``` +virtual_res_blk{ + find:t="^(.*)\.ies$" + className:t="tex" + contents{ + addrU:t="clamp"; addrV:t="clamp" + convert:b=yes + buildIES:b=yes + textureWidth:i=128 + textureHeight:i=128 + } +} +``` + +This means that during the build process, each IES file is converted into a +simple 128x128 pixel texture in L8 format. + +Details of the engine's implementation are discussed in the +[Photometry](./photometric_lights.md#photometry) section. + +## Using an IES File in a Light Source + +To use a specific IES file as a light source, simply specify its name in the +template under the `light.texture_name` variable and compile the vroms. + +The light template for *daNetGame*-based projects is located at: + +``` +//prog/gameBase/content/common/gamedata/templates/_lights.blk +``` + +For example, a wall sconce with two lamps would look like this: + +``` +light_sconce_medium{ + _extends:t="omni_light" + light.max_radius:r=3.5 + light.offset:p3=0, 0, 0 + light.color:c=255, 152, 70, 255 + light.brightness:r=2.5 + light.contact_shadows:b=false + light.texture_name:t="ies_doublelamp_sconce_a" +} +``` + +## Important Notes on IES and Omni Lights + +Photometric lights can only be applied to omni lights, which means they won’t +cast shadows. As such, they are not suitable for use in lamps, spotlights, or +similar sources. Instead, they should be reserved for artistic lighting effects. + +## Examples of IES Usage + +Below are some example IES profiles (from left to right: view in the [*Asset +Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md), view in +the *IESGen 4* generator, and view in-game): + +- `ies_doublelamp_sconce_a` + + + + + +- `ies_multilamp_sconce_a` + + + + + +- `ies_singlelamp_sconce_a` + + + + + +- `ies_singlelamp_sconce_b` + + + + + +- `ies_hand_lantern_a` (initially intended for a kerosene lamp, but ultimately + used for emergency exit signs). + + + + + +In one of the examples, to get uneven lighting on the ceiling, I simply rotated +the light source horizontally by 90 degrees. + +- `ies_monitor_a` + + + + + +As shown in the last example, even under the table there is light because omni +lights do not cast shadows. However, the result is acceptable – certainly better +than placing there a spotlight with harsh shadows. + +## Limitations of IES + +It’s important to understand that a single IES profile cannot perfectly recreate +the complex light pattern of multi-source or surface-based lights. The light +always radiates from a single point, not from multiple sources or an area. For +instance, representing a wall sconce with many small bulbs using a single IES +profile is always a compromise. You'll notice that the light rays emanate from +the center rather than from each individual bulb. Nevertheless, the result is +still visually acceptable. + +![Limitations of IES](./_images/photometric_lights_20.jpg) + +## Photometry + +*daNetGame*-based projects support photometry files to describe the light +distribution of omni lights. This article explains how to use them. + +#### Supported File Types + +- **IES** + - Format: [ANSI/IES LM-63-19](https://blog.ansi.org/2020/02/standard-file-photometric-data-ies-lm-63-19/) + - File details: [Lifewire article on .ies files](https://www.lifewire.com/ies-file-2621816) + +#### File Placement + +Photometry files should be placed in the `develop/assets/` directory under an +appropriate folder. To export these assets, add the following block to the +`.folder.blk`: + +``` +virtual_res_blk{ + find:t="^(.*)\.ies$" + className:t="tex" + contents{ + convert:b=yes + buildIES:b=yes + textureWidth:i=128 + textureHeight:i=128 + blurRadius:r=3 + phiMin:r=0 + phiMax:r=360 + thetaMin:r=0 + thetaMax:r=180 + edgeFadeout:r=-1 + } +} +``` + +Ensure that the asset names have the `ies_` prefix. Without it, they will not be +recognized as photometry textures in the game. + +The `textureWidth` and `textureHeight` components globally define the resolution +of the generated textures. While it's possible to export photometry textures +with different resolutions, the game will not be able to load them. If you +create additional blocks to parse `.ies` files or add another type later, ensure +that all photometry textures maintain the same resolution. + +### Spotlights & Special Options + +For spotlights, light is concentrated around the center, allowing for enhanced +texture quality. The IES exporter supports limiting light intensity to a +specific angle around the view direction (e.g., 180 degrees to restrict light to +the forward direction). + +#### How to Use + +This option must be applied individually to lights: + +1. Place the `.ies` file in the appropriate directory (with a corresponding + `.folder.blk` for processing). +2. Open the [*Asset + Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) and + select the IES resource. + - Check the photometry info in the right-side panel. + - The top three values (blur radius, scaling, rotated) show the current + configuration. + - The bottom two values represent the calculated optimal values. +3. Create a virtual asset `.blk` file, such as `ies_flashlight_a.tex.blk` for + `ies_flashlight_a.ies`. +4. Specify the `iesScale:r` and `iesRotation:b` properties with the optimal + values. (Currently, this process is not automated.) + +![How to Use](./_images/photometry_01.jpg) + +The rotation value also implicitly adjusts the scaling. These specified values +should be close to the optimal values displayed in the *Asset Viewer*. If the +values are too low, leading to a loss in texture quality, *daBuild* will display +a warning and suggest the optimal values. If the scaling cannot store the +texture properly, *daBuild* will produce an error. + +### Blurring + +Blurring can help mitigate pixelation or aliasing in lights. The `blurRadius` is +specified in degrees, not pixels, and applies to the entire sphere to ensure +texture edges align seamlessly. + +#### Usage + +Define the `blurRadius:r` parameter in the `.folder.blk` or the virtual asset +`.blk` file, as shown in the examples. The default value is `3`. + +### Angular Restrictions + +The light source's content can be restricted to specific angular ranges on both +axes. The relevant options are: + +``` +phiMin:r=0 +phiMax:r=360 +thetaMin:r=0 +thetaMax:r=180 +edgeFadeout:r=-1 +``` + +- The `phiMin`-`phiMax` range defines the restriction around the forward + direction. +- `thetaMin`-`thetaMax` defines the restriction from forward (theta=`0`) to + backward (theta=`180`). + +Light intensity is fully preserved within the specified area. Outside this area, +it fades out based on `edgeFadeout`. By default, `edgeFadeout:r=-1` calculates +an automatic fadeout to ensure the light doesn't bleed more than one pixel on +the texture (resolution-dependent). If `edgeFadeout >= 0`, it is treated as a +degree value, independent of texture resolution. + +**Example**: + +To prevent backlight leakage through walls, use a vertical restriction with +`thetaMin:r=0` and `thetaMax:r=93`. You must create a new virtual resource with +these parameters in the `.folder.blk` (e.g., +`/develop/assets/manmade_common/textures/ies/.folder.blk`). + + + + +### Setting Photometry for an Omni Light + +To set the photometry for an omni light: + +1. Add the `.ies` files to an asset folder. +2. Define the photometry of the omni light in the map's `.blk` file: + +``` +entity{ + _template:t="omni_light" + light.direction:p3=0, 1, 0 + light.texture_name:t="asset_name" + ... +} +``` + +#### Notes for Custom Textures + +- Any texture can be used as a photometry texture in `light.texture_name`, but + for custom textures (not generated by the IES converter), keep the following + in mind: + - The red channel is used in the shader. + - The resolution must match the photometry resolution specified in the + `.folder.blk`. + - The layout must match the mapping algorithm (spherical or octahedral). + - If the resolution is low, folding lines may be visible in the light + intensity. This can be mitigated by blurring the pixel pairs at the folding + lines to have similar values: + - **Spherical mapping**: Left and right sides `(0, y)` ↔ `(w-1, y)` + - **Octahedral mapping**: Each side's halves fold together, e.g., for the + top: `(x, 0)` ↔ `(w-x-1, 0)` + - Using custom textures for purposes other than testing is not recommended due + to the maintenance overhead associated with resolution and layout changes. + +- The game will load assets based on the `ies_` prefix. +- Additionally, since photometry is not uniform, the light source direction must + be specified. By default, the light points downward, but this may not match + the orientation of the photometry in the `.ies` file. While this worked for + tested files, no rule guarantees a specific orientation in `.ies` files. + +- For better performance, lights do not store a full orientation and can rotate + freely around their direction. Below are the exact details of how the light's + orientation is handled: + - The light's **direction** corresponds to its **Y-axis**. When sampling + photometry data, this direction is represented by `theta = 0`, while `phi` + varies within the range `[0, 2*pi]`. This typically reflects the direction + in which the light was pointed during measurement. + - The **X-axis** is either `(1, 0, 0)` or `(0, 0, 1)` — whichever option + results in a vector that is perpendicular to the light's direction. The + parallel component along the light's direction is removed to ensure this + perpendicularity. The axis further from the light's direction is chosen. + +- If the texture is not found, the game will issue a warning and proceed without + applying a photometry texture. + +- In cases where no photometry texture is specified or located, the light will + behave as before, using full intensity. + +### Mapping + +`.ies` files typically contain a limited number of non-uniformly spaced samples. +These are converted into textures using one of two mapping methods: + +- **Octahedral Mapping** (default): Provides better sample distribution. + + ![Octahedral Mapping](./_images/photometry_04.jpg) + +- **Spherical Mapping**: Though implemented, it's not in use due to slightly + worse performance and uneven sample distribution (dense at the poles, sparse + on the sides). + +#### Changing the Mapping Algorithm + +To enable spherical mapping: + +1. In `/prog/gameLibs/publicInclude/render/renderLights.hlsl`, + comment or uncomment the line: + +``` +#define USE_OCTAHEDRAL_MAPPING +``` + +2. In `prog/tools/sceneTools/assetExp/exporters/texExp.cpp`, modify the + following: + +``` +IesReader::ImageData img = ies.generateOctahedral(width, height); +// IesReader::ImageData img = ies.generateSpherical(width, height) +``` + +#### Technical Details of Generated Textures + +- Format: **L8 (8-bit, single channel)** +- File type: `.DDSX` +- **Spherical Mapping**: The first and last pixel columns are nearly identical + to avoid issues with interpolation at the folding lines (redundancy: h + pixels). +- **Octahedral Mapping**: Edge pixels are nearly matched with corresponding + folding pixels (redundancy: h + w pixels). + +**Examples:** + +- Test file: [photometry_file_test2.ies](./_images/photometry_file_test2.ies) + + + + +- Real data: [photometry_file_t8_06nw.ies](./_images/photometry_file_t8_06nw.ies) + + + + + + diff --git a/_sources/assets/lighting/replacing_or_modifying_lights.md.txt b/_sources/assets/lighting/replacing_or_modifying_lights.md.txt new file mode 100644 index 000000000..75fa5cbce --- /dev/null +++ b/_sources/assets/lighting/replacing_or_modifying_lights.md.txt @@ -0,0 +1,289 @@ +# Replacing or Modifying Lights in Props + +This article covers how to replace or modify light sources in props, using the +*Enlisted* project as an example. However, the general process is applicable to +any *daNetGame*-based project. + +## Phase 1: Setting Up the daEditor + +1. **Open [daEditor](../../dagor-tools/daeditor/daeditor/daeditor.md)**: + Navigate to your directory: `://enlisted/develop` + and run `daEditor.cmd`. + + ![](./_images/replacing_or_modifying_lights_01.jpg) + +2. **Open the Project**: Select **Open Project** from the menu. + + ![](./_images/replacing_or_modifying_lights_02.jpg) + +3. **Load the Map**: Open the *battle_of_berlin* map. + + ![](./_images/replacing_or_modifying_lights_03.jpg) + +4. **Hide Unnecessary Visual Elements**: Press `P` to open the **Properties** + window. In the **Navigation meshes** section, uncheck the unnecessary options + as shown below. + + ![](./_images/replacing_or_modifying_lights_04.jpg) + +5. **Disable Splines**: Red dots represent splines. To hide them, click the + black cross on the toolbar. + + ![](./_images/replacing_or_modifying_lights_05.jpg) + +6. **Hide Additional Elements**: If anything else needs to be hidden, press + `F11` and uncheck the relevant boxes in the pop-up window. + + ![](./_images/replacing_or_modifying_lights_06.jpg) + +7. **Navigate to the Prop**: Fly to the prop of interest using *freeCamera* + mode, toggled with the `Spacebar`. Move with `WASD` and `LMB`. + +8. **Select the Target Composite**: When you reach the light fixtures, select + the composite (in this case, a building like the *reichchancellery*) and + press `P` to open **Object Properties**. + +9. **Identify the Selected Asset**: Pay attention to the highlighted button that + shows the asset name (`reichchancellery_cmp`), which is more reliable than + the `Name` field, as these may differ. + + ![](./_images/replacing_or_modifying_lights_07.jpg) + +10. **Break the Composite into Components**: In the **Landscape** menu, select + **Split components into separate objects** to break the composite down. + Repeat this until you can access the light fixtures. + + ![](./_images/replacing_or_modifying_lights_08.jpg) + +11. **Select the Light Fixture**: Enable *object selection mode* (red face icon) + and select the light fixture. The name of the fixture will appear on the + mentioned button. + + ![](./_images/replacing_or_modifying_lights_09.jpg) + +## Phase 2: Asset Viewer and Light Preset Identification + +1. **Open the [Asset + Viewer](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md)**: Run + `daViewer.cmd` from the same directory as before. Copy the asset name and use + it to search the asset library. + +2. **Select the Composite**: The asset consists of three parts: + - Geometry + - Composite (geometry + collision) + - Collision + + Select the composite, right-click it, and choose **Reveal in Explorer**. + + ![](./_images/replacing_or_modifying_lights_10.jpg) + +3. **Locate the `.blk` File**: In the file directory, right-click the `.blk` + file and open it with a text editor or a tool like *FAR Commander*. + + ![](./_images/replacing_or_modifying_lights_11.jpg) + +4. **Find the Light Preset**: In the `.blk` file, find the light preset + referenced by the light fixture. Copy its name. + + ![](./_images/replacing_or_modifying_lights_12.jpg) + +5. **Search for the Preset**: Use *FAR Commander* (or a preferred method) to + search for the preset in the project directory `/enlisted/prog`. + Use `Alt+F1` to select the correct drive and `Alt+F7` to start the search. + The first line specifies the file mask, while the second line is for the name + of what you're searching for. Enter the name into the second line and press + `Enter`. + + ![](./_images/replacing_or_modifying_lights_13.jpg) + +6. **Open the Preset File**: The preset will be found in the `lights.blk` file. + Press `F4` to open it and view all the light templates. + + ![](./_images/replacing_or_modifying_lights_14.jpg) + + ![](./_images/replacing_or_modifying_lights_15.jpg) + +7. **Search for the Preset Name**: Use `F7` to search for the specific light + preset (e.g., `light_chandelier_big`) and navigate to the preset. + + ![](./_images/replacing_or_modifying_lights_16.jpg) + +## Phase 3: Modifying and Creating Light Templates + +1. **Find the Parent Template**: The `extends` parameter in the preset refers to + another preset (e.g., `omni_light`). Locate the parent preset. + + ![](./_images/replacing_or_modifying_lights_17.jpg) + +2. **Trace the Parent Presets**: If necessary, trace the hierarchy of templates + to the top-level light preset (e.g., `local_omni_light`). + + ![](./_images/replacing_or_modifying_lights_18.jpg) + +3. **Create a New Light Template**: Based on the parent template, create a new + one. This will require a new `.gameObj` file with a unique name, which the + new light template will reference. + +4. **Copy and Rename the Old Game Object**: In the directory where the old + `.gameObj` file is located, copy it and rename it as needed. Open the + corresponding `.blk` file and adjust the references. + + ![](./_images/replacing_or_modifying_lights_19.jpg) + +5. **Verify the Asset**: Search for the renamed asset in the *Asset Viewer*, + right-click it, and find its location in the file structure. + + ![](./_images/replacing_or_modifying_lights_20.jpg) + + ![](./_images/replacing_or_modifying_lights_21.jpg) + +6. **Rename the Game Object**: Follow the naming conventions as specified in the + [Naming Conventions](../../dagor-home/documentation/naming_conventions.md) + article. + + ![](./_images/replacing_or_modifying_lights_22.jpg) + +## Phase 4: Testing and Exporting + +1. **Open a Test Map in daEditor**: Open the test map by selecting **Open + Project** during the *daEditor* load process. + + ![](./_images/replacing_or_modifying_lights_23.jpg) + + After the compilation is complete, *daEditor* will prompt you to open a map. + To proceed, navigate to `levels/dev/asset_test_level` and open the `.blk` + file for the test level. + + ![](./_images/replacing_or_modifying_lights_24.jpg) + +2. **Clean Up the Scene**: Hide unnecessary elements as described earlier, and + delete any unwanted objects by pressing `Ctrl+A` and `Delete`. + +3. **Create and Place the New Entity**: Click the white face icon on the toolbar + to create an entity. Search for the new `gameObj` in the search field and + drag it into the scene. + + ![](./_images/replacing_or_modifying_lights_25.jpg) + +4. **Adjust the Pivot**: By default, the entity's pivot will be set to the world + origin (`0, 0, 0`), as the **Place on collision** toggler is set to **Place + pivot** . Open the **Properties** window (`P`) and set it to **-no-**. + + ![](./_images/replacing_or_modifying_lights_26.jpg) + +5. **Place the Chandelier Asset**: Copy the chandelier’s asset name, search for + it in *daEditor*, drag it into the scene, and align its collision settings by + entering the same numbers into the coordinate lines. + + ![](./_images/replacing_or_modifying_lights_27.jpg) + + ```{note} + The orientation of the game object along its axes is currently unclear and + can only be determined through experimentation. + ``` + +6. **Add Entities for Light Bulbs**: Add two entities for future light bulbs and + duplicate them by dragging while holding `Shift`. + + ![](./_images/replacing_or_modifying_lights_28.jpg) + +7. **Update Composite in daEditor**: You can change the composites tied to + entities via the **Property** window. Select the asset, click on the asset + name, and choose the appropriate entity (e.g., `light_***_big`). + + ![](./_images/replacing_or_modifying_lights_29.jpg) + + ![](./_images/replacing_or_modifying_lights_30.jpg) + +8. **Export the Composite**: Now, you need to assemble a new composite object. + The first object you select will serve as the root node, from which the + composite's pivot will inherit. Start by selecting the chandelier (its + geometry), then hold `Ctrl` and drag to select the remaining elements. + Next, click on **Landscape** and choose **Export as composite**. + + ![](./_images/replacing_or_modifying_lights_31.jpg) + +9. **Save the Composite**: Find the correct directory in the asset library, + append `_cmp` to the name, and save it. + + ![](./_images/replacing_or_modifying_lights_32.jpg) + +10. **Verify the Composite in Asset Viewer**: Search for the composite in the + *Asset Viewer* and ensure everything looks correct. + + ![](./_images/replacing_or_modifying_lights_33.jpg) + +## Final Steps: Export and Testing + +1. **Load the Location in daEditor**: Open *daEditor*, load the + *battle_of_berlin* level, and uncheck all in **Navigation meshes** for faster + export. + + ![](./_images/replacing_or_modifying_lights_34.jpg) + + ![](./_images/replacing_or_modifying_lights_35.jpg) + +2. **Export to Game**: Select **Project** ▸ **Export to game (PC format)**, + leave the settings unchanged, and confirm. + + ![](./_images/replacing_or_modifying_lights_36.jpg) + + ![](./_images/replacing_or_modifying_lights_37.jpg) + + The scene will be exported, and the changes will be written into the binary + file. + + ```{important} + If you are adding a new prop rather than modifying an existing one, a rebuild + is required. + ``` + While the build is exporting, you can update the light preset to the one you + need. To do this, go to the `prog` directory and find the `light.blk` file. + + ![](./_images/replacing_or_modifying_lights_38.jpg) + + ![](./_images/replacing_or_modifying_lights_39.jpg) + +3. **Replace the Light Preset**: In the `light.blk` file, find the appropriate + spotlight preset for replacement and copy it. + + ![](./_images/replacing_or_modifying_lights_40.jpg) + + Next, replace the active template with the copied preset. + + ![](./_images/replacing_or_modifying_lights_41.jpg) + + After modifying the template parameters, save the changes and close the file: + `F2` – save changes, `F4` – exit. + +4. **Launch the Game**: Navigate to the `/enlisted/game` directory + and launch the game via the `z_enlisted_launcher_prog`. + + ![](./_images/replacing_or_modifying_lights_42.jpg) + + In the **Scene** section, select the *berlin* map, choose `source` in + **Vroms**, and press the **Play** button. + + (Alternatively, you can enter the command `app/timeSpeed 0` in the console to + freeze time in the game). + + ![](./_images/replacing_or_modifying_lights_43.jpg) + +5. **Adjust Lighting Orientation**: Once in the game, switch to *free camera* + mode or press `F12` and navigate to the asset you are working on. As we can + see, there are now two entity objects, confirming that the changes have been + applied. However, we also notice that the light fixtures are oriented + incorrectly. + + ![](./_images/replacing_or_modifying_lights_44.jpg) + + To fix this, return to the *daEditor* with the test map. Adjust the + orientation of the light entities, reassemble, and export the composite. + Afterward, re-export the map, reopen the game, and test the changes again. + + ![](./_images/replacing_or_modifying_lights_45.jpg) + + Once the lights are correctly oriented, proceed with the final lighting + configuration as described in the [Lights](./lights.md) article. + + diff --git a/_sources/assets/materials/index.rst.txt b/_sources/assets/materials/index.rst.txt new file mode 100644 index 000000000..1361951ca --- /dev/null +++ b/_sources/assets/materials/index.rst.txt @@ -0,0 +1,12 @@ + +Materials +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + proxymats.md + + + diff --git a/_sources/assets/materials/proxymats.md.txt b/_sources/assets/materials/proxymats.md.txt new file mode 100644 index 000000000..4ff9a584b --- /dev/null +++ b/_sources/assets/materials/proxymats.md.txt @@ -0,0 +1,189 @@ +# Proxymats + +## Overview + +Proxy materials (*proxymats*) are a system of shared reference materials for +multiple `.dag` files. These materials are stored as separate `.blk` files, and +when edited, changes automatically apply to all `.dag` files referencing that +specific proxy material. + +To implement the system, follow these steps: +- Create a `.blk` file for the proxy material. +- Specify that the material in the `.dag` file is a proxy material. +- In the `.folder.blk`, specify that the underlying `.dag` files use proxy + materials. For example: + + ``` + virtual_res_blk{ + find:t="^(.*)\.lod00\.dag$" + className:t="rendInst" + contents{ + lod{range:r=200;} + allowProxyMat:b=yes + } + } + ``` + +This way, all underlying `.dag` files will be rebuilt whenever the proxy +materials they reference are modified. + +```{important} +1. **Do not add this parameter to directories without `.dag` files that utilize + proxy materials.** Doing so will slow down asset validation and building + resources. +2. **Use the system wisely.** Avoid creating common proxy materials across + fundamentally different asset packs. + + For example, you don't want the machine gun materials for player-controlled + ships to change just because an environment artist tweaked the proxy material + for their own needs. + + In such cases, it's better to duplicate the proxy material. Remember, it's + just a material, not the textures themselves. +``` + +## How to Create a Proxymat + +Proxy material `.blk` files must have the suffix `.proxymat.blk`. + +For instance, a `.blk` file for a brick wall proxy material would be named: +`brick_wall.proxymat.blk`. + +The simplest way to create content for a proxy material `.blk` is to configure a +material on a `.dag` file and then copy the content into a separate `.blk` file. +Only minimal edits are required. Since a proxy material `.blk` can only contain +one material (though a `.dag` can reference any number of proxy materials), you +don't need the material name or the enclosing brackets. + +For example, instead of + +``` +material{ + name:t="stz_workshop_brick_plaster_wall" + class:t="rendinst_emissive" + tex16support:b=yes + twosided:b=0 + power:r=32 + script:t="emissive_color=1,0.1,0.2,8" + tex0:t="emissive_a_tex_d.tif" + tex2:t="emissive_a_tex_n.tif" +} +``` + +the proxy material `.blk` would contain only: + +``` +class:t="rendinst_emissive" +tex16support:b=yes +twosided:b=0 +power:r=32 +script:t="emissive_color=1,0.1,0.2,8" +tex0:t="emissive_a_tex_d.tif" +tex2:t="emissive_a_tex_n.tif" +``` + +## How to Name a Proxymat + +Proxy materials should be named according to their application. For example: +`berlin_town_buildings_wall_brick_plaster_a`. + +This approach is necessary for the following reasons: + +1. To avoid creating multiple similar proxy materials (e.g., + `brick_plaster_wall_a-j` for different maps) and losing track of their + purposes. +2. To ensure that the material's usage is clear, preventing it from being + inadvertently applied to a different map or asset, which could result in + broken assets when the original proxy material is changed for other needs. + +Thus, always name the proxy material: + +- Based on the asset type and location. +- According to the material's composition (i.e., what it's made of). + +## How to Assign Proxymat in 3ds Max + +```{important} +If you're using proxymats, make sure to clean the materials into which they are +inserted. Leftover parameters won't affect anything, but leftover textures could +cause errors, especially if those textures are later deleted. Although they +won't have any direct influence, missing textures will prevent building +resources because the `.dag` file will reference non-existent textures. + +**Rule:** Once you assign a proxymat to a material, remove everything else from +it! +``` + +Proxy materials are assigned as a `class` (shader), meaning that the class name +should reference the proxy material. For example: + +``` +class:t="brick_wall:proxymat" +``` + +An important note is that proxymats can only be assigned through the `DagorMat` +material type in *3ds Max*. For example: + + + +
+ +After export, the `.dag` will contain: + +``` +material{ + name:t="brick_wall" + class:t="brick_wall:proxymat" + tex16support:b=yes + twosided:i=0 + amb:ip3=255, 255, 255 + diff:ip3=255, 255, 255 + spec:ip3=255, 255, 255 + emis:ip3=0, 0, 0 + power:r=32 +} +``` + +Of course, you can manually change the material in any `.dag` file to a proxy +material by updating the `class` (shader) accordingly. + +## How to Assign Proxymat in Blender + +To assign a proxymat in *Blender*, create a new material, name it according to +the desired proxymat (without the `:proxymat` suffix), and check the +corresponding checkbox: + + + +
+ +If the proxymat already exists, specify the path to its directory and click +**(Re)load from file** to load it into the viewport. + +If you are unsure of the path, but know the material exists in the project, +click **Find missing proxymat**, and the +[add-on](../../dagor-tools/addons/blender/dag4blend/dag4blend.md) will +automatically locate the required `.blk`. + +To edit a proxymat, open it as a text file, make changes, and apply them using +the corresponding buttons in the Tools panel. Then, save the changes using the +**Save proxymat** button. + +You can also temporarily uncheck the **is proxymat** checkbox and edit the +material using standard tools instead of as text. + +Any material can be converted into a proxymat by checking the appropriate +checkbbox, specifying the target directory, and saving it. + +```{important} +The material name in *Blender* will always match the name of the proxymat. +Therefore, if an imported `.dag` contains a proxymat with a different name +(e.g., "bricks", but the shader is `"brick_wall:proxymat"`), it will be +automatically renamed to match the proxymat. + +If this material is referenced in the object properties for +`apex_interior_material`, that parameter will also be updated to avoid errors +during export and building resources. +``` + + diff --git a/_sources/assets/shaders/dng-shaders/dynamic_painted_by_mask.md.txt b/_sources/assets/shaders/dng-shaders/dynamic_painted_by_mask.md.txt new file mode 100644 index 000000000..d78c33e0f --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/dynamic_painted_by_mask.md.txt @@ -0,0 +1,69 @@ +# Shader: dynamic_painted_by_mask + +## Overview + +A dynamic shader designed for vehicles in *daNetGame*-based projects. + +## Textures + +- **tex0**: Diffuse albedo +- **tex2**: Normals + metalness + smoothness +- **tex4**: Grayscale paint mask (white = 100% paint coverage, black = no paint) +- **tex5**: Optional grayscale camouflage mask (white = painted with the second + color, black = no paint) + +## Parameters + +- `script:t="primary_color=0,0,0,0"` – Defines the primary paint color based on + the mask from **tex4**. The first three values represent the RGB color; the + fourth value is unused. + +- `script:t="secondary_color=0,0,0,0"` – Defines the secondary paint color based + on the mask from **tex5**. The first three values represent the RGB color; the + fourth value is unused. + +## Functionality + +If only one mask and one color are specified, the shader will apply the paint +based on that mask. For example: + + + +
+ +When both masks and two colors are provided, the shader can generate camouflage +patterns in any color combination. For example: + + + +
+ +The color defined in the asset will be applied to all vehicles of this type +unless it is overridden in the templates. + +Predefined color sets and random color generation in-game are configured in +`.blk` files located in: +`/prog/gameBase/content//gamedata/templates/`. + +For example, predefined color sets: + +``` +vehicle_color_smoking_red value:p4=0.6, 0.105, 0.117, 1.0 +vehicle_color_vampire_red value:p4=0.419, 0.039, 0.074, 1.0 +vehicle_color_canyon_copper value:p4=0.807, 0.341, 0.184, 1.0 +``` + +The following block indicates that there is a 90% chance the vehicle will be +painted in one of the four specified colors: + +``` +ar_painting.chance:r=0.9 +"car_painting.possibleColors:array"{ + "item:object"{ color:t="vehicle_color_battleship_gray"; } + "item:object"{ color:t="vehicle_color_dark_gray"; } + "item:object"{ color:t="vehicle_color_thundercloud"; } + "item:object"{ color:t="vehicle_color_military_green"; } +} +``` + + diff --git a/_sources/assets/shaders/dng-shaders/index.rst.txt b/_sources/assets/shaders/dng-shaders/index.rst.txt new file mode 100644 index 000000000..b6482a6fc --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/index.rst.txt @@ -0,0 +1,34 @@ + +daNetGame-Based Shaders +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + dynamic_painted_by_mask.md + land_mesh_height_decal.md + rendinst_blend_diffuse_decal.md + rendinst_blend_normal_decal.md + rendinst_deferred_decal.md + rendinst_deferred_modulate2x_decal.md + rendinst_emissive.md + rendinst_flag_colored.md + rendinst_flag_layered.md + rendinst_mask_layered.md + rendinst_modulate2x_diffuse_decal.md + rendinst_refraction.md + rendinst_simple.md + rendinst_simple_emissive_anim.md + rendinst_simple_glass.md + rendinst_simple_painted.md + rendinst_tree_colored.md + rendinst_tree_perlin_layered.md + rendinst_vcolor_layered.md + + + + + + + diff --git a/_sources/assets/shaders/dng-shaders/land_mesh_height_decal.md.txt b/_sources/assets/shaders/dng-shaders/land_mesh_height_decal.md.txt new file mode 100644 index 000000000..efd2c79a5 --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/land_mesh_height_decal.md.txt @@ -0,0 +1,62 @@ +# Shader: land_mesh_height_decal + +## Overview + +This shader is used for rendering decals in clipmaps on prefabs or loft +geometries. + +```{important} +For *WarThunder*-based projects, only the following parameters are supported: +`alpha_threshold`, `height_above`, and `vertex_gamma`. +``` + +## Parameters + +- `height_above=1` – Controls whether the decal is convex or concave. + - `1`: The heightmap is interpreted as convex and is rendered above the + `diffuse_threshold`. + - `0`: The heightmap is interpreted as concave and is rendered below the + `diffuse_threshold`. + +- `diffuse_threshold=0.5` – Determines the diffuse value at which the decal is + fully rendered. A smooth transition is drawn up to this value, blending with + the underlying surface. + +- `hmap_softness=1` – Configures the contrast of the resulting alpha for height + displacement. + +- `norm_softness=1` – Configures the contrast of the resulting alpha for normal + mapping. + +- `r_softness=1` – Configures the contrast of the resulting alpha for + reflectance, microdetails, smoothness, and occlusion. + +- `vertex_gamma=1` – Configures the gamma for vertex alpha. + +- `attenuation_from_heightmap_height=0.7` – Modulates the decal mask based on + the decal's height above the heightmap surface. + - `0`: Disabled. + - `1`: Renders what is 1 meter above the landscape. + - `-1`: Renders what is 1 meter below the landscape. + +- `height_scale=0.15` – Sets the height of the displacement. + +- `height_offset=-0.1` – Offsets the height of the displacement. + +- `grass_decal_id=255` – Controls the grass index mask: + - `255`: Removes grass. + - `0`: Keeps the grass as it was under the decal. + - Other values: Specific indices where grass is rendered. + +- `script:t="vertex_opacity=1"` – To use vertex alpha in decals created from + prefabs, write the vertex alpha into the second vertex channel. This ensures + the vertex alpha is read from the object. + +- `color_mul_add=255,255,255,0` – Colors the diffuse of the decals. In + [*daEditor*](../../../dagor-tools/daeditor/daeditor/daeditor.md), there is a + UI with a color picker that allows saving `.mat.blk` and `.dag` files + (available only in *War Thunder*). + + + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_blend_diffuse_decal.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_blend_diffuse_decal.md.txt new file mode 100644 index 000000000..42f3929d0 --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_blend_diffuse_decal.md.txt @@ -0,0 +1,119 @@ +# Shader: rendinst_blend_diffuse_decal + +## Overview + +This decal shader supports albedo, smoothness, metalness, and normal maps. It +uses blending based on a mask stored in the albedo's alpha channel, where black +indicates areas where the decal is not rendered, and lighter areas progressively +reveal the decal. + +**Parameters:** + +- `script:t="gamma_mask=1,1,0,0"` – Controls the intensity of the albedo, + normal, smoothness, and metalness. + - The first component configures albedo/smoothness/metalness. + - The second component configures the normal. + - The third and fourth components are not used but must be specified. + +- `script:t="micro_detail_layer=0"` – Standard syntax for microdetails. + +- `script:t="micro_detail_layer_uv_scale=9"` – UV scale for microdetails. + +- `script:t="micro_detail_layer_v_scale=1"` – Vertical scale for microdetails. + +## Parameters + +- **Parameter `script:t="gamma_mask=1,1,0,0"`** – This parameter configures the + gamma of the mask (located in the albedo's alpha channel) separately for + different maps (albedo, smoothness, metalness, normal). By configuring the + parameter values, you can control the visibility of specific maps. + +The lower values of gamma setting make the map more visible, while higher values +make it less visible. + +- The first component configures albedo/smoothness/metalness. +- The second component configures the normal. +- The third and fourth components are not used but must be specified. + +```{important} +It's important to understand how this works. Gamma is a power-function, and we +set the power to which the pixel value of the decal mask is raised. +``` + +Let's look at a decal mask that has only two boundary values (`0` - black, `1` - +white) with some faint gray strokes: + + + +
+ +What happens when you raise `0` (black) to the power of `0.1`? You get `0`. +What happens when you raise `1` (white) to the power of `0.1`? You get `1`. + +We cannot affect either the diffuse or the normal, no matter how much we tweak +these parameters. Below are two screenshots with examples: + + + + +

script:t="gamma_mask=0.1,0.1,0,0"

script:t="gamma_mask=1,1,0,0"

+ + + + +Only the edges of the letters change, where gray outlines appear due to texture +compression. Raising gray (around `0.5`) to `0.1` results in approximately +`0.93` (almost white). Raising gray to `1` results in `0.5` – cutting it off +(possibly not entirely, but significantly). + +However, this setting doesn't globally affect the texture channels. + +Now, let's reduce the white value from `1` to approximately `0.8`: + + + +
+ + + + +

script:t="gamma_mask=0.1,0.1,0,0"

script:t="gamma_mask=1,1,0,0"

+ + + + +At minimal gamma values, the edges around the decal thicken because there's more +information for pixelation due to texture compression. + +At higher gamma values, the effects of your settings become apparent. For +example, the decal starts to blend with the corrugated surface, allowing the +normal map to show through. If we further increase the normal's gamma (e.g., to +`4`), the text will conform more closely to the corrugated surface. + + + +

script:t="gamma_mask=1,4,0,0"

+ + + +
+ +**Summary:** Any "tweaks" only work if they can genuinely affect something. If +the texture has boundary values, there’s nothing to "tweak." + +```{important} +It's highly recommended to avoid boundary values in decal textures, as this +allows us to apply them in a wider variety of scenarios. +``` + +- **Microdetail Parameters** + +This shader supports +[microdetails](../../about-assets/microdetails/microdetails.md) with the +standard syntax used in *daNetGame*-based projects. + + - `script:t="micro_detail_layer=0"` + - `script:t="micro_detail_layer_uv_scale=9"` + - `script:t="micro_detail_layer_v_scale=1"` + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_blend_normal_decal.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_blend_normal_decal.md.txt new file mode 100644 index 000000000..e1a4b1eb9 --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_blend_normal_decal.md.txt @@ -0,0 +1,8 @@ +# Shader: rendinst_blend_normal_decal + +## Overview + +The `rendinst_blend_normal_decal` shader is used for decals that modify only the +normal map. + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_deferred_decal.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_deferred_decal.md.txt new file mode 100644 index 000000000..7c7f52b3e --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_deferred_decal.md.txt @@ -0,0 +1,11 @@ +# Shader: rendinst_deferred_decal + +## Overview + +`rendinst_deferred_decal` is a shader for projection decals with a normal map. + +It is a more performance-intensive version of the +[rendinst_blend_diffuse_decal](./rendinst_blend_diffuse_decal.md) shader, as it +adds extra checks to prevent the decal from being projected "in the air" when +there is no geometry behind it. + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_deferred_modulate2x_decal.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_deferred_modulate2x_decal.md.txt new file mode 100644 index 000000000..65dfe973a --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_deferred_modulate2x_decal.md.txt @@ -0,0 +1,12 @@ +# Shader: rendinst_deferred_modulate2x_decal + +## Overview + +It's a deferred version of +[rendinst_modulate2x_diffuse_decal](rendinst_modulate2x_diffuse_decal.md). + +It is visible only when have other geometry behind and can be used in +[composites](../../all-about-blk/composit_blk.md), unlike the base version +(which affects only geometry of the same `.dag` without any depth checks). + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_emissive.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_emissive.md.txt new file mode 100644 index 000000000..1cc84749e --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_emissive.md.txt @@ -0,0 +1,209 @@ +# Shader: rendinst_emissive + +## Overview + +This shader is designed for self-illuminating surfaces. + +This shader supports the [flickering +effect](../../lighting/flickering_lights.md). + +**Parameters:** + +- `use_alpha_for_emission_mask=1` – Uses the alpha channel of the albedo as an + emission mask. Values: `0`/`1`. +- `emissive_color=1,1,1,1` – Specifies the emissive color and intensity. + - The first three components represent the color (RGB) + - The fourth component is the intensity. If the intensity is negative, the + emission mask is inverted. +- `emission_albedo_mult=1` – Multiplies the emissive color by the albedo color. + Values range from `0` to `1`. +- `nightly=0` – Emission only occurs at night. Values: `0`/`1`. + +## Textures + +- **tex0:** Diffuse +- **tex2:** Normals + +The alpha channel of the diffuse color texture can be used to store the emission +mask (areas that emit light are white). + + + + +## Application + +- **Entire Model**: Apply the shader to the entire model if you want widespread + emissive elements, such as simulating light reflections from a bulb on + chandelier parts. In this case, using an emission mask is recommended. +- **Specific Parts**: Alternatively, apply the shader only to specific glowing + parts of the model. The emission mask may not be necessary in this scenario. + +By default, the emissive color is derived from the albedo color. + + + + +## Parameters + +```{important} +This shader often requires custom parameter settings for each asset, rather than +reusing values from other assets. Therefore, it's important to configure the +parameters specifically for your use case. Do not blindly copy parameters from +other assets. +``` + +- `use_alpha_for_emission_mask=1` + +This parameter controls the use of the albedo’s alpha channel as the emission +mask. + - `1`: The alpha channel of the albedo is used as the emission mask. + - `0`: The entire geometry with the shader emits light. + + + + + + + + +

use_alpha_for_emission_mask=1

use_alpha_for_emission_mask=0

Only the areas defined by the albedo's alpha channel will emit light.

The entire geometry emits light. The difference in color is due to the non-red parts of the albedo where the emission fades out according to the mask, while the entire geometry emits light (including the grey areas).

+ + + + +- `emissive_color=1,1,1,1` + +This parameter defines the color and intensity of the emission. + +- The first three components are the RGB color of the emission. +- The fourth component is the emission intensity. + - If positive, the alpha channel of the albedo is used as a direct mask. + - If negative, the mask is inverted. + +By default, all parameters are set to `1`, meaning the albedo color and the +emission mask are used without modification. + +```{note} +If a multicolored emission is needed for a single material (e.g., a stained +glass window), it is recommended to set the color in the diffuse texture and +multiply it with a white emissive color. +``` + +```{important} +Be sure to observe the differences between the [*Asset +Viewer*](../../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) and the +in-game results. This discrepancy underscores the importance of verifying and +fine-tuning your work by reviewing it directly within the game environment. +``` + +Examples with white albedo (as it is easier to override compared to the bright +red in previous examples): + + + + + + + + +

emissive_color=0,1,0,1

emissive_color=0,1,0,10

Green emissive color is applied. In the Asset Viewer, it is barely noticeable, but it is very strong in-game.

A strong green emission is applied. The glow effect in-game is very prominent.

+ + + + + + + +```{important} +Avoid excessive emission intensity. It directly impacts the glow effect, as seen +in the screenshots above. Fine-tune the emission carefully for each asset. +Excessive emission not only looks unnatural but can also negatively affect +gameplay by interfering with camera adaptation. Aim for minimal, but noticeable, +glow. + +The glow effect also depends on the size of the emitting geometry. For example, +thicker lanterns have a stronger glow than thinner ones, not only because of +different emission intensities but also due to their larger size. + + + +
+ +In the screenshot above, the glow effect on the thick lanterns is excessive, but +reducing the values further made the glow barely visible – thus, the current +setting was kept. The glow effect on the thin lanterns is adequate, with room +for a slight increase, but not much. +``` + +- `emission_albedo_mult=1` + +This parameter controls the multiplication of the emissive color by the albedo +color, as defined by the `emissive_color` shader parameter. Essentially, it acts +like the "Multiply" blend mode in *Photoshop*. + +Values range from `0` to `1`, where: + +- `0`: No multiplication. Only the shader's emissive color is used. +- `1`: Full multiplication with the albedo color. + +```{important} +When multiplying drastically different colors (e.g., red and green), the result +can be a complete absence of emission since (0,1,0) * (1,0,0) = (0,0,0). Avoid +this scenario. +``` + + + + + + + + + + +

+ emission_albedo_mult=0
+ emissive_color=0,1,0,1

+ emission_albedo_mult=0.5
+ emissive_color=0,1,0,1

+ emission_albedo_mult=1
+ emissive_color=0,1,0,1

No multiplication with albedo color. The shader’s emissive color is green. Results in a green emissive layer over the red albedo, leading to a yellow color in the Asset Viewer. The in-game result is correct.

Multiplies the albedo color by 50%. The shader’s emissive color is green. The in-game glow intensity is reduced by half due to the interaction of two contrasting colors.

Full multiplication with the albedo color. The shader’s emissive color is green. Almost no emission is visible since (0,1,0) * (1,0,0) = (0,0,0). Increasing emission intensity (e.g., to 10 or 100) may improve visibility, but this is not a proper solution and will likely not look correct.

+ +- **Asset Viewer:** + + + + + +- **Game - Result:** + + + + + +- **Game - Albedo:** + + + + + +- **Game - Emissive:** + + + + + +- `nightly=1` + +This parameter controls whether the emissive effect is active only during +nighttime. + +Values: + +- `0`: By default, the emissive effect is always active. +- `1`: The emissive effect is only active during nighttime. The definition of + "night" is controlled by scripts elsewhere and is not influenced by this + parameter. + + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_flag_colored.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_flag_colored.md.txt new file mode 100644 index 000000000..ad16c3598 --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_flag_colored.md.txt @@ -0,0 +1,182 @@ +# Shader: rendinst_flag_colored + +## Overview + +This is a simple shader designed for cloth simulation. + +**Parameters:** + +- `script:t="frequency_amplitude=1,1,1,1"` – intervals for random frequency and + amplitude; +- `script:t="wave_length=1"` – wave length; +- `script:t="wind_direction=0,0,1,0"` – wind direction; + +- `script:t="use_painting=1"` – main parameter to enable painting; +- `script:t="paint_palette_row=1"` – painting parameters in *daNetGame*–based + projects, similar to [rendinst_simple_painted](rendinst_simple_painted.md) + shader; +- `script:t="paint_white_point=0.1"` +- `script:t="paint_black_point=0.05"` +- `script:t="paint_mult=1"` + +- `script:t="micro_detail_layer=0"` – microdetail settings; +- `script:t="micro_detail_layer_v_scale=1"` +- `script:t="micro_detail_layer_uv_scale=1"` + +## Functionality + +This shader uses two textures (diffuse and normal) to enable basic geometry +animation. You can configure sinusoidal parameters for vertex displacement, with +smoother results achieved on denser meshes. + +```{important} +Ensure the shader is applied only to geometry that is painted with vertex color, +as using it otherwise may cause errors in the game. +``` + +## Animated Geometry + +The area of the mesh to be animated is defined by the R-channel of the vertex +color. G and B channels are not used. + + + + +

Vertex Color

Result

+ + + + + + + +```{note} +Always reset unused vertex color channels to black, since they default to white +(with all channels set to maximum). +``` + +## Parameters + +- `script:t="frequency_amplitude=1,1,1,1"` – Defines the frequency and amplitude +intervals. (In this case, frequency controls the speed of the wave oscillations, +not the wavelength): + - 1st and 2nd components – frequency range (min, max), + - 3rd and 4th components – amplitude range (min, max). + +At the start of the mission, random values are selected from these intervals, +and remain static throughout the game. Different assets across the location will +animate with varying values. + + + + +

Frequency = 1

Amplitude = 1

+ + + + + + + +

Frequency = 3

Amplitude = 3

+ + + + +Random values are not visible in the *Asset Viewer*, so first verify the maximum +values in components 1 and 3 (as these are displayed in the *Asset Viewer*). +After that, move these values to components 2 and 4, and set the minimum values +in components 1 and 3. + +- `script:t="wave_length=1"` – Defines the wavelength. + +A longer wavelength reduces oscillation detail, as the sinusoidal wave stretches +and the model only captures a small portion of it. + + + + + +

Wavelength = 1

Wavelength = 0.5

Wavelength = 5

+ + + + + +- `script:t="wind_direction=0,0,1,0"` (temporary parameter) – Wind direction is + defined by a temporary parameter, as a global wind system is planned. In the + *Asset Viewer* and *daEditor*, the wind direction operates based on global + axes, so make sure to verify the wave direction in–game: + - 1st component controls oscillations along the X–axis; + - 2nd component controls oscillations along the Z–axis (vertical); + - 3rd component controls oscillations along the Y–axis. + + + + +

wind_direction=1,0,0,0

wind_direction=0,0,1,0

+ + + + +- `script:t="use_painting=1"` – The painting parameters for the + *daNetGame*–based projects work similarly to + [rendinst_simple_painted](./rendinst_simple_painted.md) shader, with the + exception that this shader does not paint by default. To enable painting, set + the parameter as follows: + - `1` – enable painting; + - `0` – disable painting (optional). + +## Working with Global Wind in daNetGame-based projects + +This shader also supports wind animation using a global wind map and an +additional set of parameters. The previous algorithm remains available, with +wind behavior controlled by the `shadervar wind_type` parameter. + +The new algorithm is preferred, as it takes into account wind strength +variations, including wind emitters. + +**Parameters:** + +- `wind_type = 0` – Uses the old animation algorithm, independent of external + factors, and configured using `frequency_amplitude`, `wind_direction`, + `wind_strength`, and `wave_length`. + +- `wind_type = 1` – New algorithm that ignores the R-channel in the vertex + color, instead using the normalized distance from the flagpole axis (ranging + from `0` at the attachment points to `1` at the flag's end). + +- `wind_type = 2` – New algorithm that uses the R-channel in the vertex color. + For correct operation, the R-channel must continuously increase from `0` at + the attachment points to `1` at the flag’s end, although the increase does not + need to be linear. If a large portion of the flag is uniformly colored, + incorrect behavior may occur. + +- `flagpole_pos_0`, `flagpole_pos_1` – Define a segment in the model's + coordinate system where the flag is attached. Points along this segment remain + stationary. For a single fixed point, a very short segment can be used. + +- `flag_length` – Defines the length of the flag, or the distance from the axis + to the flag's end. This value doesn’t need to be exact; setting it 10-15% + larger than the actual size is acceptable, but setting it smaller is not + recommended. + +Additional optional parameters include: + +- `flag_movement_scale = 1` – Controls how much the wind bends and shifts the + flag from its resting position. +- `stiffness = 0.1` – Determines the flag's resistance to bending. +- `stretch = 0.1` – Controls how much the flag stretches: + - `0` – no stretch, + - `1` – unlimited stretch. +- `sway_speed = 1` – Defines how quickly the flag bends. +- `bend = 2` – Shapes how the flag bends. +- `deviation = 4` – Controls the flag's form when deviating from its equilibrium + position. + +```{seealso} +You can view the shader results with different parameter configurations +[here](https://drive.google.com/drive/folders/10mY9r2kewTMMaSTC5YUr2pLRlPb2b-LA?usp=sharing). +``` + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_flag_layered.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_flag_layered.md.txt new file mode 100644 index 000000000..ad77f38dd --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_flag_layered.md.txt @@ -0,0 +1,66 @@ +# Shader: rendinst_flag_layered + +## Overview + +This shader is designed for fabric animation with detail blending based on +vertex color. + +## Parameters + +- `script:t="frequency_amplitude=1,1,1,1"` – Sets the random frequency and + amplitude intervals. +- `script:t="wave_length=1"` – Defines the wavelength. +- `script:t="wind_direction=0,0,1,0"` – Specifies the wind direction. + +- `script:t="details_tile=1,1,1,0"` – Controls the tiling of the details. +- `script:t="invert_heights=0,0.5,0,0"` – Inverts the heightmaps of the details + (can be fractional). + +- `script:t="paint_details=1,0,0,1"` – Specifies the coloring of the details. +- `script:t="overlay_color_from=0,0,0,0"` – Defines the "from" and "to" colors + for blending via linear interpolation (lerp) using the blue channel of the + vertex color as the mask. +- `script:t="overlay_color_to=0,0,0,0"` – Specifies the color range from `0` + (RGB value `0`) to `1` (RGB value `255`). + +- `script:t="micro_detail_layer=0"` – Parameters for micro details. +- `script:t="micro_detail_layer_v_scale=1"` +- `script:t="micro_detail_layer_uv_scale=1"` + +- `script:t="atest=1"` and `script:t="details_alphatest=0,0,0,0"` – Work + together. The first parameter enables alpha test, while the second defines the + alpha test strength for each detail. + +## Functionality + +This shader operates on the same principles as its parent shaders: + +- Shader [rendinst_flag_colored](rendinst_flag_colored.md) – Controls the + animation behavior. +- Shader [rendinst_vcolor_layered](rendinst_vcolor_layered.md) – Manages detail + painting, overlay, alpha test, tiling, and heightmap inversion. + +All these parameters are fully described in the relevant shader documentation, +so they will not be repeated here – refer to the corresponding sections for +details. + +The only key difference lies in the channels used for detail blending. Since +this shader handles not just three details but also includes animation, the +blending is controlled by different channels than in +[rendinst_vcolor_layered](rendinst_vcolor_layered.md). + +- **Red channel** – Controls animation. +- **Green channel** – Subtracts the second detail from the first. +- **Blue channel** – Subtracts the third detail from the first two. + +```{important} +The blue channel also controls the overlay (see +[rendinst_vcolor_layered](rendinst_vcolor_layered.md)). Therefore, you must +decide which aspect is more important for a specific asset – overlay or an +additional detail. + +If the overlay is needed, assign the same detail to the blue channel as you use +for the first (or second) detail, depending on which detail takes priority. +``` + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_mask_layered.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_mask_layered.md.txt new file mode 100644 index 000000000..821a3ac95 --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_mask_layered.md.txt @@ -0,0 +1,162 @@ +# Shader: rendinst_mask_layered + +## Overview + +The `rendinst_mask_layered` shader is designed for rendering instances using two +detail tiles, a global normal map, and an overlay texture (applied using +`modulate2x`). The details are blended according to their respective heightmaps +and a blending mask provided in the overlay texture. + +The primary distinction between this shader and +[rendinst_layered](../rendinst_layered.md) is that `rendinst_mask_layered` uses +only a single UV channel. + +**Parameters:** + +- `script:t="detail_tile=7.1"` – Controls the tiling of both detail maps + simultaneously. Applies to both details. +- `script:t="invert_height1=1"` – (default – `0`) – Inverts the heightmap of + Detail1. This can be a fractional value (e.g., `0.5` makes the heightmap + gray). +- `script:t="invert_height2=1"` – (default is `0`) – Inverts the heightmap of + Detail2 map. This can also be a fractional value. +- `script:t="paint_details=0,0,0,0"` – Configures the coloring of the two + details. +- `script:t="paint_points=0,1,0,1"` – Sets the black and white points for the + coloring range of both details. +- `script:t="atest=1"` – Enables alpha test. +- `script:t="details_alphatest=0,0.15,0.45,0"` – Specifies which detail to + apply alpha test on and with what intensity. +- `microdetails` – This shader supports the standard syntax used in the + [rendinst_simple](./rendinst_simple.md) or + [rendinst_perlin_layered](../rendinst_perlin_layered.md) shaders. +- `heightmap blending`– For more information on heightmap blending, refer to + [Blending with Landscape + Heightmap](../rendinst_layered.md#blending-with-landscape-heightmap). + +## Material Structure + +- **Slot 1: Overlay Texture** + The overlay texture is applied over other textures using `modulate2x`. + - **RGB Channels:** Albedo + - **Alpha Channel:** Blending mask for the details, similar to + [rendinst_layered](../rendinst_layered.md). + - White pixel: Detail2 (upper) + - Black pixel: Detail1 (lower) + - Gray pixel: Displays the detail with the higher heightmap value at that + location. + + ```{important} + If an overlay is created without a blending mask, it defaults to 100% black. + As a result, all further material adjustments will be nearly invisible because + only Detail1 will be displayed (black in the mask reveals Detail1). + ``` + +- **Slot 2: Unused** + +- **Slot 3: Global Normal Texture** + This texture is placed beneath the detail normals, modifying them. + - **RG Channels:** Normal map + - **B Channel:** Not used, should remain black. + - **Alpha Channel:** Smoothness, applied using `modulate2x` over the details' + smoothness. + + ```{important} + Avoid adding unnecessary smoothness to the global normal unless: + 1. You’re emphasizing specific elements in the overlay, such as adding dirty + leaks and configuring their smoothness on the normal's alpha. + 2. You need to differentiate materials within the same detail, like making car + paint matte while keeping the bumper glossy. + 3. The texture is not used uniquely, such as when part of the overlay and + global normal is shared with the [rendinst_simple](./rendinst_simple.md) + shader for elements like headlights or glass. + + A common issue is adding smoothness to the global normal, which can override + the details' smoothness, leaving only the most prominent details visible. + Unused areas of the global smoothness should remain 50% gray. + ``` + +- **Slots 4-5: Detail1 Textures** + - Slot 4: Diffuse texture for Detail1. + - Slot 5: Normal texture for Detail1. + +- **Slots 6-7: Detail2 Textures** + - Slot 6: Diffuse texture for Detail2. + - Slot 7: Normal texture for Detail2. + +## Parameters + +- `script:t="detail_tile=7.1"` – Controls the tiling of both detail maps + simultaneously. +- `script:t="invert_height1=1"` – (default – 0) – Inverts the heightmap of + Detail1. +- `script:t="invert_height2=1"` – (default – 0) – Inverts the heightmap of + Detail2. + + ```{important} + Unlike the [rendinst_perlin_layered](../rendinst_perlin_layered.md) shader, + heightmap inversion parameters in `rendinst_mask_layered` do not affect the + overall distribution of details. Instead, details are distributed across the + model using the blending mask (overlay alpha). Heightmap inversion highlights + specific features within those details. + + If the heightmap is not inverted, white (high) pixels take priority. For + example, intact sections of chipped stucco will be visible (as they are + higher). If the heightmap is inverted, the damaged sections will become + prominent (as they are higher after inversion). + ``` + +- `script:t="paint_details=0,0,0,0"` – Configures the coloring of the two + details (the overlay is not colored). + - First component: Colors Detail1 (non-integer values can specify intensity). + - Second component: Colors Detail2 (non-integer values can specify intensity). + - Third component: Not used but must be included for the shader to function + correctly. + - Fourth component: Selects the row for coloring. + +- `script:t="paint_points=0,1,0,1"` – Sets the black and white points for the + coloring range of both detail maps. + - First component: Black point for Detail1, similar to + [rendinst_simple_painted](./rendinst_simple_painted.md). + - Second component: White point for Detail1. + - Third component: Black point for Detail2. + - Fourth component: White point for Detail2. + + ```{important} + Always specify different values for the black and white points, even if the + detail is not being colored. The default configuration should be + + `script:t="paint_points=0,1,0,1"`. + + Failure to do so may result in identical black and white points, causing a + division by zero error: + + `rendinst_mask_layered: divide by zero [real] while executing shader code. Stopped at operand #45`. + ``` + + This allows you to define a color range for materials with distinct brightness + variations, such as painted wood. You can adjust the black and white points to + control the color change in the paint layer while keeping the wood layer + beneath either unchanged or minimally altered. + + + + + +- `script:t="atest=1"` + `script:t="details_alphatest=0,0.15,0.45,0"`: + + The `atest` and `details_alphatest` parameters must be used together to enable + and configure alpha test: + - `script:t="atest=1"` – Enables alpha test. + - `script:t="details_alphatest=0,0.15,0.45,0"` – Specifies which detail to + apply alpha test on and with what intensity. + +- **Microdetails** function the same as in the + [rendinst_perlin_layered](../rendinst_perlin_layered.md) shader. + + ```{seealso} + For more information, see + [Microdetails](../../about-assets/microdetails/microdetails.md). + ``` + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_modulate2x_diffuse_decal.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_modulate2x_diffuse_decal.md.txt new file mode 100644 index 000000000..ecb5dec55 --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_modulate2x_diffuse_decal.md.txt @@ -0,0 +1,212 @@ +# Shader: rendinst_modulate2x_diffuse_decal + +## Overview + +The `rendinst_modulate2x_diffuse_decal` shader is used for modulating decals on +geometry within an object's `.dag` file. + + +**General Parameters:** + +- `script:t="intensity=1,0,1,0"` + - 1st component: intensity (`0` and above). + - 2nd and 3rd components: clamping range. + - 4th component: desaturation. + +**daNetifme-Based Parameters:** + +- `script:t="smoothness_metalness=1,1,0,0"` + - 1st component: affects smoothness. + - 2nd component: affects metalness. + - The remaining components are required but have no effect. + +- `script:t="draw_order=1"` – Defines the draw order for decals. The default is + `0` for all decals. You can set it to `-1` (for decals that should always be + below others) or `1` (for decals that should always be on top). + +## Functionality + +The shader uses 24-bit diffuse textures (without alpha). Darker than 50% gray +darkens the underlying surface, while lighter than 50% gray brightens it. This +is how modulation works. + +If a texture requires areas that shouldn't affect the surface (essentially, +"transparent" areas), these should be 50% gray. Applying a 50% gray modulation +(for example, using *Photoshop*'s overlay mode) will result in no visible +change. + + + + +

Texture

Result

+ + + + +However, simply creating a texture with 50% gray in the "transparent" areas is +not enough. During compression, diffuse textures often get a gamma correction of +`2.2`, which alters brightness. + +To avoid this, modulate decal textures must be processed with a gamma of `1`. +These textures should be named with the suffix `_tex_m`, for example, +`wall_dirt_spots_decal_a_tex_m.tif`. Such textures are automatically processed +with gamma `1`. + +## Parameters + +### General Parameters + +- `script:t="intensity=1,0,1,0"` – This parameter controls several properties: + - 1st component: decal intensity, from `0` upwards. Values below `0` invert the + decal's color, which can be useful for creating effects like oil stains from + regular dirt. + - 2nd and 3rd components: clamping – restricts the texture's brightness range. + The 2nd component is "from", and the 3rd component is "to". This allows you + to display only a specific color range of the texture, making edges sharper + and outlines more distinct. Anything outside the clamping range defaults to + 50% gray (i.e., it has no effect on the surface). + - 4th component: decal desaturation, from `0` to `1` (default is `1`, fully + desaturated). + +**Examples:** + +- `script:t="intensity=0,0,1,0"` – Intensity set to `0`. + + + +
+ +- `script:t="intensity=0.5,0,1,0"` – Intensity set to 50%. + + + +
+ +- `script:t="intensity=1,0,1,0"` – Intensity set to 100%. + + + +
+ +- `script:t="intensity=-1,0,1,0"` – Inverted color. + + + +
+ +- `script:t="intensity=1,0,1,0"` – Full color range. + + + +
+ + +- `script:t="intensity=1,0,0.5,0"` – Clamped visible range from `0` to `0.5` + (50% brightness), showing areas darker than 50%. + + + +
+ + +- `script:t="intensity=1,0.5,1,0"` – Clamped visible range from `0.5` to `1`, + showing areas brighter than 50%. You can also use different ranges, such as + from `0.23` to `0.37`. + + + +
+ +- The same decals with different parameters can provide a wide range of effects + with minimal effort. + + + +
+ + + +
+ +### daNetGame-Based Parameters + +- `script:t="smoothness_metalness=1,1,0,0"` – This parameter controls the impact + on the smoothness and metalness of the underlying material. The default value + is `0`. Reducing the value decreases the parameters, while increasing it + enhances them. + - 1st component: smoothness. + - 2nd component: metalness. + +```{important} +This parameter affects the material that the decal is applied to. If the +underlying material lacks metalness, for example, this parameter will have no +effect. +``` + + + + +

Source decal

script:t="smoothness_metalness=0,0,0,0"

+ + + + + + + +

script:t="smoothness_metalness=1,0,0,0"

script:t="smoothness_metalness=-1,0,0,0"

+ + + + +- `script:t="draw_order=1"` – Controls the draw order for specific decal + materials. It has three values: + - `-1`: "lower" draw order – rendered below all other decals. + - `0`: "middle" draw order – the default value for all decals. + - `1`: "upper" draw order – rendered above all other decals. + +A single object can have many overlapping decals. For example, numbering each +decal type shows how differently they can appear depending on the draw order: + + + +
+ +You can see that wear decals **(2)** are generally bright. However, they can be +darkened by soot decals **(1)**. This is the decal layering in action, with the +soot decal "above" the wear decal, applied on top of it. + +Without specifying the draw order, you might encounter: + +- **Z-fighting** (where decals with the same draw order fight for visibility). +- **Incorrect layering**, like this black seam (the soot decal should be "below" + the brick edge decal, but it's drawn "above"). + + + +
+ +- Or both issues simultaneously. + +```{important} +If you don't assign a draw order to any decal material, they default to `0`. +However, in-game, the system may assign its own order because no clear hierarchy +is defined. Therefore, it's important to specify at least the materials that +should be lower than `0`. This ensures the rest will render above without issue. +For best results, set a clear draw order and don't rely on chance. +``` + +Typically, modulate decals should be set to `-1`, while wear decals can remain +untouched. Wear often looks fresher than surrounding dirt and soot. + +However, if the wear needs to appear dirty, you can either set the wear decals +to `-1`, leaving modulate decals untouched, or set the dirty modulate decals to +`1` to preserve the overall layering scheme for modulate and diffuse decals. + +```{note} +This parameter applies to all diffuse and modulate decals, not just this +specific shader. +``` + + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_refraction.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_refraction.md.txt new file mode 100644 index 000000000..20b993159 --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_refraction.md.txt @@ -0,0 +1,164 @@ +# Shader: rendinst_refraction + +## Overview + +This shader is designed for glass surfaces with a refraction effect. + +It's a computationally expensive shader with several limitations, so use it +carefully. + +- **Z-Buffer limitation:** When several assets with this shader overlaps, shader + can't sort them properly – drawing order of polygons may be incorrect, and + geometry that closer to the camera may appear further away, and vise versa. + Overlapping polygons also do not refract properly. + +- **Screen-space limitation:** Shader affects whole rendered image, no matter if + geometry is behind the refractive surface or in front of it. So, for example, + weapon and character's hands would be refracted as well, so it's better not to + use way too strong parallax effect to make such limitation less noticeable. + +**Recommendations**: +- Apply this shader to individual objects within enclosed spaces. +- Position objects carefully to avoid overlap in the frame, as this shader isn't + ideal for scenes with layered glass effects (e.g., a "crystal palace" + setting). +- If using glass walls or doors, use them sparingly, and plan the layout to + avoid sightlines through multiple glass objects in succession. + +## Textures + +- **_tex_d.tif** + - **RGB** – Glass color + - **A** – Opacity map + +- **_tex_n.tif** + - **RG** – Normals for reflections and parallax shift direction + - **B** – Height map for parallax + - **A** – Smoothness map, which also controls the blur of objects behind the + glass + +## Parameters + +- `script:t="isShell=1"` – Refraction strength at sharp angles +- `script:t="max_thickness=0.5"` – Maximum parallax thickness +- `script:t="min_thickness=0.01"` – Minimum parallax thickness +- `script:t="is_window=1"` – Parameter for window glass + +## Albedo and Opacity Maps + +```{note} +The glass color works as a multiplier, meaning the color also influences +transparency. +``` + + + + + + + +## Normals Map and Smoothness + +The normals map modifies the glass surface, affecting both the strength of the +parallax (vertically and horizontally) and the reflections. + +Smoothness also alters the surface properties. As the reflection width changes, +so does the blurring strength of the refracted image (objects behind the +surface). + + + + +## Height Map + +The height map defines the parallax strength in the depth of the surface. It's +best practice to bake the depth range from `0` to `255`. Parallax strength is +controlled separately through shader parameters. + +Both illustrations feature parallax based on the normals map. In the second one, +the height map adds more noticeable depth, especially at sharper angles. + +```{note} +The height map doesn’t have to correspond exactly to the normals map. You can +add additional elements to the height map for more diverse parallax effects, +while keeping the normals smooth, simulating unevenness on the back side of the +glass rather than the front. +``` + + + + +## Thickness + +This parameter defines the depth of the glass refraction. The greater the depth +and the larger the difference between the minimum and maximum heights, the +stronger the refraction effect. + +```{note} +The refraction will also affect objects positioned between the surface and the +camera – such as weapons or character hands. The stronger the refraction, the +more noticeable the effect becomes. +``` + + + + + +

+ script:t="max_thickness=0.001"
+ script:t="min_thickness=0"

+ script:t="max_thickness=1"
+ script:t="min_thickness=0.01"

+ script:t="max_thickness=5"
+ script:t="min_thickness=0.01"

+ + + + + +## isShell Parameter + +The `isShell` parameter controls the parallax depth strength at sharper angles. +For flat surfaces like door, glass or tabletops, set `isShell=0`. For curved +surfaces such as bulbs, bottles, or jars, set `isShell=1`. While intermediate +values are possible, note that they do not reflect physical accuracy. +Additionally, increasing parallax strength will make objects between the surface +and the camera more prominent in the refraction effect. + + + + + +

+ script:t="max_thickness=0.001"
+ script:t="isShell=0"

+ script:t="max_thickness=1"
+ script:t="isShell=1"

+ script:t="max_thickness=5"
+ script:t="isShell=3"

+ + + + + +## is_window Parameter + +The `is_window` parameter is common across most glass shaders but is disabled by +default in this shader: + +`script:t="is_window=0"` + +Enable this parameter for glass positioned at the boundary of an `envi_probe`, +where it needs to reflect two environments – indoor reflections (captured by the +enviro-probe) on one side and outdoor reflections on the other. + +For objects used exclusively indoors or outdoors, such as glassware, lantern +covers, or car windows, keep this parameter disabled. + +## Example + +In the archive below, you can find a model example, textures, high-poly assets, +and a `.psd` file containing various maps: [Download +Example](https://drive.google.com/file/d/1LtmVeWd4o0ZKU37uaoL0uPWKzTW4PkKl/view?usp=drive_link). + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_simple.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_simple.md.txt new file mode 100644 index 000000000..cac7eb172 --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_simple.md.txt @@ -0,0 +1,118 @@ +# Shader: rendinst_simple / simple_aces + +## Overview + +A basic shader used for objects that require a texture along with a normals, +metalness, and smoothness map. It supports alpha test and +[microdetails](../../about-assets/microdetails/microdetails.md). + +```{note} +Technically, this is the *rendinst_simple* shader. However, it may be referred +as "simple_aces" on old assets, but the game interprets both as *rendinst_ +simple*. +``` + + + + +
+ +## Textures + +The shader uses the first UV channel for mapping. + +- **tex0:** – Diffuse albedo map +- **tex2:** – Texture combining normals, metalness, and smoothness: + - **RG** – Normal map + - **B** – Metalness + - **Alpha** – Smoothness + + + +
+ +## Parameters + + + +
+ +The shader is configured using the following parameters: + +- **"2 sided" checkbox** ("two_sided" in [*Asset + Viewer*](../../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md)) – + The original, outdated method for double-sided geometry. It works imperfectly + with shadows and is slightly more expensive with small triangle counts, but + performs well and is cost-effective for large triangle counts. Currently, it's + only used for trees and not for environment assets (though older assets may + still have it, as this was the only option previously). + +- **"2 sided real" checkbox** ("real_two_sided" in [*Asset + Viewer*](../../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md)) – + The second method for double-sided geometry. It duplicates and flips the + geometry where the material is applied (one triangle becomes two). This method + works correctly with shadows but doubles the number of triangles to which the + material is applied. + + ```{important} + Avoid overusing this parameter or duplicating existing materials just to apply + it to parts of an asset. If a texture set is used and part of the geometry + needs to be double-sided while another part remains single-sided, it's more + efficient to create a single material for the entire model with this texture + set and handle the double-sided geometry by flipping it directly in the LODs. + This approach is cheaper than using two nearly identical materials and + provides the same visual result. + ``` + +- **atest** – Alpha channel cutoff threshold. A switch for transparency based on + the diffuse's alpha channel. The mask is compressed to a single bit: anything + darker than `127` becomes transparent, and the rest is opaque. + + ```{note} + Although the **atest** parameter defaults to `127`, it functions as a Boolean + switch. If the value is greater than `0`, transparency is enabled; otherwise, + it's not used. The threshold cannot be adjusted. + + A smooth gradient from black to white will be cut off at the same point, + regardless of whether **atest** is set to `1`, `255`, or `1000`. + ``` + +- **use_painting** – Controls painting from the palette defined in the shader + variables of the scene. + - `1`: Enable painting + - `0`: Disable painting + - Values between `0.(0)1` and `0.(9)`: Apply partial painting (acts as a + multiplier). Painting is applied based on the diffuse alpha channel + multiplied by the **use_painting** value. Values from `1.(0)1` to `1.(9)` + also influence the strength of the paint from `0.0` to `1.0` but disable the + random pixel selection from the painting stripe when the object is offset in + height. This ensures consistency in colors, for instance, when painting + modular skyscrapers the same color. The palette used is named + `paint_colors.dds` and is located here: + `/develop/assets/textures/colorize_textures`. + + ```{seealso} + For more information, see [Procedural Rendinst + Painting](../../about-assets/procedural-rendinst-painting/procedural_rendinst_painting.md). + ``` + +- **painting_line** – The painting stripe (from `0` to the last stripe in the + texture). + +- **micro_detail_layer** – The index of the microdetail layer (from `0` to + `11`). + + ```{seealso} + For more information, see [Microdetails on + Assets](../../about-assets/microdetails/microdetails.md). + ``` + +- **micro_detail_layer_v_scale** – Vertical scale of the microdetail. + +- **micro_detail_layer_uv_scale** – UV scale of the microdetail texture. The + larger the value, the smaller the detail pattern will appear (range: `0` - + infinity). + + + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_simple_emissive_anim.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_simple_emissive_anim.md.txt new file mode 100644 index 000000000..b583ac9c5 --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_simple_emissive_anim.md.txt @@ -0,0 +1,157 @@ +# Shader: rendinst_simple_emissive_anim / dynamic_illum_anim + +## Overview + +This shader enables toggling, adjusting emission strength, and controlling +emission color. + +## Parameters + +**rendinst_simple_emissive_anim**: + +- `class:t="rendinst_simple_emissive_anim"` +- `script:t="illum_scroll_speed=0.1"` – Controls the scroll speed of the "scan" + effect across the emission texture program. Reversing the sign of this + variable changes the scanning direction. +- `script:t="use_additive_blend=1"` – Sets the blending mode: `0` for + multiplicative emission on the albedo, `1` for additive blending. +- `tex0:t="diffuse_map_tex_d.tif"` – The alpha channel defines the emission + intensity. +- `tex2:t="normal_map_tex_n.tif"` – Normal map. +- `tex3:t="program_map_program.tif"` – The emission texture program. The minimum + texture size is 4x4. +- `tex4:t="shift_map_shift.tif"` – Emission shift texture. + +**dynamic_illum_anim**: + +- `script:t="illum_scroll_speed=0.1"` – Controls the scroll speed of the "scan" + effect across the emission texture program. Reversing the sign of this + variable changes the scanning direction. +- `script:t="use_additive_blend=1"` – Sets the blending mode: `0` for + multiplicative emission on the albedo, `1` for additive blending. +- `tex0:t="diffuse_map_tex_d.tif"` – The alpha channel defines the emission + intensity. +- `tex2:t="program_map_program.tif"` – Emission texture program. The minimum + texture size is 4x4. +- `tex3:t="shift_map_shift.tif"` – Emission shift texture. + +The shader operates in two modes: *multiplicative* and *additive*. The emission +program texture modifies two channels in the G-buffer: albedo and emission. In +this context, the emission channel is 8-bit (grayscale). + +This means that there are three options for achieving colored emission. Choose +the one that best suits your case: + +- In multiplicative mode, use a colored albedo and a grayscale program texture + to avoid overshadowing the albedo. +- In multiplicative mode, use a colored program texture. This will modify the + base albedo map, subtracting from it. +- Multiplicative mode is the default. + +## Textures + +For animating the turning on and off of lights, you'll need a `.dag` file for +the lights and two textures: + +- `tex0:t="emis_anim_shader_tex_d.tif"` – The diffuse texture defines the lamp's + color. +- `tex3:t="emis_anim_shader_program.tif"` – The program texture defines when the + lamp emits light (independent of UV mapping). + + + +
+ +### tex0:t="emis_anim_shader_tex_d.tif" + +Defines the lamp's color and emission level: + +- RGB channels: Albedo (color of the emission if no other color is defined in + the program texture (`tex3:t="emis_anim_shader_program.tif"`)). +- A channel: Emission intensity, where white is the maximum emission and black + means no emission. + +### tex3:t="emis_anim_shader_program.tif" + +The emission program texture defines: + +1. Emission timing (emitting light in white areas, no emission in black areas). +2. Emission color (the color emitted can be defined here). +3. Emission intensity (non-white colors will reduce emission intensity). + +- RGB channels: If not black, the defined color will be emitted. +- A channel: Not used. + +Using these two textures, simple emission animations can be created. Separate +mapping for each lamp is not required. + +**Example:** The lamp's color is defined in the program texture +(`tex0:t="emis_anim_shader_program.tif`), and to prevent color conflicts between +the diffuse and program textures, the lamps in the diffuse texture are painted +white. + + + + +
+ +### tex4:t="emis_anim_shader_shift.tif" + +- R channel: Controls horizontal displacement on the program texture: + - White: No displacement. + - Black: Maximum displacement. +- G channel: Controls vertical displacement on the program texture: + - White: No displacement. + - Black: Maximum displacement. +- B channel: Controls the speed: + - White: Speed increases (visually by about 2x). + - Black: Speed is controlled by the `script:t="illum_scroll_speed=0.1"` + parameter. + +## Usage + +For complex animations, use `tex4:t="emis_anim_shader_shift.tif"`. + +**Example:** In the example below, only the R channel is used to control the +shift on the program. The green and white lamps, marked by arrows in the shift +texture (`tex4:t="emis_anim_shader_shift.tif`), are painted according to the UV +shell of the lamps. This causes visible artifacts at the seams. It is better to +paint the area as with the red/blue lamps. + + + +
+ +**Example:** For scrolling text, you'll need a `.dag` file for the banner and +three textures. + + + +
+ + + + + +

tex0:t="text_anim_tex_d"

tex3:t="text_anim_program"

tex4:t="text_anim_shift"

+ + + + + +For the scrolling text effect, both the gradient (which should be linear) and +the gamma value (`gamma:r=1`) of the textures are critical. + + + +
+ +Failing to meet these conditions will result in poor animation quality. For +example, using a *Photoshop* gradient with a gamma of `2.2` will produce subpar +results: + + + +
+ + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_simple_glass.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_simple_glass.md.txt new file mode 100644 index 000000000..56cba06bb --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_simple_glass.md.txt @@ -0,0 +1,34 @@ +# Shader: rendinst_simple_glass + +## Overview + +This shader can be assigned as `glass` when setting materials in *3ds Max*. + +For dynamic models, it is remapped to `dynamic_simple_glass`. + +## Parameters + +- `script:t="emission=X"` – Activates emission during dark hours, `X` is the + brightness of the emission. + +- `script:t="is_window=1"` – A common parameter across most glass shaders. + +In this shader, the `is_window` parameter is **enabled by default** since the +majority of assets using this shader are window glass. + +This parameter should be enabled for glass objects located at the boundary of an +`envi_probe`, meaning the glass needs to reflect two different environments: + +- The interior reflection, baked into the `envi_probe`. +- The exterior reflection, typically reflecting the outside environment. + +The parameter should be **disabled** for all glass objects used either entirely +inside or outside a building. Examples include glassware, lamp covers, vehicle +windows, etc. + +```{seealso} +For more information on setting up emission, see +[rendinst_emissive](./rendinst_emissive.md). +``` + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_simple_painted.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_simple_painted.md.txt new file mode 100644 index 000000000..79c8ebf9d --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_simple_painted.md.txt @@ -0,0 +1,147 @@ +# Shader: rendinst_simple_painted + +## Overview + +This is a basic shader for render instances that includes the ability to apply +color from a paint texture. Aside from this feature, it is identical to the +[rendinst_simple](./rendinst_simple.md) shader. + +```{important} +By default, this shader does not apply paint across the entire texture. Instead, +it only affects the range defined by the black and white points (explained +below). Out of the box, the shader will **not** fully paint the texture. + +If you find that the paint is not being applied as expected – either it doesn’t +appear at all or the color is incorrect – the likely issue is that your texture +is too dark for the shader's default settings. + +Configure the paint point settings to achieve the desired result. + +Unfortunately, the default settings are hardcoded, so they cannot be easily +modified. +``` + +### Textures + +As mentioned, this shader is identical to +[rendinst_simple](./rendinst_simple.md), with support for microdetails. + +- **tex0:** Diffuse Albedo +- **tex2:** Normals + Metalness + Smoothness + +### Parameters + +The shader uses the following parameters: + +1. `paint_palette_row = 1` – Specifies the row number in the paint texture to + use. Default is row 1 (can be omitted if unchanged). + +2. `paint_white_point=0.2` – The diffuse brightness level at which the albedo + will be fully painted. + +3. `paint_black_point=0.05` – The diffuse brightness level below which the + albedo will not be painted. + +4. `paint_mult = 1 or 2` – Specifies the paint multiplier. Default is `1`. Set + to `2` for a 2x multiplier. + +5. `paint_details = 1` – Configures the intensity of the paint, similar to other + shaders with multiple detail levels. + +6. `paint_const_color=0.5,0,0,0` – Specifies a constant paint color. The first + three components define the color, and the last component toggles between + modulating with the palette color (`0`) or replacing it with the constant + color (`1`). + +The `paint_white_point` and `paint_black_point` parameters define the brightness +range of the albedo that will be affected by the paint. By default, the shader +applies paint from darker to lighter areas, meaning it won't paint anything +below the black point and will fully paint anything above the white point. + +```{note} +You can invert this range by swapping the values. For example: +- `paint_white_point=0.02` +- `paint_black_point=0.5` + +In this case, darker areas will be painted, and lighter areas will not. +``` + +```{warning} +If you encounter a "divide by zero" error, + + + +
+ +it means you’ve set both parameters to the same value: +- `script:t="paint_white_point=0"` +- `script:t="paint_black_point=0"` + +or +- `script:t="paint_white_point=0.5"` +- `script:t="paint_black_point=0.5"` +``` + +## Paint Texture + +The paint texture consists of several rows, each only 1 pixel in height. The +texture width must be at least 256 pixels (256 is recommended as it is more than +sufficient). + +For example, a texture with three rows: + + + +
+ +### Paint Texture Row Numbering + +Row numbering starts at `0`. The convention is as follows: + +- **Row 0:** Exterior walls of buildings. +- **Row 1:** Building trim (shutters, doors, windows, frames). +- **Other Rows:** Assigned as needed by the level designer and asset manager. + +### Assigning a Paint Texture to a Level + +The texture is assigned to shader variables in the scene via +`paint_details_tex:t="texture_name*"`. + +For example, in the Tunisia map, this is defined as follows: + +- **File** path: + `.../prog/gameBase/content/e_tunisia/gameData/scenes/tunisia_city_assault.blk` + +- **Block**: + + ``` + entity{ + _template:t="shaderVars" + } + ``` + +- **Line**: `paint_details_tex:t="tunisia_wall_color_tex_palette*"` + +## How It Works? + +When an object moves across the map, a color pixel is selected from the +specified row in the paint texture based on an algorithm. This pixel's color is +then applied to the object's material. + +- If the object has multiple materials assigned to different paint rows, the + shader will select a single column of pixels from those specified rows. +- If the object is a composite object, the same column of pixels will be used + for all the objects and materials within it. + +For example, you might use row 0 to paint the walls blue and row 1 to paint the +windows and doors gray, ensuring that all windows and doors in the composite +object share the same color. + + + +
+ +This approach ensures consistent color application, preventing cases where a +single building has windows with varying colors. + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_tree_colored.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_tree_colored.md.txt new file mode 100644 index 000000000..cc0f4a1fc --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_tree_colored.md.txt @@ -0,0 +1,46 @@ +# Shader: rendinst_tree_colored + +## Overview + +A basic shader for rendering vegetation. + +## Textures + +- **tex0:** Diffuse texture with alpha channel. + +## Parameters + +Default values are indicated in quotes. + +- `script:t="atest=0"` – Enables alpha test. + +- `script:t="interactions=0"` – Configures interaction between characters and + vegetation. + - `0`: Disabled + - `1`: Tall plants + - `2`: Bushes + +- `script:t="interaction_strength=0.8"` – Controls the strength of interactions, + ranging from `0` to `1` (values above `1` might work as well). This is a + multiplier and is only effective when `interactions` is set to `1` or `2`. + +- `script:t="angle_dissolve=1"` – Toggles angle-based dissolve effects. + +- `script:t="spherical_normals=1"` – Applies spherical normals over branch + normals to smooth sharp edges and reduce low-poly appearance. + + ```{note} + This feature is rarely used and may behave unexpectedly. + ``` + +## Vertex Colors + +Unlike in *War Thunder*, the third channel is not used. + +- **Red Channel:** Controls fine vertex jitter. The shift occurs along the + vertex normals but only in the horizontal plane. +- **Green Channel:** Controls oscillation phase. It shifts the amplitude + oscillation by 90 degrees, randomizing the fine vertex jitter. + + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_tree_perlin_layered.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_tree_perlin_layered.md.txt new file mode 100644 index 000000000..849eb000b --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_tree_perlin_layered.md.txt @@ -0,0 +1,71 @@ +# Shader: rendinst_tree_perlin_layered + +## Overview + +The `rendinst_tree_perlin_layered` shader is designed for advanced rendering of +trees, using tessellation to enhance visual fidelity. This shader supports both +displacement and smoothing modes, allowing for detailed control over tree +geometry. Tessellation can be dynamically enabled or disabled at runtime, making +it adaptable for various performance settings. + +## Tessellation Overview + +Tessellation in this shader can be toggled at runtime via a shader variable. By +setting `pn_triangulation` to `1` in the console, all trees configured for +tessellation, as well as `rendinst_clipmap` objects with default settings, will +be tessellated. In the future, this feature will be incorporated into the +graphics settings. + +## Enabling Tessellation in an Asset + +1. **Default Setting:** Tessellation is disabled by default. To enable it, set + `material_pn_triangulation` to `1` or `2`. + +2. **Common Parameter:** + - **max_tessellation_factor:** Controls the tessellation factor, which varies + with distance. This parameter sets the maximum factor when the camera is + close to the object. + +3. **Tessellation Modes:** + - **Mode 2:** Smoothing only. This mode does not have any additional + configurable parameters. + - **Mode 1:** Displacement mode. In this mode, the shader reads the + displacement strength from the alpha component of the three diffuse + textures. These textures are blended according to pixel shader blending + rules. + + **Displacement Mode Parameters:** + - **rendinst_displacement_min:** Defines the displacement when the diffuse + texture's alpha is `0`. The `.xyz` components correspond to the three + diffuse textures, while `.w` is unused. + - **rendinst_displacement_max:** Defines the displacement when the diffuse + texture's alpha is `1`. The `.xyz` components correspond to the three + diffuse textures, while `.w` is unused. + - **rendinst_displacement_lod:** Specifies the mip level used for sampling + the diffuse textures during displacement. Lower values result in more + noise, while higher values produce smoother displacement. The `.xyz` + components correspond to the three diffuse textures, and `.w` is unused. + - **rendinst_displacement_mod:** If `is_pivoted` is set to `1`, this shader + variable allows multipliers to be specified based on the vertex hierarchy. + The `.x` component is the multiplier for the trunk, while `.yzw` components + apply to the branches in hierarchical order. + +## Additional Notes + +- **Tessellation Factor Limit:** The maximum tessellation factor is 12 due to + API limitations. Setting `max_tessellation_factor` higher will simply reach + this maximum at a greater distance. However, it is generally unnecessary to + set it too high, as tree triangles are typically small. + +- **rendinst_displacement_lod Setting:** This should be adjusted so that the + texels sampled at the selected mip level correspond to a single triangle after + tessellation, in terms of world size. Precise calculations aren't + required – adjust until the visual result is satisfactory. + +- **daEditor Configuration:** When using + [*daEditor*](../../../dagor-tools/daeditor/daeditor/daeditor.md), ensure that + the **PN triangulation** checkbox is selected to view the tessellation results + immediately. + + + diff --git a/_sources/assets/shaders/dng-shaders/rendinst_vcolor_layered.md.txt b/_sources/assets/shaders/dng-shaders/rendinst_vcolor_layered.md.txt new file mode 100644 index 000000000..07c0180bd --- /dev/null +++ b/_sources/assets/shaders/dng-shaders/rendinst_vcolor_layered.md.txt @@ -0,0 +1,394 @@ +# Shader: rendinst_vcolor_layered + +## Overview + +The `rendinst_vcolor_layered` shader is designed for rendering instances with +three detail layers, which blend based on: + +1. The vertex color channels of the object's geometry. +2. Corresponding heightmaps for each layer. + +**Parameter List** + +- `script:t="atest=1"` and `script:t="details_alphatest=0,0,0,0"` – These + parameters work together to enable alpha test. The first parameter (`atest`) + activates alpha test, while the second (`details_alphatest`) sets the alpha + test strength for each detail layer. +- `script:t="details_tile=1,1,1,0"` – Controls the tiling of the detail + textures. +- `script:t="invert_heights=0,0,1,0"` – Inverts the heightmaps for each detail + layer. Fractional values can be used. The value of `0.5` turns heightmap into + neutral gray fill. +- `script:t="paint_details=0,0,0,0"` – Allows painting over the three detail + layers. +- `script:t="overlay_color_from=0,0,0,0"` – Defines the starting color for + overlay blending using linear interpolation (LERP), with masking defined by + the blue vertex color channel. +- `script:t="overlay_color_to=0,0,0,0"` – Defines the target color range for + overlay blending, from `0` (black, RGB: `0,0,0`) to `1` (white, RGB: + `255,255,255`). + +```{important} +If vertex color is not painted after applying this shader, the *Asset Viewer* +will produce an error when selecting the model (related to the 5th mapping +channel). Ensure vertex colors are used with this shader, as it will not +function correctly without them. +``` + +## Textures + +- **tex0**: Detail1 Diffuse (Albedo) +- **tex2**: Detail1 Normals + Metalness + Smoothness +- **tex3**: Detail2 Diffuse (Albedo) +- **tex4**: Detail2 Normals + Metalness + Smoothness +- **tex5**: Detail3 Diffuse (Albedo) +- **tex6**: Detail3 Normals + Metalness + Smoothness + +## Parameters + +### Alpha Test + +This shader is suitable for materials that require transparency, such as +tattered cloth or paper. Alpha test is controlled by two parameters: + +- `script:t="atest=1"` – Activates alpha test for the material. This parameter + alone does not alter the appearance until `details_alphatest` is specified. +- `script:t="details_alphatest=0,0,0,0"` – Specifies the alpha test strength + for each detail layer, with values ranging from `0` to `1`":" + - 1st component: Detail1 + - 2nd component: Detail2 + - 3rd component: Detail3 + - 4th component: Unused, but required. + +### Detail Tiling + +The detail tiling parameter behaves similarly to the +[rendinst_perlin_layered](../rendinst_perlin_layered.md) shader. + +- `script:t="details_tile=1,1,1,0"`: + - 1st component: Tiling for Detail1. + - 2nd component: Tiling for Detail2. + - 3rd component: Tiling for Detail3. + - 4th component: Unused, but required. + +### Procedural Painting + +This feature allows procedural painting over the detail layers (similar to +[rendinst_perlin_layered](../rendinst_perlin_layered.md) shader). + +- `script:t="paint_details=0,0,0,0"` – Allows painting over the three detail + layers. + - 1st component: Paint strength for Detail 1 (fractional values allowed). + - 2nd component: Paint strength for Detail 2. + - 3rd component: Paint strength for Detail 3. + - 4th component: Selects line of painting palette. + +### Vertex Color Overlay + +The shader uses the blue channel of the vertex color to create a global color +overlay map. Two colors are blended using linear interpolation (LERP), with the +map defined by the blue vertex color channel. + +- `script:t="overlay_color_from=0,0,0,0"` – Defines the starting color for the + blend. +- `script:t="overlay_color_to=0,0,0,0"` – Defines the target color for the + blend. + - The first three components represent the RGB values, ranging from `0` + (black) to `1` (white). + - The 4th component is currently unused. + +This overlay modulates the blending of the detail layers. For example, storing +curvature data in the blue vertex color channel can create an effect where +cracks in stone appear black, while raised areas appear red. By default, both +colors are set to mid-gray, so no additional color effect is applied. + +```{important} +The "from" color is applied globally by default. To prevent the entire model +from being painted, set the "from" color to a neutral gray (`0.5, 0.5, 0.5, 0`) +and configure the "to" color to highlight specific details. +``` + +## Functionality + +### VertexPaint Modifier + +Here are key settings you'll need when using the *VertexPaint* modifier with +this shader: + + + +- This button toggles the display of vertex colors on the model. + +
+ + + +- Tools for painting or filling the vertex color. + +
+ + + +- Brush opacity and size settings (default size is 20 meters). + +
+ + + +- Options for geometry selection while painting. + +
+ + + +- Smooth brush tool for blending painted colors. + +
+ + + +- Vertex color blending modes (similar to Photoshop layers). When using multiple + modifiers, it's recommended to paint each color channel (R, G, and B) + separately. The red channel typically uses the "normal" blend mode, while + green and blue use **Add** mode. + +
+ +```{important} +By default, vertex colors on the model are set to white (maximum values for all +channels). To begin painting, fill the entire model with black. +``` + +### Blending Details + +The shader blends three detail layers using both vertex colors and heightmaps. + +#### Vertex Color Blending + +Initially, Detail1 is applied across the model. Detail2 and Detail3 are blended +into it based on the red and green vertex color channels. + +For example, painting an area with 100% red will apply Detail2 there, while 100% +green will apply Detail3. Smooth gradients in the vertex colors create more +natural transitions between the detail layers. + +#### Heightmap Blending + +The brightness of the heightmaps influences how strongly each detail layer +blends. The intensity of the vertex colors is multiplied by the corresponding +heightmap brightness. + +For example: +- If two detail layers have identical heightmaps and vertex color weights, they + will blend evenly. +- A detail with a black heightmap and another with a mid-gray heightmap will + blend differently, as the mid-gray heightmap will have a higher visual impact. + +### Visual Examples + +Let's consider an example of a car tarp using multiple detail textures and their +corresponding heightmaps. + + + + +

fabric_tarpaulin_a_tex_d – Detail1 and Detail2

fabric_shabby_a_tex_d – Detail3

+ + + + + + + +- **Shader Parameters:** + + +

+

    +
  • script:t="paint_details=1,0,0,1"
  • +
  • script:t="details_tile=12,16,20,0"
  • +
  • script:t="invert_heights=0,0,0,0"
  • +
  • script:t="details_alphatest=0,0,0,0"

+

    +
  • tex0:t="fabric_tarpaulin_a_tex_d.tif"
  • +
  • tex2:t="fabric_tarpaulin_a_tex_n.tif"
  • +
  • tex3:t="fabric_tarpaulin_a_tex_d.tif"
  • +
  • tex4:t="fabric_tarpaulin_a_tex_n.tif"
  • +
  • tex5:t="fabric_shabby_a_tex_d.tif"
  • +
  • tex6:t="fabric_shabby_a_tex_n.tif"
  • +

+ + + + +

3ds Max

Asset Viewer

+ + + + +By default, the entire model is covered by Detail1 (as we cannot leave the model +without any detail). For clarity, it tinted a yellowish color (see shader +parameters). + + + + +- X-axis (100% Red): Subtracts Detail2 from Detail1. +- Y-axis (100% Green): Subtracts Detail3 from Detail1. +- Z-axis (100% Green and Red): Subtracts both Detail2 and Detail3 from Detail1. + +These details blend based on their heightmaps (you may notice an uneven +transition from Detail2 to Detail3), but the blend is not perfect – Detail2's +heightmap is stronger than Detail3's. + + + + +We introduced some subtle variation by applying a 45% fill of Detail2 across the +fabric. This allows Detail2 to appear in scattered areas, blending based on the +heightmaps, which adds visual variety. + + + + + + + +Next, we enhanced the raised parts of the tarp with a 55% application of +Detail2, simulating faded areas on protruding fabric sections. We used 55% +because 45% of the tarp was already covered with red (Detail2). + +If we applied 100%, the result would have been 145%, creating an overly +saturated color and causing the wear effect to spread too much across the +fabric. There are two sets of screenshots – before and after blurring the +painted areas. + +- **Shader Parameters:** + + +

+

    +
  • script:t="atest=1"
  • +
  • script:t="paint_details=1,0.4,-4,1"
  • +
  • script:t="details_tile=12,16,20,0"
  • +
  • script:t="invert_heights=0,0,0,0"
  • +
  • script:t="details_alphatest=0,0,0.33,0"

+

    +
  • tex0:t="fabric_tarpaulin_a_tex_d.tif"
  • +
  • tex2:t="fabric_tarpaulin_a_tex_n.tif"
  • +
  • tex3:t="fabric_tarpaulin_a_tex_d.tif"
  • +
  • tex4:t="fabric_tarpaulin_a_tex_n.tif"
  • +
  • tex5:t="fabric_shabby_a_tex_d.tif"
  • +
  • tex6:t="fabric_shabby_a_tex_n.tif"
  • +

+ + + + +

3ds Max

Asset Viewer

+ + + + +We added 100% spots of Detail3, then applied a 30% smoothing to blend them. At +100%, Detail3 would appear too weak due to its less pronounced heightmap +compared to Detail1 and Detail2. + +Notice the spots around Detail3, which are actually from Detail2, even though we +didn't directly paint them. This occurs because the entire tarp was filled with +45% of Detail2, and wherever Detail3 partially subtracts from Detail1, Detail2 +also starts to blend in. + +We configured the colors for Detail2 and Detail3 to reduce the color contrast. +Additionally, we applied an alpha test to Detail3 (although it's not very +visible in the screenshot). + +- **Shader Parameters:** + + +

+

    +
  • script:t="atest=1"
  • +
  • script:t="paint_details=1,0.4,-4,1"
  • +
  • script:t="details_tile=12,16,20,0"
  • +
  • script:t="invert_heights=0,0,0,0"
  • +
  • script:t="details_alphatest=0,0,0.33,0"
  • +
  • script:t="overlay_color_from=0.5,0.5,0.5,0"
  • +
  • script:t="overlay_color_to=0,0,0,0"

+

    +
  • tex0:t="fabric_tarpaulin_a_tex_d.tif"
  • +
  • tex2:t="fabric_tarpaulin_a_tex_n.tif"
  • +
  • tex3:t="fabric_tarpaulin_a_tex_d.tif"
  • +
  • tex4:t="fabric_tarpaulin_a_tex_n.tif"
  • +
  • tex5:t="fabric_shabby_a_tex_d.tif"
  • +
  • tex6:t="fabric_shabby_a_tex_n.tif"
  • +

+ + + + +

3ds Max

Asset Viewer

+ + + + + + + + + + +We added a layered overlay in the blue channel. The color gradient ranges from +50% gray (which doesn't affect the texture) `0.5,0.5,0.5,0` to 0% black +`0,0,0,0`. + +To illustrate the "from-to" color concept, consider the following example: +`script:t="overlay_color_from=0.549,0.239,0.239,0"` (~RGB `140,61,61`). + + + +
+ +Any area not painted with blue will be colored using the "from" value. This +approach can be useful in some cases, but not always necessary. + + + + +As a final touch, let's create a burnt corner on the fabric. While this effect +may not look perfect without further geometry adjustments, the intention should +be clear. Note that we had to erase the initial 45% red fill in that area to +make Detail3 stand out properly. + +Here's an example of appropriate geometry with the shader applied correctly +(only one detail layer is used across the model), showcasing burnt edges: + + + +
+ +Most of the stages were painted in separate layers: + +- Global application of Detail2. +- Global application of Detail3. +- Detail3 applied to the burnt corner. +- Overlay for fabric folds. +- Overlay for a dirty tarp top. +- Overlay for individual spots. +- Overlay for the burnt corner. + +## Shader Usage + +This shader is well-suited for: + +- Various types of fabric that don't require fine details (not suitable for + clothing). +- Stones, where you can highlight sharp edges (similar to a cavity effect) and + darken the rest. +- Props without sharp details, like clay vases. However, it's less applicable in + such cases because this shader works best with a dense mesh. Otherwise, it + will only affect large areas. +- For props, it's usually cheaper to create a unique texture or use the + [rendinst_mask_layered](./rendinst_mask_layered.md) shader instead. + + diff --git a/_sources/assets/shaders/index.rst.txt b/_sources/assets/shaders/index.rst.txt new file mode 100644 index 000000000..3c5b08190 --- /dev/null +++ b/_sources/assets/shaders/index.rst.txt @@ -0,0 +1,22 @@ + +Shaders +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + rendinst_interior_mapping.md + rendinst_layered.md + rendinst_layered_lightmap.md + rendinst_parallax_ice.md + rendinst_perlin_layered.md + rendinst_simple_emissive.md + simple_aces_detailed.md + rendinst_layered_family.md + land_mesh_combined_decal_family.md + dng-shaders/index.rst + + + + diff --git a/_sources/assets/shaders/land_mesh_combined_decal_family.md.txt b/_sources/assets/shaders/land_mesh_combined_decal_family.md.txt new file mode 100644 index 000000000..b9c8d1a9f --- /dev/null +++ b/_sources/assets/shaders/land_mesh_combined_decal_family.md.txt @@ -0,0 +1,271 @@ +# Shader Family: land_mesh_combined_decal + +## Overview + +We use several shaders for object geometry to apply decals to the terrain. This +is not to be confused with simple ground decals, which apply directly to the +terrain geometry – that's a different topic. Here, we are dealing with +**geometric decals**. + +When do we need to apply a decal to the terrain using geometry? When we want to +modify the landscape's geometry and add some new color (and possibly details). A +good example would be airfields. Given their large size, it's impractical to +render them as full-scale models with unique textures (or tiled textures), as +this would result in a poor texel density. Moreover, they wouldn't blend +seamlessly with the surrounding terrain – there would be harsh transitions +between textures. + +The solution is decals. For example, if you want a snowy airfield in a desert, +you can achieve this with decals. All decals are prefabs – they are baked into +the level's geometry. + + + +
+ +There are several shaders we can use for this: + +1. `land_mesh_combined` and its dynamic version `dynamic_combined_decal` +2. `land_mesh_combined_detailed_decal` and its dynamic version + `dynamic_combined_detailed_decal` +3. `land_mesh_combined_mixed_decal` and its dynamic version + `dynamic_combined_mixed_decal` + +```{important} +The difference between dynamic and static shaders boils down to two key points: +- Static shaders are applied to prefabs, while dynamic shaders are applied to + dynamic models (for simplicity, think of them as models with dynamic shaders). +- Objects with dynamic shaders can only be placed through the *MissionEditor* as + units (whether they're part of an object group or a dynamic object). In + contrast, static objects are placed directly as entities in the **Landscape** + tab. +``` + +## land_mesh_combined / dynamic_combined_decal – Basic Shader + +This is the simplest shader in the family. It has no parameters and applies only +a decal texture to the geometry. The typical material configuration looks like +this: + +``` +material{ + name:t="airfield_side" + class:t="land_mesh_combined" + tex0:t="./norway_herdla_airfield_empty_alpha.tif" +} +``` + +The decal texture represents the diffuse component of what we are applying. The +alpha channel controls the transparency of the decal. + +For example: + + + + + +

Airfield on the Map

Decal Diffuse

Decal Alpha

+ + + + + +Currently, this basic shader is rarely used because the need for greater detail, +even for aircraft-related assets, has increased. However, it's sometimes applied +to the "manchette" of airfields (the curved edges used to blend the airfield +surface with the surrounding terrain). In such cases, the shader with a +transparent alpha texture is assigned to this geometry: + + + +
+ +## land_mesh_combined_detailed_decal / dynamic_combined_detailed_decal – Shader with One Detail Layer + +This shader works with three textures: + +- **Slot 1:** decal texture with transparency in the alpha channel. +- **Slot 2:** diffuse detail texture. +- **Slot 3:** `_r` detail texture. + +The first two slots are self-explanatory. The `_r` texture requires further +reading, but in short, it contains a height map, microdetail index, smoothness, +and reflectance. Based on these parameters, the detail on the terrain is +embossed and exhibits the physical properties of the desired material. + +```{important} +This `_r` texture is not the same as the one used for landscapes! On landscapes, +the `_r` texture includes reflectance, ambient occlusion, microdetail index, and +smoothness. +``` + +This shader has the following parameters: + +- `script:t="detail1_size_ofs=0.25,0.25,0,0"` – this offsets the detail texture + (effectively controlling the tiling). + +A typical material configuration looks like this: + +``` +material{ + name:t="smolensk_aero_south" + class:t="land_mesh_combined_detailed_decal" + script:t="detail1_size_ofs=64,32,0,0" + tex0:t="smolensk_aero_south_tex.tif" + tex1:t="detail_soil_cracked_tex_d.tif" + tex2:t="detail_soil_cracked_tex_r.tif" +} +``` + +The logic is the same as in `land_mesh_combined`, except that this shader adds a +detail layer to the decal texture. Essentially, in this case, the decal acts +more as an overlay because of its large texel size, which results in a blurred +appearance. + + + + +The fine details come from the detail and microdetail textures. For instance, +fine textures such as small cracks or wear patterns are handled by the detail +layers, while larger surface elements, like ruts or pathways, are represented by +the decal. + +## land_mesh_combined_mixed_decal / dynamic_combined_mixed_decal – Shader with Four Detail Layers + +This is the most advanced shader in the family. It operates similarly to +`land_mesh_combined_detailed_decal` but supports up to four detail layers +instead of one. + +```{important} +There's a known issue: if an object has mapping in the third channel, its +texture on the ground may appear semi-transparent. Avoid using unnecessary +mapping channels. +``` + +```{important} +The dynamic version is not suitable for large surfaces (hundreds of meters) made +of dense materials (concrete, asphalt, etc.), as it becomes semi-transparent +when viewed from a distance. For example, you might notice that the markings and +runway seem to fade when seen from far away. + + + +``` + +### Shader Textures + +The shader works with 10 textures: + +- **Slot 1:** decal +- **Slot 2:** detail blending mask +- **Slot 4:** diffuse texture for detail layer 1 +- **Slot 5:** `_r` texture for detail layer 1 +- **Slot 6:** diffuse texture for detail layer 2 +- **Slot 7:** `_r` texture for detail layer 2 +- **Slot 8:** diffuse texture for detail layer 3 +- **Slot 9:** `_r` texture for detail layer 3 +- **Slot 10:** diffuse texture for detail layer 4 +- **Slot 11:** `_r` texture for detail layer 4 + +The blending mask is an RGB mask where: +- R-channel represents detail layer 1 +- G-channel represents detail layer 2 +- B-channel represents detail layer 3 +- Areas with less than 100% brightness in all channels will display detail layer + 4. + +```{note} +Don't worry if the fourth detail layer appears in areas without detail layers 1, +2, or 3. The final decal's visibility is controlled by the decal's alpha +transparency, meaning you can control the appearance of all details, including +the fourth layer, using the transparency mask. +``` + +For example: + + + + +

Airfield on the Map

Decal Diffuse

+ + + + + + + +

Decal Alpha

Blending Mask

+ + + + +In this case: +- The blue channel defines the pathways. +- The alpha mask smooths the edges of other detail layers, making them + transparent and revealing the fourth layer. +- All channels together create a multicolored effect on the runway, blending + different types of sand, dirt, and rocks. + +Some examples use more defined masks: + + + + +

Airfield on the Map

Decal Diffuse

+ + + + + + + +

Decal Alpha

Blending Mask

+ + + + + + +
+ +In this case: +- R-channel represents concrete. +- G-channel represents concrete slabs. +- B-channel represents dirt. +- A-channel (black in the mask) represents dirt paths and dust along the edges + of the concrete and slabs. + +All these elements appear based on the decal's alpha transparency. + +### Parameters + +- `script:t="detail1_size_ofs=0.25,0.25,0,0"` – detail layer 1 texture offset + (tiling) +- `script:t="detail2_size_ofs=0.25,0.25,0,0"` – detail layer 2 texture offset +- `script:t="detail3_size_ofs=0.25,0.25,0,0"` – detail layer 3 texture offset +- `script:t="detail4_size_ofs=0.25,0.25,0,0"` – detail layer 4 texture offset + +A typical material configuration looks like this: + +``` +material{ + name:t="markup_1" + class:t="land_mesh_combined_mixed_decal" + script:t="detail1_size_ofs=128,64,0,0" + script:t="detail2_size_ofs=128,64,0,0" + script:t="detail3_size_ofs=128,64,0,0" + script:t="detail4_size_ofs=256,128,0,0" + tex0:t="afghan_airfield_bagram_tex.tif" + tex1:t="afghan_airfield_bagram_tex_mask.tif" + tex3:t="detail_asphalt_a_tex_d.tif" + tex4:t="detail_asphalt_a_tex_r.tif" + tex5:t="detail_concrete_tex_d.tif" + tex6:t="detail_concrete_tex_r.tif" + tex7:t="detail_concrete_tex_d.tif" + tex8:t="detail_asphalt_cracks_tex_r.tif" + tex9:t="detail_sand_ground_tex_d.tif" + tex10:t="detail_sand_ground_tex_r.tif" +} +``` + + diff --git a/_sources/assets/shaders/rendinst_interior_mapping.md.txt b/_sources/assets/shaders/rendinst_interior_mapping.md.txt new file mode 100644 index 000000000..442d228a8 --- /dev/null +++ b/_sources/assets/shaders/rendinst_interior_mapping.md.txt @@ -0,0 +1,624 @@ +# Shader: rendinst_interior_mapping + +## Overview + +The `rendinst_interior_mapping` shader was developed to simulate interiors for +large windows (and a significant number of windows) by projecting an interior +cubemap onto a plane or box. This shader creates the illusion of an interior +"behind the glass" using a drawn cubemap. Reflections on the glass are simulated +either from a custom-made cubemap or from an environment cubemap that is +generated each time the map is loaded. + +## General Parameters + +Common parameters: + +- `script:t="fadeout=50, 100, 100, 200"` – Cubemap fade settings. The first two + parameters control the interior fade, while the last two control the exterior + fade. +- `script:t="fade_color=0.188, 0.224, 0.259, 0"` – Glass color during cubemap + fading, specified in RGB format using decimal values. + +- `script:t="room_depth=1"` – Sets the depth of the far wall, allowing it to be + pushed back to create the illusion of a larger space. +- `script:t="tile=1, 1, 1, 0"` – Controls the tiling of the interior cubemap. + This parameter can be used to create multiple rooms on a single plane. +- `script:t="room_size=2, 1, 0, 0"` – Defines the proportions of the window (and + the room behind it, as the room is usually "matched" to the window's width and + height). +- `script:t="tile_space=1,1,0,0"` – Creates spaces between the windows. The + first two components control the tiling, while the last two control the + offset. +- `script:t="tile_space_color=0.58,0.216,0.62,0,1"` – Defines the color of the + spaces between the windows (first three components) and the strength of + reflections in these spaces (fourth component). + +- `script:t="room_selfillum=0.4"` – Controls the self-illumination of the + interior. +- `script:t="illum_random=3"` – Adjusts the randomness of the interior's + illumination. +- `script:t="illum_only_at_night=1"` – Enables illumination only at night. + +- `script:t="convexity_slope=-0.07,0.07,2,2"` – The first two components control + the concavity/convexity of the glass, while the last two components adjust the + glass's rotation on the horizontal and vertical axes. + +- `script:t="contortion_tiling=1,1,1,1"` – Tiling for refractions. The first two + components control the tiling width/height, the third controls the width of + the leftmost tile, and the fourth controls the height of the bottom tiles. + +- `script:t="smoothness_metalness_reflection=0.5, 0.5, 1.5, 0"` – Specifies + values for smoothness, metalness, and reflection. + +*daNetGame*-based-specific parameters: + +- `script:t="shadow_caster=0"` – Disables shadow casting by the glass using this + shader. By default, it is set to `1` (casting shadows enabled). + +## Asset Requirements + +Let's consider the standard requirements that allow the use of all procedural +parameters of the shader. Non-standard features will be discussed separately at +the end of the article. + +1. The mapping coordinates should match the asset's coordinates, meaning that + its top-bottom-left-right should correspond to the top-bottom-left-right on + the mapping. + + + +
+ +2. The mapping, regardless of the window's proportions, must be a full square in + the "texture" unwrap. + +3. Cubemaps should be created in the following format: + + + + - 1 – Left + - 2 – Right + - 3 – Top (rotated 180 degrees) + - 4 – Bottom (rotated 180 degrees) + - 5 – Front-facing side. For the interior cubemap, this side should simply be + black. + - 6 – Far wall. + +
+ +4. Cubemaps should be saved in `.tif` format. + +```{note} +In *daNetGame*-based projects, cubemaps can be created using the console command +`screencap.take_screenshot_360`. + +The result will be saved as six images in the `/game/Screenshots` +directory, which can then be assembled according to the template from point 3. +``` + +## Shader Setup + +### Textures + +The shader uses one or two textures. + +1. The first slot is for the interior cubemap (mandatory texture). Simulates the + interior behind the glass. + +2. The third slot is for the exterior cubemap (optional texture). Simulates the + external environment and is best used on lower floors. On higher floors, this + may not work as well because objects in the cubemap can appear + disproportionately large. For higher floors, it is recommended not to specify + this texture, in which case the environment cubemap will be used instead. + +### Parameters + +#### Cubemap Fading + +1. `script:t="fadeout=50, 100, 100, 200"` – Controls cubemap fading. The first + two parameters affect the interior, and the last two affect the exterior. For + each cubemap, the first parameter specifies the distance at which fading + begins, and the second specifies the distance at which fading is complete. + +2. `script:t="fade_color=0.188, 0.224, 0.259, 0"` – Sets the glass color during + cubemap fading. The color is specified in the RGB format using decimal + values. For example, an RGB color of `48, 57, 66` would be divided by 255 to + yield `0.188, 0.224, 0.259`. The fourth parameter is unused. + +#### Smoothness, Metalness, and Reflection + +`script:t="smoothness_metalness_reflection=0.5, 0.5, 1.5, 0"` – This parameter +directly sets smoothness, metalness, and reflection values. + +#### Room Proportion and Tiling + +##### Room Depth + +`script:t="room_depth=1"` – Sets the depth of the far wall, allowing it to be +moved back to create the illusion of a larger space or brought closer to +simulate curtains behind the glass. + +##### Interior Cubemap Tiling + +`script:t="tile=1, 1, 1, 0"` – Controls the tiling of the interior cubemap, +allowing multiple rooms to be created on a single plane using this parameter: + +- The first two components set the horizontal and vertical tiling, respectively. +- The third component randomizes the cubemap rotation (`0`/`1` values). + +**How does it work?** + +1. Map the surface (even if it's a rectangle) into a square texture (1 tile per + UV) to achieve, for example, the following: + + + +
+ +2. Set the horizontal tiling value to `3` to create three rooms: + + + +
+ +3. Set the third component to `1` to achieve random cubemap rotation per room: + + + +
+ +##### Room Size + +`script:t="room_size=2, 1, 0, 0"` – Sets the proportions of the window (and thus +the room behind it, as the room usually matches the window's width and height). +The first two components control width and height, respectively. These values +can be in any arbitrary units since they represent proportions, but it's simpler +to use unit values. + +Let's examine how it works using the example above: + +1. `script:t="room_size=1, 1, 0, 0"` – For testing, the window's width and + height are set to be equal. This results in rooms curving towards the center: + + + +
+ +2. The model's width is twice its height, so set the corresponding value to + `script:t="room_size=2, 1, 0, 0"`: + + + +
+ +Everything is now proportionally correct. + +```{important} +This also presents a challenge – you cannot apply the same material to windows +with different proportions. The example uses a parallelepiped, and the side part +with the current material looks incorrect: + + + +
+ +``` + +##### Spacing Between Windows + +`script:t="tile_space=1,1,0,0"` – This parameter allows for varying the spacing +between windows, which is useful for buildings with asymmetrical window spacing. +The first two components control X and Y spacing, respectively (though all +components must be specified). + +1. By default, the values are set to `script:t="tile_space=1,1,0,0"`: + + + +
+ +2. Increasing these parameters will decrease the size of the windows within the + same area (the windows shrink relative to their centers): + + `script:t="tile_space=2,2,0,0"` + + + +
+ +3. `script:t="tile_space=5,2,0,0"` + + + +
+ +4. `script:t="tile_space=5,2,0.5,0"` + + + +
+ +5. `script:t="tile_space=5,2,0.5,0.5"` + + + +
+ +Working with this parameter involves: + +1. Counting the number of window openings. +2. Setting the appropriate window tiling using `script:t="tile=1, 1, 1, 0"`. +3. Adjusting the spacing between windows with this parameter. + +##### Color of Spaces Between Windows + +`script:t="tile_space_color=0.58,0.216,0.62,0.1"` – Sets the color of the spaces +between windows using the first three components. The fourth component controls +the reflection strength for these spaces. + + + +
+ +#### Window Illumination Parameters + +Parameters for controlling the illumination of the interior cubemap. The ability +to make windows glow is implemented with two parameters: + +- `script:t="room_selfillum=0.4"` – Controls self-illumination. The value can + range from 0 to any desired amount. + +- `script:t="illum_random=3"` – Controls the randomness of illumination. The + value represents the number of illumination states – the higher the number, + the greater the variety. + +Illumination fades more slowly than the interior cubemap itself. This occurs +according to the function `(1 - 0.8*distFade)`, where `distFade` is calculated +as `(distance to glass)/(interior cubemap fade distance)`, but never exceeds +`1`. Therefore, the minimum illumination is `1-0.8=0.2`, not `0`, because it's +technically impossible to smoothly fade illumination to `0` – it always cuts +off. As a result, a minimal level of light remains. + +- `script:t="illum_only_at_night=1"` – Enables illumination only at night. + + ```{important} + This parameter should be specified for everything that should light up, except + for rare cases when light is needed during the day. + ``` + +#### Glass Distortion Parameters + +##### Glass Distortion + +You can set the glass distortion (convexity/concavity) and rotation (on +horizontal and vertical planes) to create varied reflections and sun glints on +the glass. + +`script:t="convexity_slope=-0.07,0.07,2,2"` where: + +- The first two components define the maximum concavity (away from the viewer) + and convexity (toward the viewer) of the glass. A random value within the + specified range is added to the glass normal. Usually, these values are less + than `1` (ranging from hundredths to tenths) and should be tested on specific + windows. Larger panoramic windows require smaller values, while smaller, less + common windows can handle larger values. Essentially, this sets the + "sharpness" of the distortion – the larger the values, the more pronounced the + center of the distortion. The position of the distortion center is randomized + across the glass surface. + +- The third and fourth components control the glass rotation on the horizontal + and vertical planes, respectively. This rotation is also added to the glass + normal and is specified in degrees. These values represent the absolute + maximum/minimum (e.g., with a value of 2, the range is `|2|`, meaning between + -2 and +2). As with distortion, a random value is chosen within this range. + For instance, setting a 10-degree rotation will randomize between -10 and +10. + +Let's look at some examples. In the images below: left – the normal map, right – +the result. + +1. All distortion parameters set to zero: + + + +
+ +2. `script:t="convexity_slope=-0.03,-0.03,0,0"` + + The normal map shows little change due to the small values, but the + reflection demonstrates significant distortion. + + + +
+ +3. `script:t="convexity_slope=0,0,10,0"` + + Horizontal rotation is slightly noticeable on the normal map. + + + +
+ +4. `script:t="convexity_slope=0,0,0,10"` + + Vertical rotation is also noticeable on the normal map. + + + +
+ +5. `script:t="convexity_slope=-100,100,0,0"` + + Extremely exaggerated values are used to illustrate the nature of distortion. + (Also note that the distortion center is not centered on the window – there's + a procedural shift on each window tile.) + + + +
+ +6. `script:t="convexity_slope=-0.03,0.3,10,10"` + + Example on "distributed" windows with distortion: + + + +
+ + Example on "distributed" windows without distortion: + + + +
+ +7. `script:t="convexity_slope=-100.03,100.3,100,100"` + + Example on "distributed" windows with exaggerated values – demonstrating the + randomness of shifts and selection of values. + + + +
+ + + +
+ +Different reflections on the windows of a building thanks to this technique. +Visible tiling seams on the cubemap – normal map seams visible across windows. + + + +
+ +### Distortion Tiling + +In practice, basic window tiling is often insufficient. The interior may consist +of a single "room", but the window frame might have multiple panes of glass, +each needing to reflect light differently. + + + + +

The current area of a single reflection

The desired area of a single reflection

+ + + + +To achieve this, use the parameter `script:t="contortion_tiling=1,2,1,1"`, +where: + +- The first component controls horizontal tiling of distortions. +- The second component controls vertical tiling of distortions. +- The third component sets the width (as a fraction of the window) of the + leftmost distortion tile. + + + +
+ +- The fourth component sets the height (as a fraction of the window) of the + leftmost lower distortion tile. + + + +
+ +For the given window example: + +- Horizontal tiling is set to `2` (indicating 2 panes of glass). +- Vertical tiling is also set to `2` (indicating 2 panes of glass). +- The width of the leftmost tile is set to `0.5` (half the window width). +- The height of the bottom tile is set to `0.65` (approximately two-thirds of + the window's total height). + +Thus, `script:t="contortion_tiling=2,2,0.5,0.65"`. This configuration ensures +that each pane of glass has its unique distortion (in *Asset Viewer* it's not so +apparent, but in the game the difference is huge due to the reflections on the +windows). + + + +
+ +```{important} +- The third component specifies the width of **only** the leftmost tile. All + other tiles will maintain a uniform proportional width. + + + +
+ +- The fourth component specifies the height for all bottom tiles, meaning it + affects the entire window. + + + +
+ +- As a result, creating a window with a single vent procedurally isn't + feasible – additional parameters would be required for every possible + configuration. +``` + +## Non-Standard Solutions + +### Simulating Large Spaces + +According to asset requirements, the window should be mapped strictly within a +square texture. However, this mapping results in the room behind the glass being +perfectly aligned with the window's edges. If we want to increase the space +behind the glass, we need to reduce the mapping. + +By reducing the mapping, the space behind the glass appears larger. The ceiling, +walls, and floor are pushed farther back, giving the impression of a room much +larger than the window. + + + + +

Standard mapping

Reduced mapping

+ + + + + + + +We need to show that a single room lies behind three separate windows. With +default mapping, you end up with three windows, each showing its own room. By +splitting the mapping, you achieve a single large room visible through all three +windows. + + + + +

Standard mapping

Split mapping

+ + + + + + + +In the previous example, the room became an enormous hangar because we +proportionally reduced the window mapping. + +To avoid this, do the following: +1. Scale the mapping non-proportionally. +2. Compensate for the non-proportional mapping with the `room_size=2, 1, 0, 0` + parameter. + + + + +

Split mapping

Compensated mapping

+ + + + + + + +```{note} +By default, we use this parameter to emphasize the geometry's proportions – if +the width is twice the height, we set `room_size=2, 1`. However, in our example, +the geometry is square, meaning the parameter should be `room_size=1,1`. But we +reduced the width of the mapping to roughly half the height, so we compensate by +setting the width to `2` and the height to `1`. In this case, the smaller +mapping side corresponds to the larger parameter value. +``` + +### Random Rotation in Individual Windows + +We have a parameter for adding randomness to tiled cubemaps: `script:t="tile=1, +1, 1, 0"`. This works when you have a large window area and procedurally tile +several rooms within it. However, there are often cases where each window is a +separate piece of geometry. Two primary scenarios arise: + +- Each window is a separate piece of geometry within a single `.dag`. +- Each window is a separate `.dag`, placed on a building by a composite. + +Let's consider both cases. + +#### Window as Separate Geometry within a .dag + +By default, exporting a `.dag` with windows and randomness enabled will not show +any difference – all windows will be mapped identically. However, when the +object moves across the map, the mapping will shift, but uniformly. + + + + +

One object

A composite of three objects

+ + + + +The randomness works, but it's flawed – everything remains too similar. To fix +this, you'll need to manually adjust the mapping for each window. The fewer +identical mapping positions, the more randomness you'll achieve. + +Adjust the mapping both vertically and horizontally. This can be done +procedurally with plugins; the key is to keep the mapping within the bounds of +texture "cells". + +```{note} +It's better to shift neighboring windows vertically rather than horizontally. +This improves the randomness effect. +``` + + + + +

One object

A composite of three objects

+ + + + +The difference might not be obvious here (the cubemap is too uniform), but +everything is randomly rotated on each section. Let's replace the cubemap for +better visibility. + + + + +#### Window as a Separate .dag, Placed by a Composite + +Although a different scenario, the solution remains the same. + +In the previous case, enabled randomness on standard mapping worked in a grouped +manner – all windows changed mapping simultaneously when the object moved (since +the windows were part of one large `.dag`). In this case, the same thing +happens, but with individual windows. The windows are more frequently placed and +mapped. (Let's set a cubemap with curtains in advance to better see the +difference.) + + + + +

One object

A composite of three objects

+ + + + +Notice that the windows have identical randomness with identical shifts relative +to zero (center window at the bottom). (Exception: the middle left window – +because of some "magic"). + +To avoid this situation, you can: + +- Either set the randomness value to a different **odd** number (it doesn't work + well with even numbers). For example, set it to `3` (`script:t="tile=1, 1, 3, + 0"`): + + + +
+ +- Or shift the window mapping (which I find works better). + + + + + diff --git a/_sources/assets/shaders/rendinst_layered.md.txt b/_sources/assets/shaders/rendinst_layered.md.txt new file mode 100644 index 000000000..4f5d77173 --- /dev/null +++ b/_sources/assets/shaders/rendinst_layered.md.txt @@ -0,0 +1,1428 @@ +# Shader: rendinst_layered + +## Overview + +This shader is used for objects where we want to apply multiple material +textures (e.g., brick and stucco tiles that are stored in different textures). + +It can work with both tiles and unique textures. However, its primary purpose is +for using tiles – it allows objects to be created without visible tiling, +without the need for unique textures. + +The shader uses the following types of textures: + +- **UV1**: Global normal map – the normal map for the entire object. +- **UV3**: Details (detail textures) with normal maps and speculars – 2 tiling + material textures. +- **UV2**: Overlay map – applies effects of leaks/wear and tear to the + unwrapped parts of objects, over the detail textures (tiles). +- **UV2**: Exclusion mask – globally indicates where certain materials should + appear on the object. +- **UV2**: Blending mask – allows to randomize the blending of detail textures + with the exclusion mask across the model, resulting in diverse appearances of + the object using the same textures. + +Let's take a closer look. + +## Textures Used + +### Texture Assignment + +For more details, see [here](./rendinst_layered.md#texture-assignment-1). + +### Global Normal Map + +This is straightforward. For most simple objects (fences, bollards, sometimes +houses), a standard normal map from our libraries is used. For more complex +objects, unique normal maps are created. + +Their main purpose is to smooth out edges and chamfers. Since the objects +themselves will be covered with material tiles (which contain their own normal +maps), it's important to achieve smoothing on the global normal map for those +aspects that the tile normal maps cannot smooth out. + +```{important} +Do not create the texture details of the object's materials on this texture. +Only smooth out seams, worn edges, etc. +``` + + + + +

Without a global normal map

With a normal map showing chamfers

+ + + + +The global normal map uses **UV1**. No other texture uses this UV channel. + +### Detail Textures (Details) + +Let's illustrate the concept using a brick house covered with stucco. + +**There are always two details!** + +- **Detail1** represents the material the object is made of. For instance, if + the house wall is made of bricks, then Detail1 would be bricks. +- **Detail2** represents the material covering the object (such as moss on a + tree or dirt on a cobblestone). For the house wall covered in stucco, Detail2 + would be the stucco. + +In this example, we use `modern_brick_brown_dirt_d.tif` and +`stucco_new_d.tif`, along with their respective normal maps, which contain +corresponding specular maps in their alpha channels. + + + + +

1st map - Dirty Brickwork

2nd map - Fresh Stucco

+ + + + +In general, the process is straightforward, with one exception – we need to +blend these textures automatically on the model. To achieve this, we use the +alpha channel of the diffuse maps, which contains heightmaps: the lighter the +pixel, the "heavier" it is. The material with the higher heightmap at any given +point will dominate in that texel. + + + + +By blending these two heightmaps in the shader, we achieve a non-uniform texture +appearance: in some areas, the brickwork is visible because its heightmap is +higher, while in others, the stucco dominates. For example: + + + +
+ +What happens if we modify these heightmaps? Suppose we want the stucco to cover +the entire brick surface completely. To do this, we need to eliminate all the +light pixels in the brick's heightmap, as these are the areas where the brick +shows through the stucco. + + + + +

Making the heightmap entirely black:

Results in:

+ + + + +```{important} +Of course, this approach isn't advisable – this was merely a demonstration of +how heightmaps work. These maps are essential for creating a seamless, +non-repeating overlay of stucco on top of the bricks. +``` + +**Details use UV3 mapping**, typically mapped using a 3x3x3 meter box without +packing. + +```{important} +Ensure that the geometry does not exceed 7 tiles in the UV layout; otherwise, +artifacts may appear on consoles. +``` + +### Overlay Map + +The texture is named "overlay" because the shader applies it to the object using +a method similar to the "overlay" blend mode in Photoshop – `multiply2X`. + +The purpose of the overlay is to give the object a "lived-in" appearance: +stains, cracks, dirt, soot, etc. + + + + +

Here is our house without the overlay (technically with a 50% gray overlay – completely disabling it would prevent the shader from functioning). We can see only the brick and stucco – the object looks plasticky:

And here's the house with the overlay applied:

+ + + + +### Universal Overlay + +For this demonstration, we used a universal overlay – +`buildings_overlay_tex_d.tif`, which we apply to our houses and simpler +structures like fences. It looks like this: + + + +
+ +Conceptually, it's divided into 16 cells (with indices starting from 0, not 1): + + + +
+ +- **Cells 0-1** are used to decorate the building's interior materials (walls + with wallpaper/stucco). + + ```{note} + As shown, these two cells contain four smaller cells each – ensure that the + seams between these cells do not fall on a flat surface, or else a distinct + vertical line will appear on the model! For example: + ``` + + + +
+ +- **Cell 2** is used to decorate wooden roof trim, similar to this: + + + +
+ + It should be mapped as follows: + - Either using a horizontal plane of 55x55 meters. Vertical supports should + be mapped separately in the vertical plane; + - Or using box and flatten mapping. + +- **Cells 3, 6, 7** are currently unused. +- **Cells 4-5** are used to decorate roofs: + - **Cell 4** is for sloped roofs; + - **Cell 5** is for flat roofs. +- **Cells 8-15** are used to decorate the building's exterior. + +In the example above, **cell 11** was used. Here's how it works: + + + +
+ +```{important} +All external surfaces of the building, except for the roof, should only be +mapped to **cell 8**. The shader will automatically shift the mapping to cells +**9-15**. More on this in the shader settings. +``` + +```{note} +In the early stages of *War Thunder*'s development, universal overlays were +widely used. However, as the project evolved, we transitioned to unique +overlays. Consequently, the content of this section is now outdated. Despite +this, universal overlays can still be employed, though they are better suited +for smaller objects rather than larger structures like buildings. +``` + +### Unique Overlay + +The universal overlay was designed to automate visual variety in objects – by +creating one house, you can give it up to eight different appearances without +any additional work. However, this map is not suitable for unique objects, as it +cannot emphasize the distinctive features that make an object more "alive". + +Let's look at an example of a unique overlay: + + + +
+ +As you can see, the entire texture is dedicated to a unique UV layout, +reflecting soot marks on walls at bullet impact sites, rotting wood (small +details), moss-covered foundations, etc. + +It was created for a partially ruined church: + + + +
+ +### Exclusion Mask + +This texture resides in the alpha channel of the overlay map and therefore uses +the same UV2. Let's examine it using the universal overlay's alpha channel as an +example. + + + +
+ +This is a black-and-white mask. It defines the global areas on the model where +we want to preserve only the first detail or only the second. + +- **Black pixels** – only the first detail will remain. +- **White pixels** – only the second detail will remain. +- **Intermediate grayscale values** – adjust the global heightmaps of the two + details. + +Why is this necessary? Let's see how the details mix with a 50% gray exclusion +mask. (For clarity, we'll set the overlay to the same 50% gray so it doesn't +interfere with the detail mixing.) + + + +
+ +Several issues are apparent: + +1. The tiling pattern is fully readable. Even after applying the overlay, this + might not be corrected, as the overlay cells (when using the universal + overlay) have varying levels of "dirtiness." For example, using **cell 8** + produces the following result: + + + +
+ +It's clear that the tiling is still visible. + +2. Detail2 (stucco) blends with Detail1 (bricks) uniformly and boringly across + the entire wall area. This can be somewhat improved by using a dirtier + overlay. For example, let's try **cell 11**: + + + +
+ +Yes, it looks better. However, problem 1 remains – the cells are used +automatically, and the mapping will inevitably shift to a less detailed cell. + +The exclusion mask is designed to address these specific issues. It globally +overrides the heightmaps of the details across the entire object mapped to it, +causing the blending to be rough and uneven. This helps hide the tiling (it's +hard to notice when Detail2 covers different parts of Detail1) and eliminates +uniform blending. + +Let's switch the exclusion mask from gray to the original. + + + +
+ +The result is clear – both issues are resolved. However, **cell 8** is rather +sparse for both the overlay and the exclusion mask. + + + +
+ +Let's see what happens if we shift the UV2 mapping to **cell 11**. In the +screenshots above, it worked with a gray exclusion mask. Now let's see its full +effect. + + + +
+ + + +
+ +There is no visible tiling. The details blend randomly. The overlay adds even +more detail. + +The more varied the exclusion mask, the smoother the detail +blending. The more gradients and fewer sharp transitions it contains, the +smoother the boundaries between details. + +```{important} +In summary, the exclusion mask controls where Detail1 (the object's base +material) is visible – where its pixels are black–and where Detail2 (the +object's covering) appears – where its pixels are white. + +Where the pixels are gray, the details blend based on their heightmaps, taking +into account the "grayness" of the exclusion mask: + +- If the mask is 50% gray, only the heightmaps are used. +- If it is darker than 50%, the heightmap of Detail1 is stronger. +- If it is lighter than 50%, the heightmap of Detail2 takes precedence. +``` + +### Blending Mask + +#### How It Works + +The blending mask is the final texture we utilize. Let's examine it using the +example of the `brick_stucco_m.tif` texture, which was applied to the house we +discussed earlier. + + + +
+ +**What does it do?** Essentially, it performs the same function as the exclusion +mask: + +- Black areas reveal Detail1. +- White areas reveal Detail2. +- Gray areas blend the two details based on their heightmaps and the gray value + of the blending mask. + +Let's recall how the house looked without a blending mask (in the earlier +screenshots, it was filled with 50% gray). + + + +
+ +Now, let's see how the house appears with the `brick_stucco_m.tif` blending +mask applied. + + + +
+ +The difference is subtle – the exclusion mask creates a more noticeable change. +This is because, on UV2, our house occupies a single cell, which is quite +insignificant in the context of the blending mask. + + + +
+ +So, why do we need a blending mask that seemingly duplicates the exclusion mask, +but with less impact? + +There are four key points to understand: + +1. In reality, details are not blended solely by the exclusion mask. +2. Similarly, details are not blended solely by the blending mask. +3. The exclusion mask and blending mask are combined to create the final global + blending mask, which dictates how the details are blended. + + ```{note} + These masks are combined using standard multiplication (not *Photoshop*'s + Multiply mode). + ``` +4. Our `rendinst_layered` shader randomly offsets the blending mask (the local + one we're discussing) based on the position of the house on the map. + +To summarize in simpler terms: + +1. Place the house on the map, for instance, at the center. +2. The blending mask and exclusion mask combine to form the global blending + mask. + - Black areas reveal Detail1. + - White areas reveal Detail2. + - Intermediate gray values influence the blending of details based on their + heightmaps. +3. Move the house slightly, and the blending mask and exclusion mask are + multiplied again, creating a new global blending mask and altering how the + details blend. + +Here's how it looks in practice: + + + +
+ +Each movement triggers a reassembly of the global blending mask via multiplying +the exclusion mask and the local blending mask, which results in the same object +having a different appearance as it is repositioned. + +This is the core function of the blending mask. We cannot offset the exclusion +mask since it contains a unique mapping of detail blending (even within the +cells). The blending mask is designed precisely for this purpose. + +#### Specifics of Using the Blending Mask + +We used the `brick_stucco_m.tif` as our example. The name itself indicates that +it represents stucco over brick, meaning it's intended for a specific type of +detail blending – Detail2 (stucco) is layered over Detail1 (brick) with clear +boundaries. + +Let's look at a real brick house with stucco, such as this one: + + + +
+ +The concept becomes clear – stucco peels off in sheets, revealing the underlying +wall material. + +How did we achieve this effect on our house? The current blending mask has sharp +transitions between black and white, with almost no gradients. This means we +either see the brick (black areas) or the stucco (white areas). + +But what if we want to create a stone wall with moss growing between the stones? +We'd use a stone texture (`medieval_brick_d.tif`) and a moss texture +(`moss_different_d.tif`). Let's examine these textures and their heightmaps. + +1. **Stone Masonry**: Its heightmap clearly indicates that any Detail2 should + only appear between the stones. Recall that the heightmap function – the + lighter the area, the stronger the effect. + + + +
+ +2. **Moss**: Its heightmap suggests that it doesn't matter where it grows. It's + uniformly gray, meaning it will be overpowered by almost any other detail's + heightmap. + + + +
+ +Let's see how these details blend with the current blending mask. Remember, the +moss heightmap will likely be overridden by the stone heightmap, so the moss +should only appear between the stones – exactly what we want. + +However, what we get is moss applied over the entire wall surface. + + + +
+ +**Why did this happen?** + +Because our blending mask is unsuitable. As stated earlier: + +- "What does the blending mask do? It functions exactly like the exclusion mask. + Black areas reveal Detail1, white areas reveal Detail2, and gray areas blend + the two details according to their heightmaps and the gray value of the + blending mask." +- "The current blending mask has sharp transitions between black and white, with + almost no gradients. This means we either see the brick (black) or the stucco + (white)." + +Our `brick_stucco_m.tif` blending mask has overridden the detail heightmaps and +distributed them as it saw fit. + +**What to do in such cases?** Change the blending mask. + +The approach is straightforward: + +- Ensure that the detail heightmaps are not overridden. +- Detail heightmaps are not overridden by gray. +- We need smooth transitions between the details. + +**Conclusion**: We need a blending mask with lots of gray and few sharp +boundaries – everything should be gradient-based. + +Let's try `gypsum_m.tif`. It's not a perfect mask, but it's better than the +previous one. We can see that it contains a lot of gray, with minimal +black/white areas and many gradients. There are some patches, but they're small +and sparse. + + + +
+ +Now, let's see how it performs. + + + +
+ +The moss remains in some places, but mostly it has receded to the gaps between +the stones. The remaining local patches can be removed if needed, but that would +require additional methods. + +Remember that these masks will be multiplied, and the final appearance will +continue to evolve: + + + +
+ +### Conclusion + +A concise summary of how the shader uses textures: + +1. Two details are blended based on their heightmaps (through alpha test). + +2. The exclusion and blending masks combine to create the final global blending + mask for detail blending (using standard multiplication, not *Photoshop*'s + Multiply mode). + + This raises a question: Why not blend the details directly using this mask? + Why do we need detail heightmaps as well? + + Because the blending mask has a large texel size, blending directly would + result in blurry textures. Using the detail heightmaps allows for a sharper + blend. + +3. When the heightmaps are combined with the blended masks, the result is that + within the large texel of the global blending mask (which covers the entire + building), several smaller texels of the local blending mask are nested. + These smaller texels are where the detail heightmaps interact. This process + ensures that the image remains sharp, as the local blending mask allows for + finer detail within each texel of the global mask. + +4. Next, a normal map and an overlay map are applied on top of the blended + details. These maps add texture and additional detail to the surface, + enhancing the visual complexity of the material. + +5. Finally, when the object using this shader is repositioned, the blending mask + is offset. This offsetting causes the global blending mask to change, which + in turn alters how the details are mixed. As a result, the object's + appearance shifts as the blending of the details adjusts to the new position. + +### Shader Setup + +#### General Shader Parameters + +When setting up the shader, the initial view displays the basic parameters, +which can be further expanded for customization. + + + +
+ +**Two key points to note:** + +1. The shader is part of the **Dagor Material 2** set. + + + +
+ +2. The **Add** button allows access to additional parameters. + + + +
+ +#### Texture Assignment + +Textures are assigned to slots in the following order: + +- Slot 1 – Overlay +- Slot 2 – Blending Mask +- Slot 3 – Normal Map +- Slot 4 – Detail1 Diffuse +- Slot 5 – Detail1 Normal Map +- Slot 6 – Detail2 Diffuse +- Slot 7 – Detail2 Normal Map + +#### Shader Parameters + +The shader offers a range of parameters for customization: + +- `atlas_first_tile`/`atlas_last_tile`/`atlas_tile_u`/`atlas_tile_v`: Group of + parameters that manages the offset of uv-mapping on the universal overlay. +- `detail_tile_u/v`: Controls the tiling of details. +- `detail_scroll_u/v`: Adjusts the scrolling of details. +- `mask_gamma_start/end`: Configures the transparency of Detail1 through + Detail2. +- `mask_tile_u/v`: Controls the tiling of the blending mask. +- `mask_scroll_u/v`: Adjusts the scrolling of the blending mask. +- `draw_grass`: Enables grass growth on the object. +- `detail2_colored`: Allows to colorize Detail2 in the *Dagor Editor* tool (an + outdated feature rarely used). +- `top_projection`: Group of parameters that allows to project Detail2 above the + Detail1 using global and local normals. +- `top_projection_from` +- `top_projection_to` +- `top_projection_detail2_modulate` +- `use_painting`: Group of parameters used for colorizing of details. +- `painting_line` +- `paint1stdetail` +- `detail2_combined_normal`: Blends details' normal maps. +- `micro_detail_layer1`: Group of parameters for microdetails. +- `micro_detail_layer2` +- `micro_detail_layer1_uv_scale` +- `micro_detail_layer2_uv_scale` +- `material_shadow_influence`: Controls shadow strength from the details. +- `material_shadow_scale`: Adjusts the shadow size from the details. + +#### Offset of UV-mapping on the Universal Overlay + +To use the universal overlay effectively, remember the rule stated earlier: + +```{important} +All exterior surfaces of the building, except the roof, should be mapped to +**cell 8**. The shader will automatically shift the mapping across **cells +9-15**. +``` + +The shader and universal overlay/mask are designed to automate content +variation. By mapping the exterior of the building to **cell 8**, the shader +will automatically shift the mapping to other cells, creating varied appearances +without manual intervention. + +For example, if the walls and exterior parts of the house are mapped to **cell +8**: + + + +
+ +The shader will automatically shift the mapping to **cell 9**: + + + +
+ +However, this automatic shifting requires specific parameters to be set. The +universal overlay cells are as follows: + + + +- **cells 0-1**: For internal materials (walls with wallpaper/stucco). +- **cell 2**: For decorative wooden roof elements. +- **cells 3, 6, 7**: Currently unused. +- **cells 4-5**: For roof decoration: **cell 4** for sloped roofs, **cell 5** + for flat roofs. +- **cells 8-15**: For decorating external parts of buildings. + +
+ +To enable the shader to recognize and use these cells, the following parameters +must be set: + +- `atlas_first_tile`: Start cell number for the mapping jump (usually **cell + 8**). +- `atlas_last_tile`: End cell number for the mapping jump (usually **cell 15**). +- `atlas_tile_u`: Horizontal jump size in fractions of the texture width (e.g., + 0.5). +- `atlas_tile_v`: Vertical jump size in fractions of the texture height (e.g., + 0.125). + +For the universal overlay to work correctly, you need to add these parameters +using the **Add** button and set their values as follows: + +- `atlas_first_tile = 8` +- `atlas_last_tile = 15` +- `atlas_tile_u = 0.5` +- `atlas_tile_v = 0.125` + +If these parameters are not set, the overlay will not shift correctly: + + + +
+ +In some cases, you may want to limit the use of certain cells. For example, +wooden walls may not look good with stucco cracks and stains. + + + +
+ +In such cases, set `atlas_last_tile = 10` to limit the jump to **cells 8-10**, +which are more neutral: + + + +
+ +#### Detail Tiling Settings + +The tiling of details is controlled by the parameters: + +- `detail1/2_tile_u`: Adjusts the horizontal tiling of Detail1/2. +- `detail1/2_tile_v`: Adjusts the vertical tiling of Detail1/2. + +By default, if these parameters are not set, they are assumed to be `1`. + +These settings are useful when: + +- The texels of the detail textures do not match, or +- You want to adjust the display size of one detail relative to another. + +Here's an example of a house corner with the brick detail tiling set to `1` and +the stucco detail tiling set to `0.5`: + + + +
+ +The stucco appears blurry because its texel size is twice as large as the brick. +Comparing the textures: + + + + +

Modern Brick Brown Dirt (1024x1024)

Stucco New (512x512)

+ + + + +Increasing the stucco tile by 2x for both axes corrects this: + + + +
+ +However, you might want a more refined stucco finish without large, clear holes. +Setting the stucco tile to `2.54` achieves this: + + + +
+ +The result is a house with a more refined stucco texture. However, be cautious, +as extreme mismatches in texel sizes can lead to visual inconsistencies, +particularly on less detailed surfaces like roofs. + +For instance, moss with a tile of `5.35` on a roof with a tile of 1 shows a +noticeable mismatch: + + + +
+ +To avoid such issues, always check texture sizes and the final result, ensuring +there's no visible mismatch. + +```{important} +It's better to use non-integer tiling parameters (e.g., `1.54` instead of `1.5`, +`2.35` instead of `2`). This reduces the visibility of the tiling pattern. +``` + +#### Disabling Tiling (detail1/2_scroll_u=-1) + +```{important} +Use just `detail1/2_scroll_u` to disable detail scaling. Don't use `scroll_v`, +because it's incorrect and leads to visual bugs. +``` + +When scaling an object, tiling is often automatically applied based on the +object's size, which can cause unwanted effects on unique UV mappings. For +instance, scaling a stone object 100 times can make the details tile 100 times +more frequent. + +**Example:** + + + + +

100% scale

1000% scale

+ + + + +The technology is useful, because it saves us texel when scaling objects. +However, a problem arises when we use such a shader on objects with unique UV. +For example, we take a bunch of tires and make them “dusty”. Detail1 mapping is +scaled when we scale the model of tires. But uv-mapping for this model is unique +- we get visual bug. + +**Example:** + + + + +

100% scale:

200% scale:

+ + + + +To prevent this, set `detail1_scroll_u=-1` to disable tiling for a specific +detail when scaling is not desired. + + + +

200% scale with detail1_scroll_u=-1

+ + + +
+ +### Configuring Detail Offset + +Control the horizontal and vertical offsets of details using: +- `detail1/2_scroll_u` – Horizontal offset. +- `detail1/2_scroll_v` – Vertical offset. + +Default values are `1`. Use these settings when precise alignment of details is +necessary, such as aligning bricks in a wall section. + + + +
+ + + +
+ + + +
+ +To do this, we set the brick parameters `detail1_scroll_u` and +`detail1_scroll_v` to 0. What happens if we don't set these parameters? For +example, `detail1_scroll_u`: + + + +
+ +We ended up with horizontal shifts in the texture, resulting in uneven seams: in +some places, the bricks vary in thickness, while in others, they appear +unusually short. + +It's easy to imagine what happens if `detail1_scroll_v=0` is not set – complete +misalignment of the fence edges." + + + +
+ +```{important} +Don't set these parameters without a good reason. They limit the number of +variations you can achieve with your objects, so only use them when absolutely +necessary. +``` + +### Configuring of Details Blending + +Details are blended with the final blending mask, that represents a result of +combining of several masks (details' heightmaps, exclusion mask, blending mask). + +We can modify this final blending mask by raising it to the needed power - we +call it Gamma. + +There're 2 parameters: + +- `mask_gamma_start` – smallest needed gamma value. +- `mask_gamma_end` – largest needed gamma value. + +We specify them both and `Dagor` chooses final gamma value between them +randomly. Our final blending mask is raised to the power of this gamma value. + +Imagine final blending mask as a set of values – not colors. Black is `0`. White +is `1`. Nearly white is, for instance, `0.95`. + +Raise `0.95` to the power of `2` and you'll get `0.9`. But raise `0.95` to the +power of `0.2` and you'll get `0.9898`. + +It means that the smaller gamma values you specify – the brighter final blending +mask you get. And more of Detail2 will be seen. + +On the contrary the larger gamma values you specify – the darker final blending +mask you get. And more of detail1 will be seen. + +For instance, we want to reduce the visibility of the stucco on this house. + + + +
+ +We assign the blend mask `gypsum_m` as it is the most "gentle" and gray, and we +get the following result: + + + +
+ +This is not sufficient. Let's set the following parameter values: + +- `mask_gamma_start = 4` +- `mask_gamma_end = 8` + + + +
+ +### Configuring Blend Mask Tiling + +This is controlled by the following parameters: + +- `mask_tile_u` – horizontal tiling of the blend mask; +- `mask_tile_v` – vertical tiling of the blend mask. + +If these parameters are not set, they default to `1`. + +These parameters are usually needed to add variety to the appearance of an +object. For example, here is our fence with the `gypsum_m` mask tiling set to +`1`. + + + +
+ +We want to reduce the size of the moss patches but increase their frequency. +Let's set the mask tiling to `8.75`. + + + +
+ +Unlike detail textures, the blend mask can be tiled non-proportionally. For +instance, we can keep the vertical tiling at `1` while setting the horizontal +tiling to `8.75`. + + + +
+ +There will be no stretching of textures – we've simply created narrower and +taller blend areas, as the mask tiles nearly 9 times more frequently +horizontally than vertically. This technique can be useful when you need to +create "leaks" using the Detail2 layer. + +### Configuring Blend Mask Offset + +This is controlled by the following parameters: + +- `mask_scroll_u` – horizontal offset of the mask; +- `mask_scroll_v` – vertical offset of the mask. + +By default (when not added to the material), these values are set to `1`. + +In the shader textures documentation, we mentioned that the blend mask offsets +each time the object's position in space changes. Let's revisit how this looks +with the overlay removed: + + + +
+ +These parameters increase the offset value, allowing for more varied blending of +detail layers. Let's set these values to `0.5`. + + + +
+ +As you can see, the changes between blends became + +- sometimes more visible, +- sometimes less visible. + +This is because the offsets of our blend mask became smaller. And uv-mapping +stays more time on areas that it used to jump over with offset=1. + +We rarely use this parameter, because it's much easier to random blending change +with more varied blending mask. + +```{important} +If you need to disable blend mask jumps, use the parameter `mask_tile_u=-1`. +Not the scroll, but the tiling, specifically `mask_tile_u` set to `-1`. +``` + +### Growing Grass on an Object + +If you need to "grow" grass on a rendinst geometry, set the `draw_grass` +parameter in its material to a value of `1`. It's important to apply this on a +nearly horizontal surface to prevent grass from growing on walls. + +### Coloring the Detail2 in the daEditor (Deprecated) + +In the initial version of the coloring process, the color range was specified +directly in the [*daEditor*](../../dagor-tools/daeditor/daeditor/daeditor.md). +Only the Detail2 (the "upper" one) was colored, using a simple multiply +operation. This required careful selection of colors to avoid over-saturation. + +The process was as follows: + +1. The parameter `detail2_colored` was set to `1`. +2. In the *daEditor*, a color gradient was applied set in the **Properties**▸ + **Textures**▸**Rendinst 2-nd detail color** section. + + + + +### Top Projection - Projecting the Detail2 using Local and Global Normals + +There are scenarios where you need to add snow, sand, or moss to an object. For +this, the `top_projection` feature is used. It projects the Detail2 layer on top +of the Detail1 at a specified angle. For instance, on a stone surface, you can +project snow on top of the stone detail. + +The parameters for this feature are: + +- `top_projection` – 0/1 (off/on); +- `top_projection_from` – the angle at which the projected detail starts to + appear (at a minimal amount); +- `top_projection_to` – the angle at which the projected detail fully covers the + object; +- `top_projection_detail2_modulate` – the intensity of the projection's effect + on the Detail2 layer. + +The function takes into account all normals: + +1. Global geometry normals. +2. Global normal map normals. +3. Local detail layer normals. + +The function also takes into consideration the masks: + +1. Exclusion mask (overlay alpha) – if set to black, the Detail2 layer + will not appear. +2. Blend mask. +3. However, it does NOT take into account the heightmap of the Detail1 layer, + as it could be very bright (e.g., stucco). If it were considered, projection + would be difficult. + +This is a procedural function – rotate the object as you like, and the Detail2 +layer will cover it according to the specified rules, from the appropriate side. + + + +
+ +Let's examine how these parameters work. + +### top_projection + +This parameter has values `0` and `1` (off/on). + +#### top_projection_from + +Specifies the angle at which the projected detail begins to appear (at a minimal +amount). The angle is specified not in degrees but in the sine of the angle. For +example, if you want the snow to start at 45 degrees, take sin(45) = 0.7 and +enter `0.7` as the value. + + + + +

Parameter value = 0.7

Parameter value = 0.1

+ + + + +#### top_projection_to + +Specifies the angle at which the projected detail fully covers the object. +Again, this is specified in the sine of the angle. The difference is less +noticeable than with the starting parameter – it's more apparent on flatter +objects than on steep ones. + + + + +

Parameter value = 0.5

Parameter value = 1

+ + + + +#### top_projection_detail2_modulate + +Specifies the intensity of the overlay's effect on the second detail layer. If +you want pure white snow, set the value to `0`. If you want it to appear dirtier, +increase the parameter up to `1`. + + + + +

Parameter value = 0.2

Parameter value = 1

+ + + + +In this example, the difference is not very noticeable because the overlay +itself is grayish. + +### Blending with Landscape Heightmap + +To improve the visual integration of objects with the landscape, you can use +special parameters that allow detail layers of terrain and assets to blend based +on the intersection mask of the asset with the heightmap. This is particularly +useful for piles, rocks, cliffs, and similar objects. + +```{important} +This is a computationally expensive technique, so use it sparingly. +``` + +**Examples:** + + + + +

Without blend

With blend

+ + + + +Blending parameters: + +- `enable_hmap_blend=1` (default: `0`) – Enables/disables heightmap blending. +- `hmap_blend_height=0.1` (default: `0.1`) – Height of the blending. +- `ri_hmap_min_blend_angle=40` – Angle where landscape blending starts to fade + out. (90 degrees is upward). +- `ri_hmap_max_blend_angle=50` – Angle where landscape blending completely fades + out. (90 degrees is upward). +- `ri_hmap_blend_angle_vertex_normal_amount=0.75` – Floating value between texel + (0) or vertex (1) normals as dominant for the blend mask. The higher the + vertex normal dominance, the lower the chance of the projection appearing on + triangles with a vertical normal, even if the texel normal is directed upward. +- `ri_hmap_blend_check_holes=1` – Cuts the blend band at the intersection with + heightmap holes created using `ground_hole:gameobj`. This parameter should be + added **only** for rocks (or other objects that intersect between the + heightmap and underground space), as unnecessary checks can significantly + impact performance. + +GPU objects and grass now correctly generate on objects with Heightmap Blending. + +#### Global Shader Variables + +These are shader parameters initialized in `gamedata/.../scene.blk2` within the +`shader_vars__vars:object` block: + +- `ri_hmap_blend_sharpness=8.0` (default: `8.0`) – The higher the value, the + sharper the blend boundary. +- `ri_hmap_perlin_tex_scale=0.25` (default: `0.25`) – Perlin noise tiling + multiplier. +- `ri_hmap_min_height=0.5` (default: `0.5`) – Minimum blend height, overriding + the shader parameter if necessary. + +**Examples:** + + + + + +

ri_hmap_blend_sharpness=2

ri_hmap_blend_sharpness=4

ri_hmap_blend_sharpness=8

+ + + + + + + + + +

ri_hmap_perlin_tex_scale=0.01

ri_hmap_perlin_tex_scale=0.25

ri_hmap_perlin_tex_scale=4

+ + + + + + + + + +

ri_hmap_min_height=0.1

ri_hmap_min_height=0.5

ri_hmap_min_height=3

+ + + + + +#### Static Shader Variables + +These are additional shader parameters that adjust the influence of global +shader variables for a specific asset: + +- `ri_hmap_blend_sharpness_mul=1.0` – Multiplier for `ri_hmap_blend_sharpness`. +- `ri_hmap_perlin_tex_scale_mul=1.0` – Multiplier for + `ri_hmap_perlin_tex_scale`. +- `ri_hmap_min_height_mul=1.0` – Multiplier for `ri_hmap_min_height`. + +```{note} + **Global and Static Shader Variables for ri_hmap** + + 1. Global shader variables affect all assets on the level with initialized + blending. + 2. If global shader variables are not initialized in `scene.blk`, the default + values listed above are applied. + 3. Static shader variables are multipliers of the global shader variables, + initialized in `scene.blk`, for a specific asset. + + For example, if the global shader variable is set to: + + `ri_hmap_blend_sharpness=8.0` + + and the static shader variable for the asset `example.dag` is: + + `ri_hmap_blend_sharpness_mul=0.5` + + then the final `blend_sharpness` value for the asset `example.dag` on the level + will be calculated as: + + `blend_sharpness = ri_hmap_blend_sharpness * ri_hmap_blend_sharpness_mul = 8.0 * 0.5 = 4` + + ```{important} + The heightmap blending shader also works in + [*daEditor*](../../dagor-tools/daeditor/daeditor/daeditor.md), but since global + shader variables for the editor are initialized separately and not pulled from + `scene.blk`, keep in mind that if you choose global shader variable values in + `scene.blk` that differ from the defaults, the editor will display something + different from what you'll see in the game. + + Instructions on how to configure global shader variables for the editor will be + added to the article later. + ``` + +``` +### Procedural Detail Layer Coloring + +You can procedurally color any detail layer (only one at a time) using a +palette. + +The palette is called `paint_colors.dds` and is located at +`...\develop\assets\textures\colorize_textures`. + + + +
+ +It consists of a set of single-pixel rows, each containing between 1 and 64 +colors. In the coloring parameters, you specify a particular row for a specific +object (from 0 to the last row in the texture). As the object moves across the +map, each step will randomly shift the pixel within the selected coloring row. +If multiple colors are specified, the object will be procedurally recolored. + + + +
+ +The coloring is applied based on the diffuse alpha (either the heightmap of the +detail layer or simply a coloring mask for a unique texture). + +**Shader parameters:** + +- `use_painting` – Controls whether to color detail layers from the palette + defined in the scene's shader variables. + - `1` – color, + - `0` – don't color; + - values between `0.(01)` and `0.(9)` – partial coloring (multiplier). + + Coloring is based on the diffuse alpha, multiplied by the `use_painting` + value. Values between `1.(0)1` and `1.(9)` also affect the coloring strength + from 0.0 to 1.0 but disable random pixel selection from the coloring row when + the object changes height – useful for consistently coloring modular + skyscrapers, for example. +- `painting_line` – The coloring row (from 0 to the last row in the texture). +- `paint1stdetail` – Default value is `1` (colors the first detail layer). If + you need to color the Detail2 layer, set the value to `-1`. + +### Normal Blending + +There are situations where you need to reveal the underlying texture of the +Detail1 layer (such as metal texture) through the Detail2 layer (such as paint). +This is achieved using the `detail2_combined_normal` parameter, which has two +possible values: `0` (disabled) or `1` (enabled). + + + + +

Parameter value = 1

Parameter value = 0

+ + + + +### Microdetails + +```{seealso} +For information on microdetails, see +[Microdetails on Assets](../about-assets/microdetails/microdetails.md). +``` + +### Material Shadows + +Material shadows are generated based on the heightmap of detail layers. The +following parameters are available: + +- `material_shadow_influence=0.5, 1, 0, 0` – Controls the "intensity" of + shadows. Each component affects the corresponding detail layer. For instance, + `0.5` affects the Detail1 layer, and `1` affects the Detail2 layer. The third + and fourth components are not used in the `rendinst_layered` shader since it + only supports two detail layers. However, in the `rendinst_perlin_layered` + shader, the first three components are used, as it supports three detail + layers. + +- `material_shadow_scale=2` – Acts as a multiplier for the "size" of the + shadows. This applies to the shadows of all detail layers, as calculating it + separately for each layer would be computationally expensive. + +**Example:** + + + +
+ +## Shader Configuration Errors + +This occurs when you forget to set all the necessary values. For example, you +might add the parameter `detail2_tile_u=2.54` but forget to include +`detail2_tile_v=2.54`. + + + +
+ +At first glance, this might seem insignificant (and this is often where the +inspection ends, unfortunately). However, upon closer examination: + + + +
+ +Such subtle issues are common and often go unnoticed until you closely inspect +the settings. Sometimes, for instance, values like `detail2_tile_u=2.3` and +`detail2_tile_v=2.4` are set, which only becomes noticeable upon careful +examination. + +#### Sloped Roof + +Let's recall what a sloped roof tile looks like and how it reflects details: + + + +
+ +Remember that each overlay tile contains a specifically designed blending mask. + + + +
+ +Here's how this mask works with a house roof: + + + +
+ +What happens if we leave the tiling parameters on the roof material? + +First, the roof will never land on the correct roof cell because +`atlas_first_tile = 8`. Second, you'll end up with completely arbitrary overlays +and blending. + +For example: + + + +
+ +As you can see, the logic of material blending on the roof is completely lost. +The materials blend across the entire surface as if they were on walls, not a +roof. Now, let's see how the overlay appears on the roof. + + + +
+ +The result is completely abstract decorations, which have nothing to do with the +intended metal sheets of the roof. This is precisely why the roof cell was +designed to be universal and neutral. + +#### Flat Roof + +Let's recall how the flat roof cell looks and what it represents: + + + +
+ +Here's its exclusion mask: + + + +
+ +In this case, there's no need to show examples of incorrect atlas usage because +there simply aren't any other cells that can fulfill the same function. + +#### Wooden Roof Trim + +Recall that the wooden trim has its own designated - **cell 2**: + + + +
+ +When mapped correctly, the wooden planks look like this (Detail2 shows charred +wood): + + + +
+ +What happens when you apply overlay tiling parameters here? + +The mapping jumps to **cell 8**, and instead of smooth blending and a bronzed +appearance, you get these bright planks smeared with tar: + + + +
+ + diff --git a/_sources/assets/shaders/rendinst_layered_family.md.txt b/_sources/assets/shaders/rendinst_layered_family.md.txt new file mode 100644 index 000000000..114aa4295 --- /dev/null +++ b/_sources/assets/shaders/rendinst_layered_family.md.txt @@ -0,0 +1,164 @@ +# Shader Family: rendinst_layered + +## Overview + +As of writing, the `rendinst_layered` family includes four shaders: + +- [`rendinst_layered`](#rendinst_layered): The foundational shader of the + family. +- [`dynamic_layered`](#dynamic_layered): A dynamic version designed for destrs. +- [`rendinst_layered_atest`](#rendinst_layered_atest): A version that + supports alpha test for detail textures. +- [`rendinst_layered_hmap_blend`](#rendinst_layered_hmap_blend): A version + that includes heightmap blending functionality. + +Let's examine the parameters for each shader. + +## rendinst_layered + +```{seealso} +For more information, see [rendinst_layered](rendinst_layered.md) shader. +``` + +## dynamic_layered + +This shader functions similarly to `rendinst_layered`, but it is optimized for +dynamic objects (destrs). + +## rendinst_layered_atest + +This version supports alpha test for one or both detail textures. + +### Parameters + +- `blended_atest`: 0/1 (disabled/enabled) +- `detail1_atest_weight`: Alpha test level for the first detail texture + (default: 127) +- `detail2_atest_weight`: Alpha test level for the second detail texture + (default: 127) + +## rendinst_layered_lightmap + +This is the standard `rendinst_layered` shader with added support for emissive +maps. + +```{seealso} +For more information, see +[rendinst_layered_lightmap](rendinst_layered_lightmap.md) shader. +``` + +## rendinst_layered_hmap_blend + +This version introduces a heightmap blend feature that allows seamless +transitions between the model and the terrain. It also supports projecting a +clipmap using top-down projection onto the model. The clipmap is blended into +the material in two layers: the first blends from the ground up to a specified +height, and the second applies a Perlin noise mask on horizontal surfaces with +positive normals, also modifiable by distance from the ground. + +This shader is ideal for objects like rocks, cliffs, and debris piles that need +to blend into the terrain or hide seams with the ground. + +Below are screenshots illustrating the effect: + + + + +

Without heightmap blend

With heightmap blend

+ + + + + + + +

Without clipmap projection

With clipmap projection

+ + + + +### Parameters + +```{note} +The `hmp_blend_height` parameter is deprecated! If you encounter it, please +remove it. +``` + +- `land_blend_dist`: Specifies the height (in meters) for the first layer of + clipmap blending, from the ground up. Default is 0.3 meters if not specified. +- `land_perlin_height`: Specifies the maximum height (in meters) for the + second layer of clipmap projection, which uses Perlin noise and applies to + horizontal surfaces with positive normals. +- `land_perlin_scale`: Controls the scale of the Perlin noise. A lower value + results in coarser noise. Start with a value of 0.2 for tuning. +- `land_perlin_blend`: Defines the range (in meters) over which the Perlin + noise fades from 1 to 0, starting from the `land_blend_perlin_height` + parameter. For example, if `land_blend_perlin_height` is set to 20 meters and + you want the Perlin noise to begin fading 1 meter above the ground, set + `land_blend_perlin_blend` to 19. +- `land_blend_normal_start`: The normal value at which the clipmap + projection begins. Default is 1. A value greater than 1 reduces the opacity on + perfectly horizontal surfaces. +- `land_blend_normal_end`: The normal value at which the clipmap projection + ends. Default is 0.5. + +Below is an illustration showing how the Perlin noise strength gradient operates +from `land_blend_perlin_height` (upper bound) to `land_blend_perlin_blend` +(lower bound): + + + +
+ +### Salt Sediments + +The `rendinst_layered_hmap_blend` shader is often used on rocks and cliffs. It +includes a feature called Salt Sediments, which simulates effects like waterline +marks, rust, or algae growth. This effect is illustrated below: + + + +
+ +In the example above, the following texture was used: + + + +
+ +This texture has an alpha channel that controls transparency. It replaces the +combined albedo of the first detail texture and overlay. + +```{note} +It only affects the first detail texture. +``` + +In the example, the effect is visible on the stone, but the orange moss (the +second detail texture) remains unchanged. + +The texture is subtracted using the AlbedoAO of the overlay and stretches +infinitely downward below the water level. If this effect is unwanted, make the +bottom two lines of pixels in the texture fully transparent. + + + +
+ +**Parameters:** + +In `level.blk`, set the following: + +- `saltSedimentsStart:r=-0.25`: Starting height for the sediment effect. +- `saltSedimentsEnd:r=4`: Ending height for the sediment effect. +- `saltSedimentsTile:r=15`: Horizontal tiling scale for the texture, in + meters. +- `saltSedimentsTex:t="waterline_grdnt_a_tex_d"`: Name of the projected + texture. + +The shader also supports an optional command: + +- `script:t="salt_sediments_opacity=1"`: Controls the multiplier for the + texture's alpha channel. You can use other values, but it's generally + unnecessary. + + diff --git a/_sources/assets/shaders/rendinst_layered_lightmap.md.txt b/_sources/assets/shaders/rendinst_layered_lightmap.md.txt new file mode 100644 index 000000000..30871f44a --- /dev/null +++ b/_sources/assets/shaders/rendinst_layered_lightmap.md.txt @@ -0,0 +1,30 @@ +# Shader: rendinst_layered_lightmap + +## Overview + +This is a self-illumination shader designed for objects with blended detail +textures. + +It works exactly like [rendinst_layered](rendinst_layered.md) shader, but with +one key difference: the 8th slot (numbering starts from 0, so this corresponds +to the 7th slot in *3ds Max*) is used for the emission mask. The shader uses +this mask to control the emission effect, with the color of the mask determining +the color of the illumination. + +The second UV channel is used, similar to an overlay. + + + + + +

Overlay

Emission Mask

Result

+ + + + + + + + + + diff --git a/_sources/assets/shaders/rendinst_parallax_ice.md.txt b/_sources/assets/shaders/rendinst_parallax_ice.md.txt new file mode 100644 index 000000000..5f6a40485 --- /dev/null +++ b/_sources/assets/shaders/rendinst_parallax_ice.md.txt @@ -0,0 +1,157 @@ +# Shader: rendinst_parallax_ice + +## Overview + +As the name suggests, this shader is designed to simulate translucent ice using +parallax effects. It can be applied to both tiled textures, such as the surface +of a frozen lake, and unique assets, like a sculpted iceberg. + +This shader blends two detail layers in a manner similar to the +[rendinst_perlin_layered](rendinst_perlin_layered.md) shader, but without +height-based gradients. A third detail layer is blended differently, using only +its diffuse texture, which is offset "into" the surface and refracted by the +normals of the mixed detail layers. + +This shader uses a single UV channel, as +[rendinst_mask_layered](./dng-shaders/rendinst_mask_layered.md) does, and is +intended for relatively flat surfaces. Using it on organic shapes may cause +visual glitches, so it's recommended to make such areas opaque. + +## Required Textures + +- `tex0`: D1 Diffuse (RGB) + HeightMap (Alpha) +- `tex1`: Diffuse of the internal layer (RGB) +- `tex2`: D1 Normal (RG) + Glossiness (A) +- `tex3`: D2 Diffuse (RGB) + HeightMap (Alpha) +- `tex4`: D2 Normal (RG) + Glossiness (A) + +## Optional Textures + +- `tex5`: D1 transparency mask. If present, this mask is used for blending + with the internal layer instead of the diffuse alpha. If a detail needs to be + completely transparent or opaque, a black or white placeholder can be used. +- `tex6`: D2 transparency mask. Used similarly to `tex5`. +- `tex7`: Detail blending mask. + +```{important} +All masks in `.folder.blk` must have `gamma=1` for correct operation. +``` + +- `VertexColor`: If available, this is used to force the internal layer to + become opaque in black areas, while white areas remain unchanged. This is + useful for handling the edges of ice chunks to avoid artifacts at corners. + **Only the red channel is checked**, but for simplicity, it is shown as black + and white in the example. + + + +
+ +## Parameters + +**Color:** + +- `inner_layer_depth`: Distance between the surface and the internal layer. + `min=0.0` (no effect). Default: `0.1` + + + +
+ +- `inner_layer_mul`: Multiplier for the internal layer's diffuse color, + controlling brightness. Default: `1.0` + + + +
+ +- `inner_layer_power`: Exponent that applied to the internal layer's color after + multiplication, used to adjust contrast. Default: `1.0` + + + +
+ + Increasing both `power` and `mul` values can produce non-realistic but + artistic effects, such as enhanced contrast and color saturation that give a + glowing appearance. Use these settings sparingly. Here's an extreme example + with `power=3` and `mul=3`: + + + +
+ +- `vcol_masked_mul`: Brightness multiplier for blended detail layers in areas + marked white in VertexColor. +- `vcol_masked_power`: Contrast exponent for the same blended detail layers. + +- `ior`: Index of refraction, controlling how much the normals of the detail + layers distort the internal layer's diffuse. `min=1.0` (no effect), Default: + `1.31`. + + Left to right: `ior=1.0` (no refraction), `1.31` (physically accurate for + ice), and an exaggerated `4.0`. Other parameters, including `depth`, are + identical. + + + +
+ + By default, the shader uses a physically accurate value for ice, but you can + adjust the `ior` to weaken or exaggerate the effect for visual purposes. + Adjusting `depth` is also necessary, as increasing `ior` not only intensifies + the internal layer's distortion by detail normals but also brings it visually + closer to the surface. + + On the left: `ior=1.31` (default) and `depth=0.1`. On the right: `ior=4.0` and + `depth=1`. These are not physically accurate, but they can be used for + artistic effect. The internal layer becomes less distinct, which can sometimes + be desirable. + + + + +

ior=1.31 and depth=0.1

ior=4.0 and depth=1

+ + + + +**Texture Coordinates:** + +- `inner_layer_tile_uv`: Tiling of the internal layer. +- `inner_layer_u_offset`: Horizontal offset. +- `inner_layer_v_offset`: Vertical offset. + +- `detail1_tile_uv` +- `detail1_u_offset` +- `detail1_v_offset` +- `modify_detail1_mask_uv`: Controls whether the transparency mask UVs for this + detail are adjusted by the three parameters above. Default: `1`. This is + useful if the mask was specifically painted for the asset, so tiling/offset + adjustments don't break the mask. + +- `detail2_tile_uv` +- `detail2_u_offset` +- `detail2_v_offset` +- `modify_detail2_mask_uv` + +**Micro Details:** + +- `micro_detail_layer1`: Index of the first micro detail layer. +- `micro_detail_layer1_uv_scale`: Tiling of the first micro detail layer. + +- `micro_detail_layer2`: Index of the second micro detail layer. +- `micro_detail_layer2_uv_scale`: Tiling of the second micro detail layer. + +**Masks:** + +- `mask_gamma`: works the same way as in + [rendinst_perlin_layered](./rendinst_perlin_layered.md). The first two values + control the gamma of the detail masks, the third does nothing (since there is + no third detail), and the fourth sets the tiling for the Perlin noise. + Default: `1.0, 1.0, 0.0, 0.1`. +- `heightmaps_invert`: The first two values control the inversion of the detail + blending masks, and the second pair controls the inversion of the transparency + masks for those details. Default: `0,0, 0,0`. + + diff --git a/_sources/assets/shaders/rendinst_perlin_layered.md.txt b/_sources/assets/shaders/rendinst_perlin_layered.md.txt new file mode 100644 index 000000000..42291c023 --- /dev/null +++ b/_sources/assets/shaders/rendinst_perlin_layered.md.txt @@ -0,0 +1,644 @@ +# Shader: rendinst_perlin_layered + +## Overview + +This shader is a complex tool for creating layered textures on terrain and +assets. It supports blending multiple detail layers with normal maps, +controlling detail tiling, and generating shadows from heightmaps. The shader +includes features like height-based painting, which applies color based on +object elevation using a predefined palette, and integrates Perlin noise to +enhance texture blending. Parameters allow fine-tuning of shadow intensity, +texture scale, and noise behavior, making it useful for adding depth and +variation to surfaces in large-scale environments. + +## Parameters + +### General Parameters + +- `script:t="blend_normals=0,0,0,0"` - Normal blending. The first three + components specify the normals involved in the blend, while the fourth + component determines the normal through which the others will blend. +- `script:t="invert_heights=0,0,0,0"` - The first three components control the + inversion of heightmaps (values can be fractional). The fourth component + adjusts the height gradient of Detail3. +- `script:t="mask_gamma=0.1,0.1,0.1,0.5"` - The first three components control + the gamma of the details (the power of their heightmaps). The fourth component + is a multiplier for noise tiling. +- `script:t="paint_details=0,0,0,0"` - Detail painting. The first three + components control the intensity of detail painting. The fourth component + specifies the paint string. +- `script:t="micro_detail_layer=0"` - Index of the micro detail. +- `script:t="micro_detail_layer_v_scale=1"` - Vertical scale of the micro detail + (for rectangular textures). +- `script:t="micro_detail_layer_uv_scale=1"` - Tiling of the micro detail. + +### daNetGame-based Parameters + +- `script:t="mask_by_normal=0,1,0,0.5"` - Specifies which normals allow Detail2 + to show through other details. The first three components are normals (which + can be fractional values), and the fourth component decides whether to use + normals or Perlin noise. +- `script:t="perlin_noise_offset=1,2,3,1"` - Noise freezing on the model. The + first three components define the noise offset along the x, y, z axes, while + the fourth component toggles the noise freezing on or off. +- `script:t="paint_points_black=0,0,0,0"` - Painting points. The first three + components set black points for three details. The fourth component is unused + but required. +- `script:t="paint_points_white=1,1,1,0"` - Painting points. The first three + components set white points for three details. The fourth component is unused + but required. +- `script:t="palette_index=0"` - Paint palette selection. `0` for global, `1` + for per-map. +- `script:t="detail0_const_color=0,0,0,1"` - Paint color for Detail1 (using + modulate2x). +- `script:t="detail1_const_color=0,0,0,1"` - Paint color for Detail2 (using + modulate2x). +- `script:t="detail2_const_color=0,0,0,1"` - Paint color for Detail3 (using + modulate2x). +- `script:t="enable_hmap_blend=1"` - Enable/disable blending with the heightmap + (default is 0). +- `script:t="hmap_blend_height=0.1"` - Height of the blend strip (default is + 0.1). + +### War Thunder Parameters + +- `script:t="details_tile=1,1,1,0"` - Tiling of the details. The first three + components are multipliers for the tiling of Details1-3. The fourth component + is unused but required. + +## General Operation and Principles + +The shader operates with three details (layered), blending them based on: + +1. Perlin noise (`perlin_layered`), +2. Height from the ground, +3. Their heightmaps. + + + +
+ +Details are assigned to the following slots: + +- **Detail 1 (gray stucco)**: Albedo texture (heightmap in alpha) - empty. +- **Detail 1 (gray stucco)**: Normal texture (metalness in blue, smoothness in + alpha). +- **Detail 2 (white stucco)**: Albedo texture (heightmap in alpha). +- **Detail 2 (white stucco)**: Normal texture (metalness in blue, smoothness in + alpha). +- **Detail 3 (stone)**: Albedo texture (heightmap in alpha). +- **Detail 3 (stone)**: Normal texture (metalness in blue, smoothness in alpha). + +```{note} +- You can use two details instead of three. Detail1 is mandatory and constant. + You can omit either Detail2 or Detail3, but not both. +- If only Detail1 is used, there's no point in blending – consider using a + simple shader instead. +``` + +### Blending Details + +#### First Level – Blending by Height Gradient + +This is a special case where Detail3 is blended based on its height gradient +from the ground. If not configured properly, Detail3 may not be visible on most +of the object, dominating only at the bottom. + + + +
+ +Essentially, this complex "height gradient" represents a natural gradient +applied to the heightmap of Detail3. + + + +
+ +#### Second Level – Blending by Heightmaps + +Each detail has its own heightmap. Let's examine them: + + + + + +

Detail1

Detail2

Detail3

+ + + + + +When blending three details over each other, they are strictly blended according +to these heightmaps. + + + +
+ +As shown in the screenshot, the heightmap of the white stucco (Detail2) is +significantly "higher" than that of the gray stucco (Detail1). Meanwhile, +Detail3 appears at the bottom based on the height gradient. + +#### Third Level – Blending by Perlin Noise + +As seen in the screenshots above, the gray stucco (with a weaker heightmap) +appears in a specific corner. It's absent in other areas because the Perlin +noise at that location lightened the heightmap of Detail2, making it higher than +Detail1. + + + +
+ +### Blending Control + +Blending is controlled using the following parameters: + +#### Parameter: `invert_heights=0,0,0,1` + +##### First Three Components + +These invert the heightmaps of the respective details (values can be fractional, +representing the linear interpolation factor between the inverted and original +heightmaps). +- `0` - original, +- `1` - inverted. + +**Result of Inverted Heightmaps:** + + + + + +

Detail1

Detail2

Detail3

+ + + + + +**Visual Appearance of Inverted Heightmap:** + + + + + +

Detail1

Detail2

Detail3

+ + + + + +**Explanation:** + + + + + +

Detail1

Detail2

Detail3

+ + + + + +

Inverting the "gray" heightmap has little effect, as it stays "gray" even after inversion.

Inverting the "white" heightmap makes Detail1 visible, as its "gray heightmap" becomes higher than the "black" (after inversion) heightmap of Detail2.

It may seem unchanged, but note how the brick protrudes through the stucco. It no longer sticks out, as if it was pushed out from underneath. Now, the stucco lies on top of the brick plane, crumbling between layers (which looks much more realistic).

+ +##### Fourth Component + +This controls the height gradient for Detail3. +- `0` - original height gradient, +- `1` - no gradient. + +Let's see how this works: + + + + + +

value = 0

value = 0.5

value = 1

+ + + + + +As shown, the higher the value, the less visible Detail3 becomes. This is +because the parameter represents gamma (or the power) of the height gradient. + +```{note} +**What does this mean?** + +It means the height gradient ranges from almost `0` (black) to nearly `1` +(white). Essentially, from around `0.01` to `0.99` (conditional, as the exact +implementation in code is unknown). + +If we set a gamma of `0` for the nearly black part of the gradient (`0.01`), it +becomes `1` (white). Therefore, a value of `0` represents the maximum height of +Detail3. + +As the gamma increases, the height decreases. For example, `0.01^0.5 = 0.1`. And +`0.01^1 = 0.01` - the gradient is completely black. +``` + +#### Parameter: `mask_gamma=1,1,1,1` + +##### First Three Components + +These set the gamma for a specific heightmap (as explained above). They +effectively darken the heightmaps of the specified details. +- `0` - untouched heightmap, +- `1` - completely darkened heightmap. + +```{note} +The formula requires a value slightly above zero, typically around `0.1`. +``` + +Let's see how this works: + +- **Heightmap 1** + + + + + +

value = 0.1

value = 0.5

value = 1

+ + + + + +- **Heightmap 2** + + + + + +

value = 0.1

value = 0.5

value = 1

+ + + + + +- **Heightmap 3** + + + + + +

value = 0.1

value = 0.5

value = 1

+ + + + + +##### Fourth Component + +This sets the scale (or more precisely, the tiling) of the world noise. Let's +examine a longer object to see the difference. A value of `0` is not used, as +noise would be absent, and blending would occur solely based on heightmaps. + +- **value = 0.1** + + + +
+ +- **value = 0.5** + + + +
+ +- **value = 1** + + + +
+ +### Normal Map Blending + +Often, there’s a need to reveal the relief or texture of one detail through +another. For example, you might want to show wood through peeling paint, or moss +growing over tiles. In some cases, you might want to depict painted rusty metal, +or simply add variation to the detail by using different textures. + +Instead of generating a bunch of separate textures for each scenario, the shader +provides a parameter for blending the normals of details. Essentially, this +parameter allows the "lower" or "farther" (relative to the camera's position) +details' normals to show through the "upper" or "closer" ones. + +#### Parameter: `blend_normals=1,1,1,1` + +This parameter controls how the normal maps of different details blend with each +other. + +- The **first three components** specify which details' normals participate in + the blending process. +- The **fourth component** determines the "main" detail through which the other + normals will show. This is important because the blending effect will only be + visible through this selected detail (keep in mind that the details are + numbered starting from 0). + +```{important} +You must be cautious with the fourth component. If you set it to the "lower" +detail that is not visible due to blending, you won’t see any blending effect – +because the detail through which the other normals should be visible is itself +not visible. + +In other words, for the blending effect to work correctly, the selected "main" +detail (fourth component) must be visible. This ensures that the normals of the +other details can properly blend through it. +``` + + + + + +

blend_normals=0,0,0,0

blend_normals=1,1,1,1

blend_normals=1,0,1,0

+ + + + + + + + + +

All Values Set to 0: No normal map blending occurs.

All Values Set to 1: All normals (first three components) are blended, with the main normal (through which others blend) set to 1, representing white stucco.

Blending Through 0 (fourth component): This blends through the gray stucco (Detail3). The Detail2 (white stucco) does not participate in the blend.

+ +### Procedural Object Painting + +```{seealso} +For more information on procedural painting, see [Procedural Rendinst +Painting](../about-assets/procedural-rendinst-painting/procedural_rendinst_painting.md). +``` + +### Microdetails + +The shader supports one microdetail across the entire stack of details. The +syntax is similar to `simple_aces`. For example: + +- `micro_detail_layer=0` - Index of the microdetail. +- `micro_detail_layer_v_scale=1` - Vertical-to-horizontal ratio for the + microdetail texture. +- `micro_detail_layer_uv_scale=16.371` - Scale (tiling) of the microdetail + texture. + +## daNetGame-Based Parameters + +### Overlaying the Detail2 by Normals + +This is controlled by the parameter: + +`script:t="mask_by_normal=0,1,0,0.5"` + +- The **first three components** set the reference normal that dictates where +- the second detail will appear (these are not normalized normals, so values + greater than one will cause the detail to appear more strongly with sharper + edges). +- The **last component** controls the interpolation (lerp) between the noise + mask weight and the normal mask weight (0 means no normals are used, 1 means + only normals are used). + +### Freezing Perlin Noise + +Controlled by the parameter: + +- `script:t="perlin_noise_offset=1,2,3,1"` + +- The **first three components** determine the Perlin noise offset in the x, y, + and z directions. +- The **fourth component**: `0` keeps the default noise unaffected by the + offset, while `1` freezes the noise, making it look consistent across both the + editor and the game regardless of the asset's position, orientation, and + scale. + +This parameter is recommended only for extreme cases, where more artistic +control over noise on unique assets is required. + +### Paint Points + +These are analogous to black/white points in +[rendinst_simple_painted](./dng-shaders/rendinst_simple_painted.md) and +[rendinst_mask_layered](./dng-shaders/rendinst_mask_layered.md). + +Controlled by the parameters: + +- `script:t="paint_points_black=0,0,0,0"` + +- The **first three components** set the black points for the three details, and + the **fourth component** is mandatory but unused. + +- `script:t="paint_points_white=1,1,1,0"` + +- The **first three components** set the white points for the three details, and + the **fourth component** is mandatory but unused. + +```{important} +Black and white points **must always be different**, even if their details are +not being painted. If these parameters are added, ensure all black and white +points are different. By default, you can copy these parameters directly – black +points as all zeros, white points as all ones: + +- `script:t="paint_points_black=0,0,0,0"` +- `script:t="paint_points_white=1,1,1,0"` + +Otherwise, you will encounter a "divide by zero" error: + +`rendinst_perlin_layered: divide by zero [real] while exec shader code. stopped at operand #45` +``` + +### Painting Details in Different Constant Colors + +You can color each detail separately. However, this technology works with +shader-defined colors rather than a paint map – there is no randomness. Only the +color you specify will be applied. + +```{important} +Painting works via `modulate2x`, so the resulting color may differ slightly from +what you set. This is a limitation of the technology. +``` + +Controlled by parameters like: + +- `script:t="detail0_const_color=0,0,0,1"` - Paints the Detail1 +- `script:t="detail1_const_color=0,0,0,1"` - Paints the Detail2 +- `script:t="detail2_const_color=0,0,0,1"` - Paints the Detail3 + +```{important} +To activate these parameters, detail painting must be enabled, meaning the +parameter `script:t="paint_details=1,1,1,0"` should be set to `1` (or another +necessary value, just not `0`) for the required details. The fourth component +(the paint line) does not affect those details for which a fixed color is set. +``` + +Parameter values: + +- The **first three components** represent the color in RGB, scaled to the 0-1 + range. + + + +
+ +- The **fourth component** controls the influence of the paint map on the + specified color: `0` means full influence, `1` means no influence. + +This type of painting can be combined with standard paint map-based +painting – some details can use the map, while others use the specified color. + +Paint points still apply. + +### Heightmap Blending + +To better integrate objects with the terrain, you can use parameters that blend +the details of the terrain and the asset based on the mask of where the asset +intersects with the heightmap. This is useful for piles, rocks, cliffs, etc. + +```{important} +This is a computationally expensive technique, so use it only when necessary. +``` + +Example of blending: + + + + +

Without Blending

With Blending

+ + + + +#### Initialization and Operation of the Blend + +Parameters to initialize the blend in the shader: + +- `script:t="enable_hmap_blend=1"` - (default - 0) - enable/disable blending + with the heightmap. +- `script:t="hmap_blend_height=0.1"` - (default - 0.1) - height of the blend + stripe. + +#### Global Shadervars + +Primary shader parameters, initialized in `gamedata/.../scene.blk` in the +`"shader_vars__vars:object"` block: + +- `ri_hmap_blend_sharpness = 8.0` - (default - 8.0) - higher value means sharper + blend edges. +- `ri_hmap_min_angle = 12.0` - (default - 12.0) - gradient perlin noise starts + from this angle to the max angle. +- `ri_hmap_max_angle = 50.0` - (default - 50.0) - maximum angle. +- `ri_hmap_perlin_tex_scale = 0.25` - (default - 0.25) - perlin noise tiling + multiplier. +- `ri_hmap_min_height = 0.5` - (default - 0.5) - minimum blend height, overrides + shader parameter if necessary. + +#### Static Shadervars + +Additional shader parameters that adjust the influence of global shadervars for +a specific asset: + +- `script:t="ri_hmap_blend_sharpness_mul = 1.0"` - multiplier for + `ri_hmap_blend_sharpness`. +- `script:t="ri_hmap_min_angle_mul = 1.0"` - multiplier for `ri_hmap_min_angle`. +- `script:t="ri_hmap_max_angle_mul = 1.0"` - multiplier for `ri_hmap_max_angle`. +- `script:t="ri_hmap_perlin_tex_scale_mul = 1.0"` - multiplier for + `ri_hmap_perlin_tex_scale`. +- `script:t="ri_hmap_min_height_mul = 1.0"` - multiplier for + `ri_hmap_min_height`. + +#### Global and Static Shadervars for `ri_hmap` + +1. **Global Shadervars**: Affect all assets on a level with initialized blending. +2. **Default Values**: If global shadervars are not initialized in `scene.blk`, + the default values listed above are used. +3. **Static Shadervars**: These are shader parameters that act as multipliers + for the global shadervars initialized in `scene.blk`. + +For example, if the global shadervar is: + +`ri_hmap_blend_sharpness = 8.0` + +and the asset `example.dag` has a static shadervar set to: + +`script:t="ri_hmap_blend_sharpness_mul = 0.5"` + +the final blend sharpness value for `example.dag` on the level will be +calculated as: + +`blend_sharpness = ri_hmap_blend_sharpness * ri_hmap_blend_sharpness_mul = 8.0 * 0.5 = 4`. + +```{important} +The heightmap blending shader works in the +[*daEditor*](../../dagor-tools/daeditor/daeditor/daeditor.md), but since the +global shadervars for the editor are initialized separately and not pulled from +`scene.blk`, be aware that if you select global shadervars values in `scene.blk` +that differ from the default values, the editor will display something different +from what you will see in the game. Instructions on how to set global shadervars +for the editor will be added to the article later. +``` + +```{tip} +Global shadervars can be changed in the game in real-time: + +- If global shadervars are not initialized in `scene.blk`, they can only be + changed through the web UI Shader_vars – show global shader vars; +- If initialized, they can be changed in the game itself using the mission + settings UI, which is called up by pressing `F12`. +``` + +## War Thunder Parameters + +### Detail Tiling + +In *War Thunder*, the texel density of details isn't always consistent (although +all new details are created with correct texel density). To address this, the +parameter `details_tile=1,1,1,0` was introduced. + +- Only the **first three components** are used, with each one controlling the + tiling of its corresponding detail. +- The default value for each component is `1`. + +### Height-Based Painting + + + +
+ +- `script:t="use_painting=1"`: Controls painting from a palette defined in the + scene's shader variables. + - `1` enables painting, while `0` disables it. + - Values between `0.01` and `0.9` reduce the painting intensity + (multiplier). Painting is based on the alpha of the diffuse texture, + multiplied by the `use_painting` value. + - Values between `1.01` and `1.9` affect the painting intensity from `0.0` + to `1.0` but disable the random pixel selection from the paint stripe when + the object is displaced vertically. This is useful for ensuring that + modular skyscrapers, for example, are painted the same color. + +The palette used is called `paint_colors.dds` and can be found at +`.../develop/assets/textures/colorize_textures`. + +```{seealso} +For more information on procedural painting, see [Procedural Rendinst +Painting](../about-assets/procedural-rendinst-painting/procedural_rendinst_painting.md). +``` + +### Material Shadows + +These are shadows derived from the heightmap of the details. The available +parameters include: + +- `script:t="material_shadow_influence=0.5, 1, 0.3, 0"`: Controls the "strength" + of shadows for each detail. + - Each component affects the corresponding detail (e.g., `0.5` for the first + detail, `1` for the second, and `0.3` for the third). + - The fourth component is not used in the `rendinst_perlin_layered` shader. + +- `script:t="material_shadow_scale=2"`: Acts as a multiplier for the "size" of + the shadow. + - This scale is applied uniformly to the shadows of all details, as calculating it individually for each detail would be computationally expensive. + + + + + diff --git a/_sources/assets/shaders/rendinst_simple_emissive.md.txt b/_sources/assets/shaders/rendinst_simple_emissive.md.txt new file mode 100644 index 000000000..733f75e26 --- /dev/null +++ b/_sources/assets/shaders/rendinst_simple_emissive.md.txt @@ -0,0 +1,87 @@ +# Shader: rendinst_simple_emissive + +## Overview + +A simple emissive shader primarily used for basic assets such as light bulbs, +spotlights, etc. It can also be applied using an emissive mask. + +### Parameters + +- `script:t="emission_only_at_night=1"` – Controls emission visibility during + nighttime only. + - `1`: Enabled + - `0`: Disabled + + ```{note} + This parameter works in [*Asset + Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) also + (setting the environment to nighttime will trigger the emission). + ``` + + ```{important} + Always set this parameter unless emission is required at all times (e.g., for + skyscraper lights, car headlights, etc.). + ``` + +- `script:t="emission_fadeout=1000,5000,0,0"` – Controls the fade-out of the + emission (if needed). The first two components are functional: + - **Start** of the fade-out. + - **End** of the fade-out. + - The 3rd and 4th components must be included but are not used. + +- `script:t="emission_strength=1"` – Specifies the strength of the emission. + Values range from `0` to potentially infinity. A value of `1` is usually + sufficient as the maximum. + +- `script:t="emission_color=0.94,1,0,0"` – Defines the emission color in RGB, + with conversion as follows: + - 0 RGB = `0` in the shader + - 255 RGB = `1` in the shader + +## Functionality + +### Standard Operation + +The shader works based on an emissive mask located in the alpha channel of the +diffuse texture: + +- **Black** – No emission +- **Lighter than black** – Emits with the intensity of white +- **Albedo color** – The emission color matches the albedo + +### Separate Emission Mask + +If necessary, a separate emission mask can be applied, and the shader will +automatically use it. The mask is connected in the 6th texture slot (counting +starts from 0, so in *3ds Max*, this would be the 5th slot). + +A separate emission mask is typically required when procedural painting is used +on the asset, where white represents paintable areas. A conflict can arise +between the paint and emissive maps, causing areas meant to emit light to be +painted instead, and vice versa. + + + +
+ +### Object Painting in War Thunder + +Not yet implemented, but this is precisely why the separate emissive mask +functionality was prepared. The idea is for a single shader to both paint and +emit light on objects – such as buildings on aircraft. + +**Operation principle**: + +- If only the diffuse and normal maps are connected, the shader functions as a + standard emissive shader. +- If a separate emissive mask is connected, the shader can paint based on the + diffuse alpha as if it were a paint mask (like the standard + [simple_aces/rendinst_simple](./dng-shaders/rendinst_simple.md) shader in *War + Thunder*). + +```{seealso} +Painting parameters are standard for *War Thunder*, see [Procedural Rendinst +Painting](../about-assets/procedural-rendinst-painting/procedural_rendinst_painting.md). +``` + + diff --git a/_sources/assets/shaders/simple_aces_detailed.md.txt b/_sources/assets/shaders/simple_aces_detailed.md.txt new file mode 100644 index 000000000..7acd81956 --- /dev/null +++ b/_sources/assets/shaders/simple_aces_detailed.md.txt @@ -0,0 +1,72 @@ +# Shader: simple_aces_detailed + +## Overview + +This shader is designed for prefabs and render instances with additional +detailing, including a normal map. + +## Textures + +In *3ds Max*, the shader's class name is `simple_aces_detailed`. It uses the +following texture slots: + +- **Slot 1** – Base texture (colormap) +- **Slot 3** – Normal map for the base texture +- **Slot 4** – Normal map for the detail texture +- **Slot 8** – Detail texture, with tiling controlled by the parameters + `detail_scale_u=8` and `detail_scale_v=8` + +## Parameters + +For example, in the `.dag` file, the material configuration appears as follows: + +``` +material{ + name:t="19 – Default" + class:t="simple_aces_detailed" + tex16support:b=yes + twosided:i=0 + amb:ip3=255, 255, 255 + diff:ip3=255, 255, 255 + spec:ip3=255, 255, 255 + emis:ip3=0, 0, 0 + power:r=32 + script:t="real_two_sided=no" + script:t="detail_scale_u=8" + script:t="detail_scale_v=8" + tex0:t="./karelia_cliff_a_b_tex_d.tif" + tex2:t="./karelia_cliff_a_b_tex_n.tif" + tex3:t="./rock_detail_a_tex_n.tif" + tex7:t="./rock_detail_a_tex_d.tif" +} +``` + +**Explanation of Key Parameters:** + +- `name:t="19 – Default"` – The material's name. +- `class:t="simple_aces_detailed"` – The shader class being used for the + material. +- `tex16support:b=yes` – Enables support for 16-bit textures. +- `twosided:i=0` – Determines whether the material is rendered double-sided. In + this case, `0` means it's single-sided. +- `amb:ip3=255, 255, 255` – Ambient color (RGB: 255, 255, 255). +- `diff:ip3=255, 255, 255` – Diffuse color (RGB: 255, 255, 255). +- `spec:ip3=255, 255, 255` – Specular color (RGB: 255, 255, 255). +- `emis:ip3=0, 0, 0` – Emission color (RGB: 0, 0, 0), meaning no + self-illumination. +- `power:r=32` – Specular power (shininess). +- `script:t="real_two_sided=no"` – Explicitly disables double-sided rendering. +- `script:t="detail_scale_u=8"` – Sets the tiling scale for the detail texture + along the U axis (horizontal). +- `script:t="detail_scale_v=8"` – Sets the tiling scale for the detail texture + along the V axis (vertical). +- `tex0:t="./karelia_cliff_a_b_tex_d.tif"` – Path to the base texture + (colormap). +- `tex2:t="./karelia_cliff_a_b_tex_n.tif"` – Path to the normal map for the base + texture. +- `tex3:t="./rock_detail_a_tex_n.tif"` – Path to the normal map for the detail + texture. +- `tex7:t="./rock_detail_a_tex_d.tif"` – Path to the detail texture. + + + diff --git a/_sources/dagor-home/dagor_engine.md.txt b/_sources/dagor-home/dagor_engine.md.txt new file mode 100644 index 000000000..8c653ae43 --- /dev/null +++ b/_sources/dagor-home/dagor_engine.md.txt @@ -0,0 +1,105 @@ +## Introduction + +The *Dagor Engine* is an open-source game engine by +[*Gaijin*](https://gaijinent.com/), continuously updated since 2002 for +high-performance gaming and realistic graphics. + +## Platform Support + +Supports *Windows PC*, *Linux*, *iOS*, *Android*, *Nintendo Switch*, +*PlayStation 4*, *PlayStation 5*, *Xbox One*, *Xbox Series X/S*. + +## Games Created with the Dagor Engine + +Powers games with detailed physics and large-scale environments, including: + +- [**War Thunder**](https://warthunder.com/): Vehicular combat game with air, + land, and sea battles across historical eras. +- [**Enlisted**](https://enlisted.net/): Squad-based WWII first-person shooter + with large-scale battles. +- [**War Thunder Mobile**](https://www.wtmobile.com/): Mobile adaptation of *War + Thunder* for iOS and Android. + +## Key Features + +- **Graphics Engine**: Supports *DirectX 12*, *Vulkan*, and *Metal* APIs. + +- **Physics Engine**: *Dagor* supports third party open source industry +standard solutions for physics simulation: [**Jolt +Physics**](https://github.com/jrouwe/JoltPhysics) (preferable) and [**Bullet +Physics**](https://github.com/bulletphysics). + +- **DaGI (Dagor Global Illumination)** + + - Optimized for efficient global illumination on huge dynamic scenes with low + memory usage (less than 1ms on PS4!), and with raytracing support for modern + hardware. + - Simulates indirect lighting and light bouncing for realistic scenes: + - [GDC talk: Scalable Real-Time Ray Traced Global Illumination for Large Scenes](https://enlisted.net/en/news/show/25-gdc-talk-scalable-real-time-ray-traced-global-illumination-for-large-scenes-en/#!/) + - [Dagor Engine 5.0: light and shadows: Global Illumination, contact shadows, shadows on effects](https://warthunder.com/en/news/5338-development-dagor-engine-5-0-light-and-shadows-global-illumination-contact-shadows-shadows-on-effects-en) + +- **[Darg (Dagor Reactive GUI)](../api-references/quirrel-modules/quirrel-modules/darg_framework/index.rst)** + + - Reactive UI framework based on + [*Quirrel*](../api-references/quirrel-modules/dargbox/index.rst) scripting. + - Supports stateful components and modular development with native code + integration. + +- [**Dagor ECS**](../api-references/dagor-ecs/index.rst) + + - Data-driven Entity Component System for modular game development. + - Manages entities through templates, supporting parallel processing and cache + efficiency. + +- **[Render Framegraph](../api-references/dagor-render/index/daBFG.rst)** + + - Directed acyclic graph for defining frame rendering sequences. + - Allows flexible integration of game-specific and engine features. + +- **[daNetGame Framework](../danetgame-framework/index.rst)** + + - Modular platform for comprehensive game development. + - Integrates core systems like rendering, physics, networking, and audio. + +- **[Daslang](https://daslang.io/)** + + - Scripting language for interacting with core systems like rendering and + physics. + - Enables dynamic content management and engine functionality extension. + +- **[DSHL (Dagor Shader Language)](../api-references/dagor-dshl/index.rst)** + + - Specialized language for shader creation and management. + - Supports advanced features like conditionals, custom data types, and + hardware-specific optimizations. + +- [**Toolset**](../dagor-tools/index.rst) + + - [**Dagor Editor**](../dagor-tools/daeditor/daeditor/daeditor.md): Level + editor with terrain editing, prefab placement, and plugin support. + - [**Asset + Viewer**](../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md): + Resource editor and viewer for special effects, particle systems, and + animations. + - [**Impostor Baker**](../dagor-tools/impostor-baker/impostor_baker.md): Tool + for optimizing rendering with simplified 3D object representations. + - [**Importers and Exporters**](../dagor-tools/addons/index.rst): Integration + with *3ds Max*, *Maya*, and *Blender*. + +- **Networking Subsystem** + + - Scalable, low-latency architecture for multiplayer games. + - Supports TCP and UDP protocols, with built-in tools for debugging, lag + compensation, and data compression. + +- **Audio Engine** + + - Uses FMOD library for 3D sound, DSP effects, and multi-channel support. + +- **Animation System** + + - Supports skeletal and procedural animation, blending, morphing, and various + controllers, including Inverse Kinematics, additive animations and motion + matching. + + diff --git a/_sources/dagor-home/documentation/contributing_to_docs.md.txt b/_sources/dagor-home/documentation/contributing_to_docs.md.txt new file mode 100644 index 000000000..29b63794c --- /dev/null +++ b/_sources/dagor-home/documentation/contributing_to_docs.md.txt @@ -0,0 +1,36 @@ + +# Contributing to Documentation + +If you would like to contribute to the *Dagor Engine* documentation, please +follow the steps outlined below: + +1. **Fork the Repository**: + + Fork the *Dagor Engine* repository on *GitHub* and create a new branch + specifically for your documentation updates. + +2. **Make Your Changes**: + + Edit or add documentation content as needed. Ensure that your changes are + accurate and improve the clarity or completeness of the documentation. + +3. **Build Locally**: + + [Run a local build](how_to_build_docs_locally.md) of the documentation to + verify that your changes render correctly. This helps catch any formatting or + structural issues before submission. + +4. **Adhere to Style Guidelines**: + + Ensure that your modifications conform to the documentation style guidelines. + Consistency in tone, formatting, and structure is essential for maintaining + high-quality documentation. + +5. **Commit and Submit**: + + Commit your changes with clear and descriptive commit messages. Once you are + satisfied with your updates, open a pull request (PR) on the original *Dagor + Engine* repository for review. + +By following these steps, you help maintain the quality and accuracy of the +*Dagor Engine* documentation, benefiting the entire development community. \ No newline at end of file diff --git a/_sources/dagor-home/documentation/how_to_build_docs_locally.md.txt b/_sources/dagor-home/documentation/how_to_build_docs_locally.md.txt new file mode 100644 index 000000000..e6318aeb7 --- /dev/null +++ b/_sources/dagor-home/documentation/how_to_build_docs_locally.md.txt @@ -0,0 +1,78 @@ +## How to Build Documentation Locally + +To generate local documentation for the *Dagor Engine*, follow these steps: + +1. **Clone the Repository** + + Clone the [*Dagor Engine* + repository](https://github.com/GaijinEntertainment/DagorEngine). + +2. **Install Python** + + Download and install [*Python*](https://www.python.org/downloads/). + +3. **Install Sphinx and Dependencies** + + Use the provided configuration file to install + [*Sphinx*](https://www.sphinx-doc.org/en/master/) and required components: + + ``` + pip install -r requirements.txt + ``` + + ```{note} + On Windows, *Sphinx* and its dependencies must be installed with + administrator privileges. + ``` + +4. **Install Doxygen** + + Download and install [*Doxygen*](https://www.doxygen.nl/). + + ```{note} + On Windows, add *Doxygen* to the environment PATH: + `$env:PATH=$env:PATH+';\bin\'`, + replacing `` with the path to your *Doxygen* + installation directory (e.g., `c:\Program Files\doxygen`). + ``` + +5. **Build Documentation** + + In the `DagorEngine/_docs` directory, execute the following steps: + + - **Run the Build Script** + + Execute the script to parse source files: + + ``` + python3 build_all_docs.py + ``` + + This script will process documentation from `DagorEngine/prog` and output + it to `_docs/source/`. + + - **Run Sphinx Build Command** + + Use *Sphinx* to build the documentation: + + - **On Windows**: + + ``` + sphinx-build . _build + ``` + + - **On Linux**: + + ``` + python3 -m sphinx . _build + ``` + + *Sphinx* will generate the documentation in HTML format by default, placing + the output in `_docs/_build`. + +6. **View the Documentation** + + Open the `index.html` file located in `_docs/_build` to view the generated + documentation. + + diff --git a/_sources/dagor-home/documentation/index.rst.txt b/_sources/dagor-home/documentation/index.rst.txt new file mode 100644 index 000000000..d78962daf --- /dev/null +++ b/_sources/dagor-home/documentation/index.rst.txt @@ -0,0 +1,13 @@ + +Documentation +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + how_to_build_docs_locally.md + contributing_to_docs.md + qdox-user-guide/index.rst + + diff --git a/_sources/dagor-home/documentation/qdox-user-guide/index.rst.txt b/_sources/dagor-home/documentation/qdox-user-guide/index.rst.txt new file mode 100644 index 000000000..4289b7b24 --- /dev/null +++ b/_sources/dagor-home/documentation/qdox-user-guide/index.rst.txt @@ -0,0 +1,11 @@ + +Qdox User Guide +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + :glob: + + * + diff --git a/_sources/dagor-home/documentation/qdox-user-guide/qdox.rst.txt b/_sources/dagor-home/documentation/qdox-user-guide/qdox.rst.txt new file mode 100644 index 000000000..4091be022 --- /dev/null +++ b/_sources/dagor-home/documentation/qdox-user-guide/qdox.rst.txt @@ -0,0 +1,315 @@ +QDox, writing your documentation +=================================== + +QDox allows you to generate docs (ReStrcturedText, sphinx rst) from .cpp files +(and later in future - perhaps from .nut quirrel modules). + +written in python 3.10, no external dependecies, should work in Python 3.9 or later. +Inspired by LuaDox +but written much more dirty and probably needs refactor. +It was not possible to use LuaDox mostly not because of different comment style in cpp and lua, +but because of that Quirrel is much more complex language and I want to try to get more from cpp files + +What is not done yet, but can be done in future: + + * outside the scope definitions and later bindings. Can produce unreferenced objects. + * multiscope path definition ``@class foo/bar/Baz`` -- add class Baz in module foo and in table bar + * support for ``@example`` ``@usage`` ``@image`` ``@icon`` and others handy things + * multiline param and return definitions + * generate stubs from parsed representation (one of the goals) + +But it will likely require to significantly rewrite parser again. So maybe later. + + +A brief example of how to comment cpp code: + +.. code-block:: cpp + :caption: part of sqWebBrowser.cpp + + void bind_webbrowser(SqModules* sq_modules_mgr) + { + Sqrat::Table tbl(sq_modules_mgr->getVM()); + /**@module browser + + Opens embeded web browser. Requires native cef binary and its integration. + + */ + tbl + .Func("can_use_embeded_browser", can_use_embedded_browser) + ///@return b : Returns can browser be opened + .Func("browser_go_back", go_back) + .Func("browser_reload_page", reload) + ///Will reload page + .Func("browser_add_window_method", add_window_method) + ///@param method c : add function + ; + + using namespace webbrowser; + + CONST(BROWSER_EVENT_INITIALIZED); + CONST(BROWSER_EVENT_DOCUMENT_READY); + + sq_modules_mgr->addNativeModule("browser", tbl); + } + +The Basics +------------ + +All QDox comments should begin from three slashes ``///`` or doxygen style multiline comment ``/** */``. + +Everything starts with ``@module`` or ``@page`` +You should place ``///@module `` or ``///@page `` somewhere in the file, +cause without module all other things can't be added + +There are several directives you need to know: + +collections or containers can have some other members in them: + + * ``@module`` or ``@page`` can have tables, classes, functions, consts, values, enums. Usually it exports a table. + * ``@table`` can have functions, classes, enums, tables, consts and values + * ``@class`` can have functions, ctor, operators, Var, Prop, Const + * ``@enum`` can have only consts and values + +'Leaf' objects (can't have members): + + * ``@function`` - can be only in tables or module + * ``@ctor`` - can be only in classes + * ``@operator`` - can be only in classes + * ``@property`` - can be only in classes + * ``@var`` - can be only in classes + * ``@value`` - can be in module, table, class, enum + * ``@const`` - can be in module, table, class, enum + +'Doc' objects: + + * multiline - ``@code``, ``@expand``, ``@tip``, ``@seealso``, ``@warning``, ``@tip``, ``@alert`` or ``@danger``, ``@note``. + These objects close their scope when ``@`` appears (like ``code@``, ``tip@``, etc) or comment ended. + These objects can be at any scope, as they just add simple way of create rst (see below) + +Each object - container or leaf type - can be defined with scope of module. + + ``@class myModule/MyClass`` will set that MyClass is in myModule. + + +Functions, tables and classes can be defined as a module: + + ``@class DataBlock = DataBlock`` will describe module that exports class DataBlock. + + +In function scope (as well as in operator and ctor) you can use following directive : + * ``@paramsnum`` - integer for number of parameters (called paramscheck in cpp). + If negative - means that function can be called with at least that amount of parameters, but also with more than that. + * ``@kwarged`` - means that function paramaters should be provided via table. like: :sq:`function foo({argument=1, arg2=2})` + * ``@typemask`` - string with typemask. See `documentation `_ + * ``@vargved`` - means that function can have variable arguments count + * ``@param`` - should be ``@param : description``, for example ``@param title t : Title of messagebox`` + * ``@return`` - should be ``@return typemask : any description`` or ``@return typemask`` + +.. note:: + All directives, except doc-objects, ``@param`` and ``@return`` follows very simple declaration rule: + + ``@fieldname value brief description`` + + ``@param`` and ``@return`` use ``:`` to separate description from other arguments, cause they can have variable number of arguments + +.. note:: + ``@param`` can have following variants: + + ``@param name : description`` + + ``@param name type : description`` + + ``@param name type defvalue : description`` + + and description is always optional + +In class scope: + * ``@extends`` - what class does this class extends + +In property of class: + * ``@writeable`` - can you modify property. + +In value or const or Var scope: + * ``@ftype`` - type of constant (typemask-like string or just any text) + * ``@fvalue`` - value of constant + +In scope of any object you can use following directives: + * ``@brief`` - short description + * ``@parent`` - scope reference (to show name like ``parent.Object``) + + +Special directives +^^^^^^^^^^^^^^^^^^^^ + +``@resetscope`` - to exit all scopes (modules, functions). + Basically to stop autodocumentation till next module scope will be entered + +``@skipline`` - skipnext line in parsing + + +Autodocumentation for .Func +----------------------------- +If function used in .Func() is defined in the same cpp file - it can be autodocumented. +No lambdas or namespaces are supported. +No multiline function definition is supported also + +.. code-block:: cpp + + int addTen(int val) + { + return val+10; + } + ... + .Func("bindFuncName", CppFuncName) //will generate return type and arguments type and name in documentation + + +Doc-objects +------------ + +Mutltiline (blocks) +^^^^^^^^^^^^^^^^^^^^ + +``@alert``:: + + @alert + any alert here + alert@ + +.. danger:: + any alert here + +The same syntax goes for ``@tip``, ``@note``, ``@seealso``, ``@warning`` + +.. tip:: + Tip! Nice tip! + +.. warning:: + Warning! + +.. danger:: + Use this alert block to bring the reader's attention to a serious threat. + +.. seealso:: + place here some links + +.. note:: + And this is note + +-------- + +``@expand`` (aliases ``@spoiler``, ``dropdown``):: + + @spoiler My spoiler + toggle text that can be any rst (but not recursive code objects) + + preformat:: + + some code or preformat text + spoiler@ + +.. dropdown:: My spoiler + + toggle text that can be any rst (but not recursive code objects) + + preformat:: + + some code or preformat text + + +-------- + +``@code``:: + + @code some_name lang + watch indent + will generate block + code@ + +.. code-block:: lang + :caption: some_name + + watch indent + will generate block + + +Configurate what to analyze and build +--------------------------------------- + +You need to set where your files to parse are placed and what is documentation about. +This is done via .qdox config +.qdox config is json (with cpp style single line comments supported) + +.. code-block:: cpp + :caption: .qdox + + [ + { + "paths": ["prog/gameLibs/quirrel"], //folders or files list, required, relative to config + "doc_chapter": "quirrel_gamelibs", //internal folder name, required + "chapter_desc": "Docs for Quirrel modules extracted from source in gameLibs", //displayed title, optional + "chapter_title": "Quirrel Gamelibs Native Modules", //displayed title, optional + "extensions": [".cpp"], //optional, list of extensions of files + "exclude_dirs_re": [], //optional, list of regexps that should full match to exclude dirs in recursive search + "exclude_files_re": [], //optional, list of full match regexp to skip files' + "recursive": true //optional, do recursive search for folders' + } + ] + + + + +Building and testing the qdox +----------------------------- + +**You need python 3.10+ installed with python in paths** + +Installation:: + + pip install sphinx + pip install myst + pip install myst_parser + pip install sphinx_rtd_theme + pip install sphinx-autobuild + +Than in your dagor folder you can just run following commandlines:: + + python _docs/qdoc_main.py + sphinx-build -b html -d _docs/build/doctrees _docs/source _docs/build/html + +(in folder where .qdox config is build (see usage for details)) + +to watch changes in cpp files, configs and autorebuild:: + + @start python _docs/watch.py + @start sphinx-autobuild --port 8080 _docs/source _docs/build/html + +(in .qdox folder to start autorebuild rst from source and config) + +To have a look on a result - open with you browser ``_docs/build/html/index.html`` if you build manually (first way) +or ``localhost:8080`` if you launch autobuild + +ReStructuredText +----------------- + +Any docline that is not some directives is just restructured text + +There is lots of RTFM of sphix rst in internet + +**Strong emphasis:** `small emphasis` + + +Here are some goodies you can do (see source in source/user-guid/qdox.rst to understand how that was made) + + + +inline :sq:`let = function(){}` wow + +inline :cpp:`void function(){}` here + + +For example separate text by lines: + +------------- + + +A coloured icon: :octicon:`report;1em;sd-text-info`, look at it. diff --git a/_sources/dagor-home/documentation/qdox-user-guide/rst-cheatsheet.rst.txt b/_sources/dagor-home/documentation/qdox-user-guide/rst-cheatsheet.rst.txt new file mode 100644 index 000000000..436d9cb66 --- /dev/null +++ b/_sources/dagor-home/documentation/qdox-user-guide/rst-cheatsheet.rst.txt @@ -0,0 +1,455 @@ +RST CheatSheet +=============== + +Inline Markup +------------- + +Inline markup allows words and phrases within text to have character styles (like italics and boldface) and functionality (like hyperlinks). + ++----------------------------------------------------------+------------------------------------------------+ +| :: | | +| | | +| *emphasis* | *emphasis* | ++----------------------------------------------------------+------------------------------------------------+ +| :: | | +| | | +| **strong emphasis** | **strong emphasis** | ++----------------------------------------------------------+------------------------------------------------+ +| :: | The rendering and meaning of interpreted text | +| | is domain- or application-dependent. | +| `interpreted text` | | ++----------------------------------------------------------+------------------------------------------------+ +| :: | | +| | | +| ``inline literal`` | ``inline literal`` | ++----------------------------------------------------------+------------------------------------------------+ +| :: | | +| | | +| reference_ | reference_ | ++----------------------------------------------------------+------------------------------------------------+ +| :: | | +| | | +| `phrase reference`_ | `phrase reference`_ | ++----------------------------------------------------------+------------------------------------------------+ +| :: | | +| | | +| anonymous__ | anonymous__ | ++----------------------------------------------------------+------------------------------------------------+ +| :: | | +| | | +| _`inline internal target` | _`inline internal target` | ++----------------------------------------------------------+------------------------------------------------+ +| :: | The result is substituted in from the | +| | substitution definition. | +| |substitution reference| | | ++----------------------------------------------------------+------------------------------------------------+ +| :: | | +| | | +| footnote reference [1]_ | footnote reference [1]_ | ++----------------------------------------------------------+------------------------------------------------+ +| :: | | +| | | +| citation reference [CIT2002]_ | citation reference [CIT2002]_ | ++----------------------------------------------------------+------------------------------------------------+ +| :: | | +| | | +| http://docutils.sf.net/ | http://docutils.sf.net/ | ++----------------------------------------------------------+------------------------------------------------+ + +__ http://docutils.sourceforge.net/docs/user/rst/quickref.html#hyperlink-targets + +.. _reference: http://docutils.sourceforge.net/docs/user/rst/quickref.html#hyperlink-targets + +.. _phrase reference: http://docutils.sourceforge.net/docs/user/rst/quickref.html#hyperlink-targets + +Escaping with Backslashes +------------------------- + +reStructuredText uses backslashes ("\\") to override the special meaning given to markup characters and get +the literal characters themselves. To get a literal backslash, use an escaped backslash ("\\\\"). For example: + ++----------------------------------------------------------+------------------------------------------------+ +| :: | | +| | | +| *escape* ``with`` "\" | *escape* ``with`` "\" | ++----------------------------------------------------------+------------------------------------------------+ +| :: | | +| | | +| \*escape* \``with`` "\\" | \*escape* \``with`` "\\" | ++----------------------------------------------------------+------------------------------------------------+ + +Lists +----- + ++----------------------------------------------------------+------------------------------------------------------+ +| :: | | +| | | +| - This is item 1. A blank line before the first | - This is item 1. A blank line before the first | +| and last items is required. | and last items is required. | +| - This is item 2 | - This is item 2 | +| | | +| - Item 3: blank lines between items are optional. | - Item 3: blank lines between items are optional. | +| - Item 4: Bullets are "-", "*" or "+". | - Item 4: Bullets are "-", "*" or "+". | +| Continuing text must be aligned after the bullet | Continuing text must be aligned after the bullet| +| and whitespace. | and whitespace. | +| - This list item contains nested items | - This list item contains nested items | +| | | +| - Nested items must be indented to the same | - Nested items must be indented to the same | +| level | level | ++----------------------------------------------------------+------------------------------------------------------+ +| :: | | +| | | +| 3. This is the first item | 3. This is the first item | +| 4. This is the second item | 4. This is the second item | +| 5. Enumerators are arabic numbers, | 5. Enumerators are arabic numbers, | +| single letters, or roman numerals | single letters, or roman numerals | +| 6. List items should be sequentially | 6. List items should be sequentially | +| numbered, but need not start at 1 | numbered, but need not start at 1 | +| (although not all formatters will | (although not all formatters will | +| honour the first index). | honour the first index). | +| #. This item is auto-enumerated | #. This item is auto-enumerated | ++----------------------------------------------------------+------------------------------------------------------+ +| :: | | +| | | +| what | what | +| Definition lists associate a term with | Definition lists associate a term with | +| a definition. | a definition. | +| | | +| how | how | +| The term is a one-line phrase, and the | The term is a one-line phrase, and the | +| definition is one or more paragraphs or | definition is one or more paragraphs or | +| body elements, indented relative to the | body elements, indented relative to the | +| term. Blank lines are not allowed | term. Blank lines are not allowed | +| between term and definition. | between term and definition. | ++----------------------------------------------------------+------------------------------------------------------+ +| :: | | +| | | +| :Authors: | :Authors: | +| Tony J. (Tibs) Ibbs, | Tony J. (Tibs) Ibbs, | +| David Goodger | David Goodger | +| | | +| :Version: 1.0 of 2001/08/08 | :Version: 1.0 of 2001/08/08 | +| :Dedication: To my father. | :Dedication: To my father. | ++----------------------------------------------------------+------------------------------------------------------+ +| :: | | +| | | +| -a command-line option "a" | -a command-line option "a" | +| -b file options can have arguments | -b file options can have arguments | +| and long descriptions | and long descriptions | +| --long options can be long also | --long options can be long also | +| --input=file long options can also have | --input=file long options can also have | +| arguments | arguments | +| /V DOS/VMS-style options too | /V DOS/VMS-style options too | ++----------------------------------------------------------+------------------------------------------------------+ + +.. raw:: pdf + + Spacer 0 72 + +Section Structure +----------------- + ++----------------------------------------------------------+--------------------------------------------------------+ +| :: | | +| | | +| Title | | +| ===== | Title | +| | | +| Titles are underlined (or over- and underlined) with | Titles are underlined (or over- and underlined) with | +| a nonalphanumeric character at least as long as the | a nonalphanumeric character at least as long as the | +| text. | text. | +| | | +| A lone top-level section is lifted up to be the | A lone top-level section is lifted up to be the | +| document's title. | document's title. | +| | | +| Any non-alphanumeric character can be used, but | Any non-alphanumeric character can be used, but | +| Python convention is: | Python convention is: | +| | | +| * ``#`` with overline, for parts | * ``#`` with overline, for parts | +| * ``*`` with overline, for chapters | * ``*`` with overline, for chapters | +| * ``=``, for sections | * ``=``, for sections | +| * ``-``, for subsections | * ``-``, for subsections | +| * ``^``, for subsubsections | * ``^``, for subsubsections | +| * ``"``, for paragraphs | * ``"``, for paragraphs | ++----------------------------------------------------------+--------------------------------------------------------+ + +Blocks +------ + ++---------------------------------------------------------------+------------------------------------------------------+ +| :: | | +| | | +| This is a paragraph. | This is a paragraph. | +| | | +| Paragraphs line up at their left edges, and are | Paragraphs line up at their left | +| normally separated by blank lines. | edges, and are normally separated | +| | by blank lines. | ++---------------------------------------------------------------+------------------------------------------------------+ +| :: | | +| | | +| A paragraph containing only two colons indicates | A paragraph containing only two colons | +| the following indented or quoted text is a literal | indicates that the following indented | +| block or quoted text is a literal block. | or quoted text is a literal block. | +| | | +| :: | :: | +| | | +| Whitespace, newlines, blank lines, and all kinds of | Whitespace, newlines, blank lines, and | +| markup (like *this* or \this) is preserved here. | all kinds of markup (like *this* or | +| | \this) is preserved by literal blocks. | +| You can also tack the ``::`` at the end of a | | +| paragraph:: | You can also tack the ``::`` at the end of a | +| | paragraph:: | +| It's very convenient to use this form. | | +| | It's very convenient to use this form. | +| Per-line quoting can also be used for unindented | | +| blocks:: | Per-line quoting can also be used for | +| | unindented blocks:: | +| > Useful for quotes from email and | | +| > for Haskell literate programming. | > Useful for quotes from email and | +| | > for Haskell literate programming. | ++---------------------------------------------------------------+------------------------------------------------------+ +| :: | | +| | | +| | Line blocks are useful for addresses, | | Line blocks are useful for addresses, | +| | verse, and adornment-free lists. | | verse, and adornment-free lists. | +| | | | | +| | Each new line begins with a | | Each new line begins with a | +| | vertical bar ("|"). | | vertical bar ("|"). | +| | Line breaks and initial indents | | Line breaks and initial indents | +| | are preserved. | | are preserved. | +| | Continuation lines are wrapped | | Continuation lines are wrapped | +| portions of long lines; they begin | portions of long lines; they begin | +| with spaces in place of vertical bars. | with spaces in place of vertical bars. | ++---------------------------------------------------------------+------------------------------------------------------+ +| :: | | +| | | +| Block quotes are just: | Block quotes are just: | +| | | +| Indented paragraphs, | Indented paragraphs, | +| | | +| and they may nest. | and they may nest. | ++---------------------------------------------------------------+------------------------------------------------------+ +| :: | | +| | | +| Doctest blocks are interactive | Doctest blocks are interactive | +| Python sessions. They begin with | Python sessions. They begin with | +| "``>>>``" and end with a blank line. | "``>>>``" and end with a blank line. | +| | | +| >>> print "This is a doctest block." | >>> print "This is a doctest block." | +| This is a doctest block. | This is a doctest block. | ++---------------------------------------------------------------+------------------------------------------------------+ +| :: | | +| | | +| A transition marker is a horizontal line | A transition marker is a horizontal line | +| of 4 or more repeated punctuation | of 4 or more repeated punctuation | +| characters. | characters. | +| | | +| ------------ | | +| | | +| A transition should not begin or end a | +-----------+ | +| section or document, nor should two | | ``------``| | +| transitions be immediately adjacent. | +-----------+ | +| | | +| | | +| | A transition should not begin or end a | +| | section or document, nor should two | +| | transitions be immediately adjacent. | ++---------------------------------------------------------------+------------------------------------------------------+ + +.. raw:: pdf + + PageBreak + +Tables +------ + +There are two syntaxes for tables in reStructuredText. Grid tables are complete but cumbersome to create. Simple +tables are easy to create but limited (no row spans, etc.). + ++---------------------------------------------------------------+------------------------------------------------------+ +| :: | | +| | | +| | | +| +------------+------------+-----------+ | +------------+------------+-----------+ | +| | Header 1 | Header 2 | Header 3 | | | Header 1 | Header 2 | Header 3 | | +| +============+============+===========+ | +============+============+===========+ | +| | body row 1 | column 2 | column 3 | | | body row 1 | column 2 | column 3 | | +| +------------+------------+-----------+ | +------------+------------+-----------+ | +| | body row 2 | Cells may span columns.| | | body row 2 | Cells may span columns.| | +| +------------+------------+-----------+ | +------------+------------+-----------+ | +| | body row 3 | Cells may | - Cells | | | body row 3 | Cells may | - Cells | | +| +------------+ span rows. | - contain | | +------------+ span rows. | - contain | | +| | body row 4 | | - blocks. | | | body row 4 | | - blocks. | | +| +------------+------------+-----------+ | +------------+------------+-----------+ | ++---------------------------------------------------------------+------------------------------------------------------+ +| :: | | +| | | +| | | +| ===== ===== ====== | ===== ===== ====== | +| Inputs Output | Inputs Output | +| ------------ ------ | ------------ ------ | +| A B A or B | A B A or B | +| ===== ===== ====== | ===== ===== ====== | +| False False False | False False False | +| True False True | True False True | +| False True True | False True True | +| True True True | True True True | +| ===== ===== ====== | ===== ===== ====== | ++---------------------------------------------------------------+------------------------------------------------------+ + +Explicit Markup +--------------- + +Explicit markup blocks are used for constructs which float (footnotes), have no direct paper-document representation +(hyperlink targets, comments), or require specialized processing (directives). +They all begin with two periods and whitespace, the "explicit markup start". + ++---------------------------------------------------------------+-------------------------------------------------------------+ +| :: | | +| | | +| Footnote references, like [5]_. | Footnote references, like [5]_. | +| Note that footnotes may get | Note that footnotes may get | +| rearranged, e.g., to the bottom of | rearranged, e.g., to the bottom of | +| the "page". | the "page". | +| | | +| .. [5] A numerical footnote. Note | .. [5] A numerical footnote. Note | +| there's no colon after the ``]``. | there's no colon after the ``]``. | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| :: | | +| | | +| Autonumbered footnotes are | Autonumbered footnotes are | +| possible, like using [#]_ and [#]_. | possible, like using [#]_ and [#]_. | +| | | +| .. [#] This is the first one. | .. [#] This is the first one. | +| .. [#] This is the second one. | .. [#] This is the second one. | +| | | +| They may be assigned 'autonumber | They may be assigned 'autonumber | +| labels' - for instance, | labels' - for instance, | +| [#fourth]_ and [#third]_. | [#fourth]_ and [#third]_. | +| | | +| .. [#third] a.k.a. third_ | .. [#third] a.k.a. third_ | +| | | +| .. [#fourth] a.k.a. fourth_ | .. [#fourth] a.k.a. fourth_ | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| :: | | +| | | +| Auto-symbol footnotes are also | Auto-symbol footnotes are also | +| possible, like this: [*]_ and [*]_. | possible, like this: [*]_ and [*]_. | +| | | +| .. [*] This is the first one. | .. [*] This is the first one. | +| .. [*] This is the second one. | .. [*] This is the second one. | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| :: | | +| | | +| Citation references, like [CIT2002]_. | Citation references, like [CIT2002]_. | +| Note that citations may get | Note that citations may get | +| rearranged, e.g., to the bottom of | rearranged, e.g., to the bottom of | +| the "page". | the "page". | +| | | +| .. [CIT2002] A citation | .. [CIT2002] A citation | +| (as often used in journals). | (as often used in journals). | +| | | +| Citation labels contain alphanumerics, | Citation labels contain alphanumerics, | +| underlines, hyphens and fullstops. | underlines, hyphens and fullstops. | +| Case is not significant. | Case is not significant. | +| | | +| Given a citation like [this]_, one | Given a citation like [this]_, one | +| can also refer to it like this_. | can also refer to it like this_. | +| | | +| .. [this] here. | .. [this] here. | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| :: | | +| | | +| External hyperlinks, like Python_. | External hyperlinks, like Python_. | +| | | +| .. _Python: http://www.python.org/ | .. _Python: http://www.python.org/ | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| :: | | +| | | +| External hyperlinks, like `Python | External hyperlinks, like `Python | +| `_. | `_. | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| :: | | +| | | +| Internal crossreferences, like example_. | Internal crossreferences, like example_. | +| | | +| .. _example: | .. _example: | +| | | +| This is an example crossreference target. | This is an example crossreference target. | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| :: | | +| | | +| Python_ is `my favourite | Python_ is `my favourite | +| programming language`__. | programming language`__. | +| | | +| .. _Python: http://www.python.org/ | .. _Python: http://www.python.org/ | +| | | +| __ Python_ | __ Python_ | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| :: | .. _titles are targets, too: | +| | | +| Titles are targets, too | | +| ======================= | Titles are targets, too | +| | | +| Implict references, like `Titles are targets, too`_. | Implict references, like | +| | `Titles are targets, too`_. | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| | +|Directives are a general-purpose extension mechanism, | +| a way of adding support for new constructs without adding | +| | +| new syntax. For a description of all standard directives, | +| | +| see reStructuredText Directives (http://is.gd/2Ecqh). | +| | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| :: | | +| | | +| For instance: | For instance: | +| | | +| .. image:: magnetic-balls.jpg | .. image:: magnetic-balls.jpg | +| :width: 40pt | :width: 40pt | +| | | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| | +| | +| Substitutions are like inline directives, allowing graphics and arbitrary constructs within text. | +| | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| :: | | +| | | +| The |biohazard| symbol must be used on containers used to | The |biohazard| symbol must be used on containers used to | +| dispose of medical waste. | dispose of medical waste. | +| | | +| .. |biohazard| image:: biohazard.png | .. |biohazard| image:: biohazard.png | +| :align: middle | :align: middle | +| :width: 12 | :width: 12 | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| | +| Any text which begins with an explicit markup start but doesn't | +| use the syntax of any of the constructs above, is a comment. | +| | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| :: | | +| | | +| .. This text will not be shown | .. This text will not be shown | +| (but, for instance, in HTML might be | (but, for instance, in HTML might be | +| rendered as an HTML comment) | rendered as an HTML comment) | ++---------------------------------------------------------------+-------------------------------------------------------------+ +| :: | | +| | | +| An "empty comment" does not | An "empty comment" does not | +| consume following blocks. | consume following blocks. | +| (An empty comment is ".." with | (An empty comment is ".." with | +| blank lines before and after.) | blank lines before and after.) | +| | | +| .. | .. | +| | | +| So this block is not "lost", | So this block is not "lost", | +| despite its indentation. | despite its indentation. | ++---------------------------------------------------------------+-------------------------------------------------------------+ + +Credits +------- + +https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst diff --git a/_sources/dagor-home/index.rst.txt b/_sources/dagor-home/index.rst.txt new file mode 100644 index 000000000..a7d2f58e7 --- /dev/null +++ b/_sources/dagor-home/index.rst.txt @@ -0,0 +1,14 @@ + +Dagor Home +========================================= + +The Dagor Engine's resources and essential information. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + dagor_engine.md + documentation/index.rst + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor-max-tools/dagor_max_tools.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor-max-tools/dagor_max_tools.md.txt new file mode 100644 index 000000000..a9eb73fa4 --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor-max-tools/dagor_max_tools.md.txt @@ -0,0 +1,282 @@ +# Dagor Max Tools + +*3ds Max* includes several *Dagor tools* that are particularly useful for our +workflow. + +- **Dagor Scene Export:** A tool for exporting assets, animations, and more. +- **Dagor Utility:** A tool for procedural model adjustments. + +![Dagor Max Tools](_images/dagor_max_tools_01.jpg) + +## Connecting the Tools + +The tools are located here: `.../tools/dagor_cdk/windows-x86_64/plugins-3dsMax`. + +The process of connecting them is similar to other third-party plugins in *3ds +Max*: + +1. Go to **Customize** ▸ **Configure User and System Paths**. + + ![Dagor Max Tools](_images/dagor_max_tools_02.jpg) + +2. Select the **3rd Party Plugins** tab and use the **Add** button to add the + path to the tools. + + ![Dagor Max Tools](_images/dagor_max_tools_03.jpg) + +Let’s take a closer look at these tools. + +## Dagor Scene Export + +The *Dagor Scene Export tool* is used for exporting assets, particularly for +saving scenes into `.dag` files. This is the primary function of interest. + +![Dagor Max Tools](_images/dagor_max_tools_04.png) + +### Dagor Scene Exporter + +The buttons in the *Dagor Scene Exporter* interface have the following +functions: + +- **Export DAG:** This button is used to export the scene into a `.dag` file. +- **Export Parameter Buttons:** + - **hid:** Exports hidden objects in the scene (if the `sel` button is not + enabled). + - **sel:** Exports only the selected assets in the Viewport. + - **mesh:** Exports the geometry. + - **lt:** Exports the light sources. + - **cam:** Exports the cameras. + - **hlp:** Exports the helpers. + - **no vnorm:** Resets vertex normals during export. This does not alter the + model itself, but resets the normals upon export. It's recommended to adjust + the normals directly on the model to avoid issues in the future. For more + details, see [here](#no-vnorm-and-optimization). + - **mat:** Exports the materials. + - **mopt:** Optimizes materials during export (removes materials not assigned + to any geometry). + - **spl:** Exports the splines. + + ```{note} + These parameters now come with tooltips that provide additional explanations. + ``` + +In typical asset workflows, the following buttons are most frequently used: + +- **sel:** Use with caution, as it determines exactly what will be exported. +- **mesh:** Always used when exporting geometry. +- **mat:** Always used when exporting geometry with materials. +- **mopt:** Always used to optimize materials. + +### Export Mode + +The **Export Mode** section is extensive and merits a detailed explanation. The +descriptions above apply to the standard export mode, but alternative modes are +available for batch exports. Modes other than Standard are designed for +exporting multiple files at once. Instead of specifying a file path, you +indicate a directory path, and filenames are derived from the scene. + +- **Objects as dags:** As the name suggests, this mode exports each object as a + separate `.dag` file. The filename is taken from the object's name, and the + pivot is local – taken from the object, not from the scene center. This means + that even if the object is offset or scaled in the scene, it will be exported + in its original state, as if `rotation=location=[0,0,0]` and `scale=[1,1,1]`. + + To export multiple objects into a single `.dag` file in this mode, group the + objects. The group will be treated as a single object. + + ```{important} + When creating a group, its pivot position is automatically set by *Max* to + the center of the group's bounding box. This can result in the pivot being + offset, even if all components had their pivots aligned as intended. To avoid + this, you must manually adjust the pivot position between grouping and + exporting: + + ![Dagor Max Tools](_images/dagor_max_tools_05.png) + + ``` + + Export parameters in this mode function exactly as they do in standard export + – you can exclude hidden objects, export everything or only selected items, + etc. + +- **Layers as dags:** This mode saves layers as separate `.dag` files. The `hid` + and `sel` parameters behave slightly differently here since they apply to + layers rather than individual objects. + + **Export Rules:** + + - Only layers at the bottom of the hierarchy (those without nested layers) + will be exported. If a layer contains no objects that match the export + parameters, an empty `.dag` file will not be created. + - The `default` layer is never exported, as it's unlikely you'd need a + `default.dag`. However, nested layers within `default` are checked and will + be exported if they meet the specified criteria. + - If `sel=True`, only the current layer (indicated by a different icon color + in the Scene Explorer) and its nested layers will be checked. If + `sel=False`, all layers in the scene will be checked. + - If `hid=True`, hidden objects and layers will be exported. If `hid=False`, + hidden layers will not be exported, and hidden objects will be excluded. + +![Dagor Max Tools](_images/dagor_max_tools_06.png) + +For example, in the image above, the current layer is `asset_a.lods`. If +`sel=True`, only this layer and its child layers will be checked, while +`asset_b.lods` and `asset_c.lods` will be ignored along with their contents. + +- The current layer contains child layers, so it will not be exported. +- The child layer `asset_a.lod00` has no further nested layers, but it has two + visible nodes. It will be exported as `asset_a.lod00.dag` regardless of the + `hid` setting. +- The `asset_a.lod01` layer has no nested layers, but one node is hidden. If + `hid=True`, `asset_a.lod01.dag` will be exported with both nodes inside; if + `hid=False`, only the `axis.lod01` node will be exported. +- The `asset_a.lod02` layer will be exported as `asset_a.lod02.dag` only if + `hid=True`, as it is hidden. +- The `asset_a.lod03` layer will never be exported, as it contains no nodes, + making visibility irrelevant. + +This method is particularly useful when working with a pack of assets rather +than a single one. For example, by grouping the layers `asset_[a,b,c].lods` into +a general layer called `assets` and making it active (or simply activating the +`default` layer as shown above, or setting `sel=False`), you can re-export the +entire pack with all LODs in a single click. + +#### No VNorm and Optimization + +When exporting objects, if custom normals are not assigned, the object will be +exported without them, even if the **no vnorm** option is not enabled. + +However, unlike `.max` files, `.dag` files cannot store custom normals for only +a portion of an object's vertices while calculating the rest based on smoothing +groups. If even one vertex in an object has a custom normal, the `.dag` file +will store values for all vertices. + +**Example 1** + +In this example, we have a character model and a beveled cube with weighted +normals, with the cube being a separate object. + +![Dagor Max Tools](_images/dagor_max_tools_07.png) + +- Upon export, custom normals were preserved only for the cube, since the + character model had no custom normals assigned. +- After re-importing, we can see that the character model lacks custom normals + (normals are shown in blue in the Edit Normals modifier). +- The `.dag` file size is 75 KB. + +**Example 2** + +Here, the character model and cube were attached together into a single object +before export. + +![Dagor Max Tools](_images/dagor_max_tools_08.png) + +- During export, custom normals were saved for every vertex, not just those + belonging to the cube. +- After re-importing, all the vectors on the character model appear "greened + out," even though they originally looked like the previous image before + export. +- The `.dag` file size is 166 KB. + +Therefore, if you need to adjust shading using custom normals, it's advisable to +**detach** the editable part of the model before applying custom normals. This +way, the `.dag` file won't significantly increase in size after export. Be sure +to check after export by re-importing to see if any unnecessary normals +appeared. + +Once custom normals are assigned, even resetting them through the Edit Normals +modifier or attaching the object to a new one won't completely remove them. The +only reliable workaround is to export the objects to a `.dag` file with **no +vnorm**, delete the original, and then re-import the cleaned file. This ensures +all references to custom normals are removed, and export behavior will return to +normal. + +After such a re-import, apply **Dagor Utilities** ▸ **Materials** ▸ **Collapse +Materials** to prevent materials from being split into two copies with the same +names. + +### Export Log + +The Export Log records the results of each export operation. + +![Dagor Max Tools](_images/dagor_max_tools_09.png) + +If you encounter any export errors, do not ignore them. Check the log to +identify which objects in the scene are causing problems. Common errors include: + +- Presence of degenerate triangles. +- Presence of unsmoothed triangles. +- Geometry that is too large. +- Non-Dagor materials assigned. + +The log is now displayed in a separate, resizable window and will automatically +open during export only if errors are detected. If there are no warnings, the +export information is recorded, but the log window won't pop up. So, if the log +opens after export, carefully read it and address any issues. To view +information about the most recent export, you can manually open the log by +clicking the **(Re)open Log** button. If the log window was already open, +clicking the button will reset its size and position to default, which is useful +if the log was accidentally resized beyond the screen or moved off-screen. + +## Dagor Utility + +The *Dagor Utility tool* is designed for the automatic correction and refinement +of models. Below are the primary functions you'll likely use: + +```{important} +All these functions only work in **Editable Mesh** mode. +``` + +- **Remove degenerates**: This function removes degenerate triangles, which are + triangles with edges that lie on the same plane. If you encounter an error + during export indicating the presence of degenerate triangles, use this tool. + + ```{caution} + Sometimes, this function can disrupt the shading of the model. If that + happens, converting everything back to Editable Poly should resolve the issue. + ``` + +![Dagor Max Tools](_images/dagor_max_tools_10.png) + +- **Dagor -> Dagor New**: Converts the material assigned to a model from + *DagorMat1* to *DagorMat2*. + +- **Collapse materials**: Merges materials with the same name and identical + parameters into a single material. This is useful when importing multiple LODs + of the same object into *3ds Max*. By default, these LODs have duplicated + materials, so modifying the material on one LOD won't affect the others. This + function combines the duplicated materials into one. It's crucial to use this + function before making any modifications to the imported materials. + +- **Show maps on s.o. (selected objects)**: Forces textures to display on + objects with *Dagor* materials. There may be instances where textures don't + display correctly due to glitches – this button helps resolve that. + +- **Hide**: Forces textures to hide. + +- **StdMat -> DagorMat**: Converts a standard *3ds Max* material to a + *DagorMat*. The conversion is not perfect – it only transfers the diffuse + texture. However, it can still be useful in some situations. + +- **DagorMat -> StdMat**: The reverse procedure, converting *DagorMat* back to a + standard material. This process is also imperfect, but it might come in handy. + +![Dagor Max Tools](_images/dagor_max_tools_11.jpg) + +- **UV Utils**: Provides tools for modifying UV mapping: + - **Copy**: Copies UV mapping to another channel. + - **Swap**: Swaps UV mapping between channels. + - **Move**: Transfers UV mapping to another channel. + - **Kill**: Deletes UV mapping on a specific channel (i.e., specifying the + same channel in both channels). + - **CopyBuffer / PasteBuffer**: These theoretically allow copying UV mapping + from one model to another. This functionality has not been thoroughly + tested. + +![Dagor Max Tools](_images/dagor_max_tools_12.png) + +For additional optional tools that are installed separately, refer to the [Dagor +2 Max Tools documentation](../dagor2-3ds-max-tools/index.rst). + + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor-max-tools/index.rst.txt b/_sources/dagor-tools/addons/3ds-max/dagor-max-tools/index.rst.txt new file mode 100644 index 000000000..a09acd526 --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor-max-tools/index.rst.txt @@ -0,0 +1,14 @@ + +Dagor Max Tools +========================================= + +Dagor Max Tools - Core Toolset for 3ds Max + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + dagor_max_tools.md + + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/ambient_occlusion_baker.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/ambient_occlusion_baker.md.txt new file mode 100644 index 000000000..68ce402ee --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/ambient_occlusion_baker.md.txt @@ -0,0 +1,85 @@ +# Dagor 2 Ambient Occlusion Baker + +## Installation + +[Install the script](installation.md) following the provided instructions. + +```{important} +This script requires *3ds Max 2018* or newer version to run. +``` + +## Accessing the Ambient Occlusion Baker + +1. Navigate to **Gaijin Tools** ▸ **Ambient Occlusion Baker**. This will open + the main window of the **Dagor 2 AO Baker**. + +2. To verify the version **(3)** of the script, go to **Gaijin Tools (1)** ▸ + **About (2)**. The **About** window will display the current version. It's + important to check this regularly to ensure your script is up to date. + +![Ambient Occlusion Baker](_images/ao_baker_01.png) + +```{note} +Make sure that the plugin version is at least `1.4`. +``` + +## Using the Ambient Occlusion Baker + +1. Open the tool panel by navigating to **Gaijin Tools** ▸ **Ambient Occlusion + Baker**. + + ![Ambient Occlusion Baker](_images/ao_baker_02.png) + +2. Click the **Bake Selected Object (1)** button to generate Ambient Occlusion + (AO) for the selected object in the Viewport. Note that AO can only be baked + for one object at a time. + +3. The tool provides several options: + - **AO Tint Color:** Choose the color for the AO backlight. + - **AO Ambient Color:** Select the color for the minimum lighting of the AO. + - **Display AO on Viewport:** Toggle the display of AO in the viewport + (enabled by default). + - **Transfer AO to Map Channel:** Choose which channel the AO results will be + placed in (specific to *Dagor Engine*). By default, the AO is placed in + channel 8. + - **Visit toLearning Web Site:** Click to view this article. + - **Contact with Developer:** Access the developer's web page. + +4. To test the *AO Baker*, load the following test scene: [tree_AO_test_2021.max](https://drive.google.com/file/d/17sUOeN-S29WihYc2Vwcr5tq6_kDpTDpF/view?usp=drive_link). + +5. Open the scene and select the object `tree_vitellaria_wide_c.lod01`. + +6. For the test, configure the colors as shown below: + + ![Ambient Occlusion Baker](_images/ao_baker_03.png) + +7. Leave all other settings at their default values. Click **Bake Selected + Object** and wait for the progress bar indicating scene lighting to complete. + The result should appear as follows: + + ![Ambient Occlusion Baker](_images/ao_baker_04.png) + +8. To view the results, right-click on the Viewport and select the appropriate + display option: + + ![Ambient Occlusion Baker](_images/ao_baker_05.png) + +9. Then, change the selection from **Vertex Color** to **Map Channel Color** as + shown below: + + ![Ambient Occlusion Baker](_images/ao_baker_06.png) + +10. The AO should now be displayed correctly: + + ![Ambient Occlusion Baker](_images/ao_baker_07.png) + + +```{important} +- **Supported Model Types:** The script works correctly with **Edit Poly**, + **Edit Mesh**, and **GrowFX** model types. Other model types are not + supported, and using modifiers on the source model may cause errors when + generating LODs or collisions. +``` + + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/check_degenerated_faces_tool.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/check_degenerated_faces_tool.md.txt new file mode 100644 index 000000000..bc44b9a6f --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/check_degenerated_faces_tool.md.txt @@ -0,0 +1,89 @@ +# Dagor 2 Check Degenerated Faces Tool + +## Installation + +[Install the script](installation.md) following the provided instructions. + +```{important} +This script requires *3ds Max 2014* or newer version to run. +``` +## Overview + +This tool is designed to identify degenerate triangles in a scene by evaluating +two key criteria: the minimum area of triangles and the minimum angle within +triangles. + +Example of the tool's output: [check_deg_faces_00.gif](https://drive.google.com/file/d/1IHDPQDPAwsqVRiG1FEB8EGxbaEyy1dRT/view?usp=drive_link) + +## Accessing the Check Degenerated Faces Tool + +1. Navigate to **Gaijin Tools (1)** ▸ **Degenerated Triangles Checker...**. This + will open the **Error Log** window. + +2. To verify the version **(3)** of the script, go to **Gaijin Tools (1)** ▸ + **About (2)**. The **About** window will display the current version. It's + important to check this regularly to ensure your script is up to date. + +![Check Degenerated Faces Tool](_images/check_deg_faces_01.png) + +```{note} +Make sure that the plugin version is at least `1.7`. +``` + +## Using the Check Degenerated Faces Tool + +To get started, download the following test scene: +[degenerated_triangles_test_2021.max](https://drive.google.com/file/d/1ZTidZlfPrMWAbM_uoYjhz9QnvvUVt19l/view?usp=drive_link). + +```{important} +This scene requires *3ds Max 2021* or a newer version. +``` + +Open the script by navigating to the menu **(1)** and selecting the script +option **(2)**. + +![Check Degenerated Faces Tool](_images/check_deg_faces_02.png) + +The script window will appear with several key options: + +- **Minimum face area size (3):** Specifies the minimum area of triangles to be + considered degenerate. The value is based on the current scene units (e.g., + meters, inches). +- **Minimum face angle (4):** Sets the minimum angle for triangle evaluation. If + any angle within a triangle is smaller than this value, the triangle will be + marked as degenerate. The default values in these fields are typically optimal + for scenes imported from a `.dag` file, as the correct size and scale are + automatically set. +- **Show Log Window (5):** Enables a log that lists all objects and any + degenerate triangles found. +- **Show Degenerated Face(s) (6):** Automatically adds a new modifier to all + objects checked for degenerate triangles, highlighting the problematic areas + for easy identification. +- **Check Degenerated Triangles! (7):** Initiates the check process. +- **Save Settings (8):** Saves the current script settings. +- **Default Settings (9):** Loads the default settings. +- **Visit to LearningWeb Site (10):** Links to this documentation. +- **Contact with Developer (11):** Provides contact information for the + developer if assistance is needed. +- **Progress Bar Blue (12):** Displays the overall progress. +- **Progress Bar Green (13):** Shows the progress for the currently selected + object. + +### Running a Test + +To test the loaded scene, select an object and press the start button **(7)**. +For example, if you select a simple object, the results will appear quickly: + +![Check Degenerated Faces Tool](_images/check_deg_faces_03.png) + +As shown in the log, the object *stalingrad_water_tower_roof_lod01_col_tra_wood* +**(1)** contains 20 degenerate triangles **(2)**. These problematic triangles +are highlighted in the Viewport **(3)** using the modifier **(4)**. If you need +to revert the scene to its original state, simply remove the added modifier from +the highlighted objects. + +```{note} +On average, the tool processes around 1,000 triangles in about two seconds, so +larger objects or scenes may take longer. +``` + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/custom_groups_export_tool.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/custom_groups_export_tool.md.txt new file mode 100644 index 000000000..300beb5a7 --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/custom_groups_export_tool.md.txt @@ -0,0 +1,85 @@ +# Dagor 2 Custom Groups Export Tool + +## Installation + +The **Dagor 2 Custom Groups Export Tool** is a specialized script designed to +prepare scenes for export, automating the process of saving multiple groups of +objects with predefined properties into the `.dag` format. This script is not +included in the *Dagor Tool* set, as it is tailored for a specific mode of +object export. + +To install the script, simply drag and drop the `dagor2_export_custom_groups.ms` +file located at `.../dagor2_toolbox/base` **(0)** into the active Viewport of +*3ds Max* **(1)** (green marks on the picture below). This action will open the +*Dagor Custom Batch Exporter* script window. + +```{important} +This script requires *3ds Max 2013* or a newer version. + +Ensure that *Dagor Plugins* are installed before using this script. +``` + +![Custom Groups Export Tool](_images/custom_group_exp_01.png) + +## Using the Custom Groups Export Tool + +The script provides several configurable settings: + +- **Move to [0,0,0] (2):** Moves selected objects to the coordinate center + before export. After export, objects are returned to their original positions. +- **Reset XForm (3):** Automatically resets the *XForm* on selected objects + before export. +- **Convert to Editable Mesh (4):** Converts selected objects to **Editable + Mesh** before export. +- **Merge All Nodes (5):** Merges all selected objects within groups into a + single object and assigns the group name to this new object. If enabled, the + log will only display a general summary for the group. If disabled, the log + will detail which specific objects have degenerate triangles. + +```{note} +These settings only apply during export. Once the export is complete, the scene +will revert to its previous state. +``` + +### Export Settings + +- **Format (6):** Select the export format. The script is designed exclusively + for the *Dagor Engine*, so only the `.dag` format is available. +- **Path (7):** Displays previously saved export paths. These paths are + automatically added when you select an export path using button **... Export + Path (8)**. +- If checkbox **Export to Max File Location (10)** is enabled, list **(7)** and + button **(8)** become unavailable. This option allows you to export to the + directory where the current `.max` scene is saved. +- Clicking button **Max Folder (9)** opens the directory containing the current + `.max` scene in *Windows Explorer*. +- **Show prompt before export (11):** Enables the display of logs after export. + Any errors or warnings encountered during export will be shown. + +### Naming Conventions + +- **Change Names (12):** Enables the addition of prefixes and suffixes to the + names of exported objects. You can specify the prefix and suffix in text + fields **(14)** and **(13)**, respectively. For example, if the object name is + `OBJ_01`, by default, only the suffix `.lod00` will be applied, resulting in + the final file name `OBJ_01.lod00.dag`. + +### Collision Settings + +- **Collision Settings** block allows you to export collision objects based on a + prefix specified in text field **(16)**. To enable this function, check + checkbox **(15)**. The script will search for collision objects in the scene + that match the prefix (default: `Cls_`) specified in field **(16)**. If found, + these objects will be included in the export. Otherwise, they will be exported + as normal objects. + +### Additional Controls + +- **Export Selection (17):** Initiates the export process. Ensure that at least + one object with triangles is selected in the scene before proceeding. +- **Visit to Learning Web Site (18):** Opens a browser window with this + documentation. +- **Contact with Developer (19):** Displays the contact information for the + script developer. + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool.md.txt new file mode 100644 index 000000000..e656cf5de --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool.md.txt @@ -0,0 +1,98 @@ +# Dagor 2 Damages Setup Tool + +## Installation + +[Install the script](installation.md) following the provided instructions. + +```{important} +This script requires *3ds Max 2013* or newer version to run. +``` + +## Accessing the Damage Setup Tool + +1. Navigate to **Gaijin Tools (1)** ▸ **Damage Objects Setup... (2)**. + This will open the main window of the **Dagor 2 Damages Setup (3)**. + +2. To verify the version of the script, go to **Gaijin Tools (1)** ▸ **About + (4)**. The **About** window will display the current version. It's important + to check this regularly to ensure your script is up to date. + +![Damages Setup Tool](_images/damages_setup_01.png) + +```{note} +Make sure that the plugin version is at least `1.4`. +``` + +## Configuring the Damage Setup Tool + +Download the following test scene: +[dmg_example.max](https://drive.google.com/file/d/1B2ppFE_EY5JKeHJ10WesAY_6Ot78miXH/view?usp=drive_link) +and open the downloaded project in *3ds Max*. + +```{note} +The minimum supported version for this file is *3ds Max 2018*. +``` + +Open the utility window: + +![Damages Setup Tool](_images/damages_setup_02.png) + +Configure the following parameters: + +1. **Visible Object Parameters:** Define parameters for object chunks that will + be visually displayed in the game. Default settings are optimized for most + cases but can be customized as needed. + +2. **Collision Object Parameters:** Set parameters for the collisions generated + by the tool. These are pre-configured for common use cases, but you can + modify them to fit specific requirements. + +3. **Collision Rotation:** Adjust the rotation limits for generated collisions + to create more natural-looking destruction effects. + +4. **Max Points in Collision:** Specify the maximum number of points in a + generated collision. This option is only active if a convex hull is selected + as the collision type. + +5. **Collision Surface Displacement:** Define the displacement of the collision + surface relative to the object surface. This setting is also only active + when using a convex hull collision type. + +6. **Collision Name Postfix:** Add a postfix to the names of generated + collisions to easily distinguish them from other objects. + +7. **Collision Type:** Select the type of collision to generate. The default is + a box, but other options include sphere, capsule, and convex hull. + +8. **Overwrite Existing Parameters:** Use this checkbox to determine whether the + existing parameters in "Visible Object Parameters" and "Collision Object + Parameters" will be overwritten. If unchecked, all existing parameters will + be removed and replaced with the new ones. + +9. **Generate Collisions:** After selecting the objects for which you want to + generate collisions, click this button to start the process. + +10. **Documentation:** Click this button to access the current documentation. + +11. **Contact Author:** If you need additional information, use this button to + contact the author. + +12. **Progress Bar:** Displays the progress of the scene processing. For scenes + with many objects (50-100), this may take several minutes. + +## Generating Collisions + +1. Select the objects you want to generate collisions for **(A)**. +2. Prepare them for export to the engine. +3. Click the **Generate** button **(B)**. + +![Damages Setup Tool](_images/damages_setup_03.png) + +## Reviewing Generated Collisions + +After processing, a list of new objects **(C)** and generated collisions **(D)** +will appear. + +![Damages Setup Tool](_images/damages_setup_04.png) + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/editing_normals_tool.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/editing_normals_tool.md.txt new file mode 100644 index 000000000..347a35e8f --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/editing_normals_tool.md.txt @@ -0,0 +1,174 @@ +# Dagor Editing Normals Tool + +## Installation + +[Install the script](installation.md) following the provided instructions. + +```{important} +This script requires *3ds Max 2023* or newer version to run. +``` + +## Overview + +The *Editing Normals Tool* provides comprehensive functionality for generating +and transferring vegetation normals using all widely recognized methods +available at the time of publication. It supports: + +- **Puffiness**, similar to the technique used in *SpeedTree*. +- **Polysurface Method**, as demonstrated by Guerrilla Games' Gilbert Sanders + during the 2018 GDC session on *Horizon Zero Dawn*. +- **Classic Normal Transfer**, via the *Noors Normal Thief* approach, which + transfers normals from a parent object. + +Example of the tool's output: +[editing_normals_00.gif](https://drive.google.com/file/d/1f8c4idDREgLSav8ov20TXvwzSwPupsuu/view?usp=drive_link) + +## Accessing the Editing Normals Tool + +1. Navigate to **Gaijin Tools (1)** ▸ **Dagor Editing Normals Tool...**. This + will open the main window of the *Dagor Editing Normals Tool*. + +2. To verify the version **(3)** of the script, go to **Gaijin Tools (1)** ▸ + **About (2)**. The **About** window will display the current version. It's + important to check this regularly to ensure your script is up to date. + +![Editing Normals Tool](_images/editing_normals_01.png) + +```{note} +Make sure that the plugin version is at least `1.6`. +``` + +## Using the Editing Normals Tool + +To begin, open the tool panel by navigating to **Gaijin Tools** ▸ **Dagor +Editing Normals Tool**. + +Download the following test scene: +[tree_example.max](https://drive.google.com/file/d/1CNkq4Y6LVBvwzL67XplG-Vu5MA5Kx-4J/view?usp=drive_link). + +```{important} +This scene requires *3ds Max 2024* or a newer version. +``` + +### Interface Overview + +The *Editing Normals Tool* interface is divided into three main sections: +*Puffiness Settings*, *Polysurface Settings*, and *Classic Normals Thief +Settings*, with a *General Settings* block that affects all three sections. + +![Editing Normals Tool](_images/editing_normals_02.png) + +- **From Ground Center Offset (1):** Adjusts the elevation of the Puffiness + build point from the ground to the center of the build. +- **Start Puffiness! (2):** Initiates the Puffiness generation process. +- **Strength % (10):** Controls the blending ratio between the new and existing + normals on the object. This is crucial when you only need to partially replace + the normals' weight. A typical range is 70-90%. +- **Display Normals Length (11):** Determines the duration that normals are + displayed in the Viewport. + +### Working with Puffiness + +To see how Puffiness works, set parameter **Strength % (10)** to `100` and +parameter **Display Normals Length (11)** to `100` for clear visibility. Note +that the normal length is dependent on the scene’s scale and units. Select the +palm tree in the test scene (you can also process multiple objects or LODs at +once). Press the **Start Puffiness! (2)** button to generate the normals: + +![Editing Normals Tool](_images/editing_normals_03.png) + +Initially, the center aligns with the tree’s base, near the Pivot. If needed, +adjust the center by setting **From Ground Center Offset (1)** to 2500. Remove +the **EditNormals** modifier generated by the script before re-running the +process. After pressing the **Start Puffiness! (2)** button again, you should +see the result: + +![Editing Normals Tool](_images/editing_normals_04.png) + +As you can see, everything is much better with the crown. With the crown +adjusted, set the **Strength % (10)** to 80%, remove the **EditNormals** +modifier again, and run the process: + +![Editing Normals Tool](_images/editing_normals_05.png) + +The result shows improved lighting on the large palm leaves, though issues may +still exist with the root system. To address this, you may need to edit the +normals on the roots separately. Some tree bark normals might remain unedited, +shown as blue. The **Keep Normals on Material Name (12)** parameter is vital +here, as it allows you to specify which materials' normals will be processed. + +![Editing Normals Tool](_images/editing_normals_06.png) + +For instance, if the bark is named "bark," ensure that "bark" is listed in +**(12)**. This field supports RegExp, enabling precise control over which +materials are included or excluded from processing. After adjusting the +expression, set the **From Ground Center Offset (1)** parameter to zero. After +all, the center of illumination of the root beam should be just somewhere at +zero. At the Pivot point of the object. Set the parameter of normal +transfer strength **(10)** to 80% and rerun the Puffiness generation: + +![Editing Normals Tool](_images/editing_normals_07.png) + +### Polysurface Settings + +The *Polysurface Settings* block provides advanced tools for generating and +transferring normals, originally used in the *Horizon Zero Dawn* project. More +details about the method see +[here](https://www.youtube.com/watch?v=wavnKZNSYqU). + +To apply similar lighting effects to your tree, select the tree without the +**EditNormals** modifier and configure the *Polysurface Settings* and +**General Group** as shown below. Ensure that "bark" is excluded from normal +adjustments: + +![Editing Normals Tool](_images/editing_normals_08.png) + +After applying, you should see a result similar to this: + +![Editing Normals Tool](_images/editing_normals_09.png) + +You can remove the Polysurface after generation using **Delete PSurface after +Transfer (6)** checkbox. + +```{note} +All Polysurface parameters are sensitive to the scene size and object scale. If +values are set too high, Polysurface may not generate; too low, and it could +generate with excessive triangles, causing processing issues in *3ds Max*. +``` + +Adjust these settings carefully: + +- **Polysurface Size (3):** Controls surface smoothness. A larger value results + in a smoother surface, while a smaller value creates more detailed but less + smooth surfaces. +- **Polysurface Tension (4):** Sets the surface tension. A value of 1.0 creates + a maximally bulged surface, and 0.0 creates a tight surface. Typically, 0.5 is + optimal, though this may vary based on the object type (e.g., higher for + conifers, lower for palm trees). +- **Polysurface Accuracy (5):** Defines the step size for generating surface + triangles. Smaller steps yield more precise surfaces but increase the triangle + count exponentially. Usually 20-30 thousand triangles are enough to get an + excellent result of Polysurface generation. Carefully reduce the value. + Reducing the value by 2 times you increase the number of resulting triangles + from 4x to 9 times! + +### Classic Normals Thief Method + +The *Normals Thief* method, dating back to 2008, allows manual creation and +projection of normals. Select the source object with the **Source Object (8)** +button, and project normals onto the target object using the **Steal ! (9)**. +More details are available here: [Noors Normal +Thief](http://www.scriptspot.com/3ds-max/scripts/noors-normal-thief) + +In the *General Block*, you can adjust the normal transfer strength (**10**) +(default: 50%). Setting this to 100% replicates the classic *Normals Thief* +behavior. You can also clear the material exclusion mask for full normal +transfer, mimicking the original tool's functionality. + +- **Progress bar (13):** Progress bar. +- **Visit to Learning Web Site (14):** Access this article. +- **Contact with Developer (15):** Contact the author for additional support. + + + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties.md.txt new file mode 100644 index 000000000..36b792345 --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties.md.txt @@ -0,0 +1,57 @@ +# Dagor 2 Fast Editor User Properties + +## Installation + +[Install the script](installation.md) following the provided instructions. + +```{important} +This script requires *3ds Max 2012* or newer version to run. +``` + +## Accessing the Fast Editor User Properties + +- Press **Ctrl+Shift** to open the floating panel: + + ![Fast Editor panel](./_images/fast_properties_panel.png) + +- Closing the panel by pressing **X** disables this editor completely. To return + the toggle behavior, reopen the editor from the **Gaijin Tools** ▸ **Dagor 2 + Fast Properties...** + + ![Fast Properties in the menu](./_images/fast_properties_in_menu.png) + +## Using the Fast Editor User Properties + +The panel buttons shown in the picture above perform several key functions: + +1. **Copy Obj User Defined:** Copies the User-Defined Properties of the **first + selected object** to the system clipboard as plain text. + + ```{note} + The other toolbar buttons apply to all selected objects. + ``` + +```{note} +Fast access is limited to the first 20 selected objects to prevent performance +degradation with larger selections. +``` +2. **Paste Obj User Defined:** Pastes the text from the system clipboard into + the Properties of all selected objects. +3. **Clear Obj User Defined:** Clears the Properties of all selected objects. +4. **Vertex Color ON:** Enables the display of Vertex Color in the Viewport. +5. **Vertex Color OFF:** Disables the display of Vertex Color in the Viewport. + +6. The **Display Properties on Viewport** checkbox allows you to display +Properties directly in the viewport, near the pivot point of each object. + +7. The block of **Objects** below displays **copies** of the Properties of the +selected objects. Editing the text in this panel will not modify the actual +object properties. To make changes, use the **Clear** and **Paste** buttons. + +8. The support section at the bottom of the panel provides quick access to the +documentation via the **Visit to Learning Web Site** button. Since you're +already here, you may have found it. For further assistance, contact the tool +developer by clicking the **Contact with Developer** button. + + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fix_normal_orientation_tool.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fix_normal_orientation_tool.md.txt new file mode 100644 index 000000000..f0c53f2a1 --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fix_normal_orientation_tool.md.txt @@ -0,0 +1,46 @@ +# Dagor 2 Fix Normal Orientation Tool + +## Installation + +[Install the script](installation.md) following the provided instructions. + +```{important} +This script requires *3ds Max 2013* or newer version to run. +``` + +## Accessing the Fix Normal Orientation Tool + +1. Navigate to **Gaijin Tools (1)** ▸ **Fix Normal Orientation... (2)**. This + will open the main window of the **Dagor 2 Fix Normals Orientation script + (3)**. + +2. To verify the version of the script, go to **Gaijin Tools (1)** ▸ **About + (4)**. The **About** window will display the current version. It's important + to check this regularly to ensure your script is up to date. + +![Fix Normal Orientation Tool](_images/fix_normal_orient_01.png) + +```{note} +Make sure that the plugin version is at least `1.4`. +``` + +## Using the Fix Normal Orientation Tool + +After exporting objects, you may encounter issues with normals in *daEditor*, as +shown in the screenshot below: + +![Fix Normal Orientation Tool](_images/fix_normal_orient_02.png) + +The *Fix Normal Orientation Tool* is designed to resolve these issues in most +cases. To correct the normals: + +1. In the Viewport, select the objects with incorrect normals. +2. Click the **Fix Normals from Selection** button. + +This should correct the normals for the selected objects. In most cases, the +issue is resolved upon re-export. See the screenshot below for an example of the +corrected normals: + +![Fix Normal Orientation Tool](_images/fix_normal_orient_03.png) + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fixing_illegal_characters.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fixing_illegal_characters.md.txt new file mode 100644 index 000000000..8dc70bf90 --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fixing_illegal_characters.md.txt @@ -0,0 +1,116 @@ +# Dagor 2 Fixing Illegal Characters Tool + +## Installation + +[Install the script](installation.md) following the provided instructions. + +```{important} +This script requires *3ds Max 2013* or newer version to run. +``` + +## Accessing the Fixing Illegal Characters Tool + +1. Navigate to **Gaijin Tools (1)** ▸ **Fix Illegal Characters...**. This + will open the main window of the **Dagor 2 Fix Illegal Characters script**. + +2. To verify the version of the script, go to **Gaijin Tools (1)** ▸ **About + (2)**. The **About** window will display the current version. It's important + to check this regularly to ensure your script is up to date. + +![Fixing Illegal Characters Tool](_images/fixing_illegal_chars_01.png) + +```{note} +Make sure that the plugin version is at least `1.4`. +``` + +## Using the Fixing Illegal Characters Tool + +To begin, run the script from the **GaijinTools ▸ Fix Illegal Characters... +(1)** menu. The following window will appear: + +![Fixing Illegal Characters Tool](_images/fixing_illegal_chars_02.png) + +### Tool Options + +- **Illegal Characters List (2):** Enter or delete illegal characters in this + field. +- **Replace with Characters (3):** Specify characters to replace the illegal + ones. If left blank, illegal characters will be removed. This option supports + UTF-8, including hieroglyphs, Slavic languages, and Arabic characters, etc. +- **Latinization of the Russian (4):** Converts all Russian characters to Latin + according to standard Latinization rules. If unchecked, Russian characters + will be replaced with the characters specified in the **Replace with + Characters** (3) field. +- **Log Warning Bitmap Path Name (5):** Logs warnings for file paths containing + illegal characters to the log window **(17)**. + + ```{note} + No substitutions are made; this only outputs warnings. + ``` +- **Log Warning Texture Maps Names (6):** Logs warnings for texture names + containing illegal characters to the log window **(17)**. + + ```{note} + No substitutions are made; this only outputs warnings. + ``` +- **Fix Layers Names (7):** Replaces illegal characters in layer names with the + specified replacement characters. + + ```{note} + Layer 0 (default) cannot be renamed. + ``` + + There cannot be layers with the same name. If naming conflicts occur or + renaming fails, a warning is displayed in the log window **(17)**: + + ![Fixing Illegal Characters Tool](_images/fixing_illegal_chars_03.png) + +- **Fix Objects Names (8):** Replaces illegal characters in object names with the + specified replacement characters. For check naming it's necessary to select + objects. + + ```{note} + This may result in objects having identical names. + ``` + +- **Fix Materials Names (9):** Replaces illegal characters in material names + with the specified replacement characters. + + ```{note} + This may result in materials having identical names. + ``` + +- **All Changes to Lower Case (10):** Converts all names to lower case and + performs checks in lower case. +- **DAG Export After Fixing Illegal Characters (11):** Opens the DAG format + export window after all checks are complete. + + ```{note} + Ensure you are familiar with how *Dagor 2 plugins* work before enabling this + option. + ``` + +- **Save Current Settings (12):** Saves the current settings. +- **Load Default Settings (13):** Loads the default settings. +- **FIX ILLEGAL CHARACTERS FROM SELECTION (14):** Executes the script to fix + illegal characters in the selected objects. +- **Visit to Learning Website (15):** A link to this article. +- **Get in Touch with the Author (16):** Contact the author if the article does + not resolve your issue. +- **Errors Log (17):** Displays information about the results of the checks and + any changes made. + +If the scene contains no errors, you will see a window like this: + +![Fixing Illegal Characters Tool](_images/fixing_illegal_chars_04.png) + +Any errors will be highlighted in red and labeled as **ERROR!** or **WARNING!**: + +![Fixing Illegal Characters Tool](_images/fixing_illegal_chars_05.png) + +A scene containing multiple errors may produce results like this: + +![Fixing Illegal Characters Tool](_images/fixing_illegal_chars_06.png) + + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/index.rst.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/index.rst.txt new file mode 100644 index 000000000..35e450d47 --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/index.rst.txt @@ -0,0 +1,26 @@ + +Dagor 2 3ds Max Tools +========================================= + +Dagor 2 3ds Max Tools - Additional Toolset for 3ds Max. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + installation.md + damages_setup_tool.md + fix_normal_orientation_tool.md + fixing_illegal_characters.md + fast_editor_user_properties.md + lods_and_collisions_generator.md + ambient_occlusion_baker.md + pivot_painter_vegetation_tool.md + custom_groups_export_tool.md + editing_normals_tool.md + transfer_vertex_position_to_vertex_color_tool.md + check_degenerated_faces_tool.md + simple_cmp_editor.md + + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/installation.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/installation.md.txt new file mode 100644 index 000000000..69edda45a --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/installation.md.txt @@ -0,0 +1,55 @@ +# Installation + +```{important} +If you have already installed any of the *Dagor 2 3ds Max Tools*, you should +uninstall the previous version. + +If you are installing the tools for the first time, skip the **Uninstallation +Steps** section. +``` + +## Uninstallation Steps + +1. Go to **Customize User Interface**. +2. Choose **Menus** tab. +3. Delete **GaijinTools** from **Main Menu Bar**. +4. Now you can close the **Customize User Interface** window. + + ![Uninstall Steps](_images/inst_uninstall.png) + +5. Close the *3ds Max*. +6. Remove all **GJ_Tools\*.mcr** files from usermarcos directory. It should be + located here by default: + + ``` + C:\Users\USER_NAME\AppData\Local\Autodesk\3dsMax\YOUR_3DS_MAX_VERSION\ENU\usermacros + ``` + +7. Remove all startup scripts, that you did not added yourself. Default path: + + ``` + C:\Users\USER_NAME\AppData\Local\Autodesk\3dsMax\YOUR_3DS_MAX_VERSION\ENU\scripts\startup + ``` + +## Clean Installation + +For a clean installation, follow these steps: + +1. Open **Customize** ▸ **Configure User and Subsystem Paths**. +2. Go to **User and System** tab. +3. Select the **Additional Startup Scripts** line and click the **Modify...** + button. +4. Specify path to: + + ``` + .../dagor2_toolbox/base + ``` + +5. Confirm the changes by clicking **OK**. + + ![Configuring Path](_images/inst_configuring_path.png) + +6. Restart *3ds Max*. The script will automatically add the **Gaijin Tools** + menu right after the **Help** menu. + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/lods_and_collisions_generator.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/lods_and_collisions_generator.md.txt new file mode 100644 index 000000000..6b50d6616 --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/lods_and_collisions_generator.md.txt @@ -0,0 +1,171 @@ +# Dagor 2 LODs and Collisions Generator + +## Installation + +[Install the script](installation.md) following the provided instructions. + +```{important} +This script requires *3ds Max 2018* or newer version to run. +``` + +## Overview + +This script provides superior triangle optimization compared to tools like +*MultiRes* or *ProOptimizer*. It simplifies the process by requiring only a +single button press. The script more accurately preserves texture coordinates +and texture coordinate edges. Additionally, the advanced features support +high-quality collision generation and specific settings tailored for the *Dagor +Engine*. + +### Comparison of Optimization Quality + +The following image illustrates the differences in optimization quality: + +![LODs and Collisions Generator](_images/lod_generator_00.png) + +### Key Advantages + +1. **More Accurate Contour Representation:** The optimized model more closely + follows the original object's contours. +2. **Increased Segment Density:** More segments are generated along the radius, + resulting in a finer mesh. +3. **Enhanced Knot Detail Preservation:** Critical details, such as knots, are + retained, which are often lost in other optimization methods. + +The script optimizes the placement of triangles more effectively, ensuring the +shape of the object is conveyed with greater precision, even with the same +number of triangles. + +## Accessing the LODs and Collisions Generator + +1. Navigate to **Gaijin Tools (1)** ▸ **LOD Generator...**. This will open the + main window of the **Dagor 2 LOD Generator**. + +2. To verify the version **(3)** of the script, go to **Gaijin Tools (1)** ▸ + **About (2)**. The **About** window will display the current version. It's + important to check this regularly to ensure your script is up to date. + +![LODs and Collisions Generator](_images/lod_generator_01.png) + +```{note} +Make sure that the plugin version is at least `1.4`. +``` + +## Using the LODs and Collisions Generator + +To open the script window, navigate to **Gaijin Tools** ▸ **LOD Generator...** +in the menu. + +![LODs and Collisions Generator](_images/lod_generator_02.png) + +### Key Parameters and Controls + +- **Vertex % (1):** Defines the percentage by which the number of triangles is + reduced in each LOD. For example, LOD01 will contain 50% of the original + model's triangles, LOD02 will have 25%, and so on. + +- **Iterations (2):** Specifies the number of iterations for the optimization + algorithm. Higher iterations generally yield better quality in point + placement. The optimal number of 10 was determined experimentally, though in + some cases, using the maximum allowable value is recommended. + +- **Number of LODs:** Specifies how many LODs will be created. + +- **LOD Postfix (3):** Sets the postfix for the names of newly optimized + objects. + +- **Build LODs! (4):** Initiates the generation process. The script can batch + process all selected models, creating LODs or collisions for each. + +```{important} +- **Supported Model Types:** The script works correctly with **Edit Poly**, + **Edit Mesh**, and **GrowFX** model types. Other model types are not supported + and may cause errors. Note that all modifiers applied to LODs and collisions + will be removed if they were used on the model from which LODs or collisions + are generated. +``` + +This basic functionality covers the use of *MultiRes* and *ProOptimizer*. For +users familiar with these tools, the script should suffice for achieving optimal +results. For more advanced collision generation and further optimization without +visual quality loss, consider exploring the advanced settings detailed below. + +### Advanced Settings + +To access advanced settings, activate the **Use Advanced Options (5)** checkbox. +These settings provide greater control over the generation process. + +1. **Loading the Test Scene:** Load the following test scene: + [tree_cocos_nucifera.max](https://drive.google.com/file/d/1Bp0vh8LjRmponZKrd6O9umSSRHQKdsfs/view?usp=drive_link). + + ```{important} + This scene requires *3ds Max 2021* or a newer version. + ``` + + This scene features a complex object with a Multi/Sub Material applied. It is + crucial that Sub Materials are correctly named, as this influences collision + generation. + +2. **Material Keyword Filtering:** In **Keep Material Name (16)** field, you can + enter keywords separated by commas to specify which materials should be + retained during collision generation. For example, on a palm tree, you might + exclude roots and fruits but retain anything named "bark." Materials matching + the specified keywords will be preserved, while all others, along with their + associated triangles, will be removed. + + **Example:** Highlight the palm tree, enable advanced options via checkbox + **(5)**, and enter "bark" in field **(16)**. Run the script by clicking + button **(4)**. The result will show that all unnecessary triangles (e.g., + leaves, roots, fruits) have been removed from the collision generation: + + ![LODs and Collisions Generator](_images/lod_generator_04.png) + + This filtering can be toggled off using **Collision Use Name Mask (10)** + checkbox . + + ```{warning} + If the object does not have a Multi/Sub Material, the script will issue a + warning and skip processing. No changes will be made in such cases. + ``` + +3. **Collision Height Cutoff:** Enabling **Collision Cut FromTop (7)** checkbox + allows you to cut off the collision mesh at a specified height, set in + **Collision Cut Height (14)** parameter. This can be useful for optimizing + performance by removing unnecessary upper parts of the collision mesh, such + as branches or trunks that characters cannot interact with. + + **Example:** Highlight the palm tree, ensure checkbox **(7)** is enabled, and + set the desired cutoff height in parameter **(14)**. Run the script with + button **(4)** again to see the result: + + ![LODs and Collisions Generator](_images/lod_generator_05.png) + +4. **Dagor Material Assignment:** If **Collision Assign Dagor Mat (8)** checkbox + is enabled, the collision mesh is assigned to **Dagor Material 2** with the + `gi_black` setting, and the material name is set to `cls`. + +5. **Additional Options:** + + - **Collision Generation (6):** Enables or disables collision generation. + - **Replace Custom Properties (9):** Allows replacing custom object + properties with those specified in fields **LODs Custom Properties (17)** + for LODs and **Collision Custom Properties (18)** for collisions. If + unchecked, custom properties will be copied from the selected objects + during generation. + +6. **Future Development:** + + - **Collision Remove Small Parts (11)** and **Collision Part Size % (13):** + Reserved for future updates. This feature will allow the removal of small, + non-essential parts of the object (e.g., small twigs or debris) based on + their bounding box size. This will help further optimize LODs and + collisions. + +### Support + +For additional assistance, buttons **(19)** provide quick access to this article +and an option to contact the developer. + + + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/pivot_painter_vegetation_tool.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/pivot_painter_vegetation_tool.md.txt new file mode 100644 index 000000000..4951b1130 --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/pivot_painter_vegetation_tool.md.txt @@ -0,0 +1,100 @@ +# Dagor 2 Pivot Painter Vegetation Tool + +## Installation + +[Install the script](installation.md) following the provided instructions. + +```{important} +This script requires *3ds Max 2015* or newer version to run. +``` + +## Accessing the Pivot Painter Vegetation Tool + +1. Navigate to **Gaijin Tools** ▸ **Pivot Painter Vegetation Tool**. This will + open the main window of the **Dagor 2 Pivot Painter Tool**. + +2. To verify the version **(3)** of the script, go to **Gaijin Tools (1)** ▸ + **About (2)**. The **About** window will display the current version. It's + important to check this regularly to ensure your script is up to date. + +![Pivot Painter Vegetation Tool](_images/pivot_painter_01.png) + +```{note} +Make sure that the plugin version is at least `1.4`. +``` + +## Using the Pivot Painter Vegetation Tool + +To begin, open the **Pivot Painter Vegetation Tool** by navigating to **Gaijin +Tools** ▸ **Pivot Painter Vegetation Tool**. + +Download the following test scene: [tree_oak_test_2021.max](https://drive.google.com/file/d/1-emRZYAaXEJ09EgGQnMjzUxQkfmLEu-h/view?usp=drive_link). + + ```{important} + This scene requires *3ds Max 2021* or a newer version. + + Be sure to have installed *GrowFX* no lower than version `2.0.1`. + ``` + +The tool window will appear as shown below: + +![Pivot Painter Vegetation Tool](_images/pivot_painter_02.png) + +### Key Features and Controls + +1. **Pick (1):** Choose the *GrowFX* object that will serve as the parent for + all other elements of the tree. +2. **Texture Save Path (2):** Select the directory where the generated position + and rotation textures will be saved. For more information about these + textures and their purpose, refer to the article: [Pivot Painter Wind on + Vegetation for daNetGame-based + Projects](../../../../tutorials/pivot_painter_wind.md). +3. **Final Object Name (3):** Specify a custom name for the resulting object. By + default, the tool assigns the name of the selected object. +4. **Start Creation (4):** Initiates the tool's operation. +5. **Visit to Learning Web Site (5):** Provides access to this article. +6. **Contact with Developer (6):** Opens a link to contact the tool's author. + +### Workflow Example + +1. Select `tree_oak_large_a` and navigate to the **Modify** panel. Locate the + **Create Hierarchy of Meshes** button. Ensure the **Group by Path Color** + checkbox is unchecked before clicking the button. + +2. The script will generate a large number of hierarchically connected objects + within the layer: + + ![Pivot Painter Vegetation Tool](_images/pivot_painter_03.png) + +3. Select all the contents of this layer and assign the material previously + applied to `tree_oak_large_a`. The tool is now ready to work. + +4. Select the parent object using button **(1)** at the beginning of the + hierarchy. This object is the root of all branches in the tree: + + ![Pivot Painter Vegetation Tool](_images/pivot_painter_04.png) + +5. Use button **(2)** to specify the output path for the resulting `.dds` + textures. Press button **(4)** to generate the textures `pivot_pos.dds` and + `pivot_dir.dds`, along with a new **WIND** layer containing the completed + object with the assigned name. + + ![Pivot Painter Vegetation Tool](_images/pivot_painter_05.png) + +6. After generating the textures, follow the instructions in the document: + [Pivot Painter Wind on Vegetation for daNetGame-based + Projects](../../../../tutorials/pivot_painter_wind.md). + +```{important} +- **Script Limitations:** Unlike the *Houdini* graph version, this script is + limited to a maximum of 4 hierarchy levels within *GrowFX*. Consequently, the + number of allowed links is restricted to 4x. In *Houdini*, any levels beyond + the 4th will be merged into the last one, while this script will discard and + not display them. +- **Object Limitations:** Both this script and *Houdini* impose a limit of 2048 + objects, derived from the maximum allowed texture size. Any objects exceeding + this limit will be ignored by the script, and *Houdini* will also disregard + them. +``` + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/simple_cmp_editor.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/simple_cmp_editor.md.txt new file mode 100644 index 000000000..0e3c78632 --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/simple_cmp_editor.md.txt @@ -0,0 +1,202 @@ +# Dagor 2 Simple CMP Editor + +```{caution} +This tool is currently under development! +``` + +## Installation + +[Install the script](installation.md) following the provided instructions. + +```{important} +- This script requires *3ds Max 2021* or newer version to run. +- Make sure that the plugin version is at least `1.8`. +- This *Simple CMP Editor* requires the + [Dagor 2 Fast Editor User Properties](fast_editor_user_properties.md), which + is part of the toolbox. +``` +## Accessing the Simple CMP Editor + +To get started, ensure that your toolbox is up to date. Then, drag and drop +`dagor2_CMP_GeneratorSimple.ms` into the Viewport. + +- Press **Ctrl+Shift** to open the floating panel: + + ![Fast Editor panel](_images/fast_properties_panel.png) + +- Closing the panel by pressing **X** disables this editor completely. To return + the toggle behavior, reopen the editor from the **Gaijin Tools** ▸ **Dagor 2 + Fast Properties...** + + ![Fast Properties in the menu](_images/fast_properties_in_menu.png) + +- To open the main window of the *Dagor2 CMP Exporter*, navigate to **Gaijin + Tools** ▸ **Dagor CMP Exporter...** (1).. + +- To verify the version **(2)** of the script, go to **Gaijin Tools** ▸ + **About**. The **About** window will display the current version. It's + important to check this regularly to ensure your script is up to date. + +![Simple CMP Editor](_images/simple_cmp_01.png) + +## Using the Simple CMP Editor + +All node properties are stored in Object Properties. The script automatically +updates these properties when the position, rotation, or scale of an object +changes. Below is an example: + +![Node properties example](_images/simple_cmp_node_prop_example.png) + +Always use the *CMP Exporter* to edit properties. The following is a list of +currently supported properties: + +### Supported Properties + +| Property | Example | Description | +|--------------|----------------|-------------| +| `place_type:i` | `place_type:i = 1` | "No Collision Type"=0, "Place Pivot"=1, "Place Pivot and use Normal"=2, "Place 3-point (bbox)"=3, "Place Foundation (bbox)"=4, "Place on Water (flootable)"=5, "Place Pivot with Rendinst Collision"=6 | +| `rot_x:p2` | `rot_x:p2=90, 2` | Rotates the node 90° on the chosen axis, then applies a random angle between -2° and 2°. | +| `rot_y:p2` | `rot_y:p2=0, 30` | Rotates the node randomly on the chosen axis between -30° and 30°. | +| `rot_z:p2` | `rot_z:p2=90, 2` | Rotates the node 90° on the chosen axis, then applies a random angle between -2° and 2°. | +| `offset_x:p2` | `offset_x:p2=1, 2` | Moves the node 1 unit along the x-axis, then randomly between +/-2 units. | +| `offset_y:p2` | `offset_y:p2=1, 2` | Moves the node 1 unit along the y-axis, then randomly between +/-2 units. | +| `offset_z:p2` | `offset_z:p2=1, 2` | Moves the node 1 unit along the z-axis, then randomly between +/-2 units. | +| `scale:p2` | `scale:p2=1.5, 0.1` | Uniformly scales the node to 1.5, with variation in the range [-0.1 .. 0.1]. | +| `yScale:p2` | `yScale:p2=1, 0.1` | Alters the node height by a value in the range [-0.1 .. 0.1]. | +| `tm:m` | `tm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [0.0, 0.0, 0.0]]` | Non-randomized location, rotation, and scale. | +| `aboveHt:r` | `aboveHt:r=0.0` | Specifies a fixed height above the surface. | + +The script does not affect manually entered properties not listed above. The +animation below shows that when you change the parameters, unsupported +properties of the collision object remain untouched, example: +[simple_cmp_preserving_unsup_prop.gif](https://drive.google.com/file/d/1dWYtv9xu31JhZoYh72HkgGW1f9HO0s-j/view?usp=drive_link). + +```{important} +Only one selected object can be edited at a time. If you select more than one +object, the *CMP Exporter* interface will be greyed out and unavailable for +parameter editing. This is intentional to prevent damaging or erasing properties +of different objects. +``` + +However, objects can be moved, rotated, or scaled in selected groups. When the +script runs, it automatically updates all parameters inside user custom +properties for all selected objects. If the script is not run during editing, +parameters will automatically update when you press the **Export CMP** button. +Alternatively, run the script and select an object to update its parameters +automatically. + +```{important} +If an object does not already have any CMP properties, default properties such +as `Matrix3` and `Place type` will be automatically assigned. Note that only +Editable Mesh or Editable Poly objects can have CMP settings. For non-editable +objects, the interface will be greyed out and unavailable for editing. +``` + +For example, create a box and select it when the script window is open. The +whole interface will be grey because it is not an Editable Mesh or Editable +Poly. + +It will look like this (only node name and Matrix3): + +``` +node{ + name:t="ancient_statue_c_dmg_056_dmg:rendInst" + tm:m=[[0.606621, 0.0, 0.0105886] [0.000184797, 0.606621, -0.010587] [-0.010587, 0.0105886, 0.606528] [-0.211369, 3.01566, 0.255796]] +} +``` + +```{important} +All objects in the scene must have the same scale on all axes. +``` + +If an object is not uniformly scaled along all axes, a warning will appear, +suggesting correction: + +![Non Uniform Scale Warning](_images/simple_cmp_non_uni_scale.png) + +The script will not correct this error; it leaves the decision to your +discretion. However, every time such an object is selected while the script is +running, a warning will appear. + +### CMP Editor Interface + +Let's consider the functionality of the script interface: + +![CMP Editor Interface](_images/simple_cmp_ed_interface.png) + +- **Output Path (1):** Specify the path where the `.composit.blk` file will be + saved after export. Button **(2)** allows you to select a custom path. On + first use, this will default to the *3Ds Max* export path. +- **Default Node Type (3):** Set the default node type. If the name contains + some gross errors like invalid characters, the script will indicate an error + of the form: + + ![Type error](_images/simple_cmp_type_error.png) + +- **Remove numeric suffixes if exist (4):** If enabled, removes the last three + digits from object names during export. For example, + `ancient_statue_c_dmg_087` will be exported as `ancient_statue_c_dmg_`. This + is useful since objects in *3Ds Max* often include numbers that are unnecessary + in the final composite file. +- **Export CMP (5):** Exports objects to the specified directory. All objects in + the current active layer will be exported. Recall that the active layer is the + layer highlighted by the blue folder + + ![Active Layer](_images/simple_cmp_ed_active_layer.png) + + For example a layer + + ![Active Layer Name](_images/simple_cmp_ed_active_layer_name.png) + + is exported to `ancient_statue_c_dmg_cmp.composit.blk` at the specified path. + + Ensure the active layer is named correctly; otherwise, a warning will appear: + + ![Type Warning](_images/simple_cmp_ed_type_warning.png) + +Next are parameters to export from *3Ds Max* to *Dagor*: + +- **Transfor Matrix3 Enabled (6):** Exports the transformation matrix (position, + rotation, scale) to *Dagor's* format. [Learn more about transformation + matrices + here](https://en.wikipedia.org/wiki/Transformation_matrix#Examples_in_3D_computer_graphics). +- **place_type Enabled (7):** Enables object placement type in *Dagor*. There + are seven different placement methods, which your mentor can explain in + detail. +- **Parameter block (8):** Responsible for randomizing node rotations along the + x, y, z axes. Example: + [simple_cmp_ed_prop_edit_rot_02.gif](https://drive.google.com/file/d/1552xYX4212zhQzv7wp-Ks26OLQjbb2AC/view?usp=drive_link). + + ```{important} + If any checkbox for `rot_x`, `rot_y`, `rot_z`, `offset_x`, `offset_y`, + `offset_z`, `scale`, or `yScale` is enabled, the `Matrix3` parameter will be + unavailable. + + This limitation is intentional and adheres to *Dagor Engine* requirements. + ``` + +- **Parameter block (9):** Responsible for randomizing node offsets along the x, + y, z axes relative to the current position. +- **Scale Enabled (10):** Enables randomization of node scaling from the base + scale value within the specified range. +- **yScale Enabled (11):** Enables randomization of scaling along the Y-axis + (Z-axis in *3Ds Max*, which is up in *Dagor*). +- **aboveHit Enabled (12):** Enables fixed node positioning above the surface by + the specified value in the `aboveHt` parameter. + +As the *Dagor Engine* evolves, new parameters may be added or existing ones +modified. Always refer to the updated table of parameters. + +```{note} +This script is complex, functioning as an editor within the *3Ds Max* editor. It +may contain bugs or errors. If you encounter any strange behavior or issues, do +not try to resolve them yourself. Report them to the developer immediately to +save time and facilitate quick fixes. +``` + +- **Open Learning Document (13):** Opens this article. +- **Contact with Developer (14):** Provides contact with script developer. + + + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/transfer_vertex_position_to_vertex_color_tool.md.txt b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/transfer_vertex_position_to_vertex_color_tool.md.txt new file mode 100644 index 000000000..abe08d1a9 --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/transfer_vertex_position_to_vertex_color_tool.md.txt @@ -0,0 +1,234 @@ +# Dagor 2 Transfer Vertex Position to Vertex Color Tool + +## Installation + +[Install the script](installation.md) following the provided instructions. + +```{important} +This script requires *3ds Max 2010* or newer version to run. +``` +## Overview + +This tool facilitates the transfer and baking of vertex position changes from +one object to another using vertex colors, enabling the creation of detailed +morph effects. The tool captures the positional differences between +corresponding vertices of two objects and encodes this information into the +vertex color channels. + +Below is an example of the tool's output: + +![Transfer Vertex Position to Vertex Color Tool](_images/transfer_vertex_00.gif) + +## Accessing the Transfer Vertex Position to Vertex Color Tool + +1. Navigate to **Gaijin Tools (1)** ▸ **Dagor Vertex Pos to VColor...**. This + will open the main window of the *Dagor Vertex Position to VColor Tool*. + +2. To verify the version **(3)** of the script, go to **Gaijin Tools (1)** ▸ + **About (2)**. The **About** window will display the current version. It's + important to check this regularly to ensure your script is up to date. + +![Transfer Vertex Position to Vertex Color Tool](_images/transfer_vertex_01.png) + +```{note} +Make sure that the plugin version is at least `1.6`. +``` + +## Using the Transfer Vertex Position to Vertex Color Tool + +To begin, open the tool panel by navigating to **Gaijin Tools** ▸ **Dagor +Vertex Pos to VColor**. + +Download the following test scene: [VColorMorphDemo.max](https://drive.google.com/file/d/1Pg0i3dlRwNEhajSwK_RiIO-m_TT13-KY/view?usp=drive_link). + +```{important} +This scene requires *3ds Max 2024* or a newer version. +``` + +### Use Case: Bent Metal Effect + +The script was originally developed to create a bent metal effect, where a new +car model gradually morphs into a damaged car model. Storing two full models is +resource-intensive, so this tool allows us to store the positional changes as +vertex color data. This approach requires that the vertex count and order in +both the original and deformed models are identical. + +### Encoding Process + +1. **Channel Assignment:** + - The **Red** channel stores the X-axis offset. + - The **Green** channel stores the Y-axis offset. + - The **Blue** channel stores the Z-axis offset. + + ```{note} + The Z-axis is upward in most coordinate systems, but remember that in some + systems like DirectX, the Y-axis is considered upward. + ``` + +2. **Brightness Range:** + - The brightness range is split into two intervals: `0-127` and `127-255`. + - `127` represents zero offset, meaning no positional change between the + original and deformed model. + - Values `0-126` represent negative offsets, while `128-255` represent + positive offsets. + +3. **Normalization:** + - To fit the positional offsets within the 128-step brightness range, + normalization is applied. + - The script identifies the maximum distance between corresponding vertices + across both models. For example, if the maximum distance is 256 units, the + script normalizes all distances using a multiplier of `256/128 = 2.0`. This + normalization ensures that the offsets are encoded correctly within the + available brightness range. The multiplier and normalization are + automatically calculated after the script processes the models, as shown in + the following example: + + ![Transfer Vertex Position to Vertex Color Tool](_images/transfer_vertex_02.png) + +### Script Interface Overview + +The script interface is divided into three main sections: + +1. **Base Object Selection (Block 1):** + - Select the base object, which remains unchanged and serves as the reference + for positional comparison. + - Choose the target object where the vertex color (vColor) data will be + written. + +2. **Calculation and Output (Block 2):** + - Initiate the calculation and output of the positional differences. + +3. **Inverse Transformation (Block 3):** + - Optionally, verify the accuracy of the process by performing an inverse + transformation, converting the vertex color data back into vertex positions + to check for consistency. + +![Transfer Vertex Position to Vertex Color Tool](_images/transfer_vertex_03.png) + +### Example Workflow + +To illustrate, let’s transfer the vertex position differences from an object +named `StartMorph` to another named `EndMorph`. As `EndMorph` has a point offset +along the X-axis, the Red channel will reflect this shift – positive values on +one side and negative values on the other. A gray color `(127, 127, 127)` +indicates no positional change. + +1. **Select the Source Object:** + - Choose `StartMorph` using the **Source Object (1)** button. + +2. **Select the Target Object:** + - Select `EndMorph` **(3)**, the object to which vColor data will be applied. + +3. **Display the Result:** + - Check the **Show VColor Result (4)** option to display the vColor in the + Viewport. + - If needed, specify a different channel **(5)** for the output, such as + channel 8 (used for Ambient Occlusion in *Dagor Engine*). + +4. **Start the Process:** + - Click the **Transfer Vertex Position to VColor (6)** button to begin the + transfer. The resulting vColor will illustrate the deformation, as shown by + the color changes in the sphere, examples **(9)** and **(10)**. + +![Transfer Vertex Position to Vertex Color Tool](_images/transfer_vertex_04.png) + +This is an illustrative example when deformation of an object where the vColor +has changed. In a real task, we need to transfer the position the other way +around from the deformed object to the undeformed object. The selection will be +inverted. + +### Verification + +To verify the accuracy of the transformation: + +**Inverse Transformation:** + +1. Set the **Global Distance Multiplier (11)** to the value calculated during + the initial process. +2. Select the model with the generated vColor. +3. Click **Restore VertexPos to Start Pos (12)** button to revert the vColor + back into vertex positions. + +The process may introduce minor distortions due to the limited precision +available within the 128-step brightness range. + +## Prototype Car Destruction in Unreal Engine + +This section demonstrates a practical application of the script for simulating +car damage in *Unreal Engine*. You can download the *Unreal Engine* project from +the following link: + +[Download Unreal Project](https://cloud.gaijin.team/s/qsRsGFY82CTBpQt) + +```{note} +The minimum supported version for this project is *Unreal Engine* `4.27`. +``` + +To view the results directly, you can run the executable file +`CarDeformExampleWin64x\CarDeformExample.exe`, example: [transfer_vertex_05.gif](https://drive.google.com/file/d/1e1t_BrkvtiZP7vddbPzxufcjcVDA54Gn/view?usp=drive_link). + +### Nissan Car Damage Example + +For a hands-on example, you can download the scene files for a damaged Nissan +car from the links below: + +- [Scene 1: NewDestrCarTest.zip.001](https://drive.google.com/file/d/1zJKHehTbUvyEKfMqLyOYai9GRZdThFrP/view?usp=drive_link) + +- [Scene 2: NewDestrCarTest.zip.002](https://drive.google.com/file/d/1AxNpfBGYRhsc0FfyY9aX8jO9hEDU8KFP/view?usp=drive_link) + +```{note} +The minimum supported version for this scene is *3ds Max 2024*. +``` + +#### Step-by-Step Instructions + +1. **Open the Scene in 3ds Max:** + - The scene contains two versions of the car: a dented version **(2)** and an + undamaged version **(1)**. + +![Transfer Vertex Position to Vertex Color Tool](_images/transfer_vertex_06.png) + +2. **Select the Undamaged Car:** + - Begin by selecting the undamaged car model **(1)**. + +3. **Specify the Dented Car as the Target:** + - With the undamaged car still selected, press the selection button **(3)** + to specify the dented car as the target for the transformation. + +4. **Run the Script:** + - Press the execute button **(4)** and wait for the script to complete its + process. + + The car should now display a vertex color indicative of the deformation + process, similar to the example shown below: + + ![Transfer Vertex Position to Vertex Color Tool](_images/transfer_vertex_07.png) + +5. **Verify the Results:** + - To verify the process, make a copy of the undamaged car **(1)** and press + the button **(2)** to apply the vertex color transformation. + + The result should closely resemble the dented car model, as illustrated here: + + ![Transfer Vertex Position to Vertex Color Tool](_images/transfer_vertex_09.png) + +6. **Inspect for Artifacts:** + - Upon closer inspection, particularly around the steering wheel, you may + notice minor artifacts. These artifacts are a result of compressing vertex + positions into the vertex color space, as shown below: + + ![Transfer Vertex Position to Vertex Color Tool](_images/transfer_vertex_10.png) + + Unfortunately, these artifacts are inherent to the technology used for + encoding vertex positions in the vertex color channels. However, they are + generally inconspicuous during gameplay, blending naturally with the car's + damaged appearance. + +### Additional Resources + +- **Documentation:** Button **Visit to Learning Web Site (7)** will open this + article. +- **Contact Information:** Button **Contact with Developer (8)** provides the + developer's contacts. + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagormat/dagormat.md.txt b/_sources/dagor-tools/addons/3ds-max/dagormat/dagormat.md.txt new file mode 100644 index 000000000..85a2bdcc4 --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagormat/dagormat.md.txt @@ -0,0 +1,177 @@ +# DagorMat + +## General Information + +*DagorMat* is essentially a collection of shaders for *3ds Max*. To access it, +open the Material Editor (preferably using the *Slate Material Editor*), +navigate to the **General** tab, and you should see two materials listed under +*Dagor Dagorrat Material*. + +```{note} +If you don't see *DagorMat* listed, press `F10` and switch the **Renderer** +field to **Scanline Renderer**. +``` + +![DagorMat](_images/dagormat_01.png) + +There are two versions available because the original was *DagorMat1* (often +just called *DagorMat*), where shader names (class names) and their parameters +had to be manually entered. Even now, some shaders have not been migrated to +*DagorMat2* and thus still open in *DagorMat1*, with all parameters defined via +scripts. This can be cumbersome since *3DsMax's* interface limits the shader +parameter display area to just a few lines. + +![DagorMat](_images/dagormat_02.png) + +*DagorMat2* was likely developed to address these usability issues, allowing you +to set all parameters using a mouse-friendly interface. + +Shader: + +![DagorMat](_images/dagormat_03.png) + +Additional parameters: + +![DagorMat](_images/dagormat_04.png) + +## Configuring DagorMat Shaders + +Since *DagorMat1* does not use any preset parameters (everything is manually +scripted), there’s no need for additional configuration. However, *DagorMat2* +requires that shaders and their parameters be added to the `dagorShaders.cfg` +files for them to appear in *3ds Max*. + +These configuration files can be found at: + +``` +.../dagor_cdk/windows-x86_64/plugins-3dsMax/ +``` + +### General Configuration Parameters + +To configure shaders, open the `dagorShaders.cfg` file in any text editor. + +#### Texture Slot Names + +The first section you'll encounter: + +These parameters: + +``` +[_settings] +tex1_name="diffuse" +tex2_name="CUBE environment" +tex3_name="normalmap" +tex4_name="parallax (height field)" +tex5_name="glossmap (specular mask+shininess)" +tex6_name="emission tex (unsupported!)" +tex7_name="lightmap" +tex8_name="detail tex" +``` + +control the following: + +![DagorMat](_images/dagormat_05.png) + +#### Global Parameters + +These parameters apply to all shaders. While they might not work everywhere, you +can set them in any shader. If a shader doesn't have its own specific +parameters, only the global ones will be used. + +These parameters: + +``` +[_global_params] +lighting=enum(none lightmap vltmap) +real_two_sided=enum(yes no) +scene_emission=real optional +emission=real optional +relief=real optional +atest=text optional +reflection_multiplier=int optional +``` + +control the following: + +![DagorMat](_images/dagormat_06.png) + +Pay close attention to how different parameter types are displayed and processed +in the *3ds Max* interface: + +- `enum(none lightmap vltmap)` – Enumerations appear as "radio buttons." +- `enum(yes no)` – Boolean options appear as checkboxes. +- `real optional` – A "real number" allows you to specify any numerical value. + + ```{note} + *3ds Max* does not export zero values unless you manually enter them. If you + add a new parameter (which defaults to 0) and don't replace it with your own + zero, the parameter will not be exported. + ``` + +- `text optional` – string type, typically used when a parameter requires + multiple components (e.g., `(1,1,1,1)`). +- `int optional` – integer type, ranging from negative to positive infinity. + +### Shader-Specific Parameters + +Next, you'll find parameters specific to each shader. These are defined +similarly to the global ones, using the same types of variables. + +``` +[rendinst_perlin_layered] // Shader name +invert_heights=text optional // Parameters +mask_gamma=text optional +paint_details=text optional + +micro_detail_layer=real optional +micro_detail_layer_v_scale=real optional +micro_detail_layer_uv_scale=real optional + +// War Thunder parameters +blend_normals=text optional +details_tile=text optional +``` + +### Procedural Parameter Update – dagorShadersCfgGenerator-dev.exe + +The `dagorShaders.cfg` file can now be updated using the tool located at +`.../tools/util/dagorShadersCfgGenerator-dev.exe`. + +This tool performs the following steps: + +1. **Reads the Parent `dagorShaders.cfg`:** The tool begins by loading the + parent `dagorShaders.cfg` file, which serves as the base for updating shader + parameters. +2. **Reads the Target `dagorShaders.cfg`:** It then loads the target + `dagorShaders.cfg`, where the final parameters and shaders will be saved. + Usually, this is the same file as the parent, since there are no other shader + config files to reference. +3. **Loads Shader Dumps:** The tool reads a list of shader binaries, either from + tool-specific shaders (`tools.ps50.shdump.bin`) or game shaders + (`game.ps50.shdump.bin`). Given the variety of projects, shaders differ + between them, so you can specify multiple binaries from different projects to + consolidate their parameters into a single `dagorShaders.cfg`. +4. **Extracts Shaders and Parameters:** The tool extracts all shaders and their + parameters from the shader binaries. +5. **Merges Parameters:** It merges these extracted parameters into the parent + `dagorShaders.cfg`, maintaining the structure by only adding new parameters + and removing outdated ones. +6. **Writes the Final `dagorShaders.cfg`:** The tool then saves the updated + configuration to the target `dagorShaders.cfg`. + +The tool is run through the command line with the following syntax: + +``` +dagorShadersCfgGenerator-dev.exe [parent dagorShaders.cfg] [target dagorShaders.cfg] [shader binary 1 (.ps50.shdump.bin)] [shader binary 2 (.ps50.shdump.bin)] ... [shader binary N (.ps50.shdump.bin)] +``` + +```{important} +- **Exercise Caution!** The tool should not be fully trusted due to frequent + changes in the shader environment. After each update, always perform a `diff` + comparison with the current version and carefully review any differences. +- **Potential Issues:** The tool may occasionally omit certain parameters or + fail to locate shaders that you know exist. +``` + + diff --git a/_sources/dagor-tools/addons/3ds-max/dagormat/index.rst.txt b/_sources/dagor-tools/addons/3ds-max/dagormat/index.rst.txt new file mode 100644 index 000000000..b204d569c --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/dagormat/index.rst.txt @@ -0,0 +1,14 @@ + +DagorMat +========================================= + +DagorMat - Shader set for 3ds Max. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + dagormat.md + + + diff --git a/_sources/dagor-tools/addons/3ds-max/index.rst.txt b/_sources/dagor-tools/addons/3ds-max/index.rst.txt new file mode 100644 index 000000000..1d3886e1d --- /dev/null +++ b/_sources/dagor-tools/addons/3ds-max/index.rst.txt @@ -0,0 +1,13 @@ + +Add-ons for 3ds Max +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + dagor-max-tools/index.rst + dagormat/index.rst + dagor2-3ds-max-tools/index.rst + + diff --git a/_sources/dagor-tools/addons/blender/dag4blend-comp-editor/dag4blend_comp_editor.md.txt b/_sources/dagor-tools/addons/blender/dag4blend-comp-editor/dag4blend_comp_editor.md.txt new file mode 100644 index 000000000..82763787c --- /dev/null +++ b/_sources/dagor-tools/addons/blender/dag4blend-comp-editor/dag4blend_comp_editor.md.txt @@ -0,0 +1,460 @@ +# dag4blend Composite Editor + +## How to Enable + +The *Composite Editor* is currently under development and is considered an +experimental feature. As such, it is hidden by default. To enable its +visibility, you need to check the appropriate box in the add-on settings. + +How to Enable + +
+ +How to Enable + +
+ +The *Composite Editor* can be found in the **N-panel** under the **Dagor** tab. +The panel itself is divided into three main sections: **CMP Import**, **CMP +Export**, and **CMP Tools**. + +## CMP Import + +CMP Import + +
+ +- **import path**: This is the full path to the `name.composit.blk` file. + However, if the correct project is selected, you can simply specify + `name.composit.blk` or even just `name` – the add-on will locate and import + it. + +- **refresh cache**: To import subcomposites and geometry, the add-on needs to + know where to find them. When this checkbox is active, the importer will scan + all files in the active project directory once and record where everything is + located. This list is then used during the import process, which significantly + speeds up the operation compared to the previous version, where the directory + might be searched multiple times across several levels of nesting. If you're + importing composites from the same project, you can uncheck this box to save a + few seconds, but only if you're certain the paths are up-to-date. A separate + cache is maintained for each project. + +- **recursive**: This option imports not only the specified composite but also + its subcomposites, which are nodes, and their subcomposites. The algorithm + should be self-explanatory. + +- **with dags**: Imports `*.lod00.dag` rendinsts and `*.dag` prefabs for all + composites. If **recursive** is disabled, it only imports geometry directly + within the composite being imported; otherwise, it also imports the necessary + assets for the subcomposites. + +- **with lods**: Available only when the previous checkbox is active. This + option allows you to import not just `lod00` but all other LODs (Level of + Detail) as well. Keep in mind that this significantly slows down the import + process and increases the scene's complexity – useful only when you need to + adjust a mesh in a small composite, rather than the position of nodes. For + example, if you need to reposition a couple of apples so they don't stick out + of a box in a composite, and the apple pile is a single mesh, you still need + to update all LODs, not just the first one. + +If a collection named after the composite already exists, it will be cleared +during import, and the import will occur within that collection. If the +collection isn't found, a new one will be created. All nodes are placed in a +collection named `NODES`; again, if a collection with this name exists, it will +be used. + +If a `.dag` (rendinst or prefab) collection existed before the composite import, +the asset will not be imported. + +The node type and its name are explicitly set in the collection's properties. +For rendinsts, this isn't critical since the name is stored in `*.lods` rather +than the nested geometry collections. However, for prefabs, this is important to +remember – **Override Name** will select the overridden collection name. + +```{note} +Don't forget to check the log. +``` + +### New Blend File Structure + +The *Composite Editor* also introduces a new file structure for `.blend` files. +Instead of having everything in a single scene, the new approach suggests using +multiple scenes, each organized by content type. + +New Blend File Structure + +
+ +Scenes in *Blender* can be thought of as "`.blend` files within a `.blend` +file". They are independent of each other, meaning that settings like checkbox +states, export paths, and other parameters are unique to each scene. + +- **COMPOSITS**: This scene is where all composites are imported. +- **GAMEOBJ**: Collections for game objects are created here. These objects are + not automatically readable, so placeholders for previews (and some tools, + discussed later) must be manually added. +- **GEOMETRY**: This is where all `.dag` files are imported, including through + dag-imports if the scene exists. +- **Scene**: The default scene that exists in a new `.blend` file. Any scenes + you create will also appear in this list; tools do not delete user-created + resources. +- **TECH_STUFF**: Ideally, you should never need to use this scene. It contains + temporary collections of random nodes, and in the future, other resources + required for the add-on's internal tasks. + +These scenes are not linked to each other. To transfer resources between them, +the add-on adds a collection called **TRANSFER_COLLECTION** to each scene. This +collection isn't a copy but the same entity across all scenes. For example, you +can enter the **GEOMETRY** scene, create nodes from the necessary rendinsts, +place them in this collection, and then switch to the **COMPOSITS** scene to +start assembling your composite using those nodes. + +If you want to set up this scene structure without importing a composite, or if +you've accidentally deleted the **TRANSFER_COLLECTION**, don't worry. The **CMP +Tools**▸**Scenes** section includes a button for creating or updating the scene +structure, along with a duplicate scene switcher. This dropdown differs from the +standard one in that it prevents accidental deletion or duplication of scenes. + +New Blend File Structure + +
+ +### Creating Nodes + +Let's start by exploring the different methods for creating nodes. There are +several approaches: + +1. **Adding an Empty Object** + + You can add an Empty object to the scene, enable instancing in the + **Entities** panel, and select the desired object's collection from the + dropdown menu. If instancing is disabled, or enabled but the collection is + not specified, the node will be exported as empty. + + Creating Nodes + +
+ +2. **Dragging a Collection** + + In the **Outliner**, you can drag the collection containing the desired asset + into the 3D view. + + ```{grid} 2 + Creating Nodes + Creating Nodes + ``` + + In this case, there is no need to enable instancing. + +3. **Enabling Instancing via Object Properties** + + Add an Empty object and enable instancing through the **Object Properties** + panel (*Blender*'s native properties, not the add-on's). + + Creating Nodes + +
+ +The first method is effectively a more flexible version of the third. Why is it +more flexible? This will be explained below. + +### Editing Nodes + +To convert a standard node into a random node, simply click the **"+"** button in +the **Entities** panel. + +Editing Nodes + +
+ +The second entity will initially be empty, and you can assign a collection to it +either through the dropdown menu, by entering the collection name manually, or +by dragging it from the **Outliner** into the field. + +```{important} +There is no safeguard against incorrect selections, so all collections are +available for selection. Ensure that the chosen collection is indeed a node. +``` + +To set a weight different from the default value of `1.0`, click **Init weight** +and enter the desired value in the newly generated field. + +By default, all entities are displayed immediately, which may hinder your +workflow. To hide one or more entities in a random node, click the **Monitor** +icon next to its name. + +To delete an entity, click the **Trash** icon. Once only one entity remains, the +node will revert to a non-random state. + +### Setting Node Types and Changing Display + +In composites, it's possible (and sometimes necessary) to specify the node type +– whether the asset is a rendinst, game object, composite, or prefab. The +importer determines the type automatically, but when creating new nodes, you'll +need to specify it manually. + +In *Blender*'s editor, an asset is represented by a collection that is drawn +over an Empty object. Therefore, the type needs to be set in the collection's +properties. When the *Composite Editor* is enabled, a new panel, **Type**, is +added to the **Collection Properties**. + +To specify the type, click the **circle** next to the appropriate type – your +selection will be highlighted. A newly created collection will show +**Undefined** as the active value until a type is set. + +Setting Node Types + +
+ +During export, the collection's name (without any suffix like `.lodNN`, `.lods`, +or `.002`) and its type, if specified, will be recorded. Nodes with instanced +collections such as: + +- `asset` +- `asset.lods` +- `asset.lod01` +- `asset.001` + +are treated equivalently by the exporter (assuming their types are the same). +The "suffix trimming" allows you to toggle the display of all rendinst LODs at +once (by default), switch to only the base LOD for cleaner and more accurate +display, or focus on the LOD with collision to check for intersections between +the *parent* and *child* colliders for proper destruction setup. + +To hide a mesh from the composite preview, you can disable its original in the +source collection for the viewport using the monitor icon, as you did with +entities in the previous section. This is useful for disabling collision meshes, +for example, when you want to view LODs with collisions but not the colliders +themselves, or temporarily disabling decals if Z-fighting is visually +distracting. + +Any collection can be used: + +Setting Node Types + +
+ +### Node Hierarchy in a Composite + +To establish a *parent*-*child* relationship among nodes and build a more +complex hierarchy, use *Blender*'s standard tools. + +You can set a *parent* for a node through the object's properties. However, this +will cause the matrix to recalculate, resulting in the object visually "jumping" +as its new "zero" point changes. + +Node Hierarchy in a Composite + +
+ +To maintain the node's visual position, use the **Set Parent** command – either +by pressing `Ctrl`+`P` or through the **Object**▸**Parent** menu. + +To reverse this process and remove the parent while preserving the matrix, use +the `Alt`+`P` shortcut or select the option in the same **Object**▸**Parent** +menu. + +### Using Blender's Built-in Features + +To display nodes as Empty objects, the *Composite Editor* uses *Blender*'s +built-in feature: **collection instancing**. As a result, tools that work with +collection instancing also work with composites. + +#### Replacing Node Content Quickly + +If you need to quickly replace the content of multiple nodes with the same +asset: + +1. Select all the nodes you want to replace. +2. Assign the desired collection to the active node (the order of this step and + the first one can be swapped – both work the same). +3. Then, link the same collection to all the selected Empty objects. You can do + this by pressing `Ctrl`+`L` and selecting **Link Instance Collection** (the + default hotkey), or by accessing the same option through the + **Object**▸**Link/Transfer Data** menu if your hotkeys have been customized. + + Replacing Node Content + +
+ + Replacing Node Content + +
+ +#### Snap to Surface + +Remember that snapping also works here. For placing objects on an uneven +surface, you might find the **Face** snapping mode with **Project Individual +Elements** active to be useful. This ensures that all selected nodes will snap +their pivot points to the surface. Optionally, you can also enable rotation to +match the surface normal. + +```{important} +Do not confuse this with the `place_type:i` setting for exported nodes – this +specific snapping needs to be set in the **dagObject Properties** of the Empty +object if required. +``` + +## CMP Tools + +### BBOX to Node + +The **BBOX to Node** tool converts the bounding boxes of all selected objects +into instances of a chosen collection. This tool is designed to simplify the +placement of objects like indoor walls, environment probes, wall holes, etc. +You'll need to create the necessary collections yourself. + +BBOX to Node + +
+ +Once the collection is set up, you can hide it and leave it untouched – just add +a few meshes for future game objects and transform them as needed, whether in +Object or Edit mode. The pivot position is irrelevant; the replacement will work +as intended. Just be sure to monitor the bounding box before the transformation +(you can enable its display in the **Object Properties**). + +Here's an extreme example (such rotations are rarely needed in practice): + +BBOX to Node + +
+ +BBOX to Node + +
+ +BBOX to Node + +
+ +For clarity, it's recommended adding a 1-meter cube with `gi_black` to the +future game object's collection. This will make it easier to temporarily convert +it back to a mesh for further adjustments. + +### To Mesh + +The **To Mesh** tool converts selected composite nodes (collection instances) +into actual geometry. + +Once converted, the geometry can be exported to any other format – now it's just +a mesh. For example, you can transfer the composite to *Houdini* via +*Alembic/FBX*, where a `.dag` export already exists but importing isn't +supported yet. + +To Mesh + +
+ +### Explode + +Want to edit a subcomposite directly in place, such as moving a plate on a table +or adding another one? No problem! The **Explode** tool temporarily disassembles +the selected composite instance and places its components as *child* objects of +the original node, which now becomes "empty". You can then make changes – adjust +transforms, add or remove objects, etc. + +Explode + +
+ +Explode + +
+ +Changes can either be reverted to the original state by clicking **Revert** or +applied using **Rebuild**, which will replace the original collection. Don't +forget to save these changes by exporting the modified subcomposite. + +Explode + +
+ +However, reassembly is not mandatory – the disassembled composite can be +exported without issues as an empty node with several children. If desired, you +can separate them using **Clear Parent and keep transformation** and delete the +"empty" node altogether. This is useful when you need to replace a multi-level +random composite with one of its states – disassemble it (you can disassemble +several nested levels at once) and remove the unnecessary parts. + +The **Explode** tool also allows you to disassemble rendinsts and prefabs to +make changes to their geometry, which can be useful at times. If the source was +a directory containing all LODs, a disassembled rendinst will appear slightly +different: + +Explode + +
+ +Each LOD will be tied to its own "empty" node. + +To reassemble it, you'll need to select the top-level empty, not the one with +the LOD number. Unlike a disassembled composite, disassembling a mesh will cause +an export error, so be sure to either revert the node to its original state or +apply the changes before exporting. + +```{important} +A known limitation is that this type of editing leaves "garbage" indices, as it +works through creating copies, and *Blender* doesn't allow two objects of the +same type to have identical names. Additionally, **Explode** currently cannot +retain the *parent*-*child* relationships within the disassembled collection, +but it does preserve the correct coordinates relative to the composite's "zero" +point. If the hierarchy is important, you'll need to manually restore it after +using **Rebuild**. +``` + +## CMP Export + +The **CMP Export** section is straightforward: specify the directory path where +the composite should be exported, along with the collection representing the +composite to be exported. + +CMP Export + +
+ +### Parameters + +Export parameters, such as random offsets, are specified in the **Object +Properties** of the Empty object. These parameters do not appear +in the viewport. During import, only the initial state (the first part of the +value) is applied, but any random deviation (the value after the comma) will not +be. + +If a node has at least one random field specified, its transformation matrix +will not be saved. If the imported node has both a matrix and random fields, the +random parameters will be ignored, and a corresponding notification will be +logged. + +Parameters + +
+ +### Limitations of the Composite Editor + +- **Includes Not Supported**: Currently, includes are not supported. Lines with + the `include` directive are ignored during import, which may lead to some data + loss. This will be noted in the log. +- **Blender's Limitation**: *Blender* supports a maximum of 7 levels of nesting. + Multi-level composites may experience performance issues and may not display + correctly – starting from the 8th level of nesting, the content will not be + rendered. However, import and export are still possible. + + For example, a node-rendinst represents one level of nesting. A random node + with several rendinsts represents two levels. A subcomposite with these random + nodes would be three levels, and so on. This issue mainly arises when + importing buildings with interiors, such as in *daNetGame*-based games, where + `indoor_stuff` includes numerous nested composites with randomness – like + random cabinets with objects placed on the shelves, each with random offsets. +- **Axis Mismatch**: In *Blender*, the Z-axis is up, while in *Dagor*, the + Y-axis is up. While matrix adjustments are handled automatically, preventing + scenes from tilting, it's important to remember that `offset_y:p2` refers to + up/down movement despite the name. The same logic applies to rotation and + scaling. +- **Random Offset Parameters**: Currently, random offset parameters do not + automatically display in the viewport. During import, the add-on sets the + initial offset, but if you add or modify a random parameter, you'll need to + manually adjust the node's position. + + diff --git a/_sources/dagor-tools/addons/blender/dag4blend-comp-editor/index.rst.txt b/_sources/dagor-tools/addons/blender/dag4blend-comp-editor/index.rst.txt new file mode 100644 index 000000000..67bdd9a05 --- /dev/null +++ b/_sources/dagor-tools/addons/blender/dag4blend-comp-editor/index.rst.txt @@ -0,0 +1,16 @@ + +dag4blend Composite Editor +========================================= + +The **dag4blend Composite Editor** is an experimental Blender add-on designed to +import, edit, and export complex composite structures. It provides tools for +managing node hierarchies, converting geometry, and handling nested assets, +streamlining the process of working with complex 3D scenes. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + dag4blend_comp_editor.md + + diff --git a/_sources/dagor-tools/addons/blender/dag4blend-texture-baker/dag4blend_texture_baker.md.txt b/_sources/dagor-tools/addons/blender/dag4blend-texture-baker/dag4blend_texture_baker.md.txt new file mode 100644 index 000000000..b860656bc --- /dev/null +++ b/_sources/dagor-tools/addons/blender/dag4blend-texture-baker/dag4blend_texture_baker.md.txt @@ -0,0 +1,249 @@ +# dag4blend Texture Baker + +## Overview + +This tool is designed to convert "heavy" materials into a single low-resolution +`rendinst_simple` material, suitable for use on the last LOD (Level of Detail). +It is also useful for porting assets to mobile projects. + +Starting from version `2.2.0`, the baker also supports re-baking *Blender*'s +Principled BSDF, enabling the transfer of assets with textures from other +software via GLB/glTF with texture conversion, as well as "mixing" materials +directly in *Blender*. + +## Where to Find It + +The **Bake** panel is located in the N-panel under the **Dagor** tab. To ensure +proper operation of the baking process, you need to specify the rendering device +in *Blender*'s **Edit**▸**Preferences** settings. However, this parameter is set +for any render, so it is likely already configured. + +Where to Find It + +
+ +## Settings + +Here, various parameters for the upcoming bake are organized into groups. + +Settings + +
+ +### Renderer + +You can choose the device to perform the baking – either the CPU or GPU – and +set the number of samples. It is recommended to start with one sample and only +increasing the value if the bake appears "noisy". + +### Inputs + +Here, you can select the baking mode – either from the object to itself or from +one object to another. Depending on the mode, the parameters may vary slightly. + +Inputs - Self Bake + +
+ +Inputs - HP to LP + +
+ +- **Asset**: The collection containing the asset to be baked. It will be + converted to **Lowpoly** when the mode is switched. +- **Highpoly**: The collection with the asset from which the bake will be + performed. This is only relevant in the second mode, so it is hidden in the + first. +- The **Recursive** checkbox determines whether to check child collections. If + baking a house for *War Thunder* that consists of a base and several `_dp`, + it's better to place their collections in a parent collection and activate + this parameter. + +```{important} +The parameters below are only relevant when baking from one object to another, +but not from UV to UV. +``` + +- **Use Cage**: Whether to use a cage for baking. This option is only relevant + when baking from object to object, so it is hidden in the first mode. +- **Extrusion**: Defines how much the search area for the high-poly will be + "inflated" along the normal. If the **Use Cage** checkbox is active and a + custom cage is not specified, the low-poly node itself will be used as the + cage, inflated evenly without considering sharp edges. If the checkbox is not + active, the inflation will account for sharp edges. + +Inputs - Extrusion + +
+ +Inputs - Extrusion + +
+ +- **Max Ray Distance**: Specifies the distance from the cage (inward) to search + for baking information. If set to zero, the ray is not limited. + +### Active Node + +This tab only exists in the **HP to LP** mode and allows for detailed settings +for Lowpoly nodes. It displays the parameters of the active object. + +Active Node + +
+ +Active Node + +
+ +- **Cage**: If the **Use Cage** checkbox is active, you can specify a custom + cage here. Press **Init Custom Cage** to create a parameter reference, then + select the desired node. This can be done from the general list by clicking on + the parameter, using the eyedropper from the Viewport or Outliner, or simply + dragging the node from the Outliner. You can delete the parameter entirely by + pressing the **trash can** icon, or reset it with **X** and select a different + node. If the selected node does not match the topology of the baked object, + the bake will fail with an error. + + ```{important} + Do not place the cage in the **Lowpoly** or **Highpoly** collection. + ``` + +- **Highpoly** allows you to specify nodes from which information should be + captured for the active node. If nothing is specified, the bake will be + performed from each Highpoly node sequentially, which can take a significant + amount of time. It is better to specify only the relevant sources. To do this, + click on **ADD** and select sources similarly to how the cage is selected. + Multiple sources can be selected. + +### Outputs + +This section allows you to define what you want to get as output. + +Outputs + +
+ +- **tex_d**, **tex_n**: Checkboxes for selecting the corresponding textures. If + neither is active, the bake will not start as there is nothing to bake. +- **Width** and **Height**: The resolution of the output texture. Limited to + powers of two. +- If the **Reveal Result** checkbox is active, the add-on will open the + directories containing the output files after a successful bake. +- **Tex Dirpath**: Where to save the textures. You can enter the path as text or + select it through *Blender*'s built-in file browser by clicking the folder + icon on the right. +- **open texture folder**: Opens the specified directory using your operating + system's file explorer. +- If the **Save Proxymat** checkbox is active, the baker will also create new + `rendinst_simple` proxy materials from the new textures. If one of the + textures is missing in the directory (for example, if only **tex_d** was + baked), the process will be interrupted with a corresponding log entry. The + path for saving it is set in the same way as for textures. + +The add-on can also assign the resulting proxymat immediately after baking. In +this case, unnecessary UVs and materials will be removed, and the Bake UV +channel will be renamed to UVMap, which the add-on expects for correct display. +This saves time if you need to export the result as render instance. If the +Viewport result is unsatisfactory and needs re-baking, the assignment of the +proxymat and deletion of information can be undone with `Ctrl`+`Z`. + +```{seealso} +For more information, see +[Proxymats](../../../../assets/materials/proxymats.md). +``` + +## Operators + +Outputs + +
+ +- **Convert Principled BSDF**: As the name suggests, this converts *Blender*'s + standard shader, allowing it to be baked as + [rendinst_simple](../../../../assets/shaders/dng-shaders/rendinst_simple.md). + Useful when the material was mixed directly in *Blender* or when an asset was + imported from GLB/glTF from another program along with textures. + +- **Cleanup geometry**: Removes unsupported shader polygons from the source + geometry. How do you know if a shader is supported? In the *Shader Editor*, + the material's Shader node should have outputs for `_tex_d_rgb`, + `_tex_d_alpha`, `_tex_met_gloss`, and `_tex_mask`. This feature is primarily + designed for decals, which cannot be baked. *Blender* cannot bake through + transparent polygons; the top polygon will completely overwrite the + information beneath it. + + If there is an unsupported shader on the geometry that is important for + baking, you can reassign it to a similar one. For example, the unsupported + [rendinst_mask_layered](../../../../assets/shaders/dng-shaders/rendinst_mask_layered.md) + can be replaced with + [rendinst_perlin_layered](../../../../assets/shaders/rendinst_perlin_layered.md). + This does not have to be done manually. In the directory with the installed + add-on, there is a text file with remapping parameters: + + `C:\Users\\AppData\Roaming\Blender Foundation\Blender\\scripts\addons\dag4blend\extras\remap.txt`. + + Use a colon to specify the name of the missing shader node and the name of the + replacement node. If you only want to change the material, specify its name. + If you also want to remap texture coordinates, include them as well (same + names with the `_uv` postfix). + +- **To Palette**: As the name suggests, creates a "palette" of materials. A + plane is created for each material with the name of that material and the Bake + UV layer. Useful when you need to re-bake tiles – the actual geometry of the + asset would only get in the way for such a task. + +- **BAKE**: Starts the baking process. Creates texture files (asset collection + name + texture type postfix separated by `_`). The collection name is + truncated at the first dot, so `my_material.001` creates + `my_material_tex_d.tif` instead of `my_material.001_tex_d.tif`. It also + removes endings indicating the LOD number. + + If something goes wrong, it will display an explanatory popup and write a log + entry. + + Baking is performed on the UV channel named Bake – you need to create it for + all low-poly objects. Shaders are bound to the naming of UV channels, so + renaming existing ones is not recommended. + +## Scene Requirements + +- All geometry used in the bake must be visible and selectable when you press + the **BAKE** button. The only exceptions are optional cages. + +- The source geometry must only have supported shaders. The receiver geometry + must have a UV channel named `Bake`. For self-baking, this is the same asset. + +- Naturally, the UV layout must be reasonable. It's not enough to just create a + UV channel; you also need to unwrap it properly. + +- Everything outside the unit square will not affect the result – shift + overlapping geometry left/up to avoid strange artifacts from blending + information from different triangles in the same place. + +## Limitations + +The output textures and proxymat are ready for use in the engine and display +correctly in most image viewers and editors. However, *Photoshop* is currently +an exception. It does not interpret the alpha channel correctly, neither +displaying it as the fourth channel nor as a layer mask. + +Limitations + +
+ +If you need to make changes to the alpha channel of such a texture, here's a +temporary solution: **Layer**▸**Layer Mask**▸**From Transparency** allows you to +extract the alpha channel into a mask. After this, you can copy the mask's +contents, delete the mask, and place its copied contents into a new alpha +channel. + +Limitations + +
+ +This solution is not the most elegant, but it works. Apply it only when +necessary to edit the alpha. + + diff --git a/_sources/dagor-tools/addons/blender/dag4blend-texture-baker/index.rst.txt b/_sources/dagor-tools/addons/blender/dag4blend-texture-baker/index.rst.txt new file mode 100644 index 000000000..bf236ba3b --- /dev/null +++ b/_sources/dagor-tools/addons/blender/dag4blend-texture-baker/index.rst.txt @@ -0,0 +1,16 @@ + +dag4blend Texture Baker +========================================= + +The **dag4blend Texture Baker** is a tool for converting "heavy" materials +into a single low-resolution rendinst_simple material for final LOD use. + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + dag4blend_texture_baker.md + + diff --git a/_sources/dagor-tools/addons/blender/dag4blend/dag4blend.md.txt b/_sources/dagor-tools/addons/blender/dag4blend/dag4blend.md.txt new file mode 100644 index 000000000..069ee8795 --- /dev/null +++ b/_sources/dagor-tools/addons/blender/dag4blend/dag4blend.md.txt @@ -0,0 +1,759 @@ +# dag4blend + +## Installation + +1. Go to **Edit**▸**Preferences**▸**Add-ons** in *Blender*. + +2. Click **Install...** and navigate to the `.zip` file of the add-on. + +3. After installation, check the box next to the add-on in the list. + +Before starting, you need to perform some initial configuration, so do not close +the **Preferences** window yet: + +Preferences + +
+ +The path for **ObjProps presets:** and shader list **dagorShaders.cfg:** can now +be set manually. This feature ensures that updating the add-on does not +overwrite any user-made changes. It is recommended to store presets outside the +add-on directory. + +Until the path to an existing directory is specified, the preset menu will not +be displayed. For each project you work on, you need to specify the path to the +`\assets` directory. + +Set the name (it can be any name as long as it is clear to the user), specify +the path, and click **+ ADD Project** to add the project to the list of +available projects. + +```{note} Many interface elements have tooltips that appear when you hover the +cursor over them. +``` + +Starting from version `dag4blend2.0`, projects have additional parameters +available. These parameters can be found in the **Projects** panel: + +Projects + +
+ +- **path:** You can edit the path after adding a project – for example, if you + move resources to a different drive. You no longer need to delete and re-add + the project with the new path. + +- **Shading mode:** Shaders behave slightly different between projects. The + add-on is designed to adapt to two main shader groups: *daNetGame*-like and + *War Thunder*-like shaders. + +- **Palettes**: There are default global and local palettes. + +- **Experimental Features**: New tools that are functional but have some + limitations. Currently, these include a [*Composite + Editor*](#composite-editor) and [*Texture Baker*](#bake) tools: + +Experimental Features + +
+ +The active project is set through the menu in the scene properties. You can also +change palettes here without needing to go into **User Preferences** each time: + +Scene + +
+ +```{note} The add-on applies settings when these parameters are changed, but +only if there is an appropriate target. Therefore, to fix the **Shading mode**, +you need to re-select the project after creating at least one dagormat in the +scene. For **Palettes**, re-select the project after creating a painted +dagormat. + +By default, the global and local palettes will be simple red and green fills, +and the shaders will be in *War Thunder*-like mode. To correct this, re-select +the project from the dropdown after the first asset import or creation. + +``` + +## Log and Text Editors + +Text objects play an important role in this toolset, so it is recommended to add +a text field to your layout or add a new window with just a text field if you +are working with multiple monitors. + +Text field + +
+ +The import/export functions (and future ones) write execution information to a +text **log** field. + +```{note} +The **log** does not clear itself, so remember to clear it periodically after +ensuring that there are no unchecked errors and warnings. To clear it, you can +simply delete the text object. The next time you need it, the toolset will +create a new one. This approach can be faster than selecting all the lines and +deleting them with `Backspace`/`Delete`. +``` + +To edit object properties, dagormats, or proxymats as text, the toolset creates +a special text object. The name of the object is provided in the tooltip. + +```{seealso} +For more information, see +[Proxymats](../../../../assets/materials/proxymats.md). +``` + +## Material Setup + +For setup material for *Dagor Engine*, there is separate **dagormat** tab. It +contains several subtabs that can be collapsed when not needed: + +Dagormat + +
+ +### Main + +Here you can choose whether the material is two-sided, and if so, how it +behaves: + +Dagormat▸Main + +
+ +- **single_sided**: Enables backface culling for triangles with this material. + +- **two_sided**: Each triangle is rendered from both sides. The shader is + slightly heavier, but the geometry is lighter. Use this primarily for heavy + geometry, such as tree crowns. + +- **real_two_sided**: In the engine, a single-sided material is uses, but each + triangle with this material will be duplicated and flipped to be visible from + the other side. This shader is lighter, but it doubles the mesh weight. It is + better used on simpler meshes. + +Below is a list of **legacy** properties: *ambient*, *specular*, *diffuse*, +*emissive* and *power*. Hover over them to see tooltips describing each +property. + +This tab also allows you to select a shader from the available options or +manually enter a value. It is useful if new shaders have been added to the game +but the toolset has not been updated yet. + +Dagormat▸Shader + +
+ +The list of shaders and their possible parameters are taken from +`dagorShaders.cfg`, which by default is located at: +`C:\Users\\AppData\Roaming\Blender Foundation\Blender\\scripts\addons\dag4blend`. + +### Textures + +This section lists the textures in use. Indices (matching those stored in `.dag` +files) are available in tooltips. You can copy and paste paths from [*Asset +Viewer*](../../../asset-viewer/asset-viewer/asset_viewer.md) or Explorer; quotes +will be removed automatically. + +Dagormat▸Textures + +
+ +### Optional + +Visual editing of shader parameters. You can manually enter values or select +from a list, similar to how shader selection works. + +Dagormat▸Optional + +
+ +### Tools + +Here you can edit the active material in text format. + +Dagormat▸Tools + +
+ +Dagormat▸Tools + +
+ +If there is no text editing field, one will be added to the left of the +viewport, otherwise, the text will be opened in the first available text field. + +Search is available in two modes: only for the active material or for all +materials in the scene. Switch modes by clicking the text indicating the current +mode. + +A correctly specified project is required for search to function properly – when +working on a daNetGame asset, specify *daNetGame*. + +- **Find missing...**: Finds all textures and all proxymats (if they exist in + the project). The texture search only affects viewport display and does not + alter the material path. + +- **Rebuild materials**: Rebuilds the materials for the viewport. + +- **Update texture paths**: Finds non-existent paths and replaces them with + current ones. Should be used after texture search. + +- **Clear texture paths**: Removes directory information, leaving only texture + names. + +### Proxy + +The add-on now supports proxymats. + +Dagormat▸Proxy + +
+ +Proxymat parameter information is taken from the `.blk` file, so all settings +for them are hidden. Instead, a new tab allows you to specify the path to the +proxymat directory. It can still be edited as text or temporarily unchecked as +**is proxymat**. + +Changes can be reverted by reloading information from the file or saved to the +proxymat. Any regular material can also be converted to a proxymat by toggling +the checkbox and saving it to the desired directory. + +```{note} +Proxymats in *Blender* use the file name, not a user-defined one. Upon import, +shaders are automatically renamed if the name differs. +``` + +```{seealso} +For more information, see +[Proxymats](../../../../assets/materials/proxymats.md). +``` + +## Object Properties + +Located in the N-panel under the **Dagor** tab, it shows parameters of the +active object and is hidden if there is no active object. + +Object Properties + +
+ +### Properties + +Visual editing allows you to add or remove parameters individually and change +their values. + +The UI format is determined by the `value` string. If the wrong UI option +appears (e.g., `prop:r=0` gives an integer toggle, while the variable should be +a float slider), enter the parameter name in the **name** field and the correct +format value (e.g., `0.0` instead of `0` for a float slider). Specify the type +in the name using `:`. + +### Presets + +Once properties are configured, you can save them as a preset for quick +application to other objects. + +To save the active object's properties, enter a name for the preset and click +**Save preset as:**. To apply an existing preset, select it from the dropdown +and click **Apply preset:**. + +Since presets are simple text files, you might want to edit them in a text +editor. The **open presets folder** button opens the directory containing all +presets in `.txt` format, where you can add, delete, or edit them. Changes are +applied immediately. + +### Tools + +Editing in text format within *Blender*, similar to material editing, requires +opening the to the file specified in the tooltip by clicking **Open as text**. + +**Apply...**: Applies changes from the text. + +**Write example**: Writes an example to the text (without applying it, since +you will likely need to modify the example for your specific situation). + +**Transfer Attr**: Copies the properties from the active object to all selected +objects, saving time on manual copying. + +Starting from `version 2.1.0`, the text object **props_temp** opens +automatically if the internal text editor is open. + +```{note} +Incorrect values in Object Properties are recorded in a new **broken +properties** field; separated by `;`, allowing manual recovery. Similarly, +incorrect values when using **Apply from text** are recorded. +``` + +## Export + +Like any other import-export add-on, the `.dag` exporter is available through +**File**▸**Export**. However, to save time during multiple re-exports in the +workflow, the exporter is also available in the N-panel. The functionality is +identical, so choose the option that is most convenient for you. + +### Batch Export + +General parameters: + +- **vNormals**: Saves custom normals if they have been added to the object. + Without custom normals, even with the checkbox active, the export will include + smoothing groups. + +- **applyMods**: Exports geometry with visible modifiers applied. + +- **Optimize Materials**: Keeps only the materials used on at least one polygon + for each object. + +- **Path**: The path where the file will be saved. + +- **Cleanup Names**: Ignore indices (`.000+`) during export. + +```{note} +Use **Cleanup...** only for exporting composite parts for *3ds Max*! It can +cause issues. In a `.dag` file for the game engine, there should not be multiple +objects with the same name. +``` + +- **Name**: Context-sensitive field, appearing only when exporting to a single + `.dag` file. This field is hidden in other export modes. + +- **Collection**: Also context-sensitive field. You do not need to select a + collection from the dropdown; you can simply drag the desired collection from + the **Outliner**. + +- **Limit by**: Allows you to choose the export mode. + +#### Examples + +1. **Limit by:** Visible + + **Export object:** export all scene contents to `Path\.dag`. + + **Example input:** + + Limit by▸Visible + +
+ + **Example output:** `C:\tmp\asset.dag` – contains all scene objects with + custom normals. + +1. **Limit by:** Sel.Joined + + **Export object:** export selected objects to `Path\.dag`. + + **Example input:** + + Limit by▸Sel.Joined + +
+ + **Example output:** `C:\tmp\asset.dag` – contains only selected scene + objects. + +1. **Limit by:** Sel.Separated + + **Export object:** export selected objects to separate `.dag` files, where + the names of selected objects are used as file names. + + **Example input:** + + Limit by▸Sel.Separated + +
+ + **Example output:** `C:\tmp\cube.lod00.dag`, `C:\tmp\cube.lod01.dag`. + +1. **Limit by:** Col.Separated + + **Export object:** export collections from the hierarchy starting from the + selected one, if there are no subcollections inside. The **exportOrphans** + checkbox allows exporting objects that lie next to subcollections. + + **Example input:** + + Limit by▸Col.Separated + +
+ + **Example output:** `C:\tmp\cube.lod00.dag` – contains visible geometry and + occluder inside, `C:\tmp\cube.lod01.dag` – contains visible geometry and + collider inside and `C:\tmp\cube.lod02.dag`. `C:\tmp\cube_temp.dag` – will + not be exported, because the **exportOrphans** checkbox is not active. If + you don't specify the collection at all, then in this case the result will + be identical, because the check will start with **SceneCollection**, and it + contains only the **cube** collection. + +2. **Limit by:** Col.Joined + + **Export object:** export all contents of the selected collection to a file + with the name of this collection. Created mainly for [*Asset + Viewer*](../../../asset-viewer/asset-viewer/asset_viewer.md) of assets + created from several `.dag` files. + + **Example input:** + + Limit by▸Col.Joined + +
+ + **Example output:** + `C:\tmp\soviet_town_building_5_floors_a_joined.lod00.dag`, containing all + null LODs related to this building. The collections have been linked + (transfer with `Ctrl` in **Outliner**), i.e. they are not copies, but the + same collections. The rest of the temporary LODs (Level of Detail) can be + prepared in the same way. It's much faster than selecting objects and typing + the name manually. + + ```{note} + Since they are the same collections and not copies, do not delete them with + `Del`, but remove them with `RMB`▸**Unlink**, so that you don't overwrite + them. + ``` + +## Collection Properties + +Located in the N-panel, similar to Object Properties. It shows properties of the +active collection. Unlike Object Properties, these properties exist only within +*Blender* and are used for internal purposes. + +Collection Properties + +
+ +### Override Name + +Allows you to override the name with which the collection will be exported to +**Col.Separated** mode. By default, overriding is disabled. + +When importing `.dag` files with names longer than 63 characters (the *Blender* +limit), the name will be recorded in this field to preserve the "overflow" +characters. You can also manually rename it – check the checkbox and enter the +new name: + +Override name + +
+ +In the given example, the contents of the collection will be exported to +`C:\tmp\cube.lod00.dag` instead of `C:\tmp\Collection.dag`. However, this is not +the most useful application. + +A much more practical use is when you need to save multiple `.dag` files in +different subdirectories. Here, you can specify a subpath that will be appended +to the main export path. If there is no need to rename the collection, simply +end the subpath with `*`, which will be replaced by the collection name during +export: + +Override name + +
+ +In this example, the export path will be +`C:\tmp\subfolder\yet_another_subfolder\cube.lod00.dag`, which is convenient for +working with complex assets like buildings. For example, windows in +`composit_parts\windows\*`, doors in `composit_parts\doors\*`, and so on. + +Additionally, you can completely override the path – start it with the drive +letter: + +Override name + +
+ +In this case, the **Path** field will be ignored for this collection, and the +file will be exported to `D:\daNetGame\develop\assets\rendinst_1lod\`. + +#### Type + +Used by the [*Composite +Editor*](../dag4blend-comp-editor/dag4blend_comp_editor.md). When importing, it +records the node type, and during export, it ensures a unique type (to avoid +double interpretation in the presence of asset namesakes, typically found among +composites and rendinsts). For manually created item intended for composite +export, set this manually. + +Type + +
+ +Since it is used for composites, DynModel is in the list but not actually +applied – it can't be arranged through composites. Therefore, the composite +importer assumes all assets with `.lod**.dag` in their name are RendInsts, not +DynModels. + +### Geometry Nodes + +```{note} +Currently, geometry nodes cannot be combined with custom normals, as applying +the modifier erases them. If you're placing instances using geometry nodes, +don't forget to add the **Realize instances** node; otherwise, the geometry will +be lost during export. Technically, before this node, they are similar to +"empty" without their own geometry. +``` + +## Smoothing Groups + +A bug was discovered in *Blender*'s function for calculating smoothing groups +for formats that use them. To solve this, a smoothing group editor has been +added. It's available in Edit Mode when Face selection mode is active. + +Upon import, objects retain smoothing groups from the original file. New +objects, however, do not have smoothing groups, so you must create them with the +**Init** button: + +Smoothing groups + +
+ +When smoothing exist, the interface works similarly to *3ds Max*, but without +real-time display. Partial preview is available via **Convert to Sharp Edges**, +which shows only sharp edges from the smoothing groups. + +Smoothing groups + +
+ +Starting with `version 2.1.0`, the **Live Update** function recalculates hard +edges during smoothing group editing. This can slow down performance on heavy +geometry, so it is off by default. + +From the same version, you can also select polygons by smoothing group. Click +the corresponding group button in the **Select by SG** subpanel. + +```{note} +Selecting by smoothing group adds to the existing selection, rather than +replacing it. So, if you need to select only group 3, for example, clear the +selection first. +``` + +### When to use? + +If a model has areas where sharp edges do not fully divide the surface into +closed regions, the smoothing group calculation will be incorrect and needs +manual adjustment. You may also need to adjust smoothing groups after modifying +existing `.dag` file post-import if the groups were saved as an attribute. + +Smoothing groups + +
+ +## Import + +Similar to export, there are two methods for import – the standard method via +**File**▸**Import** and the batch import via N-panel. + +### Import and Textures + +A `.dag` file contains not only the texture name but also its path. However, +these paths are often become invalid when files are transferred. If the texture +path os invalid or only the texture name is provided, it will be replaced with a +UV checker texture. If a texture is used in multiple materials, updating the +path in one will update it across all materials. + +Texture slots are still used as in +[rendinst_simple](../../../../assets/shaders/dng-shaders/rendinst_simple.md), +regardless of the chosen shader. Nodes do not overlap but are arranged +meaningfully. Images from all slots are now added to the *Shader Editor*, so +with **Node Wrangler** enabled, they can be viewed by pressing +`Shift`+`Ctrl`+`LMB`. + +### File▸Import + +Parameters: + +- **Optimize material slots**: Removes unused slots and merges slots with the + same material. + +- **Import LODs**: Imports all LODs, not just the selected `.dag` file. + +- **Import dps**: Imports all damage_parts (_dp). + +- **Import dmgs**: Imports all damage versions. + +- **Replace existing**: If a collection with the asset name exists in the scene, + it will replace its contents with those from the `.dag` file instead of + creating a duplicate with a `.001+` suffix. Useful for quickly reverting + multiple changes. + +File Import + +
+ +For bulk imports, it's smart to use batch import. + +### Batch Import + +This panel allows importing `.dag` files from a specified directory. + +Batch Import + +
+ +Options: + +- **Search in subfolders**: Checks all subdirectories for files. Use cautiously, + as it can hang *Blender* if too many matches are found. + +- **Optimize material slots**: Same as in regular import. + +- **Preserve Smoothing Groups**: Saves smoothing groups as an attribute to + ensure they don't change during export. Not recommended if you plan to modify + the geometry after import. + +- **Preserve paths**: Saves the full path to the `.dag` file (including the + file name) in Collection Property. Useful when importing file from multiple + directories and needing to export them back to original locations. + +- **Masks**: Specifies masks for import, using `*` instead of `.*` for multiple + characters, and `.` instead of `\.`. Separate masks with `;`. Spaces are + ignored. + +- **Excludes**: Same syntax as masks, but for excluding files from import. + +#### Example + +Masks: `“asset_a.lod0[0,2]*; asset_b_dp*”; Excludes=“*_dmg*”` imports +`asset_a.lod00.dag`, `asset_a.lod02.dag`, and all LODs of all `asset_b_dp`, +except their `_dmg` versions. + +- **Path**: The directory to search. + +```{note} +*Blender* will be unresponsive until the import is complete. To monitor the +import process, open the console (**Window**▸**Toggle system console**). +``` + +#### Additional Features + +Often, you may need to import a single asset that is already open in [*Asset +Viewer*](../../../asset-viewer/asset-viewer/asset_viewer.md) or Explorer. +Instead of searching for it through **File**▸**Import**, you can copy the path +from [*Asset Viewer*](../../../asset-viewer/asset-viewer/asset_viewer.md) or +Explorer (`RMB`▸**Copy as path**) and paste it into **Path** field of the batch +import panel. This action will automatically transfer the file name to +**Masks**, and clicking **IMPORT** will load only the desired asset. + +If you only have the asset's name, you can enter it in **Masks** and then use +the **Apply as search path** button to set the entire project directory with +subdirectories as the search path. + +If the path is unknown, the import will be slower by a few seconds (due to +search file), but this is often faster than searching the full path manually. + +Batch Import Additional Features + +
+ +## Tools + +The panel is continuously being improved. Tools are grouped into blocks that can +be collapsed when not in use to avoid cluttering the interface. + +Tools + +- **Optimize material slots**: Merges identical material slots and removes + unused ones. + +- **Merge Duplicates**: Merges identical materials with different indices (e.g., + `Material` and `Material.001`). These duplicate materials often arise when + copying objects using `Ctrl`+`C` / `Ctrl`+`V`, as this operation saves the + selection to an external `.blend` file and then appends it to the active scene + along with all its materials. + +- **Find missing textures**: Searches the textures without valid paths in the + selected project's directory. + +- **Find missing proxymats**: Similar functionality for proxymats. + +- **Save textures**: Collects all textures with valid paths from selected + objects and saves them in the `/textures/` subdirectory of the export + directory. + +- **Preserve Sharp Edges**: Marks sharp edges based on Autosmooth Angle, and + sets the angle to 180° to ensure consistency between the model in the + scene and in the `.dag` file. This function is not mandatory before exporting, + as it will automatically apply to the exported geometry (keeping the original + scene geometry unchanged). + +- **Apply Modifiers**: Applies modifiers to the geometry. Not mandatory before + export as the exporter can preserve modifiers in the original scene. + +- **Clear normals**: Removes custom normals from selected objects. + +- **sort collections**: Recursively groups scene collections by the longest + matching name prefix. You can see the example on the screenshot for the + [“Col.Joined” export](#batch-export). + +- **pack orphans**: Searches for objects not at the hierarchy's bottom and + creates individual collections for them. + +- **Setup Destruction**: Assigns a list of typical object properties for + destruction to all selected objects: + +
+ +``` + animated_node:b=yes + physObj:b=yes + collidable:b=no + massType:t=none +``` + +Creates *bounding boxes* (BBoxes) objects with `gi_black` material, sets them as +children, and assigns collider parameters: + +``` + materialName:t=[value from the material field] + density:r=[value from the density field] + massType:t=box + collType:t=box +``` + +The BBoxes may still need to be adjusted and scaled to better fit the +silhouette. In some cases, they may also need to be duplicated. However, this +process still saves time in the overall setup. + +## Experimental Features + +### Bake + +Allows baking textures from complex shaders to +[rendinst_simple](../../../../assets/shaders/dng-shaders/rendinst_simple.md). +Commonly used for final LODs or porting assets to mobile projects. + +```{seealso} +For more information, see +[*Texture Baker*](../dag4blend-texture-baker/dag4blend_texture_baker.md) tool. +``` + +Bake + +
+ +### Composite Editor + +```{seealso} +For more information, see +[*Composite Editor*](../dag4blend-comp-editor/dag4blend_comp_editor.md). +``` + +Composites Editor + +
+ +#### General Limitations of the Add-on Tools in Blender + +- Limitation on the number of characters in the name – names longer than 63 + characters will be truncated, and when importing objects with the same name, + an index `.001` is appended, reducing the maximum name length by 4 more + characters. Starting from version `1.2.6`, overly long names are saved in + Collection Property. + +- Animations are not supported yet. + + diff --git a/_sources/dagor-tools/addons/blender/dag4blend/index.rst.txt b/_sources/dagor-tools/addons/blender/dag4blend/index.rst.txt new file mode 100644 index 000000000..075dca6c3 --- /dev/null +++ b/_sources/dagor-tools/addons/blender/dag4blend/index.rst.txt @@ -0,0 +1,14 @@ + +dag4blend +========================================= + +The **dag4blend** add-on integrates Blender with Dagor Engine for seamless asset +creation, export, and management directly within the Blender interface. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + dag4blend.md + + diff --git a/_sources/dagor-tools/addons/blender/index.rst.txt b/_sources/dagor-tools/addons/blender/index.rst.txt new file mode 100644 index 000000000..47720b8d8 --- /dev/null +++ b/_sources/dagor-tools/addons/blender/index.rst.txt @@ -0,0 +1,14 @@ + +Add-ons for Blender +========================================= + +.. toctree:: + + :maxdepth: 2 + :caption: Contents: + + dag4blend/index.rst + dag4blend-comp-editor/index.rst + dag4blend-texture-baker/index.rst + + diff --git a/_sources/dagor-tools/addons/index.rst.txt b/_sources/dagor-tools/addons/index.rst.txt new file mode 100644 index 000000000..4f4ea131a --- /dev/null +++ b/_sources/dagor-tools/addons/index.rst.txt @@ -0,0 +1,14 @@ + +Add-ons for Blender and 3ds Max +========================================= + +The add-ons that integrate Blender and 3ds Max with Dagor Engine. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + blender/index.rst + 3ds-max/index.rst + + diff --git a/_sources/dagor-tools/asset-viewer/asset-viewer-comp-editor/asset_viewer_comp_editor.md.txt b/_sources/dagor-tools/asset-viewer/asset-viewer-comp-editor/asset_viewer_comp_editor.md.txt new file mode 100644 index 000000000..554c56816 --- /dev/null +++ b/_sources/dagor-tools/asset-viewer/asset-viewer-comp-editor/asset_viewer_comp_editor.md.txt @@ -0,0 +1,185 @@ +# Overview + +Before proceeding, it's strongly recommend familiarizing yourself with the main +article on the [structure of +composites](../../../assets/all-about-blk/composit_blk.md). The editor is +currently under development, so you may encounter bugs, and this documentation +could quickly become outdated. + +# Where to Find It + +You can now edit composites directly from the *Asset Viewer*. To enable the +*Composite Editor*, navigate to the **View** menu: + +![Where to Find It](_images/av_comp_edit_01.jpg) + +If you prefer the editor to open automatically when a composite is selected in +the Asset Tree and close when any other type of object is selected, you can +enable this option in the **Settings**: + +![Where to Find It](_images/av_comp_edit_02.jpg) + +```{note} +The *Composite Editor* is still under development, and it may significantly +impact performance when working with large composites that have many nested +elements. This is especially relevant, for example, for houses with complex +indoor structures in *daNetGame-based* games. For this reason, the auto-open +option is disabled by default. Use it at your own risk. +``` + +# Creating a New Composite + +1. In the **Asset Tree**, select the directory where you want to place the + composite. +2. Right-click and select **Create new composite asset** from the context menu. + +![Creating a New Composite](_images/av_comp_edit_03.jpg) + +3. In the pop-up window, enter the desired name, making sure to follow the + naming conventions (refer to the main article). If an asset with this name + already exists, a warning will be displayed when you attempt to create it. + +![Creating a New Composite](_images/av_comp_edit_04.jpg) + +# Composite Editor Interface + +The interface is divided into two main sections: **Outliner** and **Properties**. + +![Composite Editor Interface](_images/av_comp_edit_05.jpg) + +## Composite Outliner + +The **Composite Outliner** functions similarly to the **Asset Tree** but is +specific to composites. The composite itself serves as the "root" of the +structure. + +When you create a new composite, it will initially contain only the root block +with its name. To add a new node, click on this sole element and select **Add +Node** from the context menu. + +A newly created node does not contain any parameters, making it equivalent to an +empty `node{}`. + +Through the context menu, you can define the type of the node: + +- **"Change asset"** allows you to select an asset for rendering, analogous to + `name:t = ...`. +- **"Add entity"** turns the node into a random entity, analogous to `ent{}`. +- **"Add node"** allows you to add a child node. +- **"Delete node"** does exactly what it says. + +```{note} +- Adding an asset hides the option to add an entity, and vice versa – a node + cannot simultaneously contain both `name:t` and `ent{}`. +- You can also delete a node using the **Delete** key, but in both cases, + confirmation is required. +- Deleting a node will also remove all its child nodes since they are + technically nested within it (e.g., `node{node{}}`). Keep this in mind. +``` + +If a node already contains an asset, you can open it by double-clicking. This is +useful when you need to edit a subcomposite. However, since there is currently +no history of recently opened assets, returning to the "main" composite will +only be possible by finding it again in the **Asset Tree**. Therefore, the +editor will ask for confirmation before switching to another asset. + +### Identifying Random Nodes + +A random node is displayed with the same icon as an empty node, but it will be +named `random` instead of `node`. + +All possible entities are listed one level lower in the hierarchy. + +Since a random node can have child nodes, this can cause significant confusion – +these *children* are also displayed one level lower. To address this, all +`ent{}` entries are shown with an additional icon. The first icon represents an +empty node, while the second indicates the entity type. + +![Identifying Random Nodes](_images/av_comp_edit_06.jpg) + +In the `.composit.blk` file, what is shown in the screenshot might look +something like this: + +``` +node{ + ent{name:t="table_a:rendinst"} + ent{name:t="table_b:rendinst"} + node{name:t="cup_a:rendinst"} + ent{name:t=""} + node{name:t=""} +} +``` + +To improve readability, I recommend adding all `ent{}` entries first, followed +by the child nodes. However, it will work either way. + +## Editor Properties + +Do not confuse this with the **Properties** of the entire composite asset. + +![Editor Properties](_images/av_comp_edit_07.jpg) + +This section contains the properties of the selected node, along with options to +save or revert changes. + +### Entities + +This panel lists all `ent{}` nodes. Here, you can set the weight for existing +entities, change the asset (via a large button displaying the asset's name, or +"--" if no asset is selected), and add a new entity to the end of the list using +the "+" button. The context menu (accessed by the "..." button) allows you to +add an entity after any existing one (instead of at the end of the list) or +delete the selected entity. + +### Children + +A similar panel exists for *child* nodes, although weight is not assigned here +for obvious reasons. This panel may be removed in the future, as it impacts the +performance of heavy composites (some buildings have thousands of *child* +nodes), and the same functionality is available through the Outliner. + +### Node Parameters + +This section contains the properties of the selected node. To move the node, you +need to check the **Use transformation matrix** box, which corresponds to the +`tm:m=...` block. If this box is checked, you can edit the matrix in a +human-readable format: + +![Editor Properties](_images/av_comp_edit_08.jpg) + +### Add Parameters + +Here, you can set additional parameters for the node. Since the transformation +matrix takes precedence over random offsets, attempting to add both will trigger +a warning, and the parameter fields will be locked for editing. + +![Editor Properties](_images/av_comp_edit_09.jpg) + +To apply random transforms, you need to disable the matrix. + +### Composit + +The **Composit** tab offers only two options – **cancel** or **save changes**. +If you try to switch from the composite to another asset, the editor will also +ask how to handle the current changes. + +# Visual Editing + +Now we’ve reached the interesting part. In addition to text-based editing, you +can make adjustments directly in the viewport. You can left-click on any object, +and the corresponding node will be selected in both the 3D view and the +Outliner. Pressing **Z** will center the camera on the selected node and zoom in +on it. Unfortunately, selecting multiple nodes simultaneously is not yet +supported. However, you can edit matrices using the gizmo. + +When the *Composite Editor* is open, new icons appear in the toolbar: +**Select**, **Move**, **Rotate**, and **Scale**. Select is always active, but +for the other tools to have an effect, the transformation matrix must be enabled +for the selected node using the checkbox mentioned earlier. Random offsets +cannot be applied via the gizmo. These tools can be activated using the standard +hotkeys — **Q**, **W**, **E**, and **R**, respectively. + +![Visual Editing](_images/av_comp_edit_10.jpg) + + + diff --git a/_sources/dagor-tools/asset-viewer/asset-viewer-comp-editor/index.rst.txt b/_sources/dagor-tools/asset-viewer/asset-viewer-comp-editor/index.rst.txt new file mode 100644 index 000000000..7a0ab98fe --- /dev/null +++ b/_sources/dagor-tools/asset-viewer/asset-viewer-comp-editor/index.rst.txt @@ -0,0 +1,11 @@ + +Asset Viewer Composite Editor +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + asset_viewer_comp_editor.md + + diff --git a/_sources/dagor-tools/asset-viewer/asset-viewer/asset_viewer.md.txt b/_sources/dagor-tools/asset-viewer/asset-viewer/asset_viewer.md.txt new file mode 100644 index 000000000..9225695e7 --- /dev/null +++ b/_sources/dagor-tools/asset-viewer/asset-viewer/asset_viewer.md.txt @@ -0,0 +1,421 @@ + +## Overview + +The *Asset Viewer* is one of the two main tools for working with assets, and in +some cases, for creating them. It offers a vast array of parameters and +capabilities. In this article, we'll cover the basic principles for new users. + +## Basic Workflow in Asset Viewer + +### Navigation + +The navigation within *Asset Viewer* closely mirrors the controls in *3ds Max*. +The key combinations and shortcuts are directly carried over. You can get a hint +window with navigation shortcuts within *Asset Viewer* by clicking on the +**Eye** icon in the control panel: + +![Navigation Info](_images/av_navigation_info.jpg) + +### Working with Assets + +The interface is organized into three main panels: + +1. **Control Panel** + + ![Control Panel](_images/av_control_panel.jpg) + +2. **Properties Panel** + + ![Properties Panel](_images/av_properties_panel.jpg) + +3. **Viewport Settings Panel** + + ![Viewport Settings Panel](_images/av_viewport_settings_panel.jpg) + +### Control Panel + +The most frequently used features in this panel are the **Sun** and the +**Console** buttons. + +![Control Panel](_images/av_control_panel_1.jpg) + +- **Console**: This is your go-to tool. If something isn't displaying correctly, + don't just report "it doesn't work" – check the console first. You'll be + surprised how often it flags issues like duplicates and LOD errors. +- **Sun**: A set of environment management settings (including service + textures). Let's dive deeper into its parameters: + + - **Settings** – Sun settings. + + ![Sun Settings](_images/av_sun_settings.jpg) + + - **Debug Settings** – Debug modes. + - You can choose different model display modes to check for issues. + - Most commonly used are per-channel modes (diffuse, normal, smoothness, and + metallness) and albedo_ao, to check black-and-white range conformity. + + ![Debug Settings](_images/av_debug_settings.jpg) + + - **Environment Textures**: + - **envi snapshot** – Assign a texture that applies lighting properties from + a specific location (first, create this texture in that location). + - **background texture** – Add a custom background in `.dds` format (works + when an environment texture is connected). + - **paint details texture**: – Required for *daNetGame-based* games, which + supports multiple paint textures. To see the correct color of an object, + connect its paint texture here. *War Thunder* only uses one texture, which + loads automatically in *Asset Viewer*. + - **background texture stretch** – Background texture tiling. + - **reflection texture** – Reflection texture, you can connect a cubemap, + but it only works with an environment texture). + - **Level BLK (for microdetails texture)**: Necessary for *War Thunder*, + where microdetails vary by map. If your assets appear black or with + incorrect microdetails in the *daEditor*, connect the `level.blk` file for + the appropriate `level.blk` files are located at + `\\develop\gameBase\levels`. In *daNetGame-based* games, + microdetails load automatically, so no manual setup is needed. + + ![Environment Textures](_images/av_envi_textures.jpg) + + - **Sky/Weather Settings** – Lighting and time of day settings. + - Limited in scope and rarely used, but be sure to set a weather preset + during the initial setup (it’s off by default). + + ![Sky/Weather Settings](_images/av_sky_weather_settings.jpg) + + - **Ambient Wind Settings**. + - **Direction** – Wind direction + - **Strength (Beaufort)** – Wind speed in Beaufort. + - **Noise strength (Multiplier of strength)** – Multiplier of wind gust strength. + - **Noise speed (Beaufort)** – Wind gust speed. + - **Noise scale (Meters)** – Multiplier of wind gust size + - **Noise perpendicular** – direction of wind gust movement + + ![Ambient Wind Settings](_images/av_ambient_wind_settings.jpg) + + ```{note} + Wind effects are only applied to assets with `tree` in their name. Although + not all assets have advanced wind, all vegetation assets created after 2022 + include wind effects. + ``` + + - **Several Display Settings**. + - Usually, the settings shown in the image below are enabled. + - Previously, disabling all post-effects and enabling no `postfx` was the + only way to view a more accurate polygon count: + - In *War Thunder*, this provided a clear display with honest polygon + counts. + - In *daNetGame-based* games, the image was unreadable, but the polygon + count was accurate. + - Now, this is unnecessary, as the asset statistics are sufficient without + these workarounds. + - **Shadow Quality** – Adjusts shadow quality (rarely needed). + - **Render Envi Entity** – Allows you to load a background asset into + *Asset Viewer* and display everything else alongside it. Useful, e.g. for + checking how your tank looks in a hangar or comparing the size of two + assets. + + ![Display Settings](_images/av_rest_settings.jpg) + + The other parameters are typically not needed. + +### Properties Panel + +Let's look at its key parameters: + +- **Common Parameters**: + - Object type (Render Instance, prefab, texture, decal, etc.). + - Object name. + + ![Common Parameters](_images/av_properties_1.jpg) + +- **Object Specific Parameters**: + - Rotate object horizontally. + - Rotate object vertically. + - **PN-triangulation** – Geometry tessellation with `rendinst_clipmap` + material. The closer the camera, the more detailed the object becomes. + However, since this doesn't affect rounding, it’s not very useful. + - LOD distances (you can switch and view LODs). + - You can also switch LODs with hotkeys – numbers (starting from zero) force + a specific LOD. This works on the numpad as well. `Backspace` and `NumDel` + return to automatic LOD selection. A number that's too large (3+ in the + example) will select the last existing LOD. + - In automatic mode, you can move away from the object (tracking distance by + camera position) and observe the LOD transition quality. By displaying the + distance from the camera to the center and manually switching LODs, you + can fine-tune the distances. + - **generate per-instance seed** – Properties for composites. + + ![Object Specific Parameters](_images/av_properties_2.jpg) + +- **Set of Used Textures and LODs**: + - Here, you can track all the textures used by the asset as a whole and by + each LOD. + - Always consider that the more textures an asset uses, the heavier it is to + process. You should ask yourself, "Do I really need this many textures?" + - Additionally, the number of textures should typically decrease with LODs – + polygons with assigned materials are removed. + + ![Specific Parameters 2](_images/av_properties_3.jpg) + +```{note} +- The **Properties** panel can slightly slow down the loading of assets, + especially with heavy render instances containing many submaterials. If you + only need to check that each element of a large pack loads without errors + (e.g., missing LODs), you might want to temporarily disable **Properties** for + faster asset switching. The hotkey to toggle the panel is P. You can also + toggle it via **View**▸**Properties** in the menu. +``` + +### Viewport Settings Panel + +By right-clicking on the highlighted yellow rectangle, you can access the +following options: + +![Viewport Settings](_images/av_viewport_settings.jpg) + +From here, you can explore shortcuts for projection views, model grids, ground +grids, and how to enable statistics (**Stats**▸**Show Stats**). You can also +toggle the display of statistics with or without a black background +(**Stats**▸**Opaque Stats**). + +![Stats Display](_images/av_stats_display.jpg) + +Polygon count is shown by default after all post-effects are applied; the camera +position is displayed as [X, Y, Z] coordinates relative to the scene's center. +While these metrics might not be crucial for asset creators, you can customize +them to better suit your needs: + +#### Customizing Scene Statistics Display + +You can access the statistics settings in two ways: + +- Right-click on the viewport window and select **Stats**▸**Stats settings**. + + ![Stats settings](_images/av_stats_settings_1.jpg) + +- From the **Settings** menu, choose **Stats Settings**. + + ![Stats settings](_images/av_stats_settings_2.jpg) + +In this menu, you can select which information is important to you. + + ![Stats settings](_images/av_stats_settings_3.jpg) + +The settings are organized into a two-tier hierarchy, grouped into categories. +Disabling a top-level category will disable all its nested options. At the very +top, you'll find the **Show stats** option, which is the same as the one in the +previously mentioned context menu. + +Here, you can select the information that matters most to you: + +- **Stat 3d** – Is not particularly useful for asset work; it’s more relevant + for rendering engineers. You might want to keep `cpu frame` enabled for + performance tracking. +- **Camera** – Is more useful. Knowing the camera position can be handy when + working on composites, but more often, you’ll need to track the distance from + the camera to the center of the scene. This is where the pivot of the RI + (Rendering Instance) is located, simplifying the process of adjusting LOD + (Level of Detail) distances – you won’t need to manually calculate the vector + from zero to the camera’s coordinates. `camera FOV` helps ensure that the + field of view matches the in-game setting and that you're adjusting LOD + distances with the correct camera setup. +- **Asset Stats** – Provides the most useful information for asset creators, + including: + - Number of visible triangles in the asset. + - Statistics on physics collisions: the number of meshes, triangles (referred + to as faces, but assets are always triangulated), boxes, convex shapes, and + vertices. + - Similar information for trace collisions. Since there's no distinction + between these in *War Thunder*, you can disable one of the options – they'll + show identical values anyway. + - Number of materials in the rendered geometry. + - Number of textures used. + - The index of the currently displayed LOD. + + +```{note} +Asset statistics are still under development and have known issues: +- Tested on render instances; there may be bugs with dynamic models – take the + information with a grain of caution. +- If an asset lacks a specific parameter, the statistics will show the last + known value, such as the number of materials and textures on collisions that + are actually zero. +- Composites in *Asset Viewer* are displayed without collisions, so statistics + will show zeros for both physics and trace collisions. +- In *War Thunder*, there's no distinction between phys and trace collisions, + but the statistics are output as they are in *daNetGame-based games* – twice. +``` + +#### Customizing the Grid + +In addition to statistics, you can also customize the grid parameters. + + ![Customizing the Grid](_images/av_custom_grid_1.jpg) + + ![Customizing the Grid](_images/av_custom_grid_2.jpg) + +Beyond toggling grid visibility, you can configure snapping parameters (used in +the composition editor), height offset, cell size and count, as well as the +colors and thickness of the grid lines. + +#### Viewport Rotation Gizmo + +Unlike the grid and statistics, the viewport rotation gizmo only has visibility +settings. + + ![Viewport Rotation Gizmo](_images/av_custom_gizmo_1.jpg) + +When enabled, it appears in the top-right corner of the viewport(s). Beyond +simply displaying the axes, it can also be used for quick navigation: + +- You can use it as a virtual trackball to rotate the viewport – just hover over + the gizmo and start rotating by holding down the left mouse button. +- Clicking on an axis letter with the left mouse button automatically rotates + the camera along that axis. Unlike hotkeys for projections, this rotation + doesn’t switch to an orthographic view; it retains the perspective view. + + ![Viewport Rotation Gizmo](_images/av_custom_gizmo_2.jpg) + +### Building Assets + +To learn more about what *building* entails and why it’s necessary, refer to the +dedicated article about [Resource +Building](../../resource-building/resource_building.md). In short, the game +doesn't directly handle files like DAGs, textures, etc.; it operates on binary +files where these resources are compiled. To check your work in-game, you need +to compile these resources into the binary files. + +#### General Considerations + +It’s important to remember that when you export assets into `.dag` files, they +are processed by `.folder.blk` and converted into various types of in-game +objects. + +For example, if you export a house with four LODs and an overlay texture, it +might look like this: + +- **LOD00**: Geometry + Materials; Apex settings. +- **LOD01**: Geometry + Materials. +- **LOD02**: Geometry + Materials; Collision. +- **LOD03**: Geometry + Materials. +- **Overlay Texture**. + +In the *Asset Viewer* and the game itself, these components will be transformed +into the following object types: + +- **Render Instance**: All LODs with geometry and materials. +- **_Apex Object**: A sliced asset processed by Apex. +- **_Collision Object**: Collision data from `LOD02`. +- **Texture**: The overlay texture. + +When building your changes to view them in the game, it’s crucial to keep track +of what exactly you have modified. If your changes only affect a specific type +of object (e.g., the render instance), it’s more efficient to build only that +object type. + +However, if your changes impact multiple object types, it’s usually easier to +build the entire directory containing the modified asset. This approach prevents +the need to sequentially build each object type one by one. + +#### Selecting and Exporting Assets + +- You need to choose either an individual asset or the directory containing the +asset you wish to export. Your choice depends on what exactly you want to +export. + +For example: + +- If only the collision data of a specific asset has been modified, select the + **"collision object"** type. +- If only the asset itself (geometry, materials) has been modified, select the + **"render instance"** type. +- If both the asset (geometry, materials) and its collision data have been + modified, you have two options: + - Select the **render instance** first, followed by its **collision object** + (as separate asset types within *Asset Viewer*). + - Or, select the entire folder containing the asset and its collision data, + which allows you to handle everything at once. + +![Selecting and Exporting Assets](_images/av_select.jpg) + +- After selecting the asset or directory, right-click on it. + +For an individual asset, you’ll be given a single action option – exporting the +package for that specific asset (e.g., `terrain_decorations.grp`). + +For a subdirectory, you’ll have several export options: + +- **Export resources** (including subdirectories) – this covers render + instances, destructibles, collisions, etc., excluding textures. +- **Export textures** (including subdirectories). +- **Export everything** (including subdirectories). + +If you haven’t changed textures, for instance, select only the **gameres** +option. Conversely, if you’ve modified everything, choose to export everything. + +![Selecting and Exporting Assets](_images/av_export.jpg) + +You can monitor the build log in the console. When building resources using +*Asset Viewer*, the build speed is significantly slower compared to using +*daBuild*. + +```{note} +Be mindful of what you select before building. + +Exporting an asset won’t automatically include its textures located nearby. +Similarly, exporting a directory containing an asset won’t automatically include +textures located in a different directory, even if the asset references them. +``` + +#### Nuances + +1. **Package Name Conflicts** + - **War Thunder**: Package name conflicts are not a significant issue. + - **daNetGame-based**: These conflicts are common. Package names often repeat + across different packages. For example, the directory `indoor_stuff` (and + its corresponding package) exists in both the `manmade_common`, `city_1`, + and `city_2` packages. When you select the `indoor_stuff` directory and + choose **export all with subdirectories** (or select an asset and choose + **export pack indoor_stuff.grp**), all `indoor_stuff` packages across these + packages will be built. + - This will result in the build of not just the single modified item, but + potentially hundreds of objects. If a full resource rebuild was done + recently, unchanged packages will be skipped. However, if a full rebuild + hasn't been done in a while, this process could take considerable time. + +2. **HQ Texture Pack Build** + - Initially, *Asset Viewer* couldn’t handle the assembly of HQ texture packs. + Now it can. When triggering a build from the texture’s context menu, ensure + you select the option that includes HQ textures. Note that in the context + menu for directories, there’s no separation – both base and HQ texture + packs will always be assembled. + + ![Selecting and Exporting Assets](_images/av_export_2.jpg) + +3. **Logging Errors in the Console** + - By default, all asset-related errors (loggers) will be output to the + console. If you need to control these locally, you can add the following + block to your `application.blk`: + + ``` + logerr_to_con{ + assetViewer{ + include_re:t=... // only loggers matching this regex will be shown + exclude_re:t=... // loggers matching this regex will be excluded + } + } + ``` + **Example** + + ``` + logerr_to_con{ + assetViewer{ + exclude_re:t="(warning: node from)|(Shader 'land_mesh_combined' not found in bin dump)|(has mesh with 0 faces)|(degenerate tri)|(degenerate mesh node)" // loggers matching this regex will be excluded + } + } + ``` + + + + diff --git a/_sources/dagor-tools/asset-viewer/asset-viewer/index.rst.txt b/_sources/dagor-tools/asset-viewer/asset-viewer/index.rst.txt new file mode 100644 index 000000000..91a1afe97 --- /dev/null +++ b/_sources/dagor-tools/asset-viewer/asset-viewer/index.rst.txt @@ -0,0 +1,11 @@ + +Asset Viewer +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + asset_viewer.md + + diff --git a/_sources/dagor-tools/asset-viewer/collision-generation/collision_generation_for_assets.md.txt b/_sources/dagor-tools/asset-viewer/collision-generation/collision_generation_for_assets.md.txt new file mode 100644 index 000000000..f4f94f680 --- /dev/null +++ b/_sources/dagor-tools/asset-viewer/collision-generation/collision_generation_for_assets.md.txt @@ -0,0 +1,218 @@ +# Collision Generation for Assets in Asset Viewer + +## Overview + +The [*Asset Viewer*](../asset-viewer/asset_viewer.md) now supports the ability +to generate new collision nodes from a combination of original nodes. These +nodes can be built for assets through the `daBuild` process. + +A new node can be of one of the following six types: + +- `mesh`, `box`, `sphere` – merges the selected nodes into the corresponding + primitive. +- `k-dop` (discrete oriented polytope) – a bounding volume for a specific + geometry. The generation algorithm "wraps" the original mesh using predefined + directions. After export, the collision type becomes `convex`. + + The `k` in `k-dop` represents the number of initial directions used for + generation. + +- `convex computer` – creates a convex shape around the selected nodes. +- `convex v-hacd` – decomposes the mesh of the selected nodes, breaking the + geometry into multiple convex nodes. For more details on the algorithm, refer + to the original [repository](https://github.com/kmammou/v-hacd). + +## Parameters in Asset Viewer + +In the properties panel for collision assets, a tree of nodes available for +merging is now displayed. + +### Collision Nodes Panel + + + +This panel shows the collision node tree. The node prefixes indicate their +flags. If a node is merged from multiple nodes, its original child nodes will be +displayed. Merged nodes can be edited or deleted. + +### Create New Node Panel + + + +When creating a new node or editing an existing one, you can: + +- Select nodes to include in the new node during generation. +- Assign a unique name to the node, even if it replaces child nodes during the + process. +- Set the flag for whether the selected nodes will be replaced. If nodes are + replaced, they will not be exported. +- Set the `Phys Collidable` and `Traceable` flags. +- Choose a collision type for the new node from the six types described earlier. + +### Viewport Display Option + +For `mesh`, `box`, and `sphere` types, the result will be displayed in the +viewport and can be saved. For `k-dop`, `convex computer`, and `convex v-hacd` +types, the next step involves generating based on the selected parameters. + + + +Clicking on a node in the viewport will highlight it in the list of selected +nodes. Holding `Ctrl` allows for multiple node selection. + +### k-dop Node Generation Parameters + +#### Selected Preset + + + + +Select a preset for the chosen nodes. The following presets are available for +`k-dop` generation: + +- `6-dop` – regular box. +- `14-dop` – basic 6 directions + 8 corner directions. +- `18-dop` – basic 6 directions + 12 face directions. +- `26-dop` – combines face and corner directions from `14-dop` and `18-dop`. +- `k-dop with fixed X-axis` – generates `k-dop` with a fixed number of segments + around the X-axis. +- `k-dop with fixed Y-axis` – generates `k-dop` with a fixed number of segments + around the Y-axis. +- `k-dop with fixed Z-axis` – generates `k-dop` with a fixed number of segments + around the Z-axis. +- `Custom k-dop` – generates `k-dop` with a custom number of segments around the + X and Y axes. + +The number of segments can vary from 4 to 20 with an increment of 1. + +#### k-dop Rotations + + + +Rotate the `k-dop` around 3 axes to better match the original mesh. + +#### k-dop Cut Off Planes + + + +For optimization, small-area planes can be trimmed relative to the plane with +the largest area. The maximum trim value is 40%. + +#### Show k-dop + + + +The `k-dop` can be displayed in several ways: + +- Drawing planes. +- Drawing triangles. +- Drawing directions from the center, with a distance to the corresponding + plane. + +**Example:** Generating an `18-dop`. + + + +--- + +### Convex Computer Node Generation Parameters + + + +A `convex` will be generated around the selected nodes. Using the `Shrink` +parameter, the shell can be "shrunk" inward toward the selected mesh. + +**Example:** Generating a `convex computer`. + + + +--- + +### Convex v-hacd Node Generation Parameters + + + +This generation method is governed by four parameters: + +- `Convex depth` – recursion depth of the algorithm. Lower values lead to + earlier exits from the algorithm, resulting in rougher convex shapes. +- `Max convex hulls` – the number of convex nodes generated by the algorithm. If + the value is 1, it is more efficient to use `convex computer` to reduce asset + export time. +- `Max verts` – the maximum number of vertices for a single convex node. +- `Resolution` – voxelization resolution. Higher values produce more accurate + results, but also increase export time. + +```{note} +Some parameter combinations may result in invalid geometry. In such cases, the +result cannot be saved, and it is recommended to adjust the parameters, for +example, by incrementing or decrementing the `Resolution` by one step. +``` + +**Example:** Generating a `convex v-hacd`. + + + +--- + +To save all changes, press `Ctrl+S`. If this is the first time saving changes +for the asset, a `.collision.blk` file will be created alongside the `.dag` +file. The exported result will only be visible after restarting the *Asset +Viewer*. When editing, the exported result is displayed immediately after +saving. + +If a node previously exported is selected, it will revert to its original +geometry for editing. If no changes are made, switching to a different asset +will restore the `.collision.blk` file. + +```{note} +If a crash occurs while working with collisions, data loss may occur. +``` + +## Parameters in .blk + +Generation parameters are stored in the `.collision.blk` file within the +`nodes{}` block. This block lists all nodes and their generation parameters. + +### Common Parameters + +- `collision:t` – type of collision for node generation. Possible values: + - `"mesh"` + - `"box"` + - `"sphere"` + - `"kdop"` + - `"convexComputer"` + - `"convexVhacd"` +- `replaceNodes:b` – indicates whether the original nodes are replaced during + generation. +- `isPhysCollidable:b`, `isTraceable:b` – flags set for the node. +- `refNodes{}` – block with the names of the nodes used as a reference for + generation. + +### k-dop Parameters + +- `kdopPreset:i` – preset index: + - `0` – 6-dop. + - `1` – 14-dop. + - `2` – 18-dop. + - `3` – 26-dop. + - `4` – k-dop with fixed X-axis. + - `5` – k-dop with fixed Y-axis. + - `6` – k-dop with fixed Z-axis. + - `7` – Custom k-dop. +- `kdopSegmentsX:i`, `kdopSegmentsY:i` – number of segments. +- `kdopRotX:i`, `kdopRotY:i`, `kdopRotZ:i` – rotation around axes in degrees. +- `cutOffThreshold:r` – trim percentage of the maximum plane area. + +### Convex Computer Parameters + +- `shrink:r` – amount to shrink the shell inward toward the selected mesh. + +### Convex v-hacd Parameters + +- `convexDepth:i` – recursion depth of the algorithm. +- `maxConvexHulls:i` – number of convex nodes generated. +- `maxConvexVerts:i` – maximum number of vertices for a single convex node. +- `convexResolution:i` – voxelization resolution used by the algorithm. + + diff --git a/_sources/dagor-tools/asset-viewer/collision-generation/index.rst.txt b/_sources/dagor-tools/asset-viewer/collision-generation/index.rst.txt new file mode 100644 index 000000000..42829aac3 --- /dev/null +++ b/_sources/dagor-tools/asset-viewer/collision-generation/index.rst.txt @@ -0,0 +1,11 @@ + +Collision Generation for Assets +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + collision_generation_for_assets.md + + diff --git a/_sources/dagor-tools/asset-viewer/index.rst.txt b/_sources/dagor-tools/asset-viewer/index.rst.txt new file mode 100644 index 000000000..29d34dfdd --- /dev/null +++ b/_sources/dagor-tools/asset-viewer/index.rst.txt @@ -0,0 +1,13 @@ + +Asset Viewer +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + asset-viewer/index.rst + asset-viewer-comp-editor/index.rst + collision-generation/index.rst + + diff --git a/_sources/dagor-tools/blk/blk.md.txt b/_sources/dagor-tools/blk/blk.md.txt new file mode 100644 index 000000000..f3fb36665 --- /dev/null +++ b/_sources/dagor-tools/blk/blk.md.txt @@ -0,0 +1,287 @@ +# .blk File Format + +The `.blk` ("block") is a *Data Block*, the primary configuration format in +*Dagor Engine*. It is a configuration file similar to `.ini`, `.cfg`, and other +configuration files you may have encountered in other systems. + +The *Dagor Engine* uses `.blk` files for storing settings, parameters, and other +essential information. + +There are two types of `.blk` files: *text* and *binary*. + +## Text Format of .blk File + +Text `.blk` files are regular text files with proprietary syntax. + +### File Syntax + +The `.blk` file consists of a *block name* and optional *parameters* enclosed in +curly braces. + +```text +{ + :=[;] +} +``` + +where + +- ``: The name of the block, which must start with a Latin letter or +an underscore and consist of Latin letters, digits, or underscores. +- ``: The name of the parameter, which must start with a Latin + letter or an underscore and consist of Latin letters, digits, or underscores. +- ``: The type of the parameter, which is mandatory and can be one of the + following: + - **`t`**: *string*, the `` is a text string in quotes. If the string + consists of only one word, quotes may be omitted. The string should not + contain `LF`, `CR`, or `TAB` symbols. Instead, use combinations of + symbols: `~r` (`CR` symbol), `~n` (`LF` symbol), `~t` (`TAB` symbol). + - **`b`**: *boolean*, the `` is one of the strings: `yes`, `no`, + `true`, `false`, `on`, `off`, `1`, `0`. + - **`c`**: 32-bit *color (E3DCOLOR)*, the `` is a sequence of + comma-separated integer numbers representing the color the format `R,G,B` + or in `R, G, B, A` with components ranging from `0` to `255`. + - **`r`**: *floating-point number*, the `` is a floating-point number + with truncated trailing zeros. + - **`m`**: `matrix 3x4`, the `` is a string in the form of `[[first + line][second line][third line][fourth line]]`. The lines are + comma-separated floating-point numbers defining x,y,z vector (**`p3`** – + see below). + - **`p2`**: *Point2 vector*, the `` is comma-separated floating-point + numbers defining x,y vector. + - **`p3`**: *Point3 vector*, the `` is comma-separated floating-point + numbers defining x,y,z vector. + - **`p4`**: *Point4 vector*, the `` is comma-separated floating-point + numbers defining x,y,z,w vector. + - **`ip2`**: *IPoint2 vector*, the `` is comma-separated integer + numbers defining x,y vector. + - **`ip3`**: *IPoint3 vector*, the `` is comma-separated integer + numbers defining x,y,z vector. +- ``: The value of the parameter, can be in quotes. +- `[;]`: If a semicolon is placed after the parameter, the next parameter may be + on the same line. If the semicolon is omitted, the next parameter should be on + a new line. + + ```{note} + Use a tilde (`~`) in quotes to represent special characters such as + quotes. To write a tilde in a string, use two tildes (`~~`). + ``` + +Parameters can be defined as an array: + +```text +:[] = [] +``` + +where: + +- ``: The type of parameter, +- ``: A list of values of the corresponding type separated by a + semicolon or a new line. + +**Example:** + +```text +param1:i[]=[42; 43; 44;] +param2:t[]=[ + "parameter1" + "parameter2" + "parameter3" +] +``` + +### Directives and Comments + +`.blk` files may contain *parser directives* and *comments*. + +#### Directive @include + +All parameters of the file will be included as if they were initially presented +in the current file. Included files may contain other `include` files. + +Including another `.blk` file: + +```text +include +``` + +where `file name` is a path to the included `.blk` file relative to the current +`.blk` file path. If the `file_name` starts with a slash (`/`), the path is +considered from the root of the engine, otherwise from the directory where the +`.blk` file is located. In tools, starting with `#` means from the `develop` +directory. + +#### Directive @override + +```text +"@override:" +"@override:block"{ + "@override:parameter"i=10` +} +``` +There are rules to follow when *overriding*: + +- Overriding a value that has not been declared before results in a log error. +- If it's unclear whether a value to be overridden has been declared before, + it's common practice to delete it first. This ensures there is no such + variable from that point, allowing you to add the variable normally. + +**Example:** + +```text +@override:video{ + @delete:vsync:b=no + vsync:b=yes +} +``` + +The code above ensures that `vsync` is deleted first. If there was a `vsync` +before, it will be deleted; if not, then no action is taken. After that, `vsync` +does not need to be overridden and can be added normally, regardless of the +presence of `vsync` before it. + +#### Directive @delete + +```text +"@delete:" +``` + +#### Directive @clone-last + +```text +"@clone-last:" +``` + +#### Comments + +- `//` – single-line comment +- `/* ... */` – multi-line comment + +### Block Types + +Blocks can be of the following types: *sequential*, *nested* and combination of +*sequential* and *nested*. + +#### Sequential + +```text +block_name{ + param_name:type=value +} +block_name{ + param_name:type="value" +} +``` + +**Example:** + +```text +lod{ + range:r=70; +} +lod{ + range:r=10000; fname:t="billboard_octagon_impostor.lod01.dag"; +} +``` + +#### Nested + +```text +block_name{ + param_name:type=value + block_name{ + param_name:type="value" + } +} +``` + +**Example:** + +```text +contents{ + lod{ + range:r=70; + } +} +``` + +#### Combination of sequential and nested + +```text +block_name{ + param_name:type=value + block_name{ + param_name:type="value" + } + block_name{ + param_name:type=value + } +} +``` + +**Example:** + +```text +contents{ + lod{ + range:r=70; + } + lod{ + range:r=10000; fname:t="billboard_octagon_impostor.lod01.dag"; + } +} +``` + +## Binary Format of .blk File + +Binary `.blk` files are optimized for performance with a defined structure for +efficient data storage and retrieval. + +### File Structure + +The data in a binary `.blk` file consists of *header*, *name* and *string maps*, +*parameters*, and *blocks*. The data is ordered as follows: + +- **Header** +- **Name map** (parameter and block names) +- **String map** (string parameters) +- **Root parameters:** (may be nested) + - `paramCnt` + - `paramNameId_1` + - `paramType_1` + - `param_1` + - `...` + - `paramNameId_Cnt` + - `paramType_Cnt` + - `param_Cnt` +- **Root blocks:** (may be nested) + - `blockCnt` + - **Block1 parameters:** + - `paramCnt` + - `paramNameId_1` + - `paramTypeCnt_1` + - `param_1` + - `...` + - `paramNameId_Cnt` + - `paramType_Cnt` + - `param_Cnt` + - **Block1 blocks:** + - `blockCnt` + - `Block1_1` + - `Block1_2` + - `...` + - `Block1_Cnt` + - `...` + - **Block_Cnt parameters** + - **Block_Cnt blocks** + +## Useful tools + +The `dagor3_cdk` has some useful tools for working with `.blk`: + +- `binBlk.exe`: Converts binary and text `.blk` files to and from each other. +- `blkDiff.exe`: Performs a syntactic diff between two `.blk` files. +- `blkEditor-dev.exe`: Facilitates the creation of a GUI editor with dynamic + views for `.blk` files. + + diff --git a/_sources/dagor-tools/blk/index.rst.txt b/_sources/dagor-tools/blk/index.rst.txt new file mode 100644 index 000000000..d01a678ee --- /dev/null +++ b/_sources/dagor-tools/blk/index.rst.txt @@ -0,0 +1,16 @@ + +.blk Format +========================================= + +Syntax, structure, and usage of `.blk` files, including configuration examples +and parsing directives. + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + blk.md + + diff --git a/_sources/dagor-tools/daeditor/daeditor-console-commands/daeditor_console_commands.md.txt b/_sources/dagor-tools/daeditor/daeditor-console-commands/daeditor_console_commands.md.txt new file mode 100644 index 000000000..b29c010f1 --- /dev/null +++ b/_sources/dagor-tools/daeditor/daeditor-console-commands/daeditor_console_commands.md.txt @@ -0,0 +1,574 @@ +# Overview + +To view a list of all registered commands, use the `list` command in the +console. For syntax details and brief descriptions of each command, use the +`help` command. + +# camera.dir + +Sets the current direction of the camera. + +Usage: `camera.dir x y z [x_up = 0 y_up = 1 z_up = 0]` + +# camera.pos + +Shows and sets the current position of the camera. + +Usage: `camera.pos` to know camera position in last active viewport. + +Usage: `camera.pos x y z` to set camera position in last active viewport. + +# clear + +Clears the console output. + +Usage: `clear` + +# driver.reset + +Resets the graphics driver to its default state. + +Usage: `driver.reset` + +# entity.stat + +Outputs statistics for entity pools to console. + +Usage: `entity.stat` + +# envi.set + +Configures the environment settings. + +Usage: `envi.set ` + +# .sun_from_time + +Adjusts the sun position based on the specified time. + +Usage: `.sun_from_time year month day time lattitude longtitude` + +# exit + +Exits the *daEditor*. + +Usage: `exit [save_project]` + +If save_project is set no message box will be shown. + +# help + +Displays a list of available commands along with their syntax and descriptions. + +Usage: `help ` + +# land.commit_changes + +Commits changes made to the land data. + +Usage: `land.commit_changes` + +# land.ltmap + +Generates or modifies the lightmap for the land. + +Usage: `land.ltmap [file_path]` to calculate and save lightmaps; optional +`file_path` is relative to develop; with no file_path builtScene/lightmap.dds is +saved. + +# land.rebuild_colors + +Rebuilds the color information for the landmesh/heightmap. + +Usage: `land.rebuild_colors` + +# list + +Lists all registered commands. + +Usage: `list` + +# perf.dump + +Dumps performance data for analysis. + +Usage: `perf.dump` + +# perf.off + +Turns off performance monitoring. + +Usage: `perf.off` + +# perf.on + +Enables performance monitoring. + +Usage: `perf.on` + +# project.export.all + +Exports project in all formats. + +Usage: `project.export.all level_name_pc level_name_xbox level_name_ps3` to +export project in all formats where `level_name_*` – path to exported level +relative application levels directory. + +# project.export.and + +Exports project for the Android platform. + +Usage: `project.export.and level_name` to export project in Android (Tegra GPU +family) format where level_name – path to exported level relative application +levels directory. + +# project.export.ios + +Exports project for the iOS platform. + +Usage: `project.export.iOS level_name` to export project in iOS format where +`level_name` – path to exported level relative application levels directory. + +# project.export.pc + +Exports the project for PC platforms. + +Usage: `project.export.pc level_name` to export project in PC format where +`level_name` – path to exported level relative application levels directory. + +# project.export.ps3 + +Exports the project for PlayStation 3 platforms. + +Usage: `project.export.ps3 level_name` to export project in PS3 format where +level_name – path to exported level relative application levels directory. + +# project.export.ps4 + +Exports the project for PlayStation 4 platforms. + +Usage: `project.export.ps4 level_name` to export project in PS4 format where +`level_name` – path to exported level relative application levels directory. + +# project.export.xbox + +Exports the project for Xbox platforms. + +Usage: `project.export.xbox level_name` to export project in XBOX 360 format +where `level_name` – path to exported level relative application levels +directory. + +# project.open + +Opens a specified project. + +Usage: `project.open file_path [lock = false] [save_project]` where `file_path` +– full path to `level.blk` or path relative to project`s `develop` directory, +`lock` – boolean value to determine to lock project or not, `save_project` – +boolean value to supress save question message box + +# project.tex_metrics + +Computes and outputs tex metrics to console. + +Usage: `project.tex_metrics [verbose] [nodlg]` + +# screenshot.ortho + +Outputs orthographic screenshot using extents from landscape. + +Usage: `screenshot.ortho` + +# set_workspace + +Sets the current workspace configuration. + +Usage: `set_workspace application_blk_path [save_project]` to load workspace +from mentioned "application.blk" file where `application_blk_path` – path to +desired `application.blk` file. Must be full or relative to *daEditor* folder +`save_project` – boolean value to disable save question message box. + +# shaders.list + +Lists all available shaders. + +Usage: `shaders.list [name_substr]` + +# shaders.reload + +Reloads all shaders from disk. + +Usage: `shaders.reload [shaders-binary-dump-fname]`. + +# shaders.set + +Sets a specified shader configuration. + +Usage: `shaders.set ` + +# shadervar + +Lists shader variables. + +Usage: `shadervar` + +# tex.hide + +Hides the specified texture. + +Usage: `tex.hide` + +# tex.info full + +Gives a detailed list of textures in a .log/debug file. + +Usage: `tex.info full` + +# tex.refs + +Lists references to the specified texture. + +Usage: `tex.refs` + +# tex.show + +Shows the specified texture. + +Usage: `tex.show` + +# time.speed + +Sets the current simulation speed. + +Usage: `time.speed ` + +# render.shaderVar [x] [x] [x] [x] + +Sets shader variables with specified values. + +Usage: `render.shaderVar [x] [x] [x] [x]` + +# render.shaderBlk + +Applies a shader block configuration. + +Usage: `render.shaderBlk ` + +# app.tex [x] + +Manages application textures. + +Usage: `app.tex` + +# app.tex_refs + +Calculates amount of references for application textures. + +Usage: `app.tex_refs` + +# app.save_tex [x] + +Saves the specified texture(s). + +Usage: `app.save_tex [x]` + +# app.save_all_tex + +Saves all application textures. + +Usage: `app.save_all_tex` + +# app.stcode + +Displays shader code for debugging. + +Usage: `app.stcode` + +# render.reset_device + +Resets the rendering device to its default state. + +Usage: `render.reset_device` + +# render.hang_device + +Causes the rendering device to hang or pause for debugging purposes. + +Usage: `render.hang_device ` + +# render.send_gpu_dump [x] + +Sends a GPU memory dump for analysis. Parameters specify details. + +Usage: `render.send_gpu_dump [x]` + +# render.reload_shaders [use_fence] [shaders_bindump_name] + +Reloads shaders with optional parameters for synchronization and shader binding +dumps. + +Usage: `render.reload_shaders [use_fence] [shaders_bindump_name]` + +# water.hq [x] [x] [x] [x] + +Configures high-quality settings for water rendering. + +Usage: `water.hq [x] [x] [x] [x]` + +# water.foam_hats [x] [x] [x] + +Adjusts settings for foam effects on water surfaces. + +Usage: `water.foam_hats ` + +# water.surface_folding_foam [x] [x] [x] + +Configures settings for surface folding foam in water. + +Usage: `water.surface_folding_foam ` + +# water.foam_turbulent [x] [x] [x] [x] + +Adjusts settings for turbulent foam effects on water. + +Usage: `water.foam_turbulent + ` + +# water.dependency_wind [x] + +Configures water rendering to depend on wind settings. + +Usage: `water.wind_dependency ` + +# water.alignment_wind [x] + +Adjusts water alignment based on wind settings. + +Usage: `water.alignment_wind ` + +# water.choppiness [x] + +Configures the choppiness of water surfaces. + +Usage: `water.choppiness ` + +# water.facet_size [x] + +Sets the facet size for water tessellation. + +Usage: `water.facet_size ` + +# water.amplitude [x] [x] [x] [x] [x] + +Adjusts the amplitude of water waves. + +Usage: `water.amplitude or water.amplitude ` + +# water.small_wave_fraction [x] + +Configures the fraction of small waves in water rendering. + +Usage: `water.smallWaveFraction ` + +# water.cascade_window_length [x] + +Sets the length of the cascade window for water rendering. + +Usage: `water.cascade_window_length ` + +# water.cascade_facet_size [x] + +Configures facet size for water cascades. + +Usage: `water.cascade_facet_size ` + +# water.roughness [x] [x] + +Adjusts the roughness of water surfaces. + +Usage: `water.roughness ` + +# water.fft_resolution [x] + +Sets the FFT resolution for water rendering. + +Usage: `water.fft_resolution ` + +# water.tesselation + +Configures the tessellation level for water surfaces. + +Usage: `water.tesselation ` + +# water.fft_period [x] + +Sets the FFT period for water waves. + +Usage: `water.fft_period ` + +# water.spectrum [x] [x] + +Configures the water spectrum for wave patterns. + +Usage: `water.spectrum ` where ``: +phillips = 0, unified_directional = 1. + +# water.vs_samplers + +Sets the number of vertex shader samplers for water. + +# water.reset_render + +Resets water rendering settings to default. + +# water.num_cascades [x] + +Configures the number of cascades for water rendering. + +Usage: `water.num_cascades ` + +# debug_mesh.range + +Sets the range for displaying debug mesh information. + +# skies.convert_weather_blk_to_entity + +Converts a weather block to an entity format. + +Usage: `rendinst.hide_object ` + +# rendinst.hide_object [x] + +Hides a specified rendering instance object. + +Usage: `rendinst.hide_object ` + +# rendinst.list + +Lists all rendering instances. + +# rendinst.profiling [x] + +Toggles rendinst in profiles by name, or include all ri in profiler (`all`), or +exclude all rendinst from profiler (`none`). + +Usage: `rendinst.profiling |all|none` + +# rendinst.verify_lods [x] + +Verifies level of detail (LOD) settings for rendering instances. + +# ri_gpu_objects.invalidate + +Invalidates GPU objects for the rendering interface, potentially forcing a +reload. + +# rigrid.stats + +Displays statistics about the rig grid. + +# shaded_collision.none + +Disables shaded collision rendering. + +# shaded_collision.alone + +Displays shaded collision alone without any visual elements. + +# shaded_collision.with_visual + +Displays shaded collision with visual elements. + +# shaded_collision.alone_diff + +Shows differences in shaded collision alone. + +# shaded_collision.with_visual_diff + +Displays differences in shaded collision with visual elements. + +# shaded_collision.wireframe + +Renders shaded collision in wireframe mode. + +# shaded_collision.face_orientation + +Displays the face orientation for shaded collision. + +# gameres.update_pack + +Updates the specified resource pack for the game. + +# gameres.list_missing_for_res [x] + +Lists missing resources for a specified category. + +# gameres.list_missing_for_tex + +Lists missing textures for the specified category. + +# gameres.list_missing_for_all_tex [x] + +Lists missing textures across all categories. + +# riUnitedVdata.list + +Lists UnitedV data for rendering interface. + +# riUnitedVdata.status + +Displays the status of UnitedV data. + +# riUnitedVdata.dumpMem + +Dumps memory for UnitedV data. + +# riUnitedVdata.perfStat + +Provides performance statistics for UnitedV data. + +# dmUnitedVdata.list + +Lists UnitedV data for data management. + +# dmUnitedVdata.status + +Displays the status of UnitedV data in data management. + +# dmUnitedVdata.dumpMem + +Dumps memory for UnitedV data in data management. + +# dmUnitedVdata.perfStat + +Provides performance statistics for UnitedV data in data management. + +# tex.list [x] [x] [x] [x] [x] [x] [x] [x] [x] + +Lists textures with optional filtering parameters. + +# tex.downgrade [x] + +Downgrades the specified texture to a lower quality. + +# tex.setMaxLev [x] + +Sets the maximum level for texture detail. + +# tex.set + +Sets the specified texture. + +# tex.addRef + +Adds a reference to the specified texture. + +# tex.delRef + +Removes a reference from the specified texture. + +# tex.markLFU [x] + +Marks the specified texture as Least Frequently Used (LFU). + + diff --git a/_sources/dagor-tools/daeditor/daeditor-console-commands/index.rst.txt b/_sources/dagor-tools/daeditor/daeditor-console-commands/index.rst.txt new file mode 100644 index 000000000..e141e7d0f --- /dev/null +++ b/_sources/dagor-tools/daeditor/daeditor-console-commands/index.rst.txt @@ -0,0 +1,13 @@ + +daEditor Console Commands +========================================= + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + daeditor_console_commands.md + + diff --git a/_sources/dagor-tools/daeditor/daeditor/daeditor.md.txt b/_sources/dagor-tools/daeditor/daeditor/daeditor.md.txt new file mode 100644 index 000000000..43680130b --- /dev/null +++ b/_sources/dagor-tools/daeditor/daeditor/daeditor.md.txt @@ -0,0 +1,180 @@ + +## Overview + +*daEditor* (*DagorEditor*) is one of the two primary tools for working with +assets, and in some cases, for creating them. It offers a vast array of +parameters and features.In this article, we will cover the basic principles of +using *daEditor*, aimed at helping new users get started. + +## Basic Workflow in daEditor + +### Navigation + +The navigation within *daEditor* closely mirrors the controls in *3ds Max*. The +key combinations and shortcuts are directly carried over. You can get a hint +window with navigation shortcuts within *daEditor* by clicking on the **Eye** +icon in the control panel: + +![Navigation Info](_images/daedit_control_panel_0.jpg) + +### Working with Assets on the Landscape + +All asset-related work is performed within the **Landscape** tab. This is the +central workspace for placing, editing, and managing assets on the terrain or +environment you’re developing. + +![Control Panel](_images/daedit_landscape_tab.jpg) + +### Basic Logic and Controls + +The logic in *daEditor* is largely similar to that of *3ds Max*. Below is an +overview of the essential controls and buttons, all of which come with +tooltips – be sure to read them for more detailed information. + +**Create Entity** + +This button allows you to place an object onto the map. + +![Control Panel](_images/daedit_control_panel_1.jpg) + +**Console** + +If something isn't working as expected, or if something isn't working at all, +check the console for errors (look for red text). + +![Control Panel](_images/daedit_control_panel_2.jpg) + +**Object Movement Controls** + +These buttons control the movement of objects. The hotkeys are the same as in +*3ds Max*. + +![Control Panel](_images/daedit_control_panel_3.jpg) + +**Snap Settings** + +This button allows you to snap objects to the landscape grid (for object +movement), as well as snap rotation and scale. + +![Control Panel](_images/daedit_control_panel_4.jpg) + +**Drop Pivot to Ground** + +Use this to "drop" the pivot point to the ground if you've accidentally placed +it in the air. If your object has the "Place on collision" property, this will +only affect the pivot, while the object itself will always remain on the +landscape. + +![Control Panel](_images/daedit_control_panel_5.jpg) + +**Move to Selected Object** + +This button will move your camera to the currently selected object. + +![Control Panel](_images/daedit_control_panel_6.jpg) + +**Select Object by Name** + +This allows you to select an object by its name. + +![Control Panel](_images/daedit_control_panel_7.jpg) + +**Export Group as Composite** + +This button lets you export a group of objects as a composite entity. + +![Control Panel](_images/daedit_control_panel_8.jpg) + +**Break Composite into Individual Entities** + +Use this button to break down a composite entity into its individual components +(DAGs). + +![Control Panel](_images/daedit_control_panel_9.jpg) + +### Working with Object Properties + +When an object is selected, you can access its properties by pressing the letter +`P` (for "Properties") on your keyboard. + +![Object Properties](_images/daedit_obj_properties.jpg) + +**1: Object Name in Scene** + +This field displays the name of the object within the scene. It is often helpful +to have the scene names match the asset names. You can use the **Unify object +names** command to accomplish this: + +![Object Properties](_images/daedit_unify_obj_names.jpg) + +**2: Collision Placement Settings** + +This property defines how the object interacts with landscape collision: +- **Ignore Collision**: The object's height matches its pivot point. +- **Place Pivot**: The pivot point (typically the origin point of + the asset in the *3ds Max* scene) is placed directly on the collision surface. +- **Place Pivot and Use Normal**: The object’s pivot aligns to the normal of the + landscape, useful for placing objects like houses on hills so that they tilt + naturally. +- **Place 3-Point (bbox)**: A bounding box is created around the object, and the + object is placed so that at least three points of the bounding box align with + the collision surface. +- **Place Foundation (bbox)**: All four points of the bounding box base align + with the collision surface. +- **Place on Water (floatable)**: Specifically for floating objects, this option +places the object on a water surface. +- **Place Pivot with RendInst Collision**: This option aligns the object's pivot + with the collision of the corresponding Render Instance. + +**3: Actual Object Name** + +This property shows the real name of the object placed on the map. You can +select a different object here instead of placing a new one. + +**4: Shader Parameter Seed Generation** + +This option generates seeds for the shader parameters of selected objects, +including those within composite entities (as they contain many sub-objects): +- **Individual**: Generates a unique seed for each selected object. +- **Equal**: Generates the same seed for all selected objects. +- **Seed Slider**: Adjust the seed value for the previously selected seed type + (either individual or equal). + + ```{note} + These seeds affect only shader parameters, not other aspects of composites. + Currently, this feature is used solely for procedural painting. + ``` + +**5: Object Seed Generation on the Map** + +This is similar to the previous property but operates on a larger scale, +generating seeds for entire composite entities rather than individual shader +parameters: +- **Individual**: Generates a unique seed for each selected object. +- **Equal**: Generates the same seed for all selected objects. +- **Seed Slider**: Adjust the seed value for the previously selected seed type + (either individual or equal). + +### Exporting a Location + +To export a location, navigate to the menu **Project**▸**Export to Game (PC +format)**. + +![Object Properties](_images/daedit_export_location.jpg) + +After selecting this option, a series of dialogs will appear, allowing you to +choose whether to export all elements of the created location. The default +settings are typically correct and do not require adjustments. + +The most critical part of this process is specifying the correct export path for +the level. Occasionally, the tools might malfunction and suggest saving the +level in incorrect directories. + +A simple way to verify that you're exporting the level to the right location is +to check whether you're replacing the existing binary file. If you're prompted +with a message indicating that you're about to overwrite an existing file, and +given the option to "replace" or "rename", then you're exporting to the correct +directory. + + + diff --git a/_sources/dagor-tools/daeditor/daeditor/index.rst.txt b/_sources/dagor-tools/daeditor/daeditor/index.rst.txt new file mode 100644 index 000000000..2782b2458 --- /dev/null +++ b/_sources/dagor-tools/daeditor/daeditor/index.rst.txt @@ -0,0 +1,13 @@ + +daEditor +========================================= + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + daeditor.md + + diff --git a/_sources/dagor-tools/daeditor/index.rst.txt b/_sources/dagor-tools/daeditor/index.rst.txt new file mode 100644 index 000000000..62811808e --- /dev/null +++ b/_sources/dagor-tools/daeditor/index.rst.txt @@ -0,0 +1,14 @@ + +daEditor +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + daeditor/index.rst + daeditor-console-commands/index.rst + splines_in_daeditor.md + navmesh/index.rst + + diff --git a/_sources/dagor-tools/daeditor/navmesh/index.rst.txt b/_sources/dagor-tools/daeditor/navmesh/index.rst.txt new file mode 100644 index 000000000..3126efad5 --- /dev/null +++ b/_sources/dagor-tools/daeditor/navmesh/index.rst.txt @@ -0,0 +1,13 @@ + +Navigation Mesh +========================================= + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + navmesh.md + + diff --git a/_sources/dagor-tools/daeditor/navmesh/navmesh.md.txt b/_sources/dagor-tools/daeditor/navmesh/navmesh.md.txt new file mode 100644 index 000000000..7e22b4400 --- /dev/null +++ b/_sources/dagor-tools/daeditor/navmesh/navmesh.md.txt @@ -0,0 +1,184 @@ +# Navigation Mesh + +## Overview + +To ensure bots navigate around obstacles like buildings and trees, we use a +*navigation mesh* system. This system generates a separate mesh based on the +heightmap, landmesh, or water (depending on settings) that defines areas bots +can traverse. The mesh is generated in the [*daEditor*](../daeditor/daeditor.md) +under the `locationed/properties` tab. + +The navigation mesh is baked into a binary file during every export. + +The navigation mesh is generated from a top-down view, which means there will be +no navmesh under bridges or other elevated assets. To avoid this, you can +specify the rendinst to exclude in `develop/gameBase/config/navmesh_layers.blk` +under the `filter{}` block. The syntax is as follows: + +``` +"^.*af_conveyor.*$" {} +``` + +This is a regular expression, allowing you to exclude either all assets or +specific ones by name. Note that the ending `*$" {}` is required. + +```{important} +For successful ground navigation mesh generation, at least one spline must be +present in the level (water navigation meshes are calculated based on the water +surface alone). +``` + +## Navigation Mesh Interface + + + + +The settings are generally straightforward, but here are the key options: + +- **Full main HMAP/Detailed HMAP/Explicit area**: This option selects which part + of the location to generate the navmesh for. It is recommended to map only the + detailed area or even less if the entire location isn’t used. Mapping the + entire detailed area can: + - Increase the binary size beyond reasonable limits. + - Slow down server performance. + +- **Navmesh type**: Defines how the navigation mesh is generated. + +- **Water navigation**: Generates a navigation mesh on water. + +- **Splines navigation**: Generates a navmesh around splines. If there are no + splines with the **Use for navmesh** checkbox enabled, no navmesh will be + generated. + +- **Height from above**: Generates the mesh based on geometry from a top-down + view. + +- **Detailed geometry**: Uses high-detail rendinsts for the navigation mesh. + +- **Water and geometry**: Generates the navigation mesh based on both water and + geometry, considering any rendinsts encountered on the surface. + +- **Use water surface**: Excludes the underwater portion of the heightmap, + making it inaccessible to tanks. The water height is defined in the **Crossing + water** block, ensuring bots can cross small bodies of water. + +- **Water navigation**: Generates a navigation mesh for ships. Currently, it’s + not possible to have both tank and ship navigation meshes on the same + location. + +By default, the navigation mesh generates a reasonably dense grid. However, for +narrow streets or other tight spaces, it may be necessary to adjust the cell +size or distance to obstacles. + +- **Use detailed geometry** and **Tiled navmesh** are available for + *daNetGame*-based projects. + +
+ +*daNetGame*-based projects also allow bots to use the navigation mesh for +jumping over obstacles (e.g., fences) and taking cover behind objects. + +## Navmesh Jumps, Links, and Cover Interface + + + +- **Export jump links mesh**: Generates jump links, essential for most maps. + Without this, bots won’t be able to jump over fences. + +- **Jump over height**: The maximum height of an obstacle that bots can jump + over. + +- **Jump length**: The depth of the obstacle and the maximum distance between + two jump points. + +- **Delta height**: Defines the height difference at which a single jump link is + split into smaller jumps (prevents bots from jumping over overly tall objects + like poles). + +- **Merge delta angle**: The angle at which different jump links are merged. + +- **Max angle between edge**: Another setting related to jump link merging. + +- **Export covers**: Generates cover points for bots. + +For the first four settings, these are simply size constraints for covers: + +- **Min window for shoot**: Defines a window (e.g., a small opening) through + which a bot can shoot. Once found, it marks the end of a cover point. + +- **Collision transparent**: Determines the transparency of collisions. This + feature has limited accuracy because voxelized collision is imprecise. Since + simplified collision data is used for map generation, small gaps might not be + recognized (e.g., for carts or fences with large openings). + +- **Delta height**: Similar to jump links, this setting divides cover points + based on height differences (e.g., a wall with a window in the middle could + result in three separate cover points: full cover, half cover, and full + cover). + +- **Shoot depth**: Checks the possibility of shooting from cover. Special points + are generated from which bots can shoot, and these points are traced from the + cover's edges. + +
+ +## Tank Navigation Mesh + +The tank navigation mesh is constrained by splines. You can use existing splines +or create new ones specifically for navigation mesh purposes. + + + +If a spline has the **Use for navmesh** checkbox enabled in the properties +panel, the mesh will include the area within the specified radius around the +spline. + +
+ +After creating a navigation mesh, additional files such as `navMesh.PC.bin` +and/or `navMesh2.PC.bin` will appear in the level directory. + +To view the navmesh in the [*daEditor*](../daeditor/daeditor.md), enable the +**show exported navmesh** option in the panel. + +To view the navmesh in-game, use the console command `ai.debug_nav`. + +### Common Error + +The following error indicates that the tank/ship navigation mesh is missing from +the level: + +``` +18.43 [F] $03 FATAL ERROR: skyquake\prog\main\app.cpp,5191: assert failed in ..\..\skyquake\prog\main\app.cpp:5191,AcesApp::doJob() : "pathfinder::isLoaded() || (strstr(levelFileName, "avg_") != levelFileName && strstr(levelFileName, "avn_") != levelFileName)" Call stack (5 frames): ... +``` + +## Displaying Navigation in daEditor + +The navigation and additional object display modes can be toggled from the +following menu: + + + +--- + +- **Show exported nav mesh**: Displays navigation areas with a red-yellow + overlay. + + + + --- + +- **Show exported covers**: Displays cover points for AI in green. + + + + --- + +- **Show exported nav mesh obstacles**: Displays navigation obstacles in purple + boxes. + + + + --- + + diff --git a/_sources/dagor-tools/daeditor/splines_in_daeditor.md.txt b/_sources/dagor-tools/daeditor/splines_in_daeditor.md.txt new file mode 100644 index 000000000..62682e70c --- /dev/null +++ b/_sources/dagor-tools/daeditor/splines_in_daeditor.md.txt @@ -0,0 +1,88 @@ +# Splines in daEditor + +More detailed information can be found here: +[spline.blk](../../assets/all-about-blk/spline_blk.md). + +## Splines and Render Instances (Rendinsts) + +1. **Removing Render Instances Along the Spline** + - Splines can remove both render instances generated at runtime (from masks + and scripts) and those saved in the level (generated via splines). + + a) To remove render instances generated by masks or scripts, use the + parameters in the spline class: + - `sweepWidth:r=` - distance from the center of the spline to the end of the + "cleared area". + - `addFuzzySweepHalfWidth:r=` - distance from the center of the spline to the + end of the sparse space, used to create irregular edges. + + b) To remove render instances generated along splines, use: + - `sweep2Width:r=` + - `addFuzzySweep2HalfWidth:r=` + - Additionally, `startPadding:r=` and `endPadding:r=` define a distance from + the start and end of the spline where objects are not generated (useful for + roads that lead into bridges). + + To split spline-generated assets into separate entities, use the command + **Landscape** ▸ **Instantiate gen. objects into separate entities**. + +2. **Rendering Along a Loft Instead of a Perfect Spline** + - To generate instances along a loft, accounting for its curves and twists, + enable: + - `storeSegsForGen:b=yes` in the loft generation block. + - `useLoftSegs:b=yes` either in the object generation block (for a specific + object) or anywhere after the loft definition (for all objects). + +3. **Splines as Modifiers** + - Splines can act as modifiers for heightmaps or land meshes (delanoy). + +## Sorting Order of Lofts in the Clipmap During Rendering + +1. **Order of Spline Classes** + - This order is set in the [*daEditor*](../daeditor/daeditor/daeditor.md) + (using the **place layer order** switch) or in the `splines.blk` of a + specific location (via `layerOrder:i=` with values ranging from `0` to + `2`). The higher the value, the higher the spline sits in the rendering + layer. This also applies to decals. The priority of splines is higher than + that of lofts. To place a decal above a spline, add + `script:t="layerOrder=n"` to the decal where **n** is the desired layer. + +2. **Order of Loft Rendering** + - Each loft within a spline has a rendering order defined by + `loftLayerOrder:i=`. The higher the number, the higher the loft appears in + the rendering stack. By default, all lofts are at layer 0. + +4. **Decals Above Splines** + - To render decals on top of all splines, check if the box in **Exported + Parameters** ▸ **Geom: render loft below all** is checked in the + *daEditor*. + +## Additional Notes + +- **Straight Segments**: When creating a spline, holding `Shift` forces the + spline to consist of straight segments instead of curves (each node switches + to corner mode). + +- **Tight Fence Orientation**: To make objects placed along a spline form a + continuous chain, add: + - `tightFenceOrient:b="yes"` in the spline class (within the `objGenerate{}` + block). + +## Asset Orientation Types in the Spline Class + +- `orientation:t="fence_normal"` +- `orientation:t="fence"` +- `orientation:t="normal"` +- `orientation:t="spline"`: assets are aligned parallel to the spline. +- `orientation:t="spline_up"` +- `orientation:t="world"` +- `orientation:t="world_xz"` +- `orientation:t="normal_xz"` + +## Additional Parameter + +- **zeroOpacityDistAtEnds:r=2**: This parameter sets zero opacity at the + spline's end vertices (distance in meters). It is applied at the root of the + spline. + + diff --git a/_sources/dagor-tools/dag2rires/dag2rires.md.txt b/_sources/dagor-tools/dag2rires/dag2rires.md.txt new file mode 100644 index 000000000..7462b0d50 --- /dev/null +++ b/_sources/dagor-tools/dag2rires/dag2rires.md.txt @@ -0,0 +1,87 @@ +# Overview + +The *dag2riRes* tool is used for the following purposes: + +- Converting `.dag` files into `.composit.blk` files. +- Generating multiple `.dag` files from objects within a single `.dag` file. + +The tool uses two key files: + +- `dag2riRes-dev.exe` +- `dag2riRes-dev.pdb` + +# Usage Recommendation + +For ease of use, it is recommended to create a separate directory where you can +copy the tool. Avoid placing this directory within the project resources, as +temporary files can accumulate there, potentially disrupting the build process +and generating errors in the editor logs. While these issues are usually minor +and can be resolved by routine cleanup, in cases like research or iterative +testing, where frequent exporting, testing, and deleting is necessary, it is +better to keep the tool in a dedicated directory. In the created directory, +duplicate the `*.exe` and `*.pdb` files. + +# Generating a .composit.blk File + +To generate a `.composit.blk` file: + +1. In *3ds Max*/*Blender*, either create a new object if it is not yet available + in the asset database, or import it from an existing `.dag` file. +2. Name the object either after the original `.dag` file from which you imported + the geometry or after the `.dag` file you want to generate from the object + using *dag2riRes*. +3. Add a three-digit suffix such as `_000`. +4. If you assign the suffix `_origin` to any object in the scene, its pivot + point will be used as the zero-coordinate in the resulting composite file. + + ```{note} + If the `.dag` file being processed with *dag2riRes* lacks a node named + `*_origin`, the pivot in the resulting composite file will not match the + pivot of the original `.dag`, and will be offset instead. + ``` +5. It is recommended to clone similar geometry in the scene as a reference (or + instance). +6. Export the `.dag` scene to the directory containing the *dag2riRes* tool. +7. The composite file will be generated in the root directory, next to the + executable file. + +For more detailed instructions on creating `.composit.blk` files, please refer +to the relevant documentation. + +See more details about composite files +[here](../../assets/all-about-blk/composit_blk.md). + +# Rules for Generating Individual .dag Files + +When generating individual `.dag` files: + +- `.dag` files will be created based on similar names. For a set of similarly + named objects in the scene, only one `.dag` file will be generated based on + the first object in the numerical order. For example, from the objects + `test_geometry_001`, `test_geometry_127`, and `test_geometry_origin`, only one + `.dag` file will be created, named `test_geometry`, based on the first object + (`test_geometry_001`). +- `.dag` files will automatically be assigned a `.lod00` suffix; no other + suffixes are supported. +- The `.dag` files will be located in the `\simple_dags\p_RendInst` directory. +- `.rendinst.blk` files will be generated alongside the `.dag` files, but they + are generally not useful. + +# Running the dag2riRes + +To run `dag2riRes-dev.exe`, it is recommended to use *FAR Manager*. Upon +launching, the log will display a brief instruction: + +![Running the dag2riRes](_images/dag2rires_01.png) + +Enter the command in the command line. At a minimum, you need to specify the +name of the `.dag` file you are processing and the target directory. For +example: + +``` +dag2riRes-dev.exe -s:test.dag -d:simple_dags +``` + +All other parameters are optional. + + diff --git a/_sources/dagor-tools/dag2rires/index.rst.txt b/_sources/dagor-tools/dag2rires/index.rst.txt new file mode 100644 index 000000000..94e7a2a83 --- /dev/null +++ b/_sources/dagor-tools/dag2rires/index.rst.txt @@ -0,0 +1,11 @@ +dag2riRes +========================================= + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + dag2rires.md + diff --git a/_sources/dagor-tools/impostor-baker/impostor_baker.md.txt b/_sources/dagor-tools/impostor-baker/impostor_baker.md.txt new file mode 100644 index 000000000..740e88f3e --- /dev/null +++ b/_sources/dagor-tools/impostor-baker/impostor_baker.md.txt @@ -0,0 +1,405 @@ +# Overview + +The purpose of this tool is to generate impostor textures of rendInst models to +be exported to game resource packages. + +# Local Workflow + +- The tool is a separate executable. The existing daBuild is console + application, thus it does not support rendering assets. +- The generation of the impostor textures takes place before the building of the + assets, so the generated textures get exported as well + +1. Generate the impostor textures. +2. Build the resources with dabuild (to test them locally). +3. Commit changes: + - `.folder.blk`, which is used for the trees, + - the generated textures (there are 3 per rendinst), + - `riImpostors.bin` files, which are modified (found in + //res/). + +# Local Workflow - Quick Start + +1. Enable baked impostors in `.folder.blk` files + + 1.1. In the `.folder.blk` that exports trees, look for such virtual assets: + + `virtual_res_blk{ find:t="^(.*bush.*)\.lod00\.dag$"...` + + 1.2. Replace this line: + + `lod { range:r=1000; fname:t="../dynamic_imposter.lod01.dag";}` + + to + + `lod { range:r=1000; fname:t="../billboard_octagon_impostor.lod01.dag";}` + + 1.3. Add impostor block: `impostor {}` (check the end of the page for more + details on this). + +2. Run `daImpostor.cmd` in `/develop/` + +3. Run *dabuild*. Necessary packages (or just build everything): + + 3.1. `vegetation.grp` (or wherever the affected trees are exported to) + + 3.2. `_impostors.dxp` (there could be more if there are + trees in different folders) + + 3.3. `.grp` for the `impostor_data.impostorData.blk` file. The location is specified in `application.blk`: `assets/impostor_data_folder:t=...` + +4. (optional) Export level binaries. The game runs without this, but the + rotation palettes won't be available. Without this step, there will be a + logerr when a level is loaded. It is not dangerous, safe to ignore, but the + level will look slightly different after level binary export. + +5. When uploading stuff to cvs, it has to include all the generated + textures+.folder.blk in the generated impostors folder + (/impostors/); and the impostor_data.impostorData.blk file, and + of course modified the .folder.blk. + +# How to Access the Tool + +Here will be description about how to access the tool. + +# Impostor Texture Resolution + +The texture sizes can be specified in `application.blk` or in `.folder.blk` per +asset. + +In `application.blk`: + +The texture height can be specified either globally or based on world space tree +height, using quality levels. The width of the texture will be calculated based +on world space height/width ratio of the tree. Wide trees will have a wide +texture. For configuration, check the end of this page. + +In `.folder.blk`: + +Here the exact resolution can be specified. If only height is specified, width +will be calculated based on world space height/width ratio of the tree. The +impostor block options for *textureWidth* and *textureHeight* correspond to the +resolution of the entire generated texture, not per-slice. The generated +textures will contain 9 views in a row, but they are compacted. + +Keep in mind that the option for texture resolutions will apply to the highest, +*hq* texture config. These resolutions should be the ones that the current game +is supposed to use with the highest quality options. Mip offsets are applied for +mq, and lq and optionally applied for mobile distribution too. + +If you want to specify texture quality for specific platforms, the +`impostors/.folder.blk` has to be changed. The generated textures are created +for all platforms. `.folder.blk` can be used to export them with mip offsets. +Until there is no project specific option here, it's better to update +`impostorBaker.cpp` to generate a different default `.folder.blk`. + +# How to Use the Tool + +1. Using the separate tool: + +The tool needs to be executed from the develop folder in order to work. It needs +two mandatory arguments: the path to the `application.blk` and the path to the +root dir: + +`> G:/dagor2/tools/dagor3_cdk/bin64/impostorBaker-dev.exe ../application.blk -rootdir:G:/dagor2/enlisted/develop [options...]` + +The options are: + +- **debug:** either `classic` or `default`. This sets the debugging mode. +- **assets:** Asset names can be listed here (of + type rendinst), separated with `;`. The tool will export these assets. +- **packs:** Assets from these packs, which have an + impostor will be exported. +- **clean:** Can be used to remove all textures that belong to assets +that no longer exist. Default value is `no`. - +**folderblk:** This option specifies what to do +with the `.folder.blk` files found inside the impostor directories: + - `disabled`: never generate or modify these files; + - `dont_replace`: generate `.folder.blk` if it doesn't exist; + - `replace` (default): always generate/replace existing. + +If the assets or packs options are set, only those assets will be generated. +Otherwise all supported assets (rendinst which have an *impostor* block). If +invalid arguments are detected the application will print out a help menu with +all these arguments. + +The tool will generate a folder in every folder containing rendinst which +support impostors. The textures and a `.folder.blk` (depending on the settings) +will be placed in this folder upon generation. + +```{note} +Don't put anything else in that folder, because it's content is +handled automatically. If the clean option is enabled, it will parse all +impostor folders, and all file names inside these folders. It will keep all +files which belong to an existing asset, that supports impostors; it will delete +all textures which match the impostor texture name format, which don't belong to +any such asset; `.folder.blk` files are ignored at this step; if any other file +is found, then the cleaning operation will abort to prevent accidentally +deleting necessary files. +``` + +2. Using the *Asset Viewer*: + +Let the image do the talking: + +![Asset Viewer](./_images/imp_baker_asset_viewer.png) + +Note that the impostor textures only appear if they exist when the av starts. If +the impostor textures are generated from the av, then they will only appear in +the assets after a restart. + +# How to Enable the Impostor Texture Generation of an Asset + +First of all, the asset has to be of type rendinst, otherwise the tool will just +skip it. + +Add an *impostor* block to the content of the virtual asset. The impostor block +**must be directly inside of the content block**, not inside of a third block. +At the moment baked/runtime impostor duality is not supported. It's not possible +to set up different impostor types for different build configurations, eg. +different platforms. This is a doable feature, but it is not done.  + +**Example** + +``` +virtual_res_blk{ +  find:t="^(.*tree_tropic_large_.*)\.lod00\.dag$" +  className:t="rendInst" +  contents{ +    impostor{ +      textureWidth:i=4096 +      textureHeight:i=0 // automatically adjust to width, based on asset height (for trees/bushes) +      rotationPaletteSize:i=3 +      mipCount:i=0 // 0 means generate all until specified smallest mip size (application.blk) +    } +    //... +  } +} +``` + +or just simply + +``` +virtual_res_blk{ +  find:t="^(.*tree_tropic_large_.*)\.lod00\.dag$" +  className:t="rendInst" +  contents{ +    impostor{} // autodetect impostor type; use default settings +    //... +  } +} +``` + +Any of the parameters inside the impostor block can be left out to use the +default values. The block can also be empty. The tool will generate a texture, +that is composed of slices, which correspond to different viewing angles of the +asset. + +- **textureWidth:** X resolution of the entire texture containing 9 slices, +- **textureHeight:** Y resolution of the generated texture = height of a single + slice, +- **mipCount:** by default (value=0) it will generate all mips based on + `application.blk` settings. Any different value will manually override it. It + means the total number of mip levels including the base texture. +- **rotationPaletteSize:** The tree will be able to rotate around Y, but only a + few discrete angles are allowed. For rotationPaletteSize=3, possible rotations + will be 0, 120, 240 degrees. + + ```{warning} + There will be a shadow texture created for every possible + rotation for every tree! + ``` + +- **preshadowsEnabled:** Disable preshadows for this asset, +- **crownCenterOffset1:** Point3 offset of transmittance ellipsoid center in + meters, +- **crownRadOffset1:** Point3 offset of transmittance ellipsoid radius in + meters, +- **crownCenter2:** Point3 secondary transmittance ellipsoid center in meters, +- **crownRad2:** Point3 secondary transmittance ellipsoid radius in meters, +- **mipOffsets_hq_mq_lq:ip3=0,1,2:** These mip offsets will be exported directly + to the `.tex.blk` files. These options only affect dabuild. +- **mobileMipOffsets_hq_mq_lq:ip3=0,1,2:** Same as mipOffsets_hq_mq_lq, except + it's for mobile platforms. If the project is not built for mobile, then no + need to specify it. +- **impostorNormalMip:i=5:** There is a way to tell baker which mip will be used + for baking the normals for this asset. By default it's 0. + +The default values can be found in: +`prog\gameLibs\publicInclude\rendInst\impostorTextureMgr.h` + +# How to Enable Baked Impostors in a New Game + +1. Add copy the current `billboard_octagon_impostor.lod01.dag` file to every + location, where there is a `dynamic_imposter.lod01.dag` file in the assets + folder. If there is already one, check if it's the same. + +2. Enable `impostorData` asset type in `application.blk`: + + - assets/types/ type:t="impostorData" + - assets/export/types/ type:t="impostorData" + +3. Add `assets/impostor` block to the `application.blk` + + - **data_folder:t** – mandatory, pick a location that is exported for the + game always (not level dependent or something similar); The corresponding + grp cannot contain any assets that use baked impostors!!! + - **splitAt:i** – optional, splitAt value generated for impostor textures. It + will be used to export all impostor textures within the project. + - **defaultTextureHeight:i** – optional, default texture height for generated + impostor textures. It can be overwritten in the virtual asset blk. + - **textureQualityLevels { qualityLevel { minHeight:r=; textureHeight:i= }** + – list of texture heights based on world space tree height. *textureHeight* + will be applied for trees that are at least *minHeight* tall. Multiple + qualityLevel blocks can be specified. **Only one of defaultTextureHeight + and textureQualityLevels can be specified at a time.** + - **mobileMipOffset:i** – optional, if the mobile version of the game + requires smaller resolution textures than the PC, a mip offset can be + applied to them using this option. Texture can be generated in PC + resolution and the mobile will use them with the given mip offset. + - **normalMipOffset:i** – normal_translucency texture will have a lower + resolution than the diffuse texture when using this. + - **aoSmoothnessMipOffset:i** – same as the above, but for ao_smoothness + texture, + - **aoBrightness:r** - brightness of impostor AO effect default: 0.7 + - **aoFalloffStart:r** -  lower means darker center of impostor AO effect + (0..1) default: 0.25 + - **aoFalloffStop:r** - lower means darker edge of impostor AO effect (0..1) + default: 1.0 + - **preshadowsEnabled:b** - enable or disable preshadows by default for this + project. It can be overwritten per-asset. Preshadows usually improve + quality at the cost of performance, although they don't work for every + asset. default: yes + + **Example** + + ``` + impostor{ + data_folder:t="develop/assets/gameres/gameObjects" +  preshadowsEnabled:b=yes +  splitAt:i=256 +  mobileMipOffset:i=1 +  normalMipOffset:i=1 +  aoSmoothnessMipOffset:i=1 +  textureQualityLevels{ + qualityLevel{ + minHeight:r=0; textureHeight:i=32 + } + qualityLevel{ + minHeight:r=4; textureHeight:i=64 + } + qualityLevel{ + minHeight:r=8; textureHeight:i=128 + } + qualityLevel{ + minHeight:r=16; textureHeight:i=256 + } + } + } + ``` + +4. Check the corresponding `gameParams.blk` + + 4.1. Remove this line (if exists): + + `enableImpostorTextureManager:b=false (default=yes)` + + 4.2. Optionally add this line to disable preshadow compression: + + `enableImpostorPreshadowCompression:b = (default=yes)` + + 4.3. Parameters for transmittance approximation for outside of cascade0: + + ``` + treeCrownTransmittance{ +   brightness:r // default - 0.5 +   falloffStart:r // default - 0.01 +   falloffStop:r // default - 1. +   enabled:b // default - no + } + ``` + +# How to Use ImpostorNormalMip for Smoothness Hack + +The idea of hack. At some mip of branches normal texture place a the same +texture, but with fade smoothness channel. After that bake the impostor with +this texture, and as a result we saw in game impostor with less whitish stuff on +the edge.  + + +1. Set up a mipFade feature for normal texture of branches for vegetation, for + example you set a 4 mip as faded + + ```{important} + You should specify mipFade according to swizzling. + ``` + + As shows the example below, here we want mip fade for smoothness channel, + which stored in alpha channel. But according to swizzling Alpha channel goes + to Red channel. So we apply mip fade to red channel. + + **Example** + + Customized mipmap lit color for A channel(smoothness) only for branches + exclude palms, olives, glossy foliage etc. + + ``` + virtual_res_blk{ +   find:t="^(.*branch.*_n?)\.tif$" +   //exclude glossy foliage here! +   className:t="tex" +   contents{ +   hqMip:i=1; mqMip:i=2; lqMip:i=3 +   convert:b=yes; fmt:t="BC7" +   rebuild_bc67:b=yes +   gamma:r=1 +   stubTexTag:t="smooth0_nx_metal0_ny" +   mipFilter:t="filterKaiser"; mipFilterAlpha:r=42; mipFilterStretch:r=2  +   addrU:t="wrap"; addrV:t="wrap" +   hqMip:i=0; mqMip:i=1; lqMip:i=2 +   swizzleARGB:t="RAGB" +   mipFade{ +     mipFadeColor:p4=1.0,-1,-1,-1 +     mipFadeStart:c=0,0,0,0 +     mipFadeEnd:c=4,4,4,4 +     } +   } + } + ``` + +2. Make a export of this export, to apply changes of mipFade feature. + +3. Set up a mip which will be used for sampling, per asset for tree.  + + **Example** + + ``` + virtual_res_blk{ + find:t="^(tree_autumn_.*)\.lod00\.dag$" + className:t="rendInst" + contents{ + lod{ + range:r=80; + } + lod{ + range:r=160; + } + lod{ + range:r=1500; fname:t="../billboard_octagon_impostor.lod01.dag"; + } + transition_lod{ + ... + } + impostor{ + impostorNormalMip:i=5; + } + allowProxyMat:b=yes + } + } + ``` + +4. Run *ImpostorBaker*, to bake the impostors. + +5. Export whole data to the game. + + diff --git a/_sources/dagor-tools/impostor-baker/index.rst.txt b/_sources/dagor-tools/impostor-baker/index.rst.txt new file mode 100644 index 000000000..f1810c1fd --- /dev/null +++ b/_sources/dagor-tools/impostor-baker/index.rst.txt @@ -0,0 +1,11 @@ +Impostor Baker +========================================= + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + impostor_baker.md + diff --git a/_sources/dagor-tools/index.rst.txt b/_sources/dagor-tools/index.rst.txt new file mode 100644 index 000000000..6a98c47fc --- /dev/null +++ b/_sources/dagor-tools/index.rst.txt @@ -0,0 +1,22 @@ + +Dagor Tools +=============================================== + +Essential tools for working with the Dagor Engine. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + blk/index.rst + asset-viewer/index.rst + daeditor/index.rst + dag2rires/index.rst + impostor-baker/index.rst + levels-deps/index.rst + resource-building/index.rst + substance-designer/index.rst + addons/index.rst + + + diff --git a/_sources/dagor-tools/levels-deps/index.rst.txt b/_sources/dagor-tools/levels-deps/index.rst.txt new file mode 100644 index 000000000..aa689f816 --- /dev/null +++ b/_sources/dagor-tools/levels-deps/index.rst.txt @@ -0,0 +1,10 @@ +levels.deps +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + levels_deps.md + + diff --git a/_sources/dagor-tools/levels-deps/levels_deps.md.txt b/_sources/dagor-tools/levels-deps/levels_deps.md.txt new file mode 100644 index 000000000..d4cd8b571 --- /dev/null +++ b/_sources/dagor-tools/levels-deps/levels_deps.md.txt @@ -0,0 +1,161 @@ +# levels.deps + +## Overview + +The *levels.deps* tool provides two logs that are essential for tracking asset +and texture dependencies: + +1. **Texture-to-Asset Dependency Log**: This log shows which assets are using + specific textures. With this information, you can precisely identify which + assets need to have a texture removed to ensure it no longer appears in a + certain location (or, conversely, determine which assets should be removed + from a location). + +2. **Asset-to-Texture Dependency Log**: This log identifies which textures are + used by specific assets. It also helps you determine whether a texture is + used exclusively by a particular asset or is shared across multiple assets. + Additionally, this log displays the vertex buffer for each asset, as well as + the global buffer for the map. + +## Usage + +The usage process is consistent across *all* projects: + +1. Navigate to the `/tools/dagor3_cdk/util64/` directory. + +2. Run the appropriate batch file. + +3. Wait for the tool to process all the maps. + +4. Once processing is complete, navigate to the output directory: + `levels.deps/`. + +5. Open the `.deps` file for the desired map to access the two types of logs: + + - **Texture-to-Asset Dependency Log** + - **Asset-to-Texture Dependency Log** + +### Texture-to-Asset Dependency Log + +This is the first log in the file, which indicates which assets are using a +specific texture. + +The log format typically looks like this: + +``` +[texture size] texture name <- asset(s) +``` + +**Example** + +``` +referenced 752 DDSx (4 root, legend: [WxH memSz] TEX <- RES...): +[ 256x256 85K] african_fabric_cover_d_tex_d* <- debris_clothes_f; +[ 256x256 85K] african_fabric_cover_h_tex_d* <- debris_clothes_e; +[ 256x256 85K] african_fabric_cover_tex_n* <- debris_clothes_e; debris_clothes_f; +......................... +total 874M for 752 texture(s) +``` + +### Asset-to-Texture Dependency Log + +This is the second log in the file, which provides the following information: + +- Which textures are used by a specific asset. +- Whether these textures are unique to that asset or shared across multiple + assets. +- The vertex buffer for each asset and the global vertex buffer for the map. + +The log format typically looks like this: + +``` +[asset vertex buffer + unique texture size] asset name -> unique textures; shared textures; +``` + +**Example** + +``` +referenced 3428 resources (1704 root, legend: [resVB + uniqueTex] RES -> unique{TEX...}; shared{TEX...}): +* [ 1345K+ 0K] 88mm_flak_36_canon_a -> shared[2]={ flak_36_set_tex_d*; flak_36_set_tex_n*; }; + 88mm_flak_36_canon_a_collision + +* [ 1345K+ 0K] 88mm_flak_36_canon_b -> shared[2]={ flak_36_set_tex_d*; flak_36_set_tex_n*; }; + 88mm_flak_36_canon_b_collision + +* [ 71K+ 170K] wooden_power_pole_a -> unique[2]={ insulator_tex_d*; insulator_tex_n*; }; shared[7]={ decal_modulate_leaks_bottom_tex_m*;}; +......................... +total 322.4M (VB/IB) for 3428 resource(s) // total vertex buffer for the location. +``` + +This log is particularly useful because of the vertex buffer data, which helps +identify potential issues with excessive texture channels (e.g., if the vertex +buffer size is very large). + +## Tool Internals + +Understanding the internal structure of the tool is crucial for effective usage. + +### File Structure + +The tool consists of the following components: + +- `dbldUtil-dev.exe`: Located at `/tools/dagor3_cdk/util/`. + +- Batch Files (`build_deps.cmd`): Located at + `//develop/levels.deps/`. + +- Configuration Files (`game_env.blk`): Located in the same directory as the + batch files. + +While there's no need to modify the executable, you might need to adjust the +batch files. + +### Batch Files + +The batch files consist of command lines that perform specific tasks. For +example: + +```cmd +@for %%f in (..\..\game\content\\levels\*.bin) do ..\..\..\tools\dagor3_cdk\util\dbldUtil-dev.exe PC %%f -deps:game_env-cr.blk >\%%~nxf.deps +``` + +This command means: + +- `@for %%f in (..\..\game\content\\levels\*.bin)`: For all files + with a `.bin` extension in the specified directory, +- `do ..\..\..\tools\dagor3_cdk\util\dbldUtil-dev.exe PC %%f + -deps:game_env-cr.blk >\%%~nxf.deps`: run the tool with the + configuration on a PC, and output the results to the + `` directory with the same filename but with a `.deps` + extension. + +If you don’t want the tool to process all binaries, you can modify the batch +file to target specific files. + +For instance, to process a specific file: + +``` +..\..\..\tools\dagor3_cdk\util\dbldUtil-dev.exe PC ..\..\game\content\\levels\cr_menu_background.bin -deps:game_env-cr.blk >\cr_menu_background.bin.deps +``` + +This command instructs the tool to: + +- process a specific file (`cr_menu_background.bin`), +- using the `` configuration, +- output the result to the designated directory and file. + +### Tool Configurations + +If you encounter any errors while using the tool, it’s essential to check the +configuration files. + + + +The `game_env.blk` file defines the "working directories" and, crucially, the +[packages](../resource-building/resource_building.md#what-is-a-package) required +for the map to function correctly. Therefore, if the tool doesn’t process your +map, don’t worry. Check that all packages the map depends on are listed in the +configuration file and read the error logs carefully. + + + diff --git a/_sources/dagor-tools/resource-building/index.rst.txt b/_sources/dagor-tools/resource-building/index.rst.txt new file mode 100644 index 000000000..961965ce5 --- /dev/null +++ b/_sources/dagor-tools/resource-building/index.rst.txt @@ -0,0 +1,12 @@ + +Resource Building +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + resource_building.md + vromfs.md + + diff --git a/_sources/dagor-tools/resource-building/packages.md.txt b/_sources/dagor-tools/resource-building/packages.md.txt new file mode 100644 index 000000000..e76945b77 --- /dev/null +++ b/_sources/dagor-tools/resource-building/packages.md.txt @@ -0,0 +1,46 @@ +# Packages + +## How It Works + +The rules that define which packages exist in the game and their dependencies +are specified in the +[`application.blk`](../../assets/all-about-blk/application_blk.md) file within +the `packages{}` block. + +Example: + +``` +pkg_dev{ // package name + PC:b=yes; iOS:b=no; and:b=no; // platforms + destSuffix:t="/../content.hq" // if the package should be placed in content.hq (needed for HQ versions) + "PC~~dedicatedServer":b=yes // required on dedicated servers (HQ versions are not needed, standard ones are) + allow_patch:b=false // should patching be allowed (only disabled for pkg_dev, everything in production is patched) + always_commit:b=true // should the rebuild commit changes + dependencies{ // dependencies + "*" {base:b=yes;} // base package + pkg_cockpits {base:b=yes;} // cockpit assets + } +} +``` + +The `dependencies{}` block indicates that Package A, which specifies a +dependency on Package B, relies on Package B. However, Package B does not depend +on Package A. + +## How to Add a New Package + +To add a new package, define the new `pkg` in `application.blk`, modify the +necessary [`folder.blk`](../../assets/all-about-blk/folder_blk.md) files (export +settings for assets), run the [local build](resource_building.md#local-build), +and ensure that the dependencies are correct and no errors occur. + +It’s not necessary to rebuild the [vromfs](vromfs.md) files after defining a new +package. + +For the game to recognize the package content, you must specify it in the +settings file +[`settings.blk`](../../assets/all-about-blk/config_and_settings_blk.md) located +at `engine_root\\develop\gameBase\_pc\settings.blk`. Add the +package paths in both the `addons{}` and `addons_no_check{}` blocks. + + diff --git a/_sources/dagor-tools/resource-building/resource_building.md.txt b/_sources/dagor-tools/resource-building/resource_building.md.txt new file mode 100644 index 000000000..17764dbea --- /dev/null +++ b/_sources/dagor-tools/resource-building/resource_building.md.txt @@ -0,0 +1,477 @@ +# Resource Building: daBuild, build, vromfs, levels, settings.blk + +Resource building refers to the process of packaging all game assets – including +models, textures, levels, and their associated settings and game logic – into +binary files. This approach helps reduce the number of files that need to be +downloaded, speeding up the download process while keeping the data volume +constant. It also protects our assets from being exploited by players for +unintended purposes. + +The game itself does not interact directly with the raw assets like models, +textures, or level settings that we create. Instead, it only interacts with the +compiled binary files. When a level is loaded, the necessary packages are +fetched, decompressed, and the required information is extracted from them. + +This article provides an overview of how to build assets, levels, and settings. + +## Parameters in .folder.blk Affecting the Building Process + +Resource building is governed by the rules defined in `.folder.blk` files. + +```{seealso} +For more information, see +[.folder.blk](../../assets/all-about-blk/folder_blk.md). +``` + +For example, the following block specifies compression parameters for `.tiff` +textures. + +```text +virtual_res_blk{ + find:t="^(.*)\.tiff$" // search for any .tiff files + className:t="tex" // assign the "texture" class + contents{ // processing details + convert:b=yes;fmt:t="DXT1|DXT5" // convert; use DXT1 or DXT5 format (if alpha is present) + mipFilter:t="filterKaiser";mipFilterAlpha:r=40;mipFilterStretch:r=2 // mipmap compression using + // the Kaiser filter (sharpens); with two parameters + addrU:t="wrap";addrV:t="wrap" // define texture tiling behavior, wrap = repeat for repeating textures. + hqMip:i=0;mqMip:i=1;lqMip:i=2 // define the displayed mip level based on graphics quality; + // hq (high quality) uses the original texture, + // mq uses mip level 1 (50% compression), lq uses mip level 2 (75% compression). + } +} +``` + +There are numerous such processing blocks. Below, we'll examine the key ones. + +## Global Export Parameters + +```text +export{ + package:t="*" // Specify the package to which the asset will be built + // (a package is the highest level of asset grouping) + forcePackage:t="*" // Some packages might be automatically renamed by hardcoded logic. + // This parameter enforces a specific name. Use this if you want to + // ensure that certain assets are built into only one location. + ddsxTexPackPrefix:t="tanks/" // Specify the directory in the built resources where + // texture packs will be stored (a pack is the next level of grouping within a package). + // In this example, texture packs for tanks will be built + // into the "tanks" directory rather than the general directory. + ddsxTexPack:t="*name_src" // Specify the name of the texture pack. If "*name_src" is used, + // the name will be derived from the directory containing the textures. + gameResPack:t="aces.grp" // Specify the name of the resource pack. If "*name_src" is used, + // the name will be derived from the folder containing the textures. + splitNotSeparate:b=true // Indicate that textures should not be split between the base client and the full client. + // In the base client, textures are downscaled to 512px so players can download a smaller + // amount of data and start playing sooner. To maintain visual quality, some textures, like + // those for tanks or hangars, are not downscaled but kept at normal quality. This flag is + // set to true to prevent downscaling. The default is false, and it can be omitted. +} +``` + +These are just a few examples. Let's delve into the primary parameters. + +## About Packs and Packages + +The hierarchy of resources can be illustrated as follows: + +Hierarchy of Resources + +In essence, a project can contain several packages, and each package can include +multiple packs. + +### What Is a "Package"? + +A *package* typically serves as a container for resources that we want to +distribute to or remove from the player's environment. For example, we might +bundle a specific location and its assets into a package for a particular event. +Players download it, enjoy the event for a week, and once the event concludes, +the package is removed from their resources. + +Packages can also be used to release or sell add-ons. Instead of requiring +players to download 20 GB of resources upfront, they can start with a minimal +setup and quickly get into the game. Later, they can purchase additional content +and download the necessary data from the relevant package. + +```{seealso} +For more information, see +[Packages](./packages.md). +``` + +### What Is a "Pack"? + +A *pack* is a component of a package where the assets are actually built. The +logic for dividing assets into packs is straightforward: + +- When a location is loaded, the minimum possible number of packs should be + fetched to optimize loading times. +- Each pack should ideally be between 10 to 100 MB (with 100 MB being the + absolute maximum) to ensure efficient unpacking. + +Generally, we group similar assets together; for example, all vehicle props +might go into a pack named `vehicles`. Defensive structures like pillboxes, +trenches, bunkers, and barricades might be grouped into a pack called +`fortifications`. + +If a pack becomes too large, we break it down into smaller groups. For example, +vehicles could be further divided into packs such as `buses`, `trucks`, and +`cars`. + +## Local Build + +When you create a new asset, it needs to be tested locally in the game. The +local client, like the player's client, only understands built resources, so +they need to be built before testing. + +There are three types of builds: + +1. **Full Build**: Builds all resources. +2. **Partial Pack Build**: Builds the specific pack containing the resource you + need. This method is used when only a few assets have been modified – quick + and efficient. +3. **Partial Package Build**: Builds an entire package (a set of packs). + Although this is a longer process, it can be more convenient in some cases, + such as in *daNetGame*-based games, where packaging the resources this way + might be preferable to building individual packs. + +## Local Full daBuild + +The [*daBuild*](../daeditor/daeditor/daeditor.md) is a program executed via the +`dabuild.cmd` batch file. + +```{important} +Running `dabuild.cmd` will build all resources – this process can take hours. If +you only need to build a single resource for quick testing, use +`dabuild_test.bat` instead. +``` + +### Building and Errors + +In theory, all assets should be error-free. However, asset management initially +relied heavily on manual checks, leading to human error and allowing issues to +slip through. Over time, more automated checks were added to *daBuild*, which +means that older assets that previously built without problems might now trigger +errors. If an error occurs while building a pack, the build process for that +pack is halted, and subsequent assets are not built. Errors are only detected +during the build process, but they also interrupt it, making it time-consuming +to identify and fix issues across all assets within a pack. + +To address this, the `-keep_building_after_error` flag was introduced. If the +previous build resulted in errors, you can add this flag at the end of the batch +file command to allow *daBuild* to continue building all resources while logging +the errors. + +```{note} +The `-keep_building_after_error` flag should not be used to ignore errors. The +build process for specific assets will still be interrupted, but it will move on +to the next asset in the pack rather than stopping at the first error. Once +you've collected error data, fix the assets and run the build without this flag +to ensure that *daBuild* completes successfully without issues. +``` + +### Local Pack Build + +```{important} +Building packs with *daBuild* will compile all packs matching a specified +pattern. For example, if you have a `vehicles` pack and a `vehicles_modern` +pack, building `vehicles` will compile both packs unless you specify the exact +pack extension (e.g., `vehicles.grp` to target only that pack). + +Also, note that *daBuild* will build packs based on the package name. For +example, if you have several packs within the `main` package and you run a build +using the `main` pattern, it will build all packs within the `main` package. +**This builds all packs within the `main` package, not the `main` package +itself.** + +This happens because the final pack names always include the package name as a +prefix. For example, the `vehicles` pack in the `main` package will ultimately +be named `main_vehicles`. +``` + +To build a specific pack, open `dabuild_test.bat` in any text editor, and you +will see a line like this: + +```text +..\..\tools\dagor3_cdk\bin64\dabuild-dev.exe -target:PC ..\application.blk -packs_re:usa_gm -Q +``` + +Replace `usa_gm` with the name of the pack you need to build. The pack is +determined by the nearest `.folder.blk` file to the asset, containing lines +like: + +```text +export{ + ddsxTexPack:t="gm_lvl_assets.dxp.bin" + gameResPack:t="gm_lvl_assets.grp" +} +``` + +The `gm_lvl_assets` is an example of the pack name into which the resources will +be built. It may vary – refer to your specific setup. + +```{important} +Notice that there are two types of packs: + +- `ddsxTexPack`: Exports textures. +- `gameResPack`: Exports models. + +It's possible for textures to be exported to one pack and models to another. +For example: + + ``` + export{ + ddsxTexPack:t="gm_lvl_assets.dxp.bin" + gameResPack:t="locations.grp" + } + ``` + +You need to build the packs corresponding to the resources you've modified. If +you've changed textures, build the texture pack. If you've changed models, build +the model pack. If both were changed, build both packs. +``` + +## Local Package Build + +Unlike packs, packages are more comprehensive and refer to self-contained +volumes of resources that can be enabled or disabled with a "toggle". + +For example, in *War Thunder*: + +- `pkg_main` (or simply `*`): The default package where all assets are exported. +- `pkg_dev`: Contains assets that should be built but not distributed to + players. +- `tomoe`: A package for modifying certain symbols in countries where their + original form is prohibited. +- Event packages are also occasionally used. + +In *daNetGame*-based games, each location is its own package, which can be +distributed to players independently. + +In a `.folder.blk` file, the package entry looks like this: + +```text +export{ + package:t="tomoe" +} +``` + +In *War Thunder*, local package builds are not common, as there are few +packages, and packs are usually built instead. However, in *daNetGame*-based +games, this is an extremely useful feature. There are two options for such +builds. + +### Option 1: Building a Specific Package + +In the `daBuild` batch file, write: + +```text +..\..\tools\dagor3_cdk\bin64\dabuild-dev.exe -target:PC ..\application.blk -package:package_name -Q +``` + +Replace `package_name` with the name of the package you need to build. This will +build the entire package with validation and checks. + +```{note} +Package builds target specific packages, unlike packs, which work based on +patterns. This isn't usually an issue unless you're trying to build textures. + +For example, `package_name` and `package_name_hq` (high-quality textures used +for close-up views) are different packages. Building the package with +`-package:package_name` will only compile standard textures, not high-quality +ones. This could result in your changes appearing in low-quality textures but +reverting when viewed up close, as the high-quality textures haven't been +updated. + +To avoid this, you should either: + +- sequentially build both packages using one batch file: + `-package:package_name -package:package_name_hq` + +or + +- create two separate batch files: one for the main resource package (non-HQ + textures) and another specifically for HQ textures. +``` + +### Option 2: Building a Specific Package and Its Dependencies + +In *daNetGame-based* games, packages often have cross-references. When something +changes in a "common" package, you need to ensure that everything works +correctly in all other packages that reference it. Instead of doing a full build +(which is very time-consuming), you can build the "common" package along with +its dependent packages, which is much faster. + +To do this, write the following in the `daBuild` batch file: + +```text +..\..\tools\dagor3_cdk\bin64\dabuild-dev.exe -target:PC ..\application.blk -package_and_deps:package_name -Q +``` + +The `package_and_deps` refers to the package and its dependencies. + +## Toggling Packages in settings.blk + +Occasionally, you may need to enable or disable packages to test specific +scenarios (for example, disabling a package to verify that the game runs without +it). This is configured in the `settings.blk` file. + +```{seealso} +For more information, see +[settings.blk](../../assets/all-about-blk/config_and_settings_blk). +``` + +For all projects, after modifying the package list, you must rebuild the +[`.vromfs.bin`](vromfs.md) files. + +In *War Thunder*, packages are enabled or disabled in the file located at +`//develop/gameBase/_pc/settings.blk`: + +```text +addons{ + folder:t = "content.hq/hq_tex" + folder:t = "content.hq/pkg_cockpits" + folder:t = "content/pkg_china" + folder:t = "content.hq/pkg_china_hq" + folder:t = "content/pkg_dev" + folder:t = "content.hq/pkg_dev_hq" + folder:t = "content/hc_pacific" + folder:t = "content/pkg_user" + folder:t = "content/pkg_local" + folder:t = "content/tomoe" + folder:t = "content.hq/tomoe_hq" + folder:t = "content.hq/uhq_vehicles" + folder:t = "content.hq/uhq_aircraft" + folder:t = "content.hq/uhq_environment" +} +addons_no_check{ + folder:t = "content.hq/hq_tex" + folder:t = "content.hq/pkg_cockpits" + folder:t = "content/pkg_china" + folder:t = "content.hq/pkg_china_hq" + folder:t = "content/pkg_dev" + folder:t = "content.hq/pkg_dev_hq" + folder:t = "content/hc_pacific" + folder:t = "content/pkg_user" + folder:t = "content/pkg_local" + folder:t = "content/tomoe" + folder:t = "content.hq/tomoe_hq" + folder:t = "content.hq/uhq_vehicles" + folder:t = "content.hq/uhq_aircraft" + folder:t = "content.hq/uhq_environment" +} +``` + +To disable a package, simply comment out the relevant lines in both blocks and +rebuild `.vromfs.bin` files. + +It's important to note that this file is responsible only for enabling or +disabling packages within the game; it does not handle the creation of packages. +The requirement for a package to be built by *daBuild* is defined in the +`application.blk` file within the `packages{}` block. + +```{seealso} +For more information, see +[application.blk](../../assets/all-about-blk/application_blk.md). +``` + +## Local Build of a Specific Asset + +The `daBuild` command with the `-build:[:]` parameter allows +you to build a single asset into the specified file. This command does not +update packages, meaning the updated asset will not be added to any package. + +## Local Resource Build in Asset Viewer + +Resources can also be built using the [*Asset +Viewer*](../asset-viewer/asset-viewer/asset_viewer.md), which often speeds up +the process since `daBuild` via batch files can sometimes lag unpredictably. + +```{seealso} +For more information on how to build using *Asset Viewer*, see +[Asset Viewer: Building Assets](../asset-viewer/asset-viewer/asset_viewer.md#building-assets). +``` + +## Local Vromfs Build + +*VROMFS* stands for "Virtual Read-Only Memory File System". Essentially, +[vromfs](vromfs.md) files are the "virtual configuration disk" for our game. +They contain all the game's operational settings that aren't hard-coded. + +When creating assets, you need to build vromfs primarily when you're configuring +asset destruction or fine-tuning the behavior of in-game vehicles. In other +scenarios, vromfs building is typically unnecessary. + +It's crucial to remember that, by default, vromfs are delivered over the network +at the start of each mission, allowing for different settings per mission. If +you want to test something locally, ensure that your `config.blk` file has the +following line in the `debug{}` block: `offlineBinaries:b=yes`. Alternatively, +you can use `disableNetwork:b=yes` if network features are irrelevant to you. +For added security, you might want to include both. + +### Methods to Build Vromfs + +1. **Using `create_vrsroms.bat`** + - Located in the `//develop/gameBase` directory. + This method is useful because it immediately indicates if there's an issue + with the settings by throwing an error. Additionally, it provides a local + log (`log_vrom`) in the same directory, which helps you identify and + resolve any problems. + +2. **Using `aces_dev.exe`** + - Technically, this tool does not build vromfs. However, if you have + `vromfsPriority:b=no` set in the `debug{}` block of your `config.blk`, all + configuration files will be read directly from `develop/gameBase` instead + of from vromfs. This approach offers several advantages: there's no need to + wait for vromfs building after each change, and errors are logged in a more + readable format. Additionally, this method allows you to add the powerful + `trackEnvChanges:b=yes` line to your `config.blk`, enabling you to tweak + settings directly in-game. Although this doesn't work for all settings, + it's particularly helpful for adjusting weather or visual elements, as you + can see the changes in real-time without restarting the client. + +Choose the method based on your experience. The in-game approach might be less +convenient, but sometimes it's essential to ensure everything behaves exactly as +it would in production. + +## Local Build of Resources and Vromfs in the open daEditor and Client + +You can build resources and [vromfs](vromfs.md) while the +[*daEditor*](../daeditor/daeditor/daeditor.md) is open (though resource building +might cause the *daEditor* to crash). + +However, resources and vromfs cannot be built while the client is open. + +If you find that resources aren't building after you've closed the client – or +they seem to build, but the changes aren't reflected in-game – open the Task +Manager and terminate any lingering `aces_dev.exe` processes. + +## Local Level Export + +If you're developing in-game vehicles that are loaded via missions, you can skip +this section. + +However, if you're creating objects for maps, you'll need to place them on the +map and export the level to test them in-game. This process is done via the +[*daEditor*](../daeditor/daeditor/daeditor.md). + +Level export is necessary when: + +- You're working with prefabs. Prefabs are only included in the game during +level re-export. +- You've added a new asset that wasn't previously on the level or removed + something from the location. +- Something has changed in object generation, and their placement needs to be + updated. + +If you're only modifying render instances or textures, there's no need to +re-export the level – doing so would just waste time. + +Once you have placed all your objects, save the level and follow these steps: + +1. Open the **Project** menu. +2. Select **Export to Game (PC format)** (if needed). +3. Click **OK** on all subsequent dialog boxes. +4. Save the level binary file. +5. After the level build is complete, launch the game and verify the objects. + + diff --git a/_sources/dagor-tools/resource-building/vromfs.md.txt b/_sources/dagor-tools/resource-building/vromfs.md.txt new file mode 100644 index 000000000..32310fc9f --- /dev/null +++ b/_sources/dagor-tools/resource-building/vromfs.md.txt @@ -0,0 +1,49 @@ +# Vromfs + +## What is Vromfs? + +*Vromfs* is a type of virtual file system used by Dagor games. + +Files and directories are compressed into a single file with the extension +`.vromfs.bin`. This file can be both compressed and cryptographically signed +during creation. + +Files are created and managed using `vromfsPacker-dev.exe`, which can also +unpack them. To use it, run the command: + +``` +vromfsPacker-dev.exe some_config.blk +``` + +The configuration file in [`.blk` format](../blk/blk.md), +contains rules for compression, specifying what to compress, the source and +destination paths of directories, compression settings, signing, etc. + +You can open a `.vromfs.bin` file to inspect which directories and files are +compressed within each vrom file and identify their source paths. It is also +possible to decompress a vrom file manually. + +Using vroms protects data from modification and significantly reduces load +times. + +## Important Tips and Hints + +- **Potential Issues:** Using the flag has drawbacks. For example, the + disappearance of a file might go unnoticed because it would still be found in + the vrom. + +- **daNetGame Approach:** *daNetGame-based* games use a different concept. + All add-ons and vroms are mounted to the game via a list in `settings.blk`, + which also provides the source of the vrom. The flag + `debug{useAddonVromSrc:b=yes}` tells the game to ignore vroms and instead + mount the provided directories. + +- **Advantages of Vroms:** Vroms are small and can hold vital information, such + as scripts and game data, which allows updates or patches without a full patch + (particularly important for consoles or phones where quick updates are not + feasible). Consequently, vroms are updated in all games. In *WarThunder*, this + is done via a special service that also synchronizes vroms between dedicated + servers and clients. In *daNetGame-based* games, the game downloads these + files at startup (only on consoles). Future updates may include downloading + vroms before joining queues or in other scenarios. + diff --git a/_sources/dagor-tools/substance-designer/index.rst.txt b/_sources/dagor-tools/substance-designer/index.rst.txt new file mode 100644 index 000000000..81092554c --- /dev/null +++ b/_sources/dagor-tools/substance-designer/index.rst.txt @@ -0,0 +1,11 @@ + +Substance Designer +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + substance_designer.md + + diff --git a/_sources/dagor-tools/substance-designer/substance_designer.md.txt b/_sources/dagor-tools/substance-designer/substance_designer.md.txt new file mode 100644 index 000000000..c2d415a58 --- /dev/null +++ b/_sources/dagor-tools/substance-designer/substance_designer.md.txt @@ -0,0 +1,115 @@ +# Substance Designer Mip Generator + +## Installation + +To avoid having to search for the node on your disk every time, you can add it +to your custom library. To do this, go to **Edit** ▸ **Preferences** ▸ +**Projects** ▸ **Library** ▸ **+**, and in the pop-up window, add the directory +containing the node. For internal team members, the directory is located at: + +``` +/tools/substance_library/ +``` + +If you already have a custom library, you can simply copy the node into it. Once +added, the node will be available under the **Filters** ▸ **Transforms** tab and +accessible via search. + + + +--- + +## Usage + +To use the node, drag it into a new Substance Graph and connect your diffuse +texture with an alpha channel to the `tex_d` input. The initial result +(`tex_d_mips`) may not be perfect and could require further configuration. If it +looks correct from the start, custom mips may not be necessary. + +### Initial Setup + +Let’s consider a less-than-ideal input example: a metallic grid of 7x13 cells, +where the edges of the cells align with the edges of the texture. + +```{note} +This is an exaggeratedly bad case, and ideally, most of these issues should be +resolved during the texture creation process. +``` + +First, adjust the global offset. In the **Main** tab, enter the number of grid +cells and set **Half Cell Offset** to `True`. Note that changing this parameter +will generate a second output – `tex_d_offset`, which doesn’t contain mips. +After configuring the diffuse, remember to connect the normal map input to apply +the same offset. + + + + +### Mip Adjustment + +Now, let’s move on to configuring the mips. The settings are consistent across +all mip levels. The first few mips likely won’t require modification. From left +to right in the output image, the mips are ordered as 0, 1, 2, and so on. Once +you find the first mip that looks unclear, start configuring the settings. + +For example, by mip level 2 (`mip02`), the lines may appear unclear. Initially, +you can improve this by adjusting the contrast and midpoint sliders. + +However, at some point, the contrast will no longer be enough – the mip +resolution will be too low to properly render the cells. This is where the +**cell count** setting comes in handy. + +First, set the number of cells so that one complete cell is drawn per mip level. +It’s easier to configure when the edges are aligned around the perimeter, so you +may want to temporarily switch to half-cell offset for the zero mip. + +Then, reduce the number of cells, approximately to half the original count. You +can experiment with a smaller reduction, but you’ll need to test in-game to +ensure no noticeable flickering occurs due to line shifts rather than a +reduction in cell count. + + + + +For `mip05`, improving line clarity required reducing the `7x13` grid to `4x8`. + +If a significantly distinct area of the texture has been cropped out, you can +reposition it with the offset tool. The step size corresponds to one grid cell. + +As the resolution decreases, the line thickness will inevitably increase in +proportion since it can’t be thinner than a single pixel. However, if the lines +remain two pixels thick on distant mips and contrast adjustments don’t help, you +can manually enter a non-integer offset for problematic mips. Often, a value of +`0.01` will suffice. + + + + +Eventually, the texture will degrade into an unreadable cluster of pixels. To +avoid manually adjusting the "midpoint" for every mip beyond this point, the +**Main** tab allows you to replace the alpha channel in all subsequent mips with +a solid fill – either fully transparent or fully opaque. + +The settings for these mips are hidden to keep the interface uncluttered and +make it easier to navigate the list. + +## Enabling Custom Mips + +Simply modifying the texture in this way will break its display in both the +[*Asset Viewer*](../asset-viewer/asset-viewer/asset_viewer.md) and in-game. You +must also specify that the texture contains custom mips, or the engine will +misinterpret it. + +To do this, create a `.tex.blk` file named after the texture (without the +extension) in the same directory as the texture itself. Inside this file, +specify the texture name and include the appropriate block. + +For example, for the texture `barbwire_tex_d.tif`, the `barbwire_tex_d.tex.blk` +file would look like this: + +``` +name:t="barbwire_tex_d.tif" +include "#/develop/assets/_srgbx_with_mips.blk" +``` + + diff --git a/_sources/danetgame-framework/daNetGame/index.rst.txt b/_sources/danetgame-framework/daNetGame/index.rst.txt new file mode 100644 index 000000000..bfe88e84d --- /dev/null +++ b/_sources/danetgame-framework/daNetGame/index.rst.txt @@ -0,0 +1,10 @@ + +DaNetGame Framework +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + danetgame-framework/index.rst + diff --git a/_sources/danetgame-framework/index.rst.txt b/_sources/danetgame-framework/index.rst.txt new file mode 100644 index 000000000..753e95c7c --- /dev/null +++ b/_sources/danetgame-framework/index.rst.txt @@ -0,0 +1,8 @@ + +DaNetGame Framework +========================================= + +Explore the DaNetGame Framework, a powerful toolset for developing and managing +networked multiplayer games on the Dagor Engine. + + diff --git a/_sources/getting-started/directory_structure.md.txt b/_sources/getting-started/directory_structure.md.txt new file mode 100644 index 000000000..410ad6657 --- /dev/null +++ b/_sources/getting-started/directory_structure.md.txt @@ -0,0 +1,317 @@ +# Directory Structure Overview + +## General Directory Structure + +At the top level of the *Dagor Engine* directory structure, the root directory +is organized into four main sections: + +- **[Main Sources](#main-sources):** Contain the engine core and + associated tools. +- **[Projects](#projects):** Contain files specific to individual game + projects. +- **[Samples](#samples-1):** Include example projects for reference. +- **[Documentation](#documentation):** Provides comprehensive guides and + references. + +Below is a tree of the general directory structure: + +``` +DagorEngineRootDirectory/ +├── / +│ ├── prog/ +│ │ ├── ui/ +│ │ ├── scripts/ +│ │ └── gameBase/ +│ ├── develop/ +│ │ ├── assets/ +│ │ ├── levels/ +│ │ ├── gui(ui)/ +│ │ └── gameBase/ +│ ├── game/ +│ ├── tools/ +│ └── application.blk +├── prog/ +│ ├── _jBuild/ +│ ├── 1stPartyLibs/ +│ ├── 3rdPartyLibs/ +│ ├── dagorInclude/ +│ ├── engine/ +│ ├── tools/ +│ ├── scripts/ +│ ├── gameLibs/ +│ ├── daNetGame/ +│ ├── daNetGameLibs/ +│ └── samples/ +├── samples/ +└── _docs/ +``` + +## Main Sources + +The main sources directory `prog/` contains several key parts, each serving a +specific purpose: + +### `_jBuild/` + +Contains common JAM file settings used to build code for different platforms. + +### `1stPartyLibs/` + +Contains internal libraries. These libraries have no dependencies on the engine +or other internal projects, except for `3rdPartyLibs`, making them usable +outside of Dagor Engine projects. + +### `3rdPartyLibs/` + +Contains external libraries with no dependencies on Gaijin code. The code within +`3rdPartyLibs/` is entirely independent. + +### `dagorInclude/` + +Contains essential components and modules that form the core functionality, +including 3D rendering, animation systems, debugging tools, device drivers, +special effects, resource management, and much more. May have dependencies on +`1stPartyLibs/` and `3rdPartyLibs/`. + +### `engine/` + +Contains the core components of the Dagor Engine, encompassing a broad range of +functionalities critical for game development. This directory includes systems +for console processing, device drivers, game resources, base GUI components, +input/output systems, and so on. Most parts are optionally used across various +applications. They may have dependencies on `1stPartyLibs/` and `3rdPartyLibs/`. + +### `tools/` + +Contains the source code for various Dagor Tools. + +### `scripts/` + +Contains common scripts, primarily *Quirrel*, which is the main dynamic +scripting language used in the Dagor Engine. + +### `gameLibs/` + +Contains libraries for game development. Most of these libraries are +cross-platform. Dependencies are limited to `1stPartyLibs/`, `3rdPartyLibs/`, +`engine/`, and other `gameLibs/`. + +### `daNetGame/` + +Contains a Work-In-Progress (WIP) Entity Component System (ECS) framework for +building cross-platform network games. This codebase is subject to change, with +specific components such as AI, weapons, player customization, and terrain +expected to be moved to `daNetGameLibs/` and potentially rewritten using +*dascript* and *ECS* principles. Dependencies should only include +`1stPartyLibs/`, `3rdPartyLibs/`, `engine/`, `daECS/`, and some `gameLibs/`. The +goal is to support a general networking solution for any physical game, with +both dedicated and player-hosted servers (excluding peer-to-peer). + +### `daNetGameLibs/` + +Contains libraries that assist in developing games using the *daNetGame* +framework. Dependencies can include `1stPartyLibs/`, `3rdPartyLibs/`, `engine/`, +`daNetGame/`, `daECS/`, and some `gameLibs/`. + +### `samples/` + +Contains sample projects for both the core engine and game libraries are stored +here. + +**Library Development Principles** + +Libraries should adhere to the **FIRS(T)** principles: + +- *Focused*: Each library should have a single responsibility. +- *Independent*: Libraries should minimize dependencies. +- *Reusable*: Code should be designed for reuse. +- *Small*: Keep libraries concise and manageable. +- *Testable*: Ensure libraries can be easily tested. + +Developers are encouraged to move code that meets these principles into +`1stPartyLibs/` or `gameLibs/`, depending on the dependencies, rather than +keeping it within individual projects. This practice helps avoid code +duplication and increases the likelihood of code review and improvement. + +## Projects + +### General Architecture of Projects + +We follow a standard directory structure for our game projects and recommend its +use to developers: + +``` +/ + ├── prog/ + │ ├── ui/ + │ ├── scripts/ + │ └── gameBase/ + ├── develop/ + │ ├── assets/ + │ ├── levels/ + │ ├── gui(ui)/ + │ └── gameBase/ + ├── game/ + ├── tools/ + └── application.blk +``` + +### `prog/` + +Contains the game's source code, C++ files, shaders, and often configuration +files directly used by the game. + +### `ui/` + +Contains scripts and configurations for the game's user interface, focusing on +elements such as controls, layouts, and components. + +### `scripts/` + +Contains script files and related resources that define and manage various game +behaviors, events, and logic. + +### `gameBase/` + +Contains essential elements related to game content and virtual file system +management for projects. This directory includes: + +- **`content/`**: A subdirectory where game assets and content files are stored. + This typically includes various game resources such as textures, models, audio + files, and other data required for the game. +- **`create_vfsroms.bat`**: A batch script used to create virtual file system + (VFS) ROMs, which are packaged file archives that optimize the loading and + management of game assets. +- **`mk.vromfs.blk`**: A configuration file for the VFS ROM creation process, + specifying how files should be packaged and organized within the virtual file + system. + +### `develop/` + +Contains raw data, including the asset base, locations, images, and fonts for +the interface. + +### `assets/` + +Assets are the building blocks of the project, used to create locations and game +objects. Key characteristics of an asset include: *name*, *type*, and +*properties*. The properties specify which raw data to use and how to compile it +into the final game data. + +Examples of asset types include `tex`, `dynModel`, `rendInst`, `composit`, and +`fx`. For instance, texture (`tex`) properties might include a reference to the +source image file (typically `.tif`, `.tga`, or another standard format), the +texture format (e.g., DXT1, DXT5), and the number of mipmaps with settings for +their generation from the source image. Similarly, other asset types have unique +properties necessary for their compilation. + +**Asset Base** + +The asset base is created by scanning asset directories. This process is carried +out by all our tools that work with assets (*dabuild* scans and then performs +the build, *AssetViewer* scans, creates the asset tree, and allows viewing the +base, *daEditorX* scans and allows using assets from the base for editing +locations). + +During scanning, two methods are used to define an asset: + +1. **Explicit Asset**: Defined by a `..blk` file + containing the asset's properties. +2. **Virtual Asset**: Generated based on scanning rules described in + `.folder.blk` files. + +Scanning is performed recursively, traversing all subdirectories. Each directory +may contain a `.folder.blk` file that specifies: + +- Whether to scan subdirectories (default is to scan). +- Whether to scan assets in the current directory (default is to scan). +- Where and under what name to compile assets from the current and nested + subdirectories, and whether to do so. +- `virtual_res_blk{}` blocks used to generate virtual assets for arbitrary files + found in the directory. + +### `levels/` + +Contains various game levels and their corresponding assets. Each subdirectory +represents a distinct level, containing all necessary resources and +configurations to render and manage that level effectively. + +### `gui(ui)/` + +Contains resources and scripts for building and managing the graphical user +interface (GUI). This directory is organized to handle font generation, UI +skinning, input configurations, and overall UI structure. + +### `game/` + +The build output directory, including compiled code and assets. This is +essentially what is delivered to the players. + +### `tools/` + +Contains data for tools, including shaders used for asset building and running +editors. + +- **`dsc2-*`**: Shader compilers for different platforms, converting shader code + written in our script format + HLSL into binary format usable on various + systems (e.g., DX11, DX12, SpirV for Windows, Metal for macOS and iOS, SpirV + for Linux and Android). +- **`vromfsPacker-dev.exe`**: Vromfs packer (virtual containers with read-only + files for quick loading and game usage, structurally similar to .zip + archives). We package vromfs to deliver 3-4 files to the player instead of + 3000-4000 scattered files. +- **`daBuild-dev.exe`**: Tool for building raw asset data into game resources. + It takes data from the asset base (`develop/` folder) and after validation, + compiles it into a format suitable for loading by the game in the `game/` + directory. +- **`impostorBaker-dev.exe`**: Tool for preparing special tree view textures, + used in conjunction with `dabuild`, to optimize tree rendering in the game + (when a complex tree model is replaced with a simple texture that looks the + same from a certain distance). +- **`assetViewer2-dev.exe`**: Asset viewer (and sometimes editor). Reads the + asset base, presents it as a tree (where branches are asset directories and + leaves are the assets themselves), and allows selecting an asset to view it in + a viewport window and its properties in a properties panel. Some asset types + (`fx`, `fastPhys`, `composit`) can be edited and saved upon exiting the + viewer, while others (`animChar`, `physObj`) can be visualized and debugged + dynamically. +- **`daEditor3x-dev.exe`**: Location editor. Allows editing terrain, water + areas, and placing assets manually, along splines (lines), and across areas + (polygons). It can compile/export the edited location into a format suitable + for game loading (in the `game/` directory). +- **`csvUtil2-dev.exe`**: Utility for preparing language localizations from raw + data (e.g., CSV from Crowdin) into a format readable by the game. It performs + various checks (presence of translations for all languages, etc.). + +### `application.blk` + +The file sets the configuration for the asset base and the location of data +directories for the editor. In `application.blk`, can be defined: + +- A list of asset types used in the project. +- A list of asset types that can be compiled into game resources using special + exporter plugins. +- A list of root directories from which assets are scanned (the asset base). +- A set of settings for where and how to compile assets into the game (the + `game/` directory). + +## Samples + +The `samples` directory includes example projects that demonstrate the usage of +the core engine and various game libraries. These sample projects serve as +practical references, showcasing different aspects of game development with the +Dagor Engine. They are designed to illustrate best practices and provide a +starting point for developers to build their own projects. Each sample is +carefully crafted to highlight specific features and functionalities, making it +easier for developers to learn and apply the concepts in their own work. + +## Documentation + +The documentation directory `_docs` contains comprehensive guides, references, +and resources for using and developing with the Dagor Engine. It includes +detailed manuals, API documentation, and tutorials designed to help developers +understand the engine’s capabilities and best practices. This section is +essential for both new and experienced developers, providing valuable insights +into the architecture, features, and functions of the Dagor Engine. + + diff --git a/_sources/getting-started/how_to_access.md.txt b/_sources/getting-started/how_to_access.md.txt new file mode 100644 index 000000000..1e31e3af5 --- /dev/null +++ b/_sources/getting-started/how_to_access.md.txt @@ -0,0 +1,8 @@ + +# How to Access + +The *Dagor Engine* is available as an open-source project, with the source code +hosted in the official *Dagor Engine* repository on *GitHub*: [Dagor Engine +GitHub Repository](https://github.com/GaijinEntertainment/DagorEngine). + + diff --git a/_sources/getting-started/how_to_build.md.txt b/_sources/getting-started/how_to_build.md.txt new file mode 100644 index 000000000..ecfd35a4d --- /dev/null +++ b/_sources/getting-started/how_to_build.md.txt @@ -0,0 +1,111 @@ +# How to Build + +## How to Build: Environment + +Requirements for building and using the *Dagor Engine* toolkit: Windows 10 +(x64), 16 GB of RAM, 200 GB of HDD/SSD space. + +- Install Git: https://git-scm.com/download/win +- Install 7-Zip: https://www.7-zip.org/ +- Install Python 3 +- If you plan to use the FMOD sound library, also install *FMOD Studio SDK* + `2.02.15` + +Create a project directory at the root of any drive (the directory name should +not contain spaces or non-Latin characters). + +``` +md X:\develop +cd X:\develop +``` + +Clone the *Dagor Engine* source code and samples: + +``` +git clone https://github.com/GaijinEntertainment/DagorEngine.git +cd DagorEngine +``` + +Run the `make_devtools.py` script. This script will download, install, and +configure the build toolkit. You should provide the path to the build toolkit +directory as an argument, and the script will create this directory if it +doesn't exist. + +``` +python3 make_devtools.py X:\develop\devtools +``` + +If the script is not run as an administrator, installers of certain programs may +request permission for installation, which you should grant. If you plan to use +plugins for *3ds Max*, press `Y` when the script asks if you want to install the +*3ds Max SDK*. The script will also ask to add the path `X:\develop\devtools` to +the `PATH` environment variable and set the `GDEVTOOL` variable to point to this +directory. + +After the script completes its work, the `X:\develop\devtools` directory will be +configured with the following SDKs and tools: + +- `FidelityFX_SC` – a library for image quality enhancement +- `fmod-studio-2.xx.xx` [optional] – FMOD sound library +- `LLVM-15.0.7` – C/C++ compiler and libraries (Clang) +- `nasm` – assembler +- `max2024.sdk` – *3ds Max 2004 SDK* +- `openxr-1.0.16` – library for AR/VR +- `vc2019_16.10.3` – C/C++ compiler and libraries (MSVC) +- `win.sdk.100` – Windows 10 SDK +- `win.sdk.81` – Windows 8.1 SDK +- `ducible.exe` – a tool to make builds of Portable Executables (PEs) and PDBs + reproducible +- `pdbdump.exe` – a tool for dumping the content of PDB files +- `jam.exe` – a small build tool that can be used as a replacement for Make + +Restart the command line console to make the new environment variables +available. + +## How to Build: Prebuilt Binaries + +You will need to download and extract additional binary files from the +repository +[https://github.com/GaijinEntertainment/DagorEngine/releases](https://github.com/GaijinEntertainment/DagorEngine/releases) into the `X:\develop\DagorEngine` directory: + +- `samples-base.7z` – contains initial assets that will be compiled into binary + files that will be loaded the game +- `samples-prebuilt-game.7z` – contains precompiled assets +- `tools-prebuilt.7z` – contains the prebuilt engine toolkit + +The directory structure should look like this: + +``` +X:\develop\DagorEngine\tools\... + +X:\develop\DagorEngine\samples\skiesSample\game + \skiesSample\develop + \skiesSample\prog + +X:\develop\DagorEngine\samples\testGI\game + \testGI\develop + \testGI\prog +``` +where + +* `prog` – Game source code. +* `develop` – Initial assets. +* `game` – Directory where assets are placed after building and game executable + files are located. + +More details on the directory structure here: [Directory +structure](directory_structure.md). + +## How to Build: Build from Source Code + +To build the "testGI" sample, navigate to the +`X:\develop\DagorEngine\samples\testGI\prog` directory and run the `jam` +command. + +After building, the executable file will be placed in the `testGI\game` +directory. + +Run `DagorEngine/build_all.cmd` to build the entire project toolkit from the +source code. This process may take a considerable amount of time. + + diff --git a/_sources/getting-started/how_to_contribute.md.txt b/_sources/getting-started/how_to_contribute.md.txt new file mode 100644 index 000000000..455d8e7eb --- /dev/null +++ b/_sources/getting-started/how_to_contribute.md.txt @@ -0,0 +1,35 @@ +# Contributing + +As an open-source project, contributions to the *Dagor Engine* are welcome. If +you would like to contribute, please follow the steps outlined below: + +1. **Fork the Repository**: + + Create a fork of the *Dagor Engine* repository on *GitHub* to have your own + copy where you can make changes. + +2. **Create a New Branch**: + + Create a new branch for your feature or bug fix: + + ```bash + git checkout -b feature-name + ``` + +3. **Make Changes and Commit**: + + Make your desired changes, then commit them to your branch: + + ```bash + git commit -m "Description of the changes" + ``` + +4. **Push and Submit a Pull Request**: + + Push your changes to your forked repository and submit a pull request to the + original *Dagor Engine* repository for review. + + ```bash + git push origin feature-name + ``` + diff --git a/_sources/getting-started/index.rst.txt b/_sources/getting-started/index.rst.txt new file mode 100644 index 000000000..cd2b1baec --- /dev/null +++ b/_sources/getting-started/index.rst.txt @@ -0,0 +1,17 @@ + +Getting Started with Dagor +=============================================== + +How to set up and start developing with the Dagor Engine. + +.. toctree:: + :maxdepth: 1 + :caption: Contents: + + how_to_access.md + how_to_build.md + directory_structure.md + how_to_contribute.md + license.md + + diff --git a/_sources/getting-started/license.md.txt b/_sources/getting-started/license.md.txt new file mode 100644 index 000000000..add58f1c2 --- /dev/null +++ b/_sources/getting-started/license.md.txt @@ -0,0 +1,169 @@ +# License Information + +## BSD 3-Clause License + +Dagor Engine + +BSD 3-Clause License + +Copyright (c) 2023, Gaijin Entertainment +All rights reserved. + +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. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +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. + +## First-Party Software Distributed with Dagor Engine: Licensing and Copyright Information + +The Dagor Engine software includes other code developed by Gaijin Entertainment aside +from the main software. Each of these first-party components has its own LICENSE.txt or +a similar document specifying its licensing terms that may significantly differ from +this license. These files are located in the respective directories of each +first-party component as follows: + + prog/1stPartyLibs/dag/LICENSE + prog/1stPartyLibs/daScript/das-fmt/LICENSE + prog/1stPartyLibs/daScript/dastest/LICENSE + prog/1stPartyLibs/daScript/LICENSE + prog/1stPartyLibs/daScript/modules/dasImgui/LICENSE + prog/1stPartyLibs/daScript/modules/dasQuirrel/LICENSE + prog/1stPartyLibs/daScript/modules/dasStdDlg/LICENSE + prog/1stPartyLibs/daScript/modules/dasStdDlg/stub/LICENSE + prog/1stPartyLibs/quirrel/quirrel/COPYRIGHT + +## Third-Party Software Distributed with Dagor Engine: Licensing and Copyright Information + +The Dagor Engine software incorporates code developed by third-party contributors. Each +of these third-party components comes with its own LICENSE.txt or a similar document +specifying its copyright attribution and licensing terms that may significantly differ +from this license. + +Please note that Gaijin Entertainment assumes no responsibility, liability, or +obligations whatsoever for the third-party components and their use by you. You should +adhere to and further comply with the licensing terms outlined by these third-party +components. You agree to indemnify, defend, and hold harmless Gaijin Entertainment from +and against any and all claims, damages, obligations, losses, liabilities, costs, debts, +and expenses (including but not limited to attorney's fees) arising from your failure +to comply with them. + +We recommend consulting the respective LICENSE.txt or equivalent files for your +guidance. You can find them in the respective directories of each +third-party component as follows: + + prog/3rdPartyLibs/arc/brotli/LICENSE + prog/3rdPartyLibs/arc/fastlz/LICENSE + prog/3rdPartyLibs/arc/libzip/LICENSE + prog/3rdPartyLibs/arc/lz4/LICENSE + prog/3rdPartyLibs/arc/lzma-9.20/LICENSE + prog/3rdPartyLibs/arc/unzip/LICENSE.txt + prog/3rdPartyLibs/arc/zlib-ng/LICENSE.md + prog/3rdPartyLibs/arc/zstd-1.4.5/LICENSE + prog/3rdPartyLibs/assimp/contrib/poly2tri/LICENSE + prog/3rdPartyLibs/assimp/LICENSE + prog/3rdPartyLibs/binPack2D/LICENSE + prog/3rdPartyLibs/breakpad/LICENSE + prog/3rdPartyLibs/cachesim/LICENSE + prog/3rdPartyLibs/cef3/v4896/libcef_dll/LICENSE + prog/3rdPartyLibs/cef3/v4951/libcef_dll/LICENSE + prog/3rdPartyLibs/codecs/dav1d/LICENSE + prog/3rdPartyLibs/codecs/libogg-1.1.3/copying + prog/3rdPartyLibs/codecs/libtheora-1.0/copying + prog/3rdPartyLibs/codecs/libtheora-1.0/license + prog/3rdPartyLibs/codecs/speexdsp-1.2.0/LICENSE + prog/3rdPartyLibs/convert/detex/LICENSE + prog/3rdPartyLibs/convert/fastDXT/LICENSE + prog/3rdPartyLibs/convert/nvtt-2.0.7/LICENSE + prog/3rdPartyLibs/cpu_features/LICENSE + prog/3rdPartyLibs/Detour/LICENSE + prog/3rdPartyLibs/doctest/LICENSE.txt + prog/3rdPartyLibs/eastl/LICENSE + prog/3rdPartyLibs/enet/LICENSE + prog/3rdPartyLibs/fast_float/LICENSE + prog/3rdPartyLibs/fileWatcher/License.txt + prog/3rdPartyLibs/flatbuffers/LICENSE.txt + prog/3rdPartyLibs/freetype/freetype-2.8/LICENSE.TXT + prog/3rdPartyLibs/freetype/harfbuzz-2.6.4/COPYING + prog/3rdPartyLibs/fsr2/dx12/license.txt + prog/3rdPartyLibs/fsr2/LICENSE.txt + prog/3rdPartyLibs/hash/BLAKE3/LICENSE + prog/3rdPartyLibs/hash/LICENSE + prog/3rdPartyLibs/image/avif/LICENSE + prog/3rdPartyLibs/image/imageresampler/LICENSE + prog/3rdPartyLibs/image/jpeg-6b/LICENSE + prog/3rdPartyLibs/image/libpng-1.4.22/license.txt + prog/3rdPartyLibs/image/psdRead/LICENSE + prog/3rdPartyLibs/image/tiff-4.4.0/LICENSE.md + prog/3rdPartyLibs/imgui-node-editor/LICENSE + prog/3rdPartyLibs/imgui/LICENSE_imgui.txt + prog/3rdPartyLibs/imgui/LICENSE_implot.txt + prog/3rdPartyLibs/ImGuizmo/LICENSE + prog/3rdPartyLibs/jsoncpp/LICENSE + prog/3rdPartyLibs/jsonsl/LICENSE + prog/3rdPartyLibs/libb64/LICENSE + prog/3rdPartyLibs/libcurl/COPYING + prog/3rdPartyLibs/libev/LICENSE + prog/3rdPartyLibs/libunwind/LICENSE.TXT + prog/3rdPartyLibs/lottie/COPYING + prog/3rdPartyLibs/math/carve/LICENSE + prog/3rdPartyLibs/math/clipper-4.x/license.txt + prog/3rdPartyLibs/math/DelaunayTriangulator/LICENSE + prog/3rdPartyLibs/math/misc/LICENSE + prog/3rdPartyLibs/math/poly2tri/LICENSE + prog/3rdPartyLibs/math/vhacd/LICENSE + prog/3rdPartyLibs/meshoptimizer/LICENSE.md + prog/3rdPartyLibs/metal/glslang/LICENSE + prog/3rdPartyLibs/metal/SPIRV-Headers/LICENSE + prog/3rdPartyLibs/metal/spirv-tools/LICENSE + prog/3rdPartyLibs/metal/spirv-tools/utils/vscode/src/lsp/LICENSE + prog/3rdPartyLibs/metal/spirv2Metal/LICENSE + prog/3rdPartyLibs/mimalloc/LICENSE + prog/3rdPartyLibs/miniupnpc/LICENSE + prog/3rdPartyLibs/mit-hrtf-lib/LICENSE + prog/3rdPartyLibs/mongoose/LICENSE + prog/3rdPartyLibs/nanosvg/LICENSE.txt + prog/3rdPartyLibs/openssl-3.x/LICENSE.txt + prog/3rdPartyLibs/ozz/LICENSE.md + prog/3rdPartyLibs/pcre/LICENSE + prog/3rdPartyLibs/phys/bullet-3/Extras/ConvexDecomposition/LICENSE.txt + prog/3rdPartyLibs/phys/bullet-3/Extras/InverseDynamics/LICENSE.txt + prog/3rdPartyLibs/phys/bullet-3/LICENSE.txt + prog/3rdPartyLibs/phys/bullet-3/test/gtest-1.7.0/LICENSE + prog/3rdPartyLibs/phys/joltPhysics/LICENSE + prog/3rdPartyLibs/poisson-disk-generator/LICENSE + prog/3rdPartyLibs/rapidjson/license.txt + prog/3rdPartyLibs/reachability/LICENSE.txt + prog/3rdPartyLibs/Recast/LICENSE + prog/3rdPartyLibs/ssr/LICENSE + prog/3rdPartyLibs/udis86/LICENSE + prog/3rdPartyLibs/unittest-cpp/LICENSE + prog/3rdPartyLibs/uriparser/COPYING + prog/3rdPartyLibs/vulkan/glslang/LICENSE + prog/3rdPartyLibs/vulkan/hlslcc/license.txt + prog/3rdPartyLibs/vulkan/hlslcc/src/cbstring/license.txt + prog/3rdPartyLibs/vulkan/smol-v/LICENSE + prog/3rdPartyLibs/vulkan/spirv-tools/external/spirv-headers/LICENSE + prog/3rdPartyLibs/vulkan/spirv-tools/LICENSE + prog/3rdPartyLibs/vulkan/spirv-tools/utils/vscode/src/lsp/LICENSE + + diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 000000000..84c46ab52 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,25 @@ + +Dagor Documentation +========================================= + +Welcome to the central hub for all Dagor Engine resources, updates, and +detailed documentation. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + dagor-home/index.rst + getting-started/index.rst + tutorials/index.rst + api-references/index.rst + samples/index.rst + dagor-tools/index.rst + assets/index.rst + danetgame-framework/index.rst + +Indices and tables +================== + +* :ref:`genindex` + diff --git a/_sources/samples/index.rst.txt b/_sources/samples/index.rst.txt new file mode 100644 index 000000000..c56f25c94 --- /dev/null +++ b/_sources/samples/index.rst.txt @@ -0,0 +1,7 @@ + +Samples +========================================= + +Sample projects to understand and implement the Dagor Engine's features. + + diff --git a/_sources/tutorials/create-mission-wt/create_mission_wt.md.txt b/_sources/tutorials/create-mission-wt/create_mission_wt.md.txt new file mode 100644 index 000000000..af2c34a80 --- /dev/null +++ b/_sources/tutorials/create-mission-wt/create_mission_wt.md.txt @@ -0,0 +1,99 @@ +## Creating a Mission (War Thunder) + +In the *War Thunder* editor, there is an additional tab called **Mission +Editor** (this tab is not available in *daNetGame-based* games). Through this +tab, you can create a mission to test assets on a specific location. + +A key difference between this tab and the **Landscape** tab is that in the +*Mission Editor*, you’ll be using two property panels: + +1. **Mission Properties** panel: This is always present in the **Mission + Editor** tab. +2. **Object Properties** panel: This can be accessed using the standard **P** + key. + +The process for creating a mission is as follows: + +1. **Select the Type of Unit:** + + From the dropdown menu, choose the type of vehicle or unit you want to place: + - **armada** - airplanes; + - **tankModels** - tanks; + - **ships** - ships; + - (Other types are non-playable units.) + + Place the selected unit on the ground using: + 1. The **Create Unit** button. + 2. Click on the desired location on the map. + + ![Select the Type of Unit](_images/create_mission_wt_1.jpg) + + ```{note} + Tanks and ships will be placed on the ground, but planes may not appear + to be placed immediately. Zoom out from the map to see the plane high in the + sky. + ``` + +2. **Changing the Unit Type (Optional):** + + If you initially placed a tank but forgot to select **tankModels** in the + first step, you can still change the unit type in the **Object Properties** + panel by pressing the **P** key. + + ![Changing the Unit Type (Optional)](_images/create_mission_wt_2.jpg) + +3. **Configuring the Unit:** + + Suppose you placed a tank and moved it to the desired position. Now, you need + to configure the following: + - **Tank model** + - **Weapon** (usually set to `default`) + - **Ammunition type** (typically `default` or `HE`) + - **Ammunition quantity** + + All these settings are adjusted in the **Object Properties** panel. + + ![Configuring the Unit](_images/create_mission_wt_3.jpg) + +4. **Assigning the Unit to an Army:** + + Check the "army" number assigned to your unit (since this is a PvP game, + different factions represent different armies) in the **Object Properties** + panel. Then, specify this army number in the **player_teamA** field within + the **Mission Properties** panel. After this, assign your unit to the + corresponding **wing** in the same panel. + + ![Assigning the Unit to an Army](_images/create_mission_wt_4.png) + +5. **Setting Up the Mission Properties:** + + In the **Mission Properties** panel: + - Give your mission a **name**. + - Select **singleMission**. + - Specify the **location** where the mission should start. + + ![Setting Up the Mission Properties](_images/create_mission_wt_5.jpg) + + This is crucial – if you skip this step, your units might end up on the + default location, which is in the middle of the ocean! + +6. **Saving the Mission:** + + Save your mission to the following directory: + `\develop\gameBase\gameData\missions`. Make sure to save + after any changes, as there is no auto-save feature! + + ![Saving the Mission](_images/create_mission_wt_6.jpg) + +7. **Running the Mission:** + + Once everything is set up, you can launch the mission. + + ![Running the Mission](_images/create_mission_wt_7.jpg) + +## War Thunder CDK (Content Development Kit) + +The *War Thunder CDK* is a set of tools available to every player for creating +user-generated content. You can access the tools for mission creation and more +here: [War Thunder CDK](https://wiki.warthunder.com/War_Thunder_CDK). + diff --git a/_sources/tutorials/create-mission-wt/index.rst.txt b/_sources/tutorials/create-mission-wt/index.rst.txt new file mode 100644 index 000000000..a9183dab3 --- /dev/null +++ b/_sources/tutorials/create-mission-wt/index.rst.txt @@ -0,0 +1,14 @@ + +Creating a Mission (War Thunder) +========================================= + +A step-by-step guide to creating missions in War Thunder using the Mission +Editor in daEditor. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + create_mission_wt.md + + diff --git a/_sources/tutorials/dng-non-human-char/dng_non_human_char.md.txt b/_sources/tutorials/dng-non-human-char/dng_non_human_char.md.txt new file mode 100644 index 000000000..f823ab057 --- /dev/null +++ b/_sources/tutorials/dng-non-human-char/dng_non_human_char.md.txt @@ -0,0 +1,910 @@ +# Non-Human Character: Step-by-Step Guide + +## General Guidelines for Creating Creatures of All Types + +The *Dagor Engine* supports creating any bone-animated object (character). +However, this guide focuses on simple examples that do not involve IK (Inverse +Kinematics), upper or lower body animations, complex animation blending, or +additive animations. After reading this guide, you will be able to create +characters with any number of limbs. Additionally, we will set up animation +states for smooth transitions between character animations. + +## Example Scenes in 3ds Max + +You can download scenes with models properly prepared for export: +{download}`3dsMax2024Files.zip ` + +## Examples in Dagor Engine + +These examples are designed for use in *daNetGame*-based projects. The files +include ready-to-use game assets: a fish and a crow. Compatibility with *War +Thunder* has not been tested due to shader-related issues. + +Download the archive: +{download}`creatures.zip ` + +Extract the files into the `dev` directory of your project (a testing directory +not included in the game build). For example, +`//develop/assets/dev/gameRes/`. After extraction, +the path should look like this: +`//develop/assets/dev/gameRes/creatures`. + +If everything is set up correctly, loading the [*Asset +Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) and +selecting the crow asset {bdg-dark-line}`1` will result in error-free loading. +Click {bdg-dark-line}`2` to review error logs. The highlighted section indicates +successful loading. + + + +```{note} +Scenes are compatible with *3ds Max 2024* or later. +``` + +## Skeleton Bone Structure: Features and Scene Configuration + +Let's analyze the crow scene. Open the file {bdg-dark-line}`0` +`crow_detailed_tpose.max`. + + + +Make sure to specify in the file name that it is the character's T-pose. The +model must include a root bone {bdg-dark-line}`3`. The naming is flexible, but +if you plan to use existing `.blk` files as templates, it is better to name it +`root`. This bone is used to move the entire scene. Additionally, a `Body` bone +{bdg-dark-line}`4` must be defined. + +```{seealso} +For more information, see +[.blk File Format](../../dagor-tools/blk/blk.md). +``` + +For complex models with separate upper and lower animations, different +animations may play simultaneously based on specific events. In such cases, bone +names must clearly indicate their purpose for programmers. In this example, the +same animation always applies to all bones, so `Body` directly follows `root`. +This will become crucial when defining properties for generating animation +dependencies. + +```{note} +For more complex characters, the structure may involve actions like running +while rotating the torso and looking at the camera. Such setups require advanced +configurations, which are beyond the scope of this guide. Here, we focus on a +simpler and more straightforward task. +``` + +The *3ds Max* scene must include the following mandatory features: + +- **LODs** (Level of Detail) {bdg-dark-line}`2` must be named consistently, + e.g., `LOD00` {bdg-dark-line}`1`. Inconsistent names across LODs will cause + errors during the [*Asset + Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) resource + loading. While *3ds Max* discourages identical names for objects, *Dagor + Engine* requires this convention. To distinguish objects, place them in layers + named according to their LOD levels, as shown in the example above. + +- For the **Skin modifier**, always disable **Dual Quaternion** + {bdg-dark-line}`6` and set the number of points per bone {bdg-dark-line}`5` to + match the configuration specified in the project's `application.blk`. Refer to + the **Skin Parameters in Dagor** section for more details: [Working with the + Skin Modifier](#working-with-the-skin-modifier). + + ```{seealso} + For more information, see + [application.blk](../../assets/all-about-blk/application_blk.md). + ``` + +- Store skinned objects as **Editable Mesh** {bdg-dark-line}`7` to ensure point + weights accurately reflect in *Dagor* after export. These steps help replicate + the Skin modifier's behavior in *Dagor* precisely. + +- Use **Selection Sets** {bdg-dark-line}`8` for easier object selection during + export. For instance, to export `LOD00`, create a group named `lod00` + containing all the scene bones and all objects from the `LOD00` layer. + +Each bone in the scene must include **Custom Properties** so that the *Dagor* +identifies them as bones. Below is the minimum required configuration for the +crow skeleton: + +```text +animated_node:b=yes // Specifies the object is animated +collidable:b=no // Disables all collisions +massType:t="none" // No mass, but the object is physical +renderable:b=no // Excluded from rendering +cast_shadows:b=no // Excluded from shadow generation +``` + +## Adding Basic Physics + +To initialize the scene properly in *Dagor*, assign physical properties to at +least one bone using **Custom Properties** {bdg-dark-line}`2`. + + + +Without physics, the engine cannot generate a valid skeleton. Below is an +example configuration for the `head` bone {bdg-dark-line}`1`: + +```text +animated_node:b=yes // Specifies the object is animated +collidable:b=no // Enables collision handling, though further settings are required +massType:t="box" // Specifies the mass calculation type +collision:t=capsule // Specifies the collision type; consult your mentor for alternatives +physObj:b=yes // Enables physics for the object +density:r=2000 // Density for mass calculation +renderable:b=no // Excluded from rendering +cast_shadows:b=no // Excluded from shadow generation +``` + +```{seealso} +For more information, see +[Rigging, Skinning, and Exporting New Character](../dng-rig-skin-export-new-char.md/dng_rig_skin_export_new_char.md). + +Download example files to review the custom properties of bones like `Bip*`. +These properties dictate how the physical skeleton is generated. +``` + +## Working with the Skin Modifier + +The most critical aspect of working with the **Skin** modifier is controlling +the number of bones per vertex. By convention, this value is set to 4 bones per +vertex. This parameter is defined in the project's general configuration file, +`application.blk`. Other required settings have already been covered earlier. + +Example configuration in `application.blk`: + +```text +dynModel{ + descListOutPath:t="dynModelDesc" + separateModelMatToDescBin:b=yes + + ignoreMappingInPrepareBillboardMesh:b=yes + enableMeshNodeCollapse:b=no + maxBonesCount:i=318 // This is ineffective! Shader limitations cap bone count at 200. + // Exceeding 200 will result in errors during daBuild. + setBonePerVertex:i=4 // Number of bones per vertex +} +``` + +## Creating LODs: Special Considerations for Dynamic Models + +The primary rule for creating LODs is ensuring consistent naming for all LOD +levels. Using the crow as an example: + + + +As shown, LODs share the same base name but are placed in separate layers. Each +LOD may contain multiple skinned objects. This approach is useful, especially +when the total triangle count for a single object exceeds the limit of 65,000 +triangles. If your model exceeds this limit, divide it into multiple pieces. + +For each model with a **Skin** modifier, the following **Custom Properties** +must be added: + +```text +animated_node:b=yes // Specifies the object is animated +collidable:b=no // Disables all collisions +massType:t="none" // Indicates no physical mass for this object +``` + +Ensure all skinned objects {bdg-dark-line}`1` have the specified properties +{bdg-dark-line}`2`: + + + +For efficient management of **Custom Properties**, use an editor or viewer tool. + +```{seealso} +For more information, see +[*Dagor 2 Fast Editor User Properties*](../../dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties.md). +``` + +## Materials for Dynamic Models + +Let's examine the materials assigned to the skinned models in the scene. In this +case, the materials used are `crow_base` and `Dagor Dagorrat Material 2` +{bdg-dark-line}`0`. To view all available **dynamic materials**, open the +dropdown menu and navigate to the relevant section {bdg-dark-line}`1`. + +While each material type requires dedicated documentation, we will focus on the +simplest and most versatile option for +[PBR](https://en.wikipedia.org/wiki/Physically_based_rendering) lighting: +**dynamic_simple** {bdg-dark-line}`2`. This material supports standard textures +such as **albedo** (with optional transparency), **normal**, **smoothness**, and +**metalness** maps. In this case, the textures are: +- `crow_body_a_tex_d.tif` (albedo) +- `crow_body_a_tex_n.tif` (normal map) + +If the archive was unpacked correctly, these textures can be found at the +following path: +`//enlisted/develop/assets/dev/gameRes/creatures/characters/crow`. + +Assign the textures to the appropriate slots {bdg-dark-line}`3`. To enable +transparency, add the **atest** property {bdg-dark-line}`4` and set its value +{bdg-dark-line}`5` to `127`. This controls the alpha test threshold, where +mid-level brightness determines transparency. Also, enable two-sided rendering +{bdg-dark-line}`6`, as crow feathers must be rendered on both sides. + +:::{grid} 2 + + +::: + +Verify that this material is applied to all skinned objects before proceeding +with export. + +## Exporting the Dynamic Model + +If the **selection sets** {bdg-dark-line}`1` were prepared correctly earlier, +exporting is straightforward. In the crow scene, select the set named `lod00` +{bdg-dark-line}`2`. This action highlights the `LOD00` layer and all associated +bones. + + + + + +Next, navigate to **Utilities**, and choose **Dagor Scene Export**. If this +option is unavailable, add it using the **Sets** button. Within the **Dagor +Export** settings, ensure the following options are enabled: +- **Export hidden objects** +- **Export selected objects only** + +These options are essential for every export. Finally, click **Export DAG**. + +### Important Naming Conventions + +The *Dagor* legacy constraints require specific naming conventions. The files +extracted from the `creatures.zip` archive must follow this format to maintain +compatibility with `.blk` scripts and project building pipelines. + +For dynamic models: +- Append the postfix `_dynmodel`. +- Specify the LOD using the `.lodXX` postfix, where `XX` is the LOD level. + +For example, the crow model's most detailed LOD(00) should be named as crow_detailed_a_dynmodel.lod00.dag. + +- **Green text**: Customizable according to your naming needs. +- **Red text**: Fixed and mandatory to ensure correct processing during build + and to define the LOD number. + +```{note} +Post-export, you may encounter errors like: + + +These errors occur because bones lack assigned **Dagor** materials. Assigning +materials does not resolve this issue; it can be safely ignored. +``` + +Repeat the export process for the other two LODs, naming them: +- `crow_detailed_a_dynmodel.lod01.dag` +- `crow_detailed_a_dynmodel.lod02.dag` + +Once the export is complete, verify the model in the [*Asset +Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) by +selecting `crow_lo_a_dynmodel` {bdg-dark-line}`1`: + + + +If everything was done correctly, the model should load without errors. + +## Exporting Animation + +In essence, animation is simply a record of the bone movements associated with a +model. + +```{important} +- **Bone Count, Naming, and Hierarchy:** These must match exactly between the + dynamic model and the animation file. +- Any mismatch can result in odd animation hierarchies or failure to display the + animation altogether. +``` + +Open the file `crow_detailed_idle_b.max`, which contains the animation for idle +movements. Select all bones in the scene; there should be **195 selected +objects**, including all Helpers. + +In the **Dagor Export** panel, ensure the following: +1. Enable the **Export selected objects only** button {bdg-dark-line}`1`. +2. Explicitly set the animation key range for export {bdg-dark-line}`2`, from + **frame 0 to 150**. + + + +```{note} +The animation range displayed on the timeline **is irrelevant** for export. You +must manually specify the key range in the export settings. +``` + +Enabling the checkboxes {bdg-dark-line}`4` significantly increases animation +precision, which is essential in this case to prevent visual errors such as +"sliding" feet. + +```{note} +Exporting the animation with high precision increases the file size by hundreds +of times. Use this option only when it is really necessary. +``` + +Without these checkboxes, animations are compressed hierarchically, accumulating +minor errors over time. This can cause noticeable visual discrepancies. Enabling +high precision minimizes these errors, ensuring smoother playback. + +Leave the **scaling checkbox** unchecked if there is no scaling animation in the +scene (as in this crow example). + +Click the **Export Animation** button {bdg-dark-line}`3`. + +Naming and location conventions for animation files are similar to those for +dynamic models: +- Store animations in: + `//develop/assets/dev/gameRes/creatures/animation/crow` +- Use the `.a2d` extension. +- Naming guidelines: + - Use the same base name as the dynamic model but omit LOD-related or + dynamic-model-specific postfixes. + - Avoid key script processor keywords in the filename (e.g., dynamic-related + terms). + +In this example, save the animation as: `crow_detailed_idle_b.a2d`. + +Next to this file, there should also be a configuration file named: +`crow_detailed_idle_b.a2d.blk`. + +This file contains individual properties and settings for the animation. + +**Example:** + +```text +name:t="crow_detailed_idle_b.a2d" // Name of the animation linked to this script +opt:b=no // Conservative optimization disabled. +posEps:r=0.001 // Position compression accuracy during project build. + // Higher values (e.g., 0.1 > 0.01) reduce file size but decrease accuracy. +rotEps:r=0.001 // Rotation compression accuracy. Higher values reduce accuracy. +sclEps:r=0.1 // Scaling compression accuracy (if applicable). +``` + +This is an example of a `.blk` script used for post-export processing. Carefully +adjust compression values to balance file size and animation precision. + +After exporting, open the animation in the [*Asset +Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md). If you +select the exported animation (`crow_detailed_idle_b`), you might initially see +nothing: + + + +**Steps to Display the Animation:** +1. Assign the dynamic model {bdg-dark-line}`1` associated with the animation. +2. Re-select the animation {bdg-dark-line}`2`. + +At this point, the crow {bdg-dark-line}`3` should appear in the scene in the +first frame of the animation instead of the default T-pose. + +**Playing the Animation:** +- To play the animation, click the play button {bdg-dark-line}`4`. +- By default, animations play very quickly. Use the speed slider + {bdg-dark-line}`5` to reduce playback speed (e.g., set it to `0.5x` for + smoother observation). + + + +At this stage, all necessary data has been exported from *3ds Max*: +- Animation +- Bone structure +- Hierarchy +- Model and its LODs + +The final step is updating the `.blk` scripts to define the roles of each +component (e.g., bones, animations, models) for integration into *Dagor Engine*. + +## Principles of Working with Dynamic Models in Dagor and Resource Integration + +The `*.blk` files found alongside models in `creatures.zip` are scripts that +automate the preparation, conversion, and generation of resources for the game. +These scripts, written in an internal language for *Dagor*, define specific +processes for managing game entities and objects. + +```{note} +**Reloading After Changes:** +- Some `.blk` files (e.g., `.folder.blk`) only update after reloading the + [*Asset Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) + or the [*daEditor*](../../dagor-tools/daeditor/daeditor/daeditor.md). +- In contrast, files related to animations can be edited dynamically, and + changes take effect immediately. +``` + +The `.folder.blk` file processes all contents of the directory it resides in, +along with its subdirectories. This is particularly useful when working with a +large number of resources. + +**Example: Processing Animations** + +`//develop/assets/dev/gameRes/creatures/animation/.folder.blk` + +```text +export{ + gameResPack:t="anims.grp" // Export processed animation resources into the specified game resource package + exported:b=yes // Perform the export +} + +virtual_res_blk{ // Create virtual resource + find:t="^(.*)\.a2d$" // Locate all *.a2d files in the directory tree + className:t="a2d" // Assign the "a2d" class, marking them as animation objects + contents{ + opt:b=yes // Enable conservative optimization + posEps:r=0.01 // Compression accuracy for position + rotEps:r=0.2 // Compression accuracy for rotation + sclEps:r=0.1 // Compression accuracy for scaling + } +} +``` + +This script: +1. Exports animations into the `anims.grp` game resource package. +2. Finds all `*.a2d` files, assigns them the "a2d" class, and processes them as + animations. +3. Applies compression with default thresholds to balance file size and + animation quality. + +**Example: Processing Dynamic Models** + +`//develop/assets/dev/gameRes/creatures/.folder.blk` + +This script is slightly more complex but follows the same structure. + +```text +scan_assets:b=yes // Search for objects +scan_folders:b=yes // Search for directories + +export{ + ddsxTexPack:t="creatures.dxp.bin" // Process textures and store them in this game resource + gameResPack:t="creatures.grp" // Store processed models and virtual objects here +} + +virtual_res_blk{ // Create virtual resource + find:t="^((.*)_dynmodel)\.lod00\.dag$" // Locate dynamic model files + stopProcessing:b=false // Continue processing this object in other blocks + className:t="skeleton" // Generate skeleton from dynamic models + name:t="$2_skeleton" // Assign a skeleton name + contents{ + addSkinNodes:b=yes // Attach skin nodes to the skeleton + reduceNodes:b=yes // Remove bones without Skin vertices + } +} + +virtual_res_blk{ // Create virtual resource + find:t="^((.*)_dynmodel)\.lod00\.dag$" // Scan again for dynamic models + stopProcessing:b=false + className:t="DynModel" // Assign "DynModel" class to dynamic models + name:t="$2_dynmodel" // Assign a name to dynamic model objects + contents{ + lod{ + range:r=3000; fname:t="$1.lod00.dag"; // Set LOD00 rendering distance to 3000 meters + } + ref_skeleton:t="$2_skeleton" // Assign the corresponding skeleton + } +} +``` + +**Key Steps:** + +1. **Search Directories:** + - Use `scan_assets:b=yes` and `scan_folders:b=yes` to locate objects and + directories. + +2. **Export Textures and Models:** + - Textures are saved in `creatures.dxp.bin`. + - Models and virtual objects are saved in `creatures.grp`. + +3. **Generate Skeletons:** + - Find models named as `*_dynmodel.lod00.dag`. + - Create skeletons for these models, removing unused bones and linking skins. + +4. **Assign Properties to Models:** + - Assign a rendering distance of `3000` meters for LOD00. + - Link dynamic models to the generated skeletons. + +After running the scripts, the resulting files (`creatures.grp` and +`creatures.dxp.bin`) are ready for integration into the game. These resources: +- Contain properly configured skeletons, bones, and skin objects. +- Are optimized for gameplay with attributes such as rendering distance and + compression settings. + +These configurations ensure all objects are processed as game entities with +specific classes and properties. + +## Real Resources vs. Virtual Resources and Objects in Dagor + +**Key Concepts:** + +Understanding the distinction between **real resources** (files on disk), +**virtual resources** (engine-created entities), and **virtual resources +converted into game entities** is critical when working with *Dagor*. + +The *Dagor Engine* processes exported files (e.g., `*.a2d`, `*.dag`) into +optimized formats (`*.dxp.bin`, `*.grp`) ready for game use. While physical +files on disk represent raw data, virtual objects in the engine are entities +assigned game properties. These virtual objects are subsequently written into +binary game resources. + +**Real vs. Virtual Resources:** + +1. **Exported Files:** Files from tools like *3ds Max* include animations + (`*.a2d`) and dynamic models (`*.dag` with LOD levels). These raw files are + intermediate resources. + +2. **Engine Optimization:** The *Dagor Engine* transforms exported data, + applying compression and processing to meet game engine requirements (e.g., + reducing file size, optimizing for performance). + +3. **Game Resource Files:** Final outputs like `*.dxp.bin` and `*.grp` are the + only formats recognized by the game executable. Scripts (`*.blk`) process the + exported data into game entities. + +**Example: Crow Dynamic Model Breakdown** + +From a single dynamic model file, the following game entities can be generated +using `*.blk` scripts: +- Skeleton (`crow_skeleton`) +- Model Shell +- Physics Model +- Collision Data + +Notably, physics {bdg-dark-line}`1` and collision {bdg-dark-line}`2` data may +remain empty if unnecessary for the object, as in the case of the crow model. +For example: + +- **Skeleton:** Visible because it was explicitly processed in the script. + + + + +- **Physics & Collisions:** Empty because the script did not define these + components. + + + +## Configuring `*_char.animchar.blk` + +This script assembles the virtual resources (e.g., skeleton, model, physics) +into a character with complex structures that the game code can manage +efficiently. + +**Example:** `//develop/assets/dev/gameRes/creatures/characters/crow/crow_detailed_a_char.animchar.blk` + +```text +//no_anim_dist:r=100 // Distance beyond which animations stop (commented out) +//no_render_dist:r=200 // Distance beyond which the model stops rendering (commented out) +//useCharDep:b=no // Not used here; consult specific documentation if needed +rootNode:t="root" // Starting bone of the skeleton +dynModel:t="crow_detailed_a_dynmodel" // Dynamic model name for the character +skeleton:t="crow_detailed_a_skeleton" // Skeleton name for the character +animTree:t="crow_detailed_a_animbnl" // Animation description tree for blending and rules +physObj:t="crow_detailed_a_phobj" // Physical model for the character + +//ref_states{ // Optional reference states (commented out) +// state:t="stand_ground" +//} +``` + +**Key Points:** + +1. Operates exclusively on **virtual objects** (e.g., skeletons, models). +2. Does not search for or sort physical files; all objects must already exist as + virtual entities. +3. Assembles the higher-level character structure by linking components (dynamic + model, skeleton, physics). + +## Configuring `*_dynmodel.dynmodel.blk` + +This script applies specific properties to an individual model. Unlike +`.folder.blk`, which processes groups of files, `*_dynmodel.dynmodel.blk` +targets a single resource. + +**Example:** `//develop/assets/dev/gameRes/creatures/characters/crow/crow_detailed_a_dynmodel.dynmodel.blk` + +```text +ref_skeleton:t="crow_detailed_a_skeleton" // Assign the corresponding skeleton + +lod{range:r=2;} // LOD00 switches to LOD01 at 2 meters +lod{range:r=7;} // LOD01 switches to LOD02 at 7 meters +lod{range:r=15;} // LOD02 turns off rendering at 15 meters +``` + +**Key Points:** + +1. The **naming convention** ensures precise targeting of a specific dynamic + model (`crow_detailed_a_dynmodel`). +2. **LOD Configuration:** + - `range:r=2`: Transitions from the highest detail (LOD00) to a lower detail + (LOD01). + - `range:r=15`: Stops rendering entirely beyond this distance. +3. Links the skeleton to the dynamic model (`ref_skeleton`), ensuring it uses + the correct hierarchy. + +```{important} +**Real vs. Virtual:** +- Real resources are raw files (e.g., `*.a2d`, `*.dag`), while virtual + resources are entities created and optimized by the engine. +- Game resource files (`*.dxp.bin`, `*.grp`) are the final, optimized outputs. + +**Script Layers:** +- `.folder.blk`: Processes groups of resources. +- `*_char.animchar.blk`: Assembles characters from components like skeletons, + models, and physics. +- `*_dynmodel.dynmodel.blk`: Configures individual models with properties such + as LOD ranges. +``` + +## Configuring `*_animbnl.animtree.blk` + +The `*_animbnl.animtree.blk` file defines the rules for animation states, +blending, and other related configurations, such as additive animations for a +character. This script is one of the most complex due to its detailed control +over animation blending and state transitions. + +```{seealso} +For more information, see +[daAnimations](../../assets/animation/daanimations.md). +``` + +**Key Points:** +1. **Sequential Execution Matters:** Blocks and commands must be executed in the + order they are defined. For instance, a blending controller must be declared + before it is used. + +2. **Nodes as Units:** A **node** can represent an object, model, or bone. Nodes + are identified by names, which are used for configuration. + +3. **Critical Documentation:** It is highly recommended to read related + documentation thoroughly to understand controllers, states, and blending + techniques. + +**Example:** `//develop/assets/dev/gameRes/creatures/characters/crow/crow_detailed_a_animbnl.animtree.blk` + +**Script Breakdown:** + +```text +export:b=yes // Process the script +root:t="fifo3" // Root node for animation blending +defaultForeignAnim:b=yes // Enables blending foreign animations +``` + +```text +nodeMask{ // Defines masks for specific nodes (bones in this case). + name:t="body" // Bone name from 3ds Max + node:t="Bip01" // Root bone name as recognized by Dagor +} +``` + +- **Purpose:** Aligns the bone naming conventions between *3ds Max* and *Dagor* +to ensure compatibility. For example, `Bip01` is historically used for root +bones in *3ds Max*. + +```text +stateDesc{ // Specifies all possible animation states for the character. + // In this example states represent conditions like "flying" + // and "turning right while flying". + defMorphTime:r=0.15 // Transition time between states (morphing) + defNodeName:t="*" // Applies to all bones (nodes) + + chan{ // Mixing channel for the "body" and nodes + name:t="body" + fifo3:t="fifo3" // Controller type + nodeMask:t="" // Applies to all nodes + cond_target:i=1 + } + + chan{ // Mixing channel for the "root" and nodes + name:t="root" + fifo3:t="fifo3_root" + nodeMask:t="" + cond_target:i=0 + } + + state{ // Example animation state + name:t="crow_a_fly_turn_right" // State name + body{ name:t="crow_a_fly_turn_right"; } // Links the state to an animation for the "body" + } +} +``` + +- **States:** Represent high-level conditions that can mix multiple animations + or transitions. +- **Channels:** Control how specific nodes or groups of bones are blended in + animation. + +Each animation state is linked to an `AnimBlendNodeLeaf{}` block that specifies +the actual animation file (`*.a2d`) and its properties. + +```text +AnimBlendNodeLeaf{ + a2d:t="crow_detailed_fly_turn_right" // Animation file + + continuous{ + name:t="crow_a_fly_turn_right" // Internal name linked to the state + key_start:t="fly_turn_right_start" // Start keyframe from 3ds Max + key_end:t="fly_turn_right_end" // End keyframe from 3ds Max + time:r=2.0 // Playback duration + own_timer:b=yes // Unique timer for this animation + eoa_irq:b=yes // End-of-animation interrupt marker + } +} +``` + +- **Purpose:** Prepares the raw animation file for use in the defined states. +- **Keys:** Define specific animation segments exported from 3ds Max. + +Blend controllers manage the mixing of different animation states. + +```text +AnimBlendCtrl{ + fifo3{ + name:t="fifo3" // Name of the controller + varname:t="fifo3_var" // Variable name for internal use + } + + fifo3{ + name:t="fifo3_root" + varname:t="root_ctrl" + } +} +``` + +**Key Execution Steps:** + +1. **Define Controllers:** Controllers like `fifo3` and `fifo3_root` are + declared first. + +2. **Specify States:** States such as `crow_a_fly_turn_right` link animations to + logical conditions. + +3. **Create Animation Nodes:** For each state, an `AnimBlendNodeLeaf{}` is + created to prepare the corresponding animation file. + +4. **Test the Configuration:** Use the *Dagor Engine* visualization tools (e.g., + the [*Asset + Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md)) to + verify the setup. + +```{important} +- **Purpose:** The `*_animbnl.animtree.blk` file establishes a framework for + managing animation states and blending. +- **Components:** + 1. **Node Masks:** Define skeleton relationships. + 2. **State Descriptions:** Link logical states to animations. + 3. **Animation Nodes:** Prepare animations for state transitions. + 4. **Controllers:** Manage blending logic. +``` + +When viewed {bdg-dark-line}`1` in the [*Asset +Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md), the +following elements should appear based on this configuration: + +1. **Skeleton Nodes:** The root node (`Bip01`) and associated hierarchy + {bdg-dark-line}`2`. +2. **Blend Nodes:** All defined `AnimBlendNodeLeaf` elements {bdg-dark-line}`3`, + corresponding to animation states. +3. **Controllers:** All specified controllers (`fifo3`, `fifo3_root`). +4. **States:** List of all defined animation states, such as + `crow_a_fly_turn_right`. + + + +## Testing the Character in Asset Viewer + +**Step 1: Checking Files in Asset Viewer** + +1. Open the [*Asset + Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) and + load all the files related to your character {bdg-dark-line}`1`. + + **Goal:** Ensure no errors appear in the console {bdg-dark-line}`2`. A + successful result looks like this: + + + +2. **Common Checkpoints:** + - Inspect every file linked to the character (e.g., animations, blend + controllers, state descriptions). + - Console errors indicate an issue with one or more configurations. + +**Step 2: Local Resource Building** + +1. **Initiate `daBuild`:** + To include the created character in `.grp` and `.dxp.bin` files: + - Navigate to the folder {bdg-dark-line}`1` containing the character + resources (e.g., `crow`). + - Right-click the folder and select the **Export All (PC)** option + {bdg-dark-line}`2`. + + + +2. **Monitor Build Progress:** + - The building process starts and may take a significant amount of time + depending on your computer's performance. + - Build progress is displayed in the console. A successful build ends with an + output similar to this {bdg-dark-line}`1`: + + + +3. **Integration:** + Once built, the character is ready for inclusion in the game. + +## Common Errors + +### Error: Bracket Mismatches + +Missing or extra brackets can cause critical errors during script parsing. + +**Example:** + +```text +BLK error 'D:/dagor2/enlisted/develop/assets/dev/gameRes/creatures/characters/crow/crow_detailed_a_animbnl.animtree.blk',228: unexpected EOF: +``` + +- **Cause:** Unmatched brackets result in an "unexpected end of file" (EOF) + error. +- **Solution:** Carefully check the script for bracket pairs, especially in + deeply nested blocks. + + + +### Error: Incorrect Data Types + +**Example:** + +```text +BLK invalid time (type real) value in line 209 of 'D:/dagor2/enlisted/develop/assets/dev/gameRes/creatures/characters/crow/crow_detailed_a_animbnl.animtree.blk': 'sdfsd' +DataBlockParser: invalid value 'sdfsd' at line 209 of file '.../crow_detailed_a_animbnl.animtree.blk' +``` + +- **Cause:** A non-numeric value (e.g., string) is assigned to a numeric + property like `time`. +- **Solution:** Review and correct the value. Ensure all numeric parameters + are defined as valid numbers (e.g., `time:r=2.0`). + + + +### Debugging Tips + +1. **Error Line Numbers:** While error messages indicate a line number, they may + not always be accurate. Errors often occur earlier in the script but only + show later. + +2. **Manual Validation:** + - Verify the syntax for critical properties such as `state`, `chan`, and + `AnimBlendNodeLeaf`. + - Cross-check with examples or templates to ensure consistency. + +3. **Progressive Testing:** + - Test the script incrementally by adding elements in small chunks. + - This approach isolates errors more effectively. + +### Summary + +**Key Steps for Testing:** + +1. Verify all character files in the [*Asset + Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md). +2. Perform a local build using the the *daBuild* and monitor for successful + output. +3. Address any errors detected during the process. + +**Common Pitfalls:** + +- Missing or extra brackets (`{`, `}`). +- Incorrect value types (e.g., string instead of number). +- Errors at incorrect line numbers due to delayed detection. + +By following these steps and debugging techniques, you can ensure your character +is fully functional and ready for game integration. + +```{tip} +If you encounter any errors or have questions regarding this document, please +reach out to the author directly at {octicon}`mail;1.4em;sd-text-info` +. +``` + + diff --git a/_sources/tutorials/dng-non-human-char/index.rst.txt b/_sources/tutorials/dng-non-human-char/index.rst.txt new file mode 100644 index 000000000..044a406ed --- /dev/null +++ b/_sources/tutorials/dng-non-human-char/index.rst.txt @@ -0,0 +1,11 @@ + +Non-Human Character: Step-by-Step Guide +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + dng_non_human_char.md + + diff --git a/_sources/tutorials/index.rst.txt b/_sources/tutorials/index.rst.txt new file mode 100644 index 000000000..79143c335 --- /dev/null +++ b/_sources/tutorials/index.rst.txt @@ -0,0 +1,15 @@ + +Tutorials and Manuals +========================================= + +Guides and step-by-step instructions to help you master the Dagor Engine. + +.. toctree:: + :maxdepth: 1 + :caption: Contents: + + create-mission-wt/index.rst + dng-non-human-char/index.rst + wt-designing-vehicle-deformations/index.rst + + diff --git a/_sources/tutorials/wt-designing-vehicle-deformations/index.rst.txt b/_sources/tutorials/wt-designing-vehicle-deformations/index.rst.txt new file mode 100644 index 000000000..4559b4522 --- /dev/null +++ b/_sources/tutorials/wt-designing-vehicle-deformations/index.rst.txt @@ -0,0 +1,11 @@ + +Designing Vehicle Deformations +========================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + wt_designing_vehicle_deformations.md + + diff --git a/_sources/tutorials/wt-designing-vehicle-deformations/wt_designing_vehicle_deformations.md.txt b/_sources/tutorials/wt-designing-vehicle-deformations/wt_designing_vehicle_deformations.md.txt new file mode 100644 index 000000000..f7017fc27 --- /dev/null +++ b/_sources/tutorials/wt-designing-vehicle-deformations/wt_designing_vehicle_deformations.md.txt @@ -0,0 +1,1049 @@ +# Designing Vehicle Deformations + +## Overview + +This article provides a step-by-step guide for creating vehicle deformations. It +uses three vehicle models as examples, detailing how to implement destruction on +them. The focus is on working with existing vehicles. You'll need advanced +knowledge of *3ds Max* and a thorough understanding of how *Dagor Engine* +handles destruction. + +### Prerequisites + +**Plugins and Tools:** + +- *Dagor import/export plugin*. +- [*Dagor 2 Transfer Vertex Position to Vertex Color + Tool*](../../dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/transfer_vertex_position_to_vertex_color_tool.md). +- [*Dagor 2 Damages Setup + Tool*](../../dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool.md) + for setting up rigid-body destruction. +- [*Dagor 2 Fast Editor User + Properties*](../../dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties.md) + for streamlined property editing. +- [*Dagor 2 Fix Normal Orientation + Tool*](../../dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fix_normal_orientation_tool.md) + to preemptively correct normal issues in dynamic objects. +- [*RayFire plugin*](https://rayfirestudios.com/) for glass and wood + destruction. + +### Platform Specifics + +The examples and guidelines are based on *War Thunder*. Projects based on +*daNetGame* framework will follow the same principles, with minor differences in +shaders. + +### Version Requirements + +- Minimum *3ds Max 2021* is required. +- All example files were created using *3ds Max 2024*. + +## General Concepts of Vehicle Deformations and Destruction + +### Key Constraints + +The primary limitation in a single Dagor `.dag` model file is that only **one +deformable object** can exist. If multiple deformable objects are present, the +engine will prioritize the largest object by bounding box, as indicated in logs: + +```text +43.52 [E] multiple nodes with dynamic_deformed shader in instance, choosing the biggest one +``` + +Rigid-body (non-deformable) objects are limited to **a few hundred per model**. +These rigid objects should be identified and separated during the design phase +to achieve the desired destruction effect. Objects that visually detach during +real-world vehicle destruction or significantly differ in material (e.g., +wheels, wooden fences, glass, plastic panels) must be isolated into separate +components by material type. + +## Preparing the Model for Destruction + +### Importing the Model + +Import the `.dag` model: +{download}`m123_truck.lod00.zip +` + +For material insights, preview the model with textures in the [*Asset +Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md): +`//develop/assets/entities/vehicles/cars_modern/m123_truck.lod00.dag` + +The model with textures preview in Asset Viewer + +### Setting Up Layers + +Organize your scene into layers for a structured workflow: + +1. **DeformStart**: Contains objects to be deformed. +2. **DeformEnd**: Contains objects after deformation. + + ```{important} + Pay close attention to the naming of objects in **DeformStart** and + **DeformEnd** layers. The quantity and naming must be identical. This + consistency will prevent indexing errors in the order of vertices in the + final model during the subsequent merging of all deformable objects. + ``` + +3. **RigidObj**: Houses rigid, detachable components. +4. **EXPORT**: Final output layer. + +#### Object Identification + +- **Green (1)**: Deformable metal requiring tessellation (placed in + **DeformStart**). +- **Brown (3)**: Metal with sufficient detail, no tessellation needed (also in + **DeformStart**). +- **Blue (2)**: Metal requiring separation for realistic deformation (e.g., + doors). +- **Purple (4)**: Rigid objects, such as detachable components (placed in + **RigidObj**). + +Color identification of the model parts in 3ds Max + +## Deforming Large Rigid Components + +Pre-deform large rigid objects to improve realism post-separation. Minor parts +can remain mostly intact. For example, large tires should appear damaged and +should resemble this degree of deformation: + +Deformed vehicle tyres in 3ds Max + +## Configuring Rigid Components + +1. **Set Active Layer**: Work in the **RigidObj** layer. + + Rigid object layer icon in 3ds Mas + +2. **Launch Script**: Use [*Dagor 2 Damages Setup + Tool*](../../dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool.md). +3. **Reset Pivots**: Reset pivots to object centers. + + Pivots reset to objects center in 3ds Max + +### Script Adjustments + +- Change `materialName:t="wood_solid"` to `materialName:t="metal"` for proper + sound and effects. +- Change `density:r=150` to `density:r=250` for metal properties. + + Dagor 2 Damage Setup properties window + +### Applying Changes + +- **(1)** Select all objects in **RigidObj** layer. +- **(2)** Apply the script to generate accurate collision hierarchies and + user-defined properties. + + Selecting objects in Rigid object layer and applying the script to generate collision hierarchies in 3ds Max + + Generated objects collisions in 3ds Max + +### Adjusting Collision Boxes for Objects + +As observed, a collision box **(1)** is generated for each object, but it does +not always precisely conform to the shape of the objects **(2)**. Therefore, it +is necessary to manually adjust the collision boxes in the scene to achieve +accurate coverage. + +For instance, when working with wheels, align the box size to the wheel's +diameter and duplicate the box collisions by rotating them. This will create an +approximate cylinder shape. Unfortunately, *Dagor Engine* does not support +native cylinder or sphere collisions, so all shapes must be approximated using +boxes. The final scene will look as follows: + +Generated collision boxes and objects in 3ds Max + +```{note} +All scaling, positioning, and rotation adjustments must be performed in **Local +Space**. + +Local Space in enabled on the panel in 3ds Max + +Failure to do so will result in distortions and inaccuracies after export to +*Dagor Engine*. Correcting these issues later is extremely difficult and +time-consuming. +``` + +Notice that components such as wheels **(1)**, headlight lenses **(1)**, and +mudguards **(1)** are defined using multiple collision boxes. For complex +shapes, take an existing collision box and modify it to match the object's +contours as closely as possible. If one box is insufficient, add as many as +necessary. Simpler shapes, such as side mirrors **(2)**, can typically be +described with a single box. + +To streamline the review of object properties, it is recommended to use the +[*Dagor 2 Fast Editor User +Properties*](../../dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties.md) +script. After installation, the script is activated with `Alt`+`Ctrl`. For all +selected objects **(1)**, it will display the contents of their **custom user +properties** **(3)** in a dedicated window **(2)**, eliminating the need to +individually access these properties via context menus. To hide the script +window, press `Alt`+`Shift`. + +With this step, the configuration of solid objects is complete. Hide this layer, +as it will no longer be needed before export. + +## Configuring the Deformable Parts of the Vehicle + +Begin by configuring objects within the **DeformStart** and **DeformEnd** +layers. For realistic vehicle deformation, the model must have sufficient +detail. This often necessitates tessellating the model to enhance deformation +quality. For example, attempting to deform fuel tanks **(1)**, the vehicle base +**(2)**, wheel arches and fenders **(4)**, mudguards **(3)**, and the cab +**(5)** will result in issues if there are insufficient triangles to allow +proper deformation. Even separate components, like the door **(6)**, require +tessellation. + +View of model deformable parts in 3ds Max before tesselation in 3ds Max + +After tessellation, the model should not exceed 65,000 triangles in total. A +properly tessellated vehicle should look approximately like this: + +View of model deformable parts in 3ds Max after tesselation in 3ds Max + +Unfortunately, there are no strict tessellation rules. A good recommendation is +to create cuts every 20-30 cm, striking a balance between visual quality and the +triangle count. Aim to keep the triangle count as low as possible without +sacrificing deformation quality. The optimal balance comes with experience after +deforming 3-4 models. + +Next, copy all objects from the **DeformStart** layer into the **DeformEnd** +layer. **Pay close attention to naming conventions**. Ensuring consistent naming +is crucial for preserving vertex indexation when combining pieces later. +Matching the vertex indexing between the initial (undeformed) and final (fully +deformed) models is essential. Hide the **DeformStart** layer, as it contains +the undeformed model version needed only at the end of the workflow to bake +vertex position data into vertex colors. Verify that all names and object +sequences are identical: + +Copying all objects from the DeformStart layer into the DeformEnd layer in 3ds Max + +At this stage, you are ready to begin deformation. **Save the scene before +starting each deformation step**. Results may not always match your +expectations, and rolling back is often easier. Consider setting undo steps to +at least 300-400 for safety. However, saving regularly is more reliable, as +*3ds Max* may crash unexpectedly during deeper undo actions. + +### Deformation Process + +Deforming the vehicle involves using **Soft Selection** on vertices to create a +realistic crumpled effect. Start with broader adjustments and refine as you go. +For example: + +- **Doors**: Open or partially open the doors before deformation. Doors nearly + always open or partially detach during vehicle collisions. +- **Fragile parts**: Separate brittle components rather than deform them. + +Initially, apply an **FFD (Free Form Deformation)** modifier to all objects for +rough adjustments: + +Appling an FFD (Free Form Deformation) modifier to all objects for rough adjustments in 3ds Max + +Then carefully deform individual vehicle elements: + +Deforming individual vehicle elements in 3ds Max + +### Combining Layers + +After deformation, merge all parts in the **DeformStart** layer and then do the +same for the **DeformEnd** layer. When merging, ensure that objects are attached +in numerical order (e.g., attach to object `*000` in sequence). This step is +critical to maintain consistent vertex indexing. The result will be two distinct +models – deformed and undeformed. For convenience, move the pivot point of each +model to the center of the scene and perform a **Reset Transform**. This step +helps prevent potential issues with normals during export. Tools such as the +[*Dagor 2 Fix Normal Orientation +Tool*](../../dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fix_normal_orientation_tool.md) +or *3ds Max*'s built-in tools can assist with this. The scene should now appear +as follows: + +Moving the pivot point of each model to the center of the scene and performing a Reset Transform + +### Transferring Vertex Positions to Vertex Colors + +Run the [*Dagor 2 Transfer Vertex Position to Vertex Color +Tool*](../../dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/transfer_vertex_position_to_vertex_color_tool.md) +script. Select the undeformed model, set the deformed model as the source in the +**Pick Source Object** field, and click **Transfer Vertex Position to VColor!** +This will map the deformed model's vertex position changes into the vertex color +channel of the undeformed model. Check the vertex color channel to confirm it +contains data. The undeformed model should now look similar to this: + +Maping the deformed model's vertex position changes into the vertex color channel of the undeformed model + +The intensity of the vertex colors indicates the degree of deformation – +stronger deformations produce more vibrant colors, while minimal deformations +appear closer to gray. This step verifies the successful transfer of position +data into vertex colors. The deformed model is no longer needed and can be +hidden along with the **DeformEnd** layer. + +### Assigning Custom User Properties + +Assign the following **custom user properties** to the undeformed model to +ensure correct behavior in *Dagor Engine*: + +```text +animated_node:b=yes +physObj:b=yes +collidable:b=no +density:r=15500 +massType:t="none" +``` + +The `density:r=15500` parameter is set based on the vehicle type. For a heavy +vehicle, use a value of ~`15,500`; for passenger cars, values between `5,000` and +`7,000` are typical. + +Setting the Dagor 2 Fast Properties tool parameters + +### Final Scene Setup + +Complete the general scene configuration to ensure the vehicle interacts +properly in *Dagor Engine*. The vehicle body must behave correctly as a physical +object and respond as intended within the engine. + +## Auxiliary Collision Objects + +To ensure proper interactions between the destructible vehicle model and tanks +or other vehicles, auxiliary collision boxes need to be added to the scene. +These objects are designed similarly to standard collision boxes but must be +attached +The Attaching icon +to the main deformable body of the vehicle. + +Collision boxes of the model parts in 3ds Max + +- **Stepped Base (2)**: Enables wheeled vehicles with smaller wheel diameters to + visually climb onto a deformed section of the vehicle. +- **Bumper (2) and External Platforms**: Ensure the detached wheels are pushed + correctly away from the main body. +- **Box (3)**: Simulates falling glass fragments dispersing outward. +- **Cabin (large deformation)**: Prevents tanks from driving further by creating + a larger physical obstacle. +- **Box Set (4)**: Facilitates correct interaction with the vehicle's rear bulk. +- **Rear Platform Box (5)**: Acts as a support platform for smaller debris at + the back of the vehicle. +- **Diagonal Boxes (bottom)**: Prevent the vehicle from landing flat like a + slab, instead allowing a natural tilted fall. + +Tailored auxiliary collision boxes of the model parts in 3ds Max + +Each vehicle requires tailored auxiliary collision boxes. + +## Assigning Dynamic Materials + +Since we start with a static model, its materials need to be converted into +dynamic ones to enable deformation. Dynamic vehicle pieces require specific +shaders, distinct from static ones. Assign **Dagorrat Material 1** to the +deformable body of the vehicle. Use the following settings: + +Assigning Dagorrat Material 1 in Material Editor + +- **(1) Material Name**: Use descriptive naming for clarity. +- **(2) Material Class**: Set to `dynamic_deformed` to specify the shader type. +- **(3) Slot 0**: Albedo texture. +- **(4) Slot 2**: Normal texture packed with metalness (B channel) and + smoothness (A channel). +- **(5) Slot 7**: Damaged metal albedo texture with a fracture/mask in the alpha + channel. +- **(6) Slot 8**: Damaged metal normal map, packed identically to Slot 2. + +
+ +Next, assign **Dagorrat Material 2** for solid objects using these settings: + +Assigning Dagorrat Material 2 in Material Editor + +- **(1) Material Class**: `dynamic_simple`. +- **(2) Slot 0**: Vehicle's albedo texture. +- **(3) Slot 3**: Packed normal/metalness/smoothness texture. + +
+ +Assign **Dagorrat Material 2** to all non-collision objects within the +**RigidObj** layer. + +```{seealso} +For more information on complex models with hierarchical materials, see +[Proxy materials](../../assets/materials/proxymats.md). +``` + +## Exporting the Vehicle + +To export the completed vehicle: + +1. Select all objects in the **DeformStart** and **RigidObj** layers. +2. Move them to the **EXPORT** layer and make it active. +3. Export with the following Dagor exporter settings: + + Group of Dagor Exporter Settings labels + +4. Save the output file as (with overwriting): +`//develop/assets/entities/vehicles/cars_modern/m123_truck_destr.lod00.dag` + +Ready-to-export scene: +{download}`m123_truck_destr_deform.zip +` + +## Testing the Model + +1. Open the model in [*Asset + Viewer*](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) to test + its destruction mechanics. + + Model in Asset Viewer + + - Select the vehicle model **(0)**. + - Set the physics engine **(1)**. + - Start the simulation **(2)**. + + Steps for starting the simulation process in Asset Viewer + + If errors occur (commonly shader-related), check the console logs + The Console icon + + ```{tip} + If the issues remain unresolved, please contact the author of this document + at {octicon}`mail;1.4em;sd-text-info` . + ``` + +2. Export resources to Dagor binary formats using the **Export All (PC)** option + in the context menu: + + The Export All (PC) option in Asset Viewer menu + + To suppress warnings from older files during export, add the following block + to `application.blk`: + + ```text + logerr_to_con{ + AssetViewer{ + exclude_re:t="(warning: node from)|(Shader 'simple_aces' not found in bin dump)|(Shader 'simple' not found in bin dump)|(Shader 'land_mesh_combined' not found in bin dump)|(has mesh with 0 faces)|(degenerate tri)|(degenerate mesh node)" + } + } + ``` + + This will allow to ignore warnings that outdated shaders are not found. + Ensure there are no errors in the console after building: + + The Asset Viewer console output + +3. Modify the destruction configuration for the vehicle in `rendinst_dmg.blk` + placed at `//develop/gameBase/config/` directory: + + ```text + m123_truck{ + physRes:t="m123_truck_destr_phobj"; + hp:r=40; + impulseThreshold:r=3; + dmPreset:t="metal_light_explosive_props"; + fx:t="ad_car_wreck"; + fxScale:r=1; + material:t="metal"; + } + ``` + Below is an explanation of key parameters for configuring destruction + properties: + + - `m123_truck`: The name of the primary object that will be destructible. + - `m123_truck_destr_phobj`: The name of the virtual object generated from + `m123_truck_destr.lod00.dag`. This represents the destructible version of + the object and is the result of the processes outlined so far. + - `hp:r=40`: Specifies the HP threshold at which the destruction occurs. When + the object's HP falls below this value, it will break apart. + - `impulseThreshold:r=3`: Defines the impulse force required to trigger + destruction. For instance, a collision or impact with a force greater than + this value will cause the object to break. + - `dmPreset:t="metal_light_explosive_props"`: The destruction model preset to + be used. This determines the destruction behavior, including debris + generation and dynamics. + - `fx:t="ad_car_wreck"`: Specifies the particle effect to be used during the + destruction event. For example, this could represent the explosion visuals + triggered when the object is destroyed. Other particle effects can be + reviewed in this file and substituted as needed. + - `fxScale:r=1`: Adjusts the scale of the explosion effect. This parameter + may need fine-tuning to match the size of the vehicle or object being + destroyed. + - `material:t="metal"`: This critical parameter overrides the material + settings defined within the `.dag` file. For instance, if the **custom user + properties** within the `.dag` file specify `materialName:t="wood"`, but + this file specifies `materialName:t="metal"`, the material used for the + destroyed parts will be **metal**. **Always remember** that this parameter + takes precedence over internal `.dag` settings. + + Adjust the parameters as needed, e.g., particle effects, explosion scaling, + or material overrides. + + ```{important} + By carefully adjusting these parameters, you can define how the vehicle + behaves during destruction events, including material properties, effects, + and thresholds for breaking apart. + ``` + +4. Rebuild vfsroms using `create_vfsroms.bat`. + + ```{seealso} + For more information, see + [Resource Building](../../dagor-tools/resource-building/resource_building.md). + ``` + + ```{tip} + If you encounter any errors or have questions regarding this document, please + reach out to the author directly at + {octicon}`mail;1.4em;sd-text-info` . + ``` + +**Placing and Testing the Vehicle in a Level:** + +1. Open the level in the + [*daEditor*](../../dagor-tools/daeditor/daeditor/daeditor.md): + `//develop/levels/avg_proto/apex_test_scene/apex_test_scene.level.blk`. + + The level opened in daEditor + +2. Export the level to a binary format using the top menu. Save the level after + successful export. + + The Export to Game (PC format) option in daEditor menu + +3. Download test mission: {download}`test_01_car.zip + ` + +4. Place it in: + `//develop/gameBase/gameData/missions`. + +5. Open the **Mission Editor**, select the test mission, and start the game + The Play icon. + + The Mission Editor panel + +```{note} +During testing, it is likely that the console will display numerous errors +related to resource mismatches or insufficiently built resources. However, these +errors are not critical for the purpose of testing. + +The daEditor console output during testing + +In case of **assert errors**, initially try ignoring them by pressing the +**Ignore** button. +``` + +If everything is set up correctly, you should see a tank in the environment, +which can be used to collide with the test truck. + +```{tip} +If the issues remain unresolved, please contact the author of this document at +{octicon}`mail;1.4em;sd-text-info` . +``` + +## Fine-Tuning Deformation Parameters for a Vehicle Body + +To achieve realistic vehicle deformation, specific parameters can be configured +in the vehicle body material in *3ds Max*. These settings influence shaders and +allow precise control over deformation behavior. Below is a detailed list of +parameters and their purpose: + +### Shader Parameters + +- `diffuse_tex_scale=1`: Controls the scale of the damage texture's albedo. + Adjust based on the vehicle's size. +- `normals_tex_scale=1`: Similar to `diffuse_tex_scale`, this affects the + normal/metalness/smoothness texture scale. +- `diffuse_power=1`: Determines the intensity of the albedo damage texture. + Default: `1.0`. +- `normals_power=1`: Controls the intensity of the normal/metalness/smoothness + damage texture. Default: `1.0`. +- `max_height=1.2`: A multiplier for maximum deformation height. Default baked + value is `1.0`. Increase (e.g., `1.9`) for larger deformations. +- `springback=0.05`: Defines how much the metal bends back after deformation. + Higher values mean greater restoration. +- `expand_atten=0.5`: Sets the range of deformation expansion, simulating + material characteristics. +- `expand_atten_pow=0.5`: Adjusts the pressure curve during deformation, + affecting how the material bends under force. +- `noise_scale=1.0`: Adds procedural deformation noise. Larger models require + smaller values for realism. +- `noise_power=1.3`: Amplifies the procedural noise intensity for dynamic + deformations. +- `crumple_rnd=0.5`: Randomizes the crumpling intensity, visible only during + dynamic interaction. +- `crumple_force=0.1`: Determines the crumpling force during dynamic + interactions. +- `crumple_dist=0.5`: Specifies the crumpling effect distance during collisions. + +### Testing Parameters In-Game + +To test these parameters effectively: +1. Launch the game and simulate interaction (e.g., a tank driving over a truck). +2. Pause the game using `P`, then open the in-game editor with `F2`. +3. Navigate to the **dynamic_deform** menu: + + The Dynamic Deform menu in game + + - Identify the coordinates **(1)** of the test vehicle body **(2)**. + + Identifying the coordinates and the test vehicle body in daEditor + + - Input the coordinates into the deformation testing block to align the test + box with the vehicle. + + Inputting the coordinates into the deformation testing block to align the test box with the vehicle + +4. Adjust the test deformation box: + - Enable checkboxes to visualize the deformation. + + Enabling the Debug and Debug Draw checkboxes in DynamicDeform menu + + - Use sliders to manipulate the deformation box and observe effects dynamically. + + Using sliders to manipulate the deformation box + + ```{tip} + Always clear deformations after each test using the + The Clear All button + button to reset the vehicle for further iterations. + ``` + +```{important} +For the deformation box to function correctly, ensure it intersects with the +**bounding box** of the deformable object (indicated by a red highlight). +Misalignment may prevent parameter application. +``` + +Ensuring the deformation box intersects with the bounding box of the deformable object + +### Refining Parameters in 3ds Max + +After determining the optimal settings: +1. Adjust parameters like `max_height` (e.g., `1.5`) and `noise_power` (`1.0`) + in the material properties of the vehicle in *3ds Max*. + + Adjusting the Max Height and Noise Power parameters in Material Editor + +2. Re-export the model following the steps outlined earlier. +3. Test the updated model in the game and iterate as needed. + +### Iterative Adjustments and Enhancements + +Testing often reveals areas for refinement, such as missing components like +broken windshield glass. These elements can be added and fine-tuned in +subsequent iterations. + +#### Shading and Coloring Adjustments + +Vehicles may include random color tinting for variety. This is configured using +procedural settings within the +[rendinst_simple](../../assets/shaders/dng-shaders/rendinst_simple.md) shader. + +```{seealso} +For more information, see +[Procedural Rendinst Painting](../../assets/about-assets/procedural-rendinst-painting/procedural_rendinst_painting.md). +``` + +The parameters for `use_painting` and `painting_line` can be specified in the +same location as the **shader dynamic_deformed** parameters, as follows: + +Specifying the Use Painting and Painting Line parameters + +This ensures proper integration and behavior of the painting line within the +shader configuration. + +```{important} +Ensure that static shader settings match their dynamic counterparts to avoid +inconsistencies. +``` + +#### Simulating Broken Glass + +To add shattered glass: +1. Extract original glass models from the `.dag` file. +2. Use [*RayFire*](https://rayfirestudios.com/) for fracturing: + - Set fracture parameters to produce radial breakage patterns. + - Remove overly small fragments to optimize simulation performance. + + Using the RayFire plugin for 3ds Max for fracturing + + ```{tip} + Keep the number of glass fragments below 100 to prevent excessive physics + calculations. + ``` + + Glass fragments in 3ds Max + +3. For each fragment: + - Separate front-facing triangles. + - Adjust pivots to the center for accurate collision generation. + + Separating front-facing triangles and adjusting pivots to the center for accurate collision generation in 3ds Max + +4. Apply a slight **Noise modifier** for realism, then assign a dynamic shader + for glass fragments: + + Applying the NoiseModifier in 3ds Max + +5. Change the `rendinst_pbr_glass` shader to `dynamic_pbr_glass`: + + Changing the Rendinst Pbr Glass shader to Dynamic Pbr Glass shader in 3ds Max + +6. Assigned it to all available glass fragments, generate collisions with + [*Dagor 2 Damages Setup + Tool*](../../dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool.md): + + The Dagor 2 Damages Setup Tool option in Gaijin Tools menu in 3ds Max + + Generating collisions with Dagor 2 Damages Setup Tool + + As you can see, all bboxes have their own thickness. + +#### Exporting the Final Model + +After finalizing deformation and additional enhancements: +1. Save the model as `m123_truck_destr.lod00.dag`. + + Saving the model + +2. Rebuild and test resources in the game using the steps outlined in earlier + sections. + +### Final Testing + +The completed scene should include deformation behavior and additional features +like broken glass. For adjustments, iterate on the *3ds Max* scene and test +within the game environment until the desired results are achieved. + +Download the final *3ds Max* scene: +{download}`m123_truck_destr_deform_final.max ` + +## Example: Vehicle Destruction with a Large Tank + +To begin, import the model from the archive: +{download}`zis_6_bz.zip ` + +The primary challenge here is deforming the tank separately. During crushing, +the tank will not only compress vertically but also bulge horizontally. The +truck's cab should also be separated into a distinct object. Before deformation, +the scene should look approximately as follows: + +Separating the tank and the cabin from truck body in 3ds Max + +When assessing the vehicle's construction, note that elements like the fenders +are distinct from the cab, just like the doors, the tank, and the tank's guard +rails. The key is to consider the varying rigidity of these parts. Consequently, +deform these as separate objects. The vehicle's internal components should also +be split into segments based on the material's rigidity. The image below +illustrates a color-coded example of this segmentation: + +Color-coded example of the segmentation in 3ds Max + +Next, as before, apply **FDD modifiers** to deform each object individually. +After initial rough deformation, the scene will look something like this: + +Applying FDD modifiers to deform each object individually in 3ds Max + +Deforming the tank is the most complex task, given its size. Here's an example +of a partially deformed tank: + +The first example of a partially deformed tank on a real truck + +The second example of a partially deformed tank on a real truck + +The third example of a partially deformed tank on a real truck + +Following this initial deformation, fine-tune the shapes manually using **Soft +Selection**. The resulting deformed vehicle should preserve realistic creases +and folds. The tank necks are minimally deformed, while sharp edges exhibit +folds consistent with the model's level of detail. The tank expands horizontally +under pressure from above, creating natural-looking radial folds around the +necks. The detailed appearance of the tank after refinement is shown below: + +Top view of the detailed appearance of the tank after refinement in 3ds Max + +Front view of the detailed appearance of the tank after refinement in 3ds Max + +Side view of the detailed appearance of the tank after refinement in 3ds Max + +### Physics Adjustments Post-Testing + +- **(1) Wheels:** Slightly tilted to naturally detach from the vehicle body and + roll away. +- **(2) Ejection Boxes:** Added to prevent wheels from clipping through the tank + guard rails. These boxes push the wheels outward, creating more natural + movement. +- **(3) Rear Wheel:** Designed to detach along with part of its assembly. + Additional collision boxes are added to replicate a round wheel's behavior, + improving realism. +- **(4) Flat Tire:** Includes a collision box to tilt the vehicle's frame when + it falls. A single collision box is deliberately used here to amplify the + impact. + +Side view of model collision boxes in 3ds Max + +Back view of model collision boxes in 3ds Max + +### Note on Quality vs. Time Constraints + +Balancing time and quality is crucial. While the tank could feature more +advanced details like ruptures or cracks, such improvements require significant +time investment. The chosen approach aims for an optimal balance of detail and +efficiency. + +The scene with the modifier stack and detailed setup: +{download}`zis_6_bz_deform_modificators.zip ` + +The final scene, fully prepared for export with refined collision settings and +other adjustments: +{download}`zis_6_bz_deform.max ` + +## Example: Vehicle Destruction with Extensive Plastic Components + +This example demonstrates the destruction of a vehicle model that incorporates +significant plastic components, such as bumpers and panels. Plastic behaves +differently than metal, often bending, springing back, or detaching entirely +under stress. Here's a step-by-step guide to prepare and simulate such +destruction. + +Download the model: +{download}`arctic_tayga_patrul_551.zip ` + +### Initial Checks + +1. **Ensure proper scale**: + - Verify that the model has no negative scaling and that all scaling values + are `1.0`. + + ```{warning} + Ensuring the correct scale is critical for the pipeline. **If this step is + skipped, everything may need to be redone from scratch later, so address it + upfront**. + ``` + +2. **Inspect model structure**: + - This particular model is relatively new, so it doesn't have scaling issues. + However, older models may require adjustments. + +### Separation of Components + +- Begin by separating **glass** and other **rigid objects** (e.g., detachable + plastic parts like panels, bumpers). +- Objects such as the protective transparent visor often have intricate shapes. + After generating collisions, manually adjust their position and size for + accurate representation. + + The goal is to achieve a realistic breakup of rigid parts that can detach + during collisions. Example result: + + Example of a realistic breakup of rigid parts that can detach during collisions + +### Export and Initial Testing + +1. Assign appropriate materials to the separated components. +2. Export the current setup into the game without adding deformation to the main + body. +3. Evaluate the in-game appearance: + - Rigid parts should separate cleanly during interactions. + - Large gaps (e.g., from detached panels) should be filled or masked + appropriately. + +Example result after initial export: + +Example result after initial export in Asset Viewer + +Intermediate stage of the scene with finished rigid objects and materials: +{download}`arctic_tayga_patrul_551_deform_Rigid_Body_done.max ` + +### Refining the Model + +#### Adding Internal Structure + +Plastic panels often cover empty spaces. To mask these gaps: +1. Duplicate the **deformable panels** and adjust their placement. +2. Use these duplicates to create an **approximate internal frame**: + - Assign a dark texture from the existing material library to simulate depth. + - Ensure the base structure is visually coherent when panels detach. + + Making an approximate internal frame + +- **Black Base (3):** Separate the base along with the driver and passenger + seats as distinct entities. +- **Dashboard and Plastic Covering (2):** Extract these into an individual + entity for separate handling. +- **Side Panels (1):** These are essentially the vehicle's fenders and should + also be separated into distinct entities. They will detach from the main body + during deformation, revealing the black base underneath. + +As per standard practice, further separate parts that will deform independently +due to differences in metal or material rigidity. This ensures a realistic +deformation process tailored to the specific properties of each component. + +```{warning} +1. Do **not** modify smoothing groups or normals during this stage. Adjustments + to these attributes will change vertex indexing, leading to errors during + deformation. +2. Keep the model as an **Editable Mesh** throughout. Avoid converting between + `Edit Poly` and `Edit Mesh` to preserve vertex consistency. +``` + +### Final Scene for Export + +Once the internal structure and rigid body setup are complete: +1. Fine-tune materials and shaders for plastic and metal parts. +2. Test the model in the game environment to verify the detachment and + deformation behaviors. +3. Export the model as a finalized `.max` file: + {download}`arctic_tayga_patrul_551_deform.max ` + +## Example: Vehicle Destruction with Canvas and Fabric Components + +In this section, we'll explore the process of preparing a vehicle with fabric +and canvas elements for dynamic deformation and destruction. The focus will be +on separating, refining, and deforming components such as wooden supports, metal +parts, and fabric material. + +Download the base model: +{download}`renault_ahn.zip ` + +### Initial Checks + +1. **Inspect Transform Settings**: + - Check for negative scaling or non-uniform scaling values (e.g., not equal + to `1.0`). + - Incorrect transforms can cause inverted normals and other issues after + exporting to a dynamic model. + + **Example of incorrect scaling:** + + Example of incorrect scaling in 3ds Max + +2. **Correcting Transforms**: + - Attach the vehicle body to a temporary box object. + - Detach the box and reposition the **Pivot** to the original position, + typically `[0, 0, 0]`. + + ```{important} + Ensure the scaling values are normalized before proceeding. Fixing these + issues after deformation and settings adjustments can be exceedingly + difficult. + ``` + + **Example of correct transformation:** + + Example of correct transformation in 3ds Max + +### Preparing the Canvas and Wooden Supports + +#### Wooden Components + +1. **Separate Wooden Elements**: + - Identify seatbacks, planks, and other wooden components. + - Split them into smaller fragments using *RayFire*: use fracture settings + that mimic natural wood breakage. + + Identifying seatbacks, planks, and other wooden model components + + Splitting them into smaller fragments using RayFireplug in in 3ds Max + +2. **Fracturing Details**: + - Divide each plank into **2-3 pieces** (to meet the 100-object limit per + `.dag` file). + - Apply a **Noise modifier** to simulate splintered edges. + + Dividing each plank into 2-3 pieces to meet the 100-object limit per .dag file in 3ds Max + +#### Metal Components + +**Attach Non-Deforming Metal Parts**: + +- Metal elements like seat mounts and corner brackets should remain rigid + (highlighted in red in the image below). +- Merge these with the main body and assign them a metal material for proper + deformation behavior. + + Metal model elements that should remain rigid are highlighted in red in 3ds Max + +### Organizing the Deformable Objects + +Divide the vehicle into logical deformation groups: + +1. **Side Panels (1)**: These should behave like hinged doors, bending and + opening during a collision. + +2. **Rear Mudguards (5)**: These have different densities and require separate + deformation behavior. + +3. **Fuel Tank (2)**: Sturdier than the body frame; must deform separately. + +4. **Wheel Discs (3)**: Should have independent deformation logic due to their + circular shape. + +5. **Front Fenders**: Their rounded design requires unique deformation + parameters compared to the angular cabin structure. + +Dividing the vehicle into logical deformation groups in 3ds Max + +Intermediate preparation stage of the model: +{download}`renault_ahn_a_deform_ready_to_deform.max ` + +### Initial Deformation with FFD + +**Apply Rough Deformations**: +- Use an **FFD modifier** to simulate large-scale bending and crushing. +- Test deformations at this stage to ensure logical breakage patterns. + +Result after rough deformation: + +The right side view of result after rough deformation + +The left side view of result after rough deformation + +The scene after rough deformation: +{download}`renault_ahn_a_deform_FFD_done.max ` + +### Detailed Deformation + +**Finalize Deformation Details**: +- Add finer details using **Noise modifiers** and **manual adjustments** to + simulate realistic crushing and bending. +- Ensure no overlapping geometry or unnatural stretching. + +Final detailed deformation result: + +The side view of final detailed deformation result + +The front view of final detailed deformation result + +The scene after detailed deformation: +{download}`renault_ahn_a_deform_all_deformation_done.max ` + +### Assigning Materials for the Canvas + +To accurately simulate the canvas (tent), create a unique material with specific +deformation properties: + +**Separate the Canvas Material**: +- Use a dark texture for initial testing. +- Modify deformation parameters for the canvas: + - Disable blending of deformation textures. + - Increase recovery behavior to simulate fabric's spring-back properties. + +Example of material setup for canvas: + +Example of material setup for canvas + +### Final Testing and Export + +1. **In-Game Testing**: + - Verify deformation and recovery behaviors in the game. + - Adjust shader parameters based on observed results. + +2. **Export the Final Model**: + - After testing, export the complete setup for integration into the game. + +Final scene: +{download}`renault_ahn_a_deform.max ` + +By following these steps, you'll achieve a destructible vehicle model with +realistic behavior for both rigid and flexible components, including proper +handling of wooden and fabric elements. + + diff --git a/_sphinx_design_static/design-style.4045f2051d55cab465a707391d5b2007.min.css b/_sphinx_design_static/design-style.4045f2051d55cab465a707391d5b2007.min.css new file mode 100644 index 000000000..3225661c2 --- /dev/null +++ b/_sphinx_design_static/design-style.4045f2051d55cab465a707391d5b2007.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #007bff;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0069d9;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/_sphinx_design_static/design-tabs.js b/_sphinx_design_static/design-tabs.js new file mode 100644 index 000000000..36b38cf0d --- /dev/null +++ b/_sphinx_design_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_static/_sphinx_javascript_frameworks_compat.js b/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 000000000..8549469dc --- /dev/null +++ b/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,134 @@ +/* + * _sphinx_javascript_frameworks_compat.js + * ~~~~~~~~~~ + * + * Compatability shim for jQuery and underscores.js. + * + * WILL BE REMOVED IN Sphinx 6.0 + * xref RemovedInSphinx60Warning + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 000000000..4e9a9f1fa --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,900 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/check-solid.svg b/_static/check-solid.svg new file mode 100644 index 000000000..92fad4b5c --- /dev/null +++ b/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_static/clipboard.min.js b/_static/clipboard.min.js new file mode 100644 index 000000000..54b3c4638 --- /dev/null +++ b/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/_static/copybutton.css b/_static/copybutton.css new file mode 100644 index 000000000..f1916ec7d --- /dev/null +++ b/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/_static/copybutton.js b/_static/copybutton.js new file mode 100644 index 000000000..2ea7ff3e2 --- /dev/null +++ b/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/_static/copybutton_funcs.js b/_static/copybutton_funcs.js new file mode 100644 index 000000000..dbe1aaad7 --- /dev/null +++ b/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/_static/css/badge_only.css b/_static/css/badge_only.css new file mode 100644 index 000000000..c718cee44 --- /dev/null +++ b/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff b/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 000000000..6cb600001 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff2 b/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 000000000..7059e2314 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff b/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 000000000..f815f63f9 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff2 b/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 000000000..f2c76e5bd Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/_static/css/fonts/fontawesome-webfont.eot b/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 000000000..e9f60ca95 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/_static/css/fonts/fontawesome-webfont.svg b/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 000000000..855c845e5 --- /dev/null +++ b/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/css/fonts/fontawesome-webfont.ttf b/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 000000000..35acda2fa Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/_static/css/fonts/fontawesome-webfont.woff b/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 000000000..400014a4b Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/_static/css/fonts/fontawesome-webfont.woff2 b/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 000000000..4d13fc604 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/_static/css/fonts/lato-bold-italic.woff b/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 000000000..88ad05b9f Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff differ diff --git a/_static/css/fonts/lato-bold-italic.woff2 b/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 000000000..c4e3d804b Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/_static/css/fonts/lato-bold.woff b/_static/css/fonts/lato-bold.woff new file mode 100644 index 000000000..c6dff51f0 Binary files /dev/null and b/_static/css/fonts/lato-bold.woff differ diff --git a/_static/css/fonts/lato-bold.woff2 b/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 000000000..bb195043c Binary files /dev/null and b/_static/css/fonts/lato-bold.woff2 differ diff --git a/_static/css/fonts/lato-normal-italic.woff b/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 000000000..76114bc03 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff differ diff --git a/_static/css/fonts/lato-normal-italic.woff2 b/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 000000000..3404f37e2 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/_static/css/fonts/lato-normal.woff b/_static/css/fonts/lato-normal.woff new file mode 100644 index 000000000..ae1307ff5 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff differ diff --git a/_static/css/fonts/lato-normal.woff2 b/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 000000000..3bf984332 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff2 differ diff --git a/_static/css/micromodal.css b/_static/css/micromodal.css new file mode 100644 index 000000000..d88f7f86c --- /dev/null +++ b/_static/css/micromodal.css @@ -0,0 +1,145 @@ +/* https://gist.github.com/ghosh/4f94cf497d7090359a5c9f81caf60699 */ +.modal__overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0,0,0,0.6); + display: flex; + align-items: center; + justify-content: center; + z-index: 250; +} + +.modal__container { + background-color: #fff; + padding: 30px; + max-width: 1000px; + max-height: 85%; + border-radius: 4px; + overflow-y: auto; + box-sizing: border-box; + z-index: 250; +} + +.modal__header { + display: flex; + justify-content: space-between; + align-items: center; +} + +.modal__title { + margin-top: 0; + margin-bottom: 0; + line-height: 1; + font-size: 165%; + box-sizing: border-box; +} + +.modal__close { + background: transparent; + border: 0; +} + +.modal__footer { + padding-bottom: 30px; + /* display: ruby does not look really good here. However, I didn't + find another way to merge footer padding with container padding + instead of sum them */ + display: ruby; +} + +.modal__header .modal__close:before { content: "\2715"; } + +.modal__content { + margin-top: 2rem; + margin-bottom: 2rem; +} + +.modal__btn { + font-size: .875rem; + padding-left: 1rem; + padding-right: 1rem; + padding-top: .5rem; + padding-bottom: .5rem; + background-color: #e6e6e6; + border-radius: .25rem; + border-style: none; + border-width: 0; + cursor: pointer; + -webkit-appearance: button; + text-transform: none; + overflow: visible; + line-height: 1.15; + margin: 0; + will-change: transform; + -moz-osx-font-smoothing: grayscale; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transform: translateZ(0); + transform: translateZ(0); + transition: -webkit-transform .25s ease-out; + transition: transform .25s ease-out; + transition: transform .25s ease-out,-webkit-transform .25s ease-out; +} + +.modal__btn:focus, .modal__btn:hover { + -webkit-transform: scale(1.05); + transform: scale(1.05); +} + + +@keyframes mmfadeIn { + from { opacity: 0; } + to { opacity: 1; } +} + +@keyframes mmfadeOut { + from { opacity: 1; } + to { opacity: 0; } +} + +@keyframes mmslideIn { + from { transform: translateY(15%); } + to { transform: translateY(0); } +} + +@keyframes mmslideOut { + from { transform: translateY(0); } + to { transform: translateY(-10%); } +} + +.micromodal-slide { + display: none; +} + +.micromodal-slide.is-open { + display: block; +} + +.micromodal-slide[aria-hidden="false"] .modal__overlay { + animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); +} + +.micromodal-slide[aria-hidden="false"] .modal__container { + animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); +} + +.micromodal-slide[aria-hidden="true"] .modal__overlay { + animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); +} + +.micromodal-slide[aria-hidden="true"] .modal__container { + animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); +} + +.micromodal-slide .modal__container, +.micromodal-slide .modal__overlay { + will-change: transform; +} + +@media screen and (max-width: 480px) { + .modal__container { + max-width: 90%; + } diff --git a/_static/css/sphinx_rtd_theme.css b/_static/css/sphinx_rtd_theme.css new file mode 100644 index 000000000..2bbdf0064 --- /dev/null +++ b/_static/css/sphinx_rtd_theme.css @@ -0,0 +1,7 @@ +#micromodal .modal__overlay { + justify-content: unset; +} + +#micromodal .modal__container { + position: relative; +} diff --git a/_static/css/theme.css b/_static/css/theme.css new file mode 100644 index 000000000..19a446a0e --- /dev/null +++ b/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/_static/css/tooltipster-sideTip-borderless.min.css b/_static/css/tooltipster-sideTip-borderless.min.css new file mode 100644 index 000000000..19408cb1e --- /dev/null +++ b/_static/css/tooltipster-sideTip-borderless.min.css @@ -0,0 +1 @@ +.tooltipster-sidetip.tooltipster-borderless .tooltipster-box{border:none;background:#1b1b1b;background:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-bottom .tooltipster-box{margin-top:8px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-left .tooltipster-box{margin-right:8px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-right .tooltipster-box{margin-left:8px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-top .tooltipster-box{margin-bottom:8px}.tooltipster-sidetip.tooltipster-borderless .tooltipster-arrow{height:8px;margin-left:-8px;width:16px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-left .tooltipster-arrow,.tooltipster-sidetip.tooltipster-borderless.tooltipster-right .tooltipster-arrow{height:16px;margin-left:0;margin-top:-8px;width:8px}.tooltipster-sidetip.tooltipster-borderless .tooltipster-arrow-background{display:none}.tooltipster-sidetip.tooltipster-borderless .tooltipster-arrow-border{border:8px solid transparent}.tooltipster-sidetip.tooltipster-borderless.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#1b1b1b;border-bottom-color:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-left .tooltipster-arrow-border{border-left-color:#1b1b1b;border-left-color:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-right .tooltipster-arrow-border{border-right-color:#1b1b1b;border-right-color:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-top .tooltipster-arrow-border{border-top-color:#1b1b1b;border-top-color:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-bottom .tooltipster-arrow-uncropped{top:-8px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-right .tooltipster-arrow-uncropped{left:-8px} \ No newline at end of file diff --git a/_static/css/tooltipster-sideTip-light.min.css b/_static/css/tooltipster-sideTip-light.min.css new file mode 100644 index 000000000..298c9d4a5 --- /dev/null +++ b/_static/css/tooltipster-sideTip-light.min.css @@ -0,0 +1 @@ +.tooltipster-sidetip.tooltipster-light .tooltipster-box{border-radius:3px;border:1px solid #ccc;background:#ededed}.tooltipster-sidetip.tooltipster-light .tooltipster-content{color:#666}.tooltipster-sidetip.tooltipster-light .tooltipster-arrow{height:9px;margin-left:-9px;width:18px}.tooltipster-sidetip.tooltipster-light.tooltipster-left .tooltipster-arrow,.tooltipster-sidetip.tooltipster-light.tooltipster-right .tooltipster-arrow{height:18px;margin-left:0;margin-top:-9px;width:9px}.tooltipster-sidetip.tooltipster-light .tooltipster-arrow-background{border:9px solid transparent}.tooltipster-sidetip.tooltipster-light.tooltipster-bottom .tooltipster-arrow-background{border-bottom-color:#ededed;top:1px}.tooltipster-sidetip.tooltipster-light.tooltipster-left .tooltipster-arrow-background{border-left-color:#ededed;left:-1px}.tooltipster-sidetip.tooltipster-light.tooltipster-right .tooltipster-arrow-background{border-right-color:#ededed;left:1px}.tooltipster-sidetip.tooltipster-light.tooltipster-top .tooltipster-arrow-background{border-top-color:#ededed;top:-1px}.tooltipster-sidetip.tooltipster-light .tooltipster-arrow-border{border:9px solid transparent}.tooltipster-sidetip.tooltipster-light.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#ccc}.tooltipster-sidetip.tooltipster-light.tooltipster-left .tooltipster-arrow-border{border-left-color:#ccc}.tooltipster-sidetip.tooltipster-light.tooltipster-right .tooltipster-arrow-border{border-right-color:#ccc}.tooltipster-sidetip.tooltipster-light.tooltipster-top .tooltipster-arrow-border{border-top-color:#ccc}.tooltipster-sidetip.tooltipster-light.tooltipster-bottom .tooltipster-arrow-uncropped{top:-9px}.tooltipster-sidetip.tooltipster-light.tooltipster-right .tooltipster-arrow-uncropped{left:-9px} \ No newline at end of file diff --git a/_static/css/tooltipster-sideTip-noir.min.css b/_static/css/tooltipster-sideTip-noir.min.css new file mode 100644 index 000000000..39f4ca388 --- /dev/null +++ b/_static/css/tooltipster-sideTip-noir.min.css @@ -0,0 +1 @@ +.tooltipster-sidetip.tooltipster-noir .tooltipster-box{border-radius:0;border:3px solid #000;background:#fff}.tooltipster-sidetip.tooltipster-noir .tooltipster-content{color:#000}.tooltipster-sidetip.tooltipster-noir .tooltipster-arrow{height:11px;margin-left:-11px;width:22px}.tooltipster-sidetip.tooltipster-noir.tooltipster-left .tooltipster-arrow,.tooltipster-sidetip.tooltipster-noir.tooltipster-right .tooltipster-arrow{height:22px;margin-left:0;margin-top:-11px;width:11px}.tooltipster-sidetip.tooltipster-noir .tooltipster-arrow-background{border:11px solid transparent}.tooltipster-sidetip.tooltipster-noir.tooltipster-bottom .tooltipster-arrow-background{border-bottom-color:#fff;top:4px}.tooltipster-sidetip.tooltipster-noir.tooltipster-left .tooltipster-arrow-background{border-left-color:#fff;left:-4px}.tooltipster-sidetip.tooltipster-noir.tooltipster-right .tooltipster-arrow-background{border-right-color:#fff;left:4px}.tooltipster-sidetip.tooltipster-noir.tooltipster-top .tooltipster-arrow-background{border-top-color:#fff;top:-4px}.tooltipster-sidetip.tooltipster-noir .tooltipster-arrow-border{border-width:11px}.tooltipster-sidetip.tooltipster-noir.tooltipster-bottom .tooltipster-arrow-uncropped{top:-11px}.tooltipster-sidetip.tooltipster-noir.tooltipster-right .tooltipster-arrow-uncropped{left:-11px} \ No newline at end of file diff --git a/_static/css/tooltipster-sideTip-punk.min.css b/_static/css/tooltipster-sideTip-punk.min.css new file mode 100644 index 000000000..6702cf557 --- /dev/null +++ b/_static/css/tooltipster-sideTip-punk.min.css @@ -0,0 +1 @@ +.tooltipster-sidetip.tooltipster-punk .tooltipster-box{border-radius:5px;border:none;border-bottom:3px solid #f71169;background:#2a2a2a}.tooltipster-sidetip.tooltipster-punk.tooltipster-top .tooltipster-box{margin-bottom:7px}.tooltipster-sidetip.tooltipster-punk .tooltipster-content{color:#fff;padding:8px 16px}.tooltipster-sidetip.tooltipster-punk .tooltipster-arrow-background{display:none}.tooltipster-sidetip.tooltipster-punk.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#2a2a2a}.tooltipster-sidetip.tooltipster-punk.tooltipster-left .tooltipster-arrow-border{border-left-color:#2a2a2a}.tooltipster-sidetip.tooltipster-punk.tooltipster-right .tooltipster-arrow-border{border-right-color:#2a2a2a}.tooltipster-sidetip.tooltipster-punk.tooltipster-top .tooltipster-arrow-border{border-top-color:#f71169} \ No newline at end of file diff --git a/_static/css/tooltipster-sideTip-shadow.min.css b/_static/css/tooltipster-sideTip-shadow.min.css new file mode 100644 index 000000000..7d92926de --- /dev/null +++ b/_static/css/tooltipster-sideTip-shadow.min.css @@ -0,0 +1 @@ +.tooltipster-sidetip.tooltipster-shadow .tooltipster-box{border:none;border-radius:5px;background:#fff;box-shadow:0 0 10px 6px rgba(0,0,0,.1)}.tooltipster-sidetip.tooltipster-shadow.tooltipster-bottom .tooltipster-box{margin-top:6px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-left .tooltipster-box{margin-right:6px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-right .tooltipster-box{margin-left:6px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-top .tooltipster-box{margin-bottom:6px}.tooltipster-sidetip.tooltipster-shadow .tooltipster-content{color:#8d8d8d}.tooltipster-sidetip.tooltipster-shadow .tooltipster-arrow{height:6px;margin-left:-6px;width:12px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-left .tooltipster-arrow,.tooltipster-sidetip.tooltipster-shadow.tooltipster-right .tooltipster-arrow{height:12px;margin-left:0;margin-top:-6px;width:6px}.tooltipster-sidetip.tooltipster-shadow .tooltipster-arrow-background{display:none}.tooltipster-sidetip.tooltipster-shadow .tooltipster-arrow-border{border:6px solid transparent}.tooltipster-sidetip.tooltipster-shadow.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#fff}.tooltipster-sidetip.tooltipster-shadow.tooltipster-left .tooltipster-arrow-border{border-left-color:#fff}.tooltipster-sidetip.tooltipster-shadow.tooltipster-right .tooltipster-arrow-border{border-right-color:#fff}.tooltipster-sidetip.tooltipster-shadow.tooltipster-top .tooltipster-arrow-border{border-top-color:#fff}.tooltipster-sidetip.tooltipster-shadow.tooltipster-bottom .tooltipster-arrow-uncropped{top:-6px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-right .tooltipster-arrow-uncropped{left:-6px} \ No newline at end of file diff --git a/_static/css/tooltipster.bundle.min.css b/_static/css/tooltipster.bundle.min.css new file mode 100644 index 000000000..d8f30feec --- /dev/null +++ b/_static/css/tooltipster.bundle.min.css @@ -0,0 +1 @@ +.tooltipster-fall,.tooltipster-grow.tooltipster-show{-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1);-moz-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-ms-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-o-transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-base{display:flex;pointer-events:none;position:absolute}.tooltipster-box{flex:1 1 auto}.tooltipster-content{box-sizing:border-box;max-height:100%;max-width:100%;overflow:auto}.tooltipster-ruler{bottom:0;left:0;overflow:hidden;position:fixed;right:0;top:0;visibility:hidden}.tooltipster-fade{opacity:0;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;-ms-transition-property:opacity;transition-property:opacity}.tooltipster-fade.tooltipster-show{opacity:1}.tooltipster-grow{-webkit-transform:scale(0,0);-moz-transform:scale(0,0);-o-transform:scale(0,0);-ms-transform:scale(0,0);transform:scale(0,0);-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-backface-visibility:hidden}.tooltipster-grow.tooltipster-show{-webkit-transform:scale(1,1);-moz-transform:scale(1,1);-o-transform:scale(1,1);-ms-transform:scale(1,1);transform:scale(1,1);-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-swing{opacity:0;-webkit-transform:rotateZ(4deg);-moz-transform:rotateZ(4deg);-o-transform:rotateZ(4deg);-ms-transform:rotateZ(4deg);transform:rotateZ(4deg);-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform}.tooltipster-swing.tooltipster-show{opacity:1;-webkit-transform:rotateZ(0);-moz-transform:rotateZ(0);-o-transform:rotateZ(0);-ms-transform:rotateZ(0);transform:rotateZ(0);-webkit-transition-timing-function:cubic-bezier(.23,.635,.495,1);-webkit-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-moz-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-ms-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-o-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);transition-timing-function:cubic-bezier(.23,.635,.495,2.4)}.tooltipster-fall{-webkit-transition-property:top;-moz-transition-property:top;-o-transition-property:top;-ms-transition-property:top;transition-property:top;-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-fall.tooltipster-initial{top:0!important}.tooltipster-fall.tooltipster-dying{-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;-ms-transition-property:all;transition-property:all;top:0!important;opacity:0}.tooltipster-slide{-webkit-transition-property:left;-moz-transition-property:left;-o-transition-property:left;-ms-transition-property:left;transition-property:left;-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-moz-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-ms-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-o-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-slide.tooltipster-initial{left:-40px!important}.tooltipster-slide.tooltipster-dying{-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;-ms-transition-property:all;transition-property:all;left:0!important;opacity:0}@keyframes tooltipster-fading{0%{opacity:0}100%{opacity:1}}.tooltipster-update-fade{animation:tooltipster-fading .4s}@keyframes tooltipster-rotating{25%{transform:rotate(-2deg)}75%{transform:rotate(2deg)}100%{transform:rotate(0)}}.tooltipster-update-rotate{animation:tooltipster-rotating .6s}@keyframes tooltipster-scaling{50%{transform:scale(1.1)}100%{transform:scale(1)}}.tooltipster-update-scale{animation:tooltipster-scaling .6s}.tooltipster-sidetip .tooltipster-box{background:#565656;border:2px solid #000;border-radius:4px}.tooltipster-sidetip.tooltipster-bottom .tooltipster-box{margin-top:8px}.tooltipster-sidetip.tooltipster-left .tooltipster-box{margin-right:8px}.tooltipster-sidetip.tooltipster-right .tooltipster-box{margin-left:8px}.tooltipster-sidetip.tooltipster-top .tooltipster-box{margin-bottom:8px}.tooltipster-sidetip .tooltipster-content{color:#fff;line-height:18px;padding:6px 14px}.tooltipster-sidetip .tooltipster-arrow{overflow:hidden;position:absolute}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow{height:10px;margin-left:-10px;top:0;width:20px}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow{height:20px;margin-top:-10px;right:0;top:0;width:10px}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow{height:20px;margin-top:-10px;left:0;top:0;width:10px}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow{bottom:0;height:10px;margin-left:-10px;width:20px}.tooltipster-sidetip .tooltipster-arrow-background,.tooltipster-sidetip .tooltipster-arrow-border{height:0;position:absolute;width:0}.tooltipster-sidetip .tooltipster-arrow-background{border:10px solid transparent}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background{border-bottom-color:#565656;left:0;top:3px}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background{border-left-color:#565656;left:-3px;top:0}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background{border-right-color:#565656;left:3px;top:0}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background{border-top-color:#565656;left:0;top:-3px}.tooltipster-sidetip .tooltipster-arrow-border{border:10px solid transparent;left:0;top:0}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#000}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border{border-left-color:#000}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border{border-right-color:#000}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border{border-top-color:#000}.tooltipster-sidetip .tooltipster-arrow-uncropped{position:relative}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-uncropped{top:-10px}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-uncropped{left:-10px} \ No newline at end of file diff --git a/_static/css/tooltipster.custom.css b/_static/css/tooltipster.custom.css new file mode 100644 index 000000000..28021434b --- /dev/null +++ b/_static/css/tooltipster.custom.css @@ -0,0 +1,22 @@ +.hxr-hoverxref { + border-bottom: 1px dotted; + border-color: gray; +} + +.tooltipster-box { + max-height: 600px; +} + +.tooltipster-sidetip.tooltipster-shadow.tooltipster-shadow-custom .tooltipster-content { + color: #8d8d8d; + font-size: 80%; + padding: 18px; +} + +.tooltipster-sidetip.tooltipster-shadow.tooltipster-shadow-custom .tooltipster-content p { + font-size: 100% !important; +} + +.tooltipster-sidetip.tooltipster-shadow.tooltipster-shadow-custom .tooltipster-content .headerlink { + visibility: hidden; +} \ No newline at end of file diff --git a/_static/custom.css b/_static/custom.css new file mode 100644 index 000000000..d026a072d --- /dev/null +++ b/_static/custom.css @@ -0,0 +1,75 @@ +:root { + --sd-color-white: #d1d1d1; + --sd-color-primary-text: #d1d1d1; + --sd-color-secondary-text: #d1d1d1; + --sd-color-success-text: #d1d1d1; + --sd-color-info-text: #d1d1d1; + --sd-color-danger-text: #d1d1d1; + --sd-color-muted-text: #d1d1d1; + --sd-color-dark-text: #d1d1d1; + --sd-color-black-text: #d1d1d1; + +} + +.wy-side-nav-search, .wy-nav-top { + background: #1a1c1e; +} + +.wy-side-nav-search .wy-dropdown > a img.logo, .wy-side-nav-search > a img.logo { + width: 75%; +} + +/* Override width of the main page*/ + +.wy-nav-content{ + max-width: 100%; +} + +audio, canvas, video { + display: block; + margin: auto; + margin-bottom: 12px; +} + +.rst-content code, .rst-content tt, code, kbd, pre, samp { + font-family: monospace,serif; + _font-family: courier new,monospace; + font-size: 0.95em; +} + +.rst-content .linenodiv pre, .rst-content div[class^=highlight] pre, .rst-content pre.literal-block { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, Courier, monospace; + font-size: 0.95em; + line-height: 1.4; +} + +/* Override margins of the images and text blocks*/ + +.rst-content .align-center { + margin-bottom: 14px; +} + +p { + margin-bottom: 14px; +} + +/* Customization for icon-style numbering of menu items or objects in a picture +for use in text */ + +.sd-badge { + /* display: inline-block; */ + padding: .25em .55em; + font-size: .8em; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: middle; + border-radius: .5rem; +} + +.sd-outline-dark { + border-width: 0.15em !important; +} + + diff --git a/_static/data/versionwarning-data.json b/_static/data/versionwarning-data.json new file mode 100644 index 000000000..45857002b --- /dev/null +++ b/_static/data/versionwarning-data.json @@ -0,0 +1,17 @@ +{ + "meta": { + "api_url": "https://readthedocs.org/api/v2/" + }, + "banner": { + "html": "\n
\n

Warning

\n

\n You are not reading the most up to date version of this documentation. is the newest version.\n

\n
", + "id_div": "version-warning-banner", + "body_selector": "div.body", + "custom": false + }, + "project": { + "slug": null + }, + "version": { + "slug": null + } +} \ No newline at end of file diff --git a/_static/design-style.4045f2051d55cab465a707391d5b2007.min.css b/_static/design-style.4045f2051d55cab465a707391d5b2007.min.css new file mode 100644 index 000000000..3225661c2 --- /dev/null +++ b/_static/design-style.4045f2051d55cab465a707391d5b2007.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #007bff;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0069d9;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/_static/design-tabs.js b/_static/design-tabs.js new file mode 100644 index 000000000..36b38cf0d --- /dev/null +++ b/_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 000000000..527b876ca --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 000000000..b57ae3b83 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 000000000..a858a410e Binary files /dev/null and b/_static/file.png differ diff --git a/_static/gaijin.ico b/_static/gaijin.ico new file mode 100644 index 000000000..0829b52cc Binary files /dev/null and b/_static/gaijin.ico differ diff --git a/_static/gaijin_round_blur.png b/_static/gaijin_round_blur.png new file mode 100644 index 000000000..fe6ce1da5 Binary files /dev/null and b/_static/gaijin_round_blur.png differ diff --git a/_static/jquery-3.6.0.js b/_static/jquery-3.6.0.js new file mode 100644 index 000000000..fc6c299b7 --- /dev/null +++ b/_static/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+ + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/basic-concepts.html b/api-references/dagor-dshl/index/basic-concepts.html new file mode 100644 index 000000000..6480922ff --- /dev/null +++ b/api-references/dagor-dshl/index/basic-concepts.html @@ -0,0 +1,209 @@ + + + + + + + Basic Concepts — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/basic-concepts/conditionals.html b/api-references/dagor-dshl/index/basic-concepts/conditionals.html new file mode 100644 index 000000000..af1f4eb18 --- /dev/null +++ b/api-references/dagor-dshl/index/basic-concepts/conditionals.html @@ -0,0 +1,287 @@ + + + + + + + Conditionals — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Conditionals

+

Outside HLSL blocks

+

if, else, else if directives are used to perform conditional compilation of different shader variants in DSHL.

+

Example:

+
texture tex;
+texture fallback;
+int test_interval = 0;
+interval test_interval:negative<0, less_than_two<2, more_than_two;
+
+shader test_shader
+{
+  if (tex != NULL)
+  {
+    (ps) { tex@smp2d = tex; }
+  }
+  else
+  {
+    (ps) { tex@smp2d = fallback; }
+  }
+
+  if (test_interval == positive)
+  {
+    (vs) { var@f4 = (0, 0, 0, 0); }
+  }
+  else if (test_interval == less_than_two)
+  {
+    (vs) { var@f4 = (1, 0, 0, 0); }
+  }
+  else
+  {
+    (vs) { var@f4 = (1, 0, 1, 0); }
+  }
+}
+
+
+

For each branch of the conditional statement, there will be created some number of shader variants (determined by combinatorics). +If branch is an exact duplicate of another, no variants will be created. +These variants are to be switched in runtime, based on the values in the conditionals.

+

Inside HLSL blocks

+

It is possible to use similar directives ##if, ##elif, ##else, ##endif inside hlsl{...} blocks too with a special ## preprocessor tag. +In this case, however, you need to close them with ##endif in the end. Example:

+
hlsl
+{
+##if tex != NULL
+  float somefloat = 1.0;
+##endif
+}
+
+
+

maybe intrinsic

+

maybe() intrinsic can be used in a bool-expression. +Its argument is any identifier. If this identifier is not a boolean variable, the intrinsic will return false, otherwise the value of this boolean variable.

+
if (wsao_tex != NULL) {
+  if (shader == ssao) {
+    bool use_wsao = true;
+  }
+}
+
+(ps) {
+  if (maybe(use_wsao)) {
+    foo@f4 = foo;
+  }
+}
+hlsl(ps) {
+  ##if maybe(use_wsao)
+    return foo;
+  ##endif
+}
+
+
+

If you try to remove the maybe() in this example, it will cause a compilation error, because the use_wsao is not declared in all variants.

+

Creating multiple shaders with conditionals

+

Conditionals can also be used to define multiple shaders at once (for convenience). +You just declare multiple shaders with the shader keyword and do a conditional statement on the shader’s name:

+
shader one, two, three
+{
+  if (shader == one)
+  {
+    float var = 1.0;
+  }
+  else if (shader == two)
+  {
+    float var = 2.0;
+  }
+  else
+  {
+    float var = 0.0;
+  }
+}
+
+
+

This example will result in compilation of 3 different shaders, namely one, two and three, +which will have different values assigned to var.

+
+

Note

+

Do not confuse this feature with intervals Intervals. +It does not create variants of a single shader, but creates different shaders with different names.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/basic-concepts/data-types.html b/api-references/dagor-dshl/index/basic-concepts/data-types.html new file mode 100644 index 000000000..cbd9cd029 --- /dev/null +++ b/api-references/dagor-dshl/index/basic-concepts/data-types.html @@ -0,0 +1,283 @@ + + + + + + + Data types and variables — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Data types and variables

+

These are the data types which are native to DSHL (meaning they can be used outside of hlsl{...} blocks).

+
    +
  • Scalar types: float, int, bool

  • +
  • Vector 4D types: float4, int4

  • +
  • Matrix 4x4 types: float4x4

  • +
  • Textures: texture

  • +
  • Buffers: buffer, const_buffer

  • +
  • Raytracing structures: tlas

  • +
+

There are also special convertable types in DSHL, which are used for processing vertex data input. +Refer to Channels for more information.

+
+

Global variables

+

Global variables in DSHL are most often set from C++ code during runtime. +They are declared with the following syntax:

+
(type) name [ = initializer ]  [always_referenced];
+
+
+

Example:

+
float4 f4 = (1.0, 1.0, 1.0, 1.0);
+int a;
+texture tex;
+
+
+
+

Warning

+

Global variables cannot have float2 and float3 types. +Type bool must have an initializer. +Types float4x4, texture, buffer, const_buffer do not support initializers.

+
+

always_referenced flag disallows shader compiler to remove any unused in global shader variables. +This is helpful when we want to access the variable on the CPU, for example.

+
+
+

Local variables

+

Local variables are declared inside a shader{...} construction in a similar way:

+
[specifier] (type) name [ = initializer ] [no_warnings];
+
+
+

Local variables can have the following specifiers.

+
    +
  • local – basically on-stack variables that are not visible outside the shader and are not visible on the CPU side, they are only needed for some temporary calculations in shader blocks Shader blocks.

  • +
  • static – means that the variable is a material parameter, which is set only once on material instantiation.

  • +
  • dynamic – similarly to static defines a material parameter, but it can be changed during runtime.

  • +
+
+

Warning

+

Using dynamic (as well as global) shader variables is more expensive than static, +because stcode (responsible for setting these variables) is executed each time setStates() is called for the shader.

+
+
+

Note

+

no_warnings is a modifier for static variables only. It is used when we need to access shader variables on the CPU, +without using them in shaders (which normally triggers warnings).

+
+
+
+

Textures and Buffers

+

Textures and buffers are declared as global variables

+
texture some_tex;
+buffer some_buf;
+const_buffer some_constant_buf;
+
+
+

and then piped from C++ code to DSHL via the DSHL preshader, e.g.

+
(ps) {
+  my_tex@smp2d = some_tex;
+
+  my_buf@buf = some_buf hlsl {
+    #include <some_buffer_inc.hlsli>
+    // assuming some_buffer_inc.hlsli has SomeBuffer struct defined
+    StructuredBuffer<SomeBuffer> my_buf@buf;
+  }
+
+  my_cbuf@cbuf = some_constant_buf hlsl {
+    cbuffer my_cbuf@cbuf {
+      #include <some_constant_buffer_inc.hlsli>
+      // assuming some_constant_buffer_inc.hlsli has SomeConstantBuffer struct defined
+      SomeConstantBuffer my_constant_buf;
+    };
+  }
+
+  // my_tex, my_buf, my_constant_buf names are now accessible in HLSL
+}
+
+
+

Refer to Preshader for more information.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/basic-concepts/error.html b/api-references/dagor-dshl/index/basic-concepts/error.html new file mode 100644 index 000000000..793e2157b --- /dev/null +++ b/api-references/dagor-dshl/index/basic-concepts/error.html @@ -0,0 +1,204 @@ + + + + + + + Throwing compilation errors — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Throwing compilation errors

+

Using the error intrinsic, you can cause a compilation error with a message:

+
if (gi_quality == only_ao) {
+// ..
+} else if (gi_quality == high) {
+  // ..
+} else {
+  error("Unimplemented gi quality");
+}
+
+
+

Compiler output:

+
[ERROR] ../../../prog/gameLibs/render/shaders/debugGbuffer.dshl(41,9): "Unimplemented gi quality"
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/basic-concepts/hardware.html b/api-references/dagor-dshl/index/basic-concepts/hardware.html new file mode 100644 index 000000000..f53da5d21 --- /dev/null +++ b/api-references/dagor-dshl/index/basic-concepts/hardware.html @@ -0,0 +1,232 @@ + + + + + + + Hardware defines — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Hardware defines

+

DSHL supports some built-in hardware defines. +You can use them in shaders to toggle hardware specific features, change shader behavior depending on the target platform, etc.

+

These defines are accessed via hardware.<platform> syntax. +Here is a list of the available defines:

+
    +
  • metal – Metal API

  • +
  • metaliOS – Metal API for iOS

  • +
  • vulkan – Vulkan API

  • +
  • pc – deprecated, alias for DirectX 11 API

  • +
  • dx11 – DirectX 11 API

  • +
  • dx12 – DirectX 12 API

  • +
  • xbox – Xbox One platform

  • +
  • scarlett – Scarlett platform (a.k.a Xbox Series X/S)

  • +
  • ps4 – PlayStation 4 platform

  • +
  • ps5 – PlayStation 5 platform

  • +
  • fsh_4_0 – HLSL Shader Model 4.0 version

  • +
  • fsh_5_0 – HLSL Shader Model 5.0 version

  • +
  • fsh_6_0 – HLSL Shader Model 6.0 version

  • +
  • fsh_6_6 – HLSL Shader Model 6.6 version

  • +
  • mesh – if platform supports mesh shaders

  • +
  • bindless – if platform supports bindless textures

  • +
+

Usage example:

+
shader example_shader
+{
+  if (hardware.metal) {
+    dont_render;
+    // this shader will not be compiled for metal platform
+  }
+
+  hlsl {
+    int var = 0;
+##if hardware.dx12
+    var = 12;
+##elif hardware.dx11
+    var = 11;
+##endif
+    // value of var will be different for dx11 and dx12 platforms
+  }
+}
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/basic-concepts/includes.html b/api-references/dagor-dshl/index/basic-concepts/includes.html new file mode 100644 index 000000000..db7547d1d --- /dev/null +++ b/api-references/dagor-dshl/index/basic-concepts/includes.html @@ -0,0 +1,198 @@ + + + + + + + Includes — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Includes

+

DSHL supports:

+
    +
  • include, e.g. include "some_shader.dshl"

  • +
  • include_optional, e.g. include_optional "optional_shader.dshl"

  • +
+

Includes in *.dshl files are always included one time, +and should not be confused with #include directive in hlsl files and blocks, +where they follow the regular preprocessor rules (and can be included multiple times).

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/basic-concepts/intervals.html b/api-references/dagor-dshl/index/basic-concepts/intervals.html new file mode 100644 index 000000000..94d255b3f --- /dev/null +++ b/api-references/dagor-dshl/index/basic-concepts/intervals.html @@ -0,0 +1,298 @@ + + + + + + + Intervals — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Intervals

+

Intervals are a way to generate multiple variants of a single shader, based on whether the value of a special variable falls into specific range. +They can be created from an int or float shader variable using the interval keyword. +Consider this example:

+
int var;
+interval var:below_zero<0, zero<1, positive_less_than_four<4, four<5, five_or_higher;
+// same goes for floats
+
+
+

This declaration will create 5 permutations of the shader (below_zero, zero, positive_less_than_four, four and five_or_higher), +and the var interval itself can be accessed in hlsl blocks with special preprocessor tag ##.

+
int var;
+interval var:below_zero<0, zero<1, positive_less_than_four<4, four<5, five_or_higher;
+
+shader example_shader {
+  hlsl {
+    ##if var == five_or_higher
+      ...
+    ##endif
+  }
+}
+
+
+

It is essential to understand that this construction doesn’t mean that var equals to 5, but +it means var is within the declared interval five_or_higher, so this syntax applies to float numbers as well.

+
+

Warning

+

Notice that intervals can be created not only from global variables (as in example above), but also from static and dynamic variables (described in Local variables).

+

Intervals on static variables are resolved (appropriate shader variant is selected) only once during material instantiation, so +shader variants dependant on static variables are not switched during runtime.

+

Intervals on dynamic and global variables, however, are resolved each time the shader is used for rendering (on setStates() call), because such variables can change during runtime. +This has worse CPU performance impact, compared to static intervals.

+
+
+

Optional intervals

+

If the interval is used in HLSL code blocks, you can make this interval optional. +All conditions in HLSL code which use optional intervals will be replaced with HLSL branches, thus reducing the number of shader variants.

+
+

Warning

+

Shaders with optional intervals can be used only for conditionals in HLSL blocks and need to be compiled with -optionalAsBranches flag +(otherwise optional intervals will act the same as regular intervals). +This feature should only be used for dev build.

+
+
int test_optional = 0;
+optional interval test_optional : zero < 1, one < 2, two < 3, three;
+
+shader testMaterial
+{
+  // ...
+  hlsl
+  {
+    float3 color = float3(0, 0, 0);
+##if test_optional == one
+    color = float3(1, 0, 0);
+##elif test_optional == two || test_optional == three
+    color = float3(0, 0, 1);
+##if test_optional == two
+    color *= 0.5;
+##endif
+
+##else
+    color = float3(0, 0, 1);
+##endif
+  }
+}
+
+
+
+
+

Assumes

+

Shader variables can be assigned a fixed value when the shader is compiled by assuming. Such shader vars may not be changed at runtime, their values will be constant in the binary. +This allows to reduce number of shader variants or disable specific features for specific platforms.

+

You can assume intervals inside a config .blk file for the shader compiler. +To do this, create an assume_vars block inside a Compile block and then specify the assumes you want, following regular .blk syntax:

+
Compile
+{
+  // ...
+  assume_vars
+  {
+    include common_assumes.blk
+    supports_sh_6_1:i = 0
+    static_shadows_custom_fxaa:i=0
+    grass_use_quads:i=0
+    bloom_tex:i = 1
+  }
+}
+
+
+
+

Note

+

By assuming a texture, e.g. bloom_tex:i = 1, you declare that this texture is never NULL.

+
+

Assume statement

+

You can use assume interval_name = interval_value; statement in DSHL shaders to force an interval to be fixed. +This can be useful to disable unnecessary shader variants when the same interval is shared among different shaders.

+
include "deferred_shadow_common.dshl"
+
+shader deferred_shadow_classify_tiles
+{
+  assume use_ssss = off;
+  // ...
+}
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/basic-concepts/macros.html b/api-references/dagor-dshl/index/basic-concepts/macros.html new file mode 100644 index 000000000..15f48686c --- /dev/null +++ b/api-references/dagor-dshl/index/basic-concepts/macros.html @@ -0,0 +1,209 @@ + + + + + + + Macros — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Macros

+

Macros are declared as:

+
macro NAME(argument1, argument2, ...)
+  ...
+endmacro
+
+
+

Within macro, all occurences of argument1 would be replaced with argument passed to the macro invokation, including hlsl blocks within macro.

+

There is no way to undefine macro, but you can define it optionally:

+
define_macro_if_not_defined NAME(argument1)
+  ...
+endmacro
+
+
+

which will only define macro NAME if it wasn’t defined previously.

+

We have some naming conventions regarding macros:

+
    +
  • No hlsl code should be in INIT_... macros.

  • +
  • If your macro includes other macros, USE_... and INIT_... macros should be separated accordingly.

  • +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/channels.html b/api-references/dagor-dshl/index/channels.html new file mode 100644 index 000000000..4d393b446 --- /dev/null +++ b/api-references/dagor-dshl/index/channels.html @@ -0,0 +1,273 @@ + + + + + + + Channels — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Channels

+

Channels are used to declare the data that the vertex shader is going to get from the vertex buffer. +Channels must be defined within a shader{...} block via the following syntax:

+
channel (type) (usage_dst) = (usage_src) [ modifier ];
+
+
+

Data types

+

Data types that follow the channel keyword differ from those native DSHL types described in Data types and variables. +These types are considered convertable, meaning that they are always casted to native HLSL data types when piped to +variables in hlsl{...} blocks.

+

This cast always happens to a 4-component vector of some basic scalar type, even if the source DSHL type is not a 4-component type. +For example, float2 type with (x, y) components is casted to 4-component float vector via the rule (x, y, 0, 1).

+

The list below describes these convertable types as well as their casts to 4D vectors.

+
    +
  • float1 – 1D float (x, 0, 0, 1)

  • +
  • float2 – 2D float (x, y, 0, 1)

  • +
  • float3 – 3D float (x, y, z, 1)

  • +
  • float4 – 4D float (x, y, z, w)

  • +
  • short2 – 2D signed short (x, y, 0, 1)

  • +
  • short4 – 4D signed short (x, y, z, w)

  • +
  • ubyte4 – 4D uint8_t (x, y, z, w)

  • +
  • color8 – 4-byte (R, G, B, A) color in [0..1] range

  • +
  • half2 – 2D 16-bit float (x, y, 0, 1)

  • +
  • half4 – 4D 16-bit float (x, y, z, w)

  • +
  • short2n – 2D signed short normalized (x/32767.0, y/32767.0 , 0, 1)

  • +
  • short4n – 4D signed short normalized (x/32767.0, y/32767.0 , z/32767.0, w/32767.0)

  • +
  • ushort2n – 2D unsigned short normalized (x/32767.0, y/32767.0 , 0, 1)

  • +
  • ushort4n – 4D unsigned short normalized (x/32767.0, y/32767.0 , z/32767.0, w/32767.0)

  • +
  • udec3 – 3D unsigned 10-bit float (x, y, z, 1)

  • +
  • dec3n – 3D signed 10-bit float normalized (x/511.0, y/511.0, z/511.0, 1)

  • +
+

Data usages

+

Shader resource builder needs to know which data to extract from the given mesh that will be sent to your shader. +This is why you need to specify channel’s usage.

+
    +
  • pos – position

  • +
  • norm – normal

  • +
  • vcol – vertex color

  • +
  • tc – texture coordinates

  • +
  • lightmap – lightmap, deprecated (legacy from the times when lightmaps were used)

  • +
  • extra – extra, can be used only as usage_src (used for providing additional info for vertices)

  • +
+

Usually, usage_src and usage_dst match. But sometimes, e.g. when the extra channel is used as usage_src, +you must remap it to other intended usage_dst.

+

Data modifiers

+

Data modifiers might be useful in some cases where the data from the channel should be rescaled or multiplied by some constant.

+
    +
  • signed_pack – converts data from [0..1] range to [-1..1] range

  • +
  • unsigned_pack – converts data from [-1..1] range to [0..1] range

  • +
  • bounding_pack – rescales data from [min..max] to [0..1] if usage_dst is unsigned or [-1..1] if it is signed

  • +
  • mul_1k – multiplies data by 1024

  • +
  • mul_2k – multiplies data by 2048

  • +
  • mul_4k – multiplies data by 4096

  • +
  • mul_8k – multiplies data by 8192

  • +
  • mul_16k – multiplies data by 16384

  • +
  • mul_32767 – multiplies data by 32767 and clamps it to [-32767..32767] range

  • +
+

Here is a simple usage example:

+
shader some_shader
+{
+  /*
+  Here we declare channels for the vertex shader, which
+  will be used by the shader compiler to generate appropriate
+  vertex shader declaration for this particular shader.
+  */
+  channel float3 pos=pos;       // vertex position
+  channel color8 vcol=vcol;     // vertex color
+  channel float3 tc[0] = tc[0]; // vertex texture coordinate
+  channel float3 tc[1] = tc[1]; // another vertex texture coordinate
+
+  hlsl(vs) {
+    /*
+    This VsInput struct declares vertex information in HLSL-style.
+    Note that for each DSHL channel declared above, there should be a corresponding
+    HLSL semantic matching the declared channel.
+    */
+    struct VsInput
+    {
+      float4 pos : POSITION;               // vertex position
+      float4 color : COLOR0;               // vertex color
+      float3 texcoord : TEXCOORD0;         // vertex texture coordinate
+      float3 another_texcoord : TEXCOORD1; // another vertex texture coordinate
+    };
+  }
+
+  hlsl(vs) {
+    VsOutput some_vs(VsInput input)
+    {
+      // ...
+    }
+  }
+}
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/directives.html b/api-references/dagor-dshl/index/directives.html new file mode 100644 index 000000000..3e48337cf --- /dev/null +++ b/api-references/dagor-dshl/index/directives.html @@ -0,0 +1,244 @@ + + + + + + + Common directives — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Common directives

+
+

no_dynstcode

+

no_dynstcode disallows the shader to use any kind of dynamic stcode in its body. +This means that the shader can only access material variables, or variables defined in a shader block Shader blocks, which is supported by the shader. +Consider the following example:

+
float4 some_global_var;
+float4 another_global_var;
+
+block(scene) common_scene_block
+{
+  (vs) { some_global_var@f4 = some_global_var; }
+}
+
+shader test_shader
+{
+  no_dynstcode;
+
+  texture tex = material.texture.diffuse;
+  (ps) { diffuse_tex@static = tex; }
+  // diffuse_tex is now accessible inside hlsl(ps){...} blocks
+
+  supports common_scene_block;
+  // some_global_var is now accessible inside hlsl(vs){...} blocks
+
+  // will cause compilation error
+  (vs) { another_global_var@f4 = another_global_var; }
+}
+
+
+
+
+

dont_render

+

dont_render is used to disable shader variants. +Most common use-case is to disable redundant variants of a shader, which is using some shared interval.

+

A special value of NULL will be assigned to the shader variant that has dont_render and it will not be compiled. +When NULL dynamic variant is selected during runtime, no rendering or dispatching (in case of compute shaders) happens. +If a ShaderElement is being created from a NULL static shader variant, it will just return NULL.

+
include "render_pass_modes.dshl"
+
+shader decals_shader
+{
+  if (render_pass_mode == render_pass_impostor)
+  { dont_render; }
+
+  // ...
+}
+
+
+
+

Note

+

dont_render does not directly decrease the number of shader variants. +Although compilation of NULL shaders does not happen and stcode for them is not created, they are still present in shader variant lookup table.

+
+
+
+

no_ablend

+

no_ablend forcefully disables blending. +Specifying blend_src, blend_dst or blend_asrc, blend_adst will have no effect.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/global-constants.html b/api-references/dagor-dshl/index/global-constants.html new file mode 100644 index 000000000..a32ef7c56 --- /dev/null +++ b/api-references/dagor-dshl/index/global-constants.html @@ -0,0 +1,219 @@ + + + + + + + Global constants — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Global constants

+

DSHL supports some built-in global constants, which you can grab in the preshader Preshader and then use in hlsl blocks.

+

List of constants:

+
    +
  • globtmfloat4x4 world-view-projection matrix

  • +
  • projtmfloat4x4 projection matrix

  • +
  • viewprojtmfloat4x4 view-projection matrix

  • +
  • local_view_x, local_view_y, local_view_z, local_view_pos – 1..4 columns of inverse view matrix, in float3 format

  • +
  • world_local_x, world_local_y, world_local_z, world_local_pos – 1..4 columns of world transform matrix, in float3 format

  • +
+

Usage example:

+
shader example_shader
+{
+  // grabbing global constants via preshader
+  (vs)
+  {
+    viewprojtm@f44 = viewprojtm;
+    world_local_x@f3 = world_local_x;
+    world_local_y@f3 = world_local_y;
+    world_local_z@f3 = world_local_z;
+    world_local_pos@f3 = world_local_pos;
+  }
+
+  hlsl(vs)
+  {
+    float4 example_vs(float4 pos: POSITION0)
+    {
+      // using global constants in hlsl
+      float3 worldPos = float3(pos.x * world_local_x + pos.y * world_local_y + pos.z * world_local_z + world_local_pos);
+      return mulPointTm(worldPos, viewprojtm);
+    }
+  }
+
+}
+
+
+
+

Warning

+

Matrix constants globtm, projtm, viewprojtm are only available for (vs) preshader.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/intrinsics.html b/api-references/dagor-dshl/index/intrinsics.html new file mode 100644 index 000000000..c7fccd5dd --- /dev/null +++ b/api-references/dagor-dshl/index/intrinsics.html @@ -0,0 +1,356 @@ + + + + + + + Intrinsics — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Intrinsics

+

Apart from common HLSL functions, DSHL supports special intrinsic functions, +which are handled by the shader compiler.

+
+

Note

+

These functions are evaluated at runtime by the stcode system (unless they are known at compile time), +so they cannot be used outside the Preshader section.

+
+
+

float time_phase(float period, float offset)

+

Computes global time phase (number in range [0, 1)) for specified period and offset.

+

Returns frac((shadersGlobalTime + offset) / period) or shadersGlobalTime in case period == 0, +where shadersGlobalTime is just the time from the start of the game (in seconds).

+
(ps) { current_time@f1 = time_phase(0, 0); }
+
+
+
+
+

float sin(float x)

+

Computes sin function.

+
(ps) { foo@f1 = sin(3.14); }
+
+
+
+
+

float cos(float x)

+

Computes cos function.

+
(ps) { foo@f1 = cos(3.14); }
+
+
+
+
+

float pow(float x, float y)

+

Raises x to the power of y.

+
(ps) { foo@f1 = pow(1.2, 3.4); }
+
+
+
+
+

float4 vecpow(float4 v, float a)

+

Raises each component of vector v to the power of a.

+
local float4 v = (1, 2, 3, 4);
+local float a = 3.33;
+(ps) { foo@f1 = vecpow(v, a); }
+
+
+
+
+

float sqrt(float x)

+

Computes the square root of x.

+
(ps) { foo@f1 = sqrt(1.3); }
+
+
+
+
+

float min(float x, float y)

+

Finds the minimum of two values.

+
(ps) { foo@f1 = min(-1, 1); }
+
+
+
+
+

float max(float x, float y)

+

Finds the maximum of two values.

+
(ps) { foo@f1 = max(-1, 1); }
+
+
+
+
+

float fsel(float a, float b, float c)

+

Returns (a >= 0.0f) ? b : c

+
(ps) { foo@f1 = fsel(1, 2, 3); }
+
+
+
+
+

float4 sRGBread(float4 v)

+

Raises RGB components of v to the power of 2.2.

+

Returns float4(pow(v.r, 2.2f), pow(v.g, 2.2f), pow(v.b, 2.2f), v.a)

+
(ps) { srgb_color@f3 = sRGBread(some_color); }
+// alpha will be discarded when casting to float3
+
+
+
+
+

float4 get_dimensions(texture t, int mip)

+

Fetches texture t information on mip level mip.

+

Returns float4(width, height, depth_or_array_slices, mip_levels).

+

depth_or_array_slices stores depth for volumetric textures or number of array slices for texture arrays.

+

For cube textures, depth_or_array_slices = 1.

+
texture ssao_tex;
+(ps) { ssao_size@f4 = get_dimensions(ssao_tex, 0); }
+
+
+
+
+

float get_size(buffer b)

+

Fetches the size of buffer b in elements.

+

Returns float(buffer_size_in_elements).

+
buffer some_buf;
+(ps) { buf_size@f1 = get_size(some_buf); }
+
+
+
+

Warning

+

get_size of (RW)ByteAddressBuffer will return the number of DWORDs (4 byte chunks) in a buffer. +This is contrary to (RW)ByteAddressBuffer::GetDimensions pure HLSL function, which returns the number of bytes.

+
+
+
+

float4 get_viewport()

+

Fetches viewport information.

+

Returns float4(top_left_x, top_left_y, width, height).

+
(ps) { viewport@f4 = get_viewport(); }
+
+
+
+
+

int exists_tex(texture t)

+

At runtime, checks if the texture t exists (is bound to the shader from C++ side). +You can think of it as a run time equivalent of t != NULL preshader check. +Return value can be saved to a variable and used for uniform HLSL branching.

+

Usage:

+
texture example_texture;
+
+(ps) {
+  example_texture@tex2d = example_texture;
+  example_texture_exists@i1 = exists_tex(example_texture);
+}
+
+hlsl(ps) {
+  if (example_texture_exists) { /* ... */ }
+}
+
+
+

Returns 1 if texture exists, 0 otherwise.

+
+
+

int exists_buf(buffer b)

+

Similar to exists_tex. +At runtime, checks if the buffer b exists (is bound to the shader from C++ side). +You can think of it as a run time equivalent of b != NULL preshader check. +Return value can be saved to a variable and used for uniform HLSL branching.

+

Usage:

+
buffer example_buffer;
+
+(ps) {
+  example_buffer@buf = example_buffer hlsl {
+    StructuredBuffer<float> example_buffer@buf;
+  };
+  example_buffer_exists@i1 = exists_buf(example_buffer);
+}
+
+hlsl(ps) {
+  if (example_buffer_exists) { /* ... */ }
+}
+
+
+

Returns 1 if buffer exists, 0 otherwise.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/introduction.html b/api-references/dagor-dshl/index/introduction.html new file mode 100644 index 000000000..45074e558 --- /dev/null +++ b/api-references/dagor-dshl/index/introduction.html @@ -0,0 +1,182 @@ + + + + + + + Introduction — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Introduction

+

Dagor Shading Language (.dshl) files are used to create data driven pre-shaders for easy C++ to HLSL data piping and permutations (pins). +The actual front end of shaders themselves is HLSL, and ‘pure’ HLSL functions can be found in .hlsl files or within hlsl { } blocks in .dshl files.

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/keywords.html b/api-references/dagor-dshl/index/keywords.html new file mode 100644 index 000000000..fd793be85 --- /dev/null +++ b/api-references/dagor-dshl/index/keywords.html @@ -0,0 +1,414 @@ + + + + + + + Keywords — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Keywords

+

This page categorizes all keywords there are in DSHL and provides references to their description.

+
+

Data types

+

Data types and variables

+
    +
  • float

  • +
  • float1

  • +
  • int

  • +
  • bool

  • +
  • float2

  • +
  • half2

  • +
  • short2

  • +
  • float3

  • +
  • int4

  • +
  • float4

  • +
  • short4

  • +
  • half4

  • +
  • float4x4

  • +
  • texture

  • +
  • buffer

  • +
  • const_buffer

  • +
+
+
+

Channels

+

Channels

+
    +
  • color8

  • +
  • ubyte4

  • +
  • short2n

  • +
  • short4n

  • +
  • ushort2n

  • +
  • ushort4n

  • +
  • udec3

  • +
  • dec3n

  • +
  • extra

  • +
  • vcol

  • +
  • pos

  • +
  • norm

  • +
  • tc

  • +
  • lightmap

  • +
  • bounding_pack

  • +
  • signed_pack

  • +
  • unsigned_pack

  • +
  • mul_1k

  • +
  • mul_2k

  • +
  • mul_4k

  • +
  • mul_8k

  • +
  • mul_16k

  • +
  • mul_32767

  • +
+
+
+

Conditionals and booleans

+

Conditionals

+
    +
  • if

  • +
  • else

  • +
  • false

  • +
  • true

  • +
  • none

  • +
  • NULL

  • +
  • maybe

  • +
+
+
+

Data types modifiers

+

Data types and variables

+
    +
  • always_referenced

  • +
  • no_warnings

  • +
  • channel

  • +
  • dynamic

  • +
  • static

  • +
  • const

  • +
  • local

  • +
  • global

  • +
+
+
+

Materials

+

Materials

+
    +
  • material

  • +
  • texture

  • +
  • diffuse

  • +
  • emissive

  • +
  • specular

  • +
  • two_sided

  • +
  • real_two_sided

  • +
  • render_stage

  • +
  • render_trans

  • +
+
+
+

Hardware

+

Hardware defines

+
    +
  • hardware

  • +
  • vulkan

  • +
  • metal

  • +
  • metaliOS

  • +
  • pc

  • +
  • dx11

  • +
  • dx12

  • +
  • xbox

  • +
  • scarlett

  • +
  • ps4

  • +
  • ps5

  • +
  • fsh_4_0

  • +
  • fsh_5_0

  • +
  • fsh_6_0

  • +
  • fsh_6_6

  • +
  • bindless

  • +
+
+
+

Macros

+

Macros

+
    +
  • define_macro_if_not_defined

  • +
  • macro

  • +
  • endmacro

  • +
+
+
+

Intervals

+

Intervals

+
    +
  • interval

  • +
  • assume

  • +
  • optional

  • +
+
+
+

Includes

+

Includes

+
    +
  • include

  • +
  • include_optional

  • +
+
+
+

Common directives

+

Common directives

+
    +
  • no_dynstcode

  • +
  • dont_render

  • +
  • no_ablend

  • +
  • error

  • +
+
+
+

Shader blocks

+

Shader blocks

+
    +
  • block

  • +
  • supports

  • +
  • register

  • +
+
+
+

Shaders

+

Shaders

+
    +
  • shader

  • +
  • compile

  • +
+
+
+

Graphics pipeline settings

+

Pipeline state configuration

+
    +
  • z_write

  • +
  • z_test

  • +
  • z_bias

  • +
  • z_func

  • +
  • slope_z_bias

  • +
  • stencil

  • +
  • stencil_func

  • +
  • stencil_ref

  • +
  • stencil_pass

  • +
  • stencil_fail

  • +
  • stencil_zfail

  • +
  • blend_asrc

  • +
  • blend_adst

  • +
  • blend_src

  • +
  • blend_dst

  • +
  • cull_mode

  • +
  • alpha_to_coverage

  • +
  • color_write

  • +
  • view_instances

  • +
+
+
+

Global constants

+

Global constants

+
    +
  • globtm

  • +
  • projtm

  • +
  • viewprojtm

  • +
  • local_view_x

  • +
  • local_view_y

  • +
  • local_view_z

  • +
  • local_view_pos

  • +
  • world_local_x

  • +
  • world_local_y

  • +
  • world_local_z

  • +
  • world_local_pos

  • +
+
+
+

Still uncategorized

+
    +
  • immediate_dword_count

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/materials.html b/api-references/dagor-dshl/index/materials.html new file mode 100644 index 000000000..7734dde86 --- /dev/null +++ b/api-references/dagor-dshl/index/materials.html @@ -0,0 +1,296 @@ + + + + + + + Materials — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Materials

+

Material is a combination of a shader and resources (diffuse, normals, other parameters).

+

Often multiple assets share the same shader, but need to have different textures and properties. +In this case, each asset will have its own material instance with its specific resources.

+

DSHL has a way to access these textures in shaders in a general, non asset-specific way.

+
+

Textures

+

Textures can be referenced by using material keyword.

+

You, as a shader creator, specify how many material.texture[..] slots a shader must have just by referencing these slots in code. +Then, after shader compilation, referenced texture slots will appear in the shader bindump. +For instance, if you choose your shader in Asset Viewer material editor, these slots will be visible and you will be able to assign them the intended textures.

+

Usage example:

+
shader materials_example
+{
+  texture diffuse = material.texture.diffuse;
+  texture normal = material.texture[1];
+  // that's it, material texture channels are now defined
+  // and can be seen in asset viewer
+
+  (ps)
+  {
+    diffuse_tex@static = diffuse;
+    normal_tex@static = normal;
+  }
+  // now these textures are accessible in hlsl{} blocks
+}
+
+
+
+

Note

+

material.texture.diffuse is equivalent to material.texture[0]

+
+
+
+

Parameters

+

In addition to textures, materials can also contain arbitrary parameters. +You declare these parameters as local variables in a shader using static or dynamic keyword, check Local variables to know the difference. +It is good practice to initialize them with some meaningful default value.

+

Similar to textures, these parameters will be saved to the shader bindump and will be available for editing in Asset Viewer once you recompile the shader.

+
static float some_parameter = 1.5;
+dynamic float4 another_parameter = (1, 2, 3, 4);
+
+(ps)
+{
+  some_parameter@f1 = some_parameter;
+  another_parameter@f4 = another_parameter;
+}
+
+
+
+

Warning

+

Do not use dynamic parameters without the need as it introduces more overhead. See Local variables for more info.

+
+
+
+

Two sided rendering

+

There are two special material parameters available in DSHL: two_sided and real_two_sided, which are +present in every material by default and can be set in Asset Viewer.

+

These parameters act as booleans in DSHL: +you can do conditional statements Conditionals on them (which will result in creation of shader variants).

+
if (two_sided)
+{
+  cull_mode = none;
+}
+
+
+

two_sided is a hint that each triangle of this material should be rendered from both sides, +so culling should be disabled for this shader (which is done in the example).

+

real_two_sided is a hint that a special mesh will be used for rendering with this shader: +each triangle will be duplicated and flipped, so both sides of the mesh get to be rendered. +Note that it is not necessary to disable culling in this case as we have a real two-sided mesh (hence the name).

+
+
+

render_stage directive

+

Render stage can be specified for a shader using render_stage <stage_name>.

+
shader materials_example
+{
+  render_stage opaque;
+  // ...
+}
+
+
+

It is used to distinguish between different materials in the ShaderMesh class +(which can contain many materials and meshes), based on the render stage.

+

For example, you can call ShaderMesh::getElems(STG_opaque) to get all materials from a ShaderMesh, which have render_stage opaque specified in their DSHL shaders. +This can be useful if you want your materials to be drawn in a specific order.

+

Available stages:

+
    +
  • opaque – opaque

  • +
  • atest – alpha test

  • +
  • imm_decal – immediate decals

  • +
  • decal – decals

  • +
  • trans – transparent

  • +
  • distortion – distortion

  • +
+

There is also a render_trans legacy alias for render_stage trans.

+

Color write mask

+

It is possible to use static int material parameter for a color mask Color write mask. +Notice that you are specifiyng the mask for all render targets at once.

+
static int writemask = 1904; // = (0b0111 << 4) | (0b0111 << 8)
+// where 0b0111 is a bitmask for RGB
+color_write = static writemask;
+
+// writemask of 1904 is equivalent to
+// color_write[0] = rgb;
+// color_write[1] = rgb;
+
+
+

This example sets the color write mask of render targets 1 and 2 to rgb (if you are using the default value of writemask material parameter). +Other render targets will have a mask of 0b0000, meaning nothing will be drawn to them.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/pipeline-states.html b/api-references/dagor-dshl/index/pipeline-states.html new file mode 100644 index 000000000..b865c1d80 --- /dev/null +++ b/api-references/dagor-dshl/index/pipeline-states.html @@ -0,0 +1,430 @@ + + + + + + + Pipeline state configuration — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Pipeline state configuration

+

DSHL has some state variables that are used for configuring fixed pipeline stages (blending, depth/stencil testing, etc.). +You can optionally define them inside a shader.

+
+

Blending

+

Blending settings can be configured in DSHL shader using the following syntax:

+
blend_target = blend_factor;
+
+
+

where blend_target is one of these state variables

+
    +
  • blend_src – blend source

  • +
  • blend_dst – blend destination

  • +
  • blend_asrc – blend alpha source

  • +
  • blend_adst – blend alpha destination

  • +
+

and blend_factor is one of these keywords:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Keyword

Description

RGB Blend Factor

Alpha Blend Factor

zero or 0

Zero

(0, 0, 0)

0

one or 1

One

(1, 1, 1)

1

sc

Source Color

(R_s, G_s, B_s)

A_s

isc

Inverse Source Color

(1 - R_s, 1 - G_s, 1 - B_s)

1 - A_s

sa

Source Alpha

(A_s, A_s, A_s)

A_s

isa

Inverse Source Alpha

(1 - A_s, 1 - A_s, 1 - A_s)

1 - A_s

dc

Destination Color

(R_d, G_d, B_d)

A_d

idc

Inverse Destination Color

(1 - R_d, 1 - G_d, 1 - B_d)

1 - A_d

da

Destination Alpha

(A_d, A_d, A_d)

A_d

ida

Inverse Destination Alpha

(1 - A_d, 1 - A_d, 1 - A_d)

1 - A_d

sasat

Source Alpha Saturation

(f, f, f); f = min(A_s, 1 - A_d)

1

bf

Blend Constant

(R_c, G_c, B_c)

A_c

ibf

Inverse Blend Constant

(1 - R_c, 1 - G_c, 1 - B_c)

1 - A_c

+

where

+
    +
  • (R_s, G_s, B_s) and A_s represent R, G, B, A components of the source (new value which shader just produced)

  • +
  • (R_d, G_d, B_d) and A_d represent R, G, B, A components of the destination (old value in the current render target)

  • +
  • (R_c, G_c, B_c) and A_c represent configurable blend constants

  • +
+

Blending is performed using the following pseudocode:

+
if (blendEnable) {
+  finalColor.rgb = (srcColorBlendFactor * srcColor.rgb) <colorBlendOp> (dstColorBlendFactor * dstColor.rgb);
+  finalColor.a = (srcAlphaBlendFactor * srcColor.a) <alphaBlendOp> (dstAlphaBlendFactor * dstCoilor.a);
+} else {
+    finalColor = srcColor;
+}
+
+finalColor = finalColor & colorWriteMask;
+
+
+

Example:

+
blend_src = sa; blend_dst = 1;
+blend_asrc = sa; blend_adst = 1;
+
+
+
+

Warning

+

Blending operations (as well as blending constants for bf and ibf blending modes) need to be configured in C++ code.

+
+

If you don’t configure blending factors in the shader, these defaults will be used:

+
blend_src = 1; blend_dst = 0;
+blend_asrc = 1; blend_adst = 0;
+
+
+

Independent blending

+

Dagor supports independent blending, i.e. different render targets may have different blending settings. +This is done by providing an index to blend_src, blend_dst, blend_asrc, blend_adst variables with [] operator.

+
blend_src[0] = 1; blend_dst[0] = 0;
+blend_src[1] = 0; blend_dst[1] = 1;
+
+
+

Without an index, the desired blend factor affects all render targets.

+
+
+

Depth/Stencil

+

Depth and stencil tests can also be configured in DSHL using similar syntax.

+

Depth state variables

+

z_write – enables/disables writing to depth buffer. Valid values: true / false. Default value: true.

+

z_test – enables/disables depth testing. Valid values: true / false. Default value: true.

+

z_func – specifies comparison function for depth testing. Valid values:

+
    +
  • equal evaluates to \(\text{reference} = \text{test}\)

  • +
  • notequal evaluates to \(\text{reference} \neq \text{test}\)

  • +
  • always always evaluates to true

  • +
+

Default value is GREATER_OR_EQUAL (evaluates to \(\text{reference} \geq \text{test}\)). +Note that this value cannot be set explicitly, as it is the default behavior, +because Dagor follows the convention that closer objects have more depth value.

+

Example:

+
z_write = false;
+z_test = true;
+z_func = always;
+
+
+

Stencil state variables

+

stencil – enables/disables stencil test. Valid values: true / false. Default value: false.

+

stencil_func – specifies comparison function for stencil testing. Valid values:

+
    +
  • never always evaluates to false

  • +
  • less evaluates to \(\text{reference} < \text{test}\)

  • +
  • equal evaluates to \(\text{reference} = \text{test}\)

  • +
  • lessequal evaluates to \(\text{reference} \leq \text{test}\)

  • +
  • greater evaluates to \(\text{reference} > \text{test}\)

  • +
  • notequal evaluates to \(\text{reference} \neq \text{test}\)

  • +
  • greaterequal evaluates to \(\text{reference} \geq \text{test}\)

  • +
  • always always evaluates to true

  • +
+

stencil_ref – specifies reference value for the stencil test. Valid values: int, clamped to [0, 255] range.

+

stencil_pass – specifies the action performed on samples that pass both stencil and depth tests.

+

stencil_fail – specifies the action performed on samples that fail the stencil test.

+

stencil_zfail – specifies the action performed on samples that pass the stencil test and fail the depth test.

+

Valid actions:

+
    +
  • keep – keeps the current value.

  • +
  • zero – sets the value to 0.

  • +
  • replace – sets the value to reference stencil_ref value

  • +
  • incrsat – increments the current value and clamps to [0, 255]

  • +
  • decrsat – decrements the current value and clamps to [0, 255]

  • +
  • incr – increments the current value and wraps to 0 when the maximum value would have been exceeded.

  • +
  • decr – decrements the current value and wraps to 255 the maximum possible value when the value would go below 0.

  • +
+

Example:

+
stencil = true;
+stencil_func = always;
+stencil_pass = replace;
+stencil_ref = 255;
+stencil_zfail = keep;
+stencil_fail = keep;
+
+
+
+
+

Culling

+

cull_mode specifies culling mode.

+
    +
  • ccw – counterclockwise.

  • +
  • cw – clockwise.

  • +
  • none – no culling is done.

  • +
+

Default value is ccw.

+

Example:

+
cull_mode = cw;
+
+
+
+
+

Alpha to coverage

+

Alpha to coverage (A2C) maps the alpha output value from a pixel shader +to the coverage mask of MSAA. +This feature might be helpful for smoothing out the edges of alpha-tested texture (e.g. vegetation).

+

For example, with 4x MSAA and A2C enabled, if the output alpha of a pixel is 0.5, +only 2 of the 4 coverage samples will store the color.

+

Can be toggled by setting alpha_to_coverage to true / false.

+
+
+

View instancing

+

View instancing feature allows a shader to be run multiple times in a single draw call to draw different view instances. +The SV_ViewID semantic is provided to the shader which defines the index of the view instance. +This feature is supported only on DX12 and enforces Shader Model 6.1 compilation.

+

Maximum number of view instances is defined by MAX_VIEW_INSTANCES = 4. +For example, using view instancing, you can capture a cube shadow map for a point light in 2 render passes with 3 view instances per pass.

+

Valid syntax is view_instances = 1..4.

+

view_instances = 1 means one instance (which is the default case).

+
+
+

Color write mask

+

Color write mask can be configured with color_write state variable. +You can set the mask via RGBA swizzle or by an int number (in [0, 15] range). +So r = 0b0001, g = 0b0010, b = 0b0100, a = 0b1000.

+

For example,

+
color_write = rg;
+// color_write = 3 is the same
+// 3 = 0b0011 = rg
+
+
+

Color mask supports multiple render targets, i.e. for each render target the mask can be different. +You can use [] operator to specify the mask for the specific render target.

+
color_write = true; // sets RGBA for all RT
+color_write[1] = rg; // sets RG for RT[1]
+
+
+

By default, color mask is RGBA for all render targets.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-dshl/index/shaders.html b/api-references/dagor-dshl/index/shaders.html new file mode 100644 index 000000000..0bc739fd1 --- /dev/null +++ b/api-references/dagor-dshl/index/shaders.html @@ -0,0 +1,666 @@ + + + + + + + Shaders — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Shaders

+

Dagor Shading Language acts as a preprocessor/compiler for pure HLSL shaders. In DSHL, we can bind resources +for HLSL shaders, configure fixed shader stages (culling, Z test, …) and more. +Pure HLSL code needs to be contained within hlsl{...} blocks.

+
+

Defining and compiling shaders

+

Let’s look at a simple DSHL shader example:

+
shader simple_shader
+{
+  // this is the description of vertex buffer expected for the vertex shader
+  channel float3 pos=pos; // position
+  channel float3 vcol=vcol; // vertex color
+
+  hlsl {
+    struct VsInput
+    {
+      float3 pos: POSITION0;
+      float3 color: COLOR0;
+    };
+
+    struct VsOutput
+    {
+      float4 pos : SV_POSITION;
+      float3 color : COLOR0;
+    };
+
+    VsOutput test_vertex(VsInput input)
+    {
+      VsOutput ret;
+      ret.pos = float4(input.pos, 1.0);
+      ret.color = input.color;
+
+      return ret;
+    }
+
+    float4 test_pixel(VsOutput input) : SV_Target0
+    {
+      return float4(input.color.rgb, 1.0);
+    }
+  }
+  compile("target_vs", "test_vertex");
+  compile("target_ps", "test_pixel");
+}
+
+
+

Here, shader (name) defines the actual name that the shader will have after its compilation into pure HLSL.

+

Channels pos and vcol describe the vertex buffer data that the vertex shaders expects to recieve. +DSHL preshader creates appropriate layout for the C++ code based on these channel variables. See Channels for more info.

+

After defining the shader in the hlsl block, you need to specify its entry point via compile("target_(stage)", "entry_function"), where the +entry_function should be the name of the respective shader function in the hlsl block and stage defines one of the following shader stages:

+
    +
  • target_vs (vertex shader)

  • +
  • target_hs (hull shader)

  • +
  • target_ds (domain shader)

  • +
  • target_gs (geometry shader)

  • +
  • target_ps (pixel shader)

  • +
  • target_cs (compute shader)

  • +
  • target_ms (mesh shader)

  • +
  • target_as (amplification shader)

  • +
  • target_vs_for_gs (if vertex shader is used together with geometry shader on PS4/PS5, vertex shader must be compiled differently)

  • +
  • target_vs_for_tess (if vertex shader is used together with tesselation shader on PS4/PS5, vertex shader must be compiled differently)

  • +
  • target_vs_half (vertex shader with half type)

  • +
  • target_ps_half (pixel shader with half type)

  • +
+

You can also specify to which specific shader stage will the code from hlsl block go by specifying the shader stage in the parentheses, e.g. hlsl(stage) {...} +Available shaders are: ps, vs, cs, ds, hs, gs, ms, as. If you omit the specification, the code from hlsl{...} block will be +sent to all of these shaders.

+
+
+

Preshader

+

In addition to declaring just the shader code itself, DSHL allows you to declare a pre-shader, +which is a script that allows you to easily pipe data from C++ to the shader.

+

The most common use case for this piping are various bindings of textures and buffers: +instead of doing the classical dance of “pick the slot, set the texture to the slot, remember not to mess up and use the same slot twice”, +you can bind variables to a shader through a global string to DSHL data type map called shader variables. +This map is in a 1-to-1 correspondence with the global DSHL variables you define in .dshl files Global variables, and is RW.

+

So you can, for example, both read an int defined inside a shader from C++, and set a texture to a global texture variable defined inside a shader. +On the C++ side, you simply fill in this map using set_texture, and on the shader side, you ask the preshader system to grab a certain shader +variable and set it to an HLSL variable. The syntax is as follows:

+
(shader_stage) {
+  hlsl_variable_name @type_suffix = variable|expression [hlsl {/*hlsl text*/}]
+}
+
+
+

This code is then compiled by our shader compiler into a sequence of simple interpreted commands, +which are stored in the shader dump and executed before running a shader.

+

Acceptable shader stages:

+
    +
  • cs – Compute Shader

  • +
  • ps – Pixel Shader

  • +
  • vs – Vertex Shader

  • +
  • ms – Mesh Shader

  • +
+

Acceptable types:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Postfix

Type

@f1

float

@f2

float2

@f3

float3

@f4

float4

@f44

float4x4

@i1

int

@i2

int2

@i3

int3

@i4

int4

@u1

uint

@u2

uint2

@u3

uint3

@u4

uint4

@tex

Texture

@tex2d

Texture2D

@tex3d

Texture3D

@texArray

Texture2DArray

@texCube

TextureCube

@texCubeArray

TextureCubeArray

@uav

Unordered Access View flag

@smp

Texture with SamplerState

@smp2d

Texture2D with SamplerState

@smp3d

Texture3D with SamplerState

@smpArray

Texture2DArray with SamplerState

@smpCube

TextureCube with SamplerState

@smpCubeArray

TextureCubeArray with SamplerState

@shd

Texture2D with SamplerComparisonState

@shdArray

Texture2DArray with SamplerComparisonState

@buf

Buffer/StructuredBuffer

@cbuf

ConstantBuffer

@static

Material Texture2D with SamplerState

@staticCube

Material TextureCube with SamplerState

@staticTexArray

Material Texture2DArray with SamplerState

@tlas

Top-level acceleration structure (RT)

+
+

Note

+

All variables declared in (vs) stage are also visible for hlsl(<gs, hs, ds>){...} blocks. +All variables declared in (ms) stage are also visible for hlsl(as){...} block.

+
+
+

Examples

+

Let’s create float4x4 matrix:

+
(ps) { globtm_psf@f44 = { globtm_psf_0, globtm_psf_1, globtm_psf_2, globtm_psf_3 }; }
+
+
+

Here, the HLSL variable of globtm_psf will be initialized by the preshader with the values of globtm_psf_0..3, +which are all float4 types, stored inside the global shader variable map. +It is the C++ code’s responsibility to call

+
set_color4(get_shader_variable_id("get_globtm_psf_X"), Point4(...));
+
+
+

for X=0..3 to fill the rows with adequate values. Yes, the color4 name is very unfortunate.

+

For (vs) block there is a built-in globtm shader variable available. You can declare HLSL globtm directly from it:

+
(ps) { globtm@f44 = globtm; }
+
+
+

You can also operate on arrays

+
(ps) { my_arr@type[] = {element1, element2, ..., elementN}; }
+
+
+
+
+

Textures and samplers

+

Default float4 HLSL textures are defined via @tex2d, @tex3d, @texArray, @texCube, @texCubeArray postfixes. +For example, this code

+
(ps) {
+  hlsl_texture@tex2d = some_texture;
+  hlsl_texarray@texArray = some_texarray;
+}
+
+
+

will be compiled to

+
Texture2D hlsl_texture: register(t16);
+Texture2D hlsl_texarray: register(t17);
+// registers are automatically chosen by the compiler
+
+
+

Postfixes @smp2d, @smp3d, @smpArray, @smpCube, @smpCubeArray ensure that a SamplerState object gets defined with texture/textures, +assigned to the same register number.

+

For @shd, @shdArray postfixes, a SamplerComparisonState object also gets defined in addition to SamplerState +(shd stands for shadow, as these textures are often used for shadows).

+

For example, this code

+
(ps) {
+  hlsl_texture@smp2d = some_texture;
+  hlsl_texarray@smpArray = some_texarray;
+  hlsl_shdtexture@shd = some_shdtexture;
+}
+
+
+

will be compiled to

+
SamplerState hlsl_texture_samplerstate: register(s0);
+SamplerState hlsl_texarray_samplerstate: register(s1);
+SamplerState hlsl_shdtexture_samplerstate: register(s2);
+
+SamplerComparisonState hlsl_shdtexture_cmpSampler:register(s2);
+
+Texture2D hlsl_texture: register(t0);
+Texture2DArray hlsl_texarray: register(t1);
+Texture2D hlsl_shdtexture: register(t2);
+
+
+

Note that you can use <texture_name>_samplerstate or <texture_name>_cmpSampler, generated by the shader compiler, in hlsl{...} blocks +(e.g. hlsl_shdtexture_cmpSampler from the example).

+

Postfixes @tex and @smp define a texture of a specific type and must be followed by hlsl{...} block +(which defines the texture type).

+
(ps) {
+  // textures without samplers
+  uint_texture@tex = uint_texture hlsl { Texture2D<uint> uint_texture@tex; }
+  float_texarray@tex = float_texarray hlsl { Texture2DArray<float> float_texarray@tex; }
+
+  // textures with samplers
+  uint_texture@smp = uint_texture hlsl { Texture2D<uint> uint_texture@smp; }
+  float_texarray@smp = float_texarray hlsl { Texture2DArray<float> float_texarray@smp; }
+}
+
+
+
+
+

Material textures

+

Textures bound to a material (diffuse, normals, etc.) are called material textures. +In preshader, these textures must be treated differently than global or dynamic textures, +using @static, @staticCube, @staticTexArray postfixes.

+
shader example_shader
+{
+  texture diffuse_tex = material.texture.diffuse;
+  texture normal_tex = material.texture[1];
+  texture cube_tex = material.texture[2];
+  texture some_texarray = material.texture[3];
+
+  (ps) {
+    diffuse_tex@static = diffuse_tex;
+    normal_tex@static = normal_tex;
+    cube_tex@staticCube = cube_tex;
+    some_texarray@staticTexArray = some_texarray;
+  }
+}
+
+
+

Material textures are automatically used as bindless textures if you are compiling for DX12; +bindless is also supported for Vulkan and PlayStation (with special -enableBindless:on compiler flag).

+

Inside HLSL blocks, material textures should be referenced by their getters get_<texture_name>(), +instead of their names:

+
hlsl(ps) {
+  float4 albedo = tex2DBindless(get_diffuse_tex(), input.diffuseTexCoord.uv);
+}
+
+
+
+

Note

+

Even if bindless textures feature is disabled, the aformentioned syntax still applies.

+
+

In case when bindless textures are used, MaterialProperties constant buffer will be filled with uint2 +indices of such textures (first component indexes the texture, second component indexes the sampler).

+

These indices are then used to retrieve the corresponding texture and sampler from static_textures[] and static_samplers[] arrays.

+

This is what get_<texture_name>() essentialy does for you.

+
+
+

Buffers

+

Buffer and ConstantBuffer declarations must be followed with hlsl{...} block. For example

+
(ps) {
+  some@buf = my_buffer hlsl {
+    #include <myStruct.h>
+    StructuredBuffer<MyStruct> some@buf;
+  }
+}
+
+(ps) {
+  my_buf@cbuf = my_const_buffer hlsl {
+    #include <myStruct.h>
+    cbuffer my_buf@cbuf
+    {
+      MyStruct data;
+    };
+  }
+}
+
+
+
+
+

Hardcoded registers

+

You can bind any resource to a hardcoded register, while all auto resources will not overlap with it. +Also, the always_referenced keyword is not required, the integer variable will be saved in the dump and will be readable on the CPU side.

+
int reg_no = 3;
+
+shader sh {
+  (ps) {
+    foo_vec@f4 : register(reg_no);
+    foo_tex@smp2d : register(reg_no);
+    foo_buf@buf : register(reg_no) hlsl { StructuredBuffer<uint> foo_buf@buf; };
+    foo_uav@uav : register(reg_no) hlsl { RWStructuredBuffer<uint> foo_uav@uav; };
+  }
+}
+
+
+

Register number must be declared as a global int variable.

+
+

Note

+

With this method of declaring a resource, no stcode will be generated.

+
+
+
+

Unordered Access View

+

Unordered Access View @uav postfix provides a hint for the shader compiler that the resource should be bound to the appropriate u register. +Note that such declaration must be followed with the hlsl{...} block to define the actual type of the UAV resource.

+
buffer some_buffer;
+texture some_texture;
+
+shader some_shader {
+  (cs) {
+    hlsl_buffer@uav = some_buffer hlsl {
+      RWStructuredBuffer<uint> hlsl_buffer@uav;
+    }
+    hlsl_texture@uav = some_texture hlsl {
+      RWTexture2D<float4> hlsl_texture@uav;
+    }
+  }
+  // ...
+}
+
+
+
+
+

Top-level Acceleration Structure

+

For raytracing purposes, you can also declare a TLAS (top-level acceleration structure) like this:

+
tlas some_tlas;
+
+shader some_shader {
+  (cs) {
+    hlsl_tlas@tlas = some_tlas;
+  }
+  // ...
+}
+
+
+

In HLSL terms, hlsl_tlas will have the type RaytracingAccelerationStructure.

+
+
+
+

Shader blocks

+

Shader Blocks are an extension of the Preshader idea and define variables/constants which are common for multiple shaders that support them. +The intent is to optimize constant/texture switching. +For example:

+
float4 world_view_pos;
+
+block(global_const|frame|scene|object) name_of_block
+{
+  (ps) { world_view_pos@f3 = world_view_pos; }
+  (vs) { world_view_pos@f3 = world_view_pos; }
+}
+
+
+

Note that a block, just like a shader, defines a preshader script. +This is basically the main gist of why blocks are useful: +they allow you to extract a part of a preshader common to multiple shaders and execute it once when setting the block, not every time a shader is executed. +In this example, world_view_pos would be visible within pixel and vertex shader in each shader that supports this block.

+
+

Shader block layers

+

Specifier in block(...) parentheses is called a layer. It indicates how often the values inside the block are supposed to change. +Available layers are:

+
    +
  • global_const (for global constants, supposed to change rarely)

  • +
  • frame (for shader variables that are supposed to change once per frame)

  • +
  • scene (for shader variables that are supposed to change when the rendering mode changes, within one frame)

  • +
  • object (for shader variables that are supposed to change for each object)

  • +
+
+

Warning

+

Per-object blocks are evil and should be avoided at all costs. +They imply a draw-call-per-object model, which has historically proven itself antagonistic to performance.

+
+

Rendering modes mentioned in the frame layer are defined by the user and can be specific for each shader. +For example, there are 4 scene blocks in rendinst_opaque_inc.dshl shader, that are switched throughout the rendering of a single frame:

+
    +
  • rendinst_scene for color pass

  • +
  • rendinst_depth_scene for depth pass

  • +
  • rendinst_grassify_scene for grassify pass

  • +
  • rendinst_voxelize_scene for voxelization pass

  • +
+
+
+

Using shader blocks in shaders

+

Syntax for using such blocks in shaders is as follows:

+
shader shader_name
+{
+  supports some_block;
+  supports some_other_block;
+
+  hlsl(ps) {
+    // assuming world_view_pos was defined in one of these blocks
+    float3 multiplied_world_pos = 2.0 * world_view_pos;
+    ...
+  }
+}
+
+
+

With the support of multiple blocks you can use only variables from intersection of these blocks.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-ecs/dagor_ecs.html b/api-references/dagor-ecs/dagor_ecs.html new file mode 100644 index 000000000..00791bdd0 --- /dev/null +++ b/api-references/dagor-ecs/dagor_ecs.html @@ -0,0 +1,727 @@ + + + + + + + Dagor ECS — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Dagor ECS

+
+

Basic concepts

+

Entity: An entity is a set of components created based on a template using +an initializer (a data set) for each component. It is important to note that an +entity is not a container; components are not stored “within” it.

+

EntityId: This is the identifier for an entity, acting as a weak reference +with a limited number of reuse cycles (generation).

+

Component: Essentially, a component is a pure data class without any code +and behaviour description, which is instead contained in ECS systems. While +components can be written in an Object-Oriented Programming (OOP) style, like +legacy (e.g., C with classes but without polymorphism), the methods should only +be invoked from ECS systems that receive components of the same type as +parameter. Components may include a copy constructor, comparison operator or/and +assignment operator, but at a minimum, they must have a constructor and +destructor, with additional elements necessary for serialization and tracking of +changes.

+

Templates: The only way to create an entity is to specify a fully data-driven +template, which lists all the components of the entity (they might be assigned +to some default values). An optional initializer can be provided to +override these default values within the entity.

+

Archetype: A specific list of components defines an archetype. All +components of entities sharing the same archetype are stored optimally in memory +(Structs of Arrays, SoA). Multiple templates can correspond to the same +archetype. Direct interaction with archetypes is not possiblle, as they are +framework entities, but it is useful to understand which archetype your template +corresponds to.

+

ComponentTypeManager: This object manages the lifecycle (i.e., creation and +destruction) of non-PoD (Plain old Data) types, such as visual_effect, +animchar, human_phys_actor, etc. This is a table of functions, which +implement constructor, destructor, copy-constructor, comparison operator, +assignment operator, move operator, replicateCompare (comparison + assignment). +Only constructor and destructor would be essential. Copy constructor is required +for creating components with an initializer or template with data, but not +required when a template doesn’t contain data (only description is present). +Comparison / assignment operators are required for serialization and tracked +changes. Thus, when serialization and tracking are not needed operators can be +omitted.

+
+

Important

+

In 99.9% cases ComponentTypeManager implementation is not needed. You should +only identify if the specified data type is relocatable or not (i.e. does +anything else contain a pointer to it), and declare it with standard macro +ECS_DECLARE_BOXED_TYPE (or ECS_DECLARE_RELOCATABLE_TYPE). Relocatable type +is faster and ensures better locality. It cannot be used if a data type (e.g. +fixed_vector) stores a pointer to itself (or if size of type is greater than +65536 bytes, which, hopefully, will never happen).

+
+

System: Pure functions, which work with a predefined list of components:

+
    +
  • onUpdate. Pure function that is invoked each frame. Essentially, it is +BroadCast Event Immediate, but it is optimized for the case when there are a lot +of ES listeners of this Event (Stage).

  • +
  • onEvent. Usually works with a specific Entity (the event is sent to a +particular entity). However, there could be BroadCast Events as well. onEvent +receives not only components tuples, but also a typed Event. Event can be +regularly postponed (and, in fact, it will be), but then it will be processed by +all of the relevant systems at once.

  • +
  • performQuery. Pure function, which is invoked inside another function (see +below). Both BroadCast Query and onUpdate are queries + one parameter +(Event/Stage).

  • +
+

ChildComponent: The component that is not a part of Entity. Initializers +(for creation) or “child” components in Object (a table) or Array.

+

Query: A fast and convenient way of getting all necessary entities with +specified attributes (Components). That is to say, a query like Get_All_Humans +or Get_All_Humans_With_Transform. In fact, simple systems perform function on +all Query results for Stage/Event.

+

EntityManager: This represents “the whole world” in the ECS context.

+

Mutation of Entity Archetype: (a change in Entity Components). Archetypes +can only be mutated via reCreateEntity, which allows transitioning to a new +template by adding missing components and removing unnecessary ones from the old +template. If the new template corresponds to the same archetype, the operation +would be empty (no change).

+

Tracked/Replicated: Dagor ECS can automatically track changes and trigger +events and/or replicate objects over a network. To enable this, entity +components need to be marked appropriately in the template. Non-PoD types must +implement comparison and assignment operators.

+

There is an “optimized” variant of replicateCompare(from, to) (by default, +it’s if(!(from == to)) {from = to; return true; } else return false;). If the +data type is rather complicated and large, but all changes in the object of this +type are securely encapsulated via “set” and “get” (mutable), then +generation/hash logic can be used for more optimal comparison. If the generation +hasn’t changed, then data hasn’t changed too. Example: ecs::Objects, +ecs::Array.

+

Replication: Changes are replicated using an “eventually consistent” model, +meaning not all changes will be “visible” to the client in the exact order of +their appearance the server (some could be even missed), but all changes will +eventually be received by the clients. It is done in order to not resend +“obsolete” data, if the packet containing replication has been lost, while +relevant components have been changed.

+
+
+

Characteristics

+
    +
  • Components are Code-Free: Components do not contain any code. They are not +OOP objects, as encapsulation, inheritance, and polymorphism contradict the +principles of ECS (Entity-Component-System). Methods, aside from getters and +mathematical operators, are also not present. (Refer to this +video for more details.)

  • +
  • Systems (onUpdate/onEvent) Are Data-Free: Systems do not store or modify +data, including global or static variables (except for configuration data). +Systems operate exclusively on predefined data registered in advance. If an +Entity lacks the required components, it will not be processed by the System. +Conversely, if it contains the required components, it will be processed.

    +

    However, the System remains unaware of any other components the Entity might +contain and cannot interact with them. An exception exists when working with +components of other Entities, which must be explicitly declared during +registration. The System is responsible for transforming the world from one +consistent state to another and cannot rely on the existence or behavior of +other systems.

    +
  • +
  • Deferred Creation and Destruction of Entities: Entities are created and +destructed in a deferred manner, but no later than the end of the update +cycle.

  • +
  • Deferred onEvent Execution: The execution of onEvent is deferred, with +an unknown number of frames delay.

  • +
  • System (onUpdate) Executes All at Once: All Systems (onUpdate) are +executed simultaneously. The execution order of Systems (before/after) is +specified during ES registration and is subject to topological sorting.

  • +
  • Optimal Memory Storage for Components: Component data is stored in memory +optimally (Structure of Arrays, SoA), except for Boxed components. Boxed +components have optimization in the standard BoxedCreator template, which +allows sequential memory allocation, though fragmentation can still occur.

  • +
  • Complex Systems Using Multiple Jobs/Queries: You can write Systems +consisting of multiple Jobs/Queries. For this, the wrapping System is defined as +accepting no components, and Queries (of any required number and types) are +described within it.

  • +
  • Multiple Invocations of Simple Systems and Queries: Each simple System +(and each Query) can and will be invoked multiple times — once for each data +chunk of every Archetype that meets the requirements.

  • +
  • Parallelism: The execution of any onUpdate or broadcast onEvent can be +parallelized. This can happen per System (executing the code of a single +system across multiple threads, classic SIMD) or by executing multiple Systems +simultaneously.

    +

    Since System(onUpdate)/onEvent explicitly declares which components are +read-only, and which are read-write during registration, the EntityManager can +accurately determine if there will be any Read/Write conflicts for any set of +Systems, allowing parallel execution provided no other ECS-related code is +invoked. However, this parallelism is not yet supported. SIMD execution within +a single system is possible but extremely dangerous and undesirable unless you +fully understand what you are doing.

    +

    In daNetGame-based games this is specified in a query during declaration as

    +
    `template<typename Callable> void animchar_update_ecs_query(Callable ECS_CAN_PARALLEL_FOR(c, 4));
    +
    +
    +

    and for ES as

    +
    void animchar_update_es(const UpdateStageInfo &, EntityId eid, Callable ECS_CAN_PARALLEL_FOR(c, 4));
    +
    +
    +

    or in es_order as

    +
    `es_name {mt{stage_name:i=quant_size;}}
    +
    +
    +

    where +stage_name could be es_act, es_before_render, or others, and +quant_size is the minimum “quantum” of work (i.e., the minimum number of +tuples to be processed). This quantum size depends on the system: the larger +it is, the better (fewer switches), but if the system only needs to process 10 +tuples and the quantum is 10, there will be no parallelism. Generally, a good +quantum size is around “expected number of tuples/16” (so each of 4 threads +gets 4 chunks of work). However, if the work chunks are uneven in terms of +time (animations can be very simple or very complex), it’s better to keep the +quantum small, such as 4 elements.

    +
    +

    Caution

    +

    Do not use parallelism except in a small amount of isolated, slow code.

    +
    +
  • +
  • Deferred onEvent Execution Based on Budget: The execution of any +onEvent can be deferred by an arbitrary number of frames depending on +available resources (“budget”). Unfortunately, the budget is not in +milliseconds (because measuring that is slow) but in Events. Therefore, it is +crucial that a single onEvent does not cause significant delays.

  • +
+
+
+

Working Directly

+
    +
  • Working with Components Directly: Direct manipulation of components is +allowed only under one condition — it must not occur inside +onUpdate/onEvent.

    +

    If it does happen inside onUpdate/onEvent (for example, a trigger zone is +checking whether someone has entered or not), this must be explicitly declared +(via a Query).

    +

    Such a system cannot be parallelized, either entirely (if it +potentially (re)writes to the entire world), with specific other systems (if it +explicitly declares which components it writes to), or it may only be +parallelized within itself (if it reads from the entire world).

    +
  • +
  • Avoid Get/Set: In general, it is advisable to avoid using get/set +methods.

  • +
+
+
+

Entity States

+

When writing network code, especially when dealing with an external Entity Id +(not included in a query/es) through get/set operations (which should be avoided +as much as possible), it is crucial to understand that an entity can exist in +one of four primary states during its lifecycle:

+
    +
  1. Non-Existent: The entity does not exist.

  2. +
  3. Exists but Empty (aka Allocated Handle): The entity exists but does not +have any components. This can occur on the client side when there are +references to the entity, but it has not yet been created by the server.

  4. +
  5. Exists and Empty, but Queued for Loading: The entity exists, is empty, +but is queued for loading. This happens when an entity is created +asynchronously.

  6. +
  7. Exists and Created: The entity exists, and all required components are +present and loaded.

  8. +
+

For each of these states, there is a corresponding check (which may vary +depending on the ECS version but is always present).

+

There are also more exotic states, such as an entity that has been +created/loaded but is missing some components because the entity is a composite +created through recreation (e.g., “base+foo+bar”, where “foo” has not yet been +added).

+

To avoid problems, instead of using get/getRW (which, in dev builds, will +assert in such cases but in release builds will still return a reference to +empty memory), use getNullable/getNullableRW. An entirely empty entity will +return an “empty” template name.

+
+
+

Legacy (OOP)

+

If you have an OOP object that you want to turn into a component, this does not +inherently violate the ECS paradigm. However, all the code (object methods) +should only be invoked within an update.

+

Essentially, this is just about moving shared code for several +onUpdate/onEvent into a common location.

+

However, the recommended approach is to extract such common code into a separate +shared library rather than leaving it as a class method to clearly distance it +from OOP. If the OOP object is polymorphic, this should not be used at all (and +it’s better not to do this).

+
+
+

Difference in Approaches

+

Let’s say you want to create triggers (e.g., something happens when entering a +trigger). Previously, you had a spherical trigger, and now you need a cubic one +as well.

+

OOP Approach:

+
class IShapedTrigger {
+  virtual bool isInside(const Point3 &p) = 0;
+}
+
+class BoxTrigger : public IShapedTrigger {
+  bool isInside(const Point3&) override;
+}
+
+class SphereTrigger : public IShapedTrigger {
+  bool isInside(const Point3&) override;
+}
+
+// Update code:
+IShapedTrigger *trigger;
+foreach (unit) {
+  if(trigger->isInside(unit.pos)) {
+    do_something();
+  }
+}
+
+
+

ECS Approach:

+
void sphere_trigger_es(int trigger, const Point3 &sphere_c, const float sphere_r) {
+  performQuery([&](Unit &unit) {
+    if (length(sphere_c - unit.pos) < sphere_r) {
+      sendEvent(IN_TRIGGER, Event(unit, trigger));
+    }
+  });
+}
+
+void box_trigger_es(int trigger, const Point3 &box_0, const Point3 &box_1) {
+  performQuery([&](Unit &unit) {
+    if (unit.pos & BBox3(box_0, box_1)) {
+      sendEvent(IN_TRIGGER, Event(unit, trigger));
+    }
+  });
+}
+
+onEvent(int trigger, Unit &unit) {
+  do_something();
+}
+
+
+

As you can see, both approaches are possible, but:

+
    +
  1. Deferred Execution: do_something can be deferred in ECS, which is +beneficial rather than problematic.

  2. +
  3. Decoupling: The onEvent system has no knowledge of what triggered the +event. It could be a spherical or cubic area, or even a special ability of a +Unit. The system doesn’t care and doesn’t need to know. This promotes +decoupling.

  4. +
  5. Debugging and Serialization: The entire process can be fully debugged +graphically, serialized, and sent over the network as both an event and its +result. This allows transfer necessary calculations to the client (e.g., +graphical effects) without using if statements.

  6. +
  7. Extensibility: The IShapeArea interface can be extended as broadly as +needed. A unit can be in multiple zones simultaneously if required.

  8. +
  9. Less Code: Although it may seem that the amount of code is similar, the +OOP approach lacks members (e.g., box, sphere), the actual function +implementations, and instance creation code. The ECS version contains all the +necessary code (excluding what is generated by codegen).

  10. +
+
+
+

Performance

+
    +
  • Typical Entity Characteristics: In most game worlds, typical entities have +at least 5-10 components, and sometimes even several hundred, consuming +hundreds of bytes to tens of kilobytes of memory.

  • +
  • Component Characteristics: Components (members) are typically diverse, and +rarely does a single method interact with all components simultaneously. Thus, +OOP often results in patterns that are highly suboptimal in terms of cache +efficiency and branch prediction.

  • +
  • Polymorphism in Entities: Real-world entities often exhibit some form of +polymorphism, meaning multiple entities perform the same behavior on +semantically similar data.

  • +
  • ECS vs. OOP: ECS provides more efficient access to entities and their data +(via data duck typing) than classical OOP, but how does it fare in terms of +performance?

  • +
  • DagorECS - Data-Oriented and Fast: Dagor ECS is designed with a +data-oriented approach, it features high speed and excellent cache locality.

  • +
+
+

Entity Creation

+
    +
  • Framework Overhead: The overhead of the framework during entity creation +is negligible.

  • +
  • Batch Creation: Creating many entities (even with initializers) is +generally faster than creating a vector<Entity> and adding them one by one. +It is slightly (~40%) slower than creating all entities at once (a speed that +is not achievable in real-world tasks, as it represents an upper limit) and +slightly less (~30%) slower than using vector<unique_ptr<Entity>> (which, as +we’ll see, incurs a significant performance penalty).

  • +
+

Here are some measurements for creating 30,000 entities, each consisting of 15 +POD components, with a total entity size of 516 bytes (one component is tracked, +no tracked means the component is not tracked):

+
struct Entity {
+  TMatrix transform = {TMatrix::IDENT};
+  int iv = 10, ic2 = 10;
+  Point3 p = {1,0,0};
+  TMatrix d[9] = {TMatrix::IDENT};
+  Point3 v = {1,0,0};
+  int ivCopy = 10;
+};
+
+
+

Time to create 30,000 Entities:

+
- daECS create (no tracked):                 6788 us
+- grow vector create:                       10088 us
+- best possible (single allocation) create:  4768 us
+
+
+

Average time for mass creation: 0.22 microseconds per entity. This is the +synchronous creation time without any Event Systems (ES) catching creation +events for these entities.

+

Conclusion: Entity creation in daECS is very fast! There is no need to +implement spawn pools or other such complexities.

+
+
+

Data Handling/Frame Update

+

To evaluate this, we use the same entity and a trivial kinematic update: pos += dt * vel.

+

Times marked as “best possible” represent the maximum achievable speeds for a +data-oriented design, utilizing two parallel arrays (NOT entities).

+

With a “cold” cache:

+
- daECS update:                     49.45 us
+- vector<Entity>, inline:          460.20 us
+- vector<Entity*>, inline:         502.40 us
+- vector<Entity*>, virtual update: 683.45 us
+- best possible, inline:            44.55 us
+
+
+

With a “hot” cache:

+
- daECS update:                     35.7 us
+- vector<Entity>, inline:          299.8 us
+- vector<Entity*>, inline:         346.0 us
+- vector<Entity*>, virtual update: 561.8 us
+- best possible:                    34.7 us
+
+
+

Performance Summary: Despite the vastly greater convenience of the ECS +framework, it is more than 10 times faster than working with OOP entities in any +form (and especially faster than OOP with polymorphism).

+

Optimal Speeds: The best achievable speeds are no more than 10% better with +a “cold” cache and practically identical with a “hot” cache.

+

Comparison with Other Frameworks: For comparison with another well-known +data-oriented framework, Unity 2018 ECS: we have an exact implementation of the +Unity algorithm, and daECS performs approximately 4-8 times faster.

+

Conclusion: Working with daECS is incredibly fast!

+
+
+
+

Codegen

+

We have a codegen (code generation) tool that automatically generates +standardized bindings for system registration using “lambda” that process one +entity (tuple of components).

+

This is a Python script that parses files to identify functions containing the +following patterns:

+
    +
  • *_es

  • +
  • *_es_event_handler

  • +
  • *_ecs_query

  • +
+

It then registers the system with the corresponding name. For example, functions +like water_es(UpdateStageInfoAct) and water_es(UpdateStageInfoRender) or +water_es_event_handler(Event1)/water_es_event_handler(Event2) would be +registered as two separate systems with their own set of components.

+

The codegen recognizes typed on_update functions (where the first parameter +is the stage, with a specified type) and typed event_handler functions.

+

Parameter Binding:

+
    +
  • Strict Name Binding: All parameters are bound strictly by name. Names +cannot be omitted! If a name is required for behavior but the data itself is +not needed, use ECS_REQUIRE(type name).

    +

    For parameters listed in ECS_REQUIRE you can use ecs::auto_type (this is +not an actual type but serves to avoid unnecessary includes, etc.).

    +
  • +
  • Optional Parameters: These either have a default value (e.g., float water_wind = 1.0f) or are passed via pointer (e.g., float *water_wind). If +the parameter is optional, entities that lack such a parameter will be processed +with the default parameter (or nullptr if it’s a pointer).

  • +
  • Implicit Component: The eid component, of type ecs::EntityId, is +implicitly added to all templates.

  • +
+

Codegen Benefits:

+

All of this generated code is human-readable, meaning you can review and even +write it manually (though this is not recommended). Codegen makes the code +easier to read, reduces manual effort (and the errors that come with it), and +enables faster refactoring of selected ECS framework APIs.

+

ECS Directives:

+
    +
  • ECS_TRACK(name1, name2): The system will “track” changes to components +name1 and name2.

  • +
  • ECS_BEFORE(name1, name2) ECS_AFTER(name3): The system will execute before +name1 and name2, but after name3. nameX can refer to the names of +other systems or synchronization points listed in es_order. Any system not +specified to run before __first_sync_point will always run after it.

  • +
  • ECS_NO_ORDER: The execution order of this system is not important.

  • +
  • ECS_TAG(render, sound): The system will only run if the program is +configured with these tags (e.g., server for server-side, gameClient for +client-side, etc.).

  • +
  • ECS_ON_EVENT(on_appear): Which is a shortcut for +ECS_ON_EVENT(ecs::EventEntityCreated, ecs::EventComponentsAppear)

  • +
  • ECS_ON_EVENT(on_disappear): Which is a shortcut for +ECS_ON_EVENT(ecs::EventEntityDestroyed, ecs::EventComponentsDisappear).

  • +
  • ECS_REQUIRE, ECS_REQUIRE_NOT: These macros for codegen should be placed +directly before the ES function. For example:

    +
    ECS_REQUIRE(int someName) ECS_REQUIRE_NOT(ecs::auto_type SomeAbsentName)
    +void foo_es(float hp)
    +{
    +    // This function will only receive `hp` for entities that have the `someName` component (of type `int`)
    +    // but do not have the `SomeAbsentName` component (type irrelevant).
    +}
    +
    +
    +
    +

    Important

    +

    ECS_REQUIRE works via the annotate attribute, which unfortunately does not +annotate literals — only names (of arguments or functions).

    +
    +

    Therefore, the following will not work:

    +
    void foo(int some_component = 1 ECS_REQUIRE(ecs::Tag some_tag)) // This won't work
    +
    +
    +

    However, this will work:

    +
    ECS_REQUIRE(ecs::Tag some_tag)) void foo(int some_component = 1)
    +
    +
    +
  • +
  • ECS_ON_EVENT(EventName, EventName2, ...): If the handler body needs to +perform the same operation for different events, use ECS_ON_EVENT to avoid +copy-pasting.

  • +
+

ECS core events:

+

Unicast events:

+
    +
  • EventEntityCreated: Sent after entity was fully created & loaded. Sent only once.

  • +
  • EventEntityRecreated: As previous, but might be sent several times. This +event takes place after reCreateEntity calls.

  • +
  • EventComponentsDisappear: Event is called on recreate if this ES will no +longer apply (i.e. list of components no longer matches).

  • +
  • EventComponentsAppear: Event is called on recreate if this ES will start +apply (i.e. list of components matches).

  • +
  • EventEntityDestroyed: Sent before entity destruction.

  • +
  • EventComponentChanged: Sent after existing component is changed.

    +
    +

    Important

    +

    This is a unique, optimized event. It is triggered on the Entity System (ES) +only if the ES requires the component that has been modified. Unlike other +events, this event will not be received by an ES even if it matches the list +of components unless the modified component is included in the ES’s list of +components.

    +
    +
  • +
+

Broadcast events:

+
    +
  • EventEntityManagerEsOrderSet: Sent after es order has been set.

  • +
  • EventEntityManagerBeforeClear, EventEntityManagerAfterClear: Sent +before&after all scene (all entities) destruction.

  • +
+
+
+

Code Example

+
rect
+{
+    pos:p2 = 0,0
+    rectSize:p2 = 0,0
+    color:c=255,255,255,255
+}
+
+brick
+{
+    _extends:t="rect"
+    brick.pos:ip2 = 0,0
+}
+
+pad
+{
+    _extends:t="rect"
+    isPad:b=yes
+}
+
+ball
+{
+    pos:p2 = 600,700
+    vel:p2 = 330,-550
+    radius:r = 5
+    color:c=25,255,255,255
+}
+
+
+
+
+

Video Lecture

+

Anton Yudintsev’s video lecture on ECS:

+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-ecs/index.html b/api-references/dagor-ecs/index.html new file mode 100644 index 000000000..b8f55939f --- /dev/null +++ b/api-references/dagor-ecs/index.html @@ -0,0 +1,214 @@ + + + + + + + Dagor ECS — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-ecs/schemeful_events.html b/api-references/dagor-ecs/schemeful_events.html new file mode 100644 index 000000000..a527339a3 --- /dev/null +++ b/api-references/dagor-ecs/schemeful_events.html @@ -0,0 +1,582 @@ + + + + + + + Schemeful Events (daScript, Quirrel, C++, Net) — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Schemeful Events (daScript, Quirrel, C++, Net)

+
+

Advantages of Schemeful Events

+
    +
  • Events are universally compatible across scripting languages (daScript, +Quirrel).

  • +
  • They can be transmitted both locally and over the network.

  • +
  • They can be modified in real-time without restarting the game.

  • +
  • They have a strict, validated structure, making all fields visible in Quirrel +and accessible as an instance, e.g., evt.someField.

  • +
  • Full runtime information on the event structure (reflection) is available.

  • +
  • C++ API support is provided for handling these events, if required.

  • +
+
+
+

Declaring an Event

+

Each game directory contains an event declaration file, named in the format +events_<game_name>.das (e.g., events_cuisine_royale.das). The event +declaration consists of an annotation and a description of the event structure. +The annotation specifies whether the event is unicast or broadcast, and +network routing, if needed, which is covered below.

+

Example: events_<game>.das

+
[event(unicast)]
+struct CmdCreateMapPoint
+  x: float
+  z: float
+
+
+
+

Note

+

All events in the file events_<game_name>.das are loaded before Quirrel, +enabling them to be accessed within it. Therefore, events declared for Quirrel +should be placed in this file. Although not mandatory for other events, it is +recommended for consistency.

+
+
+
+

Creating an Event

+
    +
  • daScript: An event is created like any regular instance structure, e.g., +[[RqUseAbility ability_type=ability_type]].

  • +
  • Quirrel: Here, strict validation ensures no typographical errors or +extraneous fields are included, RqUseAbility({ability_type="ultimate"}).

  • +
+
+
+

Subscribing to an Event

+
    +
  • daScript: Use on_event=RqUseAbility, or explicitly set the type of the +first argument in the system (e.g., evt: RqUseAbility...).

  • +
  • Quirrel: Use local {OnAbilityCanceled} = require("dasevents")... ::ecs.register_es("ability_canceling_es", { [OnAbilityCanceled] = @( evt, eid, comp) ::dlog(evt.ability_type).

  • +
  • C++: Events can be listened to by subscribing to the event name, e.g., +ECS_ON_EVENT(eastl::integral_constant<ecs::event_type_t, str_hash_fnv1("EventOnSeatOwnersChanged")>).

  • +
+
+
+

Sending Events (Server-to-Server, Client-to-Client)

+
    +
  • daScript: Use the standard sendEvent, broadcastEvent.

  • +
  • Quirrel: Similarly, use ::ecs.g_entity_mgr.sendEvent, +::ecs.g_entity_mgr.broadcastEvent.

  • +
+
+
+

Sending Events Over the Network

+

When declaring an event, specify the routing to determine its network path, +e.g., [event(unicast, routing=ROUTING_SERVER_TO_CLIENT)], +ROUTING_CLIENT_TO_SERVER, or ROUTING_CLIENT_CONTROLLED_ENTITY_TO_SERVER.

+
    +
  • daScript: Use require net ... send_net_event(eid, evt) or +broadcast_net_event(evt).

  • +
  • Quirrel: Use local {CmdBlinkMarker, sendNetEvent, broadcastNetEvent} = require("dasevents") ... sendNetEvent(eid, CmdBlinkMarker()) ... broadcastNetEvent(CmdBlinkMarker(...)).

  • +
+
+
+

Network Protocol Version

+

All declared network events contribute to the protocol version. If the server +and client versions do not match, the client will disconnect from the session. +For script events ([event]), you can control this behavior by excluding +certain events from protocol calculations. In cases of a mismatch, this may +result in either an on-screen error or no notification.

+
    +
  • event(... net_liable=strict ...) – The event participates in protocol +versioning; any mismatch triggers a disconnect (default behavior).

  • +
  • event(... net_liable=logerr ...) – The event does not affect protocol +versioning; a log error is recorded if a mismatch occurs.

  • +
  • event(... net_liable=ignore ...) – The event does not affect protocol +versioning; a log warning (logwarn) is recorded if a mismatch occurs.

  • +
+

C++ events follow a similar logic but use the NET_PROTO_VERSION constant and +the count of network C++ events, without exceptions.

+
+
+

Event Version

+

An explicit version can be assigned to an event. By default, all events are set +to version 0. When working with BitStream, the version is required and will +assist in adapting the protocol if the stream content changes significantly.

+

Example: code.das

+
[event(broadcast, version=1)]
+struct TestEvent {}
+
+
+
+
+

Sending Containers (Offline and Online)

+

Dynamic arrays/containers can be sent along with events. Currently, the +supported types are ecs::Object, ecs::IntList, ecs::FloatList, +ecs::Point3List, and ecs::Point4List.

+

Here’s an example of sending such an event from daScript:

+

Example: code.das

+
[event(broadcast)]
+struct TestEvent
+  str : string
+  i : int
+  obj : ecs::Object const?
+
+...
+  using() <| $(var obj : Object)
+    obj |> set("foo", 1)
+    broadcastEvent([[TestEvent str="test event", i = 42, obj=ecs_addr(obj)]])
+
+
+
+

Important

+
    +
  1. All container types in an event are stored as pointers.

  2. +
  3. When sending a container in an event, use the helper function +ecs_addr(container).

  4. +
+
+

Sending events from Quirrel follows a similar process:

+

Example: code.nut

+
let {CompObject} = require("ecs")
+let {TestEvent, broadcastNetEvent} = require("dasevents")
+...
+let obj = CompObject()
+obj["foo"] = 1
+broadcastNetEvent(TestEvent({str="test event", i=42, obj=obj}))
+
+
+
+

Important

+
    +
  • Any ecs::Object within an event will automatically include a field called +fromconnid, which stores the sender’s connection ID (on the client side, +this is always 0, indicating the server; on the server side, it holds the +actual connection number).

  • +
  • If the container contents undergo substantial changes, it is advisable to +specify an event version (e.g., [event(... version=1)]). This will ensure +that clients or servers with outdated versions will no longer support the +event.

  • +
+
+
+
+

Sending BitStream

+

Similar to containers, a raw data stream (BitStream) can also be sent in an +event. When sending a BitStream, specifying an event version is mandatory.

+
+
+

Reflection

+

Events possess an exact schema, accessible at runtime and retrievable from any +script or C++ code.

+
    +
  • C++: All event structure information is stored in ecs::EventsDB, which +provides various methods such as getEventScheme, hasEventScheme, +getFieldsCount (for argument count), getFieldOffset (for field offset), +getFieldName (for field name), findFieldIndex (for field index), and +getEventFieldValue<T> (for direct access to parameter values).

  • +
  • daScript: All of functions for C++ are also available in the ecs module +for daScript (e.g., events_db_getFieldsCount). For example, the Events +DB window in ImGui uses this API, see +<project_name>/prog/scripts/game/es/imgui/ecs_events_db.das.

  • +
  • Quirrel: A detailed event printout is available when calling ::log(evt), +which outputs all event fields. An API with reflection support is also +provided, as demonstrated below:

  • +
+

Example: describe_event.nut

+
local function describeEvent(evt) {
+  if (evt == null) {
+    ::dlog("null event")
+    return
+  }
+
+  local eventType = evt.getType()
+  local eventId = ::ecs.g_entity_mgr.getEventsDB().findEvent(eventType)
+
+  local hasScheme = ::ecs.g_entity_mgr.getEventsDB().hasEventScheme(eventId)
+  if (!hasScheme) {
+    ::dlog($"event without scheme #{eventType}")
+    return
+  }
+  local fieldsCount = ::ecs.g_entity_mgr.getEventsDB().getFieldsCount(eventId)
+  ::dlog($"Event {eventType} fields count #{fieldsCount}")
+
+  for (local i = 0; i < fieldsCount; i++)
+  {
+    local name = ::ecs.g_entity_mgr.getEventsDB().getFieldName(eventId, i)
+    local type = ::ecs.g_entity_mgr.getEventsDB().getFieldType(eventId, i)
+    local offset = ::ecs.g_entity_mgr.getEventsDB().getFieldOffset(eventId, i)
+    local value = ::ecs.g_entity_mgr.getEventsDB().getEventFieldValue(evt, eventId, i)
+    ::dlog($"field #{i} {name} <{type}> offset={offset} = '{value}'")
+  }
+}
+
+
+
+
+

C++ Event (cpp_event)

+

In addition to dynamic events, it is possible to declare C++ events, for which +C++ code and SQ bindings will be generated. In Quirrel, handling these events is +identical to working with standard events, as is the case in daScript.

+

When declaring a C++ event, the with_scheme argument is required. This is +necessary because some events cannot be converted into schemeful events due to +restrictions (fields must be basic ECS types or compatible containers only).

+

Example: events_<game>.das

+
[cpp_event(unicast, with_scheme)]
+struct EventOnPlayerDash
+  from: float3
+  to: float3
+
+
+

The utility <game>/scripts/genDasevents.bat will generate a .h and .cpp +file for this event (currently located at prog/game/dasEvents.h/cpp).

+
+
+

Quirrel Stubs / C++ Code Generation

+

To generate the Quirrel stubs and C++ code automatically, run the batch file +<game>/scripts/genDasevents.bat. If the batch file does not work, build the +daScript compiler manually once by running jam -sPlatform=win64 -sCheckedContainers=yes in <project_name>/prog/aot.

+
+
+

Filters

+

You can manage the list of recipients for server-side das-events using filters. +This is helpful for targeting specific groups, such as only the player or the +player’s team. When sending an event, specify the filter as an additional +argument. For instance, send_net_event(eid, [[EnableSpectator]], target_entity_conn(eid)). The following filters are currently supported:

+
    +
  • broadcast (default) – Sends to all recipients.

    +
      +
    • equivalent in C++: &net::broadcast_rcptf.

    • +
    +
  • +
  • target_entity_conn – Sends the event only to the player (the eid receiving +the event must be the player’s hero or player eid).

    +
      +
    • equivalent in C++: &rcptf::entity_ctrl_conn<SomeNetMsg, rcptf::TARGET_ENTITY>.

    • +
    +
  • +
  • entity_team – Sends the event to the player’s hero and team.

    +
      +
    • equivalent in C++: &rcptf::entity_team<SomeNetMsg, rcptf::TARGET_ENTITY>.

    • +
    +
  • +
  • possessed_and_spectated – Sends the event to the player and any spectators +watching them.

    +
      +
    • equivalent in C++: &rcptf::possessed_and_spectated.

    • +
    +
  • +
  • possessed_and_spectated_player – Similar to possessed_and_spectated but +targets the player instead of the hero.

    +
      +
    • equivalent in C++: &rcptf::possessed_and_spectated_player.

    • +
    +
  • +
+

In daScript, a filter is a function returning an array<net::IConnection>, +which is referred to as a “filter” for consistency with C++ terminology.

+
+
+

Filters in Squirrel

+

In Squirrel, as in daScript, event-sending methods have an optional parameter +where you can pass an array of connection IDs (i.e., an array of int). Below +is an example filter implemented in Squirrel:

+

Example: sq_filter.nut

+
local filtered_by_team_query = ecs.SqQuery("filtered_by_team_query", {comps_ro=[["team", ecs.TYPE_INT], ["connid",ecs.TYPE_INT]], comps_rq=["player"], comps_no=["playerIsBot"]})
+
+local function filter_connids_by_team(team){
+  local connids = []
+  filtered_by_team_query.perform(function(eid, comp){
+    connids.append(comp["connid"])
+  },"and(ne(connid,{0}), eq(team,{1}))".subst(INVALID_CONNECTION_ID, team))
+  return connids
+}
+
+
+

And here is an example of sending an event using this filter:

+

Example: sq_send_event.nut

+
sendNetEvent(eid, RequestNextRespawnEntity({memberEid=eid}), filter_connids_by_team(target_team))
+
+
+
+
+

Filters in cpp_event

+

When annotating a cpp_event with the filter= parameter and one of the +filters listed above, the code generation process will produce C++ code that +includes the specified filter as described above in parentheses.

+
+
+

Event Delivery Reliability

+

By default, all events are sent with a reliability level of RELIABLE_ORDERED. +This can be modified using the reliability argument. Available reliability +levels include:

+
    +
  • UNRELIABLE

  • +
  • UNRELIABLE_SEQUENCED

  • +
  • RELIABLE_ORDERED

  • +
  • RELIABLE_UNORDERED

  • +
+
+
+

Enums

+

If you need an enumerated type available in both scripts, there’s no need to +write it in C++ and bind it separately for each language. The genDasevents.bat +utility now supports generating Squirrel code with enums directly from daScript.

+

Follow these steps:

+
    +
  1. Define the enum in daScript where needed (preferably in a separate file for +easy parsing during code generation).

  2. +
  3. Explicitly mark the enum with the [export_enum] annotation.

  4. +
  5. Add the file path to genDasevents.bat with the --module scripts/file_with_enum.das argument.

  6. +
  7. Run genDasevents.bat.

  8. +
  9. Constructors for all enums will be available in +<game_prog>/sq_globals/dasenums.nut.

  10. +
+
+
+

Utilities

+
    +
  • ecs.dump_events – This console command prints all events, their schemas, and +schema hashes. If there are mismatches between client and server events, this +command can be run on both to compare outputs (the log will already contain +all necessary information for analysis).

  • +
  • Additionally, there’s an in-game window with detailed event information: open +the ImGui menu (F2) ▸ WindowECSEvents db.

  • +
+Events db +
+
+
+

FAQ

+
+

I have a C++ network event and want to move its declaration to daScript while keeping the event in C++. (Example: ECS_REGISTER_NET_EVENT(EventUserMarkDisabled, net::Er::Unicast, net::ROUTING_SERVER_TO_CLIENT, (&rcptf::entity_ctrl_conn<EventUserMarkDisabledNetMsg, rcptf::TARGET_ENTITY>));

+

Define the event in daScript with the [cpp_event(unicast, with_scheme, routing=ROUTING_SERVER_TO_CLIENT, filter=direct_connection)] annotation, then +run genDasevents.bat. This will generate stubs, and the event will appear or +update in the .h and .cpp files. (cpp_event + with_scheme activates code +generation).

+
+
+
+

I have a C++ network event and want to move it entirely to scripts (no need for it in C++).

+

Follow the same steps as above, but use [event(unicast, routing=ROUTING_SERVER_TO_CLIENT)]. Replace all sendEvent calls with +send_net_event/sendNetEvent, passing a filter function call like +target_entity_conn(eid) as the final argument. Running genDasevents.bat will +still be necessary to generate the stubs.

+
+
+
+

I have a script-based event and need to migrate it to C++.

+

Simply change the event annotation from event to cpp_event. Then, replace +all send_net_event calls with standard sendEvent calls. Run +genDasevents.bat to generate the stubs and C++ code.

+
+
+
+

I added an event, but I see the following error in Squirrel: [E] daRg: the index 'CmdHeroSpeech' does not exist.

+

Make sure the event is registered in the system before Quirrel loads. Each game +has an initialization script (e.g., <game>_init.das). Load the script +containing the event in this initialization script to resolve the error.

+
+
+
+

genDasevents.bat shows compilation errors and won’t run.

+

Rebuild the compiler.

+
+

See also

+

For more information, see daScript plugin for +VSCode.

+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-engine-docs/index.html b/api-references/dagor-engine-docs/index.html new file mode 100644 index 000000000..b2d1e0962 --- /dev/null +++ b/api-references/dagor-engine-docs/index.html @@ -0,0 +1,187 @@ + + + + + + + Engine Libraries Docs — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Engine Libraries Docs

+

Contents:

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-engine-docs/picture_image/Image.html b/api-references/dagor-engine-docs/picture_image/Image.html new file mode 100644 index 000000000..ae75c0b03 --- /dev/null +++ b/api-references/dagor-engine-docs/picture_image/Image.html @@ -0,0 +1,207 @@ + + + + + + + Image — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Image

+

Source file: prog/engine/image/decodeFnameSuffix.h

+
+

Image Rasterization

+

Images can be of several formats, most common TIFF, PNG, JPG and SVG.

+

There can also be suffixes that allow to specify parameters of rasterization, separated with ::

+
<image>[<:W>[:H][:k|f|p]]
+
+W - width
+H - height
+K - keep aspect
+F - force aspect
+P - premultiplied alpha
+
+
+

Width and Height can be used for svg and other format for better down/upsampling quality. +When both Width and Height are 0 then resampling is skipped (it may be useful to force premultiplied alpha leaving source picture +resolution as is using :0:P suffix). For vector graphics (such as .SVG) resolution (at least Width) is mandatory.

+

Sample usage (in daRg for example):

+
Picture("image.svg:256:256:K:P")
+or
+Picture("b64://<base64 encoded string of svg or png>:256:256:K:P")
+or
+Picture("image.png:0:P")
+or
+Picture("image.png:512:256:P:F")
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-engine-docs/picture_image/PictureManager.html b/api-references/dagor-engine-docs/picture_image/PictureManager.html new file mode 100644 index 000000000..6d64458ab --- /dev/null +++ b/api-references/dagor-engine-docs/picture_image/PictureManager.html @@ -0,0 +1,225 @@ + + + + + + + PictureManager — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

PictureManager

+

Source file: prog/engine/lib3d/picMgr.cpp

+
+

See also

+

Image Rasterization

+
+
+

Picture Sources

+

Pictures can be files, resources, http resources, base64 encoded or dynamically rendered characters.

+

Full image path can be with or without path to PictureAtlas (see below) [atlasPath#]<image path string>.

+

If image path string starts with http or https - it is treated as url and image would be requested from this url. +If image path string doesn’t have slashes and endswith * - it is treated as game built resource and would be loaded from .dxp.bin +files. If image path string starts with b64:// it is supposed to be base64 encoded string file (usually svg). if image path string +starts with render string - it is supposed to be datablock string, that allow to render in atlas or separately dynamic render +objects, like characters. In other cases image path string should be path to image path (usually png, svg or jpg).

+
+
+

Picture Atlases

+

Dagor allow to make dynamic atlases for images. +Such atlases improve rendering performance, cause allow to render several UI objects with one drawprimitive.

+

To create atlas you need specify it’s parameters in configuration file in datablock format.

+

Picture atlas configuration format:

+
tex{
+  dynAtlas:b=yes
+  rtTex:b=yes
+  name:t="myatlas" //for debugging? and for static (obsolete) atlases
+  size:ip2=512,512 //size in pixels
+
+  maxAllowedPicSz:ip2=320,320 //max allowed picture size to rasterize.
+                              //Will raise a logerr on attempt to rasterize bigger image.
+  premultiplyAlpha:b=yes
+  margin:i=1 //margin around pictures
+  picSrcFolder:t="/ui/uiskin/"
+  picReserve:i=128
+  refHRes:i=1080 //reference size of vertcal resoultion.
+                 //Atlas will proportionally scale on bigger resolutions,
+                 //as we usually need pixel perfect rasterization of icons
+}
+
+
+

To specify usage of picture atlas:

+
//   "tex/mytex.tga"        - real texture name
+//   "tex/myatlas#mytex" - picture "mytex" in tex/myatlas.blk
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-engine-docs/picture_image/index.html b/api-references/dagor-engine-docs/picture_image/index.html new file mode 100644 index 000000000..0e598376c --- /dev/null +++ b/api-references/dagor-engine-docs/picture_image/index.html @@ -0,0 +1,190 @@ + + + + + + + Dagor Engine Libraries — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dagor Engine Libraries

+

Picture Manager documentation

+

Contents:

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index.html b/api-references/dagor-render/index.html new file mode 100644 index 000000000..4c7616794 --- /dev/null +++ b/api-references/dagor-render/index.html @@ -0,0 +1,240 @@ + + + + + + + Dagor Engine Render — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI.html b/api-references/dagor-render/index/d3dAPI.html new file mode 100644 index 000000000..100a866c7 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI.html @@ -0,0 +1,241 @@ + + + + + + + D3D API — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/Barrier.html b/api-references/dagor-render/index/d3dAPI/Barrier.html new file mode 100644 index 000000000..f9d7288cd --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/Barrier.html @@ -0,0 +1,692 @@ + + + + + + + Barriers — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Barriers

+
+
+class ResourceBarrierDesc
+

The ResourceBarrierDesc class represents the input type for ‘d3d::resource_barrier’. It allows one function to handle multiple input data layouts. Inputs can be simple single values, arrays of values, pointers to values, and initializer lists of values. To interpret the stored values, use the provided enumerate functions to get the buffer and texture barriers. For more details on resource barriers, see https://info.gaijin.lan/display/DE4/Resource+and+Execution+Barriers.

+
+

Public Functions

+
+
+inline ResourceBarrierDesc()
+

Default constructor for ResourceBarrierDesc.

+
+ +
+
+ResourceBarrierDesc(const ResourceBarrierDesc&) = default
+

Copy constructor for ResourceBarrierDesc.

+
+
Parameters:
+

desc – The ResourceBarrierDesc object to be copied.

+
+
+
+ +
+
+inline ResourceBarrierDesc(Sbuffer *buf, ResourceBarrier rb)
+

Constructor for ResourceBarrierDesc with a single buffer and resource barrier.

+
+
Parameters:
+
    +
  • buf – The buffer.

  • +
  • rb – The resource barrier.

  • +
+
+
+
+ +
+
+inline ResourceBarrierDesc(Sbuffer *const *bufs, const ResourceBarrier *rb, unsigned count)
+

Constructor for ResourceBarrierDesc with an array of buffers and resource barriers.

+
+
Parameters:
+
    +
  • bufs – The array of buffers.

  • +
  • rb – The array of resource barriers.

  • +
  • count – The number of buffers and resource barriers.

  • +
+
+
+
+ +
+
+template<unsigned N>
inline ResourceBarrierDesc(Sbuffer *(&bufs)[N], ResourceBarrier (&rb)[N])
+

Constructor for ResourceBarrierDesc with a fixed-size array of buffers and resource barriers.

+
+
Template Parameters:
+

N – The size of the fixed-size array.

+
+
Parameters:
+
    +
  • bufs – The fixed-size array of buffers.

  • +
  • rb – The fixed-size array of resource barriers.

  • +
+
+
+
+ +
+
+inline ResourceBarrierDesc(std::initializer_list<Sbuffer*> bufs, std::initializer_list<ResourceBarrier> rb)
+

Constructor for ResourceBarrierDesc with initializer lists of buffers and resource barriers.

+
+
Parameters:
+
    +
  • bufs – The initializer list of buffers.

  • +
  • rb – The initializer list of resource barriers.

  • +
+
+
+
+ +
+
+inline ResourceBarrierDesc(BaseTexture *tex, ResourceBarrier rb, unsigned sub_res_index, unsigned sub_res_range)
+

Constructor for ResourceBarrierDesc with a single texture, resource barrier, and sub-resource index and range.

+
+
Parameters:
+
    +
  • tex – The texture.

  • +
  • rb – The resource barrier.

  • +
  • sub_res_index – The sub-resource index.

  • +
  • sub_res_range – The sub-resource range.

  • +
+
+
+
+ +
+
+inline ResourceBarrierDesc(BaseTexture *const *texs, const ResourceBarrier *rb, const unsigned *sub_res_index, const unsigned *sub_res_range, unsigned count)
+

Constructor for ResourceBarrierDesc with an array of textures, resource barriers, sub-resource indices, and sub-resource ranges.

+
+
Parameters:
+
    +
  • texs – The array of textures.

  • +
  • rb – The array of resource barriers.

  • +
  • sub_res_index – The array of sub-resource indices.

  • +
  • sub_res_range – The array of sub-resource ranges.

  • +
  • count – The number of textures, resource barriers, sub-resource indices, and sub-resource ranges.

  • +
+
+
+
+ +
+
+template<unsigned N>
inline ResourceBarrierDesc(BaseTexture *(&texs)[N], ResourceBarrier (&rb)[N], unsigned (&sub_res_index)[N], unsigned (&sub_res_range)[N])
+

Constructor for ResourceBarrierDesc with a fixed-size array of textures, resource barriers, sub-resource indices, and sub-resource ranges.

+
+
Template Parameters:
+

N – The size of the fixed-size array.

+
+
Parameters:
+
    +
  • texs – The fixed-size array of textures.

  • +
  • rb – The fixed-size array of resource barriers.

  • +
  • sub_res_index – The fixed-size array of sub-resource indices.

  • +
  • sub_res_range – The fixed-size array of sub-resource ranges.

  • +
+
+
+
+ +
+
+inline ResourceBarrierDesc(std::initializer_list<BaseTexture*> texs, std::initializer_list<ResourceBarrier> rb, std::initializer_list<unsigned> sub_res_index, std::initializer_list<unsigned> sub_res_range)
+

Constructor for ResourceBarrierDesc with initializer lists of textures, resource barriers, sub-resource indices, and sub-resource ranges.

+
+
Parameters:
+
    +
  • texs – The initializer list of textures.

  • +
  • rb – The initializer list of resource barriers.

  • +
  • sub_res_index – The initializer list of sub-resource indices.

  • +
  • sub_res_range – The initializer list of sub-resource ranges.

  • +
+
+
+
+ +
+
+inline ResourceBarrierDesc(RaytraceBottomAccelerationStructure *blas)
+

Constructor for ResourceBarrierDesc with a single bottom level acceleration structure.

+
+
Parameters:
+

blas – The bottom level acceleration structure.

+
+
+
+ +
+
+inline ResourceBarrierDesc(RaytraceBottomAccelerationStructure *const *blases, unsigned count)
+

Constructor for ResourceBarrierDesc with an array of bottom level acceleration structures.

+
+
Parameters:
+
    +
  • blases – The array of bottom level acceleration structures.

  • +
  • count – The number of bottom level acceleration structures.

  • +
+
+
+
+ +
+
+template<unsigned N>
inline ResourceBarrierDesc(RaytraceBottomAccelerationStructure *(&blases)[N])
+

Constructor for ResourceBarrierDesc with a fixed-size array of bottom level acceleration structures.

+
+
Template Parameters:
+

N – The size of the fixed-size array.

+
+
Parameters:
+

blases – The fixed-size array of bottom level acceleration structures.

+
+
+
+ +
+
+inline ResourceBarrierDesc(std::initializer_list<RaytraceBottomAccelerationStructure*> blases)
+

Constructor for ResourceBarrierDesc with initializer lists of bottom level acceleration structures.

+
+
Parameters:
+

blases – The initializer list of bottom level acceleration structures.

+
+
+
+ +
+
+inline ResourceBarrierDesc(Sbuffer *const *bufs, const ResourceBarrier *b_rb, unsigned b_count, BaseTexture *const *texs, const ResourceBarrier *t_rb, const unsigned *t_sub_res_index, const unsigned *t_sub_res_range, unsigned t_count)
+

Constructor for ResourceBarrierDesc with arrays of buffers, resource barriers, textures, resource barriers, sub-resource indices, and sub-resource ranges.

+
+
Parameters:
+
    +
  • bufs – The array of buffers.

  • +
  • b_rb – The array of resource barriers for buffers.

  • +
  • b_count – The number of buffers and resource barriers for buffers.

  • +
  • texs – The array of textures.

  • +
  • t_rb – The array of resource barriers for textures.

  • +
  • t_sub_res_index – The array of sub-resource indices for textures.

  • +
  • t_sub_res_range – The array of sub-resource ranges for textures.

  • +
  • t_count – The number of textures, resource barriers for textures, sub-resource indices for textures, and sub-resource ranges for textures.

  • +
+
+
+
+ +
+
+inline ResourceBarrierDesc(Sbuffer *buf, ResourceBarrier b_rb, BaseTexture *const *texs, const ResourceBarrier *t_rb, const unsigned *t_sub_res_index, const unsigned *t_sub_res_range, unsigned t_count)
+

Constructor for ResourceBarrierDesc with a single buffer, resource barrier, array of textures, resource barriers, sub-resource indices, and sub-resource ranges.

+
+
Parameters:
+
    +
  • buf – The buffer.

  • +
  • b_rb – The resource barrier for the buffer.

  • +
  • texs – The array of textures.

  • +
  • t_rb – The array of resource barriers for textures.

  • +
  • t_sub_res_index – The array of sub-resource indices for textures.

  • +
  • t_sub_res_range – The array of sub-resource ranges for textures.

  • +
  • t_count – The number of textures, resource barriers for textures, sub-resource indices for textures, and sub-resource ranges for textures.

  • +
+
+
+
+ +
+
+inline ResourceBarrierDesc(Sbuffer *const *bufs, const ResourceBarrier *b_rb, unsigned b_count, BaseTexture *tex, ResourceBarrier t_rb, unsigned t_sub_res_index, unsigned t_sub_res_range)
+

Constructor for ResourceBarrierDesc with arrays of buffers, resource barriers, a single texture, resource barrier, sub-resource index, and sub-resource range.

+
+
Parameters:
+
    +
  • bufs – The array of buffers.

  • +
  • b_rb – The array of resource barriers for buffers.

  • +
  • b_count – The number of buffers and resource barriers for buffers.

  • +
  • tex – The texture.

  • +
  • t_rb – The resource barrier for the texture.

  • +
  • t_sub_res_index – The sub-resource index for the texture.

  • +
  • t_sub_res_range – The sub-resource range for the texture.

  • +
+
+
+
+ +
+
+inline ResourceBarrierDesc(Sbuffer *buf, ResourceBarrier b_rb, BaseTexture *tex, ResourceBarrier t_rb, unsigned t_sub_res_index, unsigned t_sub_res_range)
+

Constructor for ResourceBarrierDesc with a single buffer, resource barrier, a single texture, resource barrier, sub-resource index, and sub-resource range.

+
+
Parameters:
+
    +
  • buf – The buffer.

  • +
  • b_rb – The resource barrier for the buffer.

  • +
  • tex – The texture.

  • +
  • t_rb – The resource barrier for the texture.

  • +
  • t_sub_res_index – The sub-resource index for the texture.

  • +
  • t_sub_res_range – The sub-resource range for the texture.

  • +
+
+
+
+ +
+
+inline ResourceBarrierDesc(std::initializer_list<Sbuffer*> bufs, std::initializer_list<ResourceBarrier> buf_rb, std::initializer_list<BaseTexture*> texs, std::initializer_list<ResourceBarrier> tex_rb, std::initializer_list<unsigned> sub_res_index, std::initializer_list<unsigned> sub_res_range)
+

Constructor for ResourceBarrierDesc with initializer lists of buffers, resource barriers, textures, resource barriers, sub-resource indices, and sub-resource ranges.

+
+
Parameters:
+
    +
  • bufs – The initializer list of buffers.

  • +
  • buf_rb – The initializer list of resource barriers for buffers.

  • +
  • texs – The initializer list of textures.

  • +
  • tex_rb – The initializer list of resource barriers for textures.

  • +
  • sub_res_index – The initializer list of sub-resource indices for textures.

  • +
  • sub_res_range – The initializer list of sub-resource ranges for textures.

  • +
+
+
+
+ +
+
+inline explicit ResourceBarrierDesc(ResourceBarrier rb)
+

Constructor for ResourceBarrierDesc with a single resource barrier. The expected use case is that ‘rb’ has the RB_FLUSH_UAV flag set for all pending UAV access.

+
+
Parameters:
+

rb – The resource barrier.

+
+
+
+ +
+
+template<typename T>
inline void enumerateBufferBarriers(T clb)
+

Enumerates the buffer barriers and calls the provided callback function for each buffer barrier.

+
+
Template Parameters:
+

T – The type of the callback function.

+
+
Parameters:
+

clb – The callback function that takes a buffer and a resource barrier as arguments.

+
+
+
+ +
+
+template<typename T>
inline void enumerateTextureBarriers(T clb)
+

Enumerates the texture barriers and calls the provided callback function for each texture barrier.

+
+
Template Parameters:
+

T – The type of the callback function.

+
+
Parameters:
+

clb – The callback function that takes a texture, a resource barrier, a sub-resource index, and a sub-resource range as arguments.

+
+
+
+ +
+
+template<typename T>
inline void enumerateBlasBarriers(T clb)
+

Enumerates the bottom level acceleration structure barriers and calls the provided callback function for each bottom level acceleration structure barrier.

+
+
Template Parameters:
+

T – The type of the callback function.

+
+
Parameters:
+

clb – The callback function that takes a bottom level acceleration structure as argument.

+
+
+
+ +
+
+

Public Members

+
+
+Sbuffer *buffer
+
+ +
+
+Sbuffer *const *buffers
+
+ +
+
+BaseTexture *texture
+
+ +
+
+BaseTexture *const *textures
+
+ +
+
+RaytraceBottomAccelerationStructure *blas
+
+ +
+
+RaytraceBottomAccelerationStructure *const *blases
+
+ +
+
+ResourceBarrier bufferState
+
+ +
+
+const ResourceBarrier *bufferStates
+
+ +
+
+ResourceBarrier textureState
+
+ +
+
+const ResourceBarrier *textureStates
+
+ +
+
+unsigned textureSubResIndex
+
+ +
+
+const unsigned *textureSubResIndices
+
+ +
+
+unsigned textureSubResRange
+
+ +
+
+const unsigned *textureSubResRanges
+
+ +
+
+

Private Members

+
+
+union ResourceBarrierDesc::[anonymous] [anonymous]
+
+ +
+
+union ResourceBarrierDesc::[anonymous] [anonymous]
+
+ +
+
+union ResourceBarrierDesc::[anonymous] [anonymous]
+
+ +
+
+union ResourceBarrierDesc::[anonymous] [anonymous]
+
+ +
+
+union ResourceBarrierDesc::[anonymous] [anonymous]
+
+ +
+
+union ResourceBarrierDesc::[anonymous] [anonymous]
+
+ +
+
+union ResourceBarrierDesc::[anonymous] [anonymous]
+
+ +
+
+unsigned bufferCount = 0
+
+ +
+
+unsigned textureCount = 0
+
+ +
+
+unsigned blasCount = 0
+
+ +
+
+

Private Static Attributes

+
+
+static constexpr unsigned single_element_count = ~0u
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/Bindless.html b/api-references/dagor-render/index/d3dAPI/Bindless.html new file mode 100644 index 000000000..e92cd8182 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/Bindless.html @@ -0,0 +1,329 @@ + + + + + + + Bindless resources API — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Bindless resources API

+
+
+namespace d3d
+
+

Functions

+
+
+uint32_t register_bindless_sampler(BaseTexture *texture)
+

Registers the sampler portion of the given texture into the global bindless sampler table.

+

Textures with identical samplers may yield identical return values. Default sampler (mip linear, filter linear, address wrap, anisotropic = 1, mip bias = 0, transparent black border) is available at zero slot by default.

+
+
Parameters:
+

texture – Pointer to the BaseTexture object.

+
+
Returns:
+

Index in the global sampler table representing this sampler.

+
+
+
+ +
+
+uint32_t register_bindless_sampler(SamplerHandle sampler)
+

Registers a sampler into the global bindless sampler table.

+

Multiple register calls with the same sampler may yield identical return values. Default sampler (mip linear, filter linear, address wrap, anisotropic = 1, mip bias = 0, transparent black border) is available at zero slot by default.

+
+
Parameters:
+

sampler – Sampler that should be added.

+
+
Returns:
+

Index in the global sampler table representing this sampler.

+
+
+
+ +
+
+uint32_t allocate_bindless_resource_range(uint32_t resource_type, uint32_t count)
+

Allocates a persistent bindless slot range of the given ‘resource_type’ resource type.

+
+
Parameters:
+
    +
  • resource_type – The type of resource to allocate the slot range for. Must be one of RES3D_ enum values.

  • +
  • count – The number of slots to allocate. Must be larger than 0.

  • +
+
+
Returns:
+

The first slot index into the bindless heap of the requested range.

+
+
+
+ +
+
+uint32_t resize_bindless_resource_range(uint32_t resource_type, uint32_t index, uint32_t current_count, uint32_t new_count)
+

Resizes a previously allocated bindless slot range.

+

It can shrink and enlarge a slot range. The contents of all slots of the old range are migrated to the new range, so only new entries have to be updated.

+
+
Parameters:
+
    +
  • resource_type – The type of resource to resize the slot range for. Must be one of RES3D_ enum values.

  • +
  • index – The index of the slot range to resize. Must be in a previously allocated bindless range, or any value if ‘current_count’ is 0.

  • +
  • current_count – The current count of slots in the range. Must be within a previously allocated bindless slot range or 0, when 0 then it behaves like ‘allocate_bindless_resource_range’.

  • +
  • new_count – The new count of slots in the range. Can be larger or smaller than ‘current_count’, shrinks or enlarges the slot range accordingly.

  • +
+
+
Returns:
+

The first slot of the new range.

+
+
+
+ +
+
+void free_bindless_resource_range(uint32_t resource_type, uint32_t index, uint32_t count)
+

Frees a previously allocated slot range.

+

This can also be used to shrink ranges, similarly to ‘resize_bindless_resource_range’.

+
+
Parameters:
+
    +
  • resource_type – The type of resource to free the slot range for. Must be one of RES3D_ enum values.

  • +
  • index – The index of the slot range to free. Must be in a previously allocated bindless range, or any value if ‘count’ is 0.

  • +
  • count – The number of slots to free. Must not exceed the previously allocated bindless slot range. Can be 0 which will be a no-op.

  • +
+
+
+
+ +
+
+void update_bindless_resource(uint32_t index, D3dResource *res)
+

Updates a given bindless slot with the reference to ‘res’.

+

The slot has to be allocated previously with the corresponding allocation methods with ‘resource_type’ matching the restype of ‘res’.

+
+
Parameters:
+
    +
  • index – The index of the bindless slot to update. Must be in a previously allocated bindless range.

  • +
  • res – Pointer to the D3dResource object.

  • +
+
+
+
+ +
+
+void update_bindless_resources_to_null(uint32_t resource_type, uint32_t index, uint32_t count)
+

Updates one or more bindless slots with a “null” resource of the given type.

+

Shader access to those slots will read all zeros and writes will be discarded.

+
+
Parameters:
+
    +
  • resource_type – The type of resource to update with null. Must be one of RES3D_ enum values.

  • +
  • index – The index of the bindless slot to update. Must be in a previously allocated bindless range.

  • +
  • count – The number of slots to update. Must not exceed the previously allocated bindless slot range.

  • +
+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/Buffers.html b/api-references/dagor-render/index/d3dAPI/Buffers.html new file mode 100644 index 000000000..1a64a5d1b --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/Buffers.html @@ -0,0 +1,1061 @@ + + + + + + + Buffers — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Buffers

+

    +
  • _ua_ -> allows UAV access (default is formatted/sampled view)

  • +
  • _sr_ -> allows SRV access (default is formatted/sampled view)

  • +
  • _cb -> allows const buffer access

  • +
  • _one_frame_ -> for cb to indicate this buffer contents is only valid this frame after a discard write

  • +
  • _persistent_ -> for cb counter part to _one_frame_, buffer holds its contents until changed

  • +
  • _byte_address -> for ua and sr to indicate byte address view

  • +
  • _structured -> for ua and sr to indicate structured view

  • +
  • _readback -> buffer is used for read back

  • +
  • _indirect -> buffer can be an indirect argument

  • +
  • _staging -> staging buffer

  • +
+

+
+
+class Sbuffer : public D3dResource, public ResourceChecker
+

The Sbuffer class represents a buffer used for 3D rendering.

+

This class is derived from the D3dResource class and provides functionality for locking and unlocking the buffer, retrieving buffer information, and updating buffer data. It represents all possible buffer types in the engine.

+
+

Public Functions

+
+
+inline virtual bool setReloadCallback(IReloadData*)
+

Set the Reload Callback object for the buffer.

+
+
Returns:
+

true if the callback was successfully set, false otherwise

+
+
+
+ +
+
+inline virtual int restype() const final override
+

Returns the type of the D3dResource. It is always RES3D_SBUF for Sbuffer objects.

+

+
+Todo:
+

make RES3D_ a enum class.

+
+ +

+
+
Returns:
+

int RES3D_SBUF.

+
+
+
+ +
+
+virtual int lock(uint32_t ofs_bytes, uint32_t size_bytes, void **p, int flags) = 0
+

Locks a portion of the buffer for reading or writing.

+
+

Warning

+

It is better to use lock_sbuffer method for more safety.

+
+
+
Parameters:
+
    +
  • ofs_bytes – The offset in bytes from the beginning of the buffer.

  • +
  • size_bytes – The size in bytes of the portion to lock. The whole buffer will be locked if 0.

  • +
  • p – A pointer to a void pointer that will receive the locked memory address.

  • +
  • flags – Additional flags to control the locking behavior.

  • +
+
+
Returns:
+

An integer representing the result of the lock operation. 0 if the lock failed, 1 if the lock succeeded.

+
+
+
+ +
+
+virtual int unlock() = 0
+

Unlocks the buffer after it has been locked.

+
+
Returns:
+

An integer representing the result of the unlock operation. 0 if the unlock failed, 1 if the unlock succeeded.

+
+
+
+ +
+
+virtual int getFlags() const = 0
+

Get the Flags object.

+
+
Returns:
+

Flags that control the buffer behavior and was set on a buffer creation.

+
+
+
+ +
+
+inline const char *getBufName() const
+

Get the Buffer name.

+
+
Returns:
+

The name of the buffer.

+
+
+
+ +
+
+inline virtual int getElementSize() const
+

Get the size of the structured buffer element.

+

This method works only for structured buffers.

+
+
Returns:
+

The size of the buffer element.

+
+
+
+ +
+
+inline virtual int getNumElements() const
+

Get the amount of elements in the structured buffer.

+

This method works only for structured buffers.

+
+
Returns:
+

int amount of elements in the buffer.

+
+
+
+ +
+
+inline virtual bool copyTo(Sbuffer *dest)
+

Copy current buffer to another buffer. The sizes of the buffers should match exactly.

+
+
Parameters:
+

dest – The destination buffer.

+
+
Returns:
+

true if the buffer was successfully copied, false otherwise.

+
+
+
+ +
+
+inline virtual bool copyTo(Sbuffer *dest, uint32_t dst_ofs_bytes, uint32_t src_ofs_bytes, uint32_t size_bytes)
+

Copy a portion of the buffer to another buffer. Both buffers must be large enough for the copied portion offset and size.

+
+
Parameters:
+
    +
  • dest – The destination buffer.

  • +
  • dst_ofs_bytes – The offset in bytes from the beginning of the destination buffer.

  • +
  • src_ofs_bytes – The offset in bytes from the beginning of the source buffer.

  • +
  • size_bytes – The size in bytes of the portion to copy.

  • +
+
+
Returns:
+

true if the buffer was successfully copied, false otherwise.

+
+
+
+ +
+
+template<typename T>
inline int lockEx(uint32_t ofs_bytes, uint32_t size_bytes, T **p, int flags)
+

Locks a portion of the buffer for reading or writing.

+
+

Warning

+

It is better to use lock_sbuffer method for more safety.

+
+
+
Template Parameters:
+

T – type of the data to lock

+
+
Parameters:
+
    +
  • ofs_bytes – offset in bytes from the beginning of the buffer

  • +
  • size_bytes – size in bytes of the portion to lock

  • +
  • p – pointer to a pointer that will receive the locked memory address

  • +
  • flags – additional flags to control the locking behavior VBLOCK_*

  • +
+
+
Returns:
+

int 0 if the lock failed, 1 if the lock succeeded

+
+
+
+ +
+
+inline bool updateDataWithLock(uint32_t ofs_bytes, uint32_t size_bytes, const void *src, int lockFlags)
+

Updates buffer content with the specified data using lock/memcpy/unlock.

+
+
Parameters:
+
    +
  • ofs_bytes – offset in bytes from the beginning of the buffer

  • +
  • size_bytes – size in bytes of the portion to update. Must be non-zero.

  • +
  • src – pointer to the source data

  • +
  • lockFlags – additional flags to control the locking behavior VBLOCK_*

  • +
+
+
Returns:
+

true if the buffer was successfully updated, false otherwise

+
+
+
+ +
+
+inline virtual bool updateData(uint32_t ofs_bytes, uint32_t size_bytes, const void *src, uint32_t lockFlags)
+

Updates buffer content with the specified data using lock/memcpy/unlock.

+
+
Parameters:
+
    +
  • ofs_bytes – offset in bytes from the beginning of the buffer

  • +
  • size_bytes – size in bytes of the portion to update. Must be non-zero.

  • +
  • src – pointer to the source data

  • +
  • lockFlags – additional flags to control the locking behavior VBLOCK_*

  • +
+
+
Returns:
+

true if the buffer was successfully updated, false otherwise

+
+
+
+ +
+
+inline int lock(uint32_t ofs_bytes, uint32_t size_bytes, uint16_t **p, int flags)
+

Lock method specified for index buffer with 16-bit indices.

+
+
Parameters:
+
    +
  • ofs_bytes – offset in bytes from the beginning of the buffer

  • +
  • size_bytes – size in bytes of the portion to lock

  • +
  • p – pointer to a pointer that will receive the locked memory address

  • +
  • flags – additional flags to control the locking behavior VBLOCK_*

  • +
+
+
Returns:
+

int 0 if the lock failed, 1 if the lock succeeded

+
+
+
+ +
+
+inline int lock32(uint32_t ofs_bytes, uint32_t size_bytes, uint32_t **p, int flags)
+

Lock method specified for index buffer with 32-bit indices.

+
+
Parameters:
+
    +
  • ofs_bytes – offset in bytes from the beginning of the buffer

  • +
  • size_bytes – size in bytes of the portion to lock

  • +
  • p – pointer to a pointer that will receive the locked memory address

  • +
  • flags – additional flags to control the locking behavior VBLOCK_*

  • +
+
+
Returns:
+

int 0 if the lock failed, 1 if the lock succeeded

+
+
+
+ +
+
+

Protected Functions

+
+
+inline ~Sbuffer() override
+
+ +
+
+
+struct IReloadData
+

Interface for a callback that is called when the buffer is restored after device reset.

+
+

Public Functions

+
+
+inline virtual ~IReloadData()
+
+ +
+
+virtual void reloadD3dRes(Sbuffer *sb) = 0
+

Reloads content of the buffer.

+
+
Parameters:
+

sb – The buffer to fill.

+
+
+
+ +
+
+virtual void destroySelf() = 0
+

Destroys the callback object. Will be called on a buffer destruction.

+
+ +
+
+ +
+ +
+
+namespace d3d
+
+

Functions

+
+
+Sbuffer *create_sbuffer(int struct_size, int elements, unsigned flags, unsigned texfmt, const char *name)
+

Creates a buffer with the specified parameters.

+

The buffer can be used for various purposes, such as constant buffers, structured buffers, byte address buffers, and more. It is an uber method, and not all combinations of parameters are valid. Use d3d::buffers namespace for more specific buffer creation methods.

+
+
Parameters:
+
    +
  • struct_size – The size of each structure in the buffer.

  • +
  • elements – The number of elements in the buffer.

  • +
  • flags – Additional flags for the buffer.

  • +
  • texfmt – The texture format for tBuffers.

  • +
  • name – The name of the buffer.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+bool set_buffer(unsigned shader_stage, unsigned slot, Sbuffer *buffer)
+

Sets an Sbuffer for a specific shader stage and slot.

+
+
Parameters:
+
    +
  • shader_stage – The shader stage to set the buffer for. One of STAGE_ values.

  • +
  • slot – The slot to bind the buffer to.

  • +
  • buffer – A pointer to the Sbuffer to set.

  • +
+
+
Returns:
+

True if the buffer was successfully set, false otherwise.

+
+
+
+ +
+
+bool set_rwbuffer(unsigned shader_stage, unsigned slot, Sbuffer *buffer)
+

Sets a read-write Sbuffer for a specific shader stage and slot.

+
+
Parameters:
+
    +
  • shader_stage – The shader stage to set the buffer for. One of STAGE_ values.

  • +
  • slot – The slot to bind the buffer to.

  • +
  • buffer – A pointer to the Sbuffer to set.

  • +
+
+
Returns:
+

True if the buffer was successfully set, false otherwise.

+
+
+
+ +
+
+
+namespace buffers
+
+

Enums

+
+
+enum class Init : uint32_t
+

Enumeration for buffer initialization options. Not all buffer types currently support it.

+

Values:

+
+
+enumerator No
+

We don’t know anything about buffer content on creation.

+
+ +
+
+enumerator Zero
+

A resource guaranteed to be zeroed on the first usage.

+
+ +
+ +
+
+enum class Indirect : uint32_t
+

The Indirect enum represents different GPU indirect buffer types.

+

Values:

+
+
+enumerator Dispatch
+
+ +
+
+enumerator Draw
+
+ +
+
+enumerator DrawIndexed
+
+ +
+ +
+
+

Functions

+
+
+template<typename T>
inline uint32_t cb_array_reg_count(uint32_t array_size)
+

Calculate the number of register (in const buffer term) count for a given array size of type T. Structure must be aligned as float4 to not have problems with alignment in cbuffer.

+
+
Template Parameters:
+

T – The type of the array elements.

+
+
Parameters:
+

array_size – The size of the array.

+
+
Returns:
+

The registers count.

+
+
+
+ +
+
+template<typename T>
inline uint32_t cb_struct_reg_count()
+

Calculate the number of register (in const buffer term) count for a single instance of a type T. Structure must be aligned as float4 to not have problems with alignment in cbuffer.

+
+
Template Parameters:
+

T – The type of the structure.

+
+
Returns:
+

The registers count.

+
+
+
+ +
+
+inline Sbuffer *create_persistent_cb(uint32_t registers_count, const char *name)
+

Create a persistent constant buffer.

+

Such buffers could be updated from time to time. It is recommended to use cb_array_reg_count and cb_struct_reg_count methods to calculate registers_count.

+
+

Warning

+

This buffer will not be restored after device reset!

+
+
+
Parameters:
+
    +
  • registers_count – The number of registers in the buffer. Must be not bigger than 4096.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
+
+
Returns:
+

Created persistent constant buffer.

+
+
+
+ +
+
+inline Sbuffer *create_one_frame_cb(uint32_t registers_count, const char *name)
+

Create an one frame constant buffer.

+

Such buffers must be updated every frame (you can skip update if the buffer is not used this frame). Because of that we don’t care about its content on device reset. It is recommended to use cb_array_reg_count and cb_struct_reg_count methods to calculate registers_count.

+
+
Parameters:
+
    +
  • registers_count – The number of registers. Must be not bigger than 4096.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
  • buffer_init – The initialization option for the buffer.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_ua_sr_byte_address(uint32_t size_in_dwords, const char *name, Init buffer_init = Init::No)
+

Create a byte address buffer, which can be used thorugh an unordered access view or through a shader resource view in shaders. In a shader you can declare the buffer using (RW)ByteAddressBuffer. Such a buffer is always 16-byte aligned.

+

+
+Todo:
+

Use registers instead of dwords for size because of alignment.

+
+ +

+
+
Parameters:
+
    +
  • size_in_dwords – The size of the buffer in dwords.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
  • buffer_init – The initialization option for the buffer.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_ua_sr_structured(uint32_t structure_size, uint32_t elements_count, const char *name, Init buffer_init = Init::No)
+

Create a structured buffer, which can be used thorugh an unordered access view or through a shader resource view in shaders. In a shader you can declare the buffer using (RW)StructuredBuffer<StructureType>. StructureType is a kind of template parameter here.

+
+
Parameters:
+
    +
  • structure_size – The size of the structure of the buffer elements. Usually it is a sizeof(StructureType).

  • +
  • elements_count – The number of elements in the buffer.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
  • buffer_init – The initialization option for the buffer.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_ua_byte_address(uint32_t size_in_dwords, const char *name)
+

Create a byte address buffer, which can be used thorugh an unordered access view in shaders. In a shader you can declare the buffer using RWByteAddressBuffer. Such a buffer is always 16-byte aligned.

+

+
+Todo:
+

Use registers instead of dwords for size because of alignment.

+
+ +

+
+
Parameters:
+
    +
  • size_in_dwords – The size of the buffer in dwords.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_ua_structured(uint32_t structure_size, uint32_t elements_count, const char *name)
+

Create a structured buffer, which can be used thorugh an unordered access view in shaders. In a shader you can declare the buffer using RWStructuredBuffer<StructureType>. StructureType is a kind of template parameter here.

+
+
Parameters:
+
    +
  • structure_size – The size of the structure of the buffer elements. Usually it is a sizeof(StructureType).

  • +
  • elements_count – The number of elements in the buffer.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_ua_byte_address_readback(uint32_t size_in_dwords, const char *name, Init buffer_init = Init::No)
+

The same as create_ua_byte_address but its content can be read on CPU. Such a buffer is always 16-byte aligned.

+

+
+Todo:
+

Use registers instead of dwords for size because of alignment.

+
+ +

+
+
Parameters:
+
    +
  • size_in_dwords – The size of the buffer in dwords.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
  • buffer_init – The initialization option for the buffer.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_ua_structured_readback(uint32_t structure_size, uint32_t elements_count, const char *name, Init buffer_init = Init::No)
+

The same as create_ua_structured but its content can be read on CPU.

+
+
Parameters:
+
    +
  • structure_size – The size of the structure of the buffer elements. Usually it is a sizeof(StructureType).

  • +
  • elements_count – The number of elements in the buffer.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
  • buffer_init – The initialization option for the buffer.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline uint32_t dword_count_per_call(Indirect indirect_type)
+

Returns the amount of dwords per indirect command parameters based on the given indirect buffer type.

+
+
Parameters:
+

indirect_type – The type of indirect operation (Dispatch, Draw, or DrawIndexed).

+
+
Returns:
+

The amount of dwords per indirect command parameters.

+
+
+
+ +
+
+inline Sbuffer *create_ua_indirect(Indirect indirect_type, uint32_t records_count, const char *name)
+

Creates an indirect buffer filled by the GPU.

+
+
Parameters:
+
    +
  • indirect_type – The type of the indirect commands stored in the buffer.

  • +
  • records_count – The number of indirect records in the buffer.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_indirect(Indirect indirect_type, uint32_t records_count, const char *name)
+

Creates an indirect buffer filled by the CPU.

+
+
Parameters:
+
    +
  • indirect_type – The type of the indirect commands stored in the buffer.

  • +
  • records_count – The number of indirect records in the buffer.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_staging(uint32_t size_in_bytes, const char *name)
+

Creates a buffer for data transfer from CPU to GPU.

+
+
Parameters:
+
    +
  • size_in_bytes – The size of the buffer in bytes.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_persistent_sr_tbuf(uint32_t elements_count, uint32_t format, const char *name, Init buffer_init = Init::No)
+

Create a t-buffer, which can be used through a shader resource view in shaders. In a shader you can declare the buffer using Buffer<BufferFormat>. BufferFormat is a kind of template parameter here.

+

+The total size of the buffer is sizeof(format) * elements_count.

+

It is a persistent buffer, so you can update it with VBLOCK_WRITEONLY flag. Locked part of the buffer content will be overwritten.

+
+

Warning

+

The buffer type can be used only for the code which will be used for DX10 compatible hardware.

+
+
+
Parameters:
+
    +
  • elements_count – The number of elements in the buffer.

  • +
  • format – The format of each element in the buffer. It must be a valid texture format. Not all texture formats are allowed.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
  • buffer_init – The initialization option for the buffer.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_persistent_sr_byte_address(uint32_t size_in_dwords, const char *name, Init buffer_init = Init::No)
+

Create a byte address buffer, which can be used through a shader resource view in shaders. In a shader you can declare the buffer using ByteAddressBuffer.

+

It is a persistent buffer, so you can update it with VBLOCK_WRITEONLY flag. Locked part of the buffer content will be overwritten.

+
+
Parameters:
+
    +
  • size_in_dwords – The size of the buffer in dwords.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
  • buffer_init – The initialization option for the buffer.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_persistent_sr_structured(uint32_t structure_size, uint32_t elements_count, const char *name, Init buffer_init = Init::No)
+

Create a structured buffer, which can be used through a shader resource view in shaders. In a shader you can declare the buffer using StructuredBuffer<StructureType>. StructureType is a kind of template parameter here.

+

It is a persistent buffer, so you can update it with VBLOCK_WRITEONLY flag. Locked part of the buffer content will be overwritten.

+

Declare StructureType in *.hlsli file and include it both in C++ and shader code.

+
+
Parameters:
+
    +
  • structure_size – The size of the structure of the buffer elements. Usually it is a sizeof(StructureType).

  • +
  • elements_count – The number of elements in the buffer.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
  • buffer_init – The initialization option for the buffer.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_one_frame_sr_tbuf(uint32_t elements_count, uint32_t format, const char *name)
+

Create a t-buffer, which can be used through a shader resource view in shaders. In a shader you can declare the buffer using Buffer<BufferFormat>. BufferFormat is a kind of template parameter here.

+

+The total size of the buffer is sizeof(format) * elements_count. To use the buffer, lock it with VBLOCK_DISCARD flag (and with VBLOCK_NOOVERWRITE during the frame) and fill it on CPU. On the next frame data in the buffer could be invalid, so don’t read from it until you fill it with lock again.

+
+

Warning

+

The buffer type can be used only for the code which will be used for DX10 compatible hardware.

+
+
+
Parameters:
+
    +
  • elements_count – The number of elements in the buffer.

  • +
  • format – The format of each element in the buffer. It must be a valid texture format. Not all texture formats are allowed.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_one_frame_sr_byte_address(uint32_t size_in_dwords, const char *name)
+

Create a byte address buffer, which can be used through a shader resource view in shaders. In a shader you can declare the buffer using ByteAddressBuffer.

+

To use the buffer, lock it with VBLOCK_DISCARD flag (and with VBLOCK_NOOVERWRITE during the frame) and fill it on CPU. On the next frame data in the buffer could be invalid, so don’t read from it until you fill it with lock again.

+
+
Parameters:
+
    +
  • size_in_dwords – The size of the buffer in dwords.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_one_frame_sr_structured(uint32_t structure_size, uint32_t elements_count, const char *name)
+

Create a structured buffer, which can be used through a shader resource view in shaders. In a shader you can declare the buffer using StructuredBuffer<StructureType>. StructureType is a kind of template parameter here.

+

To use the buffer, lock it with VBLOCK_DISCARD flag (and with VBLOCK_NOOVERWRITE during the frame) and fill it on CPU. On the next frame data in the buffer could be invalid, so don’t read from it until you fill it with lock again.

+

Declare StructureType in *.hlsli file and include it both in C++ and shader code.

+
+
Parameters:
+
    +
  • structure_size – The size of the structure of the buffer elements. Usually it is a sizeof(StructureType).

  • +
  • elements_count – The number of elements in the buffer.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
+
+
Returns:
+

A pointer to the created buffer.

+
+
+
+ +
+
+inline Sbuffer *create_raytrace_scratch_buffer(uint32_t size_in_bytes, const char *name)
+

Creates a buffer to be used as scratch space for bottom acceleration structure builds and updates. This buffer is used as input for ::raytrace::BottomAccelerationStructureBuildInfo::scratchSpaceBuffer which is used by d3d::build_bottom_acceleration_structure.

+

This buffer is not meant to be accessed in any other way than to be used as a this scratch buffer, as it is used as temporary storage for the on GPU build and update process of bottom acceleration structure and its contents is highly device and device driver specific and can’t be used for anything else anyway.

+

Sizes needed are provided by the d3d::create_raytrace_bottom_acceleration_structure function.

+
+
Parameters:
+
    +
  • size_in_bytes – The size in bytes of the scratch buffer.

  • +
  • name – The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX.

  • +
+
+
Returns:
+

A pointer to the created buffer. Returns nullptr on failure. Possible failures are device lost state or out of memory.

+
+
+
+ +
+
+

Variables

+
+
+constexpr uint32_t CBUFFER_REGISTER_SIZE = 16
+

The size of the cbuffer register. It should have a size divisible by sizeof(float4), because the cbuffer is a set of float4 registers.

+
+ +
+
+constexpr uint32_t BYTE_ADDRESS_ELEMENT_SIZE = sizeof(uint32_t)
+

The size of an element of a byte address buffer.

+
+ +
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/Command.html b/api-references/dagor-render/index/d3dAPI/Command.html new file mode 100644 index 000000000..340286368 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/Command.html @@ -0,0 +1,1065 @@ + + + + + + + Driver commands — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Driver commands

+
+

Enums

+
+
+enum class Drv3dCommand
+

Values:

+
+
+enumerator GETVISIBILITYBEGIN
+
+ +
+
+enumerator GETVISIBILITYEND
+
+ +
+
+enumerator GETVISIBILITYCOUNT
+
+ +
+
+enumerator RELEASE_QUERY
+
+ +
+
+enumerator ACQUIRE_OWNERSHIP
+

acquire/release D3D lock (to perform rendering in non-primary thread)

+
+ +
+
+enumerator RELEASE_OWNERSHIP
+
+ +
+
+enumerator ACQUIRE_LOADING
+

acquire/release a mutex to perform resource loading in non-primary thread and postpone GPU resets, the lock is nonexclusive.

+
+ +
+
+enumerator RELEASE_LOADING
+
+ +
+
+enumerator GET_GPU_FRAME_TIME
+
+ +
+
+enumerator GET_VSYNC_REFRESH_RATE
+
+ +
+
+enumerator SET_PIPELINE_COMPILATION_TIME_BUDGET
+
+ +
+
+enumerator GET_PIPELINE_COMPILATION_QUEUE_LENGTH
+
+ +
+
+enumerator ASYNC_PIPELINE_COMPILATION_FEEDBACK_BEGIN
+
+ +
+
+enumerator ASYNC_PIPELINE_COMPILATION_FEEDBACK_END
+
+ +
+
+enumerator TIMESTAMPFREQ
+
+ +
+
+enumerator TIMESTAMPISSUE
+
+ +
+
+enumerator TIMESTAMPGET
+
+ +
+
+enumerator TIMECLOCKCALIBRATION
+

Gets CPU and GPU time nearly at the same moment.

+
+ +
+
+enumerator FLUSH_STATES
+
+ +
+
+enumerator D3D_FLUSH
+
+ +
+
+enumerator COMPILE_PIPELINE
+

flush pipeline states to compile pipeline

+
+ +
+
+enumerator GET_SECONDARY_BACKBUFFER
+
+ +
+
+enumerator GET_VENDOR
+
+ +
+
+enumerator OVERRIDE_MAX_ANISOTROPY_LEVEL
+
+ +
+
+enumerator MAKE_TEXTURE
+
+ +
+
+enumerator GET_TEXTURE_HANDLE
+
+ +
+
+enumerator BEGIN_EXTERNAL_ACCESS
+
+ +
+
+enumerator END_EXTERNAL_ACCESS
+
+ +
+
+enumerator SET_VS_DEBUG_INFO
+
+ +
+
+enumerator SET_PS_DEBUG_INFO
+
+ +
+
+enumerator BEGIN_MRT_CLEAR_SEQUENCE
+
+ +
+
+enumerator END_MRT_CLEAR_SEQUENCE
+
+ +
+
+enumerator GET_SHADER_CACHE_UUID
+
+ +
+
+enumerator AFTERMATH_MARKER
+
+ +
+
+enumerator START_CAPTURE_FRAME
+
+ +
+
+enumerator IS_HDR_AVAILABLE
+
+ +
+
+enumerator IS_HDR_ENABLED
+
+ +
+
+enumerator INT10_HDR_BUFFER
+
+ +
+
+enumerator HDR_OUTPUT_MODE
+
+ +
+
+enumerator GET_LUMINANCE
+
+ +
+
+enumerator MEM_STAT
+
+ +
+
+enumerator REGISTER_SHADER_DUMP
+
+ +
+
+enumerator GET_SHADER
+
+ +
+
+enumerator PIX_GPU_BEGIN_CAPTURE
+
+ +
+
+enumerator PIX_GPU_END_CAPTURE
+
+ +
+
+enumerator PIX_GPU_CAPTURE_NEXT_FRAMES
+
+ +
+
+enumerator PIX_GPU_CAPTURE_AFTER_LONG_FRAMES
+
+ +
+
+enumerator GET_FRAMERATE_LIMITING_FACTOR
+
+ +
+
+enumerator LOAD_PIPELINE_CACHE
+
+ +
+
+enumerator SAVE_PIPELINE_CACHE
+
+ +
+
+enumerator GET_DLSS
+
+ +
+
+enumerator GET_REFLEX
+
+ +
+
+enumerator GET_XESS_STATE
+
+ +
+
+enumerator IS_XESS_QUALITY_AVAILABLE_AT_RESOLUTION
+
+ +
+
+enumerator GET_XESS_RESOLUTION
+
+ +
+
+enumerator GET_XESS_VERSION
+
+ +
+
+enumerator EXECUTE_DLSS
+
+ +
+
+enumerator EXECUTE_DLSS_G
+
+ +
+
+enumerator EXECUTE_XESS
+
+ +
+
+enumerator SET_XESS_VELOCITY_SCALE
+
+ +
+
+enumerator EXECUTE_FSR
+
+ +
+
+enumerator EXECUTE_FSR2
+
+ +
+
+enumerator GET_FSR2_STATE
+
+ +
+
+enumerator GET_FSR2_RESOLUTION
+
+ +
+
+enumerator EXECUTE_PSSR
+
+ +
+
+enumerator GET_METALFX_UPSCALE_STATE
+
+ +
+
+enumerator EXECUTE_METALFX_UPSCALE
+
+ +
+
+enumerator GET_TIMINGS
+
+ +
+
+enumerator GET_RAYTRACE_ACCELERATION_STRUCTURES_MEMORY_USAGE
+
+ +
+
+enumerator DEBUG_MESSAGE
+
+ +
+
+enumerator GET_MONITORS
+
+ +
+
+enumerator GET_MONITOR_INFO
+
+ +
+
+enumerator GET_RESOLUTIONS_FROM_MONITOR
+
+ +
+
+enumerator GET_VIDEO_MEMORY_BUDGET
+

Returns video memory budget in KiByte values par1: pointer to uint32_t: Total memory budget on the device, possibly less than physical memory of the device par2: pointer to uint32_t: Free memory budget on the device, this is *par1 minus used memory par3: pointer to uint32_t: Used memory, this is *par1 minus *par2 Return: uint32_t: Physical memory of the device

+
+ +
+
+enumerator GET_RENDERING_COMMAND_QUEUE
+
+ +
+
+enumerator GET_INSTANCE
+
+ +
+
+enumerator GET_PHYSICAL_DEVICE
+
+ +
+
+enumerator GET_QUEUE_FAMILY_INDEX
+
+ +
+
+enumerator GET_QUEUE_INDEX
+
+ +
+
+enumerator PROCESS_APP_INACTIVE_UPDATE
+
+ +
+
+enumerator PRE_ROTATE_PASS
+
+ +
+
+enumerator REGISTER_FRAME_COMPLETION_EVENT
+
+ +
+
+enumerator REGISTER_ONE_TIME_FRAME_EXECUTION_EVENT_CALLBACKS
+
+ +
+
+enumerator REPORT_RESOURCE_STATE_TRANSITIONS
+
+ +
+
+enumerator REGISTER_DEVICE_RESET_EVENT_HANDLER
+
+ +
+
+enumerator UNREGISTER_DEVICE_RESET_EVENT_HANDLER
+
+ +
+
+enumerator PREPARE_TEXTURES_FOR_VR_CONSUMPTION
+
+ +
+
+enumerator SET_APP_INFO
+
+ +
+
+enumerator SEND_GPU_CRASH_DUMP
+
+ +
+
+enumerator PROCESS_PENDING_RESOURCE_UPDATED
+
+ +
+
+enumerator GET_PS5_PSSR_STATUS
+
+ +
+
+enumerator SET_FREQ_LEVEL
+
+ +
+
+enumerator ENABLE_IMMEDIATE_FLUSH
+
+ +
+
+enumerator DISABLE_IMMEDIATE_FLUSH
+
+ +
+
+enumerator GET_WORKER_CPU_CORE
+
+ +
+
+enumerator SET_PS5_FSR_VIEW
+
+ +
+
+enumerator SET_HDR
+
+ +
+
+enumerator DEBUG_BREAK
+
+ +
+
+enumerator ADD_DEBUG_BREAK_STRING_SEARCH
+
+ +
+
+enumerator REMOVE_DEBUG_BREAK_STRING_SEARCH
+
+ +
+
+enumerator IS_DEFRAG_REQUESTED
+
+ +
+
+enumerator PROCESS_PENDING_DEFRAG_REQUESTS
+
+ +
+
+enumerator COMPILE_PIPELINE_SET
+
+ +
+
+enumerator GET_BUFFER_GPU_ADDRESS
+
+ +
+
+enumerator ENABLE_WORKER_LOW_LATENCY_MODE
+
+ +
+
+enumerator LOGERR_ON_SYNC
+
+ +
+
+enumerator SET_DRIVER_NETWORD_MANAGER
+
+ +
+
+enumerator GET_CONSOLE_HFR_STATUS
+
+ +
+
+enumerator GET_CONSOLE_HFR_SUPPORTED
+
+ +
+
+enumerator GET_RESOURCE_STATISTICS
+
+ +
+
+enumerator DELAY_SYNC
+
+ +
+
+enumerator CONTINUE_SYNC
+
+ +
+
+enumerator CHANGE_QUEUE
+
+ +
+
+enumerator USER
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator DRV3D_CPU_FREQ_TYPE_QPC
+
+ +
+
+enumerator DRV3D_CPU_FREQ_TYPE_REF
+
+ +
+
+enumerator DRV3D_CPU_FREQ_NSEC
+
+ +
+
+enumerator DRV3D_CPU_FREQ_TYPE_PROFILE
+
+ +
+
+enumerator DRV3D_CPU_FREQ_TYPE_UNKNOWN
+
+ +
+ +
+
+
+struct FrameEvents
+
+

Public Functions

+
+
+virtual ~FrameEvents() = default
+
+ +
+
+virtual void beginFrameEvent() = 0
+
+ +
+
+virtual void endFrameEvent() = 0
+
+ +
+
+ +
+
+struct DeviceResetEventHandler
+
+

Public Functions

+
+
+virtual ~DeviceResetEventHandler() = default
+
+ +
+
+virtual void preRecovery() = 0
+
+ +
+
+virtual void recovery() = 0
+
+ +
+
+ +
+
+struct Drv3dTimings
+
+

Public Members

+
+
+long long frontendUpdateScreenInterval
+
+ +
+
+long long frontendToBackendUpdateScreenLatency
+
+ +
+
+long long frontendBackendWaitDuration
+
+ +
+
+long long backendFrontendWaitDuration
+
+ +
+
+long long gpuWaitDuration
+
+ +
+
+long long presentDuration
+
+ +
+
+long long backbufferAcquireDuration
+
+ +
+
+long long frontendWaitForSwapchainDuration
+
+ +
+
+ +
+
+struct CompilePipelineSet
+

All values are optional, but graphics and mesh pipelines can not be created without output and render state sets.

+
+

Public Members

+
+
+const char *defaultFormat
+

V1 and V2 value. When not specified, the driver assumes its driver specific format (if supported) and otherwise engine.

+
+ +
+
+const DataBlock *featureSet
+

V1 and V2 block. A block with a set of feature sets referenced by pipelines in the pipeline sets to indicate required features.

+
+ +
+
+const DataBlock *inputLayoutSet
+

V1 and V2 block. A block with a set of blocks describing input layouts.

+
+ +
+
+const DataBlock *renderStateSet
+

V1 and V2 block. A block with a set of blocks describing render states. The driver will ignore render states that are incompatible with the system.

+
+ +
+
+const DataBlock *outputFormatSet
+

V1 and V2 block. A block with a set of blocks describing output format states. The driver will ignore output format states that are incompatible wit the system.

+
+ +
+
+const DataBlock *graphicsPipelineSet
+

V1 block. A block with a set of blocks describing graphics pipelines. The driver will ignore pipelines using unsupported input layouts, render states or output formats.

+
+ +
+
+const DataBlock *meshPipelineSet
+

V1 block. A block with a set of blocks describing mesh pipelines. The driver will ignore pipelines using unsupported render states or output formats.

+
+ +
+
+const DataBlock *computePipelineSet
+

V1 block. A block with a set of blocks describing compute pipelines.

+
+ +
+
+const DataBlock *signature
+

V2 block, this block stores shader class signatures, this ensures we try not to load incompatible shader class uses.

+
+ +
+
+const DataBlock *computeSet
+

V2 block, new compute use set, uses shader class names and codes.

+
+ +
+
+const DataBlock *graphicsSet
+

V2 block, new graphics use set, uses shader class names and codes.

+
+ +
+
+const DataBlock *graphicsNullPixelOverrideSet
+

V2 block, new graphics use set, uses shader class names and codes. This set has pipelines where the paired pixel shader is replaced by the null pixel shader.

+
+ +
+
+const DataBlock *graphicsPixelOverrideSet
+

V2 block, new graphics use set, uses shader class names and codes. This set has pipelines where the paired pixel shader uses a differen shader class name and codes than the vertex shader.

+
+ +
+
+ +
+
+struct Drv3dMakeTextureParams
+
+

Public Members

+
+
+void *tex
+
+ +
+
+const char *name
+
+ +
+
+int flg
+
+ +
+
+int w
+
+ +
+
+int h
+
+ +
+
+int layers
+
+ +
+
+int mips
+
+ +
+
+ResourceBarrier currentState
+
+ +
+
+ +
+
+namespace d3d
+
+

Functions

+
+
+int driver_command(Drv3dCommand command, void *par1 = nullptr, void *par2 = nullptr, void *par3 = nullptr)
+

send specific command to driver

+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/Dispatch.html b/api-references/dagor-render/index/d3dAPI/Dispatch.html new file mode 100644 index 000000000..29b8c0595 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/Dispatch.html @@ -0,0 +1,260 @@ + + + + + + + Compute shader dispatch API — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Compute shader dispatch API

+
+
+namespace d3d
+
+

Functions

+
+
+bool dispatch(uint32_t thread_group_x, uint32_t thread_group_y, uint32_t thread_group_z, GpuPipeline gpu_pipeline = GpuPipeline::GRAPHICS)
+

Dispatches a compute shader with the specified thread group dimensions.

+
+

Warning

+

gpu_pipeline argument doesn’t work currently.

+
+
+
Parameters:
+
    +
  • thread_group_x – The number of thread groups in the X dimension.

  • +
  • thread_group_y – The number of thread groups in the Y dimension.

  • +
  • thread_group_z – The number of thread groups in the Z dimension.

  • +
  • gpu_pipeline – The GPU pipeline to use for dispatching (default: GpuPipeline::GRAPHICS).

  • +
+
+
Returns:
+

True if the dispatch was successful, false otherwise.

+
+
+
+ +
+
+bool dispatch_indirect(Sbuffer *args, uint32_t byte_offset = 0, GpuPipeline gpu_pipeline = GpuPipeline::GRAPHICS)
+

Dispatches a compute shader indirectly using the specified argument buffer.

+
+

Warning

+

gpu_pipeline argument doesn’t work currently.

+
+
+
Parameters:
+
    +
  • args – The argument buffer containing the dispatch parameters. The buffer must be created with the d3d::buffers::create_indirect or d3d::buffers::create_ua_indirect methods and Indirect::Dispatch argument. The buffer should contain the following data: uint32_t thread_group_x, uint32_t thread_group_y, uint32_t thread_group_z.

  • +
  • byte_offset – The byte offset within the argument buffer (default: 0).

  • +
  • gpu_pipeline – The GPU pipeline to use for dispatching (default: GpuPipeline::GRAPHICS).

  • +
+
+
Returns:
+

True if the dispatch was successful, false otherwise.

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/DispatchMesh.html b/api-references/dagor-render/index/d3dAPI/DispatchMesh.html new file mode 100644 index 000000000..4d79e2d43 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/DispatchMesh.html @@ -0,0 +1,266 @@ + + + + + + + Mesh shader dispatch API — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Mesh shader dispatch API

+
+
+namespace d3d
+
+

Functions

+
+
+void dispatch_mesh(uint32_t thread_group_x, uint32_t thread_group_y, uint32_t thread_group_z)
+

Dispatches a mesh shader with the specified thread group dimensions.

+

Max value for each direction is 64k, product of all dimensions can not exceed 2^22

+
+
Parameters:
+
    +
  • thread_group_x – The number of thread groups in the X direction.

  • +
  • thread_group_y – The number of thread groups in the Y direction.

  • +
  • thread_group_z – The number of thread groups in the Z direction.

  • +
+
+
+
+ +
+
+void dispatch_mesh_indirect(Sbuffer *args, uint32_t dispatch_count, uint32_t stride_bytes, uint32_t byte_offset = 0)
+

Dispatches a mesh shader indirectly using the provided arguments.

+
+
Parameters:
+
    +
  • args – The buffer containing the dispatch arguments. Buffer should contain structures of the following layout: struct DispatchArgs { uint32_t thread_group_x; uint32_t thread_group_y; uint32_t thread_group_z; };

  • +
  • dispatch_count – The number of dispatches to execute.

  • +
  • stride_bytes – The stride between dispatch arguments in bytes.

  • +
  • byte_offset – The byte offset into the buffer where the dispatch arguments start (default = 0).

  • +
+
+
+
+ +
+
+void dispatch_mesh_indirect_count(Sbuffer *args, uint32_t args_stride_bytes, uint32_t args_byte_offset, Sbuffer *count, uint32_t count_byte_offset, uint32_t max_count)
+

Dispatches a mesh shader indirectly using the provided arguments and a count buffer.

+

Variant of dispatch_mesh_indirect where ‘dispatch_count’ is read by the GPU from ‘count’ buffer at ‘count_offset’ (as uint32_t), this value can not exceed ‘max_count’.

+
+
Parameters:
+
    +
  • args – The buffer containing the dispatch arguments.

  • +
  • args_stride_bytes – The stride between dispatch arguments in bytes.

  • +
  • args_byte_offset – The byte offset into the buffer where the dispatch arguments start.

  • +
  • count – The buffer containing the dispatch count.

  • +
  • count_byte_offset – The byte offset into the count buffer where the dispatch count starts.

  • +
  • max_count – The maximum value that the dispatch count can have.

  • +
+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/Draw.html b/api-references/dagor-render/index/d3dAPI/Draw.html new file mode 100644 index 000000000..f18a0bb05 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/Draw.html @@ -0,0 +1,465 @@ + + + + + + + Draw calls API — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Draw calls API

+
+
+namespace d3d
+
+

Functions

+
+
+bool draw_base(int type, int start, int numprim, uint32_t num_instances, uint32_t start_instance)
+

Draw primitives.

+
+
Parameters:
+
    +
  • type – The type of primitives to draw. One of PRIM_XXX enum.

  • +
  • start – The starting index of the primitives.

  • +
  • numprim – The number of primitives to draw.

  • +
  • num_instances – The number of instances to draw.

  • +
  • start_instance – The starting instance index.

  • +
+
+
Returns:
+

True if the draw operation was successful, false otherwise.

+
+
+
+ +
+
+inline bool draw(int type, int start, int numprim)
+

Draw primitives with a single instance.

+
+
Parameters:
+
    +
  • type – The type of primitives to draw. One of PRIM_XXX enum.

  • +
  • start – The starting index of the primitives.

  • +
  • numprim – The number of primitives to draw.

  • +
+
+
Returns:
+

True if the draw operation was successful, false otherwise.

+
+
+
+ +
+
+inline bool draw_instanced(int type, int start, int numprim, uint32_t num_instances, uint32_t start_instance = 0)
+

Draw primitives with multiple instances.

+
+
Parameters:
+
    +
  • type – The type of primitives to draw. One of PRIM_XXX enum.

  • +
  • start – The starting index of the primitives.

  • +
  • numprim – The number of primitives to draw.

  • +
  • num_instances – The number of instances to draw.

  • +
  • start_instance – The starting instance index.

  • +
+
+
Returns:
+

True if the draw operation was successful, false otherwise.

+
+
+
+ +
+
+bool drawind_base(int type, int startind, int numprim, int base_vertex, uint32_t num_instances, uint32_t start_instance)
+

Draw indexed primitives.

+
+
Parameters:
+
    +
  • type – The type of primitives to draw. One of PRIM_XXX enum.

  • +
  • startind – The starting index of the primitives.

  • +
  • numprim – The number of primitives to draw.

  • +
  • base_vertex – The base vertex index.

  • +
  • num_instances – The number of instances to draw.

  • +
  • start_instance – The starting instance index.

  • +
+
+
Returns:
+

True if the draw operation was successful, false otherwise.

+
+
+
+ +
+
+inline bool drawind_instanced(int type, int startind, int numprim, int base_vertex, uint32_t num_instances, uint32_t start_instance = 0)
+

Draw indexed primitives with multiple instances.

+
+
Parameters:
+
    +
  • type – The type of primitives to draw. One of PRIM_XXX enum.

  • +
  • startind – The starting index of the primitives.

  • +
  • numprim – The number of primitives to draw.

  • +
  • base_vertex – The base vertex index.

  • +
  • num_instances – The number of instances to draw.

  • +
  • start_instance – The starting instance index.

  • +
+
+
Returns:
+

True if the draw operation was successful, false otherwise.

+
+
+
+ +
+
+inline bool drawind(int type, int startind, int numprim, int base_vertex)
+

Draw indexed primitives with a single instance.

+
+
Parameters:
+
    +
  • type – The type of primitives to draw. One of PRIM_XXX enum.

  • +
  • startind – The starting index of the primitives.

  • +
  • numprim – The number of primitives to draw.

  • +
  • base_vertex – The base vertex index.

  • +
+
+
Returns:
+

True if the draw operation was successful, false otherwise.

+
+
+
+ +
+
+bool draw_up(int type, int numprim, const void *ptr, int stride_bytes)
+

Draw primitives from a user pointer (rather slow).

+

+
+Deprecated:
+

Remove this method. It uncontrollably allocates memory in driver.

+
+ +

+
+
Parameters:
+
    +
  • type – The type of primitives to draw. One of PRIM_XXX enum.

  • +
  • numprim – The number of primitives to draw.

  • +
  • ptr – The pointer to the vertex data.

  • +
  • stride_bytes – The stride between vertices in bytes.

  • +
+
+
Returns:
+

True if the draw operation was successful, false otherwise.

+
+
+
+ +
+
+bool drawind_up(int type, int minvert, int numvert, int numprim, const uint16_t *ind, const void *ptr, int stride_bytes)
+

Draw indexed primitives from a user pointer (rather slow).

+

+
+Deprecated:
+

Remove this method. It uncontrollably allocates memory in driver.

+
+ +

+
+
Parameters:
+
    +
  • type – The type of primitives to draw. One of PRIM_XXX enum.

  • +
  • minvert – The minimum vertex index.

  • +
  • numvert – The number of vertices.

  • +
  • numprim – The number of primitives to draw.

  • +
  • ind – The pointer to the index data.

  • +
  • ptr – The pointer to the vertex data.

  • +
  • stride_bytes – The stride between vertices in bytes.

  • +
+
+
Returns:
+

True if the draw operation was successful, false otherwise.

+
+
+
+ +
+
+bool draw_indirect(int type, Sbuffer *args, uint32_t byte_offset = 0)
+

Draw primitives using indirect parameters.

+
+
Parameters:
+
    +
  • type – The type of primitives to draw. One of PRIM_XXX enum.

  • +
  • args – The buffer containing the draw parameters. The buffer must contain DrawIndirectArgs structure.

  • +
  • byte_offset – The byte offset into the buffer.

  • +
+
+
Returns:
+

True if the draw operation was successful, false otherwise.

+
+
+
+ +
+
+bool draw_indexed_indirect(int type, Sbuffer *args, uint32_t byte_offset = 0)
+

Draw indexed primitives using indirect parameters.

+
+
Parameters:
+
    +
  • type – The type of primitives to draw. One of PRIM_XXX enum.

  • +
  • args – The buffer containing the draw parameters. The buffer must contain DrawIndexedIndirectArgs structure.

  • +
  • byte_offset – The byte offset into the buffer.

  • +
+
+
Returns:
+

True if the draw operation was successful, false otherwise.

+
+
+
+ +
+
+bool multi_draw_indirect(int prim_type, Sbuffer *args, uint32_t draw_count, uint32_t stride_bytes, uint32_t byte_offset = 0)
+

Draw multiple instances of primitives using indirect parameters.

+
+
Parameters:
+
    +
  • prim_type – The type of primitives to draw. One of PRIM_XXX enum.

  • +
  • args – The buffer containing the draw parameters. The buffer must contain DrawIndirectArgs structures.

  • +
  • draw_count – The number of draw calls.

  • +
  • stride_bytes – The stride between draw parameters in bytes.

  • +
  • byte_offset – The byte offset into the buffer.

  • +
+
+
Returns:
+

True if the draw operation was successful, false otherwise.

+
+
+
+ +
+
+bool multi_draw_indexed_indirect(int prim_type, Sbuffer *args, uint32_t draw_count, uint32_t stride_bytes, uint32_t byte_offset = 0)
+

Draw multiple instances of indexed primitives using indirect parameters.

+
+
Parameters:
+
    +
  • prim_type – The type of primitives to draw. One of PRIM_XXX enum.

  • +
  • args – The buffer containing the draw parameters. The buffer must contain DrawIndexedIndirectArgs structures.

  • +
  • draw_count – The number of draw calls.

  • +
  • stride_bytes – The stride between draw parameters in bytes.

  • +
  • byte_offset – The byte offset into the buffer.

  • +
+
+
Returns:
+

True if the draw operation was successful, false otherwise.

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/Heap.html b/api-references/dagor-render/index/d3dAPI/Heap.html new file mode 100644 index 000000000..ecb1d22b9 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/Heap.html @@ -0,0 +1,1157 @@ + + + + + + + Heaps — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Heaps

+

Heaps API provides heap object allocation and resource placement in this heap objects. +Resources may be aliased if memory ranges of multiple resources are overlapping, +in this case alive/to-be-used resources must be marked active via activate_*() methods +and dead/non-used resources must be marked inactive via deactivate_*() methods

+

Use ResourceDescription to query required heap group, size and aligment with get_resource_allocation_properties() +Having this data, allocate fitting heap with create_resource_heap() and place resource there at will +with place_*_in_resource_heap()

+

For ResourceHeapGroup description see ResourceHeapGroupProperties

+
+
+

Callable d3d:: methods

+
+
+ResourceAllocationProperties get_resource_allocation_properties(const ResourceDescription &desc)
+

Retrieves the resource allocation properties for a given resource description.

+
+
Parameters:
+

desc – The resource description. Resource descriptions that would describe a resource with one or more of its dimensions being 0 will result in an error.

+
+
Returns:
+

The resource allocation properties. On error sizeInBytes field of the returned value will be 0.

+
+
+
+ +
+
+ResourceHeap *create_resource_heap(ResourceHeapGroup *heap_group, size_t size, ResourceHeapCreateFlags flags)
+

Creates a resource heap with the specified size and flags.

+
+
Parameters:
+
    +
  • heap_group – The resource heap group.

  • +
  • size – The size of the resource heap in bytes. A value of 0 is invalid and results in undefined behavior.

  • +
  • flags – The flags for creating the resource heap.

  • +
+
+
Returns:
+

A pointer to the created resource heap. May be nullptr on error, like out of memory or invalid inputs.

+
+
+
+ +
+
+void destroy_resource_heap(ResourceHeap *heap)
+

Destroys a resource heap.

+
+
Parameters:
+

heap – The resource heap to destroy.

+
+
+
+ +
+
+Sbuffer *place_buffer_in_resource_heap(ResourceHeap *heap, const ResourceDescription &desc, size_t offset, const ResourceAllocationProperties &alloc_info, const char *name)
+

Places a buffer in a resource heap at the specified offset.

+

The heap group of heap has to match the heap group of alloc_info that was returned by get_resource_allocation_properties.

+
+
Parameters:
+
    +
  • heap – The resource heap.

  • +
  • desc – The resource description.

  • +
  • offset – The offset in the resource heap in bytes.

  • +
  • alloc_info – The resource allocation properties.

  • +
  • name – The name of the buffer.

  • +
+
+
Returns:
+

A pointer to the placed buffer. May be nullptr on error, like invalid inputs.

+
+
+
+ +
+
+BaseTexture *place_texture_in_resource_heap(ResourceHeap *heap, const ResourceDescription &desc, size_t offset, const ResourceAllocationProperties &alloc_info, const char *name)
+

Places a texture in a resource heap at the specified offset.

+

The heap group of heap has to match the heap group of alloc_info that was returned by get_resource_allocation_properties.

+
+
Parameters:
+
    +
  • heap – The resource heap.

  • +
  • desc – The resource description.

  • +
  • offset – The offset in the resource heap in bytes.

  • +
  • alloc_info – The resource allocation properties.

  • +
  • name – The name of the texture.

  • +
+
+
Returns:
+

A pointer to the placed texture. May be nullptr on error, like invalid inputs.

+
+
+
+ +
+
+ResourceHeapGroupProperties get_resource_heap_group_properties(ResourceHeapGroup *heap_group)
+

Retrieves the resource heap group properties for a given resource heap group.

+
+

Note

+

Different groups may return identical values, this does not mean that the heap group is identical or can be substituted for each another. Heap groups represent purpose bound memory that may have device specific properties, that limit the use of a heap group for certain resource types.

+
+
+
Parameters:
+

heap_group – The resource heap group.

+
+
Returns:
+

The resource heap group properties.

+
+
+
+ +
+
+void activate_buffer(Sbuffer *buf, ResourceActivationAction action, const ResourceClearValue &value = {}, GpuPipeline gpu_pipeline = GpuPipeline::GRAPHICS)
+

Activates a buffer with the specified action and optional clear value.

+

Only activated placed buffer could be safely used. Using the buffer before being activated results in undefined behavior.

+
+

Warning

+

gpu_pipeline parameter doesn’t work currently.

+
+
+
Parameters:
+
    +
  • buf – The buffer to activate.

  • +
  • action – The activation action.

  • +
  • value – The clear value (optional).

  • +
  • gpu_pipeline – The GPU pipeline to use (optional).

  • +
+
+
+
+ +
+
+void activate_texture(BaseTexture *tex, ResourceActivationAction action, const ResourceClearValue &value = {}, GpuPipeline gpu_pipeline = GpuPipeline::GRAPHICS)
+

Activates a texture with the specified action and optional clear value.

+

Only activated placed textures could be safely used. Using the texture before being activated results in undefined behavior.

+
+

Warning

+

gpu_pipeline parameter doesn’t work currently.

+
+
+
Parameters:
+
    +
  • tex – The texture to activate.

  • +
  • action – The activation action.

  • +
  • value – The clear value (optional).

  • +
  • gpu_pipeline – The GPU pipeline to use (optional).

  • +
+
+
+
+ +
+
+void deactivate_buffer(Sbuffer *buf, GpuPipeline gpu_pipeline = GpuPipeline::GRAPHICS)
+

Deactivates a buffer with the specified GPU pipeline.

+

The method call is necessary to have a correct state of the resources on a heap. Using the buffer after being deactivated results in undefined behavior.

+
+

Warning

+

gpu_pipeline parameter doesn’t work currently.

+
+
+
Parameters:
+
    +
  • buf – The placed buffer to deactivate.

  • +
  • gpu_pipeline – The GPU pipeline to use (optional).

  • +
+
+
+
+ +
+
+void deactivate_texture(BaseTexture *tex, GpuPipeline gpu_pipeline = GpuPipeline::GRAPHICS)
+

Deactivates a texture with the specified GPU pipeline.

+

The method call is necessary to have a correct state of the resources on a heap. Using the texture after being deactivated results in undefined behavior.

+
+

Warning

+

gpu_pipeline parameter doesn’t work currently.

+
+
+
Parameters:
+
    +
  • tex – The placed texture to deactivate.

  • +
  • gpu_pipeline – The GPU pipeline to use (optional).

  • +
+
+
+
+ +
+

Defines

+
+
+FIELD_MATCHES(field)
+
+ +
+
+

Typedefs

+
+
+using ResourceHeapCreateFlags = uint32_t
+

Definition of ResourceHeapCreateFlags type. See ResourceHeapCreateFlag for valid values.

+
+ +
+
+

Enums

+
+
+enum class ResourceActivationAction : unsigned
+

Enumeration representing different resource activation actions.

+

Values:

+
+
+enumerator REWRITE_AS_COPY_DESTINATION
+

Rewrite the resource as a copy destination.

+
+ +
+
+enumerator REWRITE_AS_UAV
+

Rewrite the resource as an unordered access view.

+
+ +
+
+enumerator REWRITE_AS_RTV_DSV
+

Rewrite the resource as a render target or depth-stencil view.

+
+ +
+
+enumerator CLEAR_F_AS_UAV
+

Clear the resource as a floating-point unordered access view.

+
+ +
+
+enumerator CLEAR_I_AS_UAV
+

Clear the resource as an integer unordered access view.

+
+ +
+
+enumerator CLEAR_AS_RTV_DSV
+

Clear the resource as a render target or depth-stencil view.

+
+ +
+
+enumerator DISCARD_AS_UAV
+

Discard the resource as an unordered access view.

+
+ +
+
+enumerator DISCARD_AS_RTV_DSV
+

Discard the resource as a render target or depth-stencil view.

+
+ +
+ +
+
+enum ResourceHeapCreateFlag
+

A set of flags that steer the behavior of the driver during creation of resource heaps.

+

Values:

+
+
+enumerator RHCF_NONE
+

By default the drivers are allowed to use already reserved memory of internal heaps, to source the needed memory. Drivers are also allowed to allocate larger memory heaps and use the excess memory for their internal resource and memory management.

+
+ +
+
+enumerator RHCF_REQUIRES_DEDICATED_HEAP
+

Resource heaps created with this flag, will use their own dedicate memory heap to supply the memory for resources. When this flag is not used to create a resource heap, the driver is allowed to source the need memory from existing driver managed heaps, or create a larger underlying memory heap and use the excess memory for its internal resource and memory management. This flag should be used only when really necessary, as it restricts the drivers option to use already reserved memory for this heap and increase the memory pressure on the system.

+
+

Note

+

That on certain system configurations, for example GDK with predefined memory heap allocations, this flag may be ignored by the driver, as it would otherwise not be able to satisfy heap creation request.

+
+
+ +
+ +
+
+
+struct BasicResourceDescription
+

Basic resource description that contains common fields for all GPU resource types.

+

Subclassed by BasicTextureResourceDescription, BufferResourceDescription

+
+

Public Members

+
+
+uint32_t cFlags
+

The resource creation flags.

+
+ +
+
+ResourceActivationAction activation
+

The resource activation action.

+
+ +
+
+ResourceClearValue clearValue
+

The clear value.

+
+ +
+
+ +
+
+struct BufferResourceDescription : public BasicResourceDescription
+

Buffer resource description that contains fields specific to buffer resources.

+
+

Public Members

+
+
+uint32_t elementSizeInBytes
+

The size of a single element in bytes.

+
+ +
+
+uint32_t elementCount
+

The number of elements in the buffer.

+
+ +
+
+uint32_t viewFormat
+

The view format of the buffer.

+
+ +
+
+ +
+
+struct BasicTextureResourceDescription : public BasicResourceDescription
+

Basic texture resource description that contains fields common to all texture resources.

+

Subclassed by CubeTextureResourceDescription, TextureResourceDescription

+
+

Public Members

+
+
+uint32_t mipLevels
+

The number of mip levels.

+
+ +
+
+ +
+
+struct TextureResourceDescription : public BasicTextureResourceDescription
+

Texture resource description that contains fields specific to 2D textures.

+

Subclassed by ArrayTextureResourceDescription, VolTextureResourceDescription

+
+

Public Members

+
+
+uint32_t width
+

The width of the texture.

+
+ +
+
+uint32_t height
+

The height of the texture.

+
+ +
+
+ +
+
+struct VolTextureResourceDescription : public TextureResourceDescription
+

Volume texture resource description that contains fields specific to volume textures.

+
+

Public Members

+
+
+uint32_t depth
+

The depth of the volume texture.

+
+ +
+
+ +
+
+struct ArrayTextureResourceDescription : public TextureResourceDescription
+

Array texture resource description that contains fields specific to array textures.

+
+

Public Members

+
+
+uint32_t arrayLayers
+

The number of array layers.

+
+ +
+
+ +
+
+struct CubeTextureResourceDescription : public BasicTextureResourceDescription
+

Cube texture resource description that contains fields specific to cube textures.

+

Subclassed by ArrayCubeTextureResourceDescription

+
+

Public Members

+
+
+uint32_t extent
+

The extent of the cube texture.

+
+ +
+
+ +
+
+struct ArrayCubeTextureResourceDescription : public CubeTextureResourceDescription
+

Array cube texture resource description that contains fields specific to array cube textures.

+
+

Public Members

+
+
+uint32_t cubes
+

The number of cubes in the array cube texture.

+
+ +
+
+ +
+
+struct ResourceDescription
+

A common type for a resource description that can be used to describe any type of GPU resource.

+
+

Public Types

+
+
+using HashT = size_t
+

The type of the hash value.

+
+ +
+
+

Public Functions

+
+
+ResourceDescription() = default
+

Default constructor.

+
+ +
+
+ResourceDescription(const ResourceDescription&) = default
+

Copy constructor.

+
+ +
+
+ResourceDescription &operator=(const ResourceDescription&) = default
+

Copy assignment operator.

+
+ +
+
+inline ResourceDescription(const BufferResourceDescription &buf)
+

Constructor for buffer resources.

+
+ +
+
+inline ResourceDescription(const TextureResourceDescription &tex)
+

Constructor for 2D textures.

+
+ +
+
+inline ResourceDescription(const VolTextureResourceDescription &tex)
+

Constructor for volume textures.

+
+ +
+
+inline ResourceDescription(const ArrayTextureResourceDescription &tex)
+

Constructor for array textures.

+
+ +
+
+inline ResourceDescription(const CubeTextureResourceDescription &tex)
+

Constructor for cube textures.

+
+ +
+
+inline ResourceDescription(const ArrayCubeTextureResourceDescription &tex)
+

Constructor for array cube textures.

+
+ +
+
+inline bool operator==(const ResourceDescription &r) const
+

Equality operator for resource descriptions.

+

The operator compares all necessary fields of the resource descriptions for equality.

+
+
Parameters:
+

r – The resource description to compare with.

+
+
Returns:
+

True if the resource descriptions are equal, false otherwise.

+
+
+
+ +
+
+inline HashT hash() const
+

Computes the hash value of the resource description.

+
+
Returns:
+

The hash value of the resource description.

+
+
+
+ +
+
+

Public Members

+
+
+uint32_t resType
+

The type of the resource. One of the RES3D_* constants.

+
+ +
+
+BasicResourceDescription asBasicRes
+

The basic resource description.

+
+ +
+
+BufferResourceDescription asBufferRes
+

The buffer resource description.

+
+ +
+
+BasicTextureResourceDescription asBasicTexRes
+

The basic texture resource description.

+
+ +
+
+TextureResourceDescription asTexRes
+

The 2D texture resource description.

+
+ +
+
+VolTextureResourceDescription asVolTexRes
+

The volume texture resource description.

+
+ +
+
+ArrayTextureResourceDescription asArrayTexRes
+

The array texture resource description.

+
+ +
+
+CubeTextureResourceDescription asCubeTexRes
+

The cube texture resource description.

+
+ +
+
+ArrayCubeTextureResourceDescription asArrayCubeTexRes
+

The array cube texture resource description.

+
+ +
+
+union ResourceDescription::[anonymous] [anonymous]
+
+ +
+
+

Private Functions

+
+
+inline HashT hashPack() const
+

Hashes an empty tuple of values.

+
+
Returns:
+

HashT the hash value of the tuple.

+
+
+
+ +
+
+template<typename T, typename ...Ts>
inline HashT hashPack(const T &first, const Ts&... other) const
+

Hashes a tuple of values.

+
+
Template Parameters:
+
    +
  • T – type of the first value.

  • +
  • Ts – types of the other values.

  • +
+
+
Parameters:
+
    +
  • first – the first value.

  • +
  • other – the other values.

  • +
+
+
Returns:
+

HashT the hash value of the tuple.

+
+
+
+ +
+
+ +
+
+struct ResourceHeapGroupProperties
+

Properties of a resource heap group. A heap group is a type of memory with specific properties.

+
+

Note

+

Heap groups can not be substitutes for different groups with equal properties, as some devices have different memory types with the same public properties, but with purpose bound properties that are identified by a heap group. For example, older NVIDIA hardware can not put render target and non render target textures into the same memory region, they have to be specific for render targets and non render targets, this is exposed as different heap groups, but they have the same public properties, as they are all reside on GPU local memory.

+
+
+

Public Members

+
+
+uint32_t flags
+

Flags of the resource heap group represented as a single dword.

+
+ +
+
+bool isCPUVisible
+

If true, the CPU can access this memory directly. On consoles this is usually true for all heap groups, on PC only for system memory heap groups.

+
+ +
+
+bool isGPULocal
+

If true, the GPU can access this memory directly without going over a bus like PCIE. On consoles this is usually true for all heap groups, on PC only for memory dedicated to the GPU.

+
+ +
+
+bool isOnChip
+

Special on chip memory, like ESRAM of the XB1.

+
+ +
+
+union ResourceHeapGroupProperties::[anonymous] [anonymous]
+
+ +
+
+uint64_t maxResourceSize
+

The maximum size of a resource that can be placed into a heap of this group.

+
+ +
+
+uint64_t maxHeapSize
+

the maximum size of a individual heap, this is usually limited by the amount that is installed in the system. Drivers may impose other limitations.

+
+ +
+
+uint64_t optimalMaxHeapSize
+

This is a hint for the user to try to aim for this heap size for best performance. Larger heaps until maxHeapSize are still possible, but larger heaps than optimalMaxHeapSize may yield worse performance, as the runtime may has to use sub-optimal memory sources to satisfy the allocation request. A value of 0 indicates that there is no optimal size and any size is expected to perform similarly.

+

For example on DX12 on Windows the optimal size is 64 MiBytes, suggested by MS representatives, as windows may not be able to provide heaps in the requested memory source.

+
+ +
+
+ +
+
+struct ResourceAllocationProperties
+

Properties of a resource allocation.

+
+

Public Members

+
+
+size_t sizeInBytes
+

The size of the resource allocation in bytes.

+
+ +
+
+size_t offsetAlignment
+

The alignment of the offset in bytes.

+
+ +
+
+ResourceHeapGroup *heapGroup
+

The resource heap group.

+
+ +
+
+ +
+
+namespace eastl
+
+
+template<>
class hash<ResourceDescription>
+

Hash function specialization for ResourceDescription.

+
+

Public Functions

+
+
+inline size_t operator()(const ResourceDescription &desc) const
+

Computes the hash value of a resource description.

+
+
Parameters:
+

desc – The resource description.

+
+
Returns:
+

The hash value of the resource description.

+
+
+
+ +
+
+ +
+ +
+
+namespace d3d
+
+

Functions

+
+
+ResourceAllocationProperties get_resource_allocation_properties(const ResourceDescription &desc)
+

Retrieves the resource allocation properties for a given resource description.

+
+
Parameters:
+

desc – The resource description. Resource descriptions that would describe a resource with one or more of its dimensions being 0 will result in an error.

+
+
Returns:
+

The resource allocation properties. On error sizeInBytes field of the returned value will be 0.

+
+
+
+ +
+
+ResourceHeap *create_resource_heap(ResourceHeapGroup *heap_group, size_t size, ResourceHeapCreateFlags flags)
+

Creates a resource heap with the specified size and flags.

+
+
Parameters:
+
    +
  • heap_group – The resource heap group.

  • +
  • size – The size of the resource heap in bytes. A value of 0 is invalid and results in undefined behavior.

  • +
  • flags – The flags for creating the resource heap.

  • +
+
+
Returns:
+

A pointer to the created resource heap. May be nullptr on error, like out of memory or invalid inputs.

+
+
+
+ +
+
+void destroy_resource_heap(ResourceHeap *heap)
+

Destroys a resource heap.

+
+
Parameters:
+

heap – The resource heap to destroy.

+
+
+
+ +
+
+Sbuffer *place_buffer_in_resource_heap(ResourceHeap *heap, const ResourceDescription &desc, size_t offset, const ResourceAllocationProperties &alloc_info, const char *name)
+

Places a buffer in a resource heap at the specified offset.

+

The heap group of heap has to match the heap group of alloc_info that was returned by get_resource_allocation_properties.

+
+
Parameters:
+
    +
  • heap – The resource heap.

  • +
  • desc – The resource description.

  • +
  • offset – The offset in the resource heap in bytes.

  • +
  • alloc_info – The resource allocation properties.

  • +
  • name – The name of the buffer.

  • +
+
+
Returns:
+

A pointer to the placed buffer. May be nullptr on error, like invalid inputs.

+
+
+
+ +
+
+BaseTexture *place_texture_in_resource_heap(ResourceHeap *heap, const ResourceDescription &desc, size_t offset, const ResourceAllocationProperties &alloc_info, const char *name)
+

Places a texture in a resource heap at the specified offset.

+

The heap group of heap has to match the heap group of alloc_info that was returned by get_resource_allocation_properties.

+
+
Parameters:
+
    +
  • heap – The resource heap.

  • +
  • desc – The resource description.

  • +
  • offset – The offset in the resource heap in bytes.

  • +
  • alloc_info – The resource allocation properties.

  • +
  • name – The name of the texture.

  • +
+
+
Returns:
+

A pointer to the placed texture. May be nullptr on error, like invalid inputs.

+
+
+
+ +
+
+ResourceHeapGroupProperties get_resource_heap_group_properties(ResourceHeapGroup *heap_group)
+

Retrieves the resource heap group properties for a given resource heap group.

+
+

Note

+

Different groups may return identical values, this does not mean that the heap group is identical or can be substituted for each another. Heap groups represent purpose bound memory that may have device specific properties, that limit the use of a heap group for certain resource types.

+
+
+
Parameters:
+

heap_group – The resource heap group.

+
+
Returns:
+

The resource heap group properties.

+
+
+
+ +
+
+void activate_buffer(Sbuffer *buf, ResourceActivationAction action, const ResourceClearValue &value = {}, GpuPipeline gpu_pipeline = GpuPipeline::GRAPHICS)
+

Activates a buffer with the specified action and optional clear value.

+

Only activated placed buffer could be safely used. Using the buffer before being activated results in undefined behavior.

+
+

Warning

+

gpu_pipeline parameter doesn’t work currently.

+
+
+
Parameters:
+
    +
  • buf – The buffer to activate.

  • +
  • action – The activation action.

  • +
  • value – The clear value (optional).

  • +
  • gpu_pipeline – The GPU pipeline to use (optional).

  • +
+
+
+
+ +
+
+void activate_texture(BaseTexture *tex, ResourceActivationAction action, const ResourceClearValue &value = {}, GpuPipeline gpu_pipeline = GpuPipeline::GRAPHICS)
+

Activates a texture with the specified action and optional clear value.

+

Only activated placed textures could be safely used. Using the texture before being activated results in undefined behavior.

+
+

Warning

+

gpu_pipeline parameter doesn’t work currently.

+
+
+
Parameters:
+
    +
  • tex – The texture to activate.

  • +
  • action – The activation action.

  • +
  • value – The clear value (optional).

  • +
  • gpu_pipeline – The GPU pipeline to use (optional).

  • +
+
+
+
+ +
+
+void deactivate_buffer(Sbuffer *buf, GpuPipeline gpu_pipeline = GpuPipeline::GRAPHICS)
+

Deactivates a buffer with the specified GPU pipeline.

+

The method call is necessary to have a correct state of the resources on a heap. Using the buffer after being deactivated results in undefined behavior.

+
+

Warning

+

gpu_pipeline parameter doesn’t work currently.

+
+
+
Parameters:
+
    +
  • buf – The placed buffer to deactivate.

  • +
  • gpu_pipeline – The GPU pipeline to use (optional).

  • +
+
+
+
+ +
+
+void deactivate_texture(BaseTexture *tex, GpuPipeline gpu_pipeline = GpuPipeline::GRAPHICS)
+

Deactivates a texture with the specified GPU pipeline.

+

The method call is necessary to have a correct state of the resources on a heap. Using the texture after being deactivated results in undefined behavior.

+
+

Warning

+

gpu_pipeline parameter doesn’t work currently.

+
+
+
Parameters:
+
    +
  • tex – The placed texture to deactivate.

  • +
  • gpu_pipeline – The GPU pipeline to use (optional).

  • +
+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/Info.html b/api-references/dagor-render/index/d3dAPI/Info.html new file mode 100644 index 000000000..0bab49007 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/Info.html @@ -0,0 +1,753 @@ + + + + + + + Driver info API — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Driver info API

+

This file containst the API that allows the user to get different information about the driver, its current state and the hardware it is running on.

+
+

Enums

+
+
+enum class APISupport
+

Enum representing the level of API support for a current hardware. Currently it is only used to check DX12 support with a fallback on DX11 if the support is not full.

+

Values:

+
+
+enumerator FULL_SUPPORT
+

Full support for the API.

+
+ +
+
+enumerator OUTDATED_DRIVER
+

The driver is outdated.

+
+ +
+
+enumerator BLACKLISTED_DRIVER
+

The driver is blacklisted (we know about bugs in the driver)

+
+ +
+
+enumerator NO_DEVICE_FOUND
+

No compatible device found.

+
+ +
+ +
+
+
+class Driver3dInitCallback
+

Callback class for initializing the 3D driver.

+
+

Public Types

+
+
+using NeedStereoRenderFunc = bool (*)()
+

Function pointer type for checking if stereo rendering is needed.

+
+ +
+
+using StereoRenderDimensionFunc = int (*)()
+

Function pointer type for getting the dimension of stereo rendering.

+
+ +
+
+using StereoRenderExtensionsFunc = const char *(*)()
+

Function pointer type for getting the extensions for stereo rendering.

+
+ +
+
+using StereoRenderVersionsFunc = VersionRange (*)()
+

Function pointer type for getting the supported versions for stereo rendering

+
+ +
+
+using StereoRenderAdapterFunc = int64_t (*)()
+

Function pointer type for getting the adapter for stereo rendering.

+
+ +
+
+

Public Functions

+
+
+inline virtual void verifyResolutionSettings(int &ref_scr_wdt, int &ref_scr_hgt, int base_scr_wdt, int base_scr_hgt, bool window_mode) const
+

Verifies the resolution settings.

+
+
Parameters:
+
    +
  • ref_scr_wdt – The reference screen width

  • +
  • ref_scr_hgt – The reference screen height

  • +
  • base_scr_wdt – The base screen width

  • +
  • base_scr_hgt – The base screen height

  • +
  • window_mode – Flag indicating if the window mode is enabled

  • +
+
+
+
+ +
+
+virtual int validateDesc(Driver3dDesc &desc) const = 0
+

Validates the driver description.

+

+
+Todo:
+

This fucntion is not used anywhere. Remove it?

+
+ +

+
+
Parameters:
+

desc – The driver description to validate

+
+
Returns:
+

something

+
+
+
+ +
+
+virtual int compareDesc(Driver3dDesc &A, Driver3dDesc &B) const = 0
+

Compares two driver descriptions.

+

+
+Todo:
+

This fucntion is not used anywhere. Remove it?

+
+ +

+
+
Parameters:
+
    +
  • A – The first driver description

  • +
  • B – The second driver description

  • +
+
+
Returns:
+

something

+
+
+
+ +
+
+inline virtual bool desiredStereoRender() const
+

Checks if stereo rendering is desired.

+
+
Returns:
+

True if stereo rendering is desired, false otherwise

+
+
+
+ +
+
+inline virtual int64_t desiredAdapter() const
+

Gets the desired adapter.

+
+
Returns:
+

The desired adapter ID

+
+
+
+ +
+
+inline virtual RenderSize desiredRendererSize() const
+

Gets the desired size of the renderer.

+
+
Returns:
+

The desired size of the renderer

+
+
+
+ +
+
+inline virtual const char *desiredRendererDeviceExtensions() const
+

Gets the desired device extensions for the renderer.

+
+
Returns:
+

The desired device extensions for the renderer

+
+
+
+ +
+
+inline virtual const char *desiredRendererInstanceExtensions() const
+

Gets the desired instance extensions for the renderer.

+
+
Returns:
+

The desired instance extensions for the renderer

+
+
+
+ +
+
+inline virtual VersionRange desiredRendererVersionRange() const
+

Gets the desired version range for the renderer.

+
+
Returns:
+

The desired version range for the renderer

+
+
+
+ +
+
+
+struct RenderSize
+

Struct representing the size of the render area.

+
+

Public Members

+
+
+int width
+

The width of the render area.

+
+ +
+
+int height
+

The height of the render area.

+
+ +
+
+ +
+
+struct VersionRange
+

Struct representing a range of driver versions.

+
+

Public Members

+
+
+uint64_t minVersion
+

The minimum driver version.

+
+ +
+
+uint64_t maxVersion
+

The maximum driver version.

+
+ +
+
+ +
+ +
+
+namespace d3d
+
+

Functions

+
+
+int guess_gpu_vendor(String *out_gpu_desc = NULL, uint32_t *out_drv_ver = NULL, DagorDateTime *out_drv_date = NULL, uint32_t *device_id = nullptr)
+

Guesses and returns the GPU vendor ID.

+
+
Parameters:
+
    +
  • out_gpu_desc – Pointer to store the GPU description

  • +
  • out_drv_ver – Pointer to store the driver version

  • +
  • out_drv_date – Pointer to store the driver date

  • +
  • device_id – Pointer to store the device ID

  • +
+
+
Returns:
+

The GPU vendor ID for enum D3D_VENDOR_…

+
+
+
+ +
+
+DagorDateTime get_gpu_driver_date(int vendor)
+

Gets the driver date for the GPU vendor.

+
+
Parameters:
+

vendor – The GPU vendor ID

+
+
Returns:
+

The driver date for the GPU vendor

+
+
+
+ +
+
+unsigned get_dedicated_gpu_memory_size_kb()
+

Determines and returns the size of the dedicated GPU memory in KB.

+
+
Returns:
+

The size of the dedicated GPU memory in KB

+
+
+
+ +
+
+unsigned get_free_dedicated_gpu_memory_size_kb()
+

Determines and returns the size of the free dedicated GPU memory in KB.

+
+
Returns:
+

The size of the free dedicated GPU memory in KB

+
+
+
+ +
+
+void get_current_gpu_memory_kb(uint32_t *dedicated_total, uint32_t *dedicated_free)
+

Gets the current GPU memory during the game (supports only Nvidia GPUs).

+
+
Parameters:
+
    +
  • dedicated_total – Pointer to store the total dedicated GPU memory

  • +
  • dedicated_free – Pointer to store the free dedicated GPU memory

  • +
+
+
+
+ +
+
+bool get_gpu_freq(String &out_freq)
+

Gets the GPU frequency.

+
+

Note

+

This function works only for Nvidia GPUs

+
+
+
Parameters:
+

out_freq – String to store the GPU frequency

+
+
Returns:
+

True if the GPU frequency was successfully retrieved, false otherwise

+
+
+
+ +
+
+int get_gpu_temperature()
+

Gets the GPU temperature.

+
+

Note

+

This function works only for Nvidia GPUs

+
+
+
Returns:
+

The GPU temperature

+
+
+
+ +
+
+void get_video_vendor_str(String &out_str)
+

Gets the video vendor string.

+
+
Parameters:
+

out_str – String to store the video vendor string

+
+
+
+ +
+
+float get_display_scale()
+

Gets the display scale.

+
+
Returns:
+

The display scale

+
+
+
+ +
+
+void disable_sli()
+

Disables SLI settings for the profile.

+

+
+Todo:
+

Remove. We don’t support SLI anymore

+
+ +

+
+ +
+
+const char *get_driver_name()
+

Gets the driver name.

+
+
Returns:
+

The driver name

+
+
+
+ +
+
+DriverCode get_driver_code()
+

Gets the driver code.

+
+
Returns:
+

The driver code

+
+
+
+ +
+
+static inline bool is_stub_driver()
+

Checks if the d3d-stub driver is used.

+
+
Returns:
+

True if the d3d-stub driver is used, false otherwise

+
+
+
+ +
+
+const char *get_device_driver_version()
+

Gets the device driver version.

+
+

Note

+

Work only for Vulkan. On other platforms returns “1.0”

+
+
+
Returns:
+

The device driver version

+
+
+
+ +
+
+const char *get_device_name()
+

Gets the device name.

+
+
Returns:
+

The device name

+
+
+
+ +
+
+const char *get_last_error()
+

Gets the last error message.

+
+
Returns:
+

The last error message

+
+
+
+ +
+
+uint32_t get_last_error_code()
+

Gets the last error code.

+
+
Returns:
+

The last error code

+
+
+
+ +
+
+void *get_device()
+

Gets the raw pointer to the device interface (implementation and platform specific).

+
+
Returns:
+

The raw pointer to the device interface

+
+
+
+ +
+
+void *get_context()
+

Gets the raw pointer to the device context (implementation and platform specific).

+
+
Returns:
+

The raw pointer to the device context

+
+
+
+ +
+
+const Driver3dDesc &get_driver_desc()
+

Gets the driver description.

+
+
Returns:
+

The driver description

+
+
+
+ +
+
+bool is_in_device_reset_now()
+

Checks if the device is in device reset or being reset.

+
+
Returns:
+

True if the device is in device reset or being reset, false otherwise

+
+
+
+ +
+
+bool is_window_occluded()
+

Checks if the game rendering window is completely occluded.

+
+
Returns:
+

True if the game rendering window is completely occluded, false otherwise

+
+
+
+ +
+
+bool should_use_compute_for_image_processing(std::initializer_list<unsigned> formats)
+

Checks if compute commands should be preferred for image processing.

+
+

Note

+

Implemented only for DX11

+
+
+
Parameters:
+

formats – The list of image formats

+
+
Returns:
+

True if compute commands should be preferred, false otherwise

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/Lock.html b/api-references/dagor-render/index/d3dAPI/Lock.html new file mode 100644 index 000000000..0028fd91f --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/Lock.html @@ -0,0 +1,289 @@ + + + + + + + GPU related locks — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ + + + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/MatricesAndPerspective.html b/api-references/dagor-render/index/d3dAPI/MatricesAndPerspective.html new file mode 100644 index 000000000..f0ce43c16 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/MatricesAndPerspective.html @@ -0,0 +1,581 @@ + + + + + + + D3D API for work with matrices and perspective object — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

D3D API for work with matrices and perspective object

+

The file contains depricated methods that shouldn’t be a part of d3d API. +We a re going to remove getters/setters because they are used for global state access. +Other matric calculation methods should be moved out of d3d namespace.

+
+

Typedefs

+
+
+using Matrix44 = TMatrix4
+
+ +
+
+
+namespace d3d
+
+

Functions

+
+
+bool settm(int which, const Matrix44 *tm)
+

Set the transformation matrix for the specified index.

+
+
Parameters:
+
    +
  • which – The index of the transformation matrix. One of TM_XXX enum.

  • +
  • tm – Pointer to a Matrix44 object.

  • +
+
+
Returns:
+

True if the transformation matrix is set successfully, false otherwise.

+
+
+
+ +
+
+bool settm(int which, const TMatrix &tm)
+

Set the transformation matrix for the specified index.

+
+
Parameters:
+
    +
  • which – The index of the transformation matrix. One of TM_XXX enum.

  • +
  • tm – Reference to a TMatrix object.

  • +
+
+
Returns:
+

True if the transformation matrix is set successfully, false otherwise.

+
+
+
+ +
+
+void settm(int which, const mat44f &tm)
+

Set the transformation matrix for the specified index.

+
+
Parameters:
+
    +
  • which – The index of the transformation matrix. One of TM_XXX enum.

  • +
  • tm – The output mat44f object.

  • +
+
+
Returns:
+

True if the transformation matrix is set successfully, false otherwise.

+
+
+
+ +
+
+bool gettm(int which, Matrix44 *out_tm)
+

Get the transformation matrix for the specified index.

+

+
+Deprecated:
+
+ +

+
+
Parameters:
+
    +
  • which – The index of the transformation matrix. One of TM_XXX enum.

  • +
  • out_tm – Pointer to a Matrix44 object to store the result.

  • +
+
+
Returns:
+

True if the transformation matrix is retrieved successfully, false otherwise.

+
+
+
+ +
+
+bool gettm(int which, TMatrix &out_tm)
+

Get the transformation matrix for the specified index.

+

+
+Deprecated:
+
+ +

+
+
Parameters:
+
    +
  • which – The index of the transformation matrix. One of TM_XXX enum.

  • +
  • out_tm – Reference to a TMatrix object to store the result.

  • +
+
+
Returns:
+

True if the transformation matrix is retrieved successfully, false otherwise.

+
+
+
+ +
+
+void gettm(int which, mat44f &out_tm)
+

Get the transformation matrix for the specified index.

+

+
+Deprecated:
+
+ +

+
+
Parameters:
+
    +
  • which – The index of the transformation matrix. One of TM_XXX enum.

  • +
  • out_tm – The output mat44f object.

  • +
+
+
+
+ +
+
+const mat44f &gettm_cref(int which)
+

Get the constant reference to the transformation matrix for the specified index.

+

+
+Deprecated:
+
+ +

+
+
Parameters:
+

which – The index of the transformation matrix. One of TM_XXX enum.

+
+
Returns:
+

The constant reference to the transformation matrix.

+
+
+
+ +
+
+void getm2vtm(TMatrix &out_m2v)
+

Get the model to view matrix.

+

+
+Deprecated:
+
+ +

+
+
Parameters:
+

out_m2v – Reference to a TMatrix object to store the result.

+
+
+
+ +
+
+void getglobtm(Matrix44 &out)
+

Get the current globtm matrix.

+

+
+Deprecated:
+
+ +

+
+
Parameters:
+

out – Reference to a Matrix44 object to store the result.

+
+
+
+ +
+
+void setglobtm(Matrix44 &globtm)
+

Set the custom globtm matrix.

+
+
Parameters:
+

globtm – Reference to a Matrix44 object representing the custom globtm matrix.

+
+
+
+ +
+
+void getglobtm(mat44f &out)
+

Get the current globtm matrix.

+

+
+Deprecated:
+
+ +

+
+
Parameters:
+

out – Reference to a mat44f object to store the result.

+
+
+
+ +
+
+void setglobtm(const mat44f &globtm)
+

Set the custom globtm matrix.

+
+
Parameters:
+

globtm – Reference to a mat44f object representing the custom globtm matrix.

+
+
+
+ +
+
+bool setpersp(const Driver3dPerspective &p, TMatrix4 *proj_tm = nullptr)
+

Calculate and set the perspective matrix.

+
+
Parameters:
+
    +
  • p – The Driver3dPerspective object representing the perspective parameters.

  • +
  • proj_tm – Pointer to a TMatrix4 object to store the perspective matrix. Optional.

  • +
+
+
Returns:
+

True if the perspective matrix is calculated and set successfully, false otherwise.

+
+
+
+ +
+
+bool getpersp(Driver3dPerspective &p)
+

Get the last values set by setpersp().

+

+
+Deprecated:
+
+ +

+
+
Parameters:
+

p – Reference to a Driver3dPerspective object to store the result.

+
+
Returns:
+

True if the last values are retrieved successfully, false otherwise.

+
+
+
+ +
+
+bool validatepersp(const Driver3dPerspective &p)
+

Check if the given perspective parameters are valid.

+
+
Parameters:
+

p – The Driver3dPerspective object representing the perspective parameters.

+
+
Returns:
+

True if the perspective parameters are valid, false otherwise.

+
+
+
+ +
+
+bool calcproj(const Driver3dPerspective &p, mat44f &proj_tm)
+

Calculate the perspective matrix without setting it.

+
+
Parameters:
+
    +
  • p – The Driver3dPerspective object representing the perspective parameters.

  • +
  • proj_tm – Reference to a mat44f object to store the perspective matrix.

  • +
+
+
Returns:
+

True if the perspective matrix is calculated successfully, false otherwise.

+
+
+
+ +
+
+bool calcproj(const Driver3dPerspective &p, TMatrix4 &proj_tm)
+

Calculate the perspective matrix without setting it.

+
+
Parameters:
+
    +
  • p – The Driver3dPerspective object representing the perspective parameters.

  • +
  • proj_tm – Reference to a TMatrix4 object to store the perspective matrix.

  • +
+
+
Returns:
+

True if the perspective matrix is calculated successfully, false otherwise.

+
+
+
+ +
+
+void calcglobtm(const mat44f &view_tm, const mat44f &proj_tm, mat44f &result)
+

Calculate the globtm matrix without setting it.

+
+
Parameters:
+
    +
  • view_tm – The view matrix.

  • +
  • proj_tm – The perspective matrix.

  • +
  • result – Reference to a mat44f object to store the result.

  • +
+
+
+
+ +
+
+void calcglobtm(const mat44f &view_tm, const Driver3dPerspective &persp, mat44f &result)
+

Calculate the globtm matrix without setting it.

+
+
Parameters:
+
    +
  • view_tm – The view matrix.

  • +
  • persp – The Driver3dPerspective object representing the perspective parameters.

  • +
  • result – Reference to a mat44f object to store the result.

  • +
+
+
+
+ +
+
+void calcglobtm(const TMatrix &view_tm, const TMatrix4 &proj_tm, TMatrix4 &result)
+

Calculate the globtm matrix without setting it.

+
+
Parameters:
+
    +
  • view_tm – The view matrix.

  • +
  • proj_tm – The perspective matrix.

  • +
  • result – Reference to a TMatrix4 object to store the result.

  • +
+
+
+
+ +
+
+void calcglobtm(const TMatrix &view_tm, const Driver3dPerspective &persp, TMatrix4 &result)
+

Calculate the globtm matrix without setting it.

+
+
Parameters:
+
    +
  • view_tm – The view matrix.

  • +
  • persp – The Driver3dPerspective object representing the perspective parameters.

  • +
  • result – Reference to a TMatrix4 object to store the result.

  • +
+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/Query.html b/api-references/dagor-render/index/d3dAPI/Query.html new file mode 100644 index 000000000..a030cc415 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/Query.html @@ -0,0 +1,277 @@ + + + + + + + Queries — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Queries

+
+
+namespace d3d
+
+

Typedefs

+
+
+typedef D3dEventQuery EventQuery
+

Opaque type, a pointer to which represents an event query.

+
+ +
+
+

Functions

+
+
+EventQuery *create_event_query()
+

Creates a new event query.

+
+
Returns:
+

A pointer to the created event query, or nullptr if not supported or failed (device reset e.g.).

+
+
+
+ +
+
+void release_event_query(EventQuery *query)
+

Releases the specified event query.

+
+
Parameters:
+

query – The event query to release.

+
+
+
+ +
+
+bool issue_event_query(EventQuery *query)
+

Issues the specified event query.

+
+
Parameters:
+

query – The event query to issue.

+
+
Returns:
+

True if the query was successfully issued, false otherwise.

+
+
+
+ +
+
+bool get_event_query_status(EventQuery *query, bool force_flush)
+

Gets the status of the specified event query.

+
+
Parameters:
+
    +
  • query – The event query to check.

  • +
  • force_flush – Whether to force a flush before checking the status.

  • +
+
+
Returns:
+

False if the query is issued but not yet signaled, true otherwise (signaled, not issued, or bad query).

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/RenderPass.html b/api-references/dagor-render/index/d3dAPI/RenderPass.html new file mode 100644 index 000000000..8b034263d --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/RenderPass.html @@ -0,0 +1,684 @@ + + + + + + + RenderPass — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

RenderPass

+
    +
  • See samples/testDrv3d/render_pass_tests.h for example usage

  • +
+

Callable d3d:: methods

+
+
+RenderPass *create_render_pass(const RenderPassDesc &rp_desc)
+

Creates render pass object.

+

Render pass objects are intended to be created once (and ahead of time), used many times

+
+

Note

+

No external sync required

+
+
+

Warning

+

Do not run per frame/realtime!

+
+
+

Warning

+

Avoid using at time sensitive places!

+
+
+

Warning

+

Will assert-fail if rp_desc.bindCount is 0

+
+
+
Parameters:
+

rp_desc – Description of render pass to be created

+
+
Returns:
+

Pointer to opaque RenderPass object, may be nullptr if description is invalid

+
+
+
+ +
+
+void delete_render_pass(RenderPass *rp)
+

Deletes render pass object.

+
+

Note

+

Sync with usage is required (must not delete object that is in use in current CPU frame)

+
+
+

Warning

+

All usage to object becomes invalid right after method call

+
+
+
Parameters:
+

rp – Object to be deleted

+
+
+
+ +
+
+void begin_render_pass(RenderPass *rp, const RenderPassArea area, const RenderPassTarget *targets)
+

Begins render pass rendering.

+

After this command, viewport is reset to area supplied and subpass 0, described in render pass object, is started

+
+

Note

+

Must be external synced (GPU lock required)

+
+
+

Warning

+

When inside pass, all other GPU execution methods aside of Draw* are prohibited!

+
+
+

Warning

+

Avoid writes/reads outside area, it is UB in general

+
+
+

Warning

+

Will assert-fail if other render pass is already in process

+
+
+

Warning

+

Backbuffer can’t be used as target

+
+
+
Parameters:
+
    +
  • rp – Render pass resource to begin with

  • +
  • area – Rendering area restriction

  • +
  • targets – Array of targets that will be used in rendering

  • +
+
+
+
+ +
+
+void next_subpass()
+

Advances to next subpass.

+

Increases subpass number and executes necessary synchronization as well as binding, described for this subpass

+

Viewport is reset to render area on every call

+
+

Note

+

Must be external synced (GPU lock required)

+
+
+

Warning

+

Will assert-fail if there is no subpass to advance to

+
+
+

Warning

+

Will assert-fail if called outside of render pass

+
+
+ +
+
+void end_render_pass()
+

Ends render pass.

+

Processes store&sync operations described in render pass

+

After this call, any non Draw operations are allowed and render targets are reset to backbuffer

+
+

Note

+

Must be external synced (GPU lock required)

+
+
+

Warning

+

Will assert-fail if subpass is not final

+
+
+

Warning

+

Will assert-fail if called outside of render pass

+
+
+ +
+
+inline void allow_render_pass_target_load()
+

When renderpass splits validation is enabled in Vulkan this command tells that we actually want to load previous contents of attached color targets or depth to render on top of it. Otherwise loading previous contents treated as renderpass split and the validation fails (we want to avoid RP splits cause of performance impact on TBDR). If it’s known that the render target will be just fully redrawn (like in most postfx), it’s better to use d3d::clearview(CLEAR_DISCARD, …) instead of this command.

+
+ +
+

Related structures

+
+
+struct RenderPassBind
+

Description of render target bind inside render pass.

+

Fully defines operation that will happen with target at defined subpass slot

+
+

Public Members

+
+
+int32_t target
+

Index of render target in render targets array that will be used for this bind.

+
+ +
+
+int32_t subpass
+

Index of subpass where bind happens.

+
+ +
+
+int32_t slot
+

Index of slot where target will be used.

+
+ +
+
+RenderPassTargetAction action
+

defines what will happen with target used in binding

+
+ +
+
+ResourceBarrier dependencyBarrier
+

optional user barrier for generic(emulated) implementation

+
+ +
+
+ +
+
+struct RenderPassTargetDesc
+

Early description of render target.

+

Gives necessary info at render pass creation so render pass is compatible with targets of same type later on

+
+

Public Members

+
+
+BaseTexture *templateResource
+

Resource from which information is extracted, can be nullptr.

+
+ +
+
+unsigned texcf
+

Raw texture create flags, used if template resource is not provided.

+
+ +
+
+bool aliased
+

Must be set if template resource is empty and target will use memory aliased inside render pass.

+
+ +
+
+ +
+
+struct RenderPassTarget
+

Description of target that is used inside render pass.

+
+

Public Members

+
+
+RenderTarget resource
+

Actual render target subresource reference.

+
+ +
+
+ResourceClearValue clearValue
+

Clear value that is used on clear action.

+
+ +
+
+ +
+
+struct RenderPassDesc
+

Render pass resource description, used to create RenderPass object.

+
+

Public Members

+
+
+const char *debugName
+

Name that is visible only in developer builds and inside graphics tools, if possible.

+
+ +
+
+uint32_t targetCount
+

Total amount of targets inside render pass.

+
+ +
+
+uint32_t bindCount
+

Total amount of bindings for render pass.

+
+ +
+
+const RenderPassTargetDesc *targetsDesc
+

Array of targetCount elements, supplying early description of render target.

+
+ +
+
+const RenderPassBind *binds
+

Array of bindCount elements, describing all subpasses.

+
+ +
+
+uint32_t subpassBindingOffset
+

Texture binding offset for shader subpass reads used on APIs without native render passes.

+

Generic(emulated) implementation will use registers starting from this offset, to bind input attachments. This must be properly handled inside shader code for generic implementation to work properly!

+
+ +
+
+ +
+
+struct RenderPassArea
+

Area of render target where rendering will happen inside render pass.

+
+

Public Members

+
+
+uint32_t left
+
+ +
+
+uint32_t top
+
+ +
+
+uint32_t width
+
+ +
+
+uint32_t height
+
+ +
+
+float minZ
+
+ +
+
+float maxZ
+
+ +
+
+ +
+

Related constants

+
+
+enum RenderPassTargetAction
+

Bitfield of actions that happen with target at given slot and subpass.

+

Values:

+
+
+enumerator RP_TA_NONE
+

No action with target will happen.

+

Only dependencyBarrier of binding will be executed for this target

+
+

Warning

+

Content of target becomes invalid if no action is supplied overall

+
+
+ +
+
+enumerator RP_TA_LOAD_READ
+

Loads contents of target from memory to framebuffer.

+
+

Note

+

Avoid load operations on TBDR hardware

+
+
+ +
+
+enumerator RP_TA_LOAD_CLEAR
+

Loads clear value to framebuffer instead of doing any memory operation.

+
+ +
+
+enumerator RP_TA_LOAD_NO_CARE
+

Don’t care about loading contents of target (aka discard)

+
+

Warning

+

Initial content of frame buffer is underfined, make sure to handle this

+
+
+ +
+
+enumerator RP_TA_LOAD_MASK
+

Bitmask of any load operation.

+
+

Note

+

load action is performed for each target when its being accessed for the first time in render pass

+
+
+ +
+
+enumerator RP_TA_SUBPASS_READ
+

Target contents will be readed by subpass.

+
+

Note

+

This corresponds to SubpassInput with SubpassLoad inside shader

+
+
+

Warning

+

Generic implementation uses T register with subpassBindingOffset instead of SubpassInput, this must be handled properly in shader code

+
+
+ +
+
+enumerator RP_TA_SUBPASS_RESOLVE
+

Target will be used as MSAA resolve destination of MSAA target bound in same slot.

+
+

Note

+

MSAA Depth resolve is optional feature if non generic implementation is used

+
+
+

Warning

+

Must supply MSAA target in same slot in another binding otherwise creation on render pass will fail

+
+
+ +
+
+enumerator RP_TA_SUBPASS_WRITE
+

Target contents will be written by subpass.

+
+ +
+
+enumerator RP_TA_SUBPASS_KEEP
+

Target contents will be keeped intact if it was not used in subpass (otherwise UB)

+
+ +
+
+enumerator RP_TA_SUBPASS_MASK
+

Bitmask of any subpass operation.

+
+ +
+
+enumerator RP_TA_STORE_WRITE
+

Contents of framebuffer will be written to target memory.

+
+ +
+
+enumerator RP_TA_STORE_NONE
+

Contents of framebuffer will not be stored.

+
+ +
+
+enumerator RP_TA_STORE_NO_CARE
+

Don’t care about target memory contents.

+
+

Warning

+

Target memory contents will be left in UB state

+
+
+ +
+
+enumerator RP_TA_STORE_MASK
+

Bitmask of any load operation.

+
+

Note

+

store action is performed once for each target on whole pass completion

+
+
+ +
+ +
+
+enum RenderPassExtraIndexes
+

extra indexes that encode special cases of render pass description

+

Values:

+
+
+enumerator RP_INDEX_NORMAL
+
+ +
+
+enumerator RP_SUBPASS_EXTERNAL_END
+

Pseudo subpass index, that happens at end of render pass.

+

Used to provide store actions as well as dependencyBarriers for generic implementation

+
+ +
+
+enumerator RP_SLOT_DEPTH_STENCIL
+

Slot for depth/stencil.

+

Using this slot will bind target as depth/stencil

+
+ +
+ +
+
+inline constexpr RenderPassTargetAction operator|(RenderPassTargetAction l, RenderPassTargetAction r)
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/RenderState.html b/api-references/dagor-render/index/d3dAPI/RenderState.html new file mode 100644 index 000000000..dfddf0eeb --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/RenderState.html @@ -0,0 +1,579 @@ + + + + + + + Render State — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Render State

+
+
+namespace shaders
+
+

Typedefs

+
+
+using DriverRenderStateId = GenerationRefId<8, DriverRenderStateIdDummy>
+
+ +
+
+

Enums

+
+
+enum class RenderStateId : uint32_t
+

Values:

+
+
+enumerator Invalid
+
+ +
+ +
+
+
+class DriverRenderStateIdDummy
+
+ +
+ +
+
+namespace shaders
+
+
+struct RenderStateBits
+

Description of render state.

+

Subclassed by shaders::RenderState

+
+

Public Members

+
+
+uint32_t zwrite
+

Enable depth write.

+
+ +
+
+uint32_t ztest
+

Enable depth test.

+
+ +
+
+uint32_t zFunc
+

Relationship operation #CMPF used for depth test (less, greater, equal and etc.).

+
+ +
+
+uint32_t stencilRef
+

Reference value to perform against when doing a stencil test.

+
+ +
+
+uint32_t cull
+

Specifies triangle face culling #CULL_TYPE.

+
+ +
+
+uint32_t depthBoundsEnable
+

Enable depth-bounds testing. Samples outside the range are discarded.

+
+ +
+
+uint32_t forcedSampleCount
+

The sample count that is forced while UAV rendering or rasterizing.

+
+

Warning

+

Requires caps.hasForcedSamplerCount (DX 11.1).

+
+
+

Warning

+

Depth test must be disabled.

+
+
+ +
+
+uint32_t conservativeRaster
+

Identifies whether conservative rasterization is on or off.

+
+

Warning

+

Requires caps.hasConservativeRassterization (DX 11.3).

+
+
+

Warning

+

Only triangle topology is allowed (DX 12).

+
+
+ +
+
+uint32_t zClip
+

Enable depth clipping based on distance.

+
+ +
+
+uint32_t scissorEnabled
+

Enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.

+
+ +
+
+uint32_t independentBlendEnabled
+

Enable independent blending in simultaneous render targets.

+
+ +
+
+uint32_t alphaToCoverage
+

Specifies whether to use alpha-to-coverage.

+
+ +
+
+uint32_t viewInstanceCount
+

Specifies the number of used views.

+
+ +
+
+uint32_t colorWr = 0xFFFFFFFF
+

Specifies mask which is used for color write.

+
+ +
+
+float zBias = 0
+

Specifies depth value added to a given pixel.

+
+ +
+
+float slopeZBias = 0
+

Specifies scalar on a given pixel’s slope.

+
+ +
+
+StencilState stencil
+

Specifies stencil state.

+
+ +
+
+ +
+
+struct RenderState : public shaders::RenderStateBits
+

Extended render state with blending params.

+
+

Public Functions

+
+
+inline RenderState()
+
+ +
+
+inline bool operator==(const RenderState &s) const
+
+ +
+
+inline bool operator!=(const RenderState &s) const
+
+ +
+
+

Public Members

+
+
+BlendParams blendParams[NumIndependentBlendParameters]
+
+ +
+
+

Public Static Attributes

+
+
+static constexpr uint32_t NumIndependentBlendParameters = 4
+
+ +
+
+
+struct BlendFactors
+

Description of blending factors.

+
+

Public Members

+
+
+uint8_t src
+

Configures source alpha #BLEND_FACTOR.

+
+ +
+
+uint8_t dst
+

Configures destination alpha #BLEND_FACTOR.

+
+ +
+
+ +
+
+struct BlendParams
+

Description of blending parameters.

+
+

Public Members

+
+
+BlendFactors ablendFactors
+

Configures alpha blend factor.

+
+ +
+
+BlendFactors sepablendFactors
+

Configures separate alpha blend factor.

+
+ +
+
+uint8_t blendOp
+

Specifies #BLENDOP operation for alpha blending.

+
+ +
+
+uint8_t sepablendOp
+

Specifies #BLENDOP operation for separate alpha blending.

+
+ +
+
+uint8_t ablend
+

Enables alpha blending.

+
+ +
+
+uint8_t sepablend
+

Enables separate alpha blending.

+
+ +
+
+ +
+ +
+ +
+
+namespace d3d
+
+

Functions

+
+
+bool set_blend_factor(E3DCOLOR color)
+

Set the blend factor object.

+
+
Parameters:
+

color – blend factor to set

+
+
Returns:
+

true if successful, false otherwise

+
+
+
+ +
+
+bool setstencil(uint32_t ref)
+

Set the stencil reference value.

+
+
Parameters:
+

ref – reference value to set

+
+
Returns:
+

true if successful, false otherwise

+
+
+
+ +
+
+bool setwire(bool in)
+

Set the wireframe mode. Works only in dev build.

+
+
Parameters:
+

in – true to enable wireframe mode, false to disable

+
+
Returns:
+

true if successful, false otherwise

+
+
+
+ +
+
+bool set_depth_bounds(float zmin, float zmax)
+

Set the depth bounds.

+
+
Parameters:
+
    +
  • zmin – minimum depth value

  • +
  • zmax – maximum depth value

  • +
+
+
Returns:
+

true if successful, false otherwise

+
+
+
+ +
+
+shaders::DriverRenderStateId create_render_state(const shaders::RenderState &state)
+

Create a render state object in driver.

+
+
Parameters:
+

state – parameters of the render state object to create

+
+
Returns:
+

shaders::DriverRenderStateId id of the created render state object

+
+
+
+ +
+
+bool set_render_state(shaders::DriverRenderStateId state_id)
+

Set the render state object in driver.

+
+
Parameters:
+

state_id – id of the render state object to set

+
+
Returns:
+

true if successful, false otherwise

+
+
+
+ +
+
+void clear_render_states()
+

Remove all render state objects allocated in driver.

+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/RenderTarget.html b/api-references/dagor-render/index/d3dAPI/RenderTarget.html new file mode 100644 index 000000000..6dcaf1e96 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/RenderTarget.html @@ -0,0 +1,645 @@ + + + + + + + Render Targets — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Render Targets

+
+

Typedefs

+
+
+typedef BaseTexture Texture
+
+ +
+
+

Enums

+
+
+enum class DepthAccess
+

Specifies the access mode for a depth attachment.

+

Values:

+
+
+enumerator RW
+

For regular depth attachment.

+
+ +
+
+enumerator SampledRO
+

For read-only depth attachment which can also be sampled as a texture in the same shader. IF YOU DON’T NEED TO SAMPLE THE DEPTH, USE z_write=false WITH DepthAccess::RW INSTEAD. Using this state will cause HiZ decompression on some hardware and split of renderpass with flush of tile data into memory in a TBR.

+
+ +
+ +
+
+
+struct RenderTarget
+

Represents a render target to set it into slot.

+
+

Public Members

+
+
+BaseTexture *tex
+

Texture to set as render target.

+
+ +
+
+uint32_t mip_level
+

Mip level to set as render target.

+
+ +
+
+uint32_t layer
+

Layer to set as render target.

+
+ +
+
+ +
+
+namespace d3d
+
+

Functions

+
+
+bool copy_from_current_render_target(BaseTexture *to_tex)
+

Copy the current render target to a texture. It is useful to get a backbuffer content on such drivers as Metal.

+
+
Parameters:
+

to_tex – Texture to copy the current render target to.

+
+
Returns:
+

true if the operation was successful, false otherwise.

+
+
+
+ +
+
+bool clear_rt(const RenderTarget &rt, const ResourceClearValue &clear_val = {})
+

Clear the render target. Perform full clear on the RT according to its’ creation flag.

+
+
Parameters:
+
    +
  • rt – Render target to clear.

  • +
  • clear_val – Clear value.

  • +
+
+
Returns:
+

true if the operation was successful, false otherwise.

+
+
+
+ +
+
+bool set_render_target()
+

Set the default render target (backbuffer) as a single current render target.

+
+
Returns:
+

true if the operation was successful, false otherwise.

+
+
+
+ +
+
+bool set_depth(BaseTexture *tex, DepthAccess access)
+

Set the depth texture target.

+
+
Parameters:
+
    +
  • tex – Texture to set as depth target. NULL means NO depth.

  • +
  • access – Access mode for the depth attachment.

  • +
+
+
Returns:
+

true if the operation was successful, false otherwise.

+
+
+
+ +
+
+bool set_depth(BaseTexture *tex, int layer, DepthAccess access)
+

Set the depth texture target.

+
+
Parameters:
+
    +
  • tex – Texture to set as depth target. NULL means NO depth.

  • +
  • layer – Layer of the tex to set as depth target.

  • +
  • access – Access mode for the depth attachment.

  • +
+
+
Returns:
+

true if the operation was successful, false otherwise.

+
+
+
+ +
+
+bool set_render_target(int rt_index, BaseTexture*, int fc, uint8_t level)
+

Sets the render target for rendering.

+

+
+Deprecated:
+

Use set_render_target(RenderTarget depth, DepthAccess depth_access, dag::ConstSpan<RenderTarget> colors) instead.

+
+ +

+
+

Warning

+

if texture is depth texture format, it is the same as call set_depth() DON’T USE THIS BEHAVIOR!!!

+
+
+
Parameters:
+
    +
  • rt_index – The index of the render target. The maximum number of render targets is defined by Driver3dRenderTarget::MAX_SIMRT.

  • +
  • texture – A pointer to the BaseTexture object representing the render target.

  • +
  • fc – The face of the texture (for cube textures and texture arrays). If face is RENDER_TO_WHOLE_ARRAY, then the whole Texture Array/Volume Tex will be set as render target. This is to be used with geom shader (and Metal allows with vertex shader).

  • +
  • level – The level of the render target.

  • +
+
+
Returns:
+

True if the render target was set successfully, false otherwise.

+
+
+
+ +
+
+bool set_render_target(int rt_index, BaseTexture*, uint8_t level)
+

Sets the render target for rendering.

+

+
+Deprecated:
+

Use set_render_target(RenderTarget depth, DepthAccess depth_access, dag::ConstSpan<RenderTarget> colors) instead.

+
+ +

+
+

Warning

+

if texture is depth texture format, it is the same as call set_depth() DON’T USE THIS BEHAVIOR!!!

+
+
+
Parameters:
+
    +
  • rt_index – The index of the render target. The maximum number of render targets is defined by Driver3dRenderTarget::MAX_SIMRT.

  • +
  • texture – A pointer to the BaseTexture object representing the render target.

  • +
  • level – The level of the render target.

  • +
+
+
Returns:
+

True if the render target was set successfully, false otherwise.

+
+
+
+ +
+
+inline bool set_render_target(BaseTexture *t, uint8_t level)
+

Sets the render target for rendering. All other render targets will be set to nullptr.

+

+
+Deprecated:
+

Use set_render_target(RenderTarget depth, DepthAccess depth_access, dag::ConstSpan<RenderTarget> colors) instead.

+
+ +

+
+

Warning

+

if texture is depth texture format, it is the same as call set_depth() DON’T USE THIS BEHAVIOR!!!

+
+
+
Parameters:
+
    +
  • texture – A pointer to the BaseTexture object representing the render target.

  • +
  • level – The level of the render target.

  • +
+
+
Returns:
+

True if the render target was set successfully, false otherwise.

+
+
+
+ +
+
+inline bool set_render_target(BaseTexture *t, int fc, uint8_t level)
+

Sets the render target for rendering. All other render targets will be set to nullptr.

+

+
+Deprecated:
+

Use set_render_target(RenderTarget depth, DepthAccess depth_access, dag::ConstSpan<RenderTarget> colors) instead.

+
+ +

+
+

Warning

+

if texture is depth texture format, it is the same as call set_depth() DON’T USE THIS BEHAVIOR!!!

+
+
+
Parameters:
+
    +
  • t – A pointer to the BaseTexture object representing the render target.

  • +
  • fc – The face of the texture (for cube textures and texture arrays). If face is RENDER_TO_WHOLE_ARRAY, then the whole Texture Array/Volume Tex will be set as render target. This is to be used with geom shader (and Metal allows with vertex shader).

  • +
  • level – The level of the render target.

  • +
+
+
Returns:
+

True if the render target was set successfully, false otherwise.

+
+
+
+ +
+
+inline void set_render_target(RenderTarget depth, DepthAccess depth_access, dag::ConstSpan<RenderTarget> colors)
+

Sets the render target for rendering. All other render targets will be set to nullptr.

+
+
Parameters:
+
    +
  • depth – The depth render target.

  • +
  • depth_access – The access mode for the depth attachment.

  • +
  • colors – The color render targets.

  • +
+
+
Returns:
+

True if the render target was set successfully, false otherwise.

+
+
+
+ +
+
+inline void set_render_target(RenderTarget depth, DepthAccess depth_access, const std::initializer_list<RenderTarget> colors)
+

Sets the render target for rendering. All other render targets will be set to nullptr.

+
+
Parameters:
+
    +
  • depth – The depth render target.

  • +
  • depth_access – The access mode for the depth attachment.

  • +
  • colors – The color render targets.

  • +
+
+
Returns:
+

True if the render target was set successfully, false otherwise.

+
+
+
+ +
+
+void get_render_target(Driver3dRenderTarget &out_rt)
+

Get the render target object.

+

+
+Deprecated:
+

Don’t use it since the method relies on a global state.

+
+ +

+
+
Parameters:
+

out_rt – The render target object to fill.

+
+
+
+ +
+
+bool set_render_target(const Driver3dRenderTarget &rt)
+

Set the render target object.

+
+
Parameters:
+

rt – The render target object to set. Usually, it is obtained by get_render_target(Driver3dRenderTarget &out_rt).

+
+
Returns:
+

true if the operation was successful, false otherwise.

+
+
+
+ +
+
+bool get_target_size(int &w, int &h)
+

Get the size of the render target.

+

+
+Deprecated:
+

If you need to use the method, it seems that you are doing something wrong.

+
+ +

+
+
Parameters:
+
    +
  • w – The width of the render target.

  • +
  • h – The height of the render target.

  • +
+
+
Returns:
+

true if the operation was successful, false otherwise.

+
+
+
+ +
+
+bool get_render_target_size(int &w, int &h, BaseTexture *rt_tex, uint8_t level = 0)
+

Get the size of the render target texture.

+

+
+Deprecated:
+

If you need to use the method, it seems that you are doing something wrong.

+
+ +

+
+
Parameters:
+
    +
  • w – The width of the render target texture.

  • +
  • h – The height of the render target texture.

  • +
  • rt_tex – The render target texture. If nullptr, the size of the backbuffer will be written to w and h.

  • +
  • level – The level of the render target texture.

  • +
+
+
Returns:
+

true if the operation was successful, false otherwise.

+
+
+
+ +
+
+bool clearview(int what, E3DCOLOR c, float z, uint32_t stencil)
+

clear all view

+

Clear the view. What is view will be explained in the params.

+
+
Parameters:
+
    +
  • what – The view to clear. It can be one of the CLEAR_*** enum. It will clears either color, depth, or stencil buffer.

  • +
  • c – The color to clear the view with.

  • +
  • z – The depth to clear the view with.

  • +
  • stencil – The stencil to clear the view with.

  • +
+
+
Returns:
+

true if the operation was successful, false otherwise.

+
+
+
+ +
+
+void get_screen_size(int &w, int &h)
+

Get the size of the screen (backbuffer).

+
+

Warning

+

The size of the screen can be different from the size of the framebuffer.

+
+
+
Parameters:
+
    +
  • w – The width of the screen.

  • +
  • h – The height of the screen.

  • +
+
+
+
+ +
+
+Texture *get_backbuffer_tex()
+

Get the backbuffer texture.

+

Backbuffer is only valid while the GPU is acquired, and can be recreated in between.

+
+
Returns:
+

The backbuffer texture.

+
+
+
+ +
+
+Texture *get_secondary_backbuffer_tex()
+

Get the secondary backbuffer texture.

+

Secondary backbuffer is only valid while the GPU is acquired, and can be recreated in between. It exists only for Xbox. Mostly used as a backbuffer with a higher resolution to draw UI.

+
+
Returns:
+

The secondary backbuffer texture.

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/ResUpdateBuffer.html b/api-references/dagor-render/index/d3dAPI/ResUpdateBuffer.html new file mode 100644 index 000000000..9a8c95386 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/ResUpdateBuffer.html @@ -0,0 +1,339 @@ + + + + + + + Resource update buffers — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Resource update buffers

+

The file contains the API for so-called RUBs (Resource Update Buffers). +These are used to update contents of resources efficiently on modern graphics APIs.

+
+
+namespace d3d
+
+

Functions

+
+
+ResUpdateBuffer *allocate_update_buffer_for_tex_region(BaseTexture *dest_base_texture, unsigned dest_mip, unsigned dest_slice, unsigned offset_x, unsigned offset_y, unsigned offset_z, unsigned width, unsigned height, unsigned depth)
+

Allocates a update buffer to update the subregion described by offset_x, offset_y, offset_z, width, height and depth.

+

    +
  • dest_base_texture can not be nullptr.

  • +
  • dest_mip must be a valid mipmap level for dest_base_texture

  • +
  • dest_slice must be a valid array index / cube face for dest_base_texture when it is a array, cube or cube array texture, otherwise has to be 0

  • +
  • offset_x must be within the width of dest_base_texture of miplevel dest_mip and aligned to the texture format block size

  • +
  • offset_y must be within the height of dest_base_texture of miplevel dest_mip and aligned to the texture format block size

  • +
  • offset_z must be within the depth of dest_base_texture of miplevel dest_mip when the texture is a vol tex, otherwise has to be 0

  • +
  • width plus offset_x must be within the width of dest_base_texture of miplevel dest_mip and aligned to the texture format block size

  • +
  • height plus offset_y must be within the height of dest_base_texture of miplevel dest_mip and aligned to the texture format block size

  • +
  • depth plus offset_z must be within the depth of dest_base_texture of miplevel dest_mip when the texture is a vol tex, otherwise has to be 1

  • +
+

+

May return nullptr if either inputs violate the rules above, the driver can currently not provide the memory required or the driver is unable to perform the needed copy operation on update.

+
+ +
+
+ResUpdateBuffer *allocate_update_buffer_for_tex(BaseTexture *dest_tex, int dest_mip, int dest_slice)
+

Allocates update buffer in system memory to be filled directly and then dispatched to apply_tex_update_buffer.

+
+

Warning

+

This method can fail if too much allocations happens in N-frame period. Caller should retry after rendering frame on screen if this happens.

+
+
+
Parameters:
+
    +
  • dest_tex – destination texture

  • +
  • dest_mip – destination mip level

  • +
  • dest_slice – destination slice

  • +
+
+
Returns:
+

pointer to update buffer or nullptr if allocation failed

+
+
+
+ +
+
+void release_update_buffer(ResUpdateBuffer *&rub)
+

Releases update buffer (clears pointer afterwards); skips any update, just releases data.

+
+
Parameters:
+

rub – update buffer to release

+
+
+
+ +
+
+char *get_update_buffer_addr_for_write(ResUpdateBuffer *rub)
+

Returns data address to fill update data.

+
+
Parameters:
+

rub – update buffer

+
+
Returns:
+

pointer to memory that should be filled with data

+
+
+
+ +
+
+size_t get_update_buffer_size(ResUpdateBuffer *rub)
+

Returns size of update buffer.

+
+
Parameters:
+

rub – update buffer

+
+
Returns:
+

size of update buffer in bytes

+
+
+
+ +
+
+size_t get_update_buffer_pitch(ResUpdateBuffer *rub)
+

Returns pitch of update buffer (if applicable)

+
+
Parameters:
+

rub – update buffer

+
+
Returns:
+

pitch of update buffer

+
+
+
+ +
+
+size_t get_update_buffer_slice_pitch(ResUpdateBuffer *rub)
+

Returns the pitch of one 2d image slice for volumetric textures.

+
+
Parameters:
+

rub – update buffer

+
+
Returns:
+

pitch of of a slice in the update buffer

+
+
+
+ +
+
+bool update_texture_and_release_update_buffer(ResUpdateBuffer *&src_rub)
+

applies update to target d3dres and releases update buffer (clears pointer afterwards)

+
+
Parameters:
+

src_rub – update buffer to apply

+
+
Returns:
+

true if update was successful, false if update failed

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/Resource.html b/api-references/dagor-render/index/d3dAPI/Resource.html new file mode 100644 index 000000000..88bcd1f1f --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/Resource.html @@ -0,0 +1,337 @@ + + + + + + + Resources — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Resources

+
+

Functions

+
+
+inline ResourceClearValue make_clear_value(uint32_t r, uint32_t g, uint32_t b, uint32_t a)
+

Creates a ResourceClearValue object with the specified RGBA values.

+
+
Parameters:
+
    +
  • r – The red component of the clear value.

  • +
  • g – The green component of the clear value.

  • +
  • b – The blue component of the clear value.

  • +
  • a – The alpha component of the clear value.

  • +
+
+
Returns:
+

The created ResourceClearValue object.

+
+
+
+ +
+
+inline ResourceClearValue make_clear_value(int32_t r, int32_t g, int32_t b, int32_t a)
+

Creates a ResourceClearValue object with the specified RGBA values.

+
+
Parameters:
+
    +
  • r – The red component of the clear value.

  • +
  • g – The green component of the clear value.

  • +
  • b – The blue component of the clear value.

  • +
  • a – The alpha component of the clear value.

  • +
+
+
Returns:
+

The created ResourceClearValue object.

+
+
+
+ +
+
+inline ResourceClearValue make_clear_value(float r, float g, float b, float a)
+

Creates a ResourceClearValue object with the specified RGBA values.

+
+
Parameters:
+
    +
  • r – The red component of the clear value.

  • +
  • g – The green component of the clear value.

  • +
  • b – The blue component of the clear value.

  • +
  • a – The alpha component of the clear value.

  • +
+
+
Returns:
+

The created ResourceClearValue object.

+
+
+
+ +
+
+inline ResourceClearValue make_clear_value(float d, uint8_t s)
+

Creates a ResourceClearValue object with the specified Depth/Stencil values.

+
+
Parameters:
+
    +
  • d – The depth component of the clear value.

  • +
  • s – The stencil component of the clear value.

  • +
+
+
Returns:
+

The created ResourceClearValue object.

+
+
+
+ +
+
+
+union ResourceClearValue
+
+

Public Members

+
+
+uint32_t asUint[4]
+
+ +
+
+struct ResourceClearValue::[anonymous] [anonymous]
+
+ +
+
+int32_t asInt[4]
+
+ +
+
+struct ResourceClearValue::[anonymous] [anonymous]
+
+ +
+
+float asFloat[4]
+
+ +
+
+struct ResourceClearValue::[anonymous] [anonymous]
+
+ +
+
+float asDepth
+
+ +
+
+uint8_t asStencil
+
+ +
+
+struct ResourceClearValue::[anonymous] [anonymous]
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/RwResource.html b/api-references/dagor-render/index/d3dAPI/RwResource.html new file mode 100644 index 000000000..17d7c069d --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/RwResource.html @@ -0,0 +1,310 @@ + + + + + + + Read/Write (UAV) resources — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Read/Write (UAV) resources

+
+
+namespace d3d
+
+

Functions

+
+
+bool set_rwtex(uint32_t shader_stage, uint32_t slot, BaseTexture *tex, uint32_t face, uint32_t mip_level, bool as_uint = false)
+

Set the read/write (UAV) texture to slot.

+
+
Parameters:
+
+
+
Returns:
+

true if success, false otherwise

+
+
+
+ +
+
+bool clear_rwtexi(BaseTexture *tex, const uint32_t val[4], uint32_t face, uint32_t mip_level)
+

Clear UAV texture with integer values.

+
+
Parameters:
+
    +
  • tex – texture to clear

  • +
  • val – clear value

  • +
  • face – face index for cubemaps, 3D textures and texture arrays

  • +
  • mip_level – mip level

  • +
+
+
Returns:
+

true if success, false otherwise

+
+
+
+ +
+
+bool clear_rwtexf(BaseTexture *tex, const float val[4], uint32_t face, uint32_t mip_level)
+

Clear UAV texture with float values.

+
+
Parameters:
+
    +
  • tex – texture to clear

  • +
  • val – clear value

  • +
  • face – face index for cubemaps, 3D textures and texture arrays

  • +
  • mip_level – mip level

  • +
+
+
Returns:
+

true if success, false otherwise

+
+
+
+ +
+
+bool clear_rwbufi(Sbuffer *buf, const uint32_t val[4])
+

Clear UAV buffer with integer values.

+

4 components are required by DirectX API, so the buffer will be cleared with the same 4 dwords pattern.

+
+
Parameters:
+
    +
  • buf – buffer to clear

  • +
  • val – clear value

  • +
+
+
Returns:
+

true if success, false otherwise

+
+
+
+ +
+
+bool clear_rwbuff(Sbuffer *buf, const float val[4])
+

Clear UAV buffer with float values.

+

4 components are required by DirectX API, so the buffer will be cleared with the same 4 dwords pattern.

+
+
Parameters:
+
    +
  • buf – buffer to clear

  • +
  • val – clear value

  • +
+
+
Returns:
+

true if success, false otherwise

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/Sampler.html b/api-references/dagor-render/index/d3dAPI/Sampler.html new file mode 100644 index 000000000..7a743e8d5 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/Sampler.html @@ -0,0 +1,552 @@ + + + + + + + Samplers — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Samplers

+
+

Defines

+
+
+EQU(field)
+
+ +
+
+CMP(field)
+
+ +
+
+FOR_EACH_FIELD(op, sep)
+
+ +
+
+

Enums

+
+
+enum [anonymous]
+

MipMapMode enum.

+

Values:

+
+
+enumerator TEXMIPMAP_DEFAULT
+

driver default

+
+ +
+
+enumerator TEXMIPMAP_NONE
+

no mipmapping

+
+ +
+
+enumerator TEXMIPMAP_POINT
+

point mipmapping

+
+ +
+
+enumerator TEXMIPMAP_LINEAR
+

linear mipmapping

+
+ +
+ +
+
+
+namespace d3d
+
+

Enums

+
+
+enum class MipMapMode : uint32_t
+

MipMapMode enum class.

+

Values:

+
+
+enumerator Default
+

[DEPRECATED] driver default

+
+ +
+
+enumerator Disabled
+

[DEPRECATED] no mipmapping

+
+ +
+
+enumerator Point
+

point mipmapping

+
+ +
+
+enumerator Linear
+

linear mipmapping

+
+ +
+ +
+
+enum class FilterMode : uint32_t
+

FilterMode enum class.

+

Values:

+
+
+enumerator Default
+

[DEPRECATED] driver default

+
+ +
+
+enumerator Disabled
+

[DEPRECATED]

+
+ +
+
+enumerator Point
+

point sampling

+
+ +
+
+enumerator Linear
+

linear sampling

+
+ +
+
+enumerator Best
+

[DEPRECATED] anisotropic and similar, if available

+
+ +
+
+enumerator Compare
+

point comparasion for using in pcf

+
+ +
+ +
+
+enum class AddressMode : uint32_t
+

AddressMode enum class.

+

Values:

+
+
+enumerator Wrap
+

Repeats the texture when texture coordinates are outside [0, 1].

+
+ +
+
+enumerator Mirror
+

Mirrors the texture when texture coordinates are outside [0, 1].

+
+ +
+
+enumerator Clamp
+

Clamps texture coordinates to [0, 1].

+
+ +
+
+enumerator Border
+

Uses the border color when texture coordinates are outside [0, 1].

+
+ +
+
+enumerator MirrorOnce
+

Similar to Mirror and Clamp. Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value. The most common usage is for volume textures, where support for the full MirrorOnce texture-addressing mode is not necessary, but the data is symmetrical around the one axis.

+
+ +
+ +
+
+

Functions

+
+
+SamplerHandle request_sampler(const SamplerInfo &sampler_info)
+

Request a sampler handle with the given sampler info.

+

Creates a sampler, when necessary. Identical infos should yield identical handles. This call is thread-safe and does not require external synchronization.

+
+
Parameters:
+

sampler_info – The information needed to create the sampler

+
+
Returns:
+

SamplerHandle The handle to the sampler

+
+
+
+ +
+
+void set_sampler(unsigned shader_stage, unsigned slot, SamplerHandle sampler)
+

Binds given sampler to the slot.

+

This call is not thread-safe, requires global gpu lock to be held

+
+
Parameters:
+
    +
  • shader_stage – The shader stage to bind the sampler to. One of STAGE_XXX enum.

  • +
  • slot – The slot to bind the sampler to

  • +
  • sampler – The handle to the sampler to be bound

  • +
+
+
+
+ +
+
+
+struct BorderColor
+

BorderColor struct.

+
+

Public Types

+
+
+enum class Color : UnderlyingT
+

Values:

+
+
+enumerator TransparentBlack
+

Transparent black color.

+
+ +
+
+enumerator OpaqueBlack
+

Opaque black color.

+
+ +
+
+enumerator OpaqueWhite
+

Opaque white color.

+
+ +
+ +
+
+using UnderlyingT = uint32_t
+
+ +
+
+

Public Functions

+
+
+inline BorderColor(Color color = Color::TransparentBlack)
+
+ +
+
+inline operator E3DCOLOR() const
+
+ +
+
+inline operator UnderlyingT() const
+
+ +
+
+

Public Members

+
+
+enum d3d::BorderColor::Color color
+
+ +
+
+ +
+
+struct SamplerInfo
+

SamplerInfo struct.

+

This struct contains the information needed to create a sampler

+
+

Public Functions

+
+
+inline bool operator==(const SamplerInfo &rhs) const
+
+ +
+
+inline bool operator!=(const SamplerInfo &rhs) const
+
+ +
+
+inline bool operator<(const SamplerInfo &rhs) const
+
+ +
+
+

Public Members

+
+
+MipMapMode mip_map_mode = MipMapMode::Default
+

MipMapMode.

+
+ +
+
+FilterMode filter_mode = FilterMode::Default
+

FilterMode.

+
+ +
+
+AddressMode address_mode_u = AddressMode::Wrap
+

AddressMode for U coordinate.

+
+ +
+
+AddressMode address_mode_v = AddressMode::Wrap
+

AddressMode for V coordinate.

+
+ +
+
+AddressMode address_mode_w = AddressMode::Wrap
+

AddressMode for W coordinate.

+
+ +
+
+BorderColor border_color
+

Border color.

+
+ +
+
+float anisotropic_max = 1.f
+

Max anisotropic value. Only positive power of two values <= 16 are valid.

+
+ +
+
+float mip_map_bias = 0.f
+

MipMap bias.

+
+ +
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/Shader.html b/api-references/dagor-render/index/d3dAPI/Shader.html new file mode 100644 index 000000000..b1460eda4 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/Shader.html @@ -0,0 +1,367 @@ + + + + + + + Shader programs — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Shader programs

+
+
+namespace d3d
+
+

Functions

+
+
+PROGRAM create_program(VPROG vprog, FSHADER fsh, VDECL vdecl, unsigned *strides = nullptr, unsigned streams = 0)
+

Creates a program with a vertex shader, fragment shader, and vertex declaration.

+

+If strides and streams are not set, they will be obtained from the vertex declaration. The program should be deleted externally using delete_program().

+
+
Parameters:
+
    +
  • vprog – The vertex shader program.

  • +
  • fsh – The fragment shader program.

  • +
  • vdecl – The vertex declaration.

  • +
  • strides – The stride values for each vertex stream (optional, default is 0).

  • +
  • streams – The number of vertex streams (optional, default is 0).

  • +
+
+
Returns:
+

The created program.

+
+
+
+ +
+
+PROGRAM create_program(const uint32_t *vpr_native, const uint32_t *fsh_native, VDECL vdecl, unsigned *strides = nullptr, unsigned streams = 0)
+

Creates a program with native vertex shader and fragment shader code.

+

+If strides and streams are not set, they will be obtained from the vertex declaration.

+
+
Parameters:
+
    +
  • vpr_native – The native code for the vertex shader.

  • +
  • fsh_native – The native code for the fragment shader.

  • +
  • vdecl – The vertex declaration.

  • +
  • strides – The stride values for each vertex stream (optional, default is 0).

  • +
  • streams – The number of vertex streams (optional, default is 0).

  • +
+
+
Returns:
+

The created program.

+
+
+
+ +
+
+PROGRAM create_program_cs(const uint32_t *cs_native, CSPreloaded preloaded)
+

Creates a compute shader program with native code.

+
+
Parameters:
+
    +
  • cs_native – The native code for the compute shader.

  • +
  • preloaded – The preloaded data for the compute shader.

  • +
+
+
Returns:
+

The created program.

+
+
+
+ +
+
+bool set_program(PROGRAM program)
+

Sets the program as the current program, including the pixel shader, vertex shader, and vertex declaration.

+
+
Parameters:
+

program – The program to set.

+
+
Returns:
+

True if the program was set successfully, false otherwise.

+
+
+
+ +
+
+void delete_program(PROGRAM program)
+

Deletes a program, including the vertex shader and fragment shader.

+
+

Warning

+

The vertex declaration should be deleted independently.

+
+
+
Parameters:
+

program – The program to delete.

+
+
+
+ +
+
+VPROG create_vertex_shader(const uint32_t *native_code)
+

Creates a vertex shader with native code.

+
+
Parameters:
+

native_code – The native code for the vertex shader.

+
+
Returns:
+

The created vertex shader.

+
+
+
+ +
+
+void delete_vertex_shader(VPROG vs)
+

Deletes a vertex shader.

+
+
Parameters:
+

vs – The vertex shader to delete.

+
+
+
+ +
+
+FSHADER create_pixel_shader(const uint32_t *native_code)
+

Creates a pixel shader with native code.

+
+
Parameters:
+

native_code – The native code for the pixel shader.

+
+
Returns:
+

The created pixel shader.

+
+
+
+ +
+
+void delete_pixel_shader(FSHADER ps)
+

Deletes a pixel shader.

+
+
Parameters:
+

ps – The pixel shader to delete.

+
+
+
+ +
+
+PROGRAM get_debug_program()
+

Gets the debug program.

+

This program’s bytecode is written in the source code of the driver, so the program is always available (if a driver supports this API). The debug program is used to draw debug stuff (vertex colored primitives).

+
+
Returns:
+

The debug program.

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/ShaderConstants.html b/api-references/dagor-render/index/d3dAPI/ShaderConstants.html new file mode 100644 index 000000000..86edbb74d --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/ShaderConstants.html @@ -0,0 +1,481 @@ + + + + + + + Shader constants and const buffers — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader constants and const buffers

+
+
+namespace d3d
+
+

Functions

+
+
+bool set_const(unsigned stage, unsigned reg_base, const void *data, unsigned num_regs)
+

Sets shader constants for the specified stage.

+
+

Note

+

These constants will be ignored, if a constant buffer is explicitly bound to slot 0.

+
+
+
Parameters:
+
    +
  • stage – The shader stage (STAGE_VS, STAGE_PS, STAGE_CS).

  • +
  • reg_base – The base register index.

  • +
  • data – Pointer to the data to be set. The size must be a multiple of sizeof(float4).

  • +
  • num_regs – The number of registers (float4) to be set.

  • +
+
+
Returns:
+

True if the constants were set successfully, false otherwise.

+
+
+
+ +
+
+inline bool set_vs_const(unsigned reg_base, const void *data, unsigned num_regs)
+

Sets vertex shader constants.

+
+

Note

+

These constants will be ignored, if a constant buffer is explicitly bound to slot 0.

+
+
+
Parameters:
+
    +
  • reg_base – The base register index.

  • +
  • data – Pointer to the data to be set. The size must be a multiple of sizeof(float4).

  • +
  • num_regs – The number of registers (float4) to be set.

  • +
+
+
Returns:
+

True if the constants were set successfully, false otherwise.

+
+
+
+ +
+
+inline bool set_ps_const(unsigned reg_base, const void *data, unsigned num_regs)
+

Sets pixel shader constants.

+
+

Note

+

These constants will be ignored, if a constant buffer is explicitly bound to slot 0.

+
+
+
Parameters:
+
    +
  • reg_base – The base register index.

  • +
  • data – Pointer to the data to be set. The size must be a multiple of sizeof(float4).

  • +
  • num_regs – The number of registers (float4) to be set.

  • +
+
+
Returns:
+

True if the constants were set successfully, false otherwise.

+
+
+
+ +
+
+inline bool set_cs_const(unsigned reg_base, const void *data, unsigned num_regs)
+

Sets compute shader constants.

+
+

Note

+

These constants will be ignored, if a constant buffer is explicitly bound to slot 0.

+
+
+
Parameters:
+
    +
  • reg_base – The base register index.

  • +
  • data – Pointer to the data to be set. The size must be a multiple of sizeof(float4).

  • +
  • num_regs – The number of registers (float4) to be set.

  • +
+
+
Returns:
+

True if the constants were set successfully, false otherwise.

+
+
+
+ +
+
+inline bool set_vs_const1(unsigned reg, float v0, float v1, float v2, float v3)
+

Sets a single vertex shader constant register.

+
+

Note

+

This constant will be ignored, if a constant buffer is explicitly bound to slot 0.

+
+
+
Parameters:
+
    +
  • reg – The register index.

  • +
  • v0 – The value for the first component.

  • +
  • v1 – The value for the second component.

  • +
  • v2 – The value for the third component.

  • +
  • v3 – The value for the fourth component.

  • +
+
+
Returns:
+

True if the constant was set successfully, false otherwise.

+
+
+
+ +
+
+inline bool set_ps_const1(unsigned reg, float v0, float v1, float v2, float v3)
+

Sets a single pixel shader constant register.

+
+

Note

+

This constant will be ignored, if a constant buffer is explicitly bound to slot 0.

+
+
+
Parameters:
+
    +
  • reg – The register index.

  • +
  • v0 – The value for the first component.

  • +
  • v1 – The value for the second component.

  • +
  • v2 – The value for the third component.

  • +
  • v3 – The value for the fourth component.

  • +
+
+
Returns:
+

True if the constant was set successfully, false otherwise.

+
+
+
+ +
+
+bool set_immediate_const(unsigned stage, const uint32_t *data, unsigned num_words)
+

Sets immediate constants for the specified stage.

+

Immediate constants are supposed to be very cheap to set dwords. It is guaranteed to support up to 4 dwords on each stage. Use as little as possible, ideally one or two (or none). On XB1(PS4), it is implemented as user regs (C|P|V)SSetShaderUserData. On DX11, it is implemented as constant buffers. On VK/DX12, it should be implemented as descriptor/push constants buffers. Calling with data = nullptr || num_words == 0 is benign and currently works as “stop using immediate” (probably have to be replaced with shader system).

+
+
Parameters:
+
    +
  • stage – The shader stage (STAGE_VS, STAGE_PS, STAGE_CS).

  • +
  • data – Pointer to the data to be set.

  • +
  • num_words – The number of words to be set.

  • +
+
+
Returns:
+

True if the constants were set successfully, false otherwise.

+
+
+
+ +
+
+bool set_const_buffer(unsigned stage, unsigned slot, const float *data, unsigned num_regs)
+

Sets a constant buffer for the specified stage. PS4 specific.

+

Constant buffers are valid until driver acquire call or end of frame. To unbind, use set_const_buffer(stage, 0, nullptr).

+
+

Note

+

When slot is 0, and data is not nullptr, it will also override any constants set via set_const and related calls.

+
+
+
Parameters:
+
    +
  • stage – The shader stage (STAGE_VS, STAGE_PS, STAGE_CS).

  • +
  • slot – The buffer slot.

  • +
  • data – Pointer to the data to be set. The size must be a multiple of sizeof(float4).

  • +
  • num_regs – The number of registers (float4) to be set.

  • +
+
+
Returns:
+

True if the constant buffer was set successfully, false otherwise.

+
+
+
+ +
+
+bool set_const_buffer(unsigned stage, unsigned slot, Sbuffer *buffer, uint32_t consts_offset = 0, uint32_t consts_size = 0)
+

Sets a constant buffer for the specified stage using a buffer object.

+

Constant buffers are valid until driver acquire call or end of frame. To unbind, use set_const_buffer(stage, 0, nullptr).

+

+
+Todo:
+

consts_offset and consts_size are not used. Remove them?

+
+ +

+
+
Parameters:
+
    +
  • stage – The shader stage (STAGE_VS, STAGE_PS, STAGE_CS).

  • +
  • slot – The buffer slot.

  • +
  • buffer – Pointer to the buffer object. Must be created with d3d::buffers::create_persistent_cb or d3d::buffers::create_one_frame_cb.

  • +
  • consts_offset – The offset of the constants in the buffer. (Not used)

  • +
  • consts_size – The size of the constants in the buffer. (Not used)

  • +
+
+
Returns:
+

True if the constant buffer was set successfully, false otherwise.

+
+
+
+ +
+
+int set_vs_constbuffer_size(int required_size)
+

Sets the size of the vertex shader constant buffer that can be filled with set_const call.

+
+
Parameters:
+

required_size – The required size of the constant buffer. If 0, the default size is set.

+
+
Returns:
+

The actual size of the constant buffer.

+
+
+
+ +
+
+int set_cs_constbuffer_size(int required_size)
+

Sets the size of the compute shader constant buffer that can be filled with set_const call.

+
+
Parameters:
+

required_size – The required size of the constant buffer. If 0, the default size is set.

+
+
Returns:
+

The actual size of the constant buffer.

+
+
+
+ +
+
+inline bool set_cb0_data(unsigned stage, const float *data, unsigned num_regs)
+

Sets a constant buffer at slot 0 for the specified stage. Uses the fastest method available on the platform.

+

Constant buffers are valid until driver acquire call or end of frame. To unbind, use release_cb0_data(stage).

+
+
Parameters:
+
    +
  • stage – The shader stage (STAGE_VS, STAGE_PS, STAGE_CS).

  • +
  • data – Pointer to the data to be set. The size must be a multiple of sizeof(float4).

  • +
  • num_regs – The number of registers (float4) to be set.

  • +
+
+
Returns:
+

True if the constants were set successfully, false otherwise.

+
+
+
+ +
+
+inline void release_cb0_data(unsigned stage)
+

Releases the constant buffer at slot 0, which should have been previously set by set_cb0_data.

+
+
Parameters:
+

stage – The shader stage (STAGE_VS, STAGE_PS, STAGE_CS).

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/TiledResource.html b/api-references/dagor-render/index/d3dAPI/TiledResource.html new file mode 100644 index 000000000..89159afde --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/TiledResource.html @@ -0,0 +1,387 @@ + + + + + + + Tiled Resource — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Tiled Resource

+
+
+struct TileMapping
+

Describes a mapping between a tile in a texture and a memory area in a heap.

+
+

Public Members

+
+
+size_t texX
+

The tile coordinates in tiles, not pixels!

+
+ +
+
+size_t texY
+

The tile coordinates in tiles, not pixels!

+
+ +
+
+size_t texZ
+

The tile coordinates in tiles, not pixels!

+
+ +
+
+size_t texSubresource
+

The index of the subresource.

+
+ +
+
+size_t heapTileIndex
+

The index of the tile in the heap. Not bytes, but tile index!

+
+ +
+
+size_t heapTileSpan
+

The number of tiles to map. Zero is invalid, and if it is not one, an array of tiles will be mapped, to the specified location. Example usage for this is packed mip tails.

+

+
+ +
+
+ +
+
+struct TextureTilingInfo
+

Structure representing the properties of a tiled resource.

+

NOTE: even if numPackedMips is zero, numTilesNeededForPackedMips may be greater than zero, which is a special case, and numTilesNeededForPackedMips tiles still need to be assigned at numUnpackedMips.

+
+

Public Members

+
+
+size_t totalNumberOfTiles
+

Total number of tiles in the resource.

+
+ +
+
+size_t numUnpackedMips
+

Number of unpacked mips in the resource.

+
+ +
+
+size_t numPackedMips
+

Number of packed mips in the resource.

+
+ +
+
+size_t numTilesNeededForPackedMips
+

Number of tiles needed to store the packed mips.

+
+ +
+
+size_t firstPackedTileIndex
+

Index of the first tile storing packed mips.

+
+ +
+
+size_t tileWidthInPixels
+

Width of each tile in pixels.

+
+ +
+
+size_t tileHeightInPixels
+

Height of each tile in pixels.

+
+ +
+
+size_t tileDepthInPixels
+

Depth of each tile in pixels.

+
+ +
+
+size_t tileMemorySize
+

Size of each tile in bytes.

+
+ +
+
+size_t subresourceWidthInTiles
+

Width of the subresource in tiles.

+
+ +
+
+size_t subresourceHeightInTiles
+

Height of the subresource in tiles.

+
+ +
+
+size_t subresourceDepthInTiles
+

Depth of the subresource in tiles.

+
+ +
+
+size_t subresourceStartTileIndex
+

Index of the first tile of the subresource.

+
+ +
+
+ +
+
+namespace d3d
+
+

Functions

+
+
+void map_tile_to_resource(BaseTexture *tex, ResourceHeap *heap, const TileMapping *mapping, size_t mapping_count)
+

Maps a memory area of the heap to the specified xyz location of the texture.

+

Use heap == nullptr to remove the link between a tile and the mapped heap portion.

+
+
Parameters:
+
    +
  • tex – The texture to map.

  • +
  • heap – The heap to map.

  • +
  • mapping – The mapping to apply.

  • +
  • mapping_count – The number of mappings in the mapping array.

  • +
+
+
+
+ +
+
+TextureTilingInfo get_texture_tiling_info(BaseTexture *tex, size_t subresource)
+

Retrieves the tiling information of a texture.

+
+
Parameters:
+
    +
  • tex – The texture to query.

  • +
  • subresource – The index of the subresource.

  • +
+
+
Returns:
+

The tiling information of the texture.

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/VariableRateShading.html b/api-references/dagor-render/index/d3dAPI/VariableRateShading.html new file mode 100644 index 000000000..bd4068e91 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/VariableRateShading.html @@ -0,0 +1,255 @@ + + + + + + + Variable rate shading API — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Variable rate shading API

+
+
+namespace d3d
+
+

Functions

+
+
+void set_variable_rate_shading(unsigned rate_x, unsigned rate_y, VariableRateShadingCombiner vertex_combiner = VariableRateShadingCombiner::VRS_PASSTHROUGH, VariableRateShadingCombiner pixel_combiner = VariableRateShadingCombiner::VRS_PASSTHROUGH)
+

Sets variable rate shading setup for next draw calls.

+
+

Note

+

Rates (rate_x, rate_y) of 1 by 4 or 4 by 1 are invalid.

+
+
+

Note

+

Depth/Stencil values are always computed at full rate and so shaders that modify depth value output may interfere with the pixel_combiner.

+
+
+
Parameters:
+
    +
  • rate_x, rate_y – Constant rates for the next draw calls, those are supported by all VRS capable devices. Valid values for both are 1, 2 and with the corresponding feature cap 4.

  • +
  • vertex_combiner – The mode in which the constant rate of rate_x and rate_y is combined with a possible vertex/geometry shader rate output. For shader outputs see SV_ShadingRate, note that the provoking vertex or the per primitive value is used.

  • +
  • pixel_combiner – The mode in which the result of ‘vertex_combiner’ is combined with the rate of the sampling rate texture set by set_variable_rate_shading_texture.

  • +
+
+
+
+ +
+
+void set_variable_rate_shading_texture(BaseTexture *rate_texture = nullptr)
+

Sets the variable rate shading texture for the next draw calls.

+

+Note that when you start to modify the used texture, you should reset the used shading rate texture to null to ensure that on next use as a shading rate source, the texture is in a state the device can use.

+
+

Note

+

It is invalid to call this when DeviceDriverCapabilities::hasVariableRateShadingTexture feature is not supported.

+
+
+
Parameters:
+

rate_texture – The texture to use as a shading rate source.

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/VertexIndexBuffer.html b/api-references/dagor-render/index/d3dAPI/VertexIndexBuffer.html new file mode 100644 index 000000000..e622a7aa6 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/VertexIndexBuffer.html @@ -0,0 +1,383 @@ + + + + + + + Vertex and Index buffer API — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Vertex and Index buffer API

+
+

Typedefs

+
+
+using Ibuffer = Sbuffer
+
+ +
+
+using Vbuffer = Sbuffer
+
+ +
+
+
+namespace d3d
+
+

Functions

+
+
+Sbuffer *create_vb(int size_bytes, int flags, const char *name = "")
+

Creates a vertex buffer.

+

This function creates a vertex buffer with the specified size and flags.

+

+
+Todo:
+

Make the name parameter mandatory.

+
+ +

+
+
Parameters:
+
    +
  • size_bytes – The size of the vertex buffer in bytes.

  • +
  • flags – The creation flags.

  • +
  • name – The name of the vertex buffer (temporarily optional).

  • +
+
+
Returns:
+

A pointer to the created vertex buffer.

+
+
+
+ +
+
+Sbuffer *create_ib(int size_bytes, int flags, const char *stat_name = "ib")
+

Creates an index buffer.

+

This function creates an index buffer with the specified size and flags.

+

+
+Todo:
+

Make the name parameter mandatory.

+
+ +

+
+
Parameters:
+
    +
  • size_bytes – The size of the index buffer in bytes.

  • +
  • flags – The creation flags.

  • +
  • stat_name – The name of the index buffer (temporarily optional).

  • +
+
+
Returns:
+

A pointer to the created index buffer.

+
+
+
+ +
+
+bool setvsrc_ex(int stream, Sbuffer *vb, int offset, int stride_bytes)
+

Sets the vertex buffer as a stream source.

+

This function sets the vertex buffer as a stream source for the specified stream.

+
+
Parameters:
+
    +
  • stream – The stream index.

  • +
  • vb – A pointer to the vertex buffer.

  • +
  • offset – The offset in bytes from the start of the vertex buffer.

  • +
  • stride_bytes – The stride in bytes between vertices.

  • +
+
+
Returns:
+

True if the vertex stream source was set successfully, false otherwise.

+
+
+
+ +
+
+inline bool setvsrc(int stream, Sbuffer *vb, int stride_bytes)
+

Sets the vertex buffer as a stream source.

+

This function sets the vertex buffer as a stream source for the specified stream.

+
+
Parameters:
+
    +
  • stream – The stream index.

  • +
  • vb – A pointer to the vertex buffer.

  • +
  • stride_bytes – The stride in bytes between vertices.

  • +
+
+
Returns:
+

True if the vertex stream source was set successfully, false otherwise.

+
+
+
+ +
+
+bool setind(Sbuffer *ib)
+

Sets the index buffer.

+

This function sets the index buffer for rendering.

+
+
Parameters:
+

ib – A pointer to the index buffer.

+
+
Returns:
+

True if the indices were set successfully, false otherwise.

+
+
+
+ +
+
+VDECL create_vdecl(VSDTYPE *vsd)
+

Creates a DX8-style vertex declaration.

+

This function creates a DX8-style vertex declaration based on the specified vertex shader declaration.

+

+
+Todo:
+

Do we really need to support DX8-style vertex declarations? Maybe it’s time to look for a more modern solution.

+
+ +

+
+
Parameters:
+

vsd – The vertex shader declaration.

+
+
Returns:
+

The created vertex declaration, or BAD_VDECL on error.

+
+
+
+ +
+
+void delete_vdecl(VDECL vdecl)
+

Deletes a vertex declaration.

+

This function deletes a vertex declaration.

+
+
Parameters:
+

vdecl – The vertex declaration to delete.

+
+
+
+ +
+
+bool setvdecl(VDECL vdecl)
+

Sets the current vertex declaration.

+

This function sets the current vertex declaration for rendering.

+
+
Parameters:
+

vdecl – The vertex declaration to set.

+
+
Returns:
+

True if the vertex declaration was set successfully, false otherwise.

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/ViewScissor.html b/api-references/dagor-render/index/d3dAPI/ViewScissor.html new file mode 100644 index 000000000..c02388de2 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/ViewScissor.html @@ -0,0 +1,311 @@ + + + + + + + View and Scissor d3d API — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

View and Scissor d3d API

+
+
+namespace d3d
+
+

Functions

+
+
+bool setscissor(int x, int y, int w, int h)
+

Set scissor for the current render target. Part of the render target that is outside the scissor rectangle is not rendered.

+
+
Parameters:
+
    +
  • x – - left corner of the scissor rectangle

  • +
  • y – - top corner of the scissor rectangle

  • +
  • w – - width of the scissor rectangle

  • +
  • h – - height of the scissor rectangle

  • +
+
+
Returns:
+

true if the scissor rectangle was set successfully

+
+
+
+ +
+
+bool setscissors(dag::ConstSpan<ScissorRect> scissorRects)
+

Set scissor for the current set of render targets. Part of the render target that is outside the scissor rectangle is not rendered.

+
+
Parameters:
+

scissorRects – - array of scissor rectangles. Should be the same size as the number of render targets.

+
+
Returns:
+

true if the scissor rectangles were set successfully

+
+
+
+ +
+
+bool setview(int x, int y, int w, int h, float minz, float maxz)
+

Set view for the current render target. Part of the render target that is outside the view rectangle is not rendered.

+
+
Parameters:
+
    +
  • x – - left corner of the view rectangle

  • +
  • y – - top corner of the view rectangle

  • +
  • w – - width of the view rectangle

  • +
  • h – - height of the view rectangle

  • +
  • minz – - minimum depth value of the view rectangle

  • +
  • maxz – - maximum depth value of the view rectangle

  • +
+
+
Returns:
+

true if the view rectangle was set successfully

+
+
+
+ +
+
+bool setviews(dag::ConstSpan<Viewport> viewports)
+

Set view for the current set of render targets. Part of the render target that is outside the view rectangle is not rendered.

+
+
Parameters:
+

viewports – - array of view rectangles. Should be the same size as the number of render targets.

+
+
Returns:
+

true if the view rectangles were set successfully

+
+
+
+ +
+
+bool getview(int &x, int &y, int &w, int &h, float &minz, float &maxz)
+

Get view for the current render target.

+

+
+Deprecated:
+

Don’t use it since this method relies on the global state.

+
+ +

+
+
Parameters:
+
    +
  • x – - left corner of the view rectangle

  • +
  • y – - top corner of the view rectangle

  • +
  • w – - width of the view rectangle

  • +
  • h – - height of the view rectangle

  • +
  • minz – - minimum depth value of the view rectangle

  • +
  • maxz – - maximum depth value of the view rectangle

  • +
+
+
Returns:
+

true if the view rectangle was retrieved successfully

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/constants.html b/api-references/dagor-render/index/d3dAPI/constants.html new file mode 100644 index 000000000..f2ada9fdc --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/constants.html @@ -0,0 +1,11932 @@ + + + + + + + Constants, Structures and Enumerations — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Constants, Structures and Enumerations

+
+

Defines

+
+
+VSDOP_MASK
+
+ +
+
+VSDOP_STREAM
+
+ +
+
+VSDOP_INPUT
+
+ +
+
+VSDT_MASK
+
+ +
+
+VSDR_MASK
+
+ +
+
+VSDS_MASK
+
+ +
+
+VSDS_PER_INSTANCE_DATA
+
+ +
+
+GET_VSDREG(a)
+
+ +
+
+MAKE_VSDREG(a)
+
+ +
+
+GET_VSDSTREAM(a)
+
+ +
+
+MAKE_VSDSTREAM(a)
+
+ +
+
+VSD_SKIPFLG
+
+ +
+
+GET_VSDSKIP(a)
+
+ +
+
+VSD_END
+
+ +
+
+VSTREAMSRC_NORMAL_DATA
+
+ +
+
+VSTREAMSRC_INDEXED_DATA
+
+ +
+
+VSTREAMSRC_INSTANCE_DATA
+
+ +
+
+

Typedefs

+
+
+typedef int VPROG
+
+ +
+
+typedef int FSHADER
+
+ +
+
+typedef int VDECL
+
+ +
+
+typedef int PROGRAM
+
+ +
+
+typedef int PALID
+
+ +
+
+typedef int VPRTYPE
+
+ +
+
+typedef unsigned long FSHTYPE
+
+ +
+
+typedef unsigned long VSDTYPE
+
+ +
+
+typedef unsigned long long GPUFENCEHANDLE
+
+ +
+
+using DeviceDriverCapabilities = DeviceDriverCapabilitiesBase
+
+ +
+
+using DeviceDriverIssues = DeviceDriverIssuesNoIssues
+
+ +
+
+using DeviceDriverShaderModelVersion = d3d::shadermodel::Version
+
+ +
+
+

Enums

+
+
+enum ShaderStage
+

Values:

+
+
+enumerator STAGE_CS
+
+ +
+
+enumerator STAGE_PS
+
+ +
+
+enumerator STAGE_VS
+
+ +
+
+enumerator STAGE_MAX
+
+ +
+
+enumerator STAGE_RAYTRACE
+
+ +
+
+enumerator STAGE_CS_ASYNC_STATE
+
+ +
+
+enumerator STAGE_MAX_EXT
+
+ +
+ +
+
+enum class GpuPipeline
+

Values:

+
+
+enumerator GRAPHICS
+
+ +
+
+enumerator ASYNC_COMPUTE
+
+ +
+
+enumerator TRANSFER
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator MAXSAMPLERS
+
+ +
+
+enumerator MAXSTREAMS
+
+ +
+
+enumerator MAXSAMPLERS_VS
+
+ +
+
+enumerator MAX_SLI_AFRS
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator VDECLUSAGE_POS
+
+ +
+
+enumerator VDECLUSAGE_BLENDW
+
+ +
+
+enumerator VDECLUSAGE_BLENDIND
+
+ +
+
+enumerator VDECLUSAGE_NORM
+
+ +
+
+enumerator VDECLUSAGE_PSIZE
+
+ +
+
+enumerator VDECLUSAGE_TC
+
+ +
+
+enumerator VDECLUSAGE_TANG
+
+ +
+
+enumerator VDECLUSAGE_BINORM
+
+ +
+
+enumerator VDECLUSAGE_TESSFACTOR
+
+ +
+
+enumerator VDECLUSAGE_TPOS
+
+ +
+
+enumerator VDECLUSAGE_COLOR
+
+ +
+
+enumerator VDECLUSAGE_FOG
+
+ +
+
+enumerator VDECLUSAGE_DEPTH
+
+ +
+
+enumerator VDECLUSAGE_SAMPLE
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator SBCF_USAGE_SHADER_BINDING_TABLE
+

Buffer can be used as a shader binding table. Should not be used directly, use get_shader_binding_table_buffer_properties to calculate all properties, including create flags.

+
+ +
+
+enumerator SBCF_USAGE_ACCELLERATION_STRUCTURE_BUILD_SCRATCH_SPACE
+

Buffer is used as scratch space for RT structure builds.

+
+ +
+
+enumerator SBCF_DYNAMIC
+
+ +
+
+enumerator SBCF_ZEROMEM
+
+ +
+
+enumerator SBCF_INDEX32
+
+ +
+
+enumerator SBCF_FRAMEMEM
+
+ +
+
+enumerator SBCF_USAGE_READ_BACK
+
+ +
+
+enumerator SBCF_ALIGN16
+
+ +
+
+enumerator SBCF_CPU_ACCESS_MASK
+
+ +
+
+enumerator SBCF_CPU_ACCESS_WRITE
+
+ +
+
+enumerator SBCF_CPU_ACCESS_READ
+
+ +
+
+enumerator SBCF_BIND_MASK
+
+ +
+
+enumerator SBCF_BIND_VERTEX
+
+ +
+
+enumerator SBCF_BIND_INDEX
+
+ +
+
+enumerator SBCF_BIND_CONSTANT
+
+ +
+
+enumerator SBCF_BIND_SHADER_RES
+
+ +
+
+enumerator SBCF_BIND_UNORDERED
+
+ +
+
+enumerator SBCF_MISC_MASK
+
+ +
+
+enumerator SBCF_MISC_DRAWINDIRECT
+
+ +
+
+enumerator SBCF_MISC_ALLOW_RAW
+
+ +
+
+enumerator SBCF_MISC_STRUCTURED
+
+ +
+
+enumerator SBCF_MISC_ESRAM_ONLY
+
+ +
+
+enumerator SBCF_CB_PERSISTENT
+
+ +
+
+enumerator SBCF_CB_ONE_FRAME
+
+ +
+
+enumerator SBCF_UA_SR_BYTE_ADDRESS
+
+ +
+
+enumerator SBCF_UA_SR_STRUCTURED
+
+ +
+
+enumerator SBCF_UA_BYTE_ADDRESS
+
+ +
+
+enumerator SBCF_UA_STRUCTURED
+
+ +
+
+enumerator SBCF_UA_BYTE_ADDRESS_READBACK
+
+ +
+
+enumerator SBCF_UA_STRUCTURED_READBACK
+
+ +
+
+enumerator SBCF_UA_INDIRECT
+
+ +
+
+enumerator SBCF_INDIRECT
+
+ +
+
+enumerator SBCF_STAGING_BUFFER
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator WRAP_COORD0
+
+ +
+
+enumerator WRAP_COORD1
+
+ +
+
+enumerator WRAP_COORD2
+
+ +
+
+enumerator WRAP_COORD3
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator VCDEST_NONE
+
+ +
+
+enumerator VCDEST_AMB
+
+ +
+
+enumerator VCDEST_DIFF
+
+ +
+
+enumerator VCDEST_AMB_DIFF
+
+ +
+
+enumerator VCDEST_EMIS
+
+ +
+
+enumerator VCDEST_SPEC
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator WRITEMASK_RED0
+
+ +
+
+enumerator WRITEMASK_GREEN0
+
+ +
+
+enumerator WRITEMASK_BLUE0
+
+ +
+
+enumerator WRITEMASK_ALPHA0
+
+ +
+
+enumerator WRITEMASK_RED1
+
+ +
+
+enumerator WRITEMASK_RED2
+
+ +
+
+enumerator WRITEMASK_RED3
+
+ +
+
+enumerator WRITEMASK_RED4
+
+ +
+
+enumerator WRITEMASK_RED5
+
+ +
+
+enumerator WRITEMASK_RED6
+
+ +
+
+enumerator WRITEMASK_RED7
+
+ +
+
+enumerator WRITEMASK_GREEN1
+
+ +
+
+enumerator WRITEMASK_GREEN2
+
+ +
+
+enumerator WRITEMASK_GREEN3
+
+ +
+
+enumerator WRITEMASK_GREEN4
+
+ +
+
+enumerator WRITEMASK_GREEN5
+
+ +
+
+enumerator WRITEMASK_GREEN6
+
+ +
+
+enumerator WRITEMASK_GREEN7
+
+ +
+
+enumerator WRITEMASK_BLUE1
+
+ +
+
+enumerator WRITEMASK_BLUE2
+
+ +
+
+enumerator WRITEMASK_BLUE3
+
+ +
+
+enumerator WRITEMASK_BLUE4
+
+ +
+
+enumerator WRITEMASK_BLUE5
+
+ +
+
+enumerator WRITEMASK_BLUE6
+
+ +
+
+enumerator WRITEMASK_BLUE7
+
+ +
+
+enumerator WRITEMASK_ALPHA1
+
+ +
+
+enumerator WRITEMASK_ALPHA2
+
+ +
+
+enumerator WRITEMASK_ALPHA3
+
+ +
+
+enumerator WRITEMASK_ALPHA4
+
+ +
+
+enumerator WRITEMASK_ALPHA5
+
+ +
+
+enumerator WRITEMASK_ALPHA6
+
+ +
+
+enumerator WRITEMASK_ALPHA7
+
+ +
+
+enumerator WRITEMASK_RED
+
+ +
+
+enumerator WRITEMASK_GREEN
+
+ +
+
+enumerator WRITEMASK_BLUE
+
+ +
+
+enumerator WRITEMASK_ALPHA
+
+ +
+
+enumerator WRITEMASK_RGB
+
+ +
+
+enumerator WRITEMASK_ALL
+
+ +
+
+enumerator WRITEMASK_DEFAULT
+
+ +
+ +
+
+enum class XessState
+

Values:

+
+
+enumerator UNSUPPORTED_DEVICE
+
+ +
+
+enumerator UNSUPPORTED_DRIVER
+
+ +
+
+enumerator INIT_ERROR_UNKNOWN
+
+ +
+
+enumerator DISABLED
+
+ +
+
+enumerator SUPPORTED
+
+ +
+
+enumerator READY
+
+ +
+ +
+
+enum class Fsr2State
+

Values:

+
+
+enumerator NOT_CHECKED
+
+ +
+
+enumerator INIT_ERROR
+
+ +
+
+enumerator SUPPORTED
+
+ +
+
+enumerator READY
+
+ +
+ +
+
+enum class MtlfxUpscaleState
+

Values:

+
+
+enumerator UNSUPPORTED
+
+ +
+
+enumerator READY
+
+ +
+ +
+
+enum class HdrOutputMode
+

Values:

+
+
+enumerator SDR_ONLY
+
+ +
+
+enumerator HDR10_AND_SDR
+
+ +
+
+enumerator HDR10_ONLY
+
+ +
+
+enumerator HDR_ONLY
+
+ +
+ +
+
+enum class CSPreloaded
+

Values:

+
+
+enumerator No
+
+ +
+
+enumerator Yes
+
+ +
+ +
+
+enum DepthResolveMode
+

This enum defines bits signalling supported depth resolve modes. Depth resolve is a functionality supported by some GAPIs which allows to resolve MSAA depth into a single sampled one.

+

In the context of Vulkan, we do additional checks to determine supported depth resolve modes. Therefore, fewer modes than the driver returns can be reported.

+

Values:

+
+
+enumerator DEPTH_RESOLVE_MODE_NONE
+

Depth resolve unsupported.

+
+ +
+
+enumerator DEPTH_RESOLVE_MODE_SAMPLE_ZERO
+

Use a value from the 0th sample. If depth resolve is supported, this is generally supported too.

+
+ +
+
+enumerator DEPTH_RESOLVE_MODE_AVERAGE
+

Use the average value from all samples. Not supported on iOS, rarely supported on Android Vulkan.

+
+ +
+
+enumerator DEPTH_RESOLVE_MODE_MIN
+

Use the smallest value from all samples. Supported on iOS, rarely supported on Android Vulkan.

+
+ +
+
+enumerator DEPTH_RESOLVE_MODE_MAX
+

Same as DEPTH_RESOLVE_MODE_MIN, but the largest value is used instead.

+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator DRV3D_FRAMERATE_LIMITED_BY_NOTHING
+
+ +
+
+enumerator DRV3D_FRAMERATE_LIMITED_BY_REPLAY_WAIT
+
+ +
+
+enumerator DRV3D_FRAMERATE_LIMITED_BY_REPLAY_UNDERFEED
+
+ +
+
+enumerator DRV3D_FRAMERATE_LIMITED_BY_GPU_UTILIZATION
+
+ +
+ +
+
+enum class VariableRateShadingCombiner
+

Combiners for VRS for vertex stage and pixel shader state.

+

Should the device support DeviceDriverCapabilities::hasVariableRateShadingCombiners, then each combiner can be used for any stage in any combination. When DeviceDriverCapabilities::hasVariableRateShadingCombiners is not supported then the following restrictions apply:

+

+

Values:

+
+
+enumerator VRS_PASSTHROUGH
+

selects rate value from previous stage

+
+ +
+
+enumerator VRS_OVERRIDE
+

selects rate from this stage

+
+ +
+
+enumerator VRS_MIN
+

selects min of previous and this stage

+
+ +
+
+enumerator VRS_MAX
+

selects max of previous and this stage

+
+ +
+
+enumerator VRS_SUM
+

adds values of previous and this stage and clamps it to max possible value

+
+ +
+ +
+
+enum ResourceBarrier
+

Values:

+
+
+enumerator RB_RW_RENDER_TARGET
+
+ +
+
+enumerator RB_RW_UAV
+
+ +
+
+enumerator RB_RW_COPY_DEST
+
+ +
+
+enumerator RB_RW_BLIT_DEST
+
+ +
+
+enumerator RB_RO_SRV
+
+ +
+
+enumerator RB_RO_CONSTANT_BUFFER
+
+ +
+
+enumerator RB_RO_VERTEX_BUFFER
+
+ +
+
+enumerator RB_RO_INDEX_BUFFER
+
+ +
+
+enumerator RB_RO_INDIRECT_BUFFER
+
+ +
+
+enumerator RB_RO_VARIABLE_RATE_SHADING_TEXTURE
+
+ +
+
+enumerator RB_RO_COPY_SOURCE
+
+ +
+
+enumerator RB_RO_BLIT_SOURCE
+
+ +
+
+enumerator RB_RO_RAYTRACE_ACCELERATION_BUILD_SOURCE
+
+ +
+
+enumerator RB_FLAG_RELEASE_PIPELINE_OWNERSHIP
+
+ +
+
+enumerator RB_FLAG_ACQUIRE_PIPELINE_OWNERSHIP
+
+ +
+
+enumerator RB_FLAG_SPLIT_BARRIER_BEGIN
+
+ +
+
+enumerator RB_FLAG_SPLIT_BARRIER_END
+
+ +
+
+enumerator RB_STAGE_VERTEX
+
+ +
+
+enumerator RB_STAGE_PIXEL
+
+ +
+
+enumerator RB_STAGE_COMPUTE
+
+ +
+
+enumerator RB_STAGE_RAYTRACE
+
+ +
+
+enumerator RB_FLUSH_UAV
+
+ +
+
+enumerator RB_FLAG_DONT_PRESERVE_CONTENT
+
+ +
+
+enumerator RB_SOURCE_STAGE_VERTEX
+
+ +
+
+enumerator RB_SOURCE_STAGE_PIXEL
+
+ +
+
+enumerator RB_SOURCE_STAGE_COMPUTE
+
+ +
+
+enumerator RB_SOURCE_STAGE_RAYTRACE
+
+ +
+
+enumerator RB_ALIAS_FROM
+
+ +
+
+enumerator RB_ALIAS_TO
+
+ +
+
+enumerator RB_RO_SHADER_BINDING_TABLE
+
+ +
+
+enumerator RB_FLUSH_RAYTRACE_ACCELERATION_BUILD_SCRATCH_USE
+
+ +
+
+enumerator RB_ALIAS_TO_AND_DISCARD
+
+ +
+
+enumerator RB_ALIAS_ALL
+
+ +
+
+enumerator RB_SOURCE_STAGE_ALL_GRAPHICS
+
+ +
+
+enumerator RB_SOURCE_STAGE_ALL_SHADERS
+
+ +
+
+enumerator RB_RW_DEPTH_STENCIL_TARGET
+
+ +
+
+enumerator RB_RO_CONSTANT_DEPTH_STENCIL_TARGET
+
+ +
+
+enumerator RB_RO_GENERIC_READ_BUFFER
+
+ +
+
+enumerator RB_RO_GENERIC_READ_TEXTURE
+
+ +
+
+enumerator RB_STAGE_ALL_SHADERS
+
+ +
+
+enumerator RB_STAGE_ALL_GRAPHICS
+
+ +
+
+enumerator RB_NONE
+
+ +
+ +
+
+enum RenderPassTargetAction
+

Bitfield of actions that happen with target at given slot and subpass.

+

Values:

+
+
+enumerator RP_TA_NONE
+

No action with target will happen.

+

Only dependencyBarrier of binding will be executed for this target

+
+

Warning

+

Content of target becomes invalid if no action is supplied overall

+
+
+ +
+
+enumerator RP_TA_LOAD_READ
+

Loads contents of target from memory to framebuffer.

+
+

Note

+

Avoid load operations on TBDR hardware

+
+
+ +
+
+enumerator RP_TA_LOAD_CLEAR
+

Loads clear value to framebuffer instead of doing any memory operation.

+
+ +
+
+enumerator RP_TA_LOAD_NO_CARE
+

Don’t care about loading contents of target (aka discard)

+
+

Warning

+

Initial content of frame buffer is underfined, make sure to handle this

+
+
+ +
+
+enumerator RP_TA_LOAD_MASK
+

Bitmask of any load operation.

+
+

Note

+

load action is performed for each target when its being accessed for the first time in render pass

+
+
+ +
+
+enumerator RP_TA_SUBPASS_READ
+

Target contents will be readed by subpass.

+
+

Note

+

This corresponds to SubpassInput with SubpassLoad inside shader

+
+
+

Warning

+

Generic implementation uses T register with subpassBindingOffset instead of SubpassInput, this must be handled properly in shader code

+
+
+ +
+
+enumerator RP_TA_SUBPASS_RESOLVE
+

Target will be used as MSAA resolve destination of MSAA target bound in same slot.

+
+

Note

+

MSAA Depth resolve is optional feature if non generic implementation is used

+
+
+

Warning

+

Must supply MSAA target in same slot in another binding otherwise creation on render pass will fail

+
+
+ +
+
+enumerator RP_TA_SUBPASS_WRITE
+

Target contents will be written by subpass.

+
+ +
+
+enumerator RP_TA_SUBPASS_KEEP
+

Target contents will be keeped intact if it was not used in subpass (otherwise UB)

+
+ +
+
+enumerator RP_TA_SUBPASS_MASK
+

Bitmask of any subpass operation.

+
+ +
+
+enumerator RP_TA_STORE_WRITE
+

Contents of framebuffer will be written to target memory.

+
+ +
+
+enumerator RP_TA_STORE_NONE
+

Contents of framebuffer will not be stored.

+
+ +
+
+enumerator RP_TA_STORE_NO_CARE
+

Don’t care about target memory contents.

+
+

Warning

+

Target memory contents will be left in UB state

+
+
+ +
+
+enumerator RP_TA_STORE_MASK
+

Bitmask of any load operation.

+
+

Note

+

store action is performed once for each target on whole pass completion

+
+
+ +
+ +
+
+enum RenderPassExtraIndexes
+

extra indexes that encode special cases of render pass description

+

Values:

+
+
+enumerator RP_INDEX_NORMAL
+
+ +
+
+enumerator RP_SUBPASS_EXTERNAL_END
+

Pseudo subpass index, that happens at end of render pass.

+

Used to provide store actions as well as dependencyBarriers for generic implementation

+
+ +
+
+enumerator RP_SLOT_DEPTH_STENCIL
+

Slot for depth/stencil.

+

Using this slot will bind target as depth/stencil

+
+ +
+ +
+
+

Functions

+
+
+inline constexpr ResourceBarrier operator|(ResourceBarrier l, ResourceBarrier r)
+
+ +
+
+inline constexpr ResourceBarrier operator&(ResourceBarrier l, ResourceBarrier r)
+
+ +
+
+inline constexpr ResourceBarrier operator^(ResourceBarrier l, ResourceBarrier r)
+
+ +
+
+inline constexpr RenderPassTargetAction operator|(RenderPassTargetAction l, RenderPassTargetAction r)
+
+ +
+
+

Variables

+
+
+static constexpr int BAD_VPROG = -1
+
+ +
+
+static constexpr int BAD_FSHADER = -1
+
+ +
+
+static constexpr int BAD_VDECL = -1
+
+ +
+
+static constexpr int BAD_PROGRAM = -1
+
+ +
+
+static constexpr int BAD_PALID = -1
+
+ +
+
+constexpr GPUFENCEHANDLE BAD_GPUFENCEHANDLE = 0
+
+ +
+
+static constexpr size_t RT_TRANSFORM_SIZE = sizeof(float) * 12
+
+ +
+
+
+struct DeviceDriverCapabilitiesBase
+

A boolean bitfield that describes which optional features that are available with the used device / driver combination.

+

Remark

+

To add new capability indicators, you need to follow those steps:

    +
  1. Add the new cap indicator boolean bit to the end of this structure.

  2. +
  3. For platforms where this cap is always be available or not available, add a static constexpr boolean with the same name with the platform specific derived structures. This will hide the boolean bitfield for the target platform and the constant will be used instead.

  4. +
  5. Add the documentation to all the platform specific constant overrides. Use existing documentation as a basis. Here are the basics:

      +
    • Use \briefconstcap{“const value”, DeviceDriverCapabilitiesBase::”cap name”} to generate the basic description for the overriding value.

        +
      • ”const value” should be replaced with the constant value of this override.

      • +
      • ”cap name” should be the name of the cap.

      • +
      +

    • +
    • Use \NYI to indicate that the driver could support this feature, but do not implemented it yet.

    • +
    +

  6. +
  7. Add documentation to the cap indicator boolean bit of this struct.

      +
    • Use \capbrief “brief cap description” to generate the brief description of this cap. This alias will start the brief with the standard introducing phrase “Indicates that the device driver”.

    • +
    • Use \platformtable{“cap name”,”xbone”,”scarlett”,”ps4”,”ps5”,”ios”,”tvos”,”nswitch”,”android”,”mac”,”linux”,”win32”} to generate the platform value table.

        +
      • ”cap name” should be the name of the cap.

      • +
      • ”xbone”, “scarlett”, “ps4”, “ps5”, “ios”, “tvos”, “nswitch”, “android”, “mac”, “linux”, “win32” should be one of the following values:

          +
        • c for constant, the actual value is pulled from the description generated by \briefconstcap for the cosponsoring platform.

        • +
        • a for alias, this works only for “scarlett” and “ps5”, for others this is the same as c. It uses the value of “xbone” and “ps4”, for “scarlett” and “ps5” respectively. This is needed when a const value is specified for “xbone” or “ps4” platform and inherited by the “scarlett” or “ps5” platform, to correctly display the inherited value.

        • +
        • r for runtime determined. This is for platforms where there is no constant override and it is determined by the active driver of the platform.

        • +
        +

      • +
      • Ensure that there are no spaces around the platform specific values (c, a or r), otherwise the alias expansion will result in broken statements and documentation.

      • +
      +

    • +
    • Use \someNYI to indicate that there are drivers that could support this feature, but do not implement it yet.

    • +
    +

  8. +
+

+
+

+
+

Note

+

See derived types for platform specific constant overrides.

+
+

Subclassed by DeviceDriverCapabilitiesAndroid, DeviceDriverCapabilitiesIOS, DeviceDriverCapabilitiesLinux, DeviceDriverCapabilitiesMacOSX, DeviceDriverCapabilitiesNintendoSwitch, DeviceDriverCapabilitiesPS4, DeviceDriverCapabilitiesTVOS, DeviceDriverCapabilitiesWindows, DeviceDriverCapabilitiesXboxOne

+
+

Public Members

+
+
+bool hasAnisotropicFilter
+

Indicates that the device driver supports anisotropic filtering of textures.

+

Devices without support will silently treat any value for anisotropic filtering as 1.0.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant true.

tvOS

Constant true.

Nintendo Switch

Constant true.

Android

Runtime determined.

macOS

Constant true.

Linux

Constant true.

Windows

Constant true.

+

+
+
+ +
+
+bool hasDepthReadOnly
+

Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Constant false.

Linux

Constant true.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasStructuredBuffers
+

Indicates that the device driver supports structured buffer types.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant true.

tvOS

Constant true.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Constant true.

Linux

Constant true.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasNoOverwriteOnShaderResourceBuffers
+

Indicates that the device driver supports locking of structured buffers with the no-overwrite method.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant true.

tvOS

Constant true.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Constant true.

Linux

Constant true.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasForcedSamplerCount
+

Indicates that the device driver supports forced multi-sample count during raster phase.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasVolMipMap
+

Indicates that the device driver supports mipmaps for vol (eg 3D) textures.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant true.

tvOS

Constant true.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Constant true.

Linux

Constant true.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasAsyncCompute
+

Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Runtime determined.

PlayStation 5

Runtime determined.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasOcclusionQuery
+

Indicates that the device driver supports occlusion queries.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant true.

tvOS

Constant true.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Constant true.

Linux

Constant true.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasConstBufferOffset
+

Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasDepthBoundsTest
+

Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant true.

Android

Runtime determined.

macOS

Constant false.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasConditionalRender
+

Indicates that the device driver supports conditional rendering.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Runtime determined.

Android

Runtime determined.

macOS

Constant false.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasResourceCopyConversion
+

Indicates that the device driver supports copy of textures of different but compatible formats.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant true.

tvOS

Constant true.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Constant true.

Linux

Constant true.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasAsyncCopy
+

Indicates that the device driver supports asynchronously issued copy operations.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Constant true.

Linux

Constant true.

Windows

Constant true.

+

+
+
+ +
+
+bool hasReadMultisampledDepth
+

Indicates that the device driver supports reading from multi-sampled depth stencil targets.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant true.

tvOS

Constant true.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Constant true.

Linux

Constant true.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasInstanceID
+

Indicates that the device driver supports instance id system variable in shaders.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant true.

tvOS

Constant true.

Nintendo Switch

Constant true.

Android

Runtime determined.

macOS

Constant true.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasConservativeRassterization
+

Indicates that the device driver supports conservative rastering.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Runtime determined.

macOS

Constant false.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasQuadTessellation
+

Indicates that the device driver supports quad tessellation.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Runtime determined.

macOS

Constant false.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasGather4
+

Indicates that the device driver supports gather intrinsic in shaders.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant true.

tvOS

Constant true.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Constant true.

Linux

Constant true.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasAlphaCoverage
+

Indicates that the device driver supports the alpha to coverage raster feature.

+

+
+Todo:
+

Candidate for removal if situation for PS4/5 is clarified, there it seems to be not implemented.

+
+ +
+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant true.

tvOS

Constant true.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Constant true.

Linux

Constant true.

Windows

Constant true.

+

+
+
+ +
+
+bool hasWellSupportedIndirect
+

Indicates that the device driver supports indirect drawing.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant true.

Android

Runtime determined.

macOS

Constant false.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasBindless
+

Indicates that the device driver supports the bindless API and resource access in shaders.

+

+
+Todo:
+

May need to split into multiple caps as some drivers do not support buffers.

+
+ +
+
+Bug:
+

Nintendo Switch is experimental support and so is not a constant cap yet.

+
+ +

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Runtime determined.

Android

Runtime determined.

macOS

Runtime determined.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasNVApi
+

Indicates that the device driver has detected that the Nvidia driver API is available for the render device.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasATIApi
+

Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasVariableRateShading
+

Indicates that the device driver supports basic per draw shading rates.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasVariableRateShadingTexture
+

Indicates that the device driver supports shading rate textures as a source of shading rate information.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasVariableRateShadingShaderOutput
+

Indicates that the device driver supports shader generated shading rates.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasVariableRateShadingCombiners
+

Indicates that the device driver supports combiners for variable rate shading to select the final shading rate.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasVariableRateShadingBy4
+

Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasAliasedTextures
+

Indicates that the device driver supports creation of aliased textures.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasResourceHeaps
+

Indicates that the device driver supports the resource heap API.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Indicates that the device driver supports the resource heap API.

PlayStation 5

Indicates that the device driver supports the resource heap API.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Runtime determined.

macOS

Constant false.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasBufferOverlapCopy
+

Indicates that the device driver supports overlapping buffer copies.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasBufferOverlapRegionsCopy
+

Indicates that the device driver uses region based copies when overlapping copies are executed.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasUAVOnlyForcedSampleCount
+

Indicates that the device driver supports forced multisample count without render targets and only outputting to UAVs.

+

+
+Bug:
+

There is no way of querying the number of samples that are supported. So the Vulkan driver, for example, assumes 1, 2, 4 and 8 samples to be required.

+
+ +
+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant true.

Android

Runtime determined.

macOS

Runtime determined.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasShader64BitIntegerResources
+

Indicates that the device driver supports 64 bit integers shader resource types.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasNativeRenderPassSubPasses
+

Indicates that the device driver is not emulating render sup-passes.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Constant false.

Linux

Constant true.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasTiled2DResources
+

Indicates that the device driver supports tiled 2D textures.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasTiled3DResources
+

Indicates that the device driver supports tiled 3D textures;.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasTiledSafeResourcesAccess
+

Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasTiledMemoryAliasing
+

Indicates that the device driver supports memory aliasing of multiple tiles.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasDLSS
+

Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasXESS
+

Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasDrawID
+

Indicates that the device driver supports draw id in shaders.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Runtime determined.

Linux

Constant true.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasMeshShader
+

Indicates that the device driver supports the mesh shader pipeline.

+

The mesh shader pipeline is a one or two shader stage that replaces the vertex shader based pre raster portion of the graphics pipeline. Mesh shaders are compute shaders that generate vertices and indices which form primitives like triangles or lines.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasBasicViewInstancing
+

Indicates that the device driver supports basic view instancing.

+

View instancing may be implemented with replicating render commands for each view.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasOptimizedViewInstancing
+

Indicates that the device driver has some optimizations for view instanced rendering.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasAcceleratedViewInstancing
+

Indicates that the device driver has hardware acceleration to natively support view instanced rendering.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasRenderPassDepthResolve
+

Indicates that the device driver can resolve multi-sampled depth stencil render targets in a render pass.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Runtime determined.

tvOS

Runtime determined.

Nintendo Switch

Runtime determined.

Android

Runtime determined.

macOS

Runtime determined.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasStereoExpansion
+

Indicates that the device driver supports stereo render expansion.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant true.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Constant false.

macOS

Constant false.

Linux

Constant false.

Windows

Constant false.

+

+
+
+ +
+
+bool hasTileBasedArchitecture
+

Indicates that the device driver architecture is known to be a tile renderer.

+

Tile renderers bin raster work into tiles and execute rastering and pixel shaders tile by tile to reduce bandwidth to off chip memory (RAM). Certain optimizations favor regular rasterers over tiled rasterers and vice versa.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant true.

tvOS

Constant true.

Nintendo Switch

Constant false.

Android

Runtime determined.

macOS

Constant false.

Linux

Indicates that the device driver architecture is known to be a tile renderer.

Windows

Indicates that the device driver architecture is known to be a tile renderer.

+

+
+
+ +
+
+bool hasLazyMemory
+

Indicates that the device driver supports lazily allocated memory.

+

Supported on most TBDR GPUs, allocates memory by on-chip tile/framebuffer memory for transient render targets.

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Runtime determined.

macOS

Constant false.

Linux

Constant false.

Windows

Constant false.

+

+
+
+ +
+
+bool hasIndirectSupport
+

Indicates that the device driver set when hw doesn’t support indirect calls.

+

This is at least true on some of the older iOS hardware (A8) which can’t do either drawIndirect nor dispatchIndirect

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Runtime determined.

tvOS

Runtime determined.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Constant true.

Linux

Constant true.

Windows

Constant true.

+

+
+
+ +
+
+bool hasCompareSampler
+

Indicates that the device driver set when hw doesn’t support comparison samplers.

+

This is at least true on some of the older iOS hardware (A8) which can only do constexp inline samplers and we don’t wanna open this can of worm

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Runtime determined.

tvOS

Runtime determined.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Constant true.

Linux

Constant true.

Windows

Constant true.

+

+
+
+ +
+
+bool hasShaderFloat16Support
+

Indicates that the device driver supports 16-bit floating-point types in shaders for arithmetic operations.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

DeviceDriverCapabilitiesXboxOne::”hasShaderFloat16Support” “Xbox One”

DeviceDriverCapabilitiesXboxOne::”hasShaderFloat16Support” “Xbox Series X / S”

DeviceDriverCapabilitiesPS4::”hasShaderFloat16Support” “PlayStation 4”

DeviceDriverCapabilitiesPS4::”hasShaderFloat16Support” “PlayStation 5”

DeviceDriverCapabilitiesIOS::”hasShaderFloat16Support” “iOS”

DeviceDriverCapabilitiesTVOS::”hasShaderFloat16Support” “tvOS”

Nintendo Switch

Runtime determined.

Android

Runtime determined.

DeviceDriverCapabilitiesMacOSX::”hasShaderFloat16Support” “macOS”

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasUAVOnEveryStage
+

Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

DeviceDriverCapabilitiesXboxOne::”hasUAVOnEveryStage” “Xbox One”

DeviceDriverCapabilitiesXboxOne::”hasUAVOnEveryStage” “Xbox Series X / S”

DeviceDriverCapabilitiesPS4::”hasUAVOnEveryStage” “PlayStation 4”

DeviceDriverCapabilitiesPS4::”hasUAVOnEveryStage” “PlayStation 5”

DeviceDriverCapabilitiesIOS::”hasUAVOnEveryStage” “iOS”

DeviceDriverCapabilitiesTVOS::”hasUAVOnEveryStage” “tvOS”

DeviceDriverCapabilitiesNintendoSwitch::”hasUAVOnEveryStage” “Nintendo Switch”

DeviceDriverCapabilitiesAndroid::”hasUAVOnEveryStage” “Android”

DeviceDriverCapabilitiesMacOSX::”hasUAVOnEveryStage” “macOS”

DeviceDriverCapabilitiesLinux::”hasUAVOnEveryStage” “Linux”

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasRayAccelerationStructure
+

Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support.

tvOS

Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support.

Nintendo Switch

Constant false.

Android

Runtime determined.

macOS

Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasRayQuery
+

Indicates that the device driver supports ray queries (“inline ray tracing”) in any shader stage.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Runtime determined.

tvOS

Runtime determined.

Nintendo Switch

Constant false.

Android

Runtime determined.

macOS

Runtime determined.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasRayDispatch
+

Indicates that the device driver supports ray dispatch with its own ray tracing shader stage.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Constant false.

tvOS

Constant false.

Nintendo Switch

Constant false.

Android

Runtime determined.

macOS

Constant false.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasIndirectRayDispatch
+

Indicates that the device driver supports indirect dispatch for dispatch rays.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Runtime determined.

tvOS

Runtime determined.

Nintendo Switch

Constant false.

Android

Runtime determined.

macOS

Runtime determined.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasGeometryIndexInRayAccelerationStructure
+

Indicates that the device driver supports geometry index information in acceleration structures in ray tracing / ray query shaders.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Runtime determined.

tvOS

Runtime determined.

Nintendo Switch

Constant false.

Android

Runtime determined.

macOS

Runtime determined.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasSkipPrimitiveTypeInRayTracingShaders
+

Indicates that the device driver supports masking flags in shaders to ignore triangle or procedural geometry during traversal.

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant true.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Runtime determined.

tvOS

Runtime determined.

Nintendo Switch

Constant false.

Android

Runtime determined.

macOS

Runtime determined.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasBaseVertexSupport
+

Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex.

+

This feature is not supported by older iOS hardware (such as A8 chips)

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Runtime determined.

tvOS

Runtime determined.

Nintendo Switch

Constant true.

Android

Constant true.

macOS

Runtime determined.

Linux

Constant true.

Windows

Constant true.

+

+
+
+ +
+
+bool castingFullyTypedFormatsSupported
+

Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12)

+

+

Remark

+

Some drivers without support could support this feature, but do not implement it yet.

+
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant false.

Xbox Series X / S

Constant false.

PlayStation 4

Constant false.

PlayStation 5

Constant false.

iOS

Runtime determined.

tvOS

Runtime determined.

Nintendo Switch

Constant false.

Android

Runtime determined.

macOS

Runtime determined.

Linux

Runtime determined.

Windows

Runtime determined.

+

+
+
+ +
+
+bool hasNativeRayTracePipelineExpansion
+
+ +
+
+bool hasWaveOps
+

Indicates that the device driver supports wave ops.

+

    +
  • “xbone”, “scarlett”, “ps4”, “ps5”, “ios”, “tvos”, “nswitch”, “android”, “mac”, “linux”, “win32” should be one of the following

  • +
+

+
+

Note

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Platform

Value

Xbox One

Constant true.

Xbox Series X / S

Constant true.

PlayStation 4

Constant true.

PlayStation 5

Constant true.

iOS

Constant true.

tvOS

Constant true.

Nintendo Switch

Runtime determined.

Android

Runtime determined.

macOS

Constant true.

Linux

Runtime determined.

Windows

Runtime determined.

+ +supports waveOps

+
+
+ +
+
+ +
+
+struct DeviceDriverCapabilitiesXboxOne : public DeviceDriverCapabilitiesBase
+

Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for Xbox One.

+

Subclassed by DeviceDriverCapabilitiesScarlett

+
+

Public Static Attributes

+
+
+static constexpr bool hasAnisotropicFilter = true
+

Constant true.

+

Indicates that the device driver supports anisotropic filtering of textures.

+

+
+ +
+
+static constexpr bool hasDepthReadOnly = true
+

Constant true.

+

Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource.

+

+
+ +
+
+static constexpr bool hasStructuredBuffers = true
+

Constant true.

+

Indicates that the device driver supports structured buffer types.

+

+
+ +
+
+static constexpr bool hasNoOverwriteOnShaderResourceBuffers = true
+

Constant true.

+

Indicates that the device driver supports locking of structured buffers with the no-overwrite method.

+

+
+ +
+
+static constexpr bool hasForcedSamplerCount = true
+

Constant true.

+

Indicates that the device driver supports forced multi-sample count during raster phase.

+

+
+ +
+
+static constexpr bool hasVolMipMap = true
+

Constant true.

+

Indicates that the device driver supports mipmaps for vol (eg 3D) textures.

+

+
+ +
+
+static constexpr bool hasAsyncCompute = false
+

Constant false.

+

Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasOcclusionQuery = true
+

Constant true.

+

Indicates that the device driver supports occlusion queries.

+

+
+ +
+
+static constexpr bool hasConstBufferOffset = true
+

Constant true.

+

Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer.

+

+
+ +
+
+static constexpr bool hasDepthBoundsTest = true
+

Constant true.

+

Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing.

+

+
+ +
+
+static constexpr bool hasConditionalRender = true
+

Constant true.

+

Indicates that the device driver supports conditional rendering.

+

+
+ +
+
+static constexpr bool hasResourceCopyConversion = true
+

Constant true.

+

Indicates that the device driver supports copy of textures of different but compatible formats.

+

+
+ +
+
+static constexpr bool hasAsyncCopy = true
+

Constant true.

+

Indicates that the device driver supports asynchronously issued copy operations.

+

+
+ +
+
+static constexpr bool hasReadMultisampledDepth = true
+

Constant true.

+

Indicates that the device driver supports reading from multi-sampled depth stencil targets.

+

+
+ +
+
+static constexpr bool hasInstanceID = true
+

Constant true.

+

Indicates that the device driver supports instance id system variable in shaders.

+

+
+ +
+
+static constexpr bool hasConservativeRassterization = false
+

Constant false.

+

Indicates that the device driver supports conservative rastering.

+

+
+ +
+
+static constexpr bool hasQuadTessellation = true
+

Constant true.

+

Indicates that the device driver supports quad tessellation.

+

+
+ +
+
+static constexpr bool hasGather4 = true
+

Constant true.

+

Indicates that the device driver supports gather intrinsic in shaders.

+

+
+ +
+
+static constexpr bool hasAlphaCoverage = true
+

Constant true.

+

Indicates that the device driver supports the alpha to coverage raster feature.

+

+
+ +
+
+static constexpr bool hasWellSupportedIndirect = true
+

Constant true.

+

Indicates that the device driver supports indirect drawing.

+

+
+ +
+
+static constexpr bool hasBindless = true
+

Constant true.

+

Indicates that the device driver supports the bindless API and resource access in shaders.

+

+
+ +
+
+static constexpr bool hasNVApi = false
+

Constant false.

+

Indicates that the device driver has detected that the Nvidia driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasATIApi = false
+

Constant false.

+

Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasVariableRateShading = false
+

Constant false.

+

Indicates that the device driver supports basic per draw shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingTexture = false
+

Constant false.

+

Indicates that the device driver supports shading rate textures as a source of shading rate information.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingShaderOutput = false
+

Constant false.

+

Indicates that the device driver supports shader generated shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingCombiners = false
+

Constant false.

+

Indicates that the device driver supports combiners for variable rate shading to select the final shading rate.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingBy4 = false
+

Constant false.

+

Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction.

+

+
+ +
+
+static constexpr bool hasAliasedTextures = true
+

Constant true.

+

Indicates that the device driver supports creation of aliased textures.

+

+
+ +
+
+static constexpr bool hasResourceHeaps = true
+

Constant true.

+

Indicates that the device driver supports the resource heap API.

+

+
+ +
+
+static constexpr bool hasBufferOverlapCopy = true
+

Constant true.

+

Indicates that the device driver supports overlapping buffer copies.

+

+
+ +
+
+static constexpr bool hasBufferOverlapRegionsCopy = false
+

Constant false.

+

Indicates that the device driver uses region based copies when overlapping copies are executed.

+

+
+ +
+
+static constexpr bool hasUAVOnlyForcedSampleCount = true
+

Constant true.

+

Indicates that the device driver supports forced multisample count without render targets and only outputting to UAVs.

+

+
+ +
+
+static constexpr bool hasShader64BitIntegerResources = false
+

Constant false.

+

Indicates that the device driver supports 64 bit integers shader resource types.

+

+
+ +
+
+static constexpr bool hasNativeRenderPassSubPasses = false
+

Constant false.

+

Indicates that the device driver is not emulating render sup-passes.

+

+
+ +
+
+static constexpr bool hasTiled2DResources = true
+

Constant true.

+

Indicates that the device driver supports tiled 2D textures.

+

+
+ +
+
+static constexpr bool hasTiled3DResources = true
+

Constant true.

+

Indicates that the device driver supports tiled 3D textures;.

+

+
+ +
+
+static constexpr bool hasTiledSafeResourcesAccess = true
+

Constant true.

+

Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored.

+

+
+ +
+
+static constexpr bool hasTiledMemoryAliasing = true
+

Constant true.

+

Indicates that the device driver supports memory aliasing of multiple tiles.

+

+
+ +
+
+static constexpr bool hasDLSS = false
+

Constant false.

+

Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling.

+

+
+ +
+
+static constexpr bool hasXESS = false
+

Constant false.

+

Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling.

+

+
+ +
+
+static constexpr bool hasDrawID = true
+

Constant true.

+

Indicates that the device driver supports draw id in shaders.

+

+
+ +
+
+static constexpr bool hasMeshShader = false
+

Constant false.

+

Indicates that the device driver supports the mesh shader pipeline.

+

+
+ +
+
+static constexpr bool hasBasicViewInstancing = true
+

Constant true.

+

Indicates that the device driver supports basic view instancing.

+

+
+ +
+
+static constexpr bool hasOptimizedViewInstancing = true
+

Constant true.

+

Indicates that the device driver has some optimizations for view instanced rendering.

+

+
+ +
+
+static constexpr bool hasAcceleratedViewInstancing = true
+

Constant true.

+

Indicates that the device driver has hardware acceleration to natively support view instanced rendering.

+

+
+ +
+
+static constexpr bool hasRenderPassDepthResolve = false
+

Constant false.

+

Indicates that the device driver can resolve multi-sampled depth stencil render targets in a render pass.

+

+
+ +
+
+static constexpr bool hasStereoExpansion = false
+

Constant false.

+

Indicates that the device driver supports stereo render expansion.

+

+
+ +
+
+static constexpr bool hasTileBasedArchitecture = false
+

Constant false.

+

Indicates that the device driver architecture is known to be a tile renderer.

+

+
+ +
+
+static constexpr bool hasLazyMemory = false
+

Constant false.

+

Indicates that the device driver supports lazily allocated memory.

+

+
+ +
+
+static constexpr bool hasIndirectSupport = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support indirect calls.

+

+
+ +
+
+static constexpr bool hasCompareSampler = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support comparison samplers.

+

+
+ +
+
+static constexpr bool hasShaderFloat16Support = true
+

Constant false.

+

Indicates that the device driver supports 16-bit floating-point types in shaders for arithmetic operations.

+

+
+ +
+
+static constexpr bool hasUAVOnEveryStage = true
+

Constant true.

+

Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders.

+

+
+ +
+
+static constexpr bool hasRayAccelerationStructure = false
+

Constant false.

+

Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support.

+

+
+ +
+
+static constexpr bool hasRayQuery = false
+

Constant false.

+

Indicates that the device driver supports ray queries (“inline ray tracing”) in any shader stage.

+

+
+ +
+
+static constexpr bool hasRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports ray dispatch with its own ray tracing shader stage.

+

+
+ +
+
+static constexpr bool hasIndirectRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports indirect dispatch for dispatch rays.

+

+
+ +
+
+static constexpr bool hasGeometryIndexInRayAccelerationStructure = false
+

Constant false.

+

Indicates that the device driver supports geometry index information in acceleration structures in ray tracing / ray query shaders.

+

+
+ +
+
+static constexpr bool hasSkipPrimitiveTypeInRayTracingShaders = false
+

Constant false.

+

Indicates that the device driver supports masking flags in shaders to ignore triangle or procedural geometry during traversal.

+

+
+ +
+
+static constexpr bool hasBaseVertexSupport = true
+

Constant true.

+

Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex.

+

+
+ +
+
+static constexpr bool castingFullyTypedFormatsSupported = false
+

Constant false.

+

Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12)

+

+
+ +
+
+static constexpr bool hasNativeRayTracePipelineExpansion = false
+

Constant false.

+

+

See also

+

DeviceDriverCapabilitiesBase::hasNativeRayTracePipelineExpansion

+
+

+
+ +
+
+static constexpr bool hasWaveOps = true
+

Constant true.

+

Indicates that the device driver supports wave ops.

+

+
+ +
+
+ +
+
+struct DeviceDriverCapabilitiesScarlett : public DeviceDriverCapabilitiesXboxOne
+

Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for Xbox Series X / S.

+

Uses Xbox One optimized values and overrides only differences.

+

+
+

Public Static Attributes

+
+
+static constexpr bool hasConservativeRassterization = true
+

Constant true.

+

Indicates that the device driver supports conservative rastering.

+

+
+ +
+
+static constexpr bool hasVariableRateShading = true
+

Constant true.

+

Indicates that the device driver supports basic per draw shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingTexture = true
+

Constant true.

+

Indicates that the device driver supports shading rate textures as a source of shading rate information.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingShaderOutput = true
+

Constant true.

+

Indicates that the device driver supports shader generated shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingCombiners = true
+

Constant true.

+

Indicates that the device driver supports combiners for variable rate shading to select the final shading rate.

+

+
+ +
+
+static constexpr bool hasShader64BitIntegerResources = true
+

Constant true.

+

Indicates that the device driver supports 64 bit integers shader resource types.

+

+
+

Warning

+

Documentation states that HLSL 6.6 64 bit atomics are not supported directly, but HLSL xbox extensions that offer 64 bit atomics are. So they may need different instructions to support the same operations.

+
+
+ +
+
+static constexpr bool hasMeshShader = true
+

Constant true.

+

Indicates that the device driver supports the mesh shader pipeline.

+

+
+

Warning

+

Documentation is contradicting it self about proper support of indirect dispatch with pipelines that use amplification shaders.

+
+
+ +
+
+static constexpr bool hasRayAccelerationStructure = true
+

Constant true.

+

Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support.

+

+
+ +
+
+static constexpr bool hasRayQuery = true
+

Constant true.

+

Indicates that the device driver supports ray queries (“inline ray tracing”) in any shader stage.

+

+
+

Warning

+

This is not directly supported, there is a software implementation available, see GDK documentation for details.

+
+
+ +
+
+static constexpr bool hasRayDispatch = true
+

Constant true.

+

Indicates that the device driver supports ray dispatch with its own ray tracing shader stage.

+

+
+ +
+
+static constexpr bool hasIndirectRayDispatch = true
+

Constant true.

+

Indicates that the device driver supports indirect dispatch for dispatch rays.

+

+
+ +
+
+static constexpr bool hasGeometryIndexInRayAccelerationStructure = true
+

Constant true.

+

Indicates that the device driver supports geometry index information in acceleration structures in ray tracing / ray query shaders.

+

+
+ +
+
+static constexpr bool hasSkipPrimitiveTypeInRayTracingShaders = true
+

Constant true.

+

Indicates that the device driver supports masking flags in shaders to ignore triangle or procedural geometry during traversal.

+

+
+ +
+
+static constexpr bool hasBaseVertexSupport = true
+

Constant true.

+

Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex.

+

+
+ +
+
+static constexpr bool castingFullyTypedFormatsSupported = false
+

Constant false.

+

Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12)

+

+
+ +
+
+static constexpr bool hasNativeRayTracePipelineExpansion = true
+

Constant true.

+

+

See also

+

DeviceDriverCapabilitiesBase::hasNativeRayTracePipelineExpansion

+
+

+
+ +
+
+ +
+
+struct DeviceDriverCapabilitiesPS4 : public DeviceDriverCapabilitiesBase
+

Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for PlayStation 4.

+

Subclassed by DeviceDriverCapabilitiesPS5

+
+

Public Static Attributes

+
+
+static constexpr bool hasAnisotropicFilter = true
+

Constant true.

+

Indicates that the device driver supports anisotropic filtering of textures.

+

+
+ +
+
+static constexpr bool hasDepthReadOnly = true
+

Constant true.

+

Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource.

+

+
+ +
+
+static constexpr bool hasStructuredBuffers = true
+

Constant true.

+

Indicates that the device driver supports structured buffer types.

+

+
+ +
+
+static constexpr bool hasNoOverwriteOnShaderResourceBuffers = true
+

Constant true.

+

Indicates that the device driver supports locking of structured buffers with the no-overwrite method.

+

+
+ +
+
+static constexpr bool hasForcedSamplerCount = false
+

Constant false.

+

Indicates that the device driver supports forced multi-sample count during raster phase.

+

+
+ +
+
+static constexpr bool hasVolMipMap = true
+

Constant true.

+

Indicates that the device driver supports mipmaps for vol (eg 3D) textures.

+

+
+ +
+
+static constexpr bool hasOcclusionQuery = true
+

Constant true.

+

Indicates that the device driver supports occlusion queries.

+

+
+ +
+
+static constexpr bool hasConstBufferOffset = false
+

Constant false.

+

Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasDepthBoundsTest = true
+

Constant true.

+

Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing.

+

+
+ +
+
+static constexpr bool hasConditionalRender = true
+

Constant true.

+

Indicates that the device driver supports conditional rendering.

+

+
+ +
+
+static constexpr bool hasResourceCopyConversion = true
+

Constant true.

+

Indicates that the device driver supports copy of textures of different but compatible formats.

+

+
+ +
+
+static constexpr bool hasAsyncCopy = true
+

Constant true.

+

Indicates that the device driver supports asynchronously issued copy operations.

+

+
+ +
+
+static constexpr bool hasReadMultisampledDepth = false
+

Constant false.

+

Indicates that the device driver supports reading from multi-sampled depth stencil targets.

+

+
+ +
+
+static constexpr bool hasInstanceID = true
+

Constant true.

+

Indicates that the device driver supports instance id system variable in shaders.

+

+
+ +
+
+static constexpr bool hasConservativeRassterization = false
+

Constant false.

+

Indicates that the device driver supports conservative rastering.

+

+
+ +
+
+static constexpr bool hasQuadTessellation = true
+

Constant true.

+

Indicates that the device driver supports quad tessellation.

+

+
+ +
+
+static constexpr bool hasGather4 = false
+

Constant false.

+

Indicates that the device driver supports gather intrinsic in shaders.

+
+Todo:
+

Clarify why no support is advertised.

+
+ + +

+
+ +
+
+static constexpr bool hasAlphaCoverage = false
+

Constant false.

+

Indicates that the device driver supports the alpha to coverage raster feature.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasWellSupportedIndirect = true
+

Constant true.

+

Indicates that the device driver supports indirect drawing.

+

+
+ +
+
+static constexpr bool hasBindless = true
+

Constant true.

+

Indicates that the device driver supports the bindless API and resource access in shaders.

+

+
+ +
+
+static constexpr bool hasNVApi = false
+

Constant false.

+

Indicates that the device driver has detected that the Nvidia driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasATIApi = false
+

Constant false.

+

Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasVariableRateShading = false
+

Constant false.

+

Indicates that the device driver supports basic per draw shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingTexture = false
+

Constant false.

+

Indicates that the device driver supports shading rate textures as a source of shading rate information.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingShaderOutput = false
+

Constant false.

+

Indicates that the device driver supports shader generated shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingCombiners = false
+

Constant false.

+

Indicates that the device driver supports combiners for variable rate shading to select the final shading rate.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingBy4 = false
+

Constant false.

+

Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction.

+

+
+ +
+
+static constexpr bool hasAliasedTextures = true
+

Constant true.

+

Indicates that the device driver supports creation of aliased textures.

+

+
+ +
+
+static constexpr bool hasBufferOverlapCopy = false
+

Constant false.

+

Indicates that the device driver supports overlapping buffer copies.

+

+
+ +
+
+static constexpr bool hasBufferOverlapRegionsCopy = false
+

Constant false.

+

Indicates that the device driver uses region based copies when overlapping copies are executed.

+

+
+ +
+
+static constexpr bool hasUAVOnlyForcedSampleCount = true
+

Constant true.

+

Indicates that the device driver supports forced multisample count without render targets and only outputting to UAVs.

+

+
+ +
+
+static constexpr bool hasShader64BitIntegerResources = false
+

Constant false.

+

Indicates that the device driver supports 64 bit integers shader resource types.

+

+
+ +
+
+static constexpr bool hasNativeRenderPassSubPasses = false
+

Constant false.

+

Indicates that the device driver is not emulating render sup-passes.

+

+
+ +
+
+static constexpr bool hasTiled2DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 2D textures.

+

+
+ +
+
+static constexpr bool hasTiled3DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 3D textures;.

+

+
+ +
+
+static constexpr bool hasTiledSafeResourcesAccess = false
+

Constant false.

+

Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored.

+

+
+ +
+
+static constexpr bool hasTiledMemoryAliasing = false
+

Constant false.

+

Indicates that the device driver supports memory aliasing of multiple tiles.

+

+
+ +
+
+static constexpr bool hasDLSS = false
+

Constant false.

+

Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling.

+

+
+ +
+
+static constexpr bool hasXESS = false
+

Constant false.

+

Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling.

+

+
+ +
+
+static constexpr bool hasDrawID = true
+

Constant true.

+

Indicates that the device driver supports draw id in shaders.

+

+
+ +
+
+static constexpr bool hasMeshShader = false
+

Constant false.

+

Indicates that the device driver supports the mesh shader pipeline.

+

+
+ +
+
+static constexpr bool hasBasicViewInstancing = false
+

Constant false.

+

Indicates that the device driver supports basic view instancing.

+

+
+ +
+
+static constexpr bool hasOptimizedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has some optimizations for view instanced rendering.

+

+
+ +
+
+static constexpr bool hasAcceleratedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has hardware acceleration to natively support view instanced rendering.

+

+
+ +
+
+static constexpr bool hasRenderPassDepthResolve = false
+

Constant false.

+

Indicates that the device driver can resolve multi-sampled depth stencil render targets in a render pass.

+

+
+ +
+
+static constexpr bool hasStereoExpansion = false
+

Constant false.

+

Indicates that the device driver supports stereo render expansion.

+

+
+ +
+
+static constexpr bool hasTileBasedArchitecture = false
+

Constant false.

+

Indicates that the device driver architecture is known to be a tile renderer.

+

+
+ +
+
+static constexpr bool hasLazyMemory = false
+

Constant false.

+

Indicates that the device driver supports lazily allocated memory.

+

+
+ +
+
+static constexpr bool hasIndirectSupport = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support indirect calls.

+

+
+ +
+
+static constexpr bool hasCompareSampler = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support comparison samplers.

+

+
+ +
+
+static constexpr bool hasShaderFloat16Support = false
+

Constant false.

+

Indicates that the device driver supports 16-bit floating-point types in shaders for arithmetic operations.

+

+
+ +
+
+static constexpr bool hasUAVOnEveryStage = true
+

Constant true.

+

Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders.

+

+
+ +
+
+static constexpr bool hasRayAccelerationStructure = false
+

Constant false.

+

Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support.

+

+
+ +
+
+static constexpr bool hasRayQuery = false
+

Constant false.

+

Indicates that the device driver supports ray queries (“inline ray tracing”) in any shader stage.

+

+
+ +
+
+static constexpr bool hasRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports ray dispatch with its own ray tracing shader stage.

+

+
+ +
+
+static constexpr bool hasIndirectRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports indirect dispatch for dispatch rays.

+

+
+ +
+
+static constexpr bool hasGeometryIndexInRayAccelerationStructure = false
+

Constant false.

+

Indicates that the device driver supports geometry index information in acceleration structures in ray tracing / ray query shaders.

+

+
+ +
+
+static constexpr bool hasSkipPrimitiveTypeInRayTracingShaders = false
+

Constant false.

+

Indicates that the device driver supports masking flags in shaders to ignore triangle or procedural geometry during traversal.

+

+
+ +
+
+static constexpr bool hasBaseVertexSupport = true
+

Constant true.

+

Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex.

+

+
+ +
+
+static constexpr bool castingFullyTypedFormatsSupported = false
+

Constant false.

+

Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12)

+

+
+ +
+
+static constexpr bool hasNativeRayTracePipelineExpansion = false
+

Constant false.

+

+

See also

+

DeviceDriverCapabilitiesBase::hasNativeRayTracePipelineExpansion

+
+

+
+ +
+
+static constexpr bool hasWaveOps = true
+

Constant true.

+

Indicates that the device driver supports wave ops.

+

+
+ +
+
+ +
+
+struct DeviceDriverCapabilitiesPS5 : public DeviceDriverCapabilitiesPS4
+

Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for PlayStation 5.

+

Uses PlayStation 4 optimized values and overrides only differences.

+

+
+

Public Static Attributes

+
+
+static constexpr bool hasStereoExpansion = true
+

Constant true.

+

Indicates that the device driver supports stereo render expansion.

+

+
+ +
+
+static constexpr bool hasRayAccelerationStructure = true
+

Constant false.

+

Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support.

+

+
+ +
+
+static constexpr bool hasRayQuery = true
+

Constant false.

+

Indicates that the device driver supports ray queries (“inline ray tracing”) in any shader stage.

+

+
+ +
+
+static constexpr bool hasRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports ray dispatch with its own ray tracing shader stage.

+

+
+ +
+
+static constexpr bool hasIndirectRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports indirect dispatch for dispatch rays.

+

+
+ +
+
+static constexpr bool hasGeometryIndexInRayAccelerationStructure = false
+

Constant false.

+

Indicates that the device driver supports geometry index information in acceleration structures in ray tracing / ray query shaders.

+

+
+ +
+
+static constexpr bool hasSkipPrimitiveTypeInRayTracingShaders = false
+

Constant false.

+

Indicates that the device driver supports masking flags in shaders to ignore triangle or procedural geometry during traversal.

+

+
+ +
+
+ +
+
+struct DeviceDriverCapabilitiesIOS : public DeviceDriverCapabilitiesBase
+

Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for iOS.

+
+

Public Static Attributes

+
+
+static constexpr bool hasAnisotropicFilter = true
+

Constant true.

+

Indicates that the device driver supports anisotropic filtering of textures.

+

+
+ +
+
+static constexpr bool hasDepthReadOnly = false
+

Constant false.

+

Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource.

+

+
+ +
+
+static constexpr bool hasStructuredBuffers = true
+

Constant true.

+

Indicates that the device driver supports structured buffer types.

+

+
+ +
+
+static constexpr bool hasNoOverwriteOnShaderResourceBuffers = true
+

Constant true.

+

Indicates that the device driver supports locking of structured buffers with the no-overwrite method.

+

+
+ +
+
+static constexpr bool hasForcedSamplerCount = false
+

Constant false.

+

Indicates that the device driver supports forced multi-sample count during raster phase.

+

+
+ +
+
+static constexpr bool hasVolMipMap = true
+

Constant true.

+

Indicates that the device driver supports mipmaps for vol (eg 3D) textures.

+

+
+ +
+
+static constexpr bool hasAsyncCompute = false
+

Constant false.

+

Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable.

+

+
+ +
+
+static constexpr bool hasOcclusionQuery = true
+

Constant true.

+

Indicates that the device driver supports occlusion queries.

+

+
+ +
+
+static constexpr bool hasConstBufferOffset = false
+

Constant false.

+

Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasDepthBoundsTest = false
+

Constant false.

+

Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing.

+

+
+ +
+
+static constexpr bool hasConditionalRender = false
+

Constant false.

+

Indicates that the device driver supports conditional rendering.

+

+
+ +
+
+static constexpr bool hasResourceCopyConversion = true
+

Constant true.

+

Indicates that the device driver supports copy of textures of different but compatible formats.

+

+
+ +
+
+static constexpr bool hasAsyncCopy = false
+

Constant false.

+

Indicates that the device driver supports asynchronously issued copy operations.

+

+
+ +
+
+static constexpr bool hasReadMultisampledDepth = true
+

Constant true.

+

Indicates that the device driver supports reading from multi-sampled depth stencil targets.

+

+
+ +
+
+static constexpr bool hasInstanceID = true
+

Constant true.

+

Indicates that the device driver supports instance id system variable in shaders.

+

+
+ +
+
+static constexpr bool hasConservativeRassterization = false
+

Constant false.

+

Indicates that the device driver supports conservative rastering.

+

+
+ +
+
+static constexpr bool hasQuadTessellation = false
+

Constant false.

+

Indicates that the device driver supports quad tessellation.

+

+
+ +
+
+static constexpr bool hasGather4 = true
+

Constant true.

+

Indicates that the device driver supports gather intrinsic in shaders.

+

+
+ +
+
+static constexpr bool hasAlphaCoverage = true
+

Constant true.

+

Indicates that the device driver supports the alpha to coverage raster feature.

+

+
+ +
+
+static constexpr bool hasWellSupportedIndirect = false
+

Constant false.

+

Indicates that the device driver supports indirect drawing.

+

+
+ +
+
+static constexpr bool hasBindless = false
+

Constant false.

+

Indicates that the device driver supports the bindless API and resource access in shaders.

+

+
+ +
+
+static constexpr bool hasNVApi = false
+

Constant false.

+

Indicates that the device driver has detected that the Nvidia driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasATIApi = false
+

Constant false.

+

Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasVariableRateShading = false
+

Constant false.

+

Indicates that the device driver supports basic per draw shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingTexture = false
+

Constant false.

+

Indicates that the device driver supports shading rate textures as a source of shading rate information.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingShaderOutput = false
+

Constant false.

+

Indicates that the device driver supports shader generated shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingCombiners = false
+

Constant false.

+

Indicates that the device driver supports combiners for variable rate shading to select the final shading rate.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingBy4 = false
+

Constant false.

+

Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction.

+

+
+ +
+
+static constexpr bool hasAliasedTextures = false
+

Constant false.

+

Indicates that the device driver supports creation of aliased textures.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasResourceHeaps = false
+

Constant false.

+

Indicates that the device driver supports the resource heap API.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasBufferOverlapCopy = false
+

Constant false.

+

Indicates that the device driver supports overlapping buffer copies.

+

+
+ +
+
+static constexpr bool hasBufferOverlapRegionsCopy = false
+

Constant false.

+

Indicates that the device driver uses region based copies when overlapping copies are executed.

+

+
+ +
+
+static constexpr bool hasUAVOnlyForcedSampleCount = false
+

Constant false.

+

Indicates that the device driver supports forced multisample count without render targets and only outputting to UAVs.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasShader64BitIntegerResources = false
+

Constant false.

+

Indicates that the device driver supports 64 bit integers shader resource types.

+

+
+ +
+
+static constexpr bool hasNativeRenderPassSubPasses = true
+

Constant false.

+

Indicates that the device driver is not emulating render sup-passes.

+

+
+ +
+
+static constexpr bool hasTiled2DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 2D textures.

+

+
+ +
+
+static constexpr bool hasTiled3DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 3D textures;.

+

+
+ +
+
+static constexpr bool hasTiledSafeResourcesAccess = false
+

Constant false.

+

Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored.

+

+
+ +
+
+static constexpr bool hasTiledMemoryAliasing = false
+

Constant false.

+

Indicates that the device driver supports memory aliasing of multiple tiles.

+

+
+ +
+
+static constexpr bool hasDLSS = false
+

Constant false.

+

Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling.

+

+
+ +
+
+static constexpr bool hasXESS = false
+

Constant false.

+

Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling.

+

+
+ +
+
+static constexpr bool hasDrawID = false
+

Constant false.

+

Indicates that the device driver supports draw id in shaders.

+

+
+ +
+
+static constexpr bool hasMeshShader = false
+

Constant false.

+

Indicates that the device driver supports the mesh shader pipeline.

+

+
+ +
+
+static constexpr bool hasBasicViewInstancing = false
+

Constant false.

+

Indicates that the device driver supports basic view instancing.

+

+
+ +
+
+static constexpr bool hasOptimizedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has some optimizations for view instanced rendering.

+

+
+ +
+
+static constexpr bool hasAcceleratedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has hardware acceleration to natively support view instanced rendering.

+

+
+ +
+
+static constexpr bool hasStereoExpansion = false
+

Constant false.

+

Indicates that the device driver supports stereo render expansion.

+

+
+ +
+
+static constexpr bool hasTileBasedArchitecture = true
+

Constant true.

+

Indicates that the device driver architecture is known to be a tile renderer.

+

+
+ +
+
+static constexpr bool hasLazyMemory = false
+

Constant false.

+

Indicates that the device driver supports lazily allocated memory.

+

+
+ +
+
+static constexpr bool hasShaderFloat16Support = true
+

Constant true.

+

Indicates that the device driver supports 16-bit floating-point types in shaders for arithmetic operations.

+

+
+ +
+
+static constexpr bool hasUAVOnEveryStage = true
+

Constant true.

+

Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders.

+

+
+ +
+
+static constexpr bool hasRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports ray dispatch with its own ray tracing shader stage.

+

+
+ +
+
+static constexpr bool hasIndirectRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports indirect dispatch for dispatch rays.

+

+
+ +
+
+static constexpr bool castingFullyTypedFormatsSupported = false
+

Constant false.

+

Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12)

+

+
+ +
+
+static constexpr bool hasWaveOps = true
+

Constant true.

+

Indicates that the device driver supports wave ops.

+

+
+ +
+
+ +
+
+struct DeviceDriverCapabilitiesTVOS : public DeviceDriverCapabilitiesBase
+

Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for tvOS.

+
+

Public Static Attributes

+
+
+static constexpr bool hasAnisotropicFilter = true
+

Constant true.

+

Indicates that the device driver supports anisotropic filtering of textures.

+

+
+ +
+
+static constexpr bool hasDepthReadOnly = false
+

Constant false.

+

Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource.

+

+
+ +
+
+static constexpr bool hasStructuredBuffers = true
+

Constant true.

+

Indicates that the device driver supports structured buffer types.

+

+
+ +
+
+static constexpr bool hasNoOverwriteOnShaderResourceBuffers = true
+

Constant true.

+

Indicates that the device driver supports locking of structured buffers with the no-overwrite method.

+

+
+ +
+
+static constexpr bool hasForcedSamplerCount = false
+

Constant false.

+

Indicates that the device driver supports forced multi-sample count during raster phase.

+

+
+ +
+
+static constexpr bool hasVolMipMap = true
+

Constant true.

+

Indicates that the device driver supports mipmaps for vol (eg 3D) textures.

+

+
+ +
+
+static constexpr bool hasAsyncCompute = false
+

Constant false.

+

Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable.

+

+
+ +
+
+static constexpr bool hasOcclusionQuery = true
+

Constant true.

+

Indicates that the device driver supports occlusion queries.

+

+
+ +
+
+static constexpr bool hasConstBufferOffset = false
+

Constant false.

+

Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasDepthBoundsTest = false
+

Constant false.

+

Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing.

+

+
+ +
+
+static constexpr bool hasConditionalRender = false
+

Constant false.

+

Indicates that the device driver supports conditional rendering.

+

+
+ +
+
+static constexpr bool hasResourceCopyConversion = true
+

Constant true.

+

Indicates that the device driver supports copy of textures of different but compatible formats.

+

+
+ +
+
+static constexpr bool hasAsyncCopy = false
+

Constant false.

+

Indicates that the device driver supports asynchronously issued copy operations.

+

+
+ +
+
+static constexpr bool hasReadMultisampledDepth = true
+

Constant true.

+

Indicates that the device driver supports reading from multi-sampled depth stencil targets.

+

+
+ +
+
+static constexpr bool hasInstanceID = true
+

Constant true.

+

Indicates that the device driver supports instance id system variable in shaders.

+

+
+ +
+
+static constexpr bool hasConservativeRassterization = false
+

Constant false.

+

Indicates that the device driver supports conservative rastering.

+

+
+ +
+
+static constexpr bool hasQuadTessellation = false
+

Constant false.

+

Indicates that the device driver supports quad tessellation.

+

+
+ +
+
+static constexpr bool hasGather4 = true
+

Constant true.

+

Indicates that the device driver supports gather intrinsic in shaders.

+

+
+ +
+
+static constexpr bool hasAlphaCoverage = true
+

Constant true.

+

Indicates that the device driver supports the alpha to coverage raster feature.

+

+
+ +
+
+static constexpr bool hasWellSupportedIndirect = false
+

Constant false.

+

Indicates that the device driver supports indirect drawing.

+

+
+ +
+
+static constexpr bool hasBindless = false
+

Constant false.

+

Indicates that the device driver supports the bindless API and resource access in shaders.

+

+
+ +
+
+static constexpr bool hasNVApi = false
+

Constant false.

+

Indicates that the device driver has detected that the Nvidia driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasATIApi = false
+

Constant false.

+

Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasVariableRateShading = false
+

Constant false.

+

Indicates that the device driver supports basic per draw shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingTexture = false
+

Constant false.

+

Indicates that the device driver supports shading rate textures as a source of shading rate information.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingShaderOutput = false
+

Constant false.

+

Indicates that the device driver supports shader generated shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingCombiners = false
+

Constant false.

+

Indicates that the device driver supports combiners for variable rate shading to select the final shading rate.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingBy4 = false
+

Constant false.

+

Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction.

+

+
+ +
+
+static constexpr bool hasAliasedTextures = false
+

Constant false.

+

Indicates that the device driver supports creation of aliased textures.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasResourceHeaps = false
+

Constant false.

+

Indicates that the device driver supports the resource heap API.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasBufferOverlapCopy = false
+

Constant false.

+

Indicates that the device driver supports overlapping buffer copies.

+

+
+ +
+
+static constexpr bool hasBufferOverlapRegionsCopy = false
+

Constant false.

+

Indicates that the device driver uses region based copies when overlapping copies are executed.

+

+
+ +
+
+static constexpr bool hasUAVOnlyForcedSampleCount = false
+

Constant false.

+

Indicates that the device driver supports forced multisample count without render targets and only outputting to UAVs.

+

+
+ +
+
+static constexpr bool hasShader64BitIntegerResources = false
+

Constant false.

+

Indicates that the device driver supports 64 bit integers shader resource types.

+

+
+ +
+
+static constexpr bool hasNativeRenderPassSubPasses = true
+

Constant false.

+

Indicates that the device driver is not emulating render sup-passes.

+

+
+ +
+
+static constexpr bool hasTiled2DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 2D textures.

+

+
+ +
+
+static constexpr bool hasTiled3DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 3D textures;.

+

+
+ +
+
+static constexpr bool hasTiledSafeResourcesAccess = false
+

Constant false.

+

Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored.

+

+
+ +
+
+static constexpr bool hasTiledMemoryAliasing = false
+

Constant false.

+

Indicates that the device driver supports memory aliasing of multiple tiles.

+

+
+ +
+
+static constexpr bool hasDLSS = false
+

Constant false.

+

Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling.

+

+
+ +
+
+static constexpr bool hasXESS = false
+

Constant false.

+

Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling.

+

+
+ +
+
+static constexpr bool hasDrawID = false
+

Constant false.

+

Indicates that the device driver supports draw id in shaders.

+

+
+ +
+
+static constexpr bool hasMeshShader = false
+

Constant false.

+

Indicates that the device driver supports the mesh shader pipeline.

+

+
+ +
+
+static constexpr bool hasBasicViewInstancing = false
+

Constant false.

+

Indicates that the device driver supports basic view instancing.

+

+
+ +
+
+static constexpr bool hasOptimizedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has some optimizations for view instanced rendering.

+

+
+ +
+
+static constexpr bool hasAcceleratedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has hardware acceleration to natively support view instanced rendering.

+

+
+ +
+
+static constexpr bool hasStereoExpansion = false
+

Constant false.

+

Indicates that the device driver supports stereo render expansion.

+

+
+ +
+
+static constexpr bool hasTileBasedArchitecture = true
+

Constant true.

+

Indicates that the device driver architecture is known to be a tile renderer.

+

+
+ +
+
+static constexpr bool hasLazyMemory = false
+

Constant false.

+

Indicates that the device driver supports lazily allocated memory.

+

+
+ +
+
+static constexpr bool hasShaderFloat16Support = true
+

Constant true.

+

Indicates that the device driver supports 16-bit floating-point types in shaders for arithmetic operations.

+

+
+ +
+
+static constexpr bool hasUAVOnEveryStage = true
+

Constant true.

+

Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders.

+

+
+ +
+
+static constexpr bool hasRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports ray dispatch with its own ray tracing shader stage.

+

+
+ +
+
+static constexpr bool hasIndirectRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports indirect dispatch for dispatch rays.

+

+
+ +
+
+static constexpr bool castingFullyTypedFormatsSupported = false
+

Constant false.

+

Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12)

+

+
+ +
+
+static constexpr bool hasWaveOps = true
+

Constant true.

+

Indicates that the device driver supports wave ops.

+

+
+ +
+
+ +
+
+struct DeviceDriverCapabilitiesNintendoSwitch : public DeviceDriverCapabilitiesBase
+

Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for Nintendo Switch.

+
+

Public Static Attributes

+
+
+static constexpr bool hasAnisotropicFilter = true
+

Constant true.

+

Indicates that the device driver supports anisotropic filtering of textures.

+

+
+ +
+
+static constexpr bool hasDepthReadOnly = true
+

Constant true.

+

Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource.

+

+
+ +
+
+static constexpr bool hasStructuredBuffers = true
+

Constant true.

+

Indicates that the device driver supports structured buffer types.

+

+
+ +
+
+static constexpr bool hasNoOverwriteOnShaderResourceBuffers = true
+

Constant true.

+

Indicates that the device driver supports locking of structured buffers with the no-overwrite method.

+

+
+ +
+
+static constexpr bool hasForcedSamplerCount = false
+

Constant false.

+

Indicates that the device driver supports forced multi-sample count during raster phase.

+

+
+ +
+
+static constexpr bool hasVolMipMap = true
+

Constant true.

+

Indicates that the device driver supports mipmaps for vol (eg 3D) textures.

+

+
+ +
+
+static constexpr bool hasAsyncCompute = false
+

Constant false.

+

Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable.

+

+
+ +
+
+static constexpr bool hasOcclusionQuery = false
+

Constant true.

+

Indicates that the device driver supports occlusion queries.

+

+
+ +
+
+static constexpr bool hasConstBufferOffset = false
+

Constant false.

+

Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasDepthBoundsTest = true
+

Constant true.

+

Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing.

+

+
+ +
+
+static constexpr bool hasResourceCopyConversion = true
+

Constant true.

+

Indicates that the device driver supports copy of textures of different but compatible formats.

+

+
+ +
+
+static constexpr bool hasAsyncCopy = true
+

Constant true.

+

Indicates that the device driver supports asynchronously issued copy operations.

+

+
+ +
+
+static constexpr bool hasReadMultisampledDepth = true
+

Constant true.

+

Indicates that the device driver supports reading from multi-sampled depth stencil targets.

+

+
+ +
+
+static constexpr bool hasInstanceID = true
+

Constant true.

+

Indicates that the device driver supports instance id system variable in shaders.

+

+
+ +
+
+static constexpr bool hasConservativeRassterization = false
+

Constant false.

+

Indicates that the device driver supports conservative rastering.

+

+
+ +
+
+static constexpr bool hasQuadTessellation = false
+

Constant false.

+

Indicates that the device driver supports quad tessellation.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasGather4 = true
+

Constant true.

+

Indicates that the device driver supports gather intrinsic in shaders.

+

+
+ +
+
+static constexpr bool hasAlphaCoverage = true
+

Constant true.

+

Indicates that the device driver supports the alpha to coverage raster feature.

+

+
+ +
+
+static constexpr bool hasWellSupportedIndirect = true
+

Constant true.

+

Indicates that the device driver supports indirect drawing.

+

+
+ +
+
+static constexpr bool hasNVApi = false
+

Constant false.

+

Indicates that the device driver has detected that the Nvidia driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasATIApi = false
+

Constant false.

+

Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasVariableRateShading = false
+

Constant false.

+

Indicates that the device driver supports basic per draw shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingTexture = false
+

Constant false.

+

Indicates that the device driver supports shading rate textures as a source of shading rate information.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingShaderOutput = false
+

Constant false.

+

Indicates that the device driver supports shader generated shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingCombiners = false
+

Constant false.

+

Indicates that the device driver supports combiners for variable rate shading to select the final shading rate.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingBy4 = false
+

Constant false.

+

Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction.

+

+
+ +
+
+static constexpr bool hasAliasedTextures = false
+

Constant false.

+

Indicates that the device driver supports creation of aliased textures.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasResourceHeaps = true
+

Constant false.

+

Indicates that the device driver supports the resource heap API.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasBufferOverlapCopy = false
+

Constant false.

+

Indicates that the device driver supports overlapping buffer copies.

+

+
+ +
+
+static constexpr bool hasBufferOverlapRegionsCopy = false
+

Constant false.

+

Indicates that the device driver uses region based copies when overlapping copies are executed.

+

+
+ +
+
+static constexpr bool hasUAVOnlyForcedSampleCount = true
+

Constant true.

+

Indicates that the device driver supports forced multisample count without render targets and only outputting to UAVs.

+

+
+ +
+
+static constexpr bool hasShader64BitIntegerResources = false
+

Constant false.

+

Indicates that the device driver supports 64 bit integers shader resource types.

+

+
+ +
+
+static constexpr bool hasNativeRenderPassSubPasses = true
+

Constant true.

+

Indicates that the device driver is not emulating render sup-passes.

+

+
+ +
+
+static constexpr bool hasTiled2DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 2D textures.

+

+
+ +
+
+static constexpr bool hasTiled3DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 3D textures;.

+

+
+ +
+
+static constexpr bool hasTiledSafeResourcesAccess = false
+

Constant false.

+

Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored.

+

+
+ +
+
+static constexpr bool hasTiledMemoryAliasing = false
+

Constant false.

+

Indicates that the device driver supports memory aliasing of multiple tiles.

+

+
+ +
+
+static constexpr bool hasDLSS = false
+

Constant false.

+

Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling.

+

+
+ +
+
+static constexpr bool hasXESS = false
+

Constant false.

+

Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling.

+

+
+ +
+
+static constexpr bool hasDrawID = true
+

Constant true.

+

Indicates that the device driver supports draw id in shaders.

+

+
+ +
+
+static constexpr bool hasMeshShader = false
+

Constant false.

+

Indicates that the device driver supports the mesh shader pipeline.

+

+
+ +
+
+static constexpr bool hasBasicViewInstancing = false
+

Constant false.

+

Indicates that the device driver supports basic view instancing.

+

+
+ +
+
+static constexpr bool hasOptimizedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has some optimizations for view instanced rendering.

+

+
+ +
+
+static constexpr bool hasAcceleratedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has hardware acceleration to natively support view instanced rendering.

+

+
+ +
+
+static constexpr bool hasStereoExpansion = false
+

Constant false.

+

Indicates that the device driver supports stereo render expansion.

+

+
+ +
+
+static constexpr bool hasTileBasedArchitecture = false
+

Constant false.

+

Indicates that the device driver architecture is known to be a tile renderer.

+

+
+ +
+
+static constexpr bool hasLazyMemory = false
+

Constant false.

+

Indicates that the device driver supports lazily allocated memory.

+

+
+ +
+
+static constexpr bool hasIndirectSupport = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support indirect calls.

+

+
+ +
+
+static constexpr bool hasCompareSampler = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support comparison samplers.

+

+
+ +
+
+static constexpr bool hasUAVOnEveryStage = true
+

Constant true.

+

Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders.

+

+
+ +
+
+static constexpr bool hasRayAccelerationStructure = false
+

Constant false.

+

Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support.

+

+
+ +
+
+static constexpr bool hasRayQuery = false
+

Constant false.

+

Indicates that the device driver supports ray queries (“inline ray tracing”) in any shader stage.

+

+
+ +
+
+static constexpr bool hasRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports ray dispatch with its own ray tracing shader stage.

+

+
+ +
+
+static constexpr bool hasIndirectRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports indirect dispatch for dispatch rays.

+

+
+ +
+
+static constexpr bool hasGeometryIndexInRayAccelerationStructure = false
+

Constant false.

+

Indicates that the device driver supports geometry index information in acceleration structures in ray tracing / ray query shaders.

+

+
+ +
+
+static constexpr bool hasSkipPrimitiveTypeInRayTracingShaders = false
+

Constant false.

+

Indicates that the device driver supports masking flags in shaders to ignore triangle or procedural geometry during traversal.

+

+
+ +
+
+static constexpr bool hasBaseVertexSupport = true
+

Constant true.

+

Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex.

+

+
+ +
+
+static constexpr bool castingFullyTypedFormatsSupported = false
+

Constant false.

+

Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12)

+

+
+ +
+
+static constexpr bool hasNativeRayTracePipelineExpansion = false
+

Constant false.

+

+

See also

+

DeviceDriverCapabilitiesBase::hasNativeRayTracePipelineExpansion

+
+

+
+ +
+
+ +
+
+struct DeviceDriverCapabilitiesAndroid : public DeviceDriverCapabilitiesBase
+

Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for Android.

+
+

Public Static Attributes

+
+
+static constexpr bool hasDepthReadOnly = true
+

Constant true.

+

Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource.

+

+
+ +
+
+static constexpr bool hasStructuredBuffers = true
+

Constant true.

+

Indicates that the device driver supports structured buffer types.

+

+
+ +
+
+static constexpr bool hasNoOverwriteOnShaderResourceBuffers = true
+

Constant true.

+

Indicates that the device driver supports locking of structured buffers with the no-overwrite method.

+

+
+ +
+
+static constexpr bool hasForcedSamplerCount = false
+

Constant false.

+

Indicates that the device driver supports forced multi-sample count during raster phase.

+

+
+ +
+
+static constexpr bool hasVolMipMap = true
+

Constant true.

+

Indicates that the device driver supports mipmaps for vol (eg 3D) textures.

+

+
+ +
+
+static constexpr bool hasAsyncCompute = false
+

Constant false.

+

Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable.

+

+
+ +
+
+static constexpr bool hasOcclusionQuery = false
+

Constant true.

+

Indicates that the device driver supports occlusion queries.

+

+
+ +
+
+static constexpr bool hasConstBufferOffset = false
+

Constant false.

+

Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasAsyncCopy = true
+

Constant true.

+

Indicates that the device driver supports asynchronously issued copy operations.

+

+
+ +
+
+static constexpr bool hasReadMultisampledDepth = true
+

Constant true.

+

Indicates that the device driver supports reading from multi-sampled depth stencil targets.

+

+
+ +
+
+static constexpr bool hasGather4 = true
+

Constant true.

+

Indicates that the device driver supports gather intrinsic in shaders.

+

+
+ +
+
+static constexpr bool hasAlphaCoverage = true
+

Constant true.

+

Indicates that the device driver supports the alpha to coverage raster feature.

+

+
+ +
+
+static constexpr bool hasNVApi = false
+

Constant false.

+

Indicates that the device driver has detected that the Nvidia driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasATIApi = false
+

Constant false.

+

Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasVariableRateShading = false
+

Constant false.

+

Indicates that the device driver supports basic per draw shading rates.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasVariableRateShadingTexture = false
+

Constant false.

+

Indicates that the device driver supports shading rate textures as a source of shading rate information.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasVariableRateShadingShaderOutput = false
+

Constant false.

+

Indicates that the device driver supports shader generated shading rates.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasVariableRateShadingCombiners = false
+

Constant false.

+

Indicates that the device driver supports combiners for variable rate shading to select the final shading rate.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasVariableRateShadingBy4 = false
+

Constant false.

+

Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasAliasedTextures = false
+

Constant false.

+

Indicates that the device driver supports creation of aliased textures.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasBufferOverlapCopy = false
+

Constant false.

+

Indicates that the device driver supports overlapping buffer copies.

+

+
+ +
+
+static constexpr bool hasBufferOverlapRegionsCopy = false
+

Constant false.

+

Indicates that the device driver uses region based copies when overlapping copies are executed.

+

+
+ +
+
+static constexpr bool hasResourceCopyConversion = true
+

Constant true.

+

Indicates that the device driver supports copy of textures of different but compatible formats.

+

+
+ +
+
+static constexpr bool hasShader64BitIntegerResources = false
+

Constant false.

+

Indicates that the device driver supports 64 bit integers shader resource types.

+

+
+ +
+
+static constexpr bool hasNativeRenderPassSubPasses = true
+

Constant true.

+

Indicates that the device driver is not emulating render sup-passes.

+

+
+ +
+
+static constexpr bool hasTiled2DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 2D textures.

+

+
+ +
+
+static constexpr bool hasTiled3DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 3D textures;.

+

+
+ +
+
+static constexpr bool hasTiledSafeResourcesAccess = false
+

Constant false.

+

Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored.

+

+
+ +
+
+static constexpr bool hasTiledMemoryAliasing = false
+

Constant false.

+

Indicates that the device driver supports memory aliasing of multiple tiles.

+

+
+ +
+
+static constexpr bool hasDLSS = false
+

Constant false.

+

Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling.

+

+
+ +
+
+static constexpr bool hasXESS = false
+

Constant false.

+

Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling.

+

+
+ +
+
+static constexpr bool hasDrawID = true
+

Constant true.

+

Indicates that the device driver supports draw id in shaders.

+

+
+ +
+
+static constexpr bool hasMeshShader = false
+

Constant false.

+

Indicates that the device driver supports the mesh shader pipeline.

+

+
+ +
+
+static constexpr bool hasBasicViewInstancing = false
+

Constant false.

+

Indicates that the device driver supports basic view instancing.

+

+
+ +
+
+static constexpr bool hasOptimizedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has some optimizations for view instanced rendering.

+

+
+ +
+
+static constexpr bool hasAcceleratedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has hardware acceleration to natively support view instanced rendering.

+

+
+ +
+
+static constexpr bool hasStereoExpansion = false
+

Constant false.

+

Indicates that the device driver supports stereo render expansion.

+

+
+ +
+
+static constexpr bool hasIndirectSupport = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support indirect calls.

+

+
+ +
+
+static constexpr bool hasCompareSampler = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support comparison samplers.

+

+
+ +
+
+static constexpr bool hasUAVOnEveryStage = true
+

Constant true.

+

Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders.

+

+
+ +
+
+static constexpr bool hasBaseVertexSupport = true
+

Constant true.

+

Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex.

+

+
+ +
+
+static constexpr bool castingFullyTypedFormatsSupported = false
+

Constant false.

+

Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12)

+

+
+ +
+
+ +
+
+struct DeviceDriverCapabilitiesMacOSX : public DeviceDriverCapabilitiesBase
+

Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for macOS.

+
+

Public Static Attributes

+
+
+static constexpr bool hasAnisotropicFilter = true
+

Constant true.

+

Indicates that the device driver supports anisotropic filtering of textures.

+

+
+ +
+
+static constexpr bool hasDepthReadOnly = false
+

Constant false.

+

Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource.

+

+
+ +
+
+static constexpr bool hasStructuredBuffers = true
+

Constant true.

+

Indicates that the device driver supports structured buffer types.

+

+
+ +
+
+static constexpr bool hasNoOverwriteOnShaderResourceBuffers = true
+

Constant true.

+

Indicates that the device driver supports locking of structured buffers with the no-overwrite method.

+

+
+ +
+
+static constexpr bool hasForcedSamplerCount = false
+

Constant false.

+

Indicates that the device driver supports forced multi-sample count during raster phase.

+

+
+ +
+
+static constexpr bool hasVolMipMap = true
+

Constant true.

+

Indicates that the device driver supports mipmaps for vol (eg 3D) textures.

+

+
+ +
+
+static constexpr bool hasAsyncCompute = false
+

Constant false.

+

Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable.

+

+
+ +
+
+static constexpr bool hasOcclusionQuery = true
+

Constant true.

+

Indicates that the device driver supports occlusion queries.

+

+
+ +
+
+static constexpr bool hasConstBufferOffset = false
+

Constant false.

+

Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasAsyncCopy = true
+

Constant true.

+

Indicates that the device driver supports asynchronously issued copy operations.

+

+
+ +
+
+static constexpr bool hasDepthBoundsTest = false
+

Constant false.

+

Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing.

+

+
+ +
+
+static constexpr bool hasReadMultisampledDepth = true
+

Constant true.

+

Indicates that the device driver supports reading from multi-sampled depth stencil targets.

+

+
+ +
+
+static constexpr bool hasInstanceID = true
+

Constant true.

+

Indicates that the device driver supports instance id system variable in shaders.

+

+
+ +
+
+static constexpr bool hasConservativeRassterization = false
+

Constant false.

+

Indicates that the device driver supports conservative rastering.

+

+
+ +
+
+static constexpr bool hasQuadTessellation = false
+

Constant false.

+

Indicates that the device driver supports quad tessellation.

+

+
+ +
+
+static constexpr bool hasGather4 = true
+

Constant true.

+

Indicates that the device driver supports gather intrinsic in shaders.

+

+
+ +
+
+static constexpr bool hasAlphaCoverage = true
+

Constant true.

+

Indicates that the device driver supports the alpha to coverage raster feature.

+

+
+ +
+
+static constexpr bool hasWellSupportedIndirect = false
+

Constant false.

+

Indicates that the device driver supports indirect drawing.

+

+
+ +
+
+static constexpr bool hasNVApi = false
+

Constant false.

+

Indicates that the device driver has detected that the Nvidia driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasATIApi = false
+

Constant false.

+

Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasVariableRateShading = false
+

Constant false.

+

Indicates that the device driver supports basic per draw shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingTexture = false
+

Constant false.

+

Indicates that the device driver supports shading rate textures as a source of shading rate information.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingShaderOutput = false
+

Constant false.

+

Indicates that the device driver supports shader generated shading rates.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingCombiners = false
+

Constant false.

+

Indicates that the device driver supports combiners for variable rate shading to select the final shading rate.

+

+
+ +
+
+static constexpr bool hasVariableRateShadingBy4 = false
+

Constant false.

+

Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction.

+

+
+ +
+
+static constexpr bool hasAliasedTextures = false
+

Constant false.

+

Indicates that the device driver supports creation of aliased textures.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasResourceHeaps = false
+

Constant false.

+

Indicates that the device driver supports the resource heap API.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasBufferOverlapCopy = false
+

Constant false.

+

Indicates that the device driver supports overlapping buffer copies.

+

+
+ +
+
+static constexpr bool hasBufferOverlapRegionsCopy = false
+

Constant false.

+

Indicates that the device driver uses region based copies when overlapping copies are executed.

+

+
+ +
+
+static constexpr bool hasConditionalRender = false
+

Constant false.

+

Indicates that the device driver supports conditional rendering.

+

+
+ +
+
+static constexpr bool hasResourceCopyConversion = true
+

Constant true.

+

Indicates that the device driver supports copy of textures of different but compatible formats.

+

+
+ +
+
+static constexpr bool hasShader64BitIntegerResources = false
+

Constant false.

+

Indicates that the device driver supports 64 bit integers shader resource types.

+

+
+ +
+
+static constexpr bool hasNativeRenderPassSubPasses = true
+

Constant false.

+

Indicates that the device driver is not emulating render sup-passes.

+

+
+ +
+
+static constexpr bool hasTiled2DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 2D textures.

+

+
+ +
+
+static constexpr bool hasTiled3DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 3D textures;.

+

+
+ +
+
+static constexpr bool hasTiledSafeResourcesAccess = false
+

Constant false.

+

Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored.

+

+
+ +
+
+static constexpr bool hasTiledMemoryAliasing = false
+

Constant false.

+

Indicates that the device driver supports memory aliasing of multiple tiles.

+

+
+ +
+
+static constexpr bool hasDLSS = false
+

Constant false.

+

Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling.

+

+
+ +
+
+static constexpr bool hasXESS = false
+

Constant false.

+

Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling.

+

+
+ +
+
+static constexpr bool hasMeshShader = false
+

Constant false.

+

Indicates that the device driver supports the mesh shader pipeline.

+

+
+ +
+
+static constexpr bool hasBasicViewInstancing = false
+

Constant false.

+

Indicates that the device driver supports basic view instancing.

+

+
+ +
+
+static constexpr bool hasOptimizedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has some optimizations for view instanced rendering.

+

+
+ +
+
+static constexpr bool hasAcceleratedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has hardware acceleration to natively support view instanced rendering.

+

+
+ +
+
+static constexpr bool hasStereoExpansion = false
+

Constant false.

+

Indicates that the device driver supports stereo render expansion.

+

+
+ +
+
+static constexpr bool hasTileBasedArchitecture = false
+

Constant false.

+

Indicates that the device driver architecture is known to be a tile renderer.

+

+
+ +
+
+static constexpr bool hasLazyMemory = false
+

Constant false.

+

Indicates that the device driver supports lazily allocated memory.

+

+
+ +
+
+static constexpr bool hasIndirectSupport = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support indirect calls.

+

+
+ +
+
+static constexpr bool hasCompareSampler = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support comparison samplers.

+

+
+ +
+
+static constexpr bool hasShaderFloat16Support = false
+

Constant false.

+

Indicates that the device driver supports 16-bit floating-point types in shaders for arithmetic operations.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasUAVOnEveryStage = true
+

Constant true.

+

Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders.

+

+
+ +
+
+static constexpr bool hasRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports ray dispatch with its own ray tracing shader stage.

+

+
+ +
+
+static constexpr bool hasIndirectRayDispatch = false
+

Constant false.

+

Indicates that the device driver supports indirect dispatch for dispatch rays.

+

+
+ +
+
+static constexpr bool castingFullyTypedFormatsSupported = false
+

Constant false.

+

Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12)

+

+
+ +
+
+static constexpr bool hasWaveOps = true
+

Constant true.

+

Indicates that the device driver supports wave ops.

+

+
+ +
+
+ +
+
+struct DeviceDriverCapabilitiesLinux : public DeviceDriverCapabilitiesBase
+

Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for Linux.

+
+

Public Static Attributes

+
+
+static constexpr bool hasAnisotropicFilter = true
+

Constant true.

+

Indicates that the device driver supports anisotropic filtering of textures.

+

+
+ +
+
+static constexpr bool hasDepthReadOnly = true
+

Constant true.

+

Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource.

+

+
+ +
+
+static constexpr bool hasStructuredBuffers = true
+

Constant true.

+

Indicates that the device driver supports structured buffer types.

+

+
+ +
+
+static constexpr bool hasNoOverwriteOnShaderResourceBuffers = true
+

Constant true.

+

Indicates that the device driver supports locking of structured buffers with the no-overwrite method.

+

+
+ +
+
+static constexpr bool hasForcedSamplerCount = false
+

Constant false.

+

Indicates that the device driver supports forced multi-sample count during raster phase.

+

+
+ +
+
+static constexpr bool hasVolMipMap = true
+

Constant true.

+

Indicates that the device driver supports mipmaps for vol (eg 3D) textures.

+

+
+ +
+
+static constexpr bool hasReadMultisampledDepth = true
+

Constant true.

+

Indicates that the device driver supports reading from multi-sampled depth stencil targets.

+

+
+ +
+
+static constexpr bool hasGather4 = true
+

Constant true.

+

Indicates that the device driver supports gather intrinsic in shaders.

+

+
+ +
+
+static constexpr bool hasAlphaCoverage = true
+

Constant true.

+

Indicates that the device driver supports the alpha to coverage raster feature.

+

+
+ +
+
+static constexpr bool hasShader64BitIntegerResources = false
+

Constant false.

+

Indicates that the device driver supports 64 bit integers shader resource types.

+

+
+ +
+
+static constexpr bool hasNativeRenderPassSubPasses = true
+

Constant true.

+

Indicates that the device driver is not emulating render sup-passes.

+

+
+ +
+
+static constexpr bool hasTiled2DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 2D textures.

+

+
+ +
+
+static constexpr bool hasTiled3DResources = false
+

Constant false.

+

Indicates that the device driver supports tiled 3D textures;.

+

+
+ +
+
+static constexpr bool hasTiledSafeResourcesAccess = false
+

Constant false.

+

Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored.

+

+
+ +
+
+static constexpr bool hasTiledMemoryAliasing = false
+

Constant false.

+

Indicates that the device driver supports memory aliasing of multiple tiles.

+

+
+ +
+
+static constexpr bool hasDLSS = false
+

Constant false.

+

Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling.

+

+
+ +
+
+static constexpr bool hasXESS = false
+

Constant false.

+

Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling.

+

+
+ +
+
+static constexpr bool hasDrawID = true
+

Constant true.

+

Indicates that the device driver supports draw id in shaders.

+

+
+ +
+
+static constexpr bool hasMeshShader = false
+

Constant false.

+

Indicates that the device driver supports the mesh shader pipeline.

+

+
+ +
+
+static constexpr bool hasBasicViewInstancing = false
+

Constant false.

+

Indicates that the device driver supports basic view instancing.

+

+
+ +
+
+static constexpr bool hasOptimizedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has some optimizations for view instanced rendering.

+

+
+ +
+
+static constexpr bool hasAcceleratedViewInstancing = false
+

Constant false.

+

Indicates that the device driver has hardware acceleration to natively support view instanced rendering.

+

+
+ +
+
+static constexpr bool hasAsyncCompute = false
+

Constant false.

+

Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable.

+

+
+ +
+
+static constexpr bool hasOcclusionQuery = false
+

Constant true.

+

Indicates that the device driver supports occlusion queries.

+

+
+ +
+
+static constexpr bool hasNVApi = false
+

Constant false.

+

Indicates that the device driver has detected that the Nvidia driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasATIApi = false
+

Constant false.

+

Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device.

+

+
+ +
+
+static constexpr bool hasVariableRateShading = false
+

Constant false.

+

Indicates that the device driver supports basic per draw shading rates.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasVariableRateShadingTexture = false
+

Constant false.

+

Indicates that the device driver supports shading rate textures as a source of shading rate information.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasVariableRateShadingShaderOutput = false
+

Constant false.

+

Indicates that the device driver supports shader generated shading rates.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasVariableRateShadingCombiners = false
+

Constant false.

+

Indicates that the device driver supports combiners for variable rate shading to select the final shading rate.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasVariableRateShadingBy4 = false
+

Constant false.

+

Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasAliasedTextures = false
+

Constant false.

+

Indicates that the device driver supports creation of aliased textures.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasBufferOverlapCopy = false
+

Constant false.

+

Indicates that the device driver supports overlapping buffer copies.

+

+
+ +
+
+static constexpr bool hasBufferOverlapRegionsCopy = false
+

Constant false.

+

Indicates that the device driver uses region based copies when overlapping copies are executed.

+

+
+ +
+
+static constexpr bool hasConstBufferOffset = false
+

Constant false.

+

Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer.

+
+

Remark

+

This feature can be supported, but is not yet implemented.

+
+

+
+ +
+
+static constexpr bool hasAsyncCopy = true
+

Constant true.

+

Indicates that the device driver supports asynchronously issued copy operations.

+

+
+ +
+
+static constexpr bool hasResourceCopyConversion = true
+

Constant true.

+

Indicates that the device driver supports copy of textures of different but compatible formats.

+

+
+ +
+
+static constexpr bool hasStereoExpansion = false
+

Constant false.

+

Indicates that the device driver supports stereo render expansion.

+

+
+ +
+
+static constexpr bool hasLazyMemory = false
+

Constant false.

+

Indicates that the device driver supports lazily allocated memory.

+

+
+ +
+
+static constexpr bool hasIndirectSupport = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support indirect calls.

+

+
+ +
+
+static constexpr bool hasCompareSampler = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support comparison samplers.

+

+
+ +
+
+static constexpr bool hasUAVOnEveryStage = true
+

Constant true.

+

Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders.

+

+
+ +
+
+static constexpr bool hasBaseVertexSupport = true
+

Constant true.

+

Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex.

+

+
+ +
+
+static constexpr bool castingFullyTypedFormatsSupported = false
+

Constant false.

+

Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12)

+

+
+ +
+
+ +
+
+struct DeviceDriverCapabilitiesWindows : public DeviceDriverCapabilitiesBase
+

Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for Windows.

+
+

Public Static Attributes

+
+
+static constexpr bool hasAnisotropicFilter = true
+

Constant true.

+

Indicates that the device driver supports anisotropic filtering of textures.

+

+
+ +
+
+static constexpr bool hasAlphaCoverage = true
+

Constant true.

+

Indicates that the device driver supports the alpha to coverage raster feature.

+

+
+ +
+
+static constexpr bool hasAsyncCopy = true
+

Constant true.

+

Indicates that the device driver supports asynchronously issued copy operations.

+

+
+ +
+
+static constexpr bool hasStereoExpansion = false
+

Constant false.

+

Indicates that the device driver supports stereo render expansion.

+

+
+ +
+
+static constexpr bool hasLazyMemory = false
+

Constant false.

+

Indicates that the device driver supports lazily allocated memory.

+

+
+ +
+
+static constexpr bool hasIndirectSupport = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support indirect calls.

+

+
+ +
+
+static constexpr bool hasCompareSampler = true
+

Constant true.

+

Indicates that the device driver set when hw doesn’t support comparison samplers.

+

+
+ +
+
+static constexpr bool hasBaseVertexSupport = true
+

Constant true.

+

Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex.

+

+
+ +
+
+ +
+
+struct DeviceDriverIssuesBase
+

A boolean bitfield that describes which known issues the used device / driver combination has.

+

Subclassed by DeviceDriverIssuesAndroid, DeviceDriverIssuesWindows

+
+

Public Members

+
+
+bool hasComputeTimeLimited
+

Some devices have issues with long running compute stages and may cause a TDR (Timeout Detection and Recovery) to reset the device.

+
+

Note

+

Known on the following devices:

    +
  • Qualcomm Adreno

  • +
  • ARM Mali

  • +
+

+
+
+

Note

+

+

+
+
+ +
+
+bool hasComputeCanNotWrite3DTex
+

Some device have issues with writing to 3D textures in the compute stage.

+
+

Note

+

Known on the following devices:

    +
  • Qualcomm Adreno

  • +
+

+
+
+

Note

+

+

+
+
+ +
+
+bool hasStrictRenderPassesOnly
+

Some device drivers have issues with unused render pass attachments and my crash during pipeline creation.

+
+

Note

+

Known on the following devices:

    +
  • Qualcomm Adreno

  • +
+

+
+
+

Note

+

+

+
+
+ +
+
+bool hasSmallSampledBuffers
+

Some device driver have a very limited size for sampled buffers. This indicates that device driver only works reliably with buffers not exceeding the 64KiByte size limit.

+
+

Note

+

Some mobile device are actually limited and also fall in this category, even when this is expected behavior. Known to be a bug on the following devices, as they report larger supported sizes, but fail to work with those limits:

    +
  • Qualcomm Adreno

  • +
  • ARM Mali

  • +
+

+
+
+

Note

+

+

+
+
+ +
+
+bool hasRenderPassClearDataRace
+

Some devices have issues in render passes properly scheduling clears before render, which may result in random flickering.

+
+

Note

+

Known on the following devices:

    +
  • Qualcomm Adreno with certain driver versions

  • +
+

+
+
+

Note

+

+

+
+
+ +
+
+bool hasBrokenBaseInstanceID
+

Some device drivers have broken base instance ids in shaders.

+
+

Note

+

Known on the following devices:

    +
  • ARM Mali with certain driver versions

  • +
+

+
+
+

Note

+

+

+
+
+ +
+
+bool hasMultisampledAndInstancingHang
+

Some device drivers may hang during instanced rendering with multisampled rastering.

+
+

Note

+

Known for certain device driver combinations.

+
+
+

Note

+

+

+
+
+ +
+
+bool hasIgnoreDeviceLost
+

Some device drivers spam device lost error codes while the device still remains functional normally.

+
+

Note

+

Known for certain device driver combinations.

+
+
+

Note

+

+

+
+
+ +
+
+bool hasPollDeviceFences
+

Some device drivers may randomly fail with a device reset on fence waits, the driver falls back to polling the state of fences instead.

+
+

Note

+

Known for certain device driver combinations.

+
+
+

Note

+

+

+
+
+ +
+
+bool hasBrokenShadersAfterAppSwitch
+

Some device drivers may not render some long shaders after switching from the application and back.

+
+

Note

+

Known for certain device driver combinations.

+
+
+

Note

+

+

+
+
+ +
+
+bool hasBrokenSRGBConverionWithMRT
+

Some device drivers have issues with sRGB conversion for render targets in the MRT setup.

+
+

Note

+

Known for certain device driver combinations.

+
+
+

Note

+

+

+
+
+ +
+
+bool hasBrokenComputeFormattedOutput
+

Some device drivers have issues with format conversion while outputting to image with format other than fp32.

+
+

Note

+

Known for certain device driver combinations.

+
+
+

Note

+

+

+
+
+ +
+
+bool hasClearColorBug
+

AMD Radeon hangs with DEVICE_LOST on clearview of R8G8 target with a color other than the basic B/W combinations

+
+

Note

+

Known for certain device driver combinations.

+
+
+

Note

+

+

+
+
+ +
+
+bool hasBrokenMTRecreateImage
+

Image creation during texture reload seems to crash on some devies. Reports exist for Mali G710 and G610.

+
+

Note

+

Known for certain device driver combinations.

+
+
+

Note

+

+

+
+
+ +
+
+bool hasBrokenSubpasses
+

Some device drivers have some issues with subpasses.

+
+

Note

+

Known on the following devices:

    +
  • Qualcomm Adreno with certain driver versions

  • +
+

+
+
+

Note

+

+

+
+
+ +
+
+ +
+
+struct DeviceDriverIssuesAndroid : public DeviceDriverIssuesBase
+

Issues structure specific for Android.

+
+

Public Static Attributes

+
+
+static constexpr bool hasClearColorBug = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Android.

+

+

+
+ +
+
+ +
+
+struct DeviceDriverIssuesWindows : public DeviceDriverIssuesBase
+

Issues structure specific for Windows.

+

Subclassed by DeviceDriverIssuesNoIssues

+
+

Public Static Attributes

+
+
+static constexpr bool hasComputeTimeLimited = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+static constexpr bool hasComputeCanNotWrite3DTex = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+static constexpr bool hasStrictRenderPassesOnly = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+static constexpr bool hasSmallSampledBuffers = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+static constexpr bool hasRenderPassClearDataRace = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+static constexpr bool hasBrokenBaseInstanceID = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+static constexpr bool hasMultisampledAndInstancingHang = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+static constexpr bool hasIgnoreDeviceLost = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+static constexpr bool hasPollDeviceFences = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+static constexpr bool hasBrokenShadersAfterAppSwitch = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+static constexpr bool hasBrokenSRGBConverionWithMRT = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+static constexpr bool hasBrokenComputeFormattedOutput = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+static constexpr bool hasBrokenMTRecreateImage = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+static constexpr bool hasBrokenSubpasses = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows.

+

+

+
+ +
+
+ +
+
+struct DeviceDriverIssuesNoIssues : public DeviceDriverIssuesWindows
+

Optimized issues structure for all platforms that are known to suffer from none of those.

+
+

Public Static Attributes

+
+
+static constexpr bool hasClearColorBug = false
+

Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Android.

+

+

+
+ +
+
+ +
+
+struct DeviceDriverRaytraceProperties
+

Holds the device and driver specific ray tracing related properties. NOTE some platforms may override these with fixed values.

+
+

Public Members

+
+
+unsigned topAccelerationStructureInstanceElementSize = 0
+
+ +
+
+unsigned accelerationStructureBuildScratchBufferOffsetAlignment = 0
+

Offsets for scratch buffers for acceleration structures builds have to be aligned to this value.

+
+ +
+
+unsigned maxRecursionDepth = 0
+

Describes how many “recursions” ray dispatching supports. This describes how many rays can be cast without returning. A value of 1 would mean that only the ray gen shader can shoot the initial ray and no other shader invoked by the rays miss or hit shader. A value of 2 means that the ray gen shader shoots the first ray and the invoked hit or miss shader may also shoot one ray.

+
+ +
+
+ +
+
+struct Driver3dDesc
+
+

Public Members

+
+
+int zcmpfunc
+
+ +
+
+int acmpfunc
+
+ +
+
+int sblend
+
+ +
+
+int dblend
+
+ +
+
+int mintexw
+
+ +
+
+int mintexh
+
+ +
+
+int maxtexw
+
+ +
+
+int maxtexh
+
+ +
+
+int mincubesize
+
+ +
+
+int maxcubesize
+
+ +
+
+int minvolsize
+
+ +
+
+int maxvolsize
+
+ +
+
+int maxtexaspect
+

1 means texture should be square, 0 means no limit

+
+ +
+
+int maxtexcoord
+
+ +
+
+int maxsimtex
+
+ +
+
+int maxvertexsamplers
+
+ +
+
+int maxclipplanes
+
+ +
+
+int maxstreams
+
+ +
+
+int maxstreamstr
+
+ +
+
+int maxvpconsts
+
+ +
+
+int maxprims
+
+ +
+
+int maxvertind
+
+ +
+
+float upixofs
+

pixel-size UV offsets that align texture pixels to frame buffer pixels; usually .5 for DX, and 0 for OGL

+
+ +
+
+float vpixofs
+
+ +
+
+int maxSimRT
+

Maximum number of simultaneous render targets, will be at least 1.

+
+ +
+
+bool is20ArbitrarySwizzleAvailable
+
+ +
+
+int minWarpSize
+
+ +
+
+int maxWarpSize
+
+ +
+
+unsigned variableRateTextureTileSizeX
+
+ +
+
+unsigned variableRateTextureTileSizeY
+
+ +
+
+unsigned depthResolveModes = DepthResolveMode::DEPTH_RESOLVE_MODE_NONE
+
+ +
+
+DeviceDriverCapabilities caps
+
+ +
+
+DeviceDriverIssues issues
+
+ +
+
+DeviceDriverShaderModelVersion shaderModel
+
+ +
+
+DeviceDriverRaytraceProperties raytrace
+
+ +
+
+ +
+

Defines

+
+
+VSD_STREAM(n)
+
+ +
+
+VSD_STREAM_PER_VERTEX_DATA(n)
+
+ +
+
+VSD_STREAM_PER_INSTANCE_DATA(n)
+
+ +
+
+VSD_REG(n, t)
+
+ +
+
+VSD_SKIP(n)
+
+ +
+
+VSDT_FLOAT1
+
+ +
+
+VSDT_FLOAT2
+
+ +
+
+VSDT_FLOAT3
+
+ +
+
+VSDT_FLOAT4
+
+ +
+
+VSDT_E3DCOLOR
+
+ +
+
+VSDT_UBYTE4
+
+ +
+
+VSDT_SHORT2
+
+ +
+
+VSDT_SHORT4
+
+ +
+
+VSDT_SHORT2N
+
+ +
+
+VSDT_SHORT4N
+
+ +
+
+VSDT_USHORT2N
+
+ +
+
+VSDT_USHORT4N
+
+ +
+
+VSDT_UDEC3
+
+ +
+
+VSDT_DEC3N
+
+ +
+
+VSDT_HALF2
+
+ +
+
+VSDT_HALF4
+
+ +
+
+VSDT_INT1
+
+ +
+
+VSDT_INT2
+
+ +
+
+VSDT_INT3
+
+ +
+
+VSDT_INT4
+
+ +
+
+VSDT_UINT1
+
+ +
+
+VSDT_UINT2
+
+ +
+
+VSDT_UINT3
+
+ +
+
+VSDT_UINT4
+
+ +
+
+VSDR_POS
+
+ +
+
+VSDR_BLENDW
+
+ +
+
+VSDR_BLENDIND
+
+ +
+
+VSDR_NORM
+
+ +
+
+VSDR_PSIZE
+
+ +
+
+VSDR_DIFF
+
+ +
+
+VSDR_SPEC
+
+ +
+
+VSDR_TEXC0
+
+ +
+
+VSDR_TEXC1
+
+ +
+
+VSDR_TEXC2
+
+ +
+
+VSDR_TEXC3
+
+ +
+
+VSDR_TEXC4
+
+ +
+
+VSDR_TEXC5
+
+ +
+
+VSDR_TEXC6
+
+ +
+
+VSDR_TEXC7
+
+ +
+
+VSDR_POS2
+
+ +
+
+VSDR_NORM2
+
+ +
+
+VSDR_TEXC15
+
+ +
+
+VSDR_TEXC8
+
+ +
+
+VSDR_TEXC9
+
+ +
+
+VSDR_TEXC10
+
+ +
+
+VSDR_TEXC11
+
+ +
+
+VSDR_TEXC12
+
+ +
+
+VSDR_TEXC13
+
+ +
+
+VSDR_TEXC14
+
+ +
+
+

Enums

+
+
+enum [anonymous]
+

Values:

+
+
+enumerator VBLOCK_READONLY
+
+ +
+
+enumerator VBLOCK_WRITEONLY
+
+ +
+
+enumerator VBLOCK_NOSYSLOCK
+
+ +
+
+enumerator VBLOCK_DISCARD
+
+ +
+
+enumerator VBLOCK_NOOVERWRITE
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator PRIM_POINTLIST
+
+ +
+
+enumerator PRIM_LINELIST
+
+ +
+
+enumerator PRIM_LINESTRIP
+
+ +
+
+enumerator PRIM_TRILIST
+
+ +
+
+enumerator PRIM_TRISTRIP
+
+ +
+
+enumerator PRIM_TRIFAN
+
+ +
+
+enumerator PRIM_4_CONTROL_POINTS
+
+ +
+
+enumerator PRIM_COUNT
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator TM_WORLD
+
+ +
+
+enumerator TM_VIEW
+
+ +
+
+enumerator TM_PROJ
+
+ +
+
+enumerator TM_LOCAL2VIEW
+
+ +
+
+enumerator TM_VIEW2LOCAL
+
+ +
+
+enumerator TM_GLOBAL
+
+ +
+
+enumerator TM__NUM
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator CLEAR_TARGET
+
+ +
+
+enumerator CLEAR_ZBUFFER
+
+ +
+
+enumerator CLEAR_STENCIL
+
+ +
+
+enumerator CLEAR_DISCARD_TARGET
+
+ +
+
+enumerator CLEAR_DISCARD_ZBUFFER
+
+ +
+
+enumerator CLEAR_DISCARD_STENCIL
+
+ +
+
+enumerator CLEAR_DISCARD
+
+ +
+ +
+
+enum BLEND_FACTOR
+

Values:

+
+
+enumerator BLEND_ZERO
+
+ +
+
+enumerator BLEND_ONE
+
+ +
+
+enumerator BLEND_SRCCOLOR
+
+ +
+
+enumerator BLEND_INVSRCCOLOR
+
+ +
+
+enumerator BLEND_SRCALPHA
+
+ +
+
+enumerator BLEND_INVSRCALPHA
+
+ +
+
+enumerator BLEND_DESTALPHA
+
+ +
+
+enumerator BLEND_INVDESTALPHA
+
+ +
+
+enumerator BLEND_DESTCOLOR
+
+ +
+
+enumerator BLEND_INVDESTCOLOR
+
+ +
+
+enumerator BLEND_SRCALPHASAT
+
+ +
+
+enumerator BLEND_BOTHINVSRCALPHA
+
+ +
+
+enumerator BLEND_BLENDFACTOR
+
+ +
+
+enumerator BLEND_INVBLENDFACTOR
+
+ +
+ +
+
+enum BLENDOP
+

Values:

+
+
+enumerator BLENDOP_ADD
+
+ +
+
+enumerator BLENDOP_SUBTRACT
+
+ +
+
+enumerator BLENDOP_REVSUBTRACT
+
+ +
+
+enumerator BLENDOP_MIN
+
+ +
+
+enumerator BLENDOP_MAX
+
+ +
+ +
+
+enum CMPF
+

Values:

+
+
+enumerator CMPF_NEVER
+
+ +
+
+enumerator CMPF_LESS
+
+ +
+
+enumerator CMPF_EQUAL
+
+ +
+
+enumerator CMPF_LESSEQUAL
+
+ +
+
+enumerator CMPF_GREATER
+
+ +
+
+enumerator CMPF_NOTEQUAL
+
+ +
+
+enumerator CMPF_GREATEREQUAL
+
+ +
+
+enumerator CMPF_ALWAYS
+
+ +
+ +
+
+enum CULL_TYPE
+

Values:

+
+
+enumerator CULL_NONE
+
+ +
+
+enumerator CULL_CW
+
+ +
+
+enumerator CULL_CCW
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator STNCLOP_KEEP
+
+ +
+
+enumerator STNCLOP_ZERO
+
+ +
+
+enumerator STNCLOP_REPLACE
+
+ +
+
+enumerator STNCLOP_INCRSAT
+
+ +
+
+enumerator STNCLOP_DECRSAT
+
+ +
+
+enumerator STNCLOP_INVERT
+
+ +
+
+enumerator STNCLOP_INCR
+
+ +
+
+enumerator STNCLOP_DECR
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator TEXADDR_WRAP
+
+ +
+
+enumerator TEXADDR_MIRROR
+
+ +
+
+enumerator TEXADDR_CLAMP
+
+ +
+
+enumerator TEXADDR_BORDER
+
+ +
+
+enumerator TEXADDR_MIRRORONCE
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator TEXFILTER_DEFAULT
+
+ +
+
+enumerator TEXFILTER_POINT
+
+ +
+
+enumerator TEXFILTER_LINEAR
+
+ +
+
+enumerator TEXFILTER_BEST
+
+ +
+
+enumerator TEXFILTER_COMPARE
+
+ +
+
+enumerator TEXFILTER_NONE
+
+ +
+ +
+
+

Variables

+
+
+static constexpr int MAX_SURVEY_INDEX = 0
+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/other.html b/api-references/dagor-render/index/d3dAPI/other.html new file mode 100644 index 000000000..8e2fb9513 --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/other.html @@ -0,0 +1,609 @@ + + + + + + + All other methods — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

All other methods

+
+

Defines

+
+
+D3D_HAS_QUADS
+
+ +
+
+d3derr(c, m)
+
+ +
+
+d3d_err(c)
+
+ +
+
+

Typedefs

+
+
+typedef intptr_t main_wnd_f(void*, unsigned, uintptr_t, intptr_t)
+
+ +
+
+

Functions

+
+
+void d3derr_in_device_reset(const char *msg)
+
+ +
+
+

Variables

+
+
+bool dagor_d3d_force_driver_reset
+
+ +
+
+
+namespace d3d
+
+

Enums

+
+
+enum [anonymous]
+

Values:

+
+
+enumerator USAGE_TEXTURE
+
+ +
+
+enumerator USAGE_DEPTH
+
+ +
+
+enumerator USAGE_RTARGET
+
+ +
+
+enumerator USAGE_AUTOGENMIPS
+
+ +
+
+enumerator USAGE_FILTER
+
+ +
+
+enumerator USAGE_BLEND
+
+ +
+
+enumerator USAGE_VERTEXTEXTURE
+
+ +
+
+enumerator USAGE_SRGBREAD
+
+ +
+
+enumerator USAGE_SRGBWRITE
+
+ +
+
+enumerator USAGE_SAMPLECMP
+
+ +
+
+enumerator USAGE_PIXREADWRITE
+
+ +
+
+enumerator USAGE_TILED
+
+ +
+
+enumerator USAGE_UNORDERED
+
+ +
+
+enumerator USAGE_UNORDERED_LOAD
+

Indicates the format supports unordered loads.

+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator CAPFMT_X8R8G8B8
+
+ +
+
+enumerator CAPFMT_R8G8B8
+
+ +
+
+enumerator CAPFMT_R5G6B5
+
+ +
+
+enumerator CAPFMT_X1R5G5B5
+
+ +
+ +
+
+

Functions

+
+
+void update_window_mode()
+
+ +
+
+bool init_driver()
+

initalizes 3d device driver

+
+ +
+
+bool is_inited()
+

returns true when d3d API is inited

+
+ +
+
+bool init_video(void *hinst, main_wnd_f*, const char *wcname, int ncmdshow, void *&mainwnd, void *renderwnd, void *hicon, const char *title, Driver3dInitCallback *cb)
+

start up, read cfg, create window, init 3d hard&soft, … if renderwnd!=NULL, mainwnd and renderwnd are used for rendering (when possible) on error, returns false on sucess, return true

+
+ +
+
+void release_driver()
+

shutdown driver and release all resources

+
+ +
+
+bool fill_interface_table(D3dInterfaceTable &d3dit)
+

fills function-pointers table for d3d API, or returns false if unsupported

+
+ +
+
+void prepare_for_destroy()
+

notify driver before window destruction

+
+ +
+
+void window_destroyed(void *hwnd)
+

notify driver on window destruction

+
+ +
+
+BeforeWindowDestroyedCookie *register_before_window_destroyed_callback(eastl::function<void()> callback)
+
+ +
+
+void unregister_before_window_destroyed_callback(BeforeWindowDestroyedCookie *cookie)
+
+ +
+
+bool device_lost(bool *can_reset_now)
+

returns true when device is lost; when it is safe to reset device can_reset_now is set with 1 returns false when device is ok

+
+ +
+
+bool reset_device()
+

performs device reset; returns true if succeded

+
+ +
+
+bool update_screen(bool app_active = true)
+

flip video pages or copy to screen app_active==false is hint to the driver returns false on error

+
+ +
+
+void wait_for_async_present(bool force = false)
+

If the update_screen(bool) works asynchronously then under certain conditions it will block the execution until the previously called update_screen(bool) is finished.

+
+
Parameters:
+

force – Even if the internal conditions don’t require the wait, the execution will wait for the present to finish

+
+
+
+ +
+
+void gpu_latency_wait()
+

It blocks the execution until the GPU finishes on going render task for delaying the input sampling and using the most recent user inputs for rendering the next frame.

+
+ +
+
+GPUFENCEHANDLE insert_fence(GpuPipeline gpu_pipeline)
+
+ +
+
+void insert_wait_on_fence(GPUFENCEHANDLE &fence, GpuPipeline gpu_pipeline)
+
+ +
+
+bool set_srgb_backbuffer_write(bool)
+
+ +
+
+bool setgamma(float)
+
+ +
+
+float get_screen_aspect_ratio()
+
+ +
+
+void change_screen_aspect_ratio(float ar)
+
+ +
+
+void *fast_capture_screen(int &w, int &h, int &stride_bytes, int &format)
+

capture screen to buffer.fast, but not guaranteed many captures can be followed by only one end_fast_capture_screen()

+
+ +
+
+void end_fast_capture_screen()
+
+ +
+
+TexPixel32 *capture_screen(int &w, int &h, int &stride_bytes)
+

capture screen to TexPixel32 buffer slow, and not 100% guaranted returns NULL on error

+
+ +
+
+void release_capture_buffer()
+

release buffer used to capture screen

+
+ +
+
+int create_predicate()
+

conditional rendering. conditional rendering is used to skip rendering of triangles completelyon GPU. the only commands, that would be ignored, if survey fails are DIPs (all commands and states will still be executed), so it is better to use reports to completely skip object rendering max index is defined per platform surveying.

+
+ +
+
+void free_predicate(int id)
+
+ +
+
+bool begin_survey(int id)
+
+ +
+
+void end_survey(int id)
+
+ +
+
+void begin_conditional_render(int id)
+
+ +
+
+void end_conditional_render(int id)
+
+ +
+
+void beginEvent(const char*)
+
+ +
+
+void endEvent()
+
+ +
+
+bool get_vrr_supported()
+
+ +
+
+bool get_vsync_enabled()
+

returns current state of VSYNC

+
+ +
+
+bool enable_vsync(bool enable)
+

enables or disables strong VSYNC (flips only on VBLANK); returns true on success

+
+ +
+
+void resource_barrier(ResourceBarrierDesc desc, GpuPipeline gpu_pipeline = GpuPipeline::GRAPHICS)
+
+ +
+
+inline void resummarize_htile(BaseTexture*)
+
+ +
+
+inline void set_esram_layout(const wchar_t*)
+
+ +
+
+inline void unset_esram_layout()
+
+ +
+
+inline void reset_esram_layout()
+
+ +
+
+inline void prefetch_movable_textures()
+
+ +
+
+inline void writeback_movable_textures()
+
+ +
+
+

Variables

+
+
+static constexpr int RENDER_TO_WHOLE_ARRAY = 1023
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dAPI/textures.html b/api-references/dagor-render/index/d3dAPI/textures.html new file mode 100644 index 000000000..707abf0cf --- /dev/null +++ b/api-references/dagor-render/index/d3dAPI/textures.html @@ -0,0 +1,1565 @@ + + + + + + + Textures — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Textures

+
+

Typedefs

+
+
+typedef BaseTexture Texture
+
+ +
+
+typedef BaseTexture CubeTexture
+
+ +
+
+typedef BaseTexture VolTexture
+
+ +
+
+typedef BaseTexture ArrayTexture
+
+ +
+
+typedef void (*on_tex_slice_loaded_cb_t)()
+

load texture content from DDSx stream using DDSx header for previously allocated texture

+
+ +
+
+

Enums

+
+
+enum class ChannelDType
+

Values:

+
+
+enumerator NONE
+
+ +
+
+enumerator UNORM
+
+ +
+
+enumerator SNORM
+
+ +
+
+enumerator UFLOAT
+
+ +
+
+enumerator SFLOAT
+
+ +
+
+enumerator UINT
+
+ +
+
+enumerator SINT
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator TEXLOCK_DISCARD
+
+ +
+
+enumerator TEXLOCK_RAWDATA
+
+ +
+
+enumerator TEXLOCK_NO_DIRTY_UPDATE
+
+ +
+
+enumerator TEXLOCK_NOSYSLOCK
+
+ +
+
+enumerator TEXLOCK_READ
+
+ +
+
+enumerator TEXLOCK_WRITE
+
+ +
+
+enumerator TEXLOCK_READWRITE
+
+ +
+
+enumerator TEXLOCK_RWMASK
+
+ +
+
+enumerator TEXLOCK_NOOVERWRITE
+
+ +
+
+enumerator TEXLOCK_DELSYSMEMCOPY
+
+ +
+
+enumerator TEXLOCK_SYSTEXLOCK
+
+ +
+
+enumerator TEXLOCK_UPDATEFROMSYSTEX
+
+ +
+
+enumerator TEXLOCK_DONOTUPDATEON9EXBYDEFAULT
+
+ +
+
+enumerator TEXLOCK_COPY_STAGING
+
+ +
+
+enumerator TEXLOCK_DEFAULT
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator TEXLF_CALCMIPMAPS
+
+ +
+ +
+
+enum [anonymous]
+

Values:

+
+
+enumerator CUBEFACE_POSX
+
+ +
+
+enumerator CUBEFACE_NEGX
+
+ +
+
+enumerator CUBEFACE_POSY
+
+ +
+
+enumerator CUBEFACE_NEGY
+
+ +
+
+enumerator CUBEFACE_POSZ
+
+ +
+
+enumerator CUBEFACE_NEGZ
+
+ +
+ +
+
+enum class TexLoadRes
+

Values:

+
+
+enumerator ERR
+
+ +
+
+enumerator OK
+
+ +
+
+enumerator ERR_RUB
+
+ +
+ +
+
+

Functions

+
+
+bool is_alpha_texformat(unsigned flags)
+
+ +
+
+bool is_bc_texformat(unsigned flags)
+
+ +
+
+uint32_t auto_mip_levels_count(uint32_t w, uint32_t min_size)
+
+ +
+
+uint32_t auto_mip_levels_count(uint32_t w, uint32_t h, uint32_t min_size)
+
+ +
+
+uint32_t auto_mip_levels_count(uint32_t w, uint32_t h, uint32_t d, uint32_t min_size)
+
+ +
+
+void apply_gen_tex_props(BaseTexture *t, const struct TextureMetaData &tmd, bool force_addr_from_tmd = true)
+
+ +
+
+uint32_t parse_tex_format(const char *name, uint32_t default_fmt)
+
+ +
+
+const TextureFormatDesc &get_tex_format_desc(uint32_t fmt)
+
+ +
+
+const char *get_tex_format_name(uint32_t fmt)
+
+ +
+
+uint32_t get_tex_channel_value(const void *pixel, const TextureChannelFormatDesc &channel)
+

Extracts a the bits from a pixel at memory location pixel that correspond to a particular channel in the specified format.

+
+

Note

+

Bits unused by the channel are set to 0, even for signed formats

+
+
+

Warning

+

This is extremely slow!

+
+
+
Parameters:
+
    +
  • pixel – Memory location of the pixel

  • +
  • channel – Description of the channel’s format

  • +
+
+
Returns:
+

A uint32_t whose lowest bits contain the bits of the channel

+
+
+
+ +
+
+void set_tex_channel_value(void *pixel, const TextureChannelFormatDesc &channel, uint32_t bits)
+

Sets the bits for a pixel at memory location pixel that correspond to a particular channel in the specified format.

+
+

Warning

+

This is extremely slow!

+
+
+
Parameters:
+
    +
  • pixel – Memory location of the pixel

  • +
  • channel – Description of the channel’s format

  • +
  • bits – The bits to assign to the channel (only the lowest bits are used)

  • +
+
+
+
+ +
+
+float channel_bits_to_float(uint32_t bits, ChannelDType type, const TextureChannelFormatDesc &channel)
+

Converts raw bits of a channel in a certain format into a floating point value that matches the logical value of the channel as closely as possible.

+
+

Note

+

Conversion is done as per section 3.9 of Vulkan API specification

+
+
+

Warning

+

This is extremely slow!

+
+
+
Parameters:
+
    +
  • bits – The bits of the channel

  • +
  • type – The type of the value stored in the channel

  • +
  • channel – The description of the channel’s format

  • +
+
+
Returns:
+

A float that matches the logical value of the channel

+
+
+
+ +
+
+uint32_t float_to_channel_bits(float value, ChannelDType type, const TextureChannelFormatDesc &channel)
+

Converts a float into raw bits of a channel in a certain format that match the provided float as closely as possible.

+
+

Note

+

Conversion is done as per section 3.9 of Vulkan API specification

+
+
+

Note

+

Bits unused by the channel are set to 0, even for signed formats

+
+
+

Warning

+

This is extremely slow!

+
+
+
Parameters:
+
    +
  • value – The floating point value to convert

  • +
  • type – The type of the value stored in the channel

  • +
  • channel – The description of the channel’s format

  • +
+
+
Returns:
+

A uint32_t that contains the bits of the channel

+
+
+
+ +
+
+inline TexLoadRes d3d_load_ddsx_tex_contents(BaseTexture *tex, TEXTUREID tid, TEXTUREID paired_tid, const ddsx::Header &hdr, IGenLoad &crd, int q_id, int start_lev = 0, unsigned tex_ld_lev = 0, on_tex_slice_loaded_cb_t on_tex_slice_loaded_cb = nullptr)
+
+ +
+
+bool convert_image_line(const void *input, int width, int in_channels, int in_bits_per_channel, bool in_float, void *output, int out_channels, int out_bits_per_channel, bool out_float, bool swap_rb)
+
+ +
+
+

Variables

+
+
+TexLoadRes (*d3d_load_ddsx_tex_contents_impl)(BaseTexture *tex, TEXTUREID tid, TEXTUREID paired_tid, const ddsx::Header &hdr, IGenLoad &crd, int q_id, int start_lev, unsigned tex_ld_lev, on_tex_slice_loaded_cb_t)
+
+ +
+
+TexLoadRes (*d3d_load_ddsx_to_slice)(BaseTexture *tex, int slice, const ddsx::Header &hdr, IGenLoad &crd, int q_id, int start_lev, unsigned tex_ld_lev)
+

load texture content from DDSx stream using DDSx header to specified slice of previously allocated array texture

+
+ +
+
+
+struct TextureChannelFormatDesc
+
+

Public Members

+
+
+int8_t bits
+
+ +
+
+int8_t offset
+
+ +
+
+bool isFloatPoint
+
+ +
+
+bool isSigned
+
+ +
+
+bool isNormalized
+
+ +
+
+ +
+
+struct TextureFormatDesc
+
+

Public Functions

+
+
+inline bool hasAlpha() const
+
+ +
+
+inline bool isDepth() const
+
+ +
+
+inline int rgbaChannelsCount() const
+
+ +
+
+inline int channelsCount() const
+
+ +
+
+

Public Members

+
+
+uint32_t dagorTextureFormat
+
+ +
+
+uint16_t bytesPerElement
+
+ +
+
+bool isBlockFormat
+
+ +
+
+uint8_t elementWidth
+
+ +
+
+uint8_t elementHeight
+
+ +
+
+ChannelDType mainChannelsType
+
+ +
+
+ChannelDType stencilChannelType
+
+ +
+
+TextureChannelFormatDesc r
+
+ +
+
+TextureChannelFormatDesc g
+
+ +
+
+TextureChannelFormatDesc b
+
+ +
+
+TextureChannelFormatDesc a
+
+ +
+
+TextureChannelFormatDesc depth
+
+ +
+
+TextureChannelFormatDesc stencil
+
+ +
+
+ +
+
+struct TextureInfo
+
+

Public Members

+
+
+unsigned short w = 1
+

width, height, depth (for VOLTEX), array slices (slice count for ARRTEX or 6 for CUBETEX)

+
+ +
+
+unsigned short h = 1
+
+ +
+
+unsigned short d = 1
+
+ +
+
+unsigned short a = 1
+
+ +
+
+unsigned short mipLevels = 0
+

all mips and res type

+
+ +
+
+unsigned short resType = 0
+
+ +
+
+unsigned cflg = 0
+

texture creation flags

+
+ +
+
+ +
+
+class BaseTexture : public D3dResource
+
+

Public Functions

+
+
+inline virtual bool setReloadCallback(IReloadData*)
+
+ +
+
+virtual int generateMips() = 0
+
+ +
+
+virtual int update(BaseTexture *src) = 0
+
+ +
+
+inline int calcSubResIdx(int level, int slice = 0) const
+
+ +
+
+virtual int updateSubRegion(BaseTexture *src, int src_subres_idx, int src_x, int src_y, int src_z, int src_w, int src_h, int src_d, int dest_subres_idx, int dest_x, int dest_y, int dest_z) = 0
+
+ +
+
+inline virtual int updateSubRegionNoOrder(BaseTexture *src, int src_subres_idx, int src_x, int src_y, int src_z, int src_w, int src_h, int src_d, int dest_subres_idx, int dest_x, int dest_y, int dest_z)
+
+ +
+
+virtual int level_count() const = 0
+
+ +
+
+inline int texaddr(int addrmode)
+
+ +
+
+inline int texaddru(int addrmode)
+
+ +
+
+inline int texaddrv(int addrmode)
+
+ +
+
+inline int texaddrw(int addrmode)
+
+ +
+
+inline int texbordercolor(E3DCOLOR color)
+
+ +
+
+inline int texfilter(int filtermode)
+
+ +
+
+inline int texmipmap(int mipmapmode)
+
+ +
+
+inline int texlod(float mipmaplod)
+
+ +
+
+inline int setAnisotropy(int level)
+
+ +
+
+inline void disableSampler()
+
+ +
+
+inline bool isSamplerEnabled()
+
+ +
+
+virtual int texmiplevel(int minlevel, int maxlevel) = 0
+
+ +
+
+inline virtual bool isCubeArray() const
+
+ +
+
+inline virtual void setReadStencil(bool)
+
+ +
+
+inline virtual void setTID(TEXTUREID)
+
+ +
+
+inline virtual TEXTUREID getTID() const
+
+ +
+
+inline const char *getTexName() const
+
+ +
+
+inline virtual void setResApiName(const char*) const
+
+ +
+
+virtual int lockimg(void**, int &stride_bytes, int level, unsigned flags) = 0
+
+ +
+
+virtual int lockimg(void**, int &stride_bytes, int layer, int level, unsigned flags) = 0
+
+ +
+
+inline virtual int unlockimg()
+
+ +
+
+inline int unlock()
+
+ +
+
+inline virtual int lockbox(void**, int&, int&, int, unsigned)
+
+ +
+
+inline virtual int unlockbox()
+
+ +
+
+virtual int getinfo(TextureInfo &info, int level = 0) const = 0
+
+ +
+
+template<typename T>
inline int lockimgEx(T **p, int &stride_bytes, int level = 0, unsigned flags = TEXLOCK_DEFAULT)
+
+ +
+
+inline virtual BaseTexture *makeTmpTexResCopy(int, int, int, int, bool = false)
+

created temporary BaseTexture with texture res object with given dimensions (texture format and texture subtype is used from original)

+
+ +
+
+inline virtual void replaceTexResObject(BaseTexture *&new_tex)
+

replaces texture res object with new one of new_tex and then destroys new_tex (destruction may be delayed by driver)

+
+ +
+
+inline virtual bool allocateTex()
+

forces allocation of texture resource; return true if tex allocated and ready for use

+
+ +
+
+inline virtual void discardTex()
+

discards texture and returns it to STUB state

+
+ +
+
+inline virtual bool downSize(int width, int height, int depth, int mips, unsigned start_src_level, unsigned level_offset)
+
+ +
+
+inline virtual bool upSize(int width, int height, int depth, int mips, unsigned start_src_level, unsigned level_offset)
+
+ +
+
+BaseTexture() = default
+
+ +
+
+BaseTexture(BaseTexture&&) = default
+
+ +
+
+BaseTexture &operator=(BaseTexture&&) = default
+
+ +
+
+

Public Static Functions

+
+
+static inline int calcSubResIdx(int level, int slice, int mip_levels)
+
+ +
+
+

Protected Functions

+
+
+inline ~BaseTexture() override
+
+ +
+
+virtual int texaddrImpl(int addrmode) = 0
+
+ +
+
+virtual int texaddruImpl(int addrmode) = 0
+
+ +
+
+virtual int texaddrvImpl(int addrmode) = 0
+
+ +
+
+inline virtual int texaddrwImpl(int)
+
+ +
+
+virtual int texbordercolorImpl(E3DCOLOR) = 0
+
+ +
+
+virtual int texfilterImpl(int filtermode) = 0
+
+ +
+
+virtual int texmipmapImpl(int mipmapmode) = 0
+
+ +
+
+virtual int texlodImpl(float mipmaplod) = 0
+
+ +
+
+virtual int setAnisotropyImpl(int level) = 0
+
+ +
+
+

Protected Attributes

+
+
+bool samplerEnabled = true
+
+ +
+
+

Protected Static Attributes

+
+
+static constexpr int TEX_COPIED = 1 << 30
+
+ +
+
+
+struct IReloadData
+
+

Public Functions

+
+
+inline virtual ~IReloadData()
+
+ +
+
+virtual void reloadD3dRes(BaseTexture *t) = 0
+
+ +
+
+virtual void destroySelf() = 0
+
+ +
+
+ +
+ +
+
+namespace ddsx
+
+ +
+
+namespace d3d
+
+

Functions

+
+
+bool check_texformat(int cflg)
+

Check whether the specified texture format is available.

+
+
Parameters:
+

cflg – The texture format to check.

+
+
Returns:
+

Returns false if a texture of the specified format cannot be created, otherwise returns true.

+
+
+
+ +
+
+int get_max_sample_count(int cflg)
+

Get the maximum sample count for the given texture format.

+
+
Parameters:
+

cflg – The texture format.

+
+
Returns:
+

The maximum sample count for the given texture format.

+
+
+
+ +
+
+unsigned get_texformat_usage(int cflg, int restype = RES3D_TEX)
+

Get the texture format usage for the given texture format.

+

+
+Todo:
+

Use enum class as a returned type.

+
+ +

+
+
Parameters:
+
    +
  • cflg – The texture format.

  • +
  • restype – The resource type (default value is RES3D_TEX).

  • +
+
+
Returns:
+

The texture format usage. One of the USAGE_XXX flags.

+
+
+
+ +
+
+bool issame_texformat(int cflg1, int cflg2)
+

Check whether two texture creation flags result in the same format.

+
+
Parameters:
+
    +
  • cflg1 – The first texture creation flag.

  • +
  • cflg2 – The second texture creation flag.

  • +
+
+
Returns:
+

Returns true if the two texture creation flags result in the same format, otherwise returns false.

+
+
+
+ +
+
+bool check_cubetexformat(int cflg)
+

Check whether the specified cube texture format is available.

+
+
Parameters:
+

cflg – The cube texture format to check.

+
+
Returns:
+

Returns false if a cube texture of the specified format cannot be created, otherwise returns true.

+
+
+
+ +
+
+bool check_voltexformat(int cflg)
+

Check whether the specified volume texture format is available.

+
+
Parameters:
+

cflg – The volume texture format to check.

+
+
Returns:
+

Returns false if a volume texture of the specified format cannot be created, otherwise returns true.

+
+
+
+ +
+
+BaseTexture *create_tex(TexImage32 *img, int w, int h, int flg, int levels, const char *stat_name = nullptr)
+

Create a texture.

+
+
Parameters:
+
    +
  • img – 32-bit image data. nullptr if there are no image data.

  • +
  • w – The width of the texture.

  • +
  • h – The height of the texture.

  • +
  • flg – The texture creation flags.

  • +
  • levels – The maximum number of mipmap levels.

  • +
  • stat_name – The name of the texture for statistics purposes (optional).

  • +
+
+
Returns:
+

A pointer to the created texture, or nullptr on error.

+
+
+
+ +
+
+BaseTexture *create_ddsx_tex(IGenLoad &crd, int flg, int quality_id, int levels = 0, const char *stat_name = nullptr)
+

Create a texture from a DDSx stream.

+
+
Parameters:
+
    +
  • crd – The DDSx stream.

  • +
  • flg – The texture creation flags.

  • +
  • quality_id – The quality index.

  • +
  • levels – The number of loaded mipmaps (0=all, >0=only first ‘levels’ mipmaps).

  • +
  • stat_name – The name of the texture for statistics purposes (optional).

  • +
+
+
Returns:
+

A pointer to the created texture, or nullptr on error.

+
+
+
+ +
+
+BaseTexture *alloc_ddsx_tex(const ddsx::Header &hdr, int flg, int quality_id, int levels = 0, const char *stat_name = nullptr, int stub_tex_idx = -1)
+

Allocate a texture object using a DDSx header (not texture contents loaded at this time).

+
+
Parameters:
+
    +
  • hdr – The DDSx header.

  • +
  • flg – The texture creation flags.

  • +
  • quality_id – The quality index.

  • +
  • levels – The maximum number of mipmap levels.

  • +
  • stat_name – The name of the texture for statistics purposes (optional).

  • +
  • stub_tex_idx – The index of the stub texture (default value is -1).

  • +
+
+
Returns:
+

A pointer to the allocated texture, or nullptr on error.

+
+
+
+ +
+
+inline TexLoadRes load_ddsx_tex_contents(BaseTexture *t, const ddsx::Header &hdr, IGenLoad &crd, int q_id)
+

Load the texture content from a DDSx stream using a DDSx header for a previously allocated texture.

+
+
Parameters:
+
    +
  • t – The previously allocated texture.

  • +
  • hdr – The DDSx header.

  • +
  • crd – The DDSx stream.

  • +
  • q_id – The quality index.

  • +
+
+
Returns:
+

Returns true if the texture content was successfully loaded, otherwise returns false.

+
+
+
+ +
+
+BaseTexture *create_cubetex(int size, int flg, int levels, const char *stat_name = nullptr)
+

Create a cubic texture.

+
+
Parameters:
+
    +
  • size – The size of the texture. (6 faces size x size)

  • +
  • flg – The texture creation flags.

  • +
  • levels – The maximum number of mipmap levels.

  • +
  • stat_name – The name of the texture for statistics purposes (optional).

  • +
+
+
Returns:
+

A pointer to the created texture, or nullptr on error.

+
+
+
+ +
+
+BaseTexture *create_voltex(int w, int h, int d, int flg, int levels, const char *stat_name = nullptr)
+

Create a volume texture.

+
+
Parameters:
+
    +
  • w – The width of the texture.

  • +
  • h – The height of the texture.

  • +
  • d – The depth of the texture.

  • +
  • flg – The texture creation flags.

  • +
  • levels – The maximum number of mipmap levels.

  • +
  • stat_name – The name of the texture for statistics purposes (optional).

  • +
+
+
Returns:
+

A pointer to the created texture, or nullptr on error.

+
+
+
+ +
+
+BaseTexture *create_array_tex(int w, int h, int d, int flg, int levels, const char *stat_name)
+

Create a texture2d array.

+
+
Parameters:
+
    +
  • w – The width of the texture.

  • +
  • h – The height of the texture.

  • +
  • d – Amount of textures in the array.

  • +
  • flg – The texture creation flags.

  • +
  • levels – The maximum number of mipmap levels.

  • +
  • stat_name – The name of the texture for statistics purposes.

  • +
+
+
Returns:
+

A pointer to the created texture, or nullptr on error.

+
+
+
+ +
+
+BaseTexture *create_cube_array_tex(int side, int d, int flg, int levels, const char *stat_name)
+

Create a cube array tex object.

+
+
Parameters:
+
    +
  • side – The size of the texture. (6 faces size x size)

  • +
  • d – Amount of textures in the array.

  • +
  • flg – The texture creation flags.

  • +
  • levels – The maximum number of mipmap levels.

  • +
  • stat_name – The name of the texture for statistics purposes.

  • +
+
+
Returns:
+

A pointer to the created texture, or nullptr on error.

+
+
+
+ +
+
+BaseTexture *alias_tex(BaseTexture *baseTexture, TexImage32 *img, int w, int h, int flg, int levels, const char *stat_name = nullptr)
+

Create a texture alias, a texture using the same memory as another texture but with a different format.

+
+
Parameters:
+
    +
  • baseTexture – The base texture to alias.

  • +
  • img – 32-bit image data.

  • +
  • w – The width of the texture.

  • +
  • h – The height of the texture.

  • +
  • flg – The texture creation flags.

  • +
  • levels – The maximum number of mipmap levels.

  • +
  • stat_name – The name of the texture for statistics purposes (optional).

  • +
+
+
Returns:
+

A pointer to the created texture alias, or nullptr on error.

+
+
+
+ +
+
+BaseTexture *alias_cubetex(BaseTexture *baseTexture, int size, int flg, int levels, const char *stat_name = nullptr)
+

Create a cube texture alias, a texture using the same memory as another cube texture but with a different format.

+
+
Parameters:
+
    +
  • baseTexture – The base cube texture to alias.

  • +
  • size – The size of the texture.

  • +
  • flg – The texture creation flags.

  • +
  • levels – The maximum number of mipmap levels.

  • +
  • stat_name – The name of the texture for statistics purposes (optional).

  • +
+
+
Returns:
+

A pointer to the created cube texture alias, or nullptr on error.

+
+
+
+ +
+
+BaseTexture *alias_voltex(BaseTexture *baseTexture, int w, int h, int d, int flg, int levels, const char *stat_name = nullptr)
+

Create a volume texture alias, a texture using the same memory as another volume texture but with a different format.

+
+
Parameters:
+
    +
  • baseTexture – The base volume texture to alias.

  • +
  • w – The width of the texture.

  • +
  • h – The height of the texture.

  • +
  • d – The depth of the texture.

  • +
  • flg – The texture creation flags.

  • +
  • levels – The maximum number of mipmap levels.

  • +
  • stat_name – The name of the texture for statistics purposes (optional).

  • +
+
+
Returns:
+

A pointer to the created volume texture alias, or nullptr on error.

+
+
+
+ +
+
+BaseTexture *alias_array_tex(BaseTexture *baseTexture, int w, int h, int d, int flg, int levels, const char *stat_name)
+

Create a texture2d array alias, a texture using the same memory as another texture2d array but with a different format.

+
+
Parameters:
+
    +
  • baseTexture – The base texture2d array to alias.

  • +
  • w – The width of the texture.

  • +
  • h – The height of the texture.

  • +
  • d – Amount of textures in the array.

  • +
  • flg – The texture creation flags.

  • +
  • levels – The maximum number of mipmap levels.

  • +
  • stat_name – The name of the texture for statistics purposes (optional).

  • +
+
+
Returns:
+

A pointer to the created texture2d array alias, or nullptr on error.

+
+
+
+ +
+
+BaseTexture *alias_cube_array_tex(BaseTexture *baseTexture, int side, int d, int flg, int levels, const char *stat_name)
+

Create a cube array texture alias, a texture using the same memory as another cube array texture but with a different format.

+
+
Parameters:
+
    +
  • baseTexture – The base cube array texture to alias.

  • +
  • side – The side of the cube texture.

  • +
  • d – Amount of textures in the array.

  • +
  • flg – The texture creation flags.

  • +
  • levels – The maximum number of mipmap levels.

  • +
  • stat_name – The name of the texture for statistics purposes (optional).

  • +
+
+
Returns:
+

A pointer to the created cube array texture alias, or nullptr on error.

+
+
+
+ +
+
+bool stretch_rect(BaseTexture *src, BaseTexture *dst, RectInt *rsrc = nullptr, RectInt *rdst = nullptr)
+

Stretch a rectangle from the source texture to the destination texture.

+

Under the hood it is a call of CopySubresourceRegion if source and destination textures are the same type and their texel could be mapped one to one. Otherwise it is an execution of a shader that does the stretching.

+
+
Parameters:
+
    +
  • src – The source texture.

  • +
  • dst – The destination texture.

  • +
  • rsrc – The source rectangle (optional).

  • +
  • rdst – The destination rectangle (optional).

  • +
+
+
Returns:
+

Returns true if the stretch operation was successful, otherwise returns false.

+
+
+
+ +
+
+void get_texture_statistics(uint32_t *num_textures, uint64_t *total_mem, String *out_dump)
+

Get the texture statistics.

+
+
Parameters:
+
    +
  • num_textures – Pointer to store the number of textures.

  • +
  • total_mem – Pointer to store the total memory used by textures.

  • +
  • out_dump – Pointer to store the texture statistics dump.

  • +
+
+
+
+ +
+
+bool set_tex(unsigned shader_stage, unsigned slot, BaseTexture *tex, bool use_sampler = true)
+

Set a texture for a shader stage and slot.

+
+
Parameters:
+
    +
  • shader_stage – The shader stage. One of the STAGE_XXX flags.

  • +
  • slot – The slot.

  • +
  • tex – The texture to set.

  • +
  • use_sampler – Whether to use the sampler (default value is true).

  • +
+
+
Returns:
+

Returns true if the texture was successfully set, otherwise returns false.

+
+
+
+ +
+
+inline bool settex(int slot, BaseTexture *tex)
+

Set a texture for a pixel shader slot.

+
+
Parameters:
+
    +
  • slot – The slot.

  • +
  • tex – The texture to set.

  • +
+
+
Returns:
+

Returns true if the texture was successfully set, otherwise returns false.

+
+
+
+ +
+
+inline bool settex_vs(int slot, BaseTexture *tex)
+

Set a texture for a vertex shader slot.

+
+
Parameters:
+
    +
  • slot – The slot.

  • +
  • tex – The texture to set.

  • +
+
+
Returns:
+

Returns true if the texture was successfully set, otherwise returns false.

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dHelpers.html b/api-references/dagor-render/index/d3dHelpers.html new file mode 100644 index 000000000..c44526fb0 --- /dev/null +++ b/api-references/dagor-render/index/d3dHelpers.html @@ -0,0 +1,185 @@ + + + + + + + Helper classes for D3D API — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Helper classes for D3D API

+

These classes are not part of core D3D API, but they simplifies common usages of D3D API.

+
+

Contents:

+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/d3dHelpers/multidrawContext.html b/api-references/dagor-render/index/d3dHelpers/multidrawContext.html new file mode 100644 index 000000000..7cad78eeb --- /dev/null +++ b/api-references/dagor-render/index/d3dHelpers/multidrawContext.html @@ -0,0 +1,392 @@ + + + + + + + MultidrawContext — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

MultidrawContext

+
+

Defines

+
+
+USE_STAGING_MULTIDRAW_BUF
+
+ +
+
+
+template<typename PerDrawDataT>
class MultidrawContext
+

Multidraw Context

+

This class incapsulates logic of filling multidraw buffers. It implements draw call id/per draw parameters passing for different platforms and manages buffers required for it.

+
+

Public Functions

+
+
+inline MultidrawContext(const char *name)
+

Default constructor.

+
+
Parameters:
+

name – must be unique for each context.

+
+
+
+ +
+
+MultidrawContext(MultidrawContext&&) = default
+

Default move constructor.

+
+ +
+
+MultidrawContext &operator=(MultidrawContext&&) = default
+

Default move assignment operator.

+
+ +
+
+MultidrawContext(MultidrawContext&) = delete
+

Removed copy constructor since we use unique buffer holders.

+
+ +
+
+MultidrawContext &operator=(MultidrawContext&) = delete
+

Removed copy assignment operator since we use unique buffer holders.

+
+ +
+
+template<typename T>
inline MultidrawRenderExecutor fillBuffers(uint32_t drawcalls_count, const T &set_cb)
+

Fills multidraw buffers.

+

+This method iterates over locked buffers content and calls params_setter for each draw call to fill only allowed parameters of drawcall. If the buffers are too small, it recreates them.

+
+
Parameters:
+
    +
  • drawcalls_count – number of draw calls.

  • +
  • set_cb – function that sets draw call parameters.

  • +
+
+
Returns:
+

executor that could be used to render draw calls.

+
+
+
+ +
+
+inline void close()
+

Closes buffers.

+
+ +
+
+

Private Functions

+
+
+inline eastl::string getPerDrawArgsBufferName() const
+

Returns name for per draw parameters buffer.

+
+ +
+
+

Private Members

+
+
+eastl::string name
+

Name for context that is used as a buffer name and as a prefix for helper buffers.

+
+ +
+
+RingDynamicSB multidrawArguments
+

Buffer for draw calls arguments.

+
+ +
+
+UniqueBufHolder perDrawArgsBuffer
+

Buffer for per draw parameters.

+
+ +
+
+uint32_t allocatedDrawcallsInBuffer = 0
+

Number of draw calls that can be stored in buffer.

+
+ +
+
+uint32_t actualStart = 0
+

Offset in buffer for next draw call.

+
+ +
+
+

Private Static Functions

+
+
+static inline constexpr bool needPerDrawParamsBuffer()
+

Checks if per draw parameter could be stored instead of draw id. In this case we don’t need per draw parameters buffer.

+
+ +
+
+
+class MultidrawRenderExecutor
+

Executor for multidraw calls.

+

This class is used to pass multidraw buffers to a draw call. It could be constructed only by MultidrawContext. It is used to hide multidraw buffers from a user.

+
+

Public Functions

+
+
+inline MultidrawRenderExecutor(const MultidrawContext *context)
+

Constructor.

+
+
Parameters:
+

context – reference to a context that is used for rendering. If context is a nullptr, render method does nothing.

+
+
+
+ +
+
+inline void render(uint32_t primitive_type, uint32_t first_drawcall, uint32_t drawcalls_count) const
+

Renders draw calls.

+

+This method renders draw calls using multidraw indirect buffers.

+
+
Parameters:
+
    +
  • primitive_type – type of primitive.

  • +
  • first_drawcall – index of first draw call in the buffer.

  • +
  • drawcalls_count – number of draw calls to execute.

  • +
+
+
+
+ +
+
+

Private Functions

+
+
+MultidrawRenderExecutor() = delete
+

Default constructors and operator= are deleted.

+
+ +
+
+MultidrawRenderExecutor(MultidrawRenderExecutor&&) = delete
+
+ +
+
+MultidrawRenderExecutor &operator=(MultidrawRenderExecutor&&) = delete
+
+ +
+
+MultidrawRenderExecutor(MultidrawRenderExecutor&) = delete
+
+ +
+
+MultidrawRenderExecutor &operator=(MultidrawRenderExecutor&) = delete
+
+ +
+
+

Private Members

+
+
+const MultidrawContext *context
+

Pointer to a context that is used for rendering.

+
+ +
+
+

Friends

+
+
+friend class MultidrawContext
+
+ +
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/daBFG.html b/api-references/dagor-render/index/daBFG.html new file mode 100644 index 000000000..81271417a --- /dev/null +++ b/api-references/dagor-render/index/daBFG.html @@ -0,0 +1,223 @@ + + + + + + + daBFG API — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

daBFG API

+
+
daBFG is a library for constructing and executing a frame graph, a computational graph for specifying a rendering pipeline of an real time application. It supports many fun features, such as:
    +
  • Homogenous management of many types of resources: transient and temporal, CPU data, GPU textures and buffers, external resources like system backbuffers

  • +
  • Memory aliasing for all internally managed resources (even temporal ones!)

  • +
  • Automatic barriers

  • +
  • Global state management: (fake) render passes, bindings, VRS and more!

  • +
  • Multiplexing support: want to run your graph multiple times for VR? No problem! It just works (as long as you annotate node multiplexing modes correctly and don’t do any global state crimes)

  • +
  • More to come soon!

  • +
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/daBFG/bfg_ecs.html b/api-references/dagor-render/index/daBFG/bfg_ecs.html new file mode 100644 index 000000000..92d38ea6b --- /dev/null +++ b/api-references/dagor-render/index/daBFG/bfg_ecs.html @@ -0,0 +1,367 @@ + + + + + + + Bfg in das+ecs — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Bfg in das+ecs

+

Nodes can be stored in ecs singleton and in this case there is special function annotation bfg_ecs_node for hot reloading.

+

Function should take NodeHandle or NodeHandleVector as first argument and set up it.

+

Another arguments of function can be any other components of singleton entity and will be passed to es macro as is.

+

Possible arguments for bfg_ecs_node annotation itself:

+
    +
  • on_appear - call function on appear of entity.

  • +
  • on_event=EventName - call function on event.

  • +
  • track=component_name - call function on change of component.

  • +
+

Example:

+
require daBfg.bfg_ecs
+
+[bfg_ecs_node(on_appear)]
+def register_some_node(var some_node : NodeHandle&)
+  some_node <- root() |> registerNode("some_node") <| @(var registry : Registry)
+
+    // Node requests, for example:
+    registry |> requestRenderPass |> color([[auto[] "some_tex"]])
+
+    return <- @ <|
+
+      // Render code, for example:
+      query() <| $ [es] (some_shader : PostFxRenderer)
+        some_shader |> render()
+
+
+
+

Function annotations

+
+
+bfg_ecs_node
+
+ +

|function_annotation-bfg_ecs-bfg_ecs_node|

+
+
+

Classes

+
+
+BfgEcsNodeAnnotation : AstFunctionAnnotation
+
+ +

|class-bfg_ecs-BfgEcsNodeAnnotation|

+
+
+BfgEcsNodeAnnotation.apply(self: AstFunctionAnnotation; func: FunctionPtr; group: ModuleGroup; args: AnnotationArgumentList const; errors: das_string)
+
+ +

apply returns bool

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

ast::AstFunctionAnnotation

func

FunctionPtr

group

rtti::ModuleGroup

args

rtti::AnnotationArgumentList const

errors

builtin::das_string

+

|method-bfg_ecs-BfgEcsNodeAnnotation.apply|

+
+
+BfgEcsNodeAnnotation.declareReloadCallback(self: BfgEcsNodeAnnotation; func: FunctionPtr; parsed: BfgEcsNodeAnnotationArgs const; args: AnnotationArgumentList const)
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

bfg_ecs::BfgEcsNodeAnnotation

func

FunctionPtr

parsed

bfg_ecs::BfgEcsNodeAnnotationArgs const

args

rtti::AnnotationArgumentList const

+

|method-bfg_ecs-BfgEcsNodeAnnotation.declareReloadCallback|

+
+
+BfgEcsNodeAnnotation.declareES(self: BfgEcsNodeAnnotation; func: FunctionPtr; parsed: BfgEcsNodeAnnotationArgs const; args: AnnotationArgumentList const)
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

bfg_ecs::BfgEcsNodeAnnotation

func

FunctionPtr

parsed

bfg_ecs::BfgEcsNodeAnnotationArgs const

args

rtti::AnnotationArgumentList const

+

|method-bfg_ecs-BfgEcsNodeAnnotation.declareES|

+
+
+BfgEcsNodeAnnotation.parseArgs(self: BfgEcsNodeAnnotation; func: FunctionPtr; args: AnnotationArgumentList const; errors: das_string)
+
+ +

parseArgs returns bfg_ecs::BfgEcsNodeAnnotationArgs

+ + + + + + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

bfg_ecs::BfgEcsNodeAnnotation

func

FunctionPtr

args

rtti::AnnotationArgumentList const

errors

builtin::das_string

+

|method-bfg_ecs-BfgEcsNodeAnnotation.parseArgs|

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/daBFG/core.html b/api-references/dagor-render/index/daBFG/core.html new file mode 100644 index 000000000..faadd178f --- /dev/null +++ b/api-references/dagor-render/index/daBFG/core.html @@ -0,0 +1,494 @@ + + + + + + + Core Functions — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Core Functions

+

The library exposes several global functions for controlling the global +graph state encapsulated inside the library, listed below. The graph +is always singular and global by design. This allows for the most +effective optimization of memory and other resources due to all +information being visible and available to the backend.

+

However, for separating different logical parts of the global graph, +e.g. for different viewports (editor and game preview) all daBfg entities +(nodes, resources, automatic resolutions, etc) are namespaced. A node +might have the name “/foo/bar/node”, but you never actually use this +name to refer to a node, as we don’t want to be parsing strings. +Instead, wrapper objects describing a particular namespace are used.

+

Hence, the code that wants to register various objects inside the graph, +like nodes and resolutions, must use the dabfg::NameSpace +class to do so, although aliases for calling methods of this class on +the global namespace dabfg::root() are available.

+
+
+group DabfgCore
+

Core dabfg functions that everything else is accessed through.

+
+

Defines

+
+
+DABFG_PP_NODE_SRC
+

A macro that expands to the current source location. Should always be provided to dabfg::register_node as the source_location parameter.

+
+ +
+
+

Functions

+
+
+NameSpace root()
+

Creates a namespace object for the root frame graph namespace.

+
+
Returns:
+

The object representing the root namespace.

+
+
+
+ +
+
+void set_multiplexing_extents(multiplexing::Extents extents)
+

Sets the multiplexing extents for the following frames.

+

May safely be called every frame, only triggers a recompilation when the values actually change

+
+ +
+
+bool run_nodes()
+

Executes the frame graph, possibly recompiling it.

+

Return false if run is not possible (d3d device was lost for example)

+
+ +
+
+void startup()
+

Initializes the daBfg backend.

+
+ +
+
+void shutdown()
+

Frees resources held by the daBfg backend.

+
+ +
+
+void invalidate_history()
+

Invalidates history.

+

When making changes to the graph history is generally preserved calling this function makes this preservation invalid and the history resources will be recreated.

+
+ +
+
+void update_external_state(ExternalState state)
+

Sets various global state that is external to daBfg.

+
+ +
+
+void mark_external_resource_for_validation(const D3dResource *resource)
+

Marks an external resource to be validated for illegal access within nodes. Note that daBfg-managed resources are always automatically validated for illegal access through sneaky global variables, but external are often used for gradual migration to FG, at which point they are indeed illegally accessed through global state and that is intended.

+
+
Parameters:
+

resource – The name of the resource to be validated.

+
+
+
+ +
+
+
+struct ExternalState
+

Describes various global state that can influence the execution of the frame graph but is not managed by daBfg.

+
+

Public Members

+
+
+bool wireframeModeEnabled = false
+

Enables wireframe debug mode for nodes that allow it.

+
+ +
+
+bool vrsEnabled = false
+

Enables variable rate shading for all nodes that allow it using the per-node settings specified inside VrsRequirements.

+
+ +
+
+ +
+
+class NameSpace
+

A type representing some namespace in the frame graph.

+
+

Public Functions

+
+
+NameSpace operator/(const char *child_name) const
+

Creates a namespace object for a sub-namespace of this one.

+
+
Parameters:
+

child_name – Name of the sub-namespace.

+
+
Returns:
+

An object representing the child namespace.

+
+
+
+ +
+
+template<class F>
inline NodeHandle registerNode(const char *name, const char *source_location, F &&declaration_callback) const
+

Either registers a new node inside the frame graph, or re-registers an already existing one.

+
+
Parameters:
+
    +
  • name – The name that uniquely identifies the node in the current name space. If the function is called twice with the same node name and name space, the second call will overwrite the node resulting from the previous one.

  • +
  • source_location – Should always be the DABFG_PP_NODE_SRC macro

  • +
  • declaration_callback – Should be a callback taking a Registry instance by value and returning an execution callback, which in turn may accept a dabfg::multiplexing::Index object (or may accept nothing). Basically, a function with signature Registry -> (Index -> ()). Note: the declaration and execution callbacks might be called an arbitrary number of times, but only while the resulting node is registered.

  • +
+
+
Returns:
+

A handle that represents the lifetime of the new node. The node will be unregistered when the handle is destroyed. Note that it is safe to call this function even without destroying all previous handles up to a couple hundred of times. The intended use case is doing classField = register_node(...) at arbitrary times, without passing these handles anywhere.

+
+
+
+ +
+
+template<class T>
void setResolution(const char *type_name, T value)
+

Updates an auto-resolution of a particular type. Note that this causes a complete resource rescheduling, invalidating all history. It also resets dynamic resolution.

+
+
Template Parameters:
+

T – point type, either IPoint2 or IPoint3.

+
+
Parameters:
+
    +
  • type_name – The name of the auto-res type, looked up in this namespace.

  • +
  • value – The new resolution value.

  • +
+
+
+
+ +
+
+template<class T>
void setDynamicResolution(const char *type_name, T value)
+

Updates an auto-resolution of a particular type without causing a resource rescheduling, hence preserving history.

+
+

Note

+

This is only available on platforms that support heaps.

+
+
+
Template Parameters:
+

P – &#8212; point type, either IPoint2 or IPoint3.

+
+
Parameters:
+
    +
  • type_name – The name of the auto-res type, looked up in this namespace.

  • +
  • value – The new dynamic resolution value. Must be smaller than the initial resolution for this type.

  • +
+
+
+
+ +
+
+void fillSlot(NamedSlot slot, NameSpace res_name_space, const char *res_name)
+

Sets a value to a named slot. Named slots are basically links that allow for an indirection when looking up a resource name. As an example, volumetric fog is an intrusive feature that requires a bunch of different rendering nodes to read some kind of a downsampled depth resource for tracing the fog, but this depth might be different depending on the current settings. In this situation, it makes sense to introduce a fog_depth slot and fill it in with different resources, allowing one to avoid settings-dependent ifs in node declarations.

+
+
Parameters:
+
    +
  • slot – Name of the slot, looked up in this namespace.

  • +
  • res_name_space – Name space to look up res_name in.

  • +
  • res_name – Name of the resource to fill this slot with, looked up in res_name_space.

  • +
+
+
+
+ +
+
+void updateExternallyConsumedResourceSet(eastl::span<const char*const> res_names)
+

Sets the set of resources which are considered to be somehow externally consumed and hence will never be optimized (pruned) out.

+
+
Parameters:
+

res_names – A list of resource names to assign, looked up in this namespace.

+
+
+
+ +
+
+inline void updateExternallyConsumedResourceSet(std::initializer_list<const char*> res_names)
+

Sets the set of resources which are considered to be somehow externally consumed and hence will never be optimized (pruned) out.

+
+
Parameters:
+

res_names – A list of resource names to assign, looked up in this namespace.

+
+
+
+ +
+
+void markResourceExternallyConsumed(const char *res_name)
+

Marks a single resource as being externally consumed. See dabfg::updateExternallyConsumedResourceSet(eastl::span<const char *const> res_names)

+
+
Parameters:
+

res_name – Name of the resource to mark, looked up in this namespace.

+
+
+
+ +
+
+void unmarkResourceExternallyConsumed(const char *res_name)
+

Unmarks a single resource as being externally consumed. See dabfg::updateExternallyConsumedResourceSet(eastl::span<const char *const> res_names)

+
+
Parameters:
+

res_name – Name of the resource to unmark, looked up in this namespace.

+
+
+
+ +
+
+ +
+ +
+
+group DabfgCoreAliases
+

Compatibility aliases for access to the root name space.

+
+

Functions

+
+
+template<class F>
NodeHandle register_node(const char *name, const char *source_location, F &&declaration_callback)
+

Alias for dabfg::root().registerNode, see NameSpace::registerNode.

+
+ +
+
+template<class T>
inline void set_resolution(const char *typeName, T value)
+

Alias for dabfg::root().setResolution, see NameSpace::setResolution.

+
+ +
+
+template<class T>
inline void set_dynamic_resolution(const char *typeName, T value)
+

Alias for dabfg::root().setDynamicResolution, see NameSpace::setDynamicResolution.

+
+ +
+
+inline void fill_slot(NamedSlot slot, const char *res_name)
+

Alias for dabfg::root().fillSlot(slot, dabfg::root(), res_name), see NameSpace::fillSlot.

+
+ +
+
+inline void update_externally_consumed_resource_set(eastl::span<const char*const> res_names)
+

Alias for dabfg::root().updateExternallyConsumedResourceSet, see NameSpace::updateExternallyConsumedResourceSet(eastl::span<const char *const> res_names)

+
+ +
+
+inline void update_externally_consumed_resource_set(std::initializer_list<const char*> res_names)
+
+ +
+
+inline void mark_resource_externally_consumed(const char *res_name)
+

Alias for dabfg::root().markResourceExternallyConsumed, see NameSpace::markResourceExternallyConsumed.

+
+ +
+
+inline void unmark_resource_externally_consumed(const char *res_name)
+

Alias for dabfg::root().unmarkResourceExternallyConsumed, see NameSpace::unmarkResourceExternallyConsumed.

+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/daBFG/daBfgCore.html b/api-references/dagor-render/index/daBFG/daBfgCore.html new file mode 100644 index 000000000..382648476 --- /dev/null +++ b/api-references/dagor-render/index/daBFG/daBfgCore.html @@ -0,0 +1,1145 @@ + + + + + + + DaBfgCore das module — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

DaBfgCore das module

+

daBfgCore module contains data structures +and bindings from das to cpp.

+
+

Type aliases

+
+
+BindingsMap = fixedVectorMap`int`Binding`8
+
+ +

|typedef-daBfgCore-BindingsMap|

+
+
+

Enumerations

+
+
+NameSpaceNameId
+
+ + + + + + + + +

Invalid

65535

+

|enumeration-daBfgCore-NameSpaceNameId|

+
+
+NodeNameId
+
+ + + + + + + + +

Invalid

65535

+

|enumeration-daBfgCore-NodeNameId|

+
+
+ResNameId
+
+ + + + + + + + +

Invalid

65535

+

|enumeration-daBfgCore-ResNameId|

+
+
+History
+
+ + + + + + + + + + + + + + + + +

No

0

ClearZeroOnFirstFrame

1

DiscardOnFirstFrame

2

+

|enumeration-daBfgCore-History|

+
+
+ResourceActivationAction
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

REWRITE_AS_COPY_DESTINATION

0

REWRITE_AS_UAV

1

REWRITE_AS_RTV_DSV

2

CLEAR_F_AS_UAV

3

CLEAR_I_AS_UAV

4

CLEAR_AS_RTV_DSV

5

DISCARD_AS_UAV

6

DISCARD_AS_RTV_DSV

7

+

|enumeration-daBfgCore-ResourceActivationAction|

+
+
+MultiplexingMode
+
+ + + + + + + + + + + + + + + + + + + + + + + + +

None

0

SuperSampling

1

SubSampling

2

Viewport

4

FullMultiplex

7

+

|enumeration-daBfgCore-MultiplexingMode|

+
+
+SideEffect
+
+ + + + + + + + + + + + + + + + +

None

0

Internal

1

External

2

+

|enumeration-daBfgCore-SideEffect|

+
+
+Access
+
+ + + + + + + + + + + + + + + + +

UNKNOWN

0

READ_ONLY

1

READ_WRITE

2

+

|enumeration-daBfgCore-Access|

+
+
+Usage
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

UNKNOWN

0

COLOR_ATTACHMENT

1

INPUT_ATTACHMENT

2

DEPTH_ATTACHMENT

3

DEPTH_ATTACHMENT_AND_SHADER_RESOURCE

4

RESOLVE_ATTACHMENT

5

SHADER_RESOURCE

6

CONSTANT_BUFFER

7

INDEX_BUFFER

8

VERTEX_BUFFER

9

COPY

10

BLIT

11

INDIRECTION_BUFFER

12

VRS_RATE_TEXTURE

13

+

|enumeration-daBfgCore-Usage|

+
+
+Stage
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

UNKNOWN

0

PRE_RASTER

1

POST_RASTER

2

COMPUTE

4

TRANSFER

8

RAYTRACE

16

ALL_GRAPHICS

3

ALL_INDIRECTION

21

+

|enumeration-daBfgCore-Stage|

+
+
+ResourceType
+
+ + + + + + + + + + + + + + + + + + + + +

Invalid

0

Texture

1

Buffer

2

Blob

3

+

|enumeration-daBfgCore-ResourceType|

+
+
+AutoResTypeNameId
+
+ + + + + + + + +

Invalid

65535

+

|enumeration-daBfgCore-AutoResTypeNameId|

+
+
+VariableRateShadingCombiner
+
+ + + + + + + + + + + + + + + + + + + + + + + + +

VRS_PASSTHROUGH

0

VRS_OVERRIDE

1

VRS_MIN

2

VRS_MAX

3

VRS_SUM

4

+

|enumeration-daBfgCore-VariableRateShadingCombiner|

+
+
+BindingType
+
+ + + + + + + + + + + + + + + + + + + + +

ShaderVar

0

ViewMatrix

1

ProjMatrix

2

Invalid

3

+

|enumeration-daBfgCore-BindingType|

+
+
+

Handled structures

+
+
+TextureResourceDescription
+
+ +

TextureResourceDescription fields are

+ + + + + + + + + + + + + + + + + + + + + + + +

height

uint

mipLevels

uint

activation

daBfgCore::ResourceActivationAction

width

uint

cFlags

uint

+

|structure_annotation-daBfgCore-TextureResourceDescription|

+
+
+VolTextureResourceDescription
+
+ +

|structure_annotation-daBfgCore-VolTextureResourceDescription|

+
+
+ArrayTextureResourceDescription
+
+ +

|structure_annotation-daBfgCore-ArrayTextureResourceDescription|

+
+
+CubeTextureResourceDescription
+
+ +

|structure_annotation-daBfgCore-CubeTextureResourceDescription|

+
+
+ArrayCubeTextureResourceDescription
+
+ +

|structure_annotation-daBfgCore-ArrayCubeTextureResourceDescription|

+
+
+ResourceData
+
+ +

ResourceData fields are

+ + + + + + + + + + + +

resType

daBfgCore::ResourceType

history

daBfgCore::History

+

|structure_annotation-daBfgCore-ResourceData|

+
+
+AutoResolutionData
+
+ +

AutoResolutionData fields are

+ + + + + + + + + + + +

multiplier

float

id

daBfgCore::AutoResTypeNameId

+

|structure_annotation-daBfgCore-AutoResolutionData|

+
+
+ShaderBlockLayersInfo
+
+ +

ShaderBlockLayersInfo fields are

+ + + + + + + + + + + + + + + +

sceneLayer

int

objectLayer

int

frameLayer

int

+

|structure_annotation-daBfgCore-ShaderBlockLayersInfo|

+
+
+VrsStateRequirements
+
+ +

VrsStateRequirements fields are

+ + + + + + + + + + + + + + + + + + + + + + + +

rateTextureResId

daBfgCore::ResNameId

pixelCombiner

daBfgCore::VariableRateShadingCombiner

rateY

uint

vertexCombiner

daBfgCore::VariableRateShadingCombiner

rateX

uint

+

|structure_annotation-daBfgCore-VrsStateRequirements|

+
+
+VirtualSubresourceRef
+
+ +

VirtualSubresourceRef fields are

+ + + + + + + + + + + + + + + +

layer

uint

nameId

daBfgCore::ResNameId

mipLevel

uint

+

|structure_annotation-daBfgCore-VirtualSubresourceRef|

+
+
+Binding
+
+ +

Binding fields are

+ + + + + + + + + + + + + + + +

bindType

daBfgCore::BindingType

resource

daBfgCore::ResNameId

history

bool

+

|structure_annotation-daBfgCore-Binding|

+
+
+ResourceUsage
+
+ +

ResourceUsage fields are

+ + + + + + + + + + + + + + + +

stage

daBfgCore::Stage

usageType

daBfgCore::Usage

access

daBfgCore::Access

+

|structure_annotation-daBfgCore-ResourceUsage|

+
+
+ResourceRequest
+
+ +

ResourceRequest fields are

+ + + + + + + + + + + + + + + +

usage

daBfgCore::ResourceUsage

slotRequest

bool

optional

bool

+

|structure_annotation-daBfgCore-ResourceRequest|

+
+
+BufferResourceDescription
+
+ +

BufferResourceDescription fields are

+ + + + + + + + + + + + + + + + + + + + + + + +

viewFormat

uint

activation

daBfgCore::ResourceActivationAction

elementCount

uint

cFlags

uint

elementSizeInBytes

uint

+

|structure_annotation-daBfgCore-BufferResourceDescription|

+
+
+NodeStateRequirements
+
+ +

NodeStateRequirements fields are

+ + + + + + + + + + + + + + + +

supportsWireframe

bool

pipelineStateOverride

builtin::optional`OverrideState

vrsState

builtin::optional`VrsStateRequirements

+

|structure_annotation-daBfgCore-NodeStateRequirements|

+
+
+VirtualPassRequirements
+
+ +

VirtualPassRequirements fields are

+ + + + + + + + + + + + + + + +

colorAttachments

builtin::fixedVector`VirtualSubresourceRef`8

depthReadOnly

bool

depthAttachment

daBfgCore::VirtualSubresourceRef

+

|structure_annotation-daBfgCore-VirtualPassRequirements|

+
+
+NodeData
+
+ +

NodeData fields are

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

multiplexingMode

daBfgCore::MultiplexingMode

generation

uint16

precedingNodeIds

builtin::fixedVectorSet`NodeNameId`4

modifiedResources

builtin::fixedVectorSet`ResNameId`8

followingNodeIds

builtin::fixedVectorSet`NodeNameId`4

resourceRequests

builtin::fixedVectorMap`ResNameId`ResourceRequest`16

readResources

builtin::fixedVectorSet`ResNameId`8

nodeSource

builtin::das_string

shaderBlockLayers

daBfgCore::ShaderBlockLayersInfo

bindings

builtin::fixedVectorMap`int`Binding`8

historyResourceReadRequests

builtin::fixedVectorMap`ResNameId`ResourceRequest`16

stateRequirements

builtin::optional`NodeStateRequirements

createdResources

builtin::fixedVectorSet`ResNameId`8

renderingRequirements

builtin::optional`VirtualPassRequirements

renamedResources

builtin::fixedVectorMap`ResNameId`ResNameId`8

priority

int

sideEffect

daBfgCore::SideEffect

+

|structure_annotation-daBfgCore-NodeData|

+
+
+ResourceProvider
+
+ +

|structure_annotation-daBfgCore-ResourceProvider|

+
+
+InternalRegistry
+
+ +

InternalRegistry fields are

+ + + + + + + + + + + + + + + +

resources

builtin::idIndexedMapping`ResNameId`ResourceData

nodes

builtin::idIndexedMapping`NodeNameId`NodeData

knownNames

builtin::idNameMap`NameSpaceNameId`ResNameId`NodeNameId`AutoResTypeNameId

+

|structure_annotation-daBfgCore-InternalRegistry|

+
+
+NodeTracker
+
+ +

|structure_annotation-daBfgCore-NodeTracker|

+
+
+NodeHandle
+
+ +

NodeHandle property operators are

+ + + + + + + +

valid

bool

+

|structure_annotation-daBfgCore-NodeHandle|

+
+
+

Top level functions

+
+
+
+
+registerNode(arg0: NodeTracker implicit; arg1: NodeNameId const)
+
+ + + + + + + + + + + + + + + + + + +

argument

argument type

arg0

daBfgCore::NodeTracker implicit

arg1

daBfgCore::NodeNameId const

+

|function-daBfgCore-registerNode|

+
+
+get_shader_variable_id(arg0: string const implicit)
+
+ +

get_shader_variable_id returns int

+ + + + + + + + + + + + + +

argument

argument type

arg0

string const implicit

+

|function-daBfgCore-get_shader_variable_id|

+
+
+fill_slot(arg0: NameSpaceNameId const; arg1: string const implicit; arg2: NameSpaceNameId const; arg3: string const implicit)
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

argument

argument type

arg0

daBfgCore::NameSpaceNameId const

arg1

string const implicit

arg2

daBfgCore::NameSpaceNameId const

arg3

string const implicit

+

|function-daBfgCore-fill_slot|

+
+
+resetNode(arg0: NodeHandle implicit)
+
+ + + + + + + + + + + + + + +

argument

argument type

arg0

daBfgCore::NodeHandle implicit

+

|function-daBfgCore-resetNode|

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/daBFG/das.html b/api-references/dagor-render/index/daBFG/das.html new file mode 100644 index 000000000..9f30e0b83 --- /dev/null +++ b/api-references/dagor-render/index/daBFG/das.html @@ -0,0 +1,1998 @@ + + + + + + + Bfg in das — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Bfg in das

+

To use daBfg inside daScript you need first of all compile daBfg library with DABFG_ENABLE_DAS_INTERGRATION = yes.

+

This will compile das module that you can import with require daBfg.bfg_ecs +or require daBfg, whether you need ecs support or not.

+

DaScript daBfg methods are very similar to cpp methods, so usage will be the same, but with das syntax instead.

+

daBfg::registerNode registers node with provided name and declaration callback. +Returns NodeHandle.

+

Declaration callback is a das lambda with one argument Registry. +It returns execute lambda.

+

Inside declaration callback you describe node using registry argument.

+

Cpp declaration code

+
registry.orderMeAfter("some_node")
+registry.requestRenderPass().color("rt_tex")
+
+
+

Will be in das

+
registry |> orderMeAfter("some_node")
+registry |> requestRenderPass |> color([[auto "rt_tex"]])
+
+
+

Example:

+
require daBfg
+
+def register_debug_visualization_node(var handle : NodeHandle& |#)
+  handle <- root() |> registerNode(debug_visualization_node_name) <| @(var registry : Registry)
+    if is_forward_rendering()
+      registry |> requestRenderPass |> color([[auto[] "target_after_under_water_fog"]]) |> depthRo("depth_for_transparent_effects")
+    else
+      registry |> orderMeAfter("tracers_node")
+      registry |> orderMeBefore("transparent_scene_late_node")
+      registry |> requestRenderPass |> color([[auto[] "opaque_final_target"]]) |> depthRw("depth_for_transparency")
+
+    registry |> requestState() |> setFrameBlock("global_frame")
+    return <- @ <|
+      worldRenderer_renderDebug()
+
+
+
+

Type aliases

+
+
+VrsRateTexture is a variant type
+
+ + + + + + + + + + + + +

some

daBfg::VirtualResourceSemiRequest

none

void?

+

|typedef-daBfg-VrsRateTexture|

+
+
+VirtualAttachmentResource is a variant type
+
+ + + + + + + + + + + + +

resUid

daBfg::ResUid

name

string

+

|typedef-daBfg-VirtualAttachmentResource|

+
+
+TextureResolution is a variant type
+
+ + + + + + + + + + + + +

res

tuple<x:uint;y:uint>

autoRes

daBfg::AutoResolutionRequest

+

|typedef-daBfg-TextureResolution|

+
+
+NameSpaceRequest
+
+ +

NameSpaceRequest fields are

+ + + + + + + + + + + + + + + +

nameSpaceId

daBfgCore::NameSpaceNameId

nodeId

daBfgCore::NodeNameId

registry

daBfgCore::InternalRegistry ?

+

|structure-daBfg-NameSpaceRequest|

+
+
+Registry
+

: NameSpaceRequest

+
+ +

Registry fields are

+ + + + + + + + + + + + + + + +

nameSpaceId

daBfgCore::NameSpaceNameId

nodeId

daBfgCore::NodeNameId

registry

daBfgCore::InternalRegistry ?

+

|structure-daBfg-Registry|

+
+
+NameSpace
+
+ +

NameSpace fields are

+ + + + + + + +

nameSpaceId

daBfgCore::NameSpaceNameId

+

|structure-daBfg-NameSpace|

+
+
+ResUid
+
+ +

ResUid fields are

+ + + + + + + + + + + +

nameId

daBfgCore::ResNameId

history

bool

+

|structure-daBfg-ResUid|

+
+
+VirtualResourceRequestBase
+
+ +

VirtualResourceRequestBase fields are

+ + + + + + + + + + + + + + + +

registry

daBfgCore::InternalRegistry ?

resUid

daBfg::ResUid

nodeId

daBfgCore::NodeNameId

+

|structure-daBfg-VirtualResourceRequestBase|

+
+
+VirtualResourceHandle
+
+ +

VirtualResourceHandle fields are

+ + + + + + + + + + + +

registry

daBfgCore::InternalRegistry ?

resUid

daBfg::ResUid

+

|structure-daBfg-VirtualResourceHandle|

+
+
+VirtualResourceCreationSemiRequest
+

: VirtualResourceRequestBase

+
+ +

VirtualResourceCreationSemiRequest fields are

+ + + + + + + + + + + + + + + +

registry

daBfgCore::InternalRegistry ?

resUid

daBfg::ResUid

nodeId

daBfgCore::NodeNameId

+

|structure-daBfg-VirtualResourceCreationSemiRequest|

+
+
+VirtualResourceSemiRequest
+

: VirtualResourceRequestBase

+
+ +

VirtualResourceSemiRequest fields are

+ + + + + + + + + + + + + + + +

registry

daBfgCore::InternalRegistry ?

resUid

daBfg::ResUid

nodeId

daBfgCore::NodeNameId

+

|structure-daBfg-VirtualResourceSemiRequest|

+
+
+VirtualResourceRequest
+

: VirtualResourceRequestBase

+
+ +

VirtualResourceRequest fields are

+ + + + + + + + + + + + + + + +

registry

daBfgCore::InternalRegistry ?

resUid

daBfg::ResUid

nodeId

daBfgCore::NodeNameId

+

|structure-daBfg-VirtualResourceRequest|

+
+
+VirtualTextureHandle
+

: VirtualResourceHandle

+
+ +

VirtualTextureHandle fields are

+ + + + + + + + + + + +

registry

daBfgCore::InternalRegistry ?

resUid

daBfg::ResUid

+

|structure-daBfg-VirtualTextureHandle|

+
+
+VirtualBufferHandle
+

: VirtualResourceHandle

+
+ +

VirtualBufferHandle fields are

+ + + + + + + + + + + +

registry

daBfgCore::InternalRegistry ?

resUid

daBfg::ResUid

+

|structure-daBfg-VirtualBufferHandle|

+
+
+VirtualTextureRequest
+

: VirtualResourceRequest

+
+ +

VirtualTextureRequest fields are

+ + + + + + + + + + + + + + + +

registry

daBfgCore::InternalRegistry ?

resUid

daBfg::ResUid

nodeId

daBfgCore::NodeNameId

+

|structure-daBfg-VirtualTextureRequest|

+
+
+VirtualBufferRequest
+

: VirtualResourceRequest

+
+ +

VirtualBufferRequest fields are

+ + + + + + + + + + + + + + + +

registry

daBfgCore::InternalRegistry ?

resUid

daBfg::ResUid

nodeId

daBfgCore::NodeNameId

+

|structure-daBfg-VirtualBufferRequest|

+
+
+StateRequest
+
+ +

StateRequest fields are

+ + + + + + + + + + + +

registry

daBfgCore::InternalRegistry ?

nodeId

daBfgCore::NodeNameId

+

|structure-daBfg-StateRequest|

+
+
+VrsRequirements
+
+ +

VrsRequirements fields are

+ + + + + + + + + + + + + + + + + + + + + + + +

rateX

uint

rateY

uint

rateTexture

VrsRateTexture

vertexCombiner

daBfgCore::VariableRateShadingCombiner

pixelCombiner

daBfgCore::VariableRateShadingCombiner

+

|structure-daBfg-VrsRequirements|

+
+
+VirtualPassRequest
+
+ +

VirtualPassRequest fields are

+ + + + + + + + + + + +

registry

daBfgCore::InternalRegistry ?

nodeId

daBfgCore::NodeNameId

+

|structure-daBfg-VirtualPassRequest|

+
+
+VirtualAttachmentRequest
+
+ +

VirtualAttachmentRequest fields are

+ + + + + + + + + + + + + + + +

resource

VirtualAttachmentResource

mipLevel

uint

layer

uint

+

|structure-daBfg-VirtualAttachmentRequest|

+
+
+AutoResolutionRequest
+
+ +

AutoResolutionRequest fields are

+ + + + + + + + + + + + + + + +

autoResTypeId

daBfgCore::AutoResTypeNameId

multiplier

float

registry

daBfgCore::InternalRegistry ?

+

|structure-daBfg-AutoResolutionRequest|

+
+
+Texture2dCreateInfo
+
+ +

Texture2dCreateInfo fields are

+ + + + + + + + + + + + + + + +

resolution

TextureResolution

creationFlags

uint

mipLevels

uint

+

|structure-daBfg-Texture2dCreateInfo|

+
+
+BufferCreateInfo
+
+ +

BufferCreateInfo fields are

+ + + + + + + + + + + + + + + + + + + +

elementSize

uint

elementCount

uint

flags

uint

format

uint

+

|structure-daBfg-BufferCreateInfo|

+
+
+NamedSlot
+
+ +

NamedSlot fields are

+ + + + + + + +

name

string

+

|structure-daBfg-NamedSlot|

+
+
+

Top level functions

+
+
+
+
+root()
+
+ +

root returns daBfg::NameSpace

+

|function-daBfg-root|

+
+
+operator /(self: NameSpace; child_name: string const)
+
+ +

/ returns daBfg::NameSpace

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::NameSpace

child_name

string const

+

|function-daBfg-/|

+
+
+fillSlot(self: NameSpace; slot: NamedSlot const; res_name_space: NameSpace const; res_name: string const)
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::NameSpace

slot

daBfg::NamedSlot const

res_name_space

daBfg::NameSpace const

res_name

string const

+

|function-daBfg-fillSlot|

+
+
+registerNode(self: NameSpace; name: string const; declaration_callback: lambda<(var reg:daBfg::Registry -const):lambda<void>>)
+
+ +

registerNode returns daBfgCore::NodeHandle

+ + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::NameSpace

name

string const

declaration_callback

lambda<(reg: daBfg::Registry ):lambda<>>

+

|function-daBfg-registerNode|

+
+
+root(self: Registry)
+
+ +

root returns daBfg::NameSpaceRequest

+ + + + + + + + + + + + + +

argument

argument type

self

daBfg::Registry

+

|function-daBfg-root|

+
+
+operator /(self: NameSpaceRequest; child_name: string const)
+
+ +

/ returns daBfg::NameSpaceRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::NameSpaceRequest

child_name

string const

+

|function-daBfg-/|

+
+
+

Registry manipulation

+
+
+
+
+
+orderMeBefore(self: Registry; name: string const)
+
+ +

orderMeBefore returns daBfg::Registry

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::Registry

name

string const

+

|function-daBfg-orderMeBefore|

+
+
+orderMeBefore(self: Registry; names: array<string> const)
+
+ +

orderMeBefore returns daBfg::Registry

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::Registry

names

array<string> const

+

|function-daBfg-orderMeBefore|

+
+
+orderMeAfter(self: Registry; name: string const)
+
+ +

orderMeAfter returns daBfg::Registry

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::Registry

name

string const

+

|function-daBfg-orderMeAfter|

+
+
+orderMeAfter(self: Registry; names: array<string> const)
+
+ +

orderMeAfter returns daBfg::Registry

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::Registry

names

array<string> const

+

|function-daBfg-orderMeAfter|

+
+
+setPriority(self: Registry; priority: int const)
+
+ +

setPriority returns daBfg::Registry

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::Registry

priority

int const

+

|function-daBfg-setPriority|

+
+
+multiplex(self: Registry; multiplexing_mode: MultiplexingMode const)
+
+ +

multiplex returns daBfg::Registry

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::Registry

multiplexing_mode

daBfgCore::MultiplexingMode const

+

|function-daBfg-multiplex|

+
+
+executionHas(self: Registry; side_effect: SideEffect const)
+
+ +

executionHas returns daBfg::Registry

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::Registry

side_effect

daBfgCore::SideEffect const

+

|function-daBfg-executionHas|

+
+
+create(self: Registry; name: string const; history: History const)
+
+ +

create returns daBfg::VirtualResourceCreationSemiRequest

+ + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::Registry

name

string const

history

daBfgCore::History const

+

|function-daBfg-create|

+
+
+getResolution(self: NameSpaceRequest; type_name: string const; multiplier: float const)
+
+ +

getResolution returns daBfg::AutoResolutionRequest

+ + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::NameSpaceRequest

type_name

string const

multiplier

float const

+

|function-daBfg-getResolution|

+
+
+read(self: NameSpaceRequest; name: string const)
+
+ +

read returns daBfg::VirtualResourceSemiRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::NameSpaceRequest

name

string const

+

|function-daBfg-read|

+
+
+read(self: NameSpaceRequest; slot: NamedSlot const)
+
+ +

read returns daBfg::VirtualResourceSemiRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::NameSpaceRequest

slot

daBfg::NamedSlot const

+

|function-daBfg-read|

+
+
+history(self: NameSpaceRequest; name: string)
+
+ +

history returns daBfg::VirtualResourceSemiRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::NameSpaceRequest

name

string

+

|function-daBfg-history|

+
+
+modify(self: NameSpaceRequest; name: string const)
+
+ +

modify returns daBfg::VirtualResourceSemiRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::NameSpaceRequest

name

string const

+

|function-daBfg-modify|

+
+
+modify(self: NameSpaceRequest; slot: NamedSlot const)
+
+ +

modify returns daBfg::VirtualResourceSemiRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::NameSpaceRequest

slot

daBfg::NamedSlot const

+

|function-daBfg-modify|

+
+
+rename(self: NameSpaceRequest; from: string const; to: string const; history: History const)
+
+ +

rename returns daBfg::VirtualResourceSemiRequest

+ + + + + + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::NameSpaceRequest

from

string const

to

string const

history

daBfgCore::History const

+

|function-daBfg-rename|

+
+
+get(resolution: AutoResolutionRequest const)
+
+ +

get returns int2

+ + + + + + + + + + + + + +

argument

argument type

resolution

daBfg::AutoResolutionRequest const

+

|function-daBfg-get|

+
+
+requestState(self: Registry)
+
+ +

requestState returns daBfg::StateRequest

+ + + + + + + + + + + + + +

argument

argument type

self

daBfg::Registry

+

|function-daBfg-requestState|

+
+
+requestRenderPass(self: Registry)
+
+ +

requestRenderPass returns daBfg::VirtualPassRequest

+ + + + + + + + + + + + + +

argument

argument type

self

daBfg::Registry

+

|function-daBfg-requestRenderPass|

+
+
+

Request manipulation

+
+
+
+
+
+texture(self: VirtualResourceCreationSemiRequest; info: Texture2dCreateInfo const)
+
+ +

texture returns daBfg::VirtualTextureRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::VirtualResourceCreationSemiRequest

info

daBfg::Texture2dCreateInfo const

+

|function-daBfg-texture|

+
+
+texture(self: VirtualResourceSemiRequest)
+
+ +

texture returns daBfg::VirtualTextureRequest

+ + + + + + + + + + + + + +

argument

argument type

self

daBfg::VirtualResourceSemiRequest

+

|function-daBfg-texture|

+
+
+buffer(self: VirtualResourceCreationSemiRequest; info: BufferCreateInfo const)
+
+ +

buffer returns daBfg::VirtualBufferRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::VirtualResourceCreationSemiRequest

info

daBfg::BufferCreateInfo const

+

|function-daBfg-buffer|

+
+
+buffer(self: VirtualResourceSemiRequest)
+
+ +

buffer returns daBfg::VirtualBufferRequest

+ + + + + + + + + + + + + +

argument

argument type

self

daBfg::VirtualResourceSemiRequest

+

|function-daBfg-buffer|

+
+
+blob(self: VirtualResourceSemiRequest)
+
+ +

blob returns daBfg::VirtualResourceRequest

+ + + + + + + + + + + + + +

argument

argument type

self

daBfg::VirtualResourceSemiRequest

+

|function-daBfg-blob|

+
+
+modifyRequest(self: VirtualResourceRequest; modifier: block<(var request:daBfgCore::ResourceRequest -const):void> const)
+
+ + + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::VirtualResourceRequest

modifier

block<(request: daBfgCore::ResourceRequest ):void> const

+

|function-daBfg-modifyRequest|

+
+
+handle(self: VirtualTextureRequest const)
+
+ +

handle returns daBfg::VirtualTextureHandle

+ + + + + + + + + + + + + +

argument

argument type

self

daBfg::VirtualTextureRequest const

+

|function-daBfg-handle|

+
+
+handle(self: VirtualBufferRequest const)
+
+ +

handle returns daBfg::VirtualBufferHandle

+ + + + + + + + + + + + + +

argument

argument type

self

daBfg::VirtualBufferRequest const

+

|function-daBfg-handle|

+
+
+view(handle: VirtualTextureHandle const)
+
+ +

view returns DagorResPtr::ManagedTexView

+ + + + + + + + + + + + + +

argument

argument type

handle

daBfg::VirtualTextureHandle const

+

|function-daBfg-view|

+
+
+view(handle: VirtualBufferHandle const)
+
+ +

view returns DagorResPtr::ManagedBufView

+ + + + + + + + + + + + + +

argument

argument type

handle

daBfg::VirtualBufferHandle const

+

|function-daBfg-view|

+
+
+setFrameBlock(self: StateRequest; name: string const)
+
+ +

setFrameBlock returns daBfg::StateRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::StateRequest

name

string const

+

|function-daBfg-setFrameBlock|

+
+
+setSceneBlock(self: StateRequest; name: string const)
+
+ +

setSceneBlock returns daBfg::StateRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::StateRequest

name

string const

+

|function-daBfg-setSceneBlock|

+
+
+setObjectBlock(self: StateRequest; name: string const)
+
+ +

setObjectBlock returns daBfg::StateRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::StateRequest

name

string const

+

|function-daBfg-setObjectBlock|

+
+
+allowWireFrame(self: StateRequest)
+
+ +

allowWireFrame returns daBfg::StateRequest

+ + + + + + + + + + + + + +

argument

argument type

self

daBfg::StateRequest

+

|function-daBfg-allowWireFrame|

+
+
+allowVrs(self: StateRequest; vrs: VrsRequirements const)
+
+ +

allowVrs returns daBfg::StateRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::StateRequest

vrs

daBfg::VrsRequirements const

+

|function-daBfg-allowVrs|

+
+
+enableOverride(self: StateRequest; das_override: OverrideRenderState const)
+
+ +

enableOverride returns daBfg::StateRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::StateRequest

das_override

DagorDriver3D::OverrideRenderState const

+

|function-daBfg-enableOverride|

+
+
+color(self: VirtualPassRequest; attachments: array<daBfg::VirtualAttachmentRequest> const)
+
+ +

color returns daBfg::VirtualPassRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::VirtualPassRequest

attachments

array< daBfg::VirtualAttachmentRequest > const

+

|function-daBfg-color|

+
+
+optional(self: auto(TT))
+
+ +

optional returns TT

+ + + + + + + + + + + + + +

argument

argument type

self

auto(TT)

+

|function-daBfg-optional|

+
+
+useAs(self: auto(TT); usageType: Usage const)
+
+ +

useAs returns TT

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

auto(TT)

usageType

daBfgCore::Usage const

+

|function-daBfg-useAs|

+
+
+atStage(self: auto(TT); stage: Stage const)
+
+ +

atStage returns TT

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

auto(TT)

stage

daBfgCore::Stage const

+

|function-daBfg-atStage|

+
+
+bindToShaderVar(self: auto(TT); name: string const)
+
+ +

bindToShaderVar returns TT

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

auto(TT)

name

string const

+

|function-daBfg-bindToShaderVar|

+
+
+color(self: VirtualPassRequest; requests: VirtualTextureRequest const[])
+
+ +

color returns daBfg::VirtualPassRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::VirtualPassRequest

requests

daBfg::VirtualTextureRequest const[-1]

+

|function-daBfg-color|

+
+
+color(self: VirtualPassRequest; names: string const[])
+
+ +

color returns daBfg::VirtualPassRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::VirtualPassRequest

names

string const[-1]

+

|function-daBfg-color|

+
+
+depthRw(self: VirtualPassRequest; attachment: auto const)
+
+ +

depthRw returns daBfg::VirtualPassRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::VirtualPassRequest

attachment

auto const

+

|function-daBfg-depthRw|

+
+
+depthRo(self: VirtualPassRequest; attachment: auto const)
+
+ +

depthRo returns daBfg::VirtualPassRequest

+ + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::VirtualPassRequest

attachment

auto const

+

|function-daBfg-depthRo|

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/daBFG/declaringNodes.html b/api-references/dagor-render/index/daBFG/declaringNodes.html new file mode 100644 index 000000000..0c3a7e347 --- /dev/null +++ b/api-references/dagor-render/index/daBFG/declaringNodes.html @@ -0,0 +1,1536 @@ + + + + + + + Declaring a Node — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Declaring a Node

+

The basic syntax for creating a new node is as follows:

+
auto handle = dabfg::register_node("node_name", DABFG_PP_NODE_SRC,
+  [](dabfg::Registry registry)
+  {
+    // use registry's methods to declare what your node does
+    return []()
+      {
+        // dispatch GPU commands
+      };
+  });
+
+
+

The outer lambda is referred to as the declaration callback and is executed rarely, in most cases even once. +The declaration callback returns another lambda, referred to as the execution callback, which can be executed once or several times per frame depending on the current multiplexing settings. +See Dispatching Work in Nodes at Runtime for further information on runtime behavior. +Below is a comprehensive documentation of dabfg::Registry and the related request builder objects. +These must be used inside the declaration callback for specifying the following data:

+
+
    +
  • What resources your node is going to operate on,

  • +
  • What it is going to do with them,

  • +
  • What bindings it requires for executing it’s work (shader resources, render targets, etc)

  • +
  • What global state the node requires (e.g. shader blocks)

  • +
  • Additional metadata (multiplexing mode, priority, explicit dependencies, etc)

  • +
+
+
+
+class Registry : private dabfg::NameSpaceRequest
+

The main builder object for describing at declaration time what your node intends to do at runtime.

+
+

Resource requesting methods

+

Every one of these returns a request object that must be used to specify further options for the request. See docs for the relevant request objects for details.

+

Note

+

All methods present here look up the resource in the current node’s namespace, i.e. registry.currNameSpace().

+
+
+

Note

+

We explicitly prohibit creating resources in any namespace but the current node’s one.

+
+

+
+
+VirtualResourceCreationSemiRequest create(const char *name, History history)
+

Creates a new resource at node execution time. The resource will be provided by FG before the node starts executing.

+
+
Parameters:
+
    +
  • name – A unique name identifying this resource within the current node’s namespace.

  • +
  • history – Specifies the way in which history should be handled for this texture. A history for a virtual resource is a physical resource that contains the data this virtual resource had at the end of the previous frame. See dabfg::History for details.

  • +
+
+
+
+ +
+
+template<class F>
inline VirtualTextureRequest<NewRwRequestPolicy> registerTexture2d(const char *name, F &&texture_provider_callback)
+

Creates a new texture at node execution time, which will not be FG-provided, but acquired from the callback before the node starts executing and stored somewhere outside. Note that history is not supported for external resources.

+
+
Parameters:
+
    +
  • name – A unique name identifying this resource within the current node’s namespace.

  • +
  • texture_provider_callback – A callback that maps a multiplexing index to a ManagedTexView. It might be called an arbitrary number of times, but only while the current node is registered.

  • +
+
+
+
+ +
+
+VirtualTextureRequest<NewRwRequestPolicy> registerBackBuffer(const char *name)
+

Marks this node as the back buffer provider and creates a virtual dabfg resource that corresponds to it.

+

The back buffer is not a real resource in dagor, but rather a special value that will be replaced with the actual swapchain image when it’s acquired on the driver thread. This makes the back buffer a special case everywhere, it is not possible to read from it, nor is it possible to UAV-write to it. In daBfg, we only to render to it, and only with a single attachment at that, so no MRT and no depth-stencil even.

+
+

Note

+

This is a hot discussion topic and might change in the future.

+
+
+
Parameters:
+

name – a unique name identifying the back buffer as a resource within the current node’s namespace.

+
+
+
+ +
+
+template<class F>
inline VirtualBufferRequest<NewRwRequestPolicy> registerBuffer(const char *name, F &&buffer_provider_callback)
+

Creates a new buffer at node execution time, which will not be FG-provided, but acquired from the callback before the node starts executing and stored somewhere outside. Note that history is not supported for external resources.

+
+
Parameters:
+
    +
  • name – A unique name identifying this resource within the current node’s namespace.

  • +
  • buffer_provider_callback – A callback that maps a multiplexing index to a ManagedBufferView. It might be called an arbitrary number of times, but only while the current node is registered.

  • +
+
+
+
+ +
+
+VirtualResourceSemiRequest<NewHistRequestPolicy> historyFor(const char *name) const
+

Reads the history of an existing resource at node execution time.

+
+
Parameters:
+

name – The name of the resource the history of which to read.

+
+
+
+ +
+
+VirtualResourceSemiRequest<NewRwRequestPolicy> modify(const char *name) const
+

Modifies an existing resource at node execution time. Modifications always happen after creation and before all reads.

+
+
Parameters:
+

name – The name of the resource to modify.

+
+
+
+ +
+
+VirtualResourceSemiRequest<NewRwRequestPolicy> modify(NamedSlot slot_name) const
+

Modifies an existing resource at node execution time, but indirectly, through a “slot”, which must be specified with dabfg::fill_slot. Modifications always happen after creation and before all reads.

+
+
Parameters:
+

slot_name – The name of the slot to be used for this modification.

+
+
+
+ +
+
+VirtualResourceSemiRequest<NewRoRequestPolicy> read(const char *name) const
+

Reads an existing resource at node execution time. Reads always happen after all modifications and before the renaming.

+
+
Parameters:
+

name – The name of the resource to read.

+
+
+
+ +
+
+VirtualResourceSemiRequest<NewRoRequestPolicy> read(NamedSlot slot_name) const
+

Reads an existing resource at node execution time, but indirectly, through a “slot”, which must be specified with dabfg::fill_slot. Reads always happen after all modifications and before the renaming.

+
+
Parameters:
+

slot_name – The name of the slot to be used for this read.

+
+
+
+ +
+
+VirtualResourceSemiRequest<NewRwRequestPolicy> rename(const char *from, const char *to, History history) const
+

Modifies and renames an existing resource at node execution time. Renaming always happens last among all operations on a resource. The renamed version is considered to be a new virtual resource.

+
+

Note

+

Parameters from and to are looked up in different namespaces when calling this function on an arbitrary NameSpaceRequest object! Current node’s namespace is used for creating to, while from is looked up in the current request object’s namespace!

+
+
+
Parameters:
+
    +
  • from – Old resource name. Note that this resource may not have history enabled, as renaming it “consumes” it on the current frame, so it is not possible to read it on the next one. It will be looked up relative to this namespace.

  • +
  • to – New resource name, created inside the current node’s namespace!

  • +
  • history – Whether the new resource needs history enabled, see create for details about history.

  • +
+
+
+
+ +
+
+

Convenience aliases

+
+
+inline VirtualTextureRequest<NewRwRequestPolicy> createTexture2d(const char *name, History history, Texture2dCreateInfo info)
+

Alias. See create function for details.

+
+ +
+
+template<class T>
inline VirtualBlobRequest<T, NewRwRequestPolicy> createBlob(const char *name, History history)
+

Alias. See create function for details.

+
+ +
+
+template<class T>
inline VirtualBlobRequest<T, NewRwRequestPolicy> modifyBlob(const char *name) const
+

Alias. See modify function for details.

+
+ +
+
+inline VirtualTextureRequest<NewRwRequestPolicy> modifyTexture(const char *name) const
+

Alias. See modify function for details.

+
+ +
+
+inline VirtualTextureRequest<NewRwRequestPolicy> modifyTexture(NamedSlot slot_name) const
+

Alias. See modify function for details.

+
+ +
+
+template<class T>
inline VirtualBlobRequest<T, NewRoRequestPolicy> readBlob(const char *name) const
+

Alias. See read functions for details.

+
+ +
+
+template<class T>
inline VirtualBlobRequest<T, NewHistRequestPolicy> readBlobHistory(const char *name) const
+

Alias. See historyFor function for details.

+
+ +
+
+inline VirtualTextureRequest<NewRoRequestPolicy> readTexture(const char *name) const
+

Alias. See read functions for details.

+
+ +
+
+inline VirtualTextureRequest<NewRoRequestPolicy> readTexture(NamedSlot slot_name) const
+

Alias. See read functions for details.

+
+ +
+
+inline VirtualTextureRequest<NewHistRequestPolicy> readTextureHistory(const char *name) const
+

Alias. See historyFor function for details.

+
+ +
+
+template<class T>
inline VirtualBlobRequest<T, NewRwRequestPolicy> renameBlob(const char *from, const char *to, History history) const
+

Alias. See rename function for details.

+
+ +
+
+inline VirtualTextureRequest<NewRwRequestPolicy> renameTexture(const char *from, const char *to, History history) const
+

Alias. See rename function for details.

+
+ +
+
+

Public Functions

+
+
+Registry allowAsyncPipelines()
+

Allows async pipeline compilation Graphics pipelines will be async compiled with draw call skip when pipeline is not yet ready.

+
+ +
+
+Registry orderMeBefore(const char *name)
+

Orders the current node before a certain node. This means that the node name will only start executing after the current node has finished.

+
+

Note

+

Ordering with nodes from different name spaces is not supported.

+
+
+
Parameters:
+

name – The name of the node to order before, looked up in the current namespace.

+
+
+
+ +
+
+Registry orderMeBefore(std::initializer_list<const char*> names)
+

Alias for calling orderMeBefore(const char *name) several times.

+
+
Parameters:
+

names – List of names of the nodes to order before.

+
+
+
+ +
+
+Registry orderMeAfter(const char *name)
+

Orders the current node after a certain node. This means that the current node will only start executing after node name has finished.

+
+

Note

+

Ordering with nodes from different name spaces is not supported.

+
+
+
Parameters:
+

name – The name of the node to order after, looked up in the current namespace.

+
+
+
+ +
+
+Registry orderMeAfter(std::initializer_list<const char*> names)
+

Alias for calling orderMeAfter(const char *name) several times.

+
+
Parameters:
+

names – List of names of the nodes to order after.

+
+
+
+ +
+
+Registry setPriority(priority_t prio)
+

Sets a priority for this node that will be used to order parallel nodes. Should only be used for optimizations.

+
+
Parameters:
+

prio – The priority to set.

+
+
+
+ +
+
+Registry multiplex(multiplexing::Mode mode)
+

Choses multiplexing mode for this node. Default is multiplexing over all axes (i.e. normal world rendering).

+
+
Parameters:
+

mode – The multiplexing mode to set.

+
+
+
+ +
+
+Registry executionHas(SideEffects side_effect)
+

Sets the side effect of the node that will control how the framegraph handles execution.

+
+
Parameters:
+

side_effect – The side effect type to set.

+
+
+
+ +
+
+StateRequest requestState()
+

Requests a certain global state for the execution time of this node.

+
+
Returns:
+

A builder object for specifying concrete states.

+
+
+
+ +
+
+VirtualPassRequest requestRenderPass()
+

Requests that this node is going to be drawing stuff, which is always done inside a (possibly implicit) render pass. The returned object allows fine-tuning the render pass.

+
+
Returns:
+

A builder object for specifying attachments and other details of the render pass.

+
+
+
+ +
+
+inline NameSpaceRequest currNameSpace()
+

Returns a request object for this node’s name space that can be used to get sub-namespace request objects or request resources.

+
+
Returns:
+

NameSpaceRequest object representing the current name space.

+
+
+
+ +
+
+NameSpaceRequest root() const
+

Returns a request object for the root name space which can be used to access global resources.

+
+
Returns:
+

NameSpaceRequest object representing the root name space.

+
+
+
+ +
+
+template<int D>
AutoResolutionRequest<D> getResolution(const char *type_name, float multiplier = 1.f) const
+

Get a request object for the 2D resolution of a particular type inside of this namespace, which can then be used to create textures or be resolved into an actual number at execution time. The resulting resolution will be the product of what was set with NameSpace::setResolution with the multiplier.

+
+
Template Parameters:
+

D – Dimensionality of the resolution.

+
+
Parameters:
+
    +
  • type_name – Auto resolution type name.

  • +
  • multiplier – A multiplier for the resolution type.

  • +
+
+
Returns:
+

AutoResolutionRequest Object representing the auto resolution type.

+
+
+
+ +
+
+ +
+
+class NameSpaceRequest
+

An object representing a name space within the node declaration callback. It can be used to request objects from the current namespace or its sub-namespaces.

+

Subclassed by dabfg::Registry

+
+

Resource requesting methods

+

Every one of these returns a request object that must be used to specify further options for the request. See docs for the relevant request objects for details.

+

Note

+

All methods present here look up the resource in this namespace.

+
+

+
+
+VirtualResourceSemiRequest<NewRoRequestPolicy> read(const char *name) const
+

Reads an existing resource at node execution time. Reads always happen after all modifications and before the renaming.

+
+
Parameters:
+

name – The name of the resource to read.

+
+
+
+ +
+
+VirtualResourceSemiRequest<NewRoRequestPolicy> read(NamedSlot slot_name) const
+

Reads an existing resource at node execution time, but indirectly, through a “slot”, which must be specified with dabfg::fill_slot. Reads always happen after all modifications and before the renaming.

+
+
Parameters:
+

slot_name – The name of the slot to be used for this read.

+
+
+
+ +
+
+VirtualResourceSemiRequest<NewHistRequestPolicy> historyFor(const char *name) const
+

Reads the history of an existing resource at node execution time.

+
+
Parameters:
+

name – The name of the resource the history of which to read.

+
+
+
+ +
+
+VirtualResourceSemiRequest<NewRwRequestPolicy> modify(const char *name) const
+

Modifies an existing resource at node execution time. Modifications always happen after creation and before all reads.

+
+
Parameters:
+

name – The name of the resource to modify.

+
+
+
+ +
+
+VirtualResourceSemiRequest<NewRwRequestPolicy> modify(NamedSlot slot_name) const
+

Modifies an existing resource at node execution time, but indirectly, through a “slot”, which must be specified with dabfg::fill_slot. Modifications always happen after creation and before all reads.

+
+
Parameters:
+

slot_name – The name of the slot to be used for this modification.

+
+
+
+ +
+
+VirtualResourceSemiRequest<NewRwRequestPolicy> rename(const char *from, const char *to, History history) const
+

Modifies and renames an existing resource at node execution time. Renaming always happens last among all operations on a resource. The renamed version is considered to be a new virtual resource.

+
+

Note

+

Parameters from and to are looked up in different namespaces when calling this function on an arbitrary NameSpaceRequest object! Current node’s namespace is used for creating to, while from is looked up in the current request object’s namespace!

+
+
+
Parameters:
+
    +
  • from – Old resource name. Note that this resource may not have history enabled, as renaming it “consumes” it on the current frame, so it is not possible to read it on the next one. It will be looked up relative to this namespace.

  • +
  • to – New resource name, created inside the current node’s namespace!

  • +
  • history – Whether the new resource needs history enabled, see create for details about history.

  • +
+
+
+
+ +
+
+

Convenience aliases

+
+
+inline VirtualTextureRequest<NewRoRequestPolicy> readTexture(const char *name) const
+

Alias. See read functions for details.

+
+ +
+
+inline VirtualTextureRequest<NewRoRequestPolicy> readTexture(NamedSlot slot_name) const
+

Alias. See read functions for details.

+
+ +
+
+inline VirtualTextureRequest<NewHistRequestPolicy> readTextureHistory(const char *name) const
+

Alias. See historyFor function for details.

+
+ +
+
+inline VirtualTextureRequest<NewRwRequestPolicy> modifyTexture(const char *name) const
+

Alias. See modify function for details.

+
+ +
+
+inline VirtualTextureRequest<NewRwRequestPolicy> modifyTexture(NamedSlot slot_name) const
+

Alias. See modify function for details.

+
+ +
+
+inline VirtualTextureRequest<NewRwRequestPolicy> renameTexture(const char *from, const char *to, History history) const
+

Alias. See rename function for details.

+
+ +
+
+template<class T>
inline VirtualBlobRequest<T, NewRoRequestPolicy> readBlob(const char *name) const
+

Alias. See read functions for details.

+
+ +
+
+template<class T>
inline VirtualBlobRequest<T, NewHistRequestPolicy> readBlobHistory(const char *name) const
+

Alias. See historyFor function for details.

+
+ +
+
+template<class T>
inline VirtualBlobRequest<T, NewRwRequestPolicy> modifyBlob(const char *name) const
+

Alias. See modify function for details.

+
+ +
+
+template<class T>
inline VirtualBlobRequest<T, NewRwRequestPolicy> renameBlob(const char *from, const char *to, History history) const
+

Alias. See rename function for details.

+
+ +
+
+

Public Functions

+
+
+NameSpaceRequest operator/(const char *child_name) const
+

Creates a namespace object for a sub-namespace of this one.

+
+
Parameters:
+

child_name – Name of the sub-namespace.

+
+
Returns:
+

NameSpace Object representing the child namespace.

+
+
+
+ +
+
+template<int D>
AutoResolutionRequest<D> getResolution(const char *type_name, float multiplier = 1.f) const
+

Get a request object for the 2D resolution of a particular type inside of this namespace, which can then be used to create textures or be resolved into an actual number at execution time. The resulting resolution will be the product of what was set with NameSpace::setResolution with the multiplier.

+
+
Template Parameters:
+

D – Dimensionality of the resolution.

+
+
Parameters:
+
    +
  • type_name – Auto resolution type name.

  • +
  • multiplier – A multiplier for the resolution type.

  • +
+
+
Returns:
+

AutoResolutionRequest Object representing the auto resolution type.

+
+
+
+ +
+
+ +
+
+template<int D>
class AutoResolutionRequest
+

This class represents a daBfg-managed automatic resolution type for a texture. If this resolution is specified for a texture, the actual texture’s resolution at runtime will be the dynamic resolution scaled by the multiplier, but the consumed memory will always be equal to the static resolution times the multiplier. See NameSpace::setResolution and NameSpace::setDynamicResolution. Note that objects of this type MAY be captured into the execution callback and used to access the actual resolution on a particular frame, but the resolution should NEVER be accessed in the declaration callback, as the value will be undefined.

+
+
Template Parameters:
+

D – &#8212; dimensionality of the resolution, either 2 or 3.

+
+
+
+

Public Functions

+
+
+IPoint<D> get() const
+

Returns the current dynamic resolution for this auto-res type.

+
+

Warning

+

Should only be used for setting the d3d viewport/scissor, NEVER create textures with this resolution, as it might be changing every single frame!!! Also never call this outside of the execution callback for the same reason!

+
+
+
Returns:
+

The current dynamic resolution for this type.

+
+
+
+ +
+
+ +
+
+namespace multiplexing
+

Multiplexing allows a single run_nodes call to result in several consequent executions of frameGraph with some nodes being run only once. As an example, when rendering for VR, shadows need to be rendered only once, not for every eye/viewport, while most scene geometry should be rendered for every viewport/eye.

+
+

Enums

+
+
+enum class Mode : uint32_t
+

Describes the dimensions along which a node shall be multiplexed.

+

Values:

+
+
+enumerator None
+

Run once, ignore multiplexing (i.e. global setup)

+
+ +
+
+enumerator SuperSampling
+

Run the node for every super-sample.

+
+ +
+
+enumerator SubSampling
+

Run the node for every sub-sample.

+
+ +
+
+enumerator Viewport
+

Run the node once for every viewport.

+
+ +
+
+enumerator FullMultiplex
+

Default: everything is multiplexed (normal scene rendering nodes)

+
+ +
+ +
+
+

Functions

+
+
+inline Mode operator|(Mode a, Mode b)
+

Bitwise OR operator for combining several modes.

+
+ +
+
+
+struct Extents
+

A struct describing the amount of multiplexing that occurs over every dimension.

+

The application is free to interpret these dimensions however it pleases, but the intended interpretation is

    +
  • superSamples &#8212; used when rendering the entire scene multiple times to achieve a higher resolution result than the user’s VRAM would allow otherwise, which is useful for screenshots and cinematics;

  • +
  • subSamples &#8212; used for rendering the entire scene multiple times and then blending the results to achieve SSAA without spending any additional VRAM required;

  • +
  • viewports &#8212; used for VR/AR.

  • +
+

+
+

Public Members

+
+
+uint32_t superSamples = {1}
+

Number of super-samples.

+
+ +
+
+uint32_t subSamples = {1}
+

Number of sub-samples.

+
+ +
+
+uint32_t viewports = {1}
+

Number of viewports.

+
+ +
+
+ +
+
+struct Index
+

Identifies a concrete iteration of multiplexing.

+

Can be accessed from an execution callback by simply adding an argument of this type to it. It is then possible to achieve different behavior for different eyes or sub/super samples.

+
+

Public Functions

+
+
+inline bool operator==(const Index &other)
+

Equality comparison operator.

+
+ +
+
+

Public Members

+
+
+uint32_t superSample = {0}
+

Index of the super-sample.

+
+ +
+
+uint32_t subSample = {0}
+

Index of the sub-sample.

+
+ +
+
+uint32_t viewport = {0}
+

Index of the viewport.

+
+ +
+
+ +
+ +
+

Warning

+

doxygenstruct: Cannot find class “dabfg::VrsRequirements” in doxygen xml output for project “daBFG” from directory: _build/breathe/doxygen/daBFG/xml

+
+
+
+class StateRequest
+

Represents a request for a certain global state to be set during the node’s execution.

+
+

Public Functions

+
+
+StateRequest setFrameBlock(const char *block) &&
+

Requests for a block to be set to FRAME layer Values of frame block shader vars are supposed to change once per frame.

+
+
Parameters:
+

block – The name of the block to set. Must be present in the shader dump.

+
+
+
+ +
+
+StateRequest setSceneBlock(const char *block) &&
+

Requests for a block to be set to SCENE layer. Values of scene block shader vars are supposed to change when the rendering mode changes. Examples of rendering modes are; depth pre-pass, shadow pass, color pass, voxelization pass, etc.

+
+
Parameters:
+

block – The name of the block to set. Must be present in the shader dump.

+
+
+
+ +
+
+StateRequest setObjectBlock(const char *block) &&
+

Requests for a block to be set to OBJECT layer. Per-object blocks are evil and should be avoided at all costs. They imply a draw-call-per-object model, which has historically proven itself antagonistic to performance.

+
+
Parameters:
+

block – The name of the block to set. Must be present in the shader dump.

+
+
+
+ +
+
+StateRequest allowWireframe() &&
+

Requests for the driver wireframe mode to be enabled for this node when the user turns it on for debug purposes.

+
+ +
+
+StateRequest vrs(VrsSettings vrs) &&
+

Configures VRS settings for this node.

+

The default settings correspond to no VRS.

+
+

Note

+

VRS will only work if it is supported and enabled through dabfg::update_external_state.

+
+
+
Parameters:
+

vrs – The VRS settings to use.

+
+
+
+ +
+
+StateRequest enableOverride(shaders::OverrideState override) &&
+

Requests a shader pipeline state override to be active while this node is executing.

+
+
Parameters:
+

override – The override to use.

+
+
+
+ +
+
+ +
+
+namespace dabfg
+
+

Variables

+
+
+constexpr int AUTO_MIP_COUNT = 0
+

Special value for Texture2dCreateInfo::mipLevels. daBfg will automatically generate all mip levels for such a texture.

+
+ +
+
+
+struct NamedSlot
+

Named slots do not represent any resource by default and must be explicitly set to point to a different resource through dabfg::fill_slot.

+
+

Public Functions

+
+
+inline explicit NamedSlot(const char *slot_name)
+

Enables using regular parentheses for construction.

+
+ +
+
+

Public Members

+
+
+const char *name
+

String name for this slot, must not match any other resource’s name.

+
+ +
+
+ +
+
+struct Texture2dCreateInfo
+

Specifies the creation parameters for a 2D texture.

+
+

Note

+

Resources will ALWAYS contain garbage right after they’ve been created. Use virtual passes to clear them if you need to, or write explicit clears.

+
+
+

Public Members

+
+
+uint32_t creationFlags = 0
+

Use TEXCF_ prefixed flags.

+
+ +
+
+eastl::variant<IPoint2, AutoResolutionRequest<2>> resolution
+

Resolution for this texture. May either be hard-coded or automatic, see AutoResolutionRequest.

+
+ +
+
+uint32_t mipLevels = 1
+

Use 0 for automatic mip levels.

+
+ +
+
+ +
+
+struct Texture3dCreateInfo
+

Specifies the creation parameters for a 3D volumetric texture.

+
+

Public Members

+
+
+uint32_t creationFlags = 0
+

Use TEXCF_ prefixed flags.

+
+ +
+
+eastl::variant<IPoint3, AutoResolutionRequest<3>> resolution
+

Resolution for this texture. May either be hard-coded or automatic, see AutoResolutionRequest.

+
+ +
+
+uint32_t mipLevels = 1
+

Use 0 for automatic mip levels.

+
+ +
+
+ +
+
+struct BufferCreateInfo
+

An effort to create a less error-prone buffers API is currently ongoing, this structure exposes the to-be-deprecated d3d::create_sbuffer() buffer creation mechanism. You are on your own trying to figure out how to use this.

+
+

Public Members

+
+
+uint32_t elementSize
+

Size of a single element in bytes.

+
+ +
+
+uint32_t elementCount
+

Amount of elements in this buffer.

+
+ +
+
+uint32_t flags
+

Use SBCF_ flags here.

+
+ +
+
+uint32_t format
+

This is for so-called T-buffers, which are basically 1d textures masquerading as buffers. If you are not targeting DX10, don’t use these

+
+ +
+
+ +
+ +
+
+class VirtualResourceCreationSemiRequest
+

A builder object for an incomplete resource creation request: we want to create something, but don’t know what yet. Note that all methods of this class return a new request object which should be used for further specification. Never re-use objects of this type for several requests.

+
+

Buffer methods

+

The buffer naming convention repeats the one in the d3d driver interface, see functions in namespace d3d::buffers

+
+
+

Public Functions

+
+
+inline VirtualResourceRequest<BaseTexture, RRP::None> texture(const Texture2dCreateInfo &info) &&
+

Specifies the request to be a 2D texture creation one.

+
+
Parameters:
+

info – The 2D texture creation info.

+
+
+
+ +
+
+inline VirtualResourceRequest<BaseTexture, RRP::None> texture(const Texture3dCreateInfo &info) &&
+

Specifies the request to be a 3D texture creation one.

+
+
Parameters:
+

info – The 3D texture creation info.

+
+
+
+ +
+
+inline VirtualResourceRequest<Sbuffer, RRP::None> buffer(const BufferCreateInfo &info) &&
+

Specifies the request to be a buffer creation one. Note that this is a legacy method that is error-prone and hard to use correctly. Avoid this in favor of one of the methods below if possible.

+
+
Parameters:
+

info – The buffer creation info.

+
+
+
+ +
+
+template<class T>
inline VirtualResourceRequest<T, RRP::None> blob() &&
+

Specifies the request to be a blob creation one.

+
+
Template Parameters:
+

T – The type of the CPU data blob

+
+
+
+ +
+
+template<class T>
inline VirtualResourceRequest<T, RRP::None> blob(const T defaultValue) &&
+

Specifies the request to be a blob creation one.

+
+
Template Parameters:
+

T – The type of the CPU data blob

+
+
Parameters:
+

defaultValue – The default value to initialize the blob with.

+
+
+
+ +
+
+ +
+
+template<detail::ResourceRequestPolicy policy>
class VirtualResourceSemiRequest
+

A builder object for an incomplete resource creation request: we want to read, modify or rename something, but don’t know what yet. Note that all methods of this class return a new request object which should be used for further specification. Never re-use objects of this type for several requests.

+
+
Template Parameters:
+

policy – Static data about this request’s structure used for erroring out at compile time if this class is used incorrectly.

+
+
+
+

Public Functions

+
+
+inline VirtualResourceRequest<BaseTexture, policy> texture() &&
+

Specifies this to be a texture request.

+
+ +
+
+inline VirtualResourceRequest<Sbuffer, policy> buffer() &&
+

Specifies this to be a buffer request.

+
+ +
+
+template<class T>
inline VirtualResourceRequest<T, policy> blob() &&
+

Specifies this to be a blob request.

+
+
Template Parameters:
+

T – The type of the blob to be requested.

+
+
+
+ +
+
+ +
+
+template<class Res, detail::ResourceRequestPolicy policy>
class VirtualResourceRequest
+

Request for a virtual resource known to BFG. Should be used to further configure the properties of the request.

+

The intended usage is

auto myTexHandle = registry.readTexture("my_tex")
+  .optional()
+  ...
+  .handle();
+
+
+ Hence methods are only rvalue-callable. Don’t try to get smart with these request classes. Don’t cache them, don’t pass them around a bunch of functions, KISS.

+
+
Template Parameters:
+
    +
  • Res – The C++ type representing this resource. BaseTex/Sbuffer for GPU resources, any C++ type for CPU resources.

  • +
  • policy – Static data about this request’s structure used for erroring out at compile time if this class is used incorrectly.

  • +
+
+
+
+

Public Functions

+
+
+inline VirtualResourceRequest<Res, flipPolicy(RRP::Optional)> optional() &&
+

Makes this request optional. The node will not get disabled if the resource is missing, the handle will return an empty value.

+
+ +
+
+inline VirtualResourceRequest<Res, flipPolicy(RRP::HasUsageType)> bindToShaderVar(const char *shader_var_name = nullptr) &&
+

Requests for this resource to be bound to a shader variable with the specified name. The usage stage MUST have been set beforehand and MUST include all shader stages that this shader var will be accessed from within this node.

+
+
Parameters:
+

shader_var_name – The name of the shader variable to bind. If not specified, the name of the resource will be used.

+
+
+
+ +
+
+template<auto projector, class = void>
inline VirtualResourceRequest<Res, policy> bindToShaderVar(const char *shader_var_name = nullptr) &&
+

Requests for a sub-object of a blob to be bound to a shader variable with the specified name.

+
+
Template Parameters:
+

projector – A function to extract the value to bind from the blob. Can be a pointer-to-member, i.e. &BlobType::field or a (pure) function pointer.

+
+
Parameters:
+

shader_var_name – The name of the shader variable to bind. If not specified, the name of the resource will be used.

+
+
+
+ +
+
+inline VirtualResourceRequest<Res, policy> bindAsView() &&
+

Requests for a matrix-like blob to be bound as the current view matrix.

+
+ +
+
+template<auto projector, class = void>
inline VirtualResourceRequest<Res, policy> bindAsView() &&
+

Requests for a matrix-like sub-object of a blob to be bound as the current view matrix.

+
+
Template Parameters:
+

projector – A function to extract the value to bind from the blob. Can be a pointer-to-member, i.e. &BlobType::field or a (pure) function pointer.

+
+
+
+ +
+
+inline VirtualResourceRequest<Res, policy> bindAsProj() &&
+

Requests for a matrix-like blob to be bound as the current projection matrix.

+
+ +
+
+template<auto projector, class = void>
inline VirtualResourceRequest<Res, policy> bindAsProj() &&
+

Requests for a matrix-like sub-object of a blob to be bound as the current projection matrix.

+
+
Template Parameters:
+

projector – A function to extract the value to bind from the blob. Can be a pointer-to-member, i.e. &BlobType::field or a (pure) function pointer.

+
+
+
+ +
+
+inline VirtualResourceRequest<Res, flipPolicy(RRP::HasUsageStage)> atStage(Stage stage) &&
+

Must be used when the resource is manually accessed through the handle or bound to a shader var to specify what shader stage this resource will be used at.

+
+ +
+
+inline VirtualResourceRequest<Res, flipPolicy(RRP::HasUsageType)> useAs(Usage type) &&
+

Must be used when the resource is manually accessed through the handle to specify how exactly the resource will be used.

+
+ +
+
+inline HandleType handle() &&
+

Returns a handle that can be used to access the physical resource underlying this virtual one during execution time. Note that the physical resource will change throughout executions and should never be cached by reference. See dabfg::VirtualResourceHandle for further details.

+
+ +
+
+ +
+
+class VirtualPassRequest
+

Requests this node to be inside a render pass with specified attachments. It is a virtual pass, as FG will merge these virtual passes into a single physical pass where possible. This class must be used to further specify the details of a virtual pass.

+

Attachments is a term that includes both render targets, depth targets and some other mobile-specific stuff. Note that methods that specify attachments take a special helper class, detail::VirtualAttachmentRequest. It is not necessary to understand how this class works, just call these methods either with a resource request or a string resource name, or even a {request/name, mip, layer} initializer list for tricky cases like cube maps.

+
+

Public Types

+
+
+using RwVirtualAttachmentRequest = detail::VirtualAttachmentRequest<RRP::Readonly | RRP::Optional | RRP::History | RRP::HasUsageStage | RRP::HasUsageType, RRP::None>
+

Resolve and RW depth cannot be readonly, optional or history requests. Usage should not have been specified yet.

+
+ +
+
+using ColorRwVirtualAttachmentRequest = detail::VirtualAttachmentRequest<RRP::Readonly | RRP::History | RRP::HasUsageStage | RRP::HasUsageType, RRP::None>
+

Color requests may be optional, but cannot be readonly or history. Usage is specified later.

+
+ +
+
+using DepthRoVirtualAttachmentRequest = detail::VirtualAttachmentRequest<RRP::Optional | RRP::HasUsageStage | RRP::HasUsageType, RRP::None>
+

RO depth is not allowed to be optional, as it doesn’t seem useful (may be changed later). Usage will be determined by us.

+
+ +
+
+using DepthRoAndSvBindVirtualAttachmentRequest = detail::VirtualAttachmentRequest<RRP::Optional | RRP::HasUsageType, RRP::None>
+

For RO depth that is also sampled through a shader var (SV), we also prohibit optional requests and while the usage type is determined by us (simultaneous depth+sampling), stage should be provided separately.

+
+ +
+
+using RoVirtualAttachmentRequest = detail::VirtualAttachmentRequest<RRP::History | RRP::HasUsageStage | RRP::HasUsageType, RRP::None>
+

Input attachments are not allowed to be history, as renderpasses cannot span frame boundaries. Usage is determined by us.

+
+ +
+
+

Public Functions

+
+
+VirtualPassRequest color(std::initializer_list<ColorRwVirtualAttachmentRequest> attachments) &&
+

Specifies color attachments for this virtual pass, which will be bound in the order specified here. A color attachment is a synonym for “render target”. Call this with a braced list of either request objects or resource names, and optionally mip/layer numbers grouped with an object or name using braces. E.g. {{"cube", 0, 1}, "normals", prevFrameMotionRequest}

+
+
Parameters:
+

attachments – A list of attachments to use as color ones. This method should be usable without understanding the internals of detail::VirtualAttachmentRequest most of the time.

+
+
+
+ +
+
+VirtualPassRequest depthRw(RwVirtualAttachmentRequest attachment) &&
+

Specifies the depth attachment for this virtual pass and enables depth write. The specified resource request MUST be a modify request. Call this with either a resource request object or an object name. You can also optionally specify mip/layer using braces: {"cube", 0, 1}.

+
+
Parameters:
+

attachment – The attachment to use as depth. This method should be usable without understanding the internals of detail::VirtualAttachmentRequest most of the time.

+
+
+
+ +
+
+VirtualPassRequest depthRoAndBindToShaderVars(DepthRoAndSvBindVirtualAttachmentRequest attachment, std::initializer_list<const char*> shader_var_names) &&
+

Specifies the depth attachment for this virtual pass, disables depth write and binds it to several shader variable for sampling inside a shader.

+

This can only be called with a resource request object and not a string name, due to requiring stage to be specified as all stages where these shader vars will be used.

+

Note however that the resource request may be either read or modify, which will determine the ordering for this node.

+

This is is only multi-usage API in daBfg, an exception to the one usage per node guideline.

+

Warning: switching between RO and RW depth requires decompression and recompression on AMD hardware, which is expensive.

+
+
Parameters:
+
    +
  • attachment – The resource request for the depth attachment.

  • +
  • shader_var_names – A list of shader var names to be bound.

  • +
+
+
+
+ +
+
+VirtualPassRequest clear(RwVirtualAttachmentRequest attachment, ResourceClearValue color) &&
+

Specifies that the attachment should be cleared with color at the beginning of this pass.

+
+

Warning

+

This causes a low-level pass break, so should be used sparingly.

+
+
+
Parameters:
+
    +
  • attachment – The attachment to clear.

  • +
  • color – The color to clear it with.

  • +
+
+
+
+ +
+
+inline VirtualPassRequest clear(RwVirtualAttachmentRequest attachment, const char *color_blob) &&
+

Specifies that the attachment should be cleared with the color contained in the color_blob at the beginning of this pass.

+

The requested blob’s type is inferred from the projector’s argument type.

+
+

Warning

+

This causes a low-level pass break, so should be used sparingly.

+
+
+
Parameters:
+
    +
  • attachment – The attachment to clear.

  • +
  • color – The name of the blob to grab the color from.

  • +
+
+
+
+ +
+
+template<auto projector>
inline VirtualPassRequest clear(RwVirtualAttachmentRequest attachment, const char *color_blob) &&
+

Specifies that the attachment should be cleared with the color contained in the color_blob at the beginning of this pass.

+

The requested blob’s type is inferred from the projector’s argument type.

+
+

Warning

+

This causes a low-level pass break, so should be used sparingly.

+
+
+
Template Parameters:
+

projector – A function to extract the color from the blob. Can be a pointer-to-member, i.e. &BlobType::field or a (pure) function pointer.

+
+
Parameters:
+
    +
  • attachment – The attachment to clear.

  • +
  • color – The name of the blob to grab the color from.

  • +
+
+
+
+ +
+
+VirtualPassRequest resolve(RwVirtualAttachmentRequest from, RwVirtualAttachmentRequest to) &&
+

Specifies that the attachment from is a MSAA texture that should be resolved to the texture to at the end of this pass.

+
+

Note

+

The resource from must have been previously requested as either a color or a depth attachment.

+
+
+
Parameters:
+
    +
  • from – The attachment to resolve.

  • +
  • to – The resource to resolve it to.

  • +
+
+
+
+ +
+
+VirtualPassRequest vrsRate(RoVirtualAttachmentRequest attachment) &&
+

Specifies the VRS rate texture attachment for this virtual pass.

+

The specified resource request MUST be a read. See d3d::set_variable_rate_shading_texture() for further details. Call this with either a resource request object or an object name. You can also optionally specify mip/layer using braces: {"cube", 0, 1}.

+
+

Warning

+

Currently, no driver supports mips/layers for VRS textures.

+
+
+
Parameters:
+

attachment – The attachment to use as a VRS rate. This method should be usable without understanding the internals of detail::VirtualAttachmentRequest most of the time.

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/daBFG/graphState.html b/api-references/dagor-render/index/daBFG/graphState.html new file mode 100644 index 000000000..45232b14a --- /dev/null +++ b/api-references/dagor-render/index/daBFG/graphState.html @@ -0,0 +1,239 @@ + + + + + + + Controlling the Graph State — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Controlling the Graph State

+

When a node is created using dabfg::register_node(), a handle +object is returned that must be used to control the lifetime of this +node. As soon as the handle is destroyed, the node is removed from the +graph.

+

The recommended approach for managing handles is to use feature specific +daECS entities. The idea is to encapsulate all of the “settings” required +for creating a node for a feature as well as a handle for that node +inside a single entity and automatically re-create the node when the +settings change using ECS tracking capabilities. When the feature is +disabled, the entity is destroyed and the node is removed from the graph +automagically.

+

Note also that the handles are generational, so it is safe to simply +assign a new node handle to a component without explicitly resetting the +old node handle.

+
+
+class NodeHandle
+

Holds ownership over a node’s lifetime. As soon as a handle to a node destroyed, the node is unregistered, but only if it was not re-registered since the time that this handle was acquired.

+

Note that this is a move-only type.

+
+

Public Functions

+
+
+NodeHandle() = default
+

Constructs an invalid handle.

+
+ +
+
+inline NodeHandle(NodeHandle &&other)
+

Move constructor.

+
+ +
+
+inline NodeHandle &operator=(NodeHandle &&other)
+

Move assignment operator.

+
+ +
+
+inline bool valid() const
+

Returns true if the handle is valid.

+
+ +
+
+inline explicit operator bool() const
+

Returns true if the handle is valid.

+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/daBFG/runtime.html b/api-references/dagor-render/index/daBFG/runtime.html new file mode 100644 index 000000000..5a3556073 --- /dev/null +++ b/api-references/dagor-render/index/daBFG/runtime.html @@ -0,0 +1,272 @@ + + + + + + + Dispatching Work in Nodes at Runtime — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dispatching Work in Nodes at Runtime

+

The general aim of the daBfg API is to do as much boiler-plate stuff for you as possible. +It can automatically manage resources, bind them to shader vars, etc. +However, when porting legacy code to daBfg, it is often necessary to do some of the work yourself by getting direct access to FG-managed textures and buffers. +When working with CPU blobs, getting the data from inside them is often the primary concern. +To facilitate this, it is possible to extract a handle to a resource inside the declaration callback using the dabfg::VirtualResourceRequest::handle() method. +This handle should then be captured inside the execution callback and dereferenced to get access to the ManagedResView encapsulating a physical GPU resource and it’s D3DRESID (acquired by registering it within the engine resource manager).

+
auto handle = dabfg::register_node("node_name", DABFG_PP_NODE_SRC,
+  [](dabfg::Registry registry)
+  {
+    auto texHndl = registry.read("my_tex")
+      .texture()
+      .atStage(dabfg::Stage::PS)
+      .useAs(dabfg::Usage::SHADER_RESOURCE)
+      .handle(); // Is only callable after the stage/usage were specified
+    return [texHndl]()
+      {
+        legacy_code(texHndl.view());
+      };
+  });
+
+
+

Below is the full documentation of the VirtualResourceHandle class.

+
+
+template<class Res, bool gpu, bool optional>
class VirtualResourceHandle
+

Handle to a virtual resource managed by BFG. Does not actually represent a physical GPU or CPU resource until the execution callback gets called. The physical resource will also change between calls to the execution callback, so the dereferenced value of this handle should NEVER be cached anywhere.

+

All methods are const & as this is supposed to be called from within the node execution callback.

+
+
Template Parameters:
+
    +
  • Res – BaseTexture or Sbuffer when gpu == true, otherwise arbitrary CPU data type.

  • +
  • gpu – True iff this handle represents a GPU resource.

  • +
  • optional – True iff this handle can refer to a missing resource.

  • +
+
+
+
+

Public Functions

+
+
+inline Res &ref() const &
+

Returns a reference to the provided resource. Only defined for mandatory handles.

+

For read requests, this always returns a const reference. Due to unfortunate coupling of textures with samplers, sometimes this constness needs to be violated. Use .view() for that.

+
+
Returns:
+

A non-nullable reference to the resource.

+
+
+
+ +
+
+inline Res *get() const &
+

Returns a pointer to the provided resource, or nullptr for missing optional resources. Always check for null when using this!

+

For read requests, this always returns a const reference. Due to unfortunate coupling of textures with samplers, sometimes this constness needs to be violated. Use .view() for that.

+
+
Returns:
+

A pointer to the resource that may be nullptr for optional requests.

+
+
+
+ +
+
+inline View view() const &
+

Returns a managed view to a provided GPU resource, or an empty view for missing optional resources.

+
+
Returns:
+

A ManagedResView to the GPU resource that may be empty for optional requests.

+
+
+
+ +
+
+inline D3DRESID d3dResId() const &
+

Returns the engine resource manager ID for a provided GPU resource, or a BAD_RESID for a missing optional resource.

+
+
Returns:
+

A D3DRESID to the GPU resource that may be BAD_RESID for optional requests.

+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/resMgr.html b/api-references/dagor-render/index/resMgr.html new file mode 100644 index 000000000..5e200b15b --- /dev/null +++ b/api-references/dagor-render/index/resMgr.html @@ -0,0 +1,192 @@ + + + + + + + Managed Resources — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Managed Resources

+

Dagor provides a resource management system built on top of the d3d API. +This system handles streaming of texture assets (through integration with +the d3d API drivers), resource lifetime management, and indirect access +to resources through managed IDs or string names.

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/resMgr/general.html b/api-references/dagor-render/index/resMgr/general.html new file mode 100644 index 000000000..b56360241 --- /dev/null +++ b/api-references/dagor-render/index/resMgr/general.html @@ -0,0 +1,613 @@ + + + + + + + General Resource Management — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

General Resource Management

+

Automatic resource manager for D3D resources.

+

Glossary:

    +
  • level - feature of texture size, computed as log2(max(tex.dimensions)) = log2(max(tex.w, tex.h, tex.d)):

      +
    1. level=1 means smallest possing size (2x2x2) and is commonly used to denote smallest quality;

    2. +
    3. level=15 means maximum possible size (up to 32767x32768, but current GPUs don’t handle such res);

    4. +
    5. level=2..15 means some non-stub quality. Variables for holding level usually have suffix Lev or _lev

    6. +
    +

  • +
  • QL - quality level (or TQL - texture quality level), do not confuse it with ‘level’. Some predefined quality preset of texture (stub, thumbnail, base, high, ultrahigh, etc.) Enumerated later with TexQL enum (TQL_*). Variables for holding quality level usually have suffix QL or _ql.

  • +
  • LFU - last frame used, ordinary rendered frame counter (generally from game start) where texture was referenced last time

  • +
  • levDesc - levels descriptor that maps QL to real levels (e.g. TQL_thumb -> level=6, TQL_base -> level=9)

  • +
+

+
+

Helper wrappers

+

See iterate_all_managed_d3dres(). Use as follows:

+
for (D3DRESID id = first_managed_d3dres(); id != BAD_D3DRESID; id = next_managed_d3dres(id)) 
+
+
+

Get the first managed resource ID for iteration

+
param min_rc:
+

Minimum reference count filter

+
+
+
+
return:
+

First managed resource ID with refCount >= min_rc

+
+
+

+
+
+inline D3DRESID first_managed_d3dres(int min_rc = 0)
+
+ +
+
+inline D3DRESID next_managed_d3dres(D3DRESID prev_id, int min_rc = 0)
+

Get the next managed resource ID for iteration.

+
+
Parameters:
+
    +
  • prev_id – ID of the previous resource

  • +
  • min_rc – Minimum reference count filter

  • +
+
+
Returns:
+

Next managed resource ID after prev_id with refCount >= min_rc

+
+
+
+ +
+
+

Enums

+
+
+enum TexQL
+

Quality levels for textures (QL)

+

Values:

+
+
+enumerator TQL_stub
+

stub (shared 1x1 placeholder)

+
+ +
+
+enumerator TQL_thumb
+

thumbnail quality (upto 64x64, total mem size <= 4K)

+
+ +
+
+enumerator TQL_base
+

base quality (low split)

+
+ +
+
+enumerator TQL_high
+

full quality (HQ)

+
+ +
+
+enumerator TQL_uhq
+

ultra high quality

+
+ +
+
+enumerator TQL__COUNT
+

enum item count

+
+ +
+
+enumerator TQL__FIRST
+
+ +
+
+enumerator TQL__LAST
+
+ +
+ +
+
+

Functions

+
+
+D3DRESID register_managed_res(const char *name, D3dResource *res)
+

Registers external D3D resource with the specified name as managed and returns the D3DRESID for it.

+

Specified resource becomes owned by the manager, no factory is assigned to it. RefCount is set to 1 and when it eventually reaches 0, the resource is automatically destroyed and the name is evicted. Use release_managed_res() or release_managed_res_verified() to del ref and finally destroy.

+
+

Warning

+

Resource name is case-insensitive and must be unique.

+
+
+
Parameters:
+
    +
  • name – the name to register the resource under

  • +
  • res – the resource to register

  • +
+
+
Returns:
+

the D3DRESID for the registered resource

+
+
+
+ +
+
+bool is_managed_res_factory_set(D3DRESID id)
+

Checks whether creation/release factory is set for D3DRESID.

+

E.g. for an ID that was acquired from register_managed_res(), it will return false.

+
+
Parameters:
+

id – the D3DRESID to check

+
+
Returns:
+

true if a factory was specified for the D3DRESID

+
+
+
+ +
+
+D3dResource *acquire_managed_res(D3DRESID id)
+

Acquires resource object and increments resource reference count.

+

If resource was not referenced yet, it is created. If it is unavailable (bad ID), nullptr is returned. Logically paired with release_managed_res().

+
+

Note

+

When factory fails to create texture, missing texture handling may be applied.

+
+
+
Parameters:
+

id – the managed ID to acquire

+
+
Returns:
+

the acquired resource object or nullptr if the ID is invalid

+
+
+
+ +
+
+void release_managed_res(D3DRESID id)
+

Releases resource object and decrements resource reference count.

+

When reference count reaches 0, resource may be released. Logically paired with acquire_managed_res()

+
+
Parameters:
+

id – the managed ID to release

+
+
+
+ +
+
+void release_managed_res_verified(D3DRESID &id, D3dResource *check_res)
+

Releases resource object and decrements resource reference count, but additionally checks that the managed resource is the same as check_res.

+

When reference count reaches 0, resource may be released. Logically paired with acquire_managed_res() On resource destruction (when name is unregistered) id is set to BAD_D3DRESID

+
+
Parameters:
+
    +
  • id – the managed ID to release

  • +
  • check_res – the resource to check against

  • +
+
+
+
+ +
+
+BaseTexture *acquire_managed_tex(D3DRESID id)
+

Acquires resource object and increments resource reference count.

+

If resource was not referenced yet, it is created. If it is unavailable (bad ID), nullptr is returned. Logically paired with release_managed_res().

+
+

Note

+

When factory fails to create texture, missing texture handling may be applied.

+
+
+
Parameters:
+

id – the managed ID to acquire

+
+
Returns:
+

the acquired resource object or nullptr if the ID is invalid

+
+
+
+ +
+
+static inline void release_managed_tex(D3DRESID id)
+

Releases resource object and decrements resource reference count.

+

When reference count reaches 0, resource may be released. Logically paired with acquire_managed_res()

+
+
Parameters:
+

id – the managed ID to release

+
+
+
+ +
+
+template<class T>
static inline void release_managed_tex_verified(D3DRESID &id, T &tex)
+

Releases resource object and decrements resource reference count, but additionally checks that the managed resource is the same as check_res.

+

When reference count reaches 0, resource may be released. Logically paired with acquire_managed_res() On resource destruction (when name is unregistered) id is set to BAD_D3DRESID

+
+
Parameters:
+
    +
  • id – the managed ID to release

  • +
  • check_res – the resource to check against

  • +
+
+
+
+ +
+
+Sbuffer *acquire_managed_buf(D3DRESID id)
+

Acquires resource object and increments resource reference count.

+

If resource was not referenced yet, it is created. If it is unavailable (bad ID), nullptr is returned. Logically paired with release_managed_res().

+
+

Note

+

When factory fails to create texture, missing texture handling may be applied.

+
+
+
Parameters:
+

id – the managed ID to acquire

+
+
Returns:
+

the acquired resource object or nullptr if the ID is invalid

+
+
+
+ +
+
+static inline void release_managed_buf(D3DRESID id)
+

Releases resource object and decrements resource reference count.

+

When reference count reaches 0, resource may be released. Logically paired with acquire_managed_res()

+
+
Parameters:
+

id – the managed ID to release

+
+
+
+ +
+
+template<class T>
static inline void release_managed_buf_verified(D3DRESID &id, T &buf)
+

Releases resource object and decrements resource reference count, but additionally checks that the managed resource is the same as check_res.

+

When reference count reaches 0, resource may be released. Logically paired with acquire_managed_res() On resource destruction (when name is unregistered) id is set to BAD_D3DRESID

+
+
Parameters:
+
    +
  • id – the managed ID to release

  • +
  • check_res – the resource to check against

  • +
+
+
+
+ +
+
+const char *get_managed_res_name(D3DRESID id)
+

Gets the name for a managed resource by ID, or nullptr if ID is invalid.

+
+
Parameters:
+

id – the D3DRESID to get the name for

+
+
Returns:
+

the name of the managed resource with ID id or nullptr

+
+
+
+ +
+
+D3DRESID get_managed_res_id(const char *res_name)
+

Gets managed resource ID by its name, or BAD_D3DRESID if name is invalid.

+
+
Parameters:
+

res_name – the name of the resource to get the ID for

+
+
Returns:
+

the managed resource ID that corresponds to res_name or BAD_D3DRESID if the name is invalid

+
+
+
+ +
+
+inline int get_managed_res_refcount(D3DRESID id)
+

Gets the reference count for a managed resource by ID.

+
+
Parameters:
+

id – the ID to get the reference count for

+
+
Returns:
+

the reference count for the D3DRESID resource or a negative value if the resource is missing

+
+
+
+ +
+
+inline unsigned get_managed_res_lfu(D3DRESID id)
+

Gets the last-frame-used (LFU) counter for a managed ID.

+
+
Parameters:
+

id – the ID to get the LFU counter for

+
+
Returns:
+

the last-frame-used counter for the D3DRESID resource or 0 if the resource is missing/unregistered

+
+
+
+ +
+
+inline TexQL get_managed_res_cur_tql(D3DRESID id)
+

Gets the current quality level (TQL_*) for a managed ID.

+
+
Parameters:
+

id – the ID to get the quality level for

+
+
Returns:
+

the current quality level for the D3DRESID resource or TQL_stub if the resource is missing/unregistered

+
+
+
+ +
+
+inline TexQL get_managed_res_max_tql(D3DRESID id)
+

Gets the maximum available quality level (TQL_*) for a managed ID.

+
+
Parameters:
+

id – the D3DRESID to get the quality level for

+
+
Returns:
+

the current quality level for the D3DRESID resource or TQL_stub if the resource is missing/unregistered

+
+
+
+ +
+
+inline unsigned get_managed_res_maxreq_lev(D3DRESID id)
+

Gets the maximum requested level for a managed ID, i.e. log2(tex.dimension). Do not confuse it with QL!

+
+
Parameters:
+

id – the D3DRESID to get the loaded level for

+
+
Returns:
+

the current loaded level for id or 0 if the resource is missing/unregistered

+
+
+
+ +
+
+inline unsigned get_managed_res_loaded_lev(D3DRESID id)
+

Gets the current loaded level for a managed ID, i.e. log2(tex.dimension). Do not confuse it with QL!

+
+
Parameters:
+

id – the D3DRESID to get the loaded level for

+
+
Returns:
+

the current loaded level for id or 0 if the resource is missing/unregistered

+
+
+
+ +
+
+void enable_res_mgr_mt(bool enable, int max_res_entry_count)
+

Enables or disables multithreading support for resource manager and preallocates internal structures to handle upto max_res_entry_count resource entries without reallocations.

+

enable_res_mgr_mt(false, -1) will disable multithreading support and shrink entries array to used size

+
+
Parameters:
+
    +
  • enable – whether to enable multithreading support

  • +
  • max_res_entry_count – the maximum number of resource entries to preallocate or -1 to shrink to fit

  • +
+
+
+
+ +
+
+D3DRESID iterate_all_managed_d3dres(D3DRESID after_rid, int min_ref_count)
+

Utility for iterating all managed resources.

+

Managed resources form a linked list, so for an arbitrary ID, this function returns the “next” ID in the list. Hence one is supposed to call this function in a loop until it returns BAD_D3DRESID.

+
+
Parameters:
+
    +
  • after_rid – ID of the texture to get the next texture for. Use BAD_D3DRESID to start iteration.

  • +
  • min_ref_count – Minimum reference count filter

  • +
+
+
Returns:
+

Some ID that follows after_rid and has refCount >= min_ref_count OR BAD_RESID if the iteration is done.

+
+
+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/resMgr/resid.html b/api-references/dagor-render/index/resMgr/resid.html new file mode 100644 index 000000000..0e51da6ef --- /dev/null +++ b/api-references/dagor-render/index/resMgr/resid.html @@ -0,0 +1,342 @@ + + + + + + + Resource IDs — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Resource IDs

+
+
+class D3DRESID
+

An indirect identifier for a resource.

+

Resource IDs are used to indirectly identify resources in the engine. The indirection is then used for streaming and stubbing out resources which are not yet loaded. E.g. binding SRVs to shaders is usually done through the shader var system, which in turn uses resource IDs and not raw texture object pointers.

+
+

Note

+

Consists of an index for an entry inside the resource manager and a generation counter to distinguish between different resources stored within the same slot. For most uses these details are of little importance.

+
+
+

Comparison operators

+

IDs are totally ordered w.r.t. the underlying representation to allow for use in ordered containers. No semantic meaning is attached to the ordering.

+
+
+inline bool operator==(const D3DRESID &rhs) const
+
+ +
+
+inline bool operator!=(const D3DRESID &rhs) const
+
+ +
+
+inline bool operator<(const D3DRESID &rhs) const
+
+ +
+
+inline bool operator>(const D3DRESID &rhs) const
+
+ +
+
+

Public Functions

+
+
+constexpr D3DRESID() = default
+

Constructs an invalid resource ID.

+
+ +
+
+D3DRESID(const D3DRESID &rhs) = default
+
+ +
+
+D3DRESID(D3DRESID &&rhs) = default
+
+ +
+
+D3DRESID &operator=(const D3DRESID&) = default
+
+ +
+
+D3DRESID &operator=(D3DRESID&&) = default
+
+ +
+
+inline explicit constexpr D3DRESID(unsigned h)
+

Conversion from the underlying representation.

+
+ +
+
+inline explicit operator unsigned() const
+

Conversion to the underlying representation.

+
+ +
+
+inline explicit operator bool() const
+

Checks validity of the handle (it still might be broken though)

+
+ +
+
+inline void reset()
+

Resets the resource ID to an invalid state.

+
+ +
+
+inline unsigned index() const
+

Gets the entry index for this ID.

+
+ +
+
+inline unsigned generation() const
+

Gets the entry value generation for this ID.

+
+ +
+
+inline bool checkMarkerBit() const
+

Checks whether the ID is not broken (generation MUST be odd)

+
+ +
+
+

Public Static Functions

+
+
+static inline D3DRESID make(unsigned index, unsigned gen)
+

Creates a new resource ID from an index and a generation.

+
+
Parameters:
+
    +
  • index – The resource manager entry index

  • +
  • gen – The generation counter for the resource

  • +
+
+
Returns:
+

A new resource ID

+
+
+
+ +
+
+static D3DRESID fromIndex(unsigned index)
+

Creates a new resource ID from an index.

+

The generation counter is acquired from the resource manager entry corresponding to the index.

+
+
Parameters:
+

index – The resource manager entry index

+
+
Returns:
+

A new resource ID

+
+
+
+ +
+
+ +
+
+static constexpr D3DRESID BAD_D3DRESID
+

An invalid resource ID constant.

+
+ +

Legacy aliases are also provided for compatibility with older code from +times where only textures were supported for resource management.

+
+
+typedef D3DRESID TEXTUREID
+

Alias for backward compatibility and readability.

+
+ +
+
+static constexpr D3DRESID BAD_TEXTUREID
+

Alias for backwards compatibility and readability.

+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/resMgr/textures.html b/api-references/dagor-render/index/resMgr/textures.html new file mode 100644 index 000000000..00ead066b --- /dev/null +++ b/api-references/dagor-render/index/resMgr/textures.html @@ -0,0 +1,1014 @@ + + + + + + + Texture Management — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Texture Management

+
+

Helper wrappers

+

See iterate_all_managed_textures(). Use as follows:

+
for (TEXTUREID id = first_managed_texture(); id != BAD_TEXTUREID; id = next_managed_texture(id)) 
+
+
+

Get the first managed texture ID for iteration

+
param min_rc:
+

Minimum reference count filter

+
+
+
+
return:
+

First managed texture ID with refCount >= min_rc

+
+
+

+
+
+inline TEXTUREID first_managed_texture(int min_rc = 0)
+
+ +
+
+inline TEXTUREID next_managed_texture(TEXTUREID prev_id, int min_rc = 0)
+

Get the next managed texture ID for iteration.

+
+
Parameters:
+
    +
  • prev_id – ID of the previous texture

  • +
  • min_rc – Minimum reference count filter

  • +
+
+
Returns:
+

Next managed texture ID after prev_id with refCount >= min_rc

+
+
+
+ +
+
+

Functions

+
+
+D3DRESID register_managed_tex(const char *name, BaseTexture *res)
+

Registers external D3D resource with the specified name as managed and returns the D3DRESID for it.

+

Specified resource becomes owned by the manager, no factory is assigned to it. RefCount is set to 1 and when it eventually reaches 0, the resource is automatically destroyed and the name is evicted. Use release_managed_res() or release_managed_res_verified() to del ref and finally destroy.

+
+

Warning

+

Resource name is case-insensitive and must be unique.

+
+
+
Parameters:
+
    +
  • name – the name to register the resource under

  • +
  • res – the resource to register

  • +
+
+
Returns:
+

the D3DRESID for the registered resource

+
+
+
+ +
+
+static inline bool is_managed_tex_factory_set(D3DRESID id)
+

Checks whether creation/release factory is set for D3DRESID.

+

E.g. for an ID that was acquired from register_managed_res(), it will return false.

+
+
Parameters:
+

id – the D3DRESID to check

+
+
Returns:
+

true if a factory was specified for the D3DRESID

+
+
+
+ +
+
+static inline const char *get_managed_texture_name(D3DRESID id)
+

Gets the name for a managed resource by ID, or nullptr if ID is invalid.

+
+
Parameters:
+

id – the D3DRESID to get the name for

+
+
Returns:
+

the name of the managed resource with ID id or nullptr

+
+
+
+ +
+
+static inline D3DRESID get_managed_texture_id(const char *res_name)
+

Gets managed resource ID by its name, or BAD_D3DRESID if name is invalid.

+
+
Parameters:
+

res_name – the name of the resource to get the ID for

+
+
Returns:
+

the managed resource ID that corresponds to res_name or BAD_D3DRESID if the name is invalid

+
+
+
+ +
+
+static inline int get_managed_texture_refcount(D3DRESID id)
+

Gets the reference count for a managed resource by ID.

+
+
Parameters:
+

id – the ID to get the reference count for

+
+
Returns:
+

the reference count for the D3DRESID resource or a negative value if the resource is missing

+
+
+
+ +
+
+static inline void enable_tex_mgr_mt(bool enable, int max_res_entry_count)
+

Enables or disables multithreading support for resource manager and preallocates internal structures to handle upto max_res_entry_count resource entries without reallocations.

+

enable_res_mgr_mt(false, -1) will disable multithreading support and shrink entries array to used size

+
+
Parameters:
+
    +
  • enable – whether to enable multithreading support

  • +
  • max_res_entry_count – the maximum number of resource entries to preallocate or -1 to shrink to fit

  • +
+
+
+
+ +
+
+TEXTUREID add_managed_texture(const char *name, TextureFactory *factory = nullptr)
+

Adds entry for managed texture name and returns TEXTUREID for it.

+

When entry for ‘name’ already exists, it just returns TEXTUREID. For new entry ‘factory’ is set as creator, for existing entry ‘factory’ must be nullptr.

+
+

Warning

+

Texture name is case-insensitive and must be unique.

+
+
+
Parameters:
+
    +
  • name – Name that uniquely identifies the texture

  • +
  • factory – Custom texture creation mechanism, must be nullptr for existing textures

  • +
+
+
Returns:
+

Managed ID of the texture

+
+
+
+ +
+
+TEXTUREID add_managed_array_texture(const char *name, dag::ConstSpan<const char*> tex_slice_nm)
+

Adds or updates entry for managed array texture name, stores creation properties and returns TEXTUREID for it.

+

Array texture will be composed of slices with texture names tex_slice_nm.

+
+

Warning

+

Textures in slices must have the same format and size, and furthermore, some restrictions of DDSx flags apply.

+
+
+
Parameters:
+
    +
  • name – Name that uniquely identifies the new array texture

  • +
  • tex_slice_nm – Array of texture names to use as slices

  • +
+
+
Returns:
+

Managed ID of the texture

+
+
+
+ +
+
+TEXTUREID update_managed_array_texture(const char *name, dag::ConstSpan<const char*> tex_slice_nm)
+

Updates an existing array texture entry with new slices.

+
+

Note

+

Simply calls add_managed_texture() under the hood, this function exists purely for readability purposes.

+
+
+

Warning

+

The number of slices must match the original array texture.

+
+
+
Parameters:
+
    +
  • name – Name of the array texture to update

  • +
  • tex_slice_nm – Array of new texture names to use as slices

  • +
+
+
Returns:
+

Managed ID of the array texture that was updated

+
+
+
+ +
+
+unsigned reload_managed_array_textures_for_changed_slice(const char *slice_tex_name)
+

Checks all registered array textures and reloads those referencing specified slice.

+
+
Parameters:
+

slice_tex_name – Name of changed texture that can be used as slice in some array texture

+
+
Returns:
+

Number of reloaded array textures (or 0 if no array texture reference that slice)

+
+
+
+ +
+
+bool evict_managed_tex_id(TEXTUREID &id)
+

Schedules removal of the managed entry for the specified id and sets id to BAD_TEXTUREID (unconditionally, even if the operation fails or is deferred).

+

When refCount = 0, removal is performed immediately, otherwise it is deferred. Can be used to remove entries created with register_managed_tex(), add_managed_texture(), add_managed_array_texture()

+
+
Parameters:
+

id – ID of the texture to remove

+
+
Returns:
+

true if the texture was removed immediately, false otherwise, including if the operation was invalid.

+
+
+
+ +
+
+bool check_managed_texture_loaded(TEXTUREID id, bool fq_loaded = false)
+

Checks whether contents of managed texture was loaded.

+
+
Parameters:
+
    +
  • id – ID of the texture to check

  • +
  • fq_loadedtrue to check for full quality, false for any quality

  • +
+
+
Returns:
+

true if the texture is loaded, false otherwise

+
+
+
+ +
+
+bool check_all_managed_textures_loaded(dag::ConstSpan<TEXTUREID> id, bool fq_loaded = false, bool ignore_unref_tex = true)
+

Checks whether contents of all managed textures in list was loaded, analogous to calling check_managed_texture_loaded() multiple times.

+
+

Note

+

Skips checks for textures with refcount=0 by default.

+
+
+
Parameters:
+
    +
  • id – List of texture IDs to check.

  • +
  • fq_loadedtrue to check for full quality, false for any quality

  • +
  • ignore_unref_textrue to skip textures with refcount=0

  • +
+
+
Returns:
+

true if all textures (excluding those with refcount=0 if ignore_unref_tex is true) are loaded, false otherwise.

+
+
+
+ +
+
+bool change_managed_texture(TEXTUREID id, BaseTexture *new_texture, TextureFactory *factory = NULL)
+

Replaces the texture for managed id id.

+
+
Parameters:
+
    +
  • id – ID of the texture to replace

  • +
  • new_texture – New driver texture to use for this id

  • +
  • factory – Custom texture creation mechanism

  • +
+
+
Returns:
+

true if the texture was replaced successfully, false otherwise

+
+
+
+ +
+
+void discard_unused_managed_texture(TEXTUREID id)
+

Discards unused texture: unloads texture when refCount=0, does nothing otherwise.

+
+
Parameters:
+

id – ID of the texture to discard

+
+
+
+ +
+
+void discard_unused_managed_textures()
+

Iterate all managed textures and unload those with refCount=0.

+
+ +
+
+inline void mark_managed_tex_lfu(TEXTUREID id, unsigned req_lev = 15)
+

Set current frame as ‘last frame used’ for texture.

+
+
Parameters:
+
    +
  • id – ID of the texture to mark

  • +
  • req_lev – Quality level that was used on this frame

  • +
+
+
+
+ +
+
+bool prefetch_managed_texture(TEXTUREID id)
+

Request texture content load.

+
+
Parameters:
+

id – ID of the texture to load

+
+
Returns:
+

true when texture already loaded, false otherwise

+
+
+
+ +
+
+bool prefetch_managed_textures(dag::ConstSpan<TEXTUREID> id)
+

Requests texture content load for a list of textures, the same as calling prefetch_managed_texture() multiple times.

+
+
Parameters:
+

id – List of texture IDs to load

+
+
Returns:
+

true when all textures are already loaded

+
+
+
+ +
+
+bool prefetch_managed_textures_by_textag(int textag)
+

Requests texture content load for list of textures by TEXTAG.

+
+
Parameters:
+

textag – The tag to load textures for

+
+
Returns:
+

true when all textures with the tag are already loaded

+
+
+
+ +
+
+void mark_managed_textures_important(dag::ConstSpan<TEXTUREID> id, unsigned add_importance = 1, int min_lev_for_dyn_decrease = 16)
+

Marks list of textures as important (to force loading content upto requested quality level as soon as possible)

+
+
Parameters:
+
    +
  • id – List of texture IDs to mark

  • +
  • add_importance – Additional importance to add to the textures

  • +
  • min_lev_for_dyn_decrease – important textures with more levels min can be downgraded 1 mip when dyn decrease used

  • +
+
+
+
+ +
+
+void reset_managed_textures_streaming_state()
+

Resets streaming state of textures so that they can be reloaded respecting the global tex quality settings changes.

+
+ +
+
+void set_default_tex_factory(TextureFactory *tf)
+

Sets the default texture factory to use for managed textures.

+
+ +
+
+TextureFactory *get_default_tex_factory()
+

Gets the default texture factory.

+
+ +
+
+TextureFactory *get_symbolic_tex_factory()
+

Gets the symbolic texture factory which always produces nulls for texture creation.

+
+ +
+
+TextureFactory *get_stub_tex_factory()
+

Gets the stub texture factory which always produces stub 1x1 textures.

+
+ +
+
+void init_managed_textures_streaming_support(int reload_jobmgr_id = -2)
+

Init data and callbacks to support streaming.

+

Settings are taken from dgs_get_settings()->getBlockByName(“texStreaming”).

+
+

Note

+

reload_jobmgr_id=-2 means auto creation of jobmanager, reload_jobmgr_id=-1 means no jobmanager

+
+
+
Parameters:
+

rload_jobmgr_id – Either -1 or -2, controls whether to create a job manager for texture streaming

+
+
+
+ +
+
+bool is_managed_textures_streaming_active()
+

Checks whether texture streaming is inited and active.

+
+
Returns:
+

true if texture streaming is active, false otherwise

+
+
+
+ +
+
+bool is_managed_textures_streaming_load_on_demand()
+

Checks whether texture streaming loads textures only when used.

+
+
Returns:
+

true if texture streaming is load-on-demand, false otherwise

+
+
+
+ +
+
+bool is_managed_texture_incomplete(TEXTUREID id)
+

Checks whether the specified texture is split BQ/HQ with missing HQ part.

+
+
Parameters:
+

id – ID of the texture to check

+
+
Returns:
+

true if the texture is missing HQ part, false otherwise

+
+
+
+ +
+
+void load_anisotropy_from_settings()
+

Re-loads anisotropy config from settings.

+
+ +
+
+void add_anisotropy_exception(TEXTUREID id)
+

Marks that a texture’s anisotropy should not be changed automatically.

+
+
Parameters:
+

id – ID of the texture to mark

+
+
+
+ +
+
+void reset_anisotropy(const char *tex_name_filter = nullptr)
+

Resets anisotropy for all textures whose name contains tex_name_filter as a substring.

+
+
Parameters:
+

tex_name_filter – Substring filter to match texture names

+
+
+
+ +
+
+inline bool prefetch_and_check_managed_texture_loaded(TEXTUREID id, bool fq_loaded = false)
+

Attempts to load the texture for usage on the current frame and simply checks for immediate success.

+
+
Parameters:
+
    +
  • id – ID of the texture to load and check

  • +
  • fq_loadedtrue to check for full quality, false for any quality

  • +
+
+
Returns:
+

true if the texture is loaded, false otherwise

+
+
+
+ +
+
+bool prefetch_and_check_managed_textures_loaded(dag::ConstSpan<TEXTUREID> tex_list, bool fq_loaded = false)
+

Attempts to load multiple textures for usage on the current frame and check for immediate success.

+
+
Parameters:
+
    +
  • tex_list – List of texture IDs to load and check

  • +
  • fq_loadedtrue to check for full quality, false for any quality

  • +
+
+
Returns:
+

true if all textures are loaded, false otherwise

+
+
+
+ +
+
+void prefetch_and_wait_managed_textures_loaded(dag::ConstSpan<TEXTUREID> tex_list, bool fq_loaded = false)
+

Synchronously loads a list of textures, blocking the current thread until all textures are loaded.

+
+
Parameters:
+
    +
  • tex_list – List of texture IDs to load

  • +
  • fq_loadedtrue to wait for full quality, false for any quality

  • +
+
+
+
+ +
+
+TEXTUREID iterate_all_managed_textures(TEXTUREID after_tid, int min_ref_count)
+

Utility for iterating all managed textures.

+

Managed textures form a linked list, so for an arbitrary ID, this function returns the “next” ID in the list. Hence one is supposed to call this function in a loop until it returns BAD_TEXTUREID.

+
+
Parameters:
+
    +
  • after_tid – ID of the texture to get the next texture for. Use BAD_TEXTUREID to start iteration.

  • +
  • min_ref_count – Minimum reference count filter

  • +
+
+
Returns:
+

Some ID that follows after_tid and has refCount >= min_ref_count OR BAD_TEXTUREID if the iteration is done.

+
+
+
+ +
+
+TEXTUREID get_max_managed_texture_id()
+

Access to the highest valid texture ID for storing properties of managed textures in arrays.

+
+
Returns:
+

Highest valid texture ID

+
+
+
+ +
+
+inline bool is_managed_texture_id_valid(TEXTUREID tid, bool validate_value)
+

returns true when tid resembles texture ID and (optionally checked) contains valid value (non-BAD and has proper generation)

+
+ +
+
+TextureMetaData get_texture_meta_data(TEXTUREID id)
+

Get texture meta data.

+
+
Parameters:
+

id – ID of the texture to get the meta data for

+
+
+
+ +
+
+d3d::SamplerInfo get_sampler_info(const TextureMetaData &texture_meta_data, bool force_addr_from_tmd = true)
+

Get a sampler info structure from texture meta data.

+
+ +
+
+d3d::SamplerHandle get_texture_separate_sampler(TEXTUREID id)
+

Returns separate sampler for the texture ID.

+
+

Note

+

Returned sampler must not be destroyed

+
+
+

Note

+

The function is not thread-safe, and the caller must ensure that there are no concurrent setters for this texture ID

+
+
+
Parameters:
+

id – ID of the texture to get the sampler for

+
+
Returns:
+

Sampler handle for the texture. If no separate sampler is set, returns invalid handle

+
+
+
+ +
+
+bool set_texture_separate_sampler(TEXTUREID id, const d3d::SamplerInfo &sampler_info)
+

Sets separate sampler for the texture ID.

+
+

Note

+

Calling a function for the same texture ID is not thread-safe

+
+
+

Note

+

Calling a function for different texture IDs is thread-safe

+
+
+
Parameters:
+
    +
  • id – ID of the texture to set the sampler for

  • +
  • sampler_info – Sampler info for sampler to set

  • +
+
+
Returns:
+

true if the sampler was set successfully, false otherwise

+
+
+
+ +
+
+void set_add_lod_bias_batch(dag::Span<const LODBiasRule> rules)
+

Sets the LOD bias for a batch of substring-bias pairs.

+
+
Parameters:
+

rules – A span of LODBiasRule objects containing substring and LOD bias pairs.

+
+
+
+ +
+
+

Variables

+
+
+int dgs_tex_quality
+

Read-only access to the current texture quality level.

+
+

Warning

+

This is READ-ONLY, do not modify this value

+
+
+ +
+
+int dgs_tex_anisotropy
+

Read-only access to the current texture anisotropy.

+
+

Warning

+

This is READ-ONLY, do not modify this value

+
+
+ +
+
+
+class TextureFactory
+

Texture factory provides custom creation mechanism.

+
+

Public Functions

+
+
+TextureFactory() = default
+
+ +
+
+TextureFactory(TextureFactory&&) = default
+
+ +
+
+TextureFactory &operator=(TextureFactory&&) = default
+
+ +
+
+inline virtual ~TextureFactory()
+
+ +
+
+virtual BaseTexture *createTexture(TEXTUREID id) = 0
+

Create texture a with the specified ID.

+
+

Warning

+

Make sure to store the result to release it in releaseTexture()

+
+
+
Parameters:
+

id – ID of the texture to create

+
+
+
+ +
+
+virtual void releaseTexture(BaseTexture *texture, TEXTUREID id) = 0
+

Release a texture that was created using createTexture.

+
+
Parameters:
+
    +
  • texture – Texture to release

  • +
  • id – ID of the texture to release

  • +
+
+
+
+ +
+
+inline virtual void texFactoryActiveChanged(bool)
+

A callback that is called on install/uninstall.

+
+ +
+
+inline virtual bool scheduleTexLoading(TEXTUREID, TexQL)
+

Schedules loading of specified texture (if applicable)

+
+

Note

+

Thread-safe

+
+
+
Parameters:
+
    +
  • id – ID of the texture to load

  • +
  • req_ql – Required quality level

  • +
+
+
Returns:
+

true when loading scheduled successfully

+
+
+
+ +
+
+inline virtual bool getTextureDDSx(TEXTUREID, Tab<char>&)
+

Loads and returns contents of texture as DDSx data.

+
+

Warning

+

This function is synchronous and should be used with caution

+
+
+
Parameters:
+
    +
  • id – ID of the texture to load

  • +
  • out_ddsx – Output buffer for DDSx data

  • +
+
+
Returns:
+

true when texture was loaded successfully

+
+
+
+ +
+
+inline virtual void onUnregisterTexture(TEXTUREID)
+

Callback for notification of texture being unregistered from the manager.

+
+
Parameters:
+

id – ID of the texture that was unregistered

+
+
+
+ +
+
+inline virtual bool isPersistentTexName(const char*)
+

Determines whether the string nm has static lifetime and can be referenced at any time without copying.

+
+
Parameters:
+

nm – String to check

+
+
Returns:
+

true if the string is persistent

+
+
+
+ +
+
+

Public Static Functions

+
+
+static void onTexFactoryDeleted(TextureFactory *f)
+

When a texture factory instance is destroyed at runtime, this function must be called to notify the manager about it.

+
+

Warning

+

This should not be called from factories which are static singletons or are destroyed after the manager was already de-initialized.

+
+
+ +
+
+ +
+
+struct LODBiasRule
+
+

Public Members

+
+
+const char *substring
+
+ +
+
+float bias
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/resourceSlot.html b/api-references/dagor-render/index/resourceSlot.html new file mode 100644 index 000000000..14bcaf549 --- /dev/null +++ b/api-references/dagor-render/index/resourceSlot.html @@ -0,0 +1,261 @@ + + + + + + + Resource slots — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Resource slots

+

resourceSlot is a declarative api for changing resource between +nodes in daBFG

+

You can think about slot as “more virtual” frame graph resource. +This type of resource can change size and resource creation flags +while frame graph execution.

+

Use slots instead of usual resources if:

+
    +
  • Node have to read from and write to some resource at the same time

  • +
  • Size or type of resource need to be changed in some node

  • +
+

For work with resource slots you need:

+
    +
  • Start from usual dabfg::register_node, see Declaring a Node

  • +
  • Replace dabfg::NodeHandle with resource_slot::NodeHandleWithSlotsAccess

  • +
  • Replace dabfg::register_node with resource_slot::register_access

    +
    +
      +
    • Declaration callback will get additional parameter resource_slot::State slotsState

    • +
    +
    +
  • +
  • Add action_list for the node:

    +
      +
    • If node creates a first resource for slot, node should declare +Create{slot_name, created_resource_name}

      +
        +
      • Node gets name of resource for filling the slot after node +with slotsState.resourceToCreateFor

      • +
      +
    • +
    • If node updates a resource in the slot, node should declare +Update{slot_name, updated_resource_name, priority}

      +
        +
      • Node gets name of resource for filling the slot after node +with slotsState.resourceToCreateFor

      • +
      • Node gets name of resource, that was in the slot before +the node with slotsState.resourceToReadFrom

      • +
      • Nodes with higher priority will be scheduled after nodes with lower priority

      • +
      +
    • +
    • If node read a resource from the slot, node should declare Read{slot_name}

      +
        +
      • Node gets name of resource, that was in the slot before +the node with slotsState.resourceToReadFrom

      • +
      • Optionally, node can declare read priority for read intermediate +resource from the slot. By default read nodes will be scheduled +after all updating nodes.

      • +
      +
    • +
    +
  • +
+

For detailed info see Register request for access to slots storage

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/resourceSlot/ResourceSlotCore.html b/api-references/dagor-render/index/resourceSlot/ResourceSlotCore.html new file mode 100644 index 000000000..83bf115a1 --- /dev/null +++ b/api-references/dagor-render/index/resourceSlot/ResourceSlotCore.html @@ -0,0 +1,315 @@ + + + + + + + ResourceSlotCore das module — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

ResourceSlotCore das module

+

ResourceSlotCore das module gives low-level bindings to cpp.

+
+

Handled structures

+
+
+NodeHandleWithSlotsAccess
+
+ +

NodeHandleWithSlotsAccess property operators are

+ + + + + + + +

valid

bool

+

|structure_annotation-ResourceSlotCore-NodeHandleWithSlotsAccess|

+
+
+ActionList
+
+ +

|structure_annotation-ResourceSlotCore-ActionList|

+
+
+State
+
+ +

|structure_annotation-ResourceSlotCore-State|

+
+
+

State operations

+
+
+
+
+resourceToReadFrom(state: State const implicit; slot_name: string const implicit)
+
+ +

resourceToReadFrom returns string const

+ + + + + + + + + + + + + + + + + +

argument

argument type

state

ResourceSlotCore::State const implicit

slot_name

string const implicit

+

|function-ResourceSlotCore-resourceToReadFrom|

+
+
+resourceToCreateFor(state: State const implicit; slot_name: string const implicit)
+
+ +

resourceToCreateFor returns string const

+ + + + + + + + + + + + + + + + + +

argument

argument type

state

ResourceSlotCore::State const implicit

slot_name

string const implicit

+

|function-ResourceSlotCore-resourceToCreateFor|

+
+
+

Handle methods

+
+
+
+
+NodeHandleWithSlotsAccess()
+
+ +

NodeHandleWithSlotsAccess returns ResourceSlotCore::NodeHandleWithSlotsAccess

+

|function-ResourceSlotCore-NodeHandleWithSlotsAccess|

+
+
+reset(handle: NodeHandleWithSlotsAccess implicit)
+
+ + + + + + + + + + + + + + +

argument

argument type

handle

ResourceSlotCore::NodeHandleWithSlotsAccess implicit

+

|function-ResourceSlotCore-reset|

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/resourceSlot/nodeHandleWithSlotsAccess.html b/api-references/dagor-render/index/resourceSlot/nodeHandleWithSlotsAccess.html new file mode 100644 index 000000000..afb25d81d --- /dev/null +++ b/api-references/dagor-render/index/resourceSlot/nodeHandleWithSlotsAccess.html @@ -0,0 +1,220 @@ + + + + + + + Node and slot access handle — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Node and slot access handle

+
+
+struct NodeHandleWithSlotsAccess
+

Handle for access to resource slots storage.

+

Also it is proxy for dabfg::NodeHandle.

+

If use in usual code:

+
#include <render/resourceSlot/nodeHandleWithSlotsAccess.h>
+
+
+

If use in ecs:

+
#include <render/resourceSlot/ecs/nodeHandleWithSlotsAccess.h>
+
+
+
+

Public Functions

+
+
+void reset()
+

Reset handle if set.

+
+ +
+
+bool valid() const
+

Check, if handle is valid

+
+ +
+
+~NodeHandleWithSlotsAccess()
+

Destructor; calls reset()

+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/resourceSlot/registerAccess.html b/api-references/dagor-render/index/resourceSlot/registerAccess.html new file mode 100644 index 000000000..c91b6ba72 --- /dev/null +++ b/api-references/dagor-render/index/resourceSlot/registerAccess.html @@ -0,0 +1,307 @@ + + + + + + + Register request for access to slots storage — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Register request for access to slots storage

+
+

Warning

+

doxygenfunction: Unable to resolve function “resource_slot::register_access” with arguments None in doxygen xml output for project “resourceSlot” from directory: _build/breathe/doxygen/resourceSlot/xml. +Potential matches: +

+
- template<class F> resource_slot::NodeHandleWithSlotsAccess register_access(const char *name, const char *source_location, resource_slot::detail::ActionList &&action_list, F &&declaration_callback)
+- template<class F> resource_slot::NodeHandleWithSlotsAccess register_access(dabfg::NameSpace ns, const char *name, const char *source_location, resource_slot::detail::ActionList &&action_list, F &&declaration_callback)
+
+
+
+
+
+struct State
+

State of slots storage.

+

Size is kept small, can be copied to declaration_callback.

+
+

Public Functions

+
+
+const char *resourceToReadFrom(const char *slot_name) const
+

Get name of resource in slot before the node.

+

This function can be called several times inside the node.

+
+
Parameters:
+

slot_name – name of slot; should be requested in action_list

+
+
Returns:
+

current resource

+
+
+
+ +
+
+const char *resourceToCreateFor(const char *slot_name) const
+

Get name of resource from declaration of Create or Update for using after the node.

+

This function can be called several times inside the node. For example, for using in readTextureHistory().

+
+
Parameters:
+

slot_name – name of slot; should be requested in action_list

+
+
Returns:
+

resource after node

+
+
+
+ +
+
+ +
+
+struct Create
+

Create request

+

Declared resource MUST be created in the node

+
+

Public Functions

+
+
+Create(const char *slot_name, const char *resource_name)
+

Constructor

+
+
Parameters:
+
    +
  • slot_name – name of the slot

  • +
  • resource_name – name of the resource, that MUST be created in current node and WILL be saved into slot for using after the node

  • +
+
+
+
+ +
+
+ +
+
+struct Update
+

Update request

+

Requested slot CAN be read in the node and declared resource MUST be created in the node

+
+

Public Functions

+
+
+Update(const char *slot_name, const char *resource_name, int update_priority)
+

Constructor

+
+
Parameters:
+
    +
  • slot_name – name of the slot

  • +
  • resource_name – name of the resource, that MUST be created in current node and WILL be saved into slot for using after the node

  • +
  • update_priority – priority of update, nodes with HIGHER priority will be scheduled AFTER nodes with LOWER priority

  • +
+
+
+
+ +
+
+ +
+
+struct Read
+

Read request

+

Requested slot CAN be read in the node

+
+

Public Functions

+
+
+Read(const char *slot_name, int read_priority = DEFAULT_READ_PRIORITY)
+

Constructor

+
+
Parameters:
+
    +
  • slot_name – name of the slot

  • +
  • read_priority – priority of read; nodes with LOWER priority will be scheduled BEFORE current node. By default Read will be scheduled after all Update of this slot.

  • +
+
+
+
+ +
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/resourceSlot/resolveAccess.html b/api-references/dagor-render/index/resourceSlot/resolveAccess.html new file mode 100644 index 000000000..c79ffb1dd --- /dev/null +++ b/api-references/dagor-render/index/resourceSlot/resolveAccess.html @@ -0,0 +1,196 @@ + + + + + + + Perform access requests — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Perform access requests

+
+
+void resource_slot::resolve_access()
+

Perform all registered access and set NodeHandles.

+

MUST be executed in every frame before dabfg::run_nodes()

+
+
Parameters:
+

storage_id – RESERVED for future use

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/resourceSlot/resource_slot_das.html b/api-references/dagor-render/index/resourceSlot/resource_slot_das.html new file mode 100644 index 000000000..b0676912d --- /dev/null +++ b/api-references/dagor-render/index/resourceSlot/resource_slot_das.html @@ -0,0 +1,339 @@ + + + + + + + Resource slot in das — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Resource slot in das

+

Storing in das+ecs is more convenient.

+

However, we can store NodeHandleWithSlotsAccess outside ecs with daBfg.resource_slot module.

+

Unfortunately, NodeHandleWithSlotsAccess can’t be stored in local +das variable, because das doesn’t call destructors for local types. +If you really need to store handle outside ecs, you have to store +handle in heap or make binding for storing it on cpp-side.

+

Also hot-reload will work automatically for nodes inside +ecs.

+
require daBfg.resource_slot
+
+some_cpp_binding <| $(var handle : NodeHandleWithSlotsAccess &)
+  some_struct.handle <- root() |> registerAccess("node_name", [[SlotActions update <- [{auto Update("slot_name", "texture_name", 100)}] ]]) <| @(slots_state; var registry : Registry)
+
+    return <- @ <|
+      // some render code
+
+
+
+

Constants

+
+
+DEFAULT_READ_PRIORITY = 2147483647
+
+ +

|variable-resource_slot-DEFAULT_READ_PRIORITY|

+
+
+Create
+
+ +

Create fields are

+ + + + + + + + + + + +

slot

string

resource

string

+

|structure-resource_slot-Create|

+
+
+Update
+
+ +

Update fields are

+ + + + + + + + + + + + + + + +

slot

string

resource

string

priority

int

+

|structure-resource_slot-Update|

+
+
+Read
+
+ +

Read fields are

+ + + + + + + + + + + +

slot

string

priority

int

+

|structure-resource_slot-Read|

+
+
+SlotActions
+
+ +

SlotActions fields are

+ + + + + + + + + + + + + + + +

create

array< resource_slot::Create >

update

array< resource_slot::Update >

read

array< resource_slot::Read >

+

|structure-resource_slot-SlotActions|

+
+
+

Register access

+
+
+
+
+registerAccess(self: NameSpace; name: string const; slot_decl: SlotActions const; declaration_callback: lambda<(slots_state:ResourceSlotCore::State const;var reg:daBfg::Registry -const):lambda<void>>)
+
+ +

registerAccess returns ResourceSlotCore::NodeHandleWithSlotsAccess

+ + + + + + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

daBfg::NameSpace

name

string const

slot_decl

resource_slot::SlotActions const

declaration_callback

lambda<(slots_state: ResourceSlotCore::State const;reg: daBfg::Registry ):lambda<>>

+

|function-resource_slot-registerAccess|

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/dagor-render/index/resourceSlot/resource_slot_ecs.html b/api-references/dagor-render/index/resourceSlot/resource_slot_ecs.html new file mode 100644 index 000000000..c19983c68 --- /dev/null +++ b/api-references/dagor-render/index/resourceSlot/resource_slot_ecs.html @@ -0,0 +1,426 @@ + + + + + + + Resource slot in das+ecs — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Resource slot in das+ecs

+

We can handle in ecs NodeHandleWithSlotsAccess as we handle NodeHandle

+

Let’s say we have das code for node:

+
require daBfg.bfg_ecs
+
+[bfg_ecs_node(on_appear)]
+def register_some_node(var some_node_handle : NodeHandle&)
+
+  some_node_handle <- root() |> registerNode("some_node") <| @(slots_state; var registry : Registry)
+
+    registry |> create("some_node_output_tex", History No) |> texture(...)
+    registry |> requestRenderPass |> color([[auto[] "some_node_output_tex"]])
+
+    registry |> read("some_node_input_tex") |> texture |> atStage(Stage POST_RASTER) |> bindToShaderVar("some_shader_var")
+
+    return <- @ <|
+      query() <| $ [es] (some_renderer : PostFxRenderer)
+        some_renderer |> render
+
+
+

We can convert it to read texture from and write back to resource slot slot_name:

+
require daBfg.resource_slot_ecs
+
+[resource_slot_ecs(on_appear)]
+def register_some_node(var some_node_handle : NodeHandleWithSlotsAccess&)
+
+  some_node_handle <- root() |> registerAccess("some_node", [[SlotActions update <- [{Update slot="slot_name", resource="some_node_output_tex", priority=100}] ]]) <| @(slots_state; var registry : Registry)
+
+    registry |> create(slots_state |> resourceToCreateFor("slot_name"), History No) |> texture(...)
+    registry |> requestRenderPass |> color([[auto[] slots_state |> resourceToCreateFor("postfx_input_slot")]])
+
+    registry |> read(slots_state |> resourceToReadFrom("slot_name")) |> texture |> atStage(Stage POST_RASTER) |> bindToShaderVar("some_shader_var")
+
+    return <- @ <|
+      query() <| $ [es] (some_renderer : PostFxRenderer)
+        some_renderer |> render
+
+
+
+

Difference with bfg_ecs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bfg_ecs

resource_slot_ecs

require daBfg.bfg_ecs

require daBfg.resource_slot_ecs

[bfg_ecs_node(on_appear)]

[resource_slot_ecs(on_appear)]

NodeHandle

NodeHandleWithSlotsAccess

registerNode(“node_name”)

registerAccess(“node_name”, [[SlotActions … ]])

@(var registry : Registry)

@(slots_state; var registry : Registry)

“some_node_input_tex”

slots_state |> resourceToReadFrom(“slot_name”)

“some_node_output_tex”

slots_state |> resourceToCreateFor(“slot_name”)

+

SlotActions have 3 possible properties:

+ +

See also: registerAccess

+
+
+

Function annotations

+
+
+resource_slot_ecs
+
+ +

|function_annotation-resource_slot_ecs-resource_slot_ecs|

+
+
+

Classes

+
+
+ResourceSlotEcsAnnotation : AstFunctionAnnotation
+
+ +

|class-resource_slot_ecs-ResourceSlotEcsAnnotation|

+
+
+ResourceSlotEcsAnnotation.apply(self: AstFunctionAnnotation; func: FunctionPtr; group: ModuleGroup; args: AnnotationArgumentList const; errors: das_string)
+
+ +

apply returns bool

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

ast::AstFunctionAnnotation

func

FunctionPtr

group

rtti::ModuleGroup

args

rtti::AnnotationArgumentList const

errors

builtin::das_string

+

|method-resource_slot_ecs-ResourceSlotEcsAnnotation.apply|

+
+
+ResourceSlotEcsAnnotation.parseArgs(self: ResourceSlotEcsAnnotation; func: FunctionPtr; args: AnnotationArgumentList const; errors: das_string)
+
+ +

parseArgs returns resource_slot_ecs::ResSlotEcsAnnotationArgs

+ + + + + + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

resource_slot_ecs::ResourceSlotEcsAnnotation

func

FunctionPtr

args

rtti::AnnotationArgumentList const

errors

builtin::das_string

+

|method-resource_slot_ecs-ResourceSlotEcsAnnotation.parseArgs|

+
+
+ResourceSlotEcsAnnotation.declareReloadCallback(self: ResourceSlotEcsAnnotation; func: FunctionPtr; parsed: ResSlotEcsAnnotationArgs const; args: AnnotationArgumentList const)
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

resource_slot_ecs::ResourceSlotEcsAnnotation

func

FunctionPtr

parsed

resource_slot_ecs::ResSlotEcsAnnotationArgs const

args

rtti::AnnotationArgumentList const

+

|method-resource_slot_ecs-ResourceSlotEcsAnnotation.declareReloadCallback|

+
+
+ResourceSlotEcsAnnotation.declareES(self: ResourceSlotEcsAnnotation; func: FunctionPtr; parsed: ResSlotEcsAnnotationArgs const; args: AnnotationArgumentList const)
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

argument

argument type

self

resource_slot_ecs::ResourceSlotEcsAnnotation

func

FunctionPtr

parsed

resource_slot_ecs::ResSlotEcsAnnotationArgs const

args

rtti::AnnotationArgumentList const

+

|method-resource_slot_ecs-ResourceSlotEcsAnnotation.declareES|

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/index.html b/api-references/index.html new file mode 100644 index 000000000..e2ba149c0 --- /dev/null +++ b/api-references/index.html @@ -0,0 +1,212 @@ + + + + + + + API References and Documentation — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/dargbox/gamelib.input.html b/api-references/quirrel-modules/dargbox/gamelib.input.html new file mode 100644 index 000000000..a6a264014 --- /dev/null +++ b/api-references/quirrel-modules/dargbox/gamelib.input.html @@ -0,0 +1,253 @@ + + + + + + + gamelib.input — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

gamelib.input

+

module ‘gamelib.input’

+

Source file: prog/tools/dargbox/gamelib/input.cpp

+

Usage:

+
let { get_button_state, get_mouse_pos, get_joystick_axis } = require("gamelib.input")
+
+
+

or:

+
from "gamelib.input" import *
+
+
+
//'gamelib.input' exports:
+{
+  function get_button_state(arg0): integer_or_float or string -> _undocumented_
+  function get_mouse_pos()
+  function get_joystick_axis(arg0): integer_or_float -> _undocumented_
+}
+
+
+
+
+function get_button_state(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float or string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer_or_float or string

+
+ +
+
+function get_mouse_pos()
+
+ +
+
+function get_joystick_axis(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer_or_float

+
+ +

/;

+
+

dag::ConstSpan<FastStrMapT<darg::Hotkeys::EncodedKey>::Entry> buttonsRawSlice = btn_name_map.getMapRaw(); +Sqrat::Table buttonNames(vm); +Sqrat::Table buttonIds(vm); +for (auto &e : buttonsRawSlice) +{

+
+

buttonIds.SetValue(e.name, e.id); +buttonNames.SetValue(e.id, e.name);

+
+

} +buttonIds.FreezeSelf(); +buttonNames.FreezeSelf(); +exports.SetValue(“buttonIds”, buttonIds); +exports.SetValue(“buttonNames”, buttonNames);

+

module_mgr->addNativeModule(“gamelib.input”, exports);

+
+

}

+

} // namespace input

+

} // namespace gamelib

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/dargbox/index.html b/api-references/quirrel-modules/dargbox/index.html new file mode 100644 index 000000000..ad9219fdb --- /dev/null +++ b/api-references/quirrel-modules/dargbox/index.html @@ -0,0 +1,187 @@ + + + + + + + dargbox — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dargbox

+

Docs for DargBox - darg utlitiy application and sandbox.

+

Contents:

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/index.html b/api-references/quirrel-modules/index.html new file mode 100644 index 000000000..71e18a98e --- /dev/null +++ b/api-references/quirrel-modules/index.html @@ -0,0 +1,377 @@ + + + + + + + Quirrel Modules Docs — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Quirrel Modules Docs

+

Contents:

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/daNetGame/control.html b/api-references/quirrel-modules/quirrel-modules/daNetGame/control.html new file mode 100644 index 000000000..c775427b3 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/daNetGame/control.html @@ -0,0 +1,245 @@ + + + + + + + control — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

control

+

module ‘control’

+

Source file: prog/daNetGame/input/inputControls.cpp

+

Usage:

+
let { SensScale } = require("control")
+
+
+

or:

+
from "control" import *
+
+
+
//'control' exports:
+{
+  class SensScale
+}
+
+
+
+

class SensScale

+
+
+var SensScale.humanAiming
+
+ +
+
+var SensScale.humanTpsCam
+
+ +
+
+var SensScale.humanFpsCam
+
+ +
+
+var SensScale.vehicleCam
+
+ +
+
+var SensScale.planeCam
+
+ +

/;

+
+

Sqrat::Table controlTable(moduleMgr->getVM()); +controlTable //

+
+

.Func(“save_config”, save_config) +.Func(“reset_to_default”, reset_to_default) +.Func(“restore_saved_config”, restore_saved_config) +.Func(“controls_were_reset”, controls_were_reset) +.Func(“clear_controls_were_reset”, clear_controls_were_reset) +.Func(“get_sens_scale”, [] { return &sens_scale; })

+
+
+

/*

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/daNetGame/index.html b/api-references/quirrel-modules/quirrel-modules/daNetGame/index.html new file mode 100644 index 000000000..2f7767021 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/daNetGame/index.html @@ -0,0 +1,196 @@ + + + + + + + daNetGame — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

daNetGame

+

Docs for daNetGame Quirrel Modules. DaNetGame is framework for building games

+

Contents:

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/daNetGame/net.html b/api-references/quirrel-modules/quirrel-modules/daNetGame/net.html new file mode 100644 index 000000000..6a6189cf3 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/daNetGame/net.html @@ -0,0 +1,233 @@ + + + + + + + net — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

net

+

module ‘net’

+

Source file: prog/daNetGame/net/netBindSq.cpp

+

Usage:

+
let { get_user_id, add_entity_in_net_scope, get_sync_time, get_dasevent_net_version } = require("net")
+
+
+

or:

+
from "net" import *
+
+
+
//'net' exports:
+{
+  function get_user_id()
+  function add_entity_in_net_scope()
+  function get_sync_time()
+  function get_dasevent_net_version()
+}
+
+
+
+
+function get_user_id()
+
+ +
+
+function add_entity_in_net_scope()
+
+ +
+
+function get_sync_time()
+
+ +
+
+function get_dasevent_net_version()
+
+ +
+
/;

tbl.SetValue(“NET_PROTO_VERSION”, NET_PROTO_VERSION); // todo: split by game?

+
+
if (!existingModule)

module_mgr->addNativeModule(“net”, tbl);

+
+
+
+
+

}

+

} // namespace net

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/daNetGame/settings.html b/api-references/quirrel-modules/quirrel-modules/daNetGame/settings.html new file mode 100644 index 000000000..6a74e61fb --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/daNetGame/settings.html @@ -0,0 +1,496 @@ + + + + + + + settings — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

settings

+

module ‘settings’

+

Source file: prog/daNetGame/main/settings.cpp

+

Usage:

+
let { get_setting_by_blk_path, set_setting_by_blk_path, set_setting_by_blk_path_and_save, remove_setting_by_blk_path, save_settings, save_changed_settings, are_settings_changes_committed, commit_settings_changes } = require("settings")
+
+
+

or:

+
from "settings" import *
+
+
+
//'settings' exports:
+{
+  function get_setting_by_blk_path(arg0): string -> _undocumented_
+  function set_setting_by_blk_path(arg0, arg1): string, any_type -> _undocumented_
+  function set_setting_by_blk_path_and_save(arg0, arg1): string, any_type -> _undocumented_
+  function remove_setting_by_blk_path(arg0, arg1): string, any_type -> _undocumented_
+  function save_settings()
+  function save_changed_settings(changed_fields): Sqrat::Array -> null
+  function are_settings_changes_committed()
+  function commit_settings_changes():  -> null
+}
+
+
+
+
+function get_setting_by_blk_path(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+function set_setting_by_blk_path(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: any_type, string, any_type

+
+ +
+
+function set_setting_by_blk_path_and_save(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: any_type, string, any_type

+
+ +
+
+function remove_setting_by_blk_path(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string, any_type

+
+ +
+
+function save_settings()
+

nparamscheck:1

+
+ +
+
+function save_changed_settings(changed_fields)
+
+
Arguments:
+
    +
  • changed_fields (Sqrat::Array()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function are_settings_changes_committed()
+
+ +
+
+function commit_settings_changes()
+
+
Returns:
+

null

+
+
+
+ +
+
/;

return tbl;

+
+
+

}

+

static void fill_changes_name_map(FastNameMap &name_map, const DataBlock &blk, const String &path_so_far) +{

+
+

for (int i = 0; i < blk.blockCount(); i++) +{

+
+

const DataBlock &childBlk = *blk.getBlock(i); +fill_changes_name_map(name_map, childBlk, path_so_far + childBlk.getBlockName() + “/”);

+
+

}

+
+
for (int i = 0; i < blk.paramCount(); i++)

name_map.addNameId(path_so_far + blk.getParamName(i));

+
+
+
+

}

+

static void settings_explorer_window() +{

+
+

// Ideas: +// - search filter

+

static bool editMode = false, autoApplyEdits = true, needCopySettings = true; +bool applyEdits = false;

+

ImGui::BeginMenuBar(); +if (ImGui::BeginMenu(“Actions”)) +{

+
+

if (ImGui::MenuItem(“Dump to log”)) +{

+
+

DynamicMemGeneralSaveCB dump(framemem_ptr()); +dgs_get_settings()->saveToTextStream(dump); +dump.write(”0”, 1); +debug(“Settings dump:n%s”, dump.data());

+
+

} +ImGui::EndMenu();

+
+

} +if (ImGui::BeginMenu(“Modes”)) +{

+
+

ImGui::Checkbox(“Edit mode”, &editMode); +ImGui::Checkbox(“Auto-apply edits”, &autoApplyEdits); +ImGui::EndMenu();

+
+

} +if (editMode) +{

+
+

ImGui::SameLine(ImGui::GetWindowWidth() - (autoApplyEdits ? 70 : 200)); // Align buttons to the right +if (ImGui::Button(autoApplyEdits ? “Refresh” : “Revert and refresh”))

+
+

needCopySettings = true;

+
+
+
if (!autoApplyEdits)
+
if (ImGui::Button(“Apply”))

applyEdits = true;

+
+
+
+
+
+

} +ImGui::EndMenuBar();

+

if (editMode) +{

+
+

static DataBlock settingsCopy; +static DataBlock settingsChanges; +if (needCopySettings) +{

+
+

settingsCopy.setFrom(::dgs_get_settings()); +settingsChanges.clearData(); +needCopySettings = false;

+
+

} +DataBlock settingsChangesThisFrame(framemem_ptr()); +ImGuiDagor::BlkEdit(&settingsCopy, &settingsChangesThisFrame, true, “dgs_get_settings”); +if (!settingsChangesThisFrame.isEmpty()) +{

+
+

merge_data_block_and_save_order(settingsCopy, settingsChangesThisFrame); +merge_data_block(settingsChanges, settingsChangesThisFrame);

+
+

} +if ((applyEdits || autoApplyEdits) && !settingsChanges.isEmpty()) +{

+
+

::dgs_apply_config_blk(settingsChanges, true, false, true); +FastNameMap changesNameMap; +String pathSoFar; +fill_changes_name_map(changesNameMap, settingsChanges, pathSoFar); +apply_settings_changes(changesNameMap); +needCopySettings = true;

+
+

}

+
+

} +else +{

+
+

ImGuiDagor::Blk(::dgs_get_settings(), true, “dgs_get_settings”);

+
+

}

+
+

}

+

static void gameparams_explorer_window() +{

+
+

ImGui::BeginMenuBar(); +if (ImGui::BeginMenu(“Actions”)) +{

+
+

if (ImGui::MenuItem(“Dump to log”)) +{

+
+

DynamicMemGeneralSaveCB dump(framemem_ptr()); +dgs_get_game_params()->saveToTextStream(dump); +dump.write(”0”, 1); +debug(“GameParams dump:n%s”, dump.data());

+
+

} +ImGui::EndMenu();

+
+

} +ImGui::EndMenuBar();

+

ImGuiDagor::Blk(::dgs_get_game_params(), true, “dgs_get_game_params”);

+
+

}

+

REGISTER_IMGUI_WINDOW_EX(“Settings”, “Settings explorer”, nullptr, 100, ImGuiWindowFlags_MenuBar, settings_explorer_window); +REGISTER_IMGUI_WINDOW_EX(“Settings”, “GameParams explorer”, nullptr, 100, ImGuiWindowFlags_MenuBar, gameparams_explorer_window);

+

void dgs_apply_changes_to_config(DataBlock &config_blk, bool need_merge_cmd, const OverrideFilter *override_filter) +{

+
+

DataBlock cmdBlk; +if (need_merge_cmd)

+
+

dgs_apply_command_line_to_config(&cmdBlk, override_filter);

+
+

// check cmd block first +const char *presetName = nullptr; +if (need_merge_cmd)

+
+

presetName = cmdBlk.getBlockByNameEx(“graphics”)->getStr(“consolePreset”, nullptr);

+
+
+
if (presetName == nullptr) // From saved data

presetName = config_blk.getBlockByNameEx(“graphics”)->getStr(“consolePreset”, nullptr);

+
+
if (presetName == nullptr) // From common settings for default

presetName = ::dgs_get_settings()->getBlockByNameEx(“graphics”)->getStr(“consolePreset”, nullptr);

+
+
+

// first apply graphic preset settings +if (presetName != nullptr)

+
+

dgs_apply_console_preset_params(config_blk, presetName);

+
+

// second apply cmd changes, overwrite all graphic preset settings if they are exist +if (need_merge_cmd)

+
+

merge_data_block(config_blk, cmdBlk);

+
+
+

}

+

void dgs_apply_console_preset_params(DataBlock &config_blk, const char *preset_name) +{

+
+

const char *presetsListBlockName = “consoleGraphicalPresets”; +const DataBlock *presetsBlk = ::dgs_get_settings()->getBlockByName(presetsListBlockName); +if (!presetsBlk) +{

+
+

debug(“Not exist block ‘%s’ in settings.blk. Cannot read ‘%s’ console preset name.”, presetsListBlockName, preset_name); +return;

+
+

}

+

const DataBlock *presetParamsBlk = presetsBlk->getBlockByName(preset_name); +if (!presetParamsBlk) +{

+
+

debug(“ERROR: Not found console preset ‘%s’ in ‘%s’ block.”, preset_name, presetsListBlockName); +return;

+
+

}

+

debug(“Apply console preset ‘%s’.”, preset_name); +merge_data_block(config_blk, *presetParamsBlk);

+
+

}

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/daNetGame/videomode.html b/api-references/quirrel-modules/quirrel-modules/daNetGame/videomode.html new file mode 100644 index 000000000..76427ea10 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/daNetGame/videomode.html @@ -0,0 +1,419 @@ + + + + + + + videomode — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

videomode

+

module ‘videomode’

+

Source file: prog/daNetGame/ui/uiVideoMode.cpp

+

Usage:

+
let { apply_video_settings, get_video_modes, get_available_monitors, get_monitor_info, get_current_window_resolution, is_fullscreen_enabled, get_dlss_state, get_xess_state, get_fsr_supported, get_dlssg_support_state, set_dlssg_suppressed, is_dlss_quality_available_at_resolution, is_xess_quality_available_at_resolution, get_performance_display_mode_support, get_low_latency_modes, is_inline_rt_supported, is_dx12, is_vulkan, is_gui_driver_select_enabled, is_upsampling, is_hdr_available, is_hdr_enabled, change_paper_white_nits, change_gamma, is_vrr_supported, get_default_static_resolution_scale, is_rendinst_tessellation_supported, is_only_low_gi_supported, is_hfr_supported } = require("videomode")
+
+
+

or:

+
from "videomode" import *
+
+
+
//'videomode' exports:
+{
+  function apply_video_settings(changed_fields): Sqrat::Array -> null
+  function get_video_modes()
+  function get_available_monitors()
+  function get_monitor_info()
+  function get_current_window_resolution()
+  function is_fullscreen_enabled()
+  function get_dlss_state()
+  function get_xess_state()
+  function get_fsr_supported()
+  function get_dlssg_support_state()
+  function set_dlssg_suppressed()
+  function is_dlss_quality_available_at_resolution()
+  function is_xess_quality_available_at_resolution()
+  function get_performance_display_mode_support()
+  function get_low_latency_modes()
+  function is_inline_rt_supported()
+  function is_dx12()
+  function is_vulkan()
+  function is_gui_driver_select_enabled()
+  function is_upsampling()
+  function is_hdr_available(arg0): string -> _undocumented_
+  function is_hdr_enabled()
+  function change_paper_white_nits(field): sqObject -> null
+  function change_gamma(field): sqObject -> null
+  function is_vrr_supported()
+  function get_default_static_resolution_scale()
+  function is_rendinst_tessellation_supported()
+  function is_only_low_gi_supported()
+  function is_hfr_supported()
+}
+
+
+
+
+function apply_video_settings(changed_fields)
+
+
Arguments:
+
    +
  • changed_fields (Sqrat::Array()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function get_video_modes()
+
+ +
+
+function get_available_monitors()
+
+ +
+
+function get_monitor_info()
+
+ +
+
+function get_current_window_resolution()
+
+ +
+
+function is_fullscreen_enabled()
+
+ +
+
+function get_dlss_state()
+
+ +
+
+function get_xess_state()
+
+ +
+
+function get_fsr_supported()
+
+ +
+
+function get_dlssg_support_state()
+
+ +
+
+function set_dlssg_suppressed()
+
+ +
+
+function is_dlss_quality_available_at_resolution()
+
+ +
+
+function is_xess_quality_available_at_resolution()
+
+ +
+
+function get_performance_display_mode_support()
+
+ +
+
+function get_low_latency_modes()
+
+ +
+
+function is_inline_rt_supported()
+
+ +
+
+function is_dx12()
+
+ +
+
+function is_vulkan()
+
+ +
+
+function is_gui_driver_select_enabled()
+
+ +
+
+function is_upsampling()
+
+ +
+
+function is_hdr_available(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+function is_hdr_enabled()
+
+ +
+
+function change_paper_white_nits(field)
+
+
Arguments:
+
    +
  • field (sqObject()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function change_gamma(field)
+
+
Arguments:
+
    +
  • field (sqObject()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function is_vrr_supported()
+
+ +
+
+function get_default_static_resolution_scale()
+
+ +
+
+function is_rendinst_tessellation_supported()
+
+ +
+
+function is_only_low_gi_supported()
+
+ +
+
+function is_hfr_supported()
+
+ +
+
/;

moduleMgr->addNativeModule(“videomode”, aTable);

+
+
+

}

+

} // namespace videomode

+

} // namespace ui

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/gpuBenchmark.html b/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/gpuBenchmark.html new file mode 100644 index 000000000..cf8cbba10 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/gpuBenchmark.html @@ -0,0 +1,319 @@ + + + + + + + gpuBenchmark — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

gpuBenchmark

+

module ‘gpuBenchmark’

+

Source file: prog/daNetGameLibs/gpu_benchmark/ui/gpuBenchmark.cpp

+

Usage:

+
let { initGraphicsAutodetect, isGpuBenchmarkRunning, startGpuBenchmark, closeGraphicsAutodetect, getGpuBenchmarkDuration, getPresetFor60Fps, getPresetForMaxQuality, getPresetForMaxFPS } = require("gpuBenchmark")
+
+
+

or:

+
from "gpuBenchmark" import *
+
+
+
//'gpuBenchmark' exports:
+{
+  function initGraphicsAutodetect():  -> null
+  function isGpuBenchmarkRunning():  -> bool
+  function startGpuBenchmark():  -> null
+  function closeGraphicsAutodetect():  -> null
+  function getGpuBenchmarkDuration():  -> float
+  function getPresetFor60Fps():  -> string
+  function getPresetForMaxQuality():  -> string
+  function getPresetForMaxFPS():  -> string
+}
+
+
+
+
+function initGraphicsAutodetect()
+
+
Returns:
+

null

+
+
+
+ +
+
+function isGpuBenchmarkRunning()
+
+
Returns:
+

bool

+
+
+
+ +
+
+function startGpuBenchmark()
+
+
Returns:
+

null

+
+
+
+ +
+
+function closeGraphicsAutodetect()
+
+
Returns:
+

null

+
+
+
+ +
+
+function getGpuBenchmarkDuration()
+
+
Returns:
+

float

+
+
+
+ +
+
+function getPresetFor60Fps()
+
+
Returns:
+

string

+
+
+
+ +
+
+function getPresetForMaxQuality()
+
+
Returns:
+

string

+
+
+
+ +
+
+function getPresetForMaxFPS()
+
+
Returns:
+

string

+
+
+
+ +
+
/;

return tbl;

+
+
+

}

+

} // namespace gpubenchmark

+

static bool gpu_benchmark_console_handler(const char *argv[], int argc) +{

+
+

int found = 0; +CONSOLE_CHECK_NAME(“benchmark”, “run_benchmak”, 1, 1) +{

+
+

GraphicsAutodetect *graphicsAutodetect = gpubenchmark::get_graphics_autodetect(); +if (graphicsAutodetect) +{

+
+

console::print(“Benchmark already running.”);

+
+

} +else +{

+
+

gpubenchmark::make_graphics_autodetect_entity(gpubenchmark::Selfdestruct::YES); +console::print_d(“Running benchmark for %ds…”, (int)gpubenchmark::getGpuBenchmarkDuration()); +gpubenchmark::startGpuBenchmark();

+
+

}

+
+

} +return found;

+
+

}

+

REGISTER_CONSOLE_HANDLER(gpu_benchmark_console_handler); +extern const size_t ecs_pull_gpu_benchmark_ui = 0;

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/index.html b/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/index.html new file mode 100644 index 000000000..4afa341f9 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/daNetGameLibs/index.html @@ -0,0 +1,187 @@ + + + + + + + daNetGameLibs — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

daNetGameLibs

+

Docs for daNetGameLibs Quirrel Modules. DaNetGameLibs can be used in any daNetGame based project

+

Contents:

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.debug.html b/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.debug.html new file mode 100644 index 000000000..6b6f58af8 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.debug.html @@ -0,0 +1,205 @@ + + + + + + + daRg.debug — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

daRg.debug

+

module ‘daRg.debug’

+

Source file: prog/gameLibs/daRg/scriptBinding.cpp

+

Usage:

+
let {  } = require("daRg.debug")
+
+
+

or:

+
from "daRg.debug" import *
+
+
+
//'daRg.debug' exports:
+{
+}
+
+
+dargDebug.Func("requireFontSizeSlot", dbg_set_require_font_size_slot);
+module_mgr->addNativeModule("daRg.debug", dargDebug);
+
+
+

}

+

} // namespace binding

+

} // namespace darg

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.html b/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.html new file mode 100644 index 000000000..a726c2f6f --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.html @@ -0,0 +1,2603 @@ + + + + + + + daRg — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

daRg

+

module ‘daRg’

+

Source file: prog/gameLibs/daRg/elementRef.cpp

+

Usage:

+
let { KBD_BIT_CAPS_LOCK, KBD_BIT_NUM_LOCK, KBD_BIT_SCROLL_LOCK, PANEL_ANCHOR_NONE, PANEL_ANCHOR_SCENE, PANEL_ANCHOR_VRSPACE, PANEL_ANCHOR_HEAD, PANEL_ANCHOR_LEFTHAND, PANEL_ANCHOR_RIGHTHAND, PANEL_ANCHOR_ENTITY, PANEL_GEOMETRY_NONE, PANEL_GEOMETRY_RECTANGLE, PANEL_RC_NONE, PANEL_RC_FACE_LEFT_HAND, PANEL_RC_FACE_RIGHT_HAND, PANEL_RC_FACE_HEAD, PANEL_RC_FACE_HEAD_LOCK_Y, PANEL_RC_FACE_ENTITY, PANEL_RENDER_CAST_SHADOW, PANEL_RENDER_OPAQUE, PANEL_RENDER_ALWAYS_ON_TOP, GuiScene, SceneConfig, anim_start, anim_request_stop, anim_skip, anim_skip_delay, set_kb_focus, capture_kb_focus, calc_comp_size, move_mouse_cursor, get_mouse_cursor_pos, resolve_button_id, gui_scene, FLOW_PARENT_RELATIVE, FLOW_HORIZONTAL, FLOW_VERTICAL, ALIGN_LEFT, ALIGN_TOP, ALIGN_RIGHT, ALIGN_BOTTOM, ALIGN_CENTER, VECTOR_WIDTH, VECTOR_COLOR, VECTOR_FILL_COLOR, VECTOR_MID_COLOR, VECTOR_OUTER_LINE, VECTOR_CENTER_LINE, VECTOR_INNER_LINE, VECTOR_TM_OFFSET, VECTOR_TM_SCALE, VECTOR_LINE, VECTOR_LINE_INDENT_PX, VECTOR_LINE_INDENT_PCT, VECTOR_ELLIPSE, VECTOR_SECTOR, VECTOR_RECTANGLE, VECTOR_POLY, VECTOR_INVERSE_POLY, VECTOR_OPACITY, VECTOR_LINE_DASHED, VECTOR_NOP, VECTOR_QUADS, FFT_NONE, FFT_SHADOW, FFT_GLOW, FFT_BLUR, FFT_OUTLINE, O_HORIZONTAL, O_VERTICAL, TOVERFLOW_CLIP, TOVERFLOW_CHAR, TOVERFLOW_WORD, TOVERFLOW_LINE, DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT, EVENT_BREAK, EVENT_CONTINUE, GESTURE_DETECTOR_DRAG, GESTURE_DETECTOR_PINCH, GESTURE_DETECTOR_ROTATE, Linear, InQuad, OutQuad, InOutQuad, InCubic, OutCubic, InOutCubic, InQuintic, OutQuintic, InOutQuintic, InQuart, OutQuart, InOutQuart, InSine, OutSine, InOutSine, InCirc, OutCirc, InOutCirc, InExp, OutExp, InOutExp, InElastic, OutElastic, InOutElastic, InBack, OutBack, InOutBack, InBounce, OutBounce, InOutBounce, InOutBezier, CosineFull, InStep, OutStep, Blink, DoubleBlink, BlinkSin, BlinkCos, Discrete8, Shake4, Shake6, S_KB_FOCUS, S_HOVER, S_TOP_HOVER, S_ACTIVE, S_MOUSE_ACTIVE, S_KBD_ACTIVE, S_HOTKEY_ACTIVE, S_TOUCH_ACTIVE, S_JOYSTICK_ACTIVE, S_VR_ACTIVE, S_DRAG, MR_NONE, MR_T, MR_R, MR_B, MR_L, MR_LT, MR_RT, MR_LB, MR_RB, MR_AREA, FMT_NO_WRAP, FMT_KEEP_SPACES, FMT_IGNORE_TAGS, FMT_HIDE_ELLIPSIS, FMT_AS_IS, DEVID_KEYBOARD, DEVID_MOUSE, DEVID_JOYSTICK, DEVID_TOUCH, DEVID_VR, KEEP_ASPECT_NONE, KEEP_ASPECT_FIT, KEEP_ASPECT_FILL, AXIS_L_THUMB_H, AXIS_L_THUMB_V, AXIS_R_THUMB_H, AXIS_R_THUMB_V, AXIS_L_TRIGGER, AXIS_R_TRIGGER, AXIS_LR_TRIGGER, XMB_STOP, XMB_CONTINUE, R_PROCESSED, SIZE_TO_CONTENT, Fonts, AnimProp, color, bgColor, fgColor, fillColor, borderColor, opacity, rotate, scale, translate, fValue, picSaturate, brightness, Behaviors, ScrollHandler, JoystickAxisObservable, ElemGroup, Behavior, Picture, Immediate, FormattedText, IGenVideoPlayer, IGenSound, DragAndDropState, EventDataRect, MouseClickEventData, HotkeyEventData, HoverEventData, MoveToAreaTarget, Color, sw, sh, flex, fontH, pw, ph, elemw, elemh, locate_element_source, get_element_info, get_font_metrics, resolve_button, setFontDefHt, getFontDefHt, getFontInitialHt, calc_str_box, LottieAnimation, ElementRef } = require("daRg")
+
+
+

or:

+
from "daRg" import *
+
+
+
//'daRg' exports:
+{
+  const KBD_BIT_CAPS_LOCK
+  const KBD_BIT_NUM_LOCK
+  const KBD_BIT_SCROLL_LOCK
+  const PANEL_ANCHOR_NONE
+  const PANEL_ANCHOR_SCENE
+  const PANEL_ANCHOR_VRSPACE
+  const PANEL_ANCHOR_HEAD
+  const PANEL_ANCHOR_LEFTHAND
+  const PANEL_ANCHOR_RIGHTHAND
+  const PANEL_ANCHOR_ENTITY
+  const PANEL_GEOMETRY_NONE
+  const PANEL_GEOMETRY_RECTANGLE
+  const PANEL_RC_NONE
+  const PANEL_RC_FACE_LEFT_HAND
+  const PANEL_RC_FACE_RIGHT_HAND
+  const PANEL_RC_FACE_HEAD
+  const PANEL_RC_FACE_HEAD_LOCK_Y
+  const PANEL_RC_FACE_ENTITY
+  const PANEL_RENDER_CAST_SHADOW
+  const PANEL_RENDER_OPAQUE
+  const PANEL_RENDER_ALWAYS_ON_TOP
+  class GuiScene
+  class SceneConfig
+  function anim_start()
+  function anim_request_stop()
+  function anim_skip()
+  function anim_skip_delay()
+  function set_kb_focus()
+  function capture_kb_focus()
+  function calc_comp_size(arg0): null or table or closure_and_nativeclosure or class_instance or class -> _undocumented_
+  function move_mouse_cursor(arg0, arg1, ...): any_type, bool, any_type -> _undocumented_
+  function get_mouse_cursor_pos(arg0, ...): class_instance, any_type -> _undocumented_
+  function resolve_button_id(arg0): string -> _undocumented_
+  value gui_scene
+  const FLOW_PARENT_RELATIVE
+  const FLOW_HORIZONTAL
+  const FLOW_VERTICAL
+  const ALIGN_LEFT
+  const ALIGN_TOP
+  const ALIGN_RIGHT
+  const ALIGN_BOTTOM
+  const ALIGN_CENTER
+  const VECTOR_WIDTH
+  const VECTOR_COLOR
+  const VECTOR_FILL_COLOR
+  const VECTOR_MID_COLOR
+  const VECTOR_OUTER_LINE
+  const VECTOR_CENTER_LINE
+  const VECTOR_INNER_LINE
+  const VECTOR_TM_OFFSET
+  const VECTOR_TM_SCALE
+  const VECTOR_LINE
+  const VECTOR_LINE_INDENT_PX
+  const VECTOR_LINE_INDENT_PCT
+  const VECTOR_ELLIPSE
+  const VECTOR_SECTOR
+  const VECTOR_RECTANGLE
+  const VECTOR_POLY
+  const VECTOR_INVERSE_POLY
+  const VECTOR_OPACITY
+  const VECTOR_LINE_DASHED
+  const VECTOR_NOP
+  const VECTOR_QUADS
+  const FFT_NONE
+  const FFT_SHADOW
+  const FFT_GLOW
+  const FFT_BLUR
+  const FFT_OUTLINE
+  const O_HORIZONTAL
+  const O_VERTICAL
+  const TOVERFLOW_CLIP
+  const TOVERFLOW_CHAR
+  const TOVERFLOW_WORD
+  const TOVERFLOW_LINE
+  const DIR_UP
+  const DIR_DOWN
+  const DIR_LEFT
+  const DIR_RIGHT
+  const EVENT_BREAK
+  const EVENT_CONTINUE
+  const GESTURE_DETECTOR_DRAG
+  const GESTURE_DETECTOR_PINCH
+  const GESTURE_DETECTOR_ROTATE
+  const Linear
+  const InQuad
+  const OutQuad
+  const InOutQuad
+  const InCubic
+  const OutCubic
+  const InOutCubic
+  const InQuintic
+  const OutQuintic
+  const InOutQuintic
+  const InQuart
+  const OutQuart
+  const InOutQuart
+  const InSine
+  const OutSine
+  const InOutSine
+  const InCirc
+  const OutCirc
+  const InOutCirc
+  const InExp
+  const OutExp
+  const InOutExp
+  const InElastic
+  const OutElastic
+  const InOutElastic
+  const InBack
+  const OutBack
+  const InOutBack
+  const InBounce
+  const OutBounce
+  const InOutBounce
+  const InOutBezier
+  const CosineFull
+  const InStep
+  const OutStep
+  const Blink
+  const DoubleBlink
+  const BlinkSin
+  const BlinkCos
+  const Discrete8
+  const Shake4
+  const Shake6
+  const S_KB_FOCUS
+  const S_HOVER
+  const S_TOP_HOVER
+  const S_ACTIVE
+  const S_MOUSE_ACTIVE
+  const S_KBD_ACTIVE
+  const S_HOTKEY_ACTIVE
+  const S_TOUCH_ACTIVE
+  const S_JOYSTICK_ACTIVE
+  const S_VR_ACTIVE
+  const S_DRAG
+  const MR_NONE
+  const MR_T
+  const MR_R
+  const MR_B
+  const MR_L
+  const MR_LT
+  const MR_RT
+  const MR_LB
+  const MR_RB
+  const MR_AREA
+  const FMT_NO_WRAP
+  const FMT_KEEP_SPACES
+  const FMT_IGNORE_TAGS
+  const FMT_HIDE_ELLIPSIS
+  const FMT_AS_IS
+  const DEVID_KEYBOARD
+  const DEVID_MOUSE
+  const DEVID_JOYSTICK
+  const DEVID_TOUCH
+  const DEVID_VR
+  const KEEP_ASPECT_NONE
+  const KEEP_ASPECT_FIT
+  const KEEP_ASPECT_FILL
+  const AXIS_L_THUMB_H
+  const AXIS_L_THUMB_V
+  const AXIS_R_THUMB_H
+  const AXIS_R_THUMB_V
+  const AXIS_L_TRIGGER
+  const AXIS_R_TRIGGER
+  const AXIS_LR_TRIGGER
+  const XMB_STOP
+  const XMB_CONTINUE
+  const R_PROCESSED
+  const SIZE_TO_CONTENT
+  value Fonts
+  enum AnimProp
+  value color
+  value bgColor
+  value fgColor
+  value fillColor
+  value borderColor
+  value opacity
+  value rotate
+  value scale
+  value translate
+  value fValue
+  value picSaturate
+  value brightness
+  table Behaviors
+  class ScrollHandler
+  class JoystickAxisObservable
+  class ElemGroup
+  class Behavior
+  class Picture
+  class Immediate
+  class FormattedText
+  class IGenVideoPlayer
+  class IGenSound
+  class DragAndDropState
+  class EventDataRect
+  class MouseClickEventData
+  class HotkeyEventData
+  class HoverEventData
+  class MoveToAreaTarget
+  function Color(arg0, arg1, arg2, arg3, ...): integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type -> _undocumented_
+  function sw()
+  function sh()
+  function flex(arg0, ...): integer_or_float, any_type -> _undocumented_
+  function fontH(arg0): integer_or_float -> _undocumented_
+  function pw(arg0): integer_or_float -> _undocumented_
+  function ph(arg0): integer_or_float -> _undocumented_
+  function elemw(arg0): integer_or_float -> _undocumented_
+  function elemh(arg0): integer_or_float -> _undocumented_
+  function locate_element_source(arg0): class_instance -> _undocumented_
+  function get_element_info(arg0): class_instance -> _undocumented_
+  function get_font_metrics(arg0, ...): integer, any_type -> _undocumented_
+  function resolve_button(fontId, fontHt): integer, float -> table
+  function setFontDefHt(font_name, pix_ht): string, integer -> bool
+  function getFontDefHt(font_name): string -> integer
+  function getFontInitialHt(font_name): string -> integer
+  function calc_str_box(element_or_text, element_or_style): string|closure_and_nativeclosure|table, table|closure_and_nativeclosure|null -> array
+  class LottieAnimation
+  class ElementRef
+}
+
+
+
+
+const KBD_BIT_CAPS_LOCK = 1
+
+ +
+
+const KBD_BIT_NUM_LOCK = 2
+
+ +
+
+const KBD_BIT_SCROLL_LOCK = 4
+
+ +
+
+const PANEL_ANCHOR_NONE = int
+
+ +
+
+const PANEL_ANCHOR_SCENE = int
+
+ +
+
+const PANEL_ANCHOR_VRSPACE = int
+
+ +
+
+const PANEL_ANCHOR_HEAD = int
+
+ +
+
+const PANEL_ANCHOR_LEFTHAND = int
+
+ +
+
+const PANEL_ANCHOR_RIGHTHAND = int
+
+ +
+
+const PANEL_ANCHOR_ENTITY = int
+
+ +
+
+const PANEL_GEOMETRY_NONE = int
+
+ +
+
+const PANEL_GEOMETRY_RECTANGLE = int
+
+ +
+
+const PANEL_RC_NONE = int
+
+ +
+
+const PANEL_RC_FACE_LEFT_HAND = int
+
+ +
+
+const PANEL_RC_FACE_RIGHT_HAND = int
+
+ +
+
+const PANEL_RC_FACE_HEAD = int
+
+ +
+
+const PANEL_RC_FACE_HEAD_LOCK_Y = int
+
+ +
+
+const PANEL_RC_FACE_ENTITY = int
+
+ +
+
+const PANEL_RENDER_CAST_SHADOW = int
+
+ +
+
+const PANEL_RENDER_OPAQUE = int
+
+ +
+
+const PANEL_RENDER_ALWAYS_ON_TOP = int
+
+ +
+

class GuiScene

+
+
+method GuiScene.setUpdateHandler(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (closure_and_nativeclosure or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, closure_and_nativeclosure or null

+
+ +
+
+method GuiScene.setShutdownHandler(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (closure_and_nativeclosure or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, closure_and_nativeclosure or null

+
+ +
+
+method GuiScene.setHotkeysNavHandler(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (closure_and_nativeclosure or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, closure_and_nativeclosure or null

+
+ +
+
+method GuiScene.addPanel(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg2 (closure_and_nativeclosure or table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: class_instance, integer, closure_and_nativeclosure or table

+
+ +
+
+method GuiScene.removePanel(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer

+
+ +
+
+method GuiScene.mark_panel_dirty(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer

+
+ +
+
+method GuiScene.setXmbFocus(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (null or table()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, null or table

+
+ +
+
+method GuiScene.getCompAABBbyKey()
+
+ +
+
+method GuiScene.setConfigProps(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, table

+
+ +
+
+method GuiScene.haveActiveCursorOnPanels()
+
+ +
+
+method GuiScene.clearTimer()
+
+ +
+
+property GuiScene.config
+

readonly

+
+ +
+
+method GuiScene.getAllObservables()
+
+ +
+
+property GuiScene.cursorPresent
+

readonly

+
+ +
+
+property GuiScene.cursorOverStickScroll
+

readonly

+
+ +
+
+property GuiScene.cursorOverClickable
+

readonly

+
+ +
+
+property GuiScene.hoveredClickableInfo
+

readonly

+
+ +
+
+property GuiScene.keyboardLayout
+

readonly

+
+ +
+
+property GuiScene.keyboardLocks
+

readonly

+
+ +
+
+property GuiScene.updateCounter
+

readonly

+
+ +
+
+property GuiScene.circleButtonAsAction
+

readonly

+
+ +
+
+property GuiScene.xmbMode
+

readonly

+
+ +
+
+method GuiScene.getJoystickAxis()
+
+ +
+
+method GuiScene.enableInput()
+
+ +
+
+method GuiScene.forceCursorActive(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (bool or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, bool or null

+
+ +

/;

+

#define V(x) .Var(#x, &SceneConfig::x)

+
+
+

class SceneConfig

+
+

Sqrat::Class<SceneConfig, Sqrat::NoConstructor<SceneConfig>> sqSceneConfig(sqvm, “SceneConfig”); +sqSceneConfig

+
+
+
+var SceneConfig.defaultFont
+

.SquirrelProp(“defaultFont”, SceneConfig::getDefaultFontId, SceneConfig::setDefaultFontId)

+
+ +
+
+var SceneConfig.defaultFontSize
+

.SquirrelProp(“defaultFontSize”, SceneConfig::getDefaultFontSize, SceneConfig::setDefaultFontSize)

+
+ +
+
+var SceneConfig.kbCursorControl
+

V(kbCursorControl)

+
+ +
+
+var SceneConfig.gamepadCursorControl
+

V(gamepadCursorControl)

+
+ +
+
+var SceneConfig.gamepadCursorSpeed
+

V(gamepadCursorSpeed)

+
+ +
+
+var SceneConfig.gamepadCursorHoverMaxTime
+

V(gamepadCursorHoverMaxTime)

+
+ +
+
+var SceneConfig.gamepadCursorAxisV
+

V(gamepadCursorAxisV)

+
+ +
+
+var SceneConfig.gamepadCursorAxisH
+

V(gamepadCursorAxisH)

+
+ +
+
+var gamepadCursorHoverMinMul
+

V(gamepadCursorHoverMinMul)

+
+ +
+
+var SceneConfig.gamepadCursorHoverMaxMul
+

V(gamepadCursorHoverMaxMul)

+
+ +
+
+var SceneConfig.gamepadCursorDeadZone
+

V(gamepadCursorDeadZone)

+
+ +
+
+var SceneConfig.gamepadCursorNonLin
+

V(gamepadCursorNonLin)

+
+ +
+
+var SceneConfig.reportNestedWatchedUpdate
+

V(reportNestedWatchedUpdate)

+
+ +
+
+var SceneConfig.joystickScrollAxisH
+

V(joystickScrollAxisH)

+
+ +
+
+var SceneConfig.joystickScrollAxisV
+

V(joystickScrollAxisV)

+
+ +
+
+var SceneConfig.clickRumbleEnabled
+

V(clickRumbleEnabled)

+
+ +
+
+var SceneConfig.clickRumbleLoFreq
+

V(clickRumbleLoFreq)

+
+ +
+
+var SceneConfig.clickRumbleHiFreq
+

V(clickRumbleHiFreq)

+
+ +
+
+var SceneConfig.clickRumbleDuration
+

V(clickRumbleDuration)

+
+ +
+
+var SceneConfig.dirPadRepeatDelay
+

V(dirPadRepeatDelay)

+
+ +
+
+var SceneConfig.dirPadRepeatTime
+

V(dirPadRepeatTime)

+
+ +
+
+var SceneConfig.useDefaultCursor
+

V(useDefaultCursor)

+
+ +
+
+var SceneConfig.defaultCursor
+

V(defaultCursor)

+
+ +
+
+var SceneConfig.clickPriority
+

V(actionClickByBehavior) +.Prop(“defSceneBgColor”, &SceneConfig::getDefSceneBgColor, &SceneConfig::setDefSceneBgColor) +.Prop(“defTextColor”, &SceneConfig::getDefTextColor, &SceneConfig::setDefTextColor) +.SquirrelFunc(“setClickButtons”, &SceneConfig::setClickButtons, 2, “xa”) +.SquirrelFunc(“getClickButtons”, &SceneConfig::getClickButtons, 1, “x”)

+
+ +

/*

+
+
+function anim_start()
+
+ +
+
+function anim_request_stop()
+
+ +
+
+function anim_skip()
+
+ +
+
+function anim_skip_delay()
+
+ +
+
+function set_kb_focus()
+
+ +
+
+function capture_kb_focus()
+
+ +
+
+function calc_comp_size(arg0)
+
+
Arguments:
+
    +
  • arg0 (null or table or closure_and_nativeclosure or class_instance or class()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, null or table or closure_and_nativeclosure or class_instance or class

+
+ +
+
+function move_mouse_cursor(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (bool()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, any_type, bool

+
+ +
+
+function get_mouse_cursor_pos(arg0, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-1

+

typecheck mask: any_type, class_instance

+
+ +
+
+function resolve_button_id(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+gui_scene = instance of GuiScene
+

type: GuiScene

+
+ +

/;

+
+

moduleMgr->addNativeModule(“daRg”, dargModuleExports);

+
+

}

+

} // namespace darg

+
+
+const FLOW_PARENT_RELATIVE
+
+ +
+
+const FLOW_HORIZONTAL
+
+ +
+
+const FLOW_VERTICAL
+
+ +
+
+const ALIGN_LEFT = ALIGN_LEFT
+
+ +
+
+const ALIGN_TOP = ALIGN_TOP
+
+ +
+
+const ALIGN_RIGHT = ALIGN_RIGHT
+
+ +
+
+const ALIGN_BOTTOM = ALIGN_BOTTOM
+
+ +
+
+const ALIGN_CENTER = ALIGN_CENTER
+
+ +
+
+const VECTOR_WIDTH
+
+ +
+
+const VECTOR_COLOR
+
+ +
+
+const VECTOR_FILL_COLOR
+
+ +
+
+const VECTOR_MID_COLOR
+
+ +
+
+const VECTOR_OUTER_LINE
+
+ +
+
+const VECTOR_CENTER_LINE
+
+ +
+
+const VECTOR_INNER_LINE
+
+ +
+
+const VECTOR_TM_OFFSET
+
+ +
+
+const VECTOR_TM_SCALE
+
+ +
+
+const VECTOR_LINE
+
+ +
+
+const VECTOR_LINE_INDENT_PX
+
+ +
+
+const VECTOR_LINE_INDENT_PCT
+
+ +
+
+const VECTOR_ELLIPSE
+
+ +
+
+const VECTOR_SECTOR
+
+ +
+
+const VECTOR_RECTANGLE
+
+ +
+
+const VECTOR_POLY
+
+ +
+
+const VECTOR_INVERSE_POLY
+
+ +
+
+const VECTOR_OPACITY
+
+ +
+
+const VECTOR_LINE_DASHED
+
+ +
+
+const VECTOR_NOP
+
+ +
+
+const VECTOR_QUADS
+
+ +
+
+const FFT_NONE
+
+ +
+
+const FFT_SHADOW
+
+ +
+
+const FFT_GLOW
+
+ +
+
+const FFT_BLUR
+
+ +
+
+const FFT_OUTLINE
+
+ +
+
+const O_HORIZONTAL
+
+ +
+
+const O_VERTICAL
+
+ +
+
+const TOVERFLOW_CLIP
+
+ +
+
+const TOVERFLOW_CHAR
+
+ +
+
+const TOVERFLOW_WORD
+
+ +
+
+const TOVERFLOW_LINE
+
+ +
+
+const DIR_UP
+
+ +
+
+const DIR_DOWN
+
+ +
+
+const DIR_LEFT
+
+ +
+
+const DIR_RIGHT
+
+ +
+
+const EVENT_BREAK = GuiScene::EVENT_BREAK
+
+ +
+
+const EVENT_CONTINUE = GuiScene::EVENT_CONTINUE
+
+ +
+
+const GESTURE_DETECTOR_DRAG = GestureDetector::Type::DRAG
+
+ +
+
+const GESTURE_DETECTOR_PINCH = GestureDetector::Type::PINCH
+
+ +
+
+const GESTURE_DETECTOR_ROTATE = GestureDetector::Type::ROTATE
+
+ +
+
+const Linear
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InQuad
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutQuad
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutQuad
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InCubic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutCubic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutCubic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InQuintic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutQuintic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutQuintic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InQuart
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutQuart
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutQuart
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InSine
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutSine
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutSine
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InCirc
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutCirc
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutCirc
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InExp
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutExp
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutExp
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InElastic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutElastic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutElastic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InBack
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutBack
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutBack
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InBounce
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutBounce
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutBounce
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutBezier
+
+ +

Easing function for prebuilt animations functions.

+
+
+const CosineFull
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InStep
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutStep
+
+ +

Easing function for prebuilt animations functions.

+
+ +
+ +

Easing function for prebuilt animations functions.

+
+ +
+ +

Easing function for prebuilt animations functions.

+
+
+const BlinkSin
+
+ +

Easing function for prebuilt animations functions.

+
+
+const BlinkCos
+
+ +

Easing function for prebuilt animations functions.

+
+
+const Discrete8
+
+ +

Easing function for prebuilt animations functions.

+
+
+const Shake4
+
+ +

Easing function for prebuilt animations functions.

+
+
+const Shake6
+
+ +

Easing function for prebuilt animations functions.

+
+
+const S_KB_FOCUS
+
+ +

State flag for keyboard focus.

+
+
+const S_HOVER
+
+ +
+
+const S_TOP_HOVER
+
+ +
+
+const S_ACTIVE
+
+ +

state flag for ‘pressed’ button.

+
+
+const S_MOUSE_ACTIVE
+
+ +

state flag for ‘pressed’ button with mouse.

+
+
+const S_KBD_ACTIVE
+
+ +

state flag for ‘pressed’ button with keyboard.

+
+
+const S_HOTKEY_ACTIVE
+
+ +

state flag for ‘pressed’ button with hotkey.

+
+
+const S_TOUCH_ACTIVE
+
+ +

state flag for pressed button with touch device.

+
+
+const S_JOYSTICK_ACTIVE
+
+ +

state flag for pressed button with joystick/gamepad device.

+
+
+const S_VR_ACTIVE
+
+ +

state flag for pressed button with VR controller.

+
+
+const S_DRAG
+
+ +

state flag for dragged state.

+
+
+const MR_NONE
+
+ +

.MOVE_RESIZE Beahvior constants, to define where was point started move or resize

+
+
+const MR_T
+
+ +
+
+const MR_R
+
+ +
+
+const MR_B
+
+ +
+
+const MR_L
+
+ +
+
+const MR_LT
+
+ +
+
+const MR_RT
+
+ +
+
+const MR_LB
+
+ +
+
+const MR_RB
+
+ +
+
+const MR_AREA
+
+ +
+
+const FMT_NO_WRAP
+
+ +
+
+const FMT_KEEP_SPACES
+
+ +
+
+const FMT_IGNORE_TAGS
+
+ +
+
+const FMT_HIDE_ELLIPSIS
+
+ +
+
+const FMT_AS_IS
+
+ +
+
+const DEVID_KEYBOARD
+
+ +
+
+const DEVID_MOUSE
+
+ +
+
+const DEVID_JOYSTICK
+
+ +
+
+const DEVID_TOUCH
+
+ +
+
+const DEVID_VR
+
+ +
+
+const KEEP_ASPECT_NONE
+
+ +
+
+const KEEP_ASPECT_FIT
+
+ +
+
+const KEEP_ASPECT_FILL
+
+ +
+
+const AXIS_L_THUMB_H
+
+ +
+
+const AXIS_L_THUMB_V
+
+ +
+
+const AXIS_R_THUMB_H
+
+ +
+
+const AXIS_R_THUMB_V
+
+ +
+
+const AXIS_L_TRIGGER
+
+ +
+
+const AXIS_R_TRIGGER
+
+ +
+
+const AXIS_LR_TRIGGER
+
+ +
+
+const XMB_STOP
+
+ +
+
+const XMB_CONTINUE
+
+ +
+
+const R_PROCESSED
+
+ +
+
+const SIZE_TO_CONTENT
+
+ +
+
+Fonts
+
+ +
+
+

enum AnimProp

+
+
+color
+
+ +
+
+bgColor
+
+ +
+
+fgColor
+
+ +
+
+fillColor
+
+ +
+
+borderColor
+
+ +
+
+opacity
+
+ +
+
+rotate
+
+ +
+
+scale
+
+ +
+
+translate
+
+ +
+
+fValue
+
+ +
+
+picSaturate
+
+ +
+
+brightness
+
+ +

/;

+
+
+

table Behaviors

+
+
+const Behaviors.Button
+

BHV(Button, bhv_button)

+
+ +
+
+const Behaviors.TextArea
+

BHV(TextArea, bhv_text_area)

+
+ +
+
+const Behaviors.TextInput
+

BHV(TextInput, bhv_text_input)

+
+ +
+
+const Behaviors.Slider
+

BHV(Slider, bhv_slider)

+
+ +
+
+const Behaviors.Pannable
+

BHV(Pannable, bhv_pannable)

+
+ +
+
+const Behaviors.Pannable2touch
+

BHV(Pannable2touch, bhv_pannable_2touch)

+
+ +
+
+const Behaviors.SwipeScroll
+

BHV(SwipeScroll, bhv_swipe_scroll)

+
+ +
+
+const Behaviors.MoveResize
+

BHV(MoveResize, bhv_move_resize)

+
+ +
+
+const Behaviors.ComboPopup
+

BHV(ComboPopup, bhv_combo_popup)

+
+ +
+
+const Behaviors.SmoothScrollStack
+

BHV(SmoothScrollStack, bhv_smooth_scroll_stack)

+
+ +
+
+const Behaviors.Marquee
+

BHV(Marquee, bhv_marquee)

+
+ +
+
+const Behaviors.WheelScroll
+

BHV(WheelScroll, bhv_wheel_scroll)

+
+ +
+
+const Behaviors.ScrollEvent
+

BHV(ScrollEvent, bhv_scroll_event)

+
+ +
+
+const Behaviors.InspectPicker
+

BHV(InspectPicker, bhv_inspect_picker)

+
+ +
+
+const Behaviors.RtPropUpdate
+

BHV(RtPropUpdate, bhv_rt_prop_update)

+
+ +
+
+const Behaviors.RecalcHandler
+

BHV(RecalcHandler, bhv_recalc_handler)

+
+ +
+
+const Behaviors.DragAndDrop
+

BHV(DragAndDrop, bhv_drag_and_drop)

+
+ +
+
+const Behaviors.FpsBar
+

BHV(FpsBar, bhv_fps_bar)

+
+ +
+
+const Behaviors.LatencyBar
+

BHV(LatencyBar, bhv_latency_bar)

+
+ +
+
+const Behaviors.OverlayTransparency
+

BHV(OverlayTransparency, bhv_overlay_transparency)

+
+ +
+
+const Behaviors.BoundToArea
+

place object inside an area (like placing tooltip under cursor BUT inside screen)

+
+ +
+
+const Behaviors.Movie
+

fields in component description:

+
+
@code:

movie:string = <path to movie file in .ivf file format> +loop:boolean = default true. Should video be looped +sound:string = path to .mp3 sound file. By default movie file with .mp3 added (like “<video_file_name_with_ext>.mp3”.). +enableSound:boolean = default true. Will play sound if sound track exists. Note: sound is not synced with video. +onStart: function = optional callback, called when movie started +onError: function = optional callback, called when playback failed to start +onFinish: function = optional callback, called when movie finished/terminated (can be used to remove it from layout)

+
+
+

code@

+
+ +
+

Note

+

Note: sound is played only for one-shot video.

+
+
+
+const Behaviors.Parallax
+
+ +
+
+const Behaviors.PieMenu
+
+ +
+
+const Behaviors.TransitionSize
+
+ +
+
+const Behaviors.TrackMouse
+
+ +
+
+const Behaviors.MoveToArea
+
+ +
+
+const Behaviors.ProcessPointingInput
+
+ +
+
+const Behaviors.ProcessGesture
+
+ +
+
+const Behaviors.EatInput
+
+ +
+
+const Behaviors.TextAreaEdit
+
+ +
+
+

class ScrollHandler

+
+
+ScrollHandler()
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ScrollHandler.scrollToX()
+
+ +
+
+method ScrollHandler.scrollToY()
+
+ +
+
+method ScrollHandler.scrollToChildren()
+
+ +
+
+property ScrollHandler.elem
+

readonly

+
+ +

/;

+
+
+

class JoystickAxisObservable

+
+

Sqrat::DerivedClass<JoystickAxisObservable, BaseObservable> joyAxisObservable(sqvm, “JoystickAxisObservable”); +joyAxisObservable //

+
+

.Prop(“value”, &JoystickAxisObservable::getValue) +.Var(“resolution”, &JoystickAxisObservable::resolution) +.Var(“deadzone”, &JoystickAxisObservable::deadzone)

+
+
+

/*

+
+
+

class ElemGroup

+
+
+

class Behavior

+
+
+

class Picture

+
+
+Picture(arg0)
+
+
Arguments:
+
    +
  • arg0 (null or string()) – autodoc from typemask/paramscheck

  • +
+
+
+

typecheck mask: any_type, null or string

+
+ +
+
+

class Immediate extends Picture

+
+
+Immediate(arg0)
+
+
Arguments:
+
    +
  • arg0 (null or string()) – autodoc from typemask/paramscheck

  • +
+
+
+

typecheck mask: any_type, null or string

+
+ +
+
+

class FormattedText

+
+
+

class IGenVideoPlayer

+
+
+

class IGenSound

+
+
+

class DragAndDropState

+
+
+

class EventDataRect

+
+
+EventDataRect.l
+
+ +
+
+EventDataRect.t
+
+ +
+
+EventDataRect.r
+
+ +
+
+EventDataRect.b
+
+ +
+
+

class MouseClickEventData

+
+
+property MouseClickEventData.targetRect
+

readonly

+
+ +

/; +#undef V

+
+
+

class HotkeyEventData

+
+

Sqrat::Class<HotkeyEventData, Sqrat::DefaultAllocator<HotkeyEventData>> sqHotkeyEventData(sqvm, “HotkeyEventData”); +sqHotkeyEventData.Prop(“targetRect”, &HotkeyEventData::getTargetRect);

+
+
+
+

class HoverEventData

+
+

Sqrat::Class<HoverEventData, Sqrat::DefaultAllocator<HoverEventData>> sqHoverEventData(sqvm, “HoverEventData”); +sqHoverEventData.Prop(“targetRect”, &HoverEventData::getTargetRect);

+

Sqrat::Class<AllTransitionsConfig> sqTransitAll(sqvm, “TransitAll”); +sqTransitAll.Ctor<const Sqrat::Object &>();

+

EditableText::bind_script(exports);

+
+
+
+

class MoveToAreaTarget

+
+

Sqrat::Class<BhvMoveToAreaTarget> sqBhvMoveToAreaTarget(sqvm, “BhvMoveToAreaTarget”); +sqBhvMoveToAreaTarget //

+
+

.Func(“set”, &BhvMoveToAreaTarget::set) +.Func(“clear”, &BhvMoveToAreaTarget::clear)

+
+
+

/*

+
+
+function Color(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-4

+

typecheck mask: any_type, integer_or_float, integer_or_float, integer_or_float, integer_or_float

+
+ +
+
+function sw()
+
+ +
+
+function sh()
+
+ +
+
+function flex(arg0, ...)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-1

+

typecheck mask: any_type, integer_or_float

+
+ +
+
+function fontH(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer_or_float

+
+ +
+
+function pw(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer_or_float

+
+ +
+
+function ph(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer_or_float

+
+ +
+
+function elemw(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer_or_float

+
+ +
+
+function elemh(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer_or_float

+
+ +
+
+function locate_element_source(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, class_instance

+
+ +
+
+function get_element_info(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, class_instance

+
+ +
+
+function get_font_metrics(arg0, ...)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, integer

+
+ +
+
+function resolve_button(fontId, fontHt)
+
+
Arguments:
+
    +
  • fontId (integer()) –

  • +
  • fontHt (float()) – optional, default is _def_fontHt font height set in font

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+
Returns:
+

font_params

+
+
Return type:
+

table

+
+
+
+ +
+
font_params
+
{
+  _def_fontHt : def height
+  fontHt : height
+  capsHt : height of H
+  lineSpacing : linespacing
+  ascent
+  descent
+  lowercaseHeight : height of x
+}
+@code
+
+
+
+
+
+function setFontDefHt(font_name, pix_ht)
+
+
Arguments:
+
    +
  • font_name (string()) –

  • +
  • pix_ht (integer()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function getFontDefHt(font_name)
+
+
Arguments:
+
    +
  • font_name (string()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function getFontInitialHt(font_name)
+
+
Arguments:
+
    +
  • font_name (string()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function calc_str_box(element_or_text, element_or_style)
+
+
Arguments:
+
    +
  • element_or_text (string|closure_and_nativeclosure|table()) – should be string of text or darg component description with ‘text’ in it

  • +
  • element_or_style (table|closure_and_nativeclosure|null()) – optional, if first element is text, it should be provided with font properties

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, string or table or closure_and_nativeclosure, table or closure_and_nativeclosure or null

+
+
Returns:
+

return array of two objects with width and height of text

+
+
Return type:
+

array

+
+
+
+ +

/;

+
+

register_constants(sqvm); +register_fonts(exports); +register_anim_props(sqvm);

+

register_std_behaviors(module_mgr);

+

register_rendobj_script_ids(sqvm);

+

Cursor::bind_script(exports); +ElementRef::bind_script(sqvm); +Sqrat::Class<Element, Sqrat::NoConstructor<Element>> sqElement(sqvm, “@Element”);

+

bind_das(exports);

+

Sqrat::Table dargDebug(sqvm);

+
+
+
+

class LottieAnimation extends Picture

+
+
+LottieAnimation(arg0)
+
+
Arguments:
+
    +
  • arg0 (null or string()) – autodoc from typemask/paramscheck

  • +
+
+
+

typecheck mask: any_type, null or string

+
+ +
+
+

class ElementRef

+
+
+method ElementRef.getCompDesc()
+
+ +
+
+method ElementRef.getScreenPosX(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getScreenPosY(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getWidth(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getHeight(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getContentWidth(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getContentHeight(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getScrollOffsX(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getScrollOffsY(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +

/; +}

+

} // namespace darg

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/darg_framework/index.html b/api-references/quirrel-modules/quirrel-modules/darg_framework/index.html new file mode 100644 index 000000000..0903271ce --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/darg_framework/index.html @@ -0,0 +1,214 @@ + + + + + + + daRg framework — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/darg_framework/renderCanvas.html b/api-references/quirrel-modules/quirrel-modules/darg_framework/renderCanvas.html new file mode 100644 index 000000000..f7f55cfe8 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/darg_framework/renderCanvas.html @@ -0,0 +1,325 @@ + + + + + + + renderCanvas — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

renderCanvas

+
+

for render canvas

+
+

Source file: prog/gameLibs/daRg/canvasDraw.cpp

+

use it to draw in canvas

+
+
+function line(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (array()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:4

+

typecheck mask: userdata, array, integer_or_float, any_type

+
+ +

function comment

+
+
+function line_dashed(arg0, arg1, arg2, arg3, arg4)
+
+
Arguments:
+
    +
  • arg0 (array()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg4 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:6

+

typecheck mask: userdata, array, integer_or_float, integer_or_float, integer_or_float, any_type

+
+ +
+
+function fill_poly(arg0, arg1, arg2, arg3)
+
+
Arguments:
+
    +
  • arg0 (array()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg3 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:5

+

typecheck mask: userdata, array, integer_or_float, any_type, any_type

+
+ +
+
+function fill_inverse_poly(arg0, arg1, arg2, arg3)
+
+
Arguments:
+
    +
  • arg0 (array()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg3 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:5

+

typecheck mask: userdata, array, integer_or_float, any_type, any_type

+
+ +
+
+function ellipse(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg4 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg5 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg6 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg7 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:9

+

typecheck mask: userdata, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type, any_type, any_type

+
+ +
+
+function sector(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg4 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg5 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg6 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg7 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg8 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg9 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:11

+

typecheck mask: userdata, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type, any_type, any_type

+
+ +
+
+function rect(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg4 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg5 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg6 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg7 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:9

+

typecheck mask: userdata, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type, any_type, any_type

+
+ +

/; +}

+

} // namespace darg

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.html b/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.html new file mode 100644 index 000000000..b40008c8e --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.html @@ -0,0 +1,1630 @@ + + + + + + + ecs — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

ecs

+

module ‘ecs’

+

Source file: prog/gameLibs/ecs/scripts/sq/sqcoredaECS.cpp

+

Usage:

+
let { set_callback_timer, set_callback_timer_rt, clear_callback_timer, set_timer, clear_timer, BaseList, ListRO, List, COMP_FLAG_REPLICATED, COMP_FLAG_CHANGE_EVENT, INVALID_ENTITY_ID, EVCAST_UNICAST, EVCAST_BROADCAST, Event, SchemelessEvent, SQEvent, TemplateDB, EventsDB, Template, EntityManager, CompObjectRO, CompObject, CompArray, SqQuery, EntityId, _dbg_get_all_comps_inspect, _dbg_get_comp_val_inspect, obsolete_dbg_get_comp_val, get_comp_type, obsolete_dbg_set_comp_val, get_comp_flags, get_semantic_type, calc_hash, calc_hash_int, TYPE_NULL, TYPE_STRING, TYPE_INT8, TYPE_UINT8, TYPE_INT16, TYPE_UINT16, TYPE_INT, TYPE_UINT, TYPE_INT64, TYPE_UINT64, TYPE_FLOAT, TYPE_POINT2, TYPE_POINT3, TYPE_POINT4, TYPE_IPOINT2, TYPE_IPOINT3, TYPE_IPOINT4, TYPE_DPOINT3, TYPE_BOOL, TYPE_MATRIX, TYPE_EID, TYPE_COLOR, TYPE_OBJECT, TYPE_ARRAY, TYPE_SHARED_OBJECT, TYPE_SHARED_ARRAY, TYPE_INT_LIST, TYPE_UINT16_LIST, TYPE_STRING_LIST, TYPE_EID_LIST, TYPE_FLOAT_LIST, TYPE_POINT2_LIST, TYPE_POINT3_LIST, TYPE_POINT4_LIST, TYPE_IPOINT2_LIST, TYPE_IPOINT3_LIST, TYPE_IPOINT4_LIST, TYPE_BOOL_LIST, TYPE_TMATRIX_LIST, TYPE_COLOR_LIST, TYPE_INT64_LIST, TYPE_UINT64_LIST, TYPE_TAG, TYPE_AUTO, clear_vm_entity_systems, register_entity_system, modify_es_list, start_es_loading, end_es_loading, g_entity_mgr } = require("ecs")
+
+
+

or:

+
from "ecs" import *
+
+
+
//'ecs' exports:
+{
+  function set_callback_timer(handler, interval, repeat): sqObject, float, bool -> Object
+  function set_callback_timer_rt(handler, interval, repeat): sqObject, float, bool -> Object
+  function clear_callback_timer(handler): sqObject -> null
+  function set_timer(arg0): table -> _undocumented_
+  function clear_timer(arg0): table -> _undocumented_
+  class BaseList
+  class ListRO
+  class List
+  value COMP_FLAG_REPLICATED
+  value COMP_FLAG_CHANGE_EVENT
+  value INVALID_ENTITY_ID
+  value EVCAST_UNICAST
+  value EVCAST_BROADCAST
+  class Event
+  class SchemelessEvent
+  class SQEvent
+  class TemplateDB
+  class EventsDB
+  class Template
+  class EntityManager
+  class CompObjectRO
+  class CompObject
+  class CompArray
+  class SqQuery
+  class EntityId
+  function _dbg_get_all_comps_inspect(arg0): integer -> _undocumented_
+  function _dbg_get_comp_val_inspect(arg0, arg1, ...): integer, string, any_type -> _undocumented_
+  function obsolete_dbg_get_comp_val(arg0, arg1, ...): integer, string, any_type -> _undocumented_
+  function get_comp_type(eid, comp_name): ecs::EntityId, string -> integer
+  function obsolete_dbg_set_comp_val(arg0, arg1, ...): integer, string, any_type -> _undocumented_
+  function get_comp_flags(eid, comp): ecs::EntityId, string -> integer
+  function get_semantic_type(type_name): string -> component_type_t
+  function calc_hash(arg0): string -> _undocumented_
+  function calc_hash_int(arg0): string -> _undocumented_
+  value TYPE_NULL
+  const TYPE_STRING
+  const TYPE_INT8
+  const TYPE_UINT8
+  const TYPE_INT16
+  const TYPE_UINT16
+  const TYPE_INT
+  const TYPE_UINT
+  const TYPE_INT64
+  const TYPE_UINT64
+  const TYPE_FLOAT
+  const TYPE_POINT2
+  const TYPE_POINT3
+  const TYPE_POINT4
+  const TYPE_IPOINT2
+  const TYPE_IPOINT3
+  const TYPE_IPOINT4
+  const TYPE_DPOINT3
+  const TYPE_BOOL
+  const TYPE_MATRIX
+  const TYPE_EID
+  const TYPE_COLOR
+  const TYPE_OBJECT
+  const TYPE_ARRAY
+  const TYPE_SHARED_OBJECT
+  const TYPE_SHARED_ARRAY
+  const TYPE_INT_LIST
+  const TYPE_UINT16_LIST
+  const TYPE_STRING_LIST
+  const TYPE_EID_LIST
+  const TYPE_FLOAT_LIST
+  const TYPE_POINT2_LIST
+  const TYPE_POINT3_LIST
+  const TYPE_POINT4_LIST
+  const TYPE_IPOINT2_LIST
+  const TYPE_IPOINT3_LIST
+  const TYPE_IPOINT4_LIST
+  const TYPE_BOOL_LIST
+  const TYPE_TMATRIX_LIST
+  const TYPE_COLOR_LIST
+  const TYPE_INT64_LIST
+  const TYPE_UINT64_LIST
+  const TYPE_TAG
+  const TYPE_AUTO
+  function clear_vm_entity_systems()
+  function register_entity_system(arg0, arg1, arg2, arg3, ...): string, table, table, table or null, any_type -> _undocumented_
+  function modify_es_list(arg0): closure_and_nativeclosure -> _undocumented_
+  function start_es_loading()
+  function end_es_loading()
+  value g_entity_mgr
+}
+
+
+
+
+function set_callback_timer(handler, interval, repeat)
+
+
Arguments:
+
    +
  • handler (sqObject()) –

  • +
  • interval (float()) –

  • +
  • repeat (bool()) –

  • +
+
+
Returns:
+

Object

+
+
+
+ +
+
+function set_callback_timer_rt(handler, interval, repeat)
+
+
Arguments:
+
    +
  • handler (sqObject()) –

  • +
  • interval (float()) –

  • +
  • repeat (bool()) –

  • +
+
+
Returns:
+

Object

+
+
+
+ +
+
+function clear_callback_timer(handler)
+
+
Arguments:
+
    +
  • handler (sqObject()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function set_timer(arg0)
+
+
Arguments:
+
    +
  • arg0 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, table

+
+ +
+
+function clear_timer(arg0)
+
+
Arguments:
+
    +
  • arg0 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, table

+
+ +

/; +}

+

void shutdown_timers(HSQUIRRELVM /*vm

+
+

class BaseList

+
+

This is not real class. Just all List classes has this methods!

+
+
Real classes are following:
    +
  • CompIntList(RO)

  • +
  • CompUInt16List(RO)

  • +
  • CompStringList(RO)

  • +
  • CompEidList(RO)

  • +
  • CompFloatList(RO)

  • +
  • CompPoint2List(RO)

  • +
  • CompPoint3List(RO)

  • +
  • CompPoint4List(RO)

  • +
  • CompIPoint2List(RO)

  • +
  • CompIPoint3List(RO)

  • +
  • CompBoolList(RO)

  • +
  • CompTMatrixList(RO)

  • +
  • CompColorList(RO)

  • +
  • CompInt64List(RO)

  • +
  • CompUInt64List(RO)

  • +
+
+
+
+
+
+BaseList()
+
+ +
+
+operator BaseList._get(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, any_type

+
+ +
+
+operator BaseList._nexti(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer or null

+
+ +
+
+method BaseList.len()
+
+ +
+
+method BaseList.indexof(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, any_type, integer

+
+ +
+
+method BaseList.getAll(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method BaseList.isReadOnly(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method BaseList.listType(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +

/;

+
+

if (readonly)

+
+
+
+

class ListRO extends ecs.BaseList

+
+
+
sqListClass //

.SquirrelFunc(“_set”, readonly_method_error, 3, “xi.”) +.SquirrelFunc(“append”, readonly_method_error, -2, “x.i”) +.SquirrelFunc(“insert”, readonly_method_error, -3, “xi.i”) +.SquirrelFunc(“remove”, readonly_method_error, 2, “xi”) +.SquirrelFunc(“pop”, readonly_method_error, 1, “x”) +.SquirrelFunc(“clear”, readonly_method_error, 1, “x”)

+
+
+
+

/*

+
+
+

class List extends ecs.BaseList

+
+
+operator List._set(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: class_instance, integer, any_type

+
+ +
+
+method List.append(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, any_type, integer

+
+ +
+
+method List.insert(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: class_instance, integer, any_type, integer

+
+ +
+
+method List.remove(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer

+
+ +
+
+method List.pop(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method List.clear()
+
+ +

/;

+
+

tbl.Bind(type_name, sqListClass);

+
+

}

+

template <typename TypeRW, typename TypeRO, typename ItemType> +static void bind_list_type(HSQUIRRELVM vm, Sqrat::Table &tbl, const char *type_name) +{

+
+

using TS = eastl::fixed_string<char, 256>;

+
+

bind_list_class<Sqrat::Class<TypeRO>, TypeRO, ItemType, /*ro

+
+
+COMP_FLAG_REPLICATED
+
+ +
+
+COMP_FLAG_CHANGE_EVENT
+
+ +
+
+INVALID_ENTITY_ID
+
+ +
+
+EVCAST_UNICAST
+
+ +
+
+EVCAST_BROADCAST
+
+ +
+
+

class Event

+
+
+method Event.getType()
+
+ +
+
+

class SchemelessEvent extends Event

+
+
+SchemelessEvent()
+
+ +
+
+

class SQEvent extends ecs.SchemelessEvent

+
+
+SQEvent()
+
+ +
+
+

class TemplateDB

+
+
+method TemplateDB.getTemplateByName()
+
+ +
+
+method TemplateDB.size()
+
+ +
+
+method TemplateDB.getTemplateMetaInfo()
+
+ +
+
+method TemplateDB.getComponentMetaInfo()
+
+ +
+
+method TemplateDB.hasComponentMetaInfo()
+
+ +

/;

+
+
+

class EventsDB

+
+

Sqrat::Class<EventsDB, Sqrat::NoConstructor<EventsDB>> sqEventsDB(vm, “EventsDB”); +sqEventsDB //

+
+

.Func(“findEvent”, &EventsDB::findEvent) +.Func(“hasEventScheme”, &EventsDB::hasEventScheme) +.Func(“getFieldsCount”, &EventsDB::getFieldsCount) +.Func(“findFieldIndex”, &EventsDB::findFieldIndex) +.Func(“getFieldName”, &EventsDB::getFieldName) +.Func(“getFieldType”, &EventsDB::getFieldType) +.Func(“getFieldOffset”, &EventsDB::getFieldOffset) +.SquirrelFunc(“getEventFieldValue”, evtdb_get_event_field, 4, “.xii”)

+
+
+

/*

+
+
+

class Template

+
+
+method Template.getName()
+
+ +
+
+method Template.getBase()
+
+ +
+
+method Template.getCompVal(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string

+
+ +
+
+method Template.getCompValNullable(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string

+
+ +
+
+method Template.hasComponent()
+
+ +
+
+method Template.getNumParentTemplates()
+
+ +
+
+method Template.getParentTemplate()
+
+ +
+
+method Template.getComponentsNames(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method Template.getTags(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +

/;

+
+

typedef bool (EntityManager::*removeCompFunc)(EntityId, const char *);

+
+
+
+

class EntityManager

+
+

Sqrat::Class<EntityManager, Sqrat::NoConstructor<EntityManager>> sqEntityManager(vm, “EntityManager”); +sqEntityManager //

+
+

.Func(“destroyEntity”, (bool(EntityManager::*)(const ecs::EntityId &)) & EntityManager::destroyEntity) +.Func(“doesEntityExist”, &EntityManager::doesEntityExist) +.Func(“getNumEntities”, &EntityManager::getNumEntities)

+

//.Func(“getNumComponents”, &EntityManager::getNumComponents)

+

.SquirrelFunc(“sendEvent”, emgr_send_event, 3, “xix”) +.SquirrelFunc(“broadcastEvent”, emgr_bcast_event, 2, “xx”)

+

//.Func(“getEntityTemplate”, &EntityManager::getEntityTemplate) +.Func(“getEntityTemplateName”, &EntityManager::getEntityTemplateName) +.Func(“getEntityFutureTemplateName”, &EntityManager::getEntityFutureTemplateName) +.GlobalFunc(“getTemplateDB”, emgr_get_tempate_db) // FIXME: sqrat binding is not supports returning references from member

+
+

// functions

+
+

.GlobalFunc(“getEventsDB”, emgr_get_events_db) +.SquirrelFunc(“createEntity”, create_entity, -3, “xstc|o”) +.SquirrelFunc(“createEntitySync”, create_entity_sync, -3, “xst|o”) +.SquirrelFunc(“reCreateEntityFrom”, recreate_entity, -4, “xistc|o”) +.SquirrelFunc(“createTemplate”, create_template, -3, “xstssis”) +.GlobalFunc(“getComponentType”, emgr_get_component_type) +.GlobalFunc(“getComponentTypeName”, emgr_get_component_type_name) +.GlobalFunc(“getTypeName”, emgr_get_type_name)

+
+
+

/*

+
+
+var EntityManager.dt
+
+ +
+
+var EntityManager.curTime
+
+ +

/;

+
+
+

class CompObjectRO

+
+

Sqrat::Class<ecs::ObjectRO> sqCompObjectRO(vm, “CompObjectRO”); +sqCompObjectRO //

+
+

.SquirrelFunc(“isReadOnly”, comp_is_readonly<true>, 1, “x”)

+
+
+

.SquirrelFunc(“getAll”, comp_obj_get_all<ecs::ObjectRO, ecs::ArrayRO, /*RO

+
+
+operator CompObjectRO._get(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string

+
+ +
+
+operator CompObjectRO._set(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: class_instance, string, any_type

+
+ +
+
+operator CompObjectRO._newslot(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: class_instance, string, any_type

+
+ +
+
+operator CompObjectRO._nexti(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string or null

+
+ +
+
+method CompObjectRO.remove(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string

+
+ +
+
+method CompObjectRO.len()
+
+ +

/;

+
+
+

class CompObject extends ecs.CompObjectRO

+
+

Sqrat::DerivedClass<ecs::Object, ecs::ObjectRO> sqCompObject(vm, “CompObject”); +sqCompObject //

+
+

.SquirrelFunc(“isReadOnly”, comp_is_readonly<false>, 1, “x”) +.SquirrelFunc(“getAll”, comp_obj_get_all<ecs::Object, ecs::Array, false>, 1, “x”) +.SquirrelFunc(“_get”, comp_obj_get<ecs::Object, false>, 2, “xs”) +.SquirrelFunc(“_set”, comp_obj_set<ecs::Object>, 3, “xs.”) +.SquirrelFunc(“_newslot”, comp_obj_set<ecs::Object>, 3, “xs.”) +.SquirrelFunc(“_nexti”, comp_obj_nexti<ecs::Object>, 2, “xs|o”) +.SquirrelFunc(“remove”, comp_obj_erase<ecs::Object>, 2, “xs”) +.GlobalFunc(“len”, comp_t_len<ecs::Object>)

+
+
+

/*

+
+
+method CompObject.isReadOnly(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method CompObject.getAll(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+operator CompObject._get(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer

+
+ +
+
+operator CompObject._set(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: class_instance, integer, any_type

+
+ +
+
+operator CompObject._nexti(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer or null

+
+ +
+
+method CompObject.len()
+
+ +
+
+method CompObject.indexof(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, any_type, integer

+
+ +
+
+method CompObject.append(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, any_type, integer

+
+ +
+
+method CompObject.insert(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: class_instance, integer, any_type, integer

+
+ +
+
+method CompObject.remove(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer

+
+ +
+
+method CompObject.pop(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +

/;

+
+
+

class CompArray extends ecs.CompArrayRO

+
+

Sqrat::DerivedClass<ecs::Array, ecs::ArrayRO> sqCompArray(vm, “CompArray”); +sqCompArray //

+
+

.SquirrelFunc(“isReadOnly”, comp_is_readonly<false>, 1, “x”) +.SquirrelFunc(“getAll”, comp_arr_get_all<ecs::Object, ecs::Array, false>, 1, “x”) +.SquirrelFunc(“_get”, comp_arr_get<ecs::Array, false>, 2, “x.”) +.SquirrelFunc(“_set”, comp_arr_set<ecs::Array>, 3, “xi.”) +.SquirrelFunc(“_nexti”, comp_arr_nexti<ecs::Array>, 2, “xi|o”) +.GlobalFunc(“len”, comp_t_len<ecs::Array>) +.SquirrelFunc(“indexof”, comp_arr_indexof<ecs::Array>, -2, “x.i”) +.SquirrelFunc(“append”, comp_arr_append<ecs::Array>, -2, “x.i”) +.SquirrelFunc(“insert”, comp_arr_insert<ecs::Array>, -3, “xi.i”) +.SquirrelFunc(“remove”, comp_arr_remove<ecs::Array>, 2, “xi”) +.SquirrelFunc(“pop”, comp_arr_pop<ecs::Array>, 1, “x”) +.GlobalFunc(“clear”, comp_arr_clear<ecs::Array>)

+
+
+

/*

+
+
+

class SqQuery

+
+
+SqQuery(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (table()) – autodoc from typemask/paramscheck

  • +
  • arg2 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: class_instance, string, table, string

+
+ +
+
+method SqQuery.perform(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer or closure_and_nativeclosure()) – autodoc from typemask/paramscheck

  • +
  • arg2 (closure_and_nativeclosure or string or null()) – autodoc from typemask/paramscheck

  • +
  • arg3 (string or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, integer or closure_and_nativeclosure, closure_and_nativeclosure or string or null, string or null

+
+ +
+
+operator SqQuery._call(arg0, arg1, arg2, arg3, arg4, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer or closure_and_nativeclosure()) – autodoc from typemask/paramscheck

  • +
  • arg3 (closure_and_nativeclosure or string or null()) – autodoc from typemask/paramscheck

  • +
  • arg4 (string or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: class_instance, any_type, integer or closure_and_nativeclosure, closure_and_nativeclosure or string or null, string or null

+
+ +

/;

+
+
+

class EntityId

+
+

Sqrat::Class<ecs::EntityId> sqEntityId(vm, “EntityId”); +sqEntityId.SquirrelCtor(eid_ctor, -1, “xi”);

+

Sqrat::DerivedClass<EventDataGetter, ecs::Event, Sqrat::NoConstructor<EventDataGetter>> sqEventGetterProxy(vm, “EventDataGetter”);

+

sqEventGetterProxy.Var(“data”, &EventDataGetter::sqData);

+
+
tblEcs //

.Func(“get_component_name_by_idx”, get_component_name_by_idx) +.Func(“get_component_name_by_hash”, get_component_name_by_hash) +.SquirrelFunc(“register_sq_event”, register_sq_event, -2, “.sb|ii|o”)

+
+
+
+

/*

+
+
+function _dbg_get_all_comps_inspect(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer

+
+ +
+
+function _dbg_get_comp_val_inspect(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, integer, string

+
+ +
+
+function obsolete_dbg_get_comp_val(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, integer, string

+
+ +
+
+function get_comp_type(eid, comp_name)
+
+
Arguments:
+
    +
  • eid (ecs::EntityId()) –

  • +
  • comp_name (string()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function obsolete_dbg_set_comp_val(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, integer, string

+
+ +
+
+function get_comp_flags(eid, comp)
+
+
Arguments:
+
    +
  • eid (ecs::EntityId()) –

  • +
  • comp (string()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function get_semantic_type(type_name)
+
+
Arguments:
+
    +
  • type_name (string()) –

  • +
+
+
Returns:
+

component_type_t

+
+
+
+ +
+
+function calc_hash(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+function calc_hash_int(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+TYPE_NULL
+
+ +
+
+const TYPE_STRING
+
+ +
+
+const TYPE_INT8
+
+ +
+
+const TYPE_UINT8
+
+ +
+
+const TYPE_INT16
+
+ +
+
+const TYPE_UINT16
+
+ +
+
+const TYPE_INT
+
+ +
+
+const TYPE_UINT
+
+ +
+
+const TYPE_INT64
+
+ +
+
+const TYPE_UINT64
+
+ +
+
+const TYPE_FLOAT
+
+ +
+
+const TYPE_POINT2
+
+ +
+
+const TYPE_POINT3
+
+ +
+
+const TYPE_POINT4
+
+ +
+
+const TYPE_IPOINT2
+
+ +
+
+const TYPE_IPOINT3
+
+ +
+
+const TYPE_IPOINT4
+
+ +
+
+const TYPE_DPOINT3
+
+ +
+
+const TYPE_BOOL
+
+ +
+
+const TYPE_MATRIX
+
+ +
+
+const TYPE_EID
+
+ +
+
+const TYPE_COLOR
+
+ +
+
+const TYPE_OBJECT
+
+ +
+
+const TYPE_ARRAY
+
+ +
+
+const TYPE_SHARED_OBJECT
+
+ +
+
+const TYPE_SHARED_ARRAY
+
+ +
+
+const TYPE_INT_LIST
+
+ +
+
+const TYPE_UINT16_LIST
+
+ +
+
+const TYPE_STRING_LIST
+
+ +
+
+const TYPE_EID_LIST
+
+ +
+
+const TYPE_FLOAT_LIST
+
+ +
+
+const TYPE_POINT2_LIST
+
+ +
+
+const TYPE_POINT3_LIST
+
+ +
+
+const TYPE_POINT4_LIST
+
+ +
+
+const TYPE_IPOINT2_LIST
+
+ +
+
+const TYPE_IPOINT3_LIST
+
+ +
+
+const TYPE_IPOINT4_LIST
+
+ +
+
+const TYPE_BOOL_LIST
+
+ +
+
+const TYPE_TMATRIX_LIST
+
+ +
+
+const TYPE_COLOR_LIST
+
+ +
+
+const TYPE_INT64_LIST
+
+ +
+
+const TYPE_UINT64_LIST
+
+ +
+
+const TYPE_TAG
+
+ +
+
+const TYPE_AUTO
+
+ +
+
+function clear_vm_entity_systems()
+
+ +
+
+function register_entity_system(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (table()) – autodoc from typemask/paramscheck

  • +
  • arg2 (table()) – autodoc from typemask/paramscheck

  • +
  • arg3 (table or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-4

+

typecheck mask: any_type, string, table, table, table or null

+
+ +
+
+function modify_es_list(arg0)
+
+
Arguments:
+
    +
  • arg0 (closure_and_nativeclosure()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, closure_and_nativeclosure

+
+ +
+
+function start_es_loading()
+
+ +
+
+function end_es_loading()
+
+ +
+
+g_entity_mgr = instance of EntityManager class
+

type: class_instance

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.netevent.html b/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.netevent.html new file mode 100644 index 000000000..f73747a68 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.netevent.html @@ -0,0 +1,271 @@ + + + + + + + ecs.netevent — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

ecs.netevent

+

module ‘ecs.netevent’

+

Source file: prog/gameLibs/ecs/scripts/sq/netsqevent.cpp

+

Usage:

+
let { server_send_net_sqevent, server_broadcast_net_sqevent, client_request_unicast_net_sqevent, client_request_broadcast_net_sqevent } = require("ecs.netevent")
+
+
+

or:

+
from "ecs.netevent" import *
+
+
+
//'ecs.netevent' exports:
+{
+  function server_send_net_sqevent(arg0, arg1, arg2, ...): integer, class_instance, array or null, any_type -> _undocumented_
+  function server_broadcast_net_sqevent(arg0, arg1, ...): class_instance, array or null, any_type -> _undocumented_
+  function client_request_unicast_net_sqevent(arg0, arg1, ...): integer, class_instance or null, any_type -> _undocumented_
+  function client_request_broadcast_net_sqevent(arg0, ...): class_instance or null, any_type -> _undocumented_
+}
+
+
+
+
+function server_send_net_sqevent(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg2 (array or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, integer, class_instance, array or null

+
+ +
+
+function server_broadcast_net_sqevent(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (array or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, class_instance, array or null

+
+ +
+
+function client_request_unicast_net_sqevent(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, integer, class_instance or null

+
+ +
+
+function client_request_broadcast_net_sqevent(arg0, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, class_instance or null

+
+ +
+
/;

module_mgr->addNativeModule(“ecs.netevent”, exports);

+
+
+

}

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/index.html b/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/index.html new file mode 100644 index 000000000..52f60ad3a --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/index.html @@ -0,0 +1,208 @@ + + + + + + + Quirrel ECS — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/net.html b/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/net.html new file mode 100644 index 000000000..0eeea7f10 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_daECS/net.html @@ -0,0 +1,246 @@ + + + + + + + net — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

net

+

module ‘net’

+

Source file: prog/gameLibs/ecs/scripts/sq/netBindSq.cpp

+

Usage:

+
let { is_server, has_network, get_replay_proto_version, INVALID_CONNECTION_ID } = require("net")
+
+
+

or:

+
from "net" import *
+
+
+
//'net' exports:
+{
+  function is_server()
+  function has_network()
+  function get_replay_proto_version()
+  value INVALID_CONNECTION_ID
+}
+
+
+
+
+function is_server()
+
+ +
+
+function has_network()
+
+ +
+
+function get_replay_proto_version()
+
+ +
+
+INVALID_CONNECTION_ID
+
+ +

/; +#define DC(x) tbl.SetValue(#x, x);

+
+

DANET_DEFINE_DISCONNECTION_CAUSES

+
+

#undef DC

+
+

ecs::sq::EventsBind<

+
+
+
#define NET_ECS_EVENT(e, …) e,

NET_ECS_EVENTS

+
+
#undef NET_ECS_EVENT
+

ecs::sq::term_event_t>::bindall(tbl);

+
+
+
if (!existingModule)

module_mgr->addNativeModule(“net”, tbl);

+
+
+
+
+

}

+

} // namespace sq

+

} // namespace ecs

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/DataBlock.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/DataBlock.html new file mode 100644 index 000000000..c0677db29 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/DataBlock.html @@ -0,0 +1,774 @@ + + + + + + + DataBlock — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

DataBlock

+

module ‘DataBlock’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/sqratDataBlock.cpp

+

Usage:

+
let DataBlock = require("DataBlock")
+
+
+

or:

+
from "DataBlock" import *
+
+
+
//'DataBlock' exports:
+class DataBlock
+
+
+
+

class DataBlock

+
+
+DataBlock(arg0, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-1

+

typecheck mask: class_instance, class_instance

+
+ +
+
+method DataBlock.formatAsString(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (table or integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-1

+

typecheck mask: class_instance, table or integer_or_float, integer_or_float, integer_or_float

+
+ +
+
+method DataBlock.getBlock()
+
+ +
+
+method DataBlock.addBlock()
+
+ +
+
+method DataBlock.addNewBlock()
+
+ +
+
+method DataBlock.getStr()
+
+ +
+
+method DataBlock.getBool()
+
+ +
+
+method DataBlock.getReal()
+
+ +
+
+method DataBlock.getPoint4()
+
+ +
+
+method DataBlock.getPoint3()
+
+ +
+
+method DataBlock.getPoint2()
+
+ +
+
+method DataBlock.getTm()
+
+ +
+
+method DataBlock.getE3dcolor()
+
+ +
+
+method DataBlock.setStr()
+
+ +
+
+method DataBlock.setBool()
+
+ +
+
+method DataBlock.setReal()
+
+ +
+
+method DataBlock.setPoint4()
+
+ +
+
+method DataBlock.setPoint3()
+
+ +
+
+method DataBlock.setPoint2()
+
+ +
+
+method DataBlock.setTm()
+
+ +
+
+method DataBlock.setE3dcolor()
+
+ +
+
+method DataBlock.addStr()
+
+ +
+
+method DataBlock.addBool()
+
+ +
+
+method DataBlock.addReal()
+
+ +
+
+method DataBlock.addPoint3()
+
+ +
+
+method DataBlock.addPoint4()
+
+ +
+
+method DataBlock.addPoint2()
+
+ +
+
+method DataBlock.addTm()
+
+ +
+
+method DataBlock.addE3dcolor()
+
+ +
+
+method DataBlock.removeParam()
+
+ +
+
+method DataBlock.removeParamById()
+
+ +
+
+method DataBlock.removeBlock()
+
+ +
+
+method DataBlock.removeBlockById()
+
+ +
+
+method DataBlock.__getVersion(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method DataBlock.findParam()
+
+ +
+
+method DataBlock.paramExists()
+
+ +
+
+method DataBlock.getBlockByName()
+
+ +
+
+method DataBlock.setParamFrom()
+
+ +
+
+method DataBlock.setParamsFrom()
+
+ +
+
+method DataBlock.setFrom()
+
+ +
+
+method DataBlock.setInt()
+
+ +
+
+method DataBlock.setInt64()
+
+ +
+
+method DataBlock.addInt()
+
+ +
+
+method DataBlock.getIPoint3()
+
+ +
+
+method DataBlock.setIPoint3()
+
+ +
+
+method DataBlock.addIPoint3()
+
+ +
+
+method DataBlock.getParamTypeAnnotation(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer

+
+ +
+
+method DataBlock.getParamValue(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer

+
+ +
+
+method DataBlock.getInt(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, string

+
+ +
+
+operator DataBlock._set(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: class_instance, string

+
+ +
+
+operator DataBlock._get(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance

+
+ +
+
+operator DataBlock._modulo(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string

+
+ +
+
+operator DataBlock._newslot(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: class_instance, string

+
+ +
+
+operator DataBlock._nexti()
+
+ +
+
+method DataBlock.loadFromText(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: class_instance, string, integer

+
+ +
+
+method DataBlock.set_root()
+
+ +
+
+method DataBlock.setParseIncludesAsParams()
+
+ +
+
+method DataBlock.getParseIncludesAsParams()
+
+ +
+
+method DataBlock.setParseOverridesNotApply()
+
+ +
+
+method DataBlock.getParseOverridesNotApply()
+
+ +
+
+method DataBlock.setParseOverridesIgnored()
+
+ +
+
+method DataBlock.getParseOverridesIgnored()
+
+ +
+
+method DataBlock.setParseCommentsAsParams()
+
+ +
+
+method DataBlock.getParseCommentsAsParams()
+
+ +

/;

+
+

if (allow_file_access) +{

+
+
+
(void)sqDataBlock //

.SquirrelFunc(“load”, blk_load, 2, “xs”) +.SquirrelFunc(“tryLoad”, blk_try_load, -2, “xs”) +.SquirrelFunc(“saveToTextFile”, blk_saveToTextFile, 2, “xs”) +.SquirrelFunc(“saveToTextFileCompact”, blk_saveToTextFileCompact, 2, “xs”)

+
+
+
+
+

/*

+
+
+method DataBlock.load(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string

+
+ +
+
+method DataBlock.tryLoad(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, string

+
+ +
+
+method DataBlock.saveToTextFile(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string

+
+ +
+
+method DataBlock.saveToTextFileCompact(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string

+
+ +
+
/;

}

+
+
+

#undef FUNC

+
+

Sqrat::Object classObj(sqDataBlock.GetObject(), vm); +module_mgr->addNativeModule(“DataBlock”, classObj);

+
+

}

+

} // namespace bindquirrel

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/base64.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/base64.html new file mode 100644 index 000000000..e665b7bb2 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/base64.html @@ -0,0 +1,331 @@ + + + + + + + base64 — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

base64

+

module ‘base64’

+

Source file: prog/gameLibs/quirrel/base64/base64.cpp

+

Usage:

+
let { encodeString, decodeString, encodeJson, encodeBlk, encodeBlob } = require("base64")
+
+
+

or:

+
from "base64" import *
+
+
+
//'base64' exports:
+{
+  function encodeString(text): string -> string
+  function decodeString(text): string -> string
+  function encodeJson(obj): sqObject -> string
+  function encodeBlk(blk): DataBlock -> string
+  function encodeBlob(arg0): class_instance -> _undocumented_
+}
+
+
+
+
+function encodeString(text)
+
+
Arguments:
+
    +
  • text (string()) –

  • +
+
+
Returns:
+

string

+
+
+
+ +
+
+function decodeString(text)
+
+
Arguments:
+
    +
  • text (string()) –

  • +
+
+
Returns:
+

string

+
+
+
+ +
+
+function encodeJson(obj)
+
+
Arguments:
+
    +
  • obj (sqObject()) –

  • +
+
+
Returns:
+

string

+
+
+
+ +
+
+function encodeBlk(blk)
+
+
Arguments:
+
+
+
Returns:
+

string

+
+
+
+ +
+
+function encodeBlob(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, class_instance

+
+ +

/;

+
+

mgr->addNativeModule(“base64”, b64);

+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/browser.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/browser.html new file mode 100644 index 000000000..17bf2a2bc --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/browser.html @@ -0,0 +1,346 @@ + + + + + + + browser — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

browser

+

module ‘browser’

+

Source file: prog/gameLibs/quirrel/sqWebBrowser/sqWebBrowser.cpp

+

Usage:

+
let { can_use_embeded_browser, browser_go_back, browser_reload_page, browser_go, browser_get_current_url, browser_get_current_title, browser_add_window_method } = require("browser")
+
+
+

or:

+
from "browser" import *
+
+
+
//'browser' exports:
+{
+  function can_use_embeded_browser():  -> bool
+  function browser_go_back():  -> null
+  function browser_reload_page():  -> null
+  function browser_go(url): string -> null
+  function browser_get_current_url()
+  function browser_get_current_title()
+  function browser_add_window_method(name, params_cnt): string, unsigned -> null
+}
+
+
+

Opens and control embeded web browser. Requires native cef binary and its integration

+
+
+function can_use_embeded_browser()
+
+
Returns:
+

bool

+
+
+
+ +
+
+function browser_go_back()
+
+
Returns:
+

null

+
+
+
+ +
+
+function browser_reload_page()
+
+
Returns:
+

null

+
+
+
+ +
+
+function browser_go(url)
+
+
Arguments:
+
    +
  • url (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function browser_get_current_url()
+
+ +
+
+function browser_get_current_title()
+
+ +
+
+function browser_add_window_method(name, params_cnt)
+
+
Arguments:
+
    +
  • name (string()) –

  • +
  • params_cnt (unsigned()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +

/;

+
+

using namespace webbrowser;

+
+
+
#define CONST(x) tbl.SetValue(#x, x)

CONST(BROWSER_EVENT_INITIALIZED); +CONST(BROWSER_EVENT_DOCUMENT_READY); +CONST(BROWSER_EVENT_FAIL_LOADING_FRAME); +CONST(BROWSER_EVENT_CANT_DOWNLOAD);

+

CONST(BROWSER_EVENT_FINISH_LOADING_FRAME); +CONST(BROWSER_EVENT_BEGIN_LOADING_FRAME); +CONST(BROWSER_EVENT_NEED_RESEND_FRAME); +CONST(BROWSER_EVENT_BROWSER_CRASHED);

+
+
+

#undef CONST

+
+

sq_modules_mgr->addNativeModule(“browser”, tbl);

+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/console.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/console.html new file mode 100644 index 000000000..ee59b45d0 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/console.html @@ -0,0 +1,660 @@ + + + + + + + console — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

console

+

module ‘console’

+

Source file: prog/gameLibs/quirrel/sqConsole/sqConsole.cpp

+

Usage:

+
let { register_command, console_register_command, setObjPrintFunc, setConsoleObjPrintFunc, console_command, command } = require("console")
+
+
+

or:

+
from "console" import *
+
+
+
//'console' exports:
+{
+  function register_command(arg0, arg1, arg2, arg3, ...): closure_and_nativeclosure, string, string, string, any_type -> _undocumented_
+  function console_register_command(arg0, arg1, arg2, arg3, ...): closure_and_nativeclosure, string, string, string, any_type -> _undocumented_
+  function setObjPrintFunc(arg0): closure_and_nativeclosure or null -> _undocumented_
+  function setConsoleObjPrintFunc(arg0): closure_and_nativeclosure or null -> _undocumented_
+  function console_command()
+  function command()
+}
+
+
+
+
+function register_command(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (closure_and_nativeclosure()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • arg2 (string()) – autodoc from typemask/paramscheck

  • +
  • arg3 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, closure_and_nativeclosure, string, string, string

+
+ +
+
+function console_register_command(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (closure_and_nativeclosure()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • arg2 (string()) – autodoc from typemask/paramscheck

  • +
  • arg3 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, closure_and_nativeclosure, string, string, string

+
+ +
+
+function setObjPrintFunc(arg0)
+
+
Arguments:
+
    +
  • arg0 (closure_and_nativeclosure or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, closure_and_nativeclosure or null

+
+ +
+
+function setConsoleObjPrintFunc(arg0)
+
+
Arguments:
+
    +
  • arg0 (closure_and_nativeclosure or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, closure_and_nativeclosure or null

+
+ +
+
+function console_command()
+
+ +
+
+function command()
+
+ +

/;

+
+
+

module_mgr->addNativeModule(“console”, exports);

+

add_con_proc(this);

+
+

}

+

void clearScriptObjects() +{

+
+

scriptCommands.clear(); +objPrintFunc.Release();

+
+

}

+
+
+
private:

void registerClosure(eastl::string const &name, ClosureInfo &closure_info) { scriptCommands[name] = closure_info; }

+

bool processCommand(const char *argv[], int argc) override { return executeScript(argv, argc) || callScriptHandler(argv, argc); }

+

bool callScriptHandler(const char *argv[], int argc) +{

+
+

if (ICommandProcessor::cmdCollector) +{

+
+
+
for (auto const &cmdscriptCommands)
+
console::collector_cmp(argv[0], argc, cmd.first.c_str(), cmd.second.nParams, cmd.second.nParams,

cmd.second.description.c_str(), cmd.second.argsDescription.c_str());

+
+
+
+
+

return false;

+
+

} +auto it = scriptCommands.find(argv[0]); +if (it == scriptCommands.end())

+
+

return false;

+
+

ClosureInfo &cinfo = it->second; +int found = console::collector_cmp(argv[0], argc, argv[0], cinfo.nParams, cinfo.nParams, cinfo.description.c_str(),

+
+

cinfo.argsDescription.c_str());

+
+
+
if (found != 1)

return false;

+
+
+

String params(framemem_ptr()); +params += ‘[‘; +for (int i = 1; i < argc; i++) +{

+
+

params += argv[i]; +if (i < argc - 1)

+
+

params += “, “;

+
+
+

} +params += ‘]’;

+

Sqrat::Object sqParams = str_to_sqobj_via_json(sqvm, params);

+

eastl::vector<HSQOBJECT> sqArray; +if (sqParams.GetType() == OT_ARRAY) +{

+
+

Sqrat::Array array(sqParams); +int n = array.Length(); +sqArray.resize(n); +for (int i = 0; i < n; ++i)

+
+

sqArray[i] = array[i];

+
+
+

}

+

SQPrintCollector printCollector(sqvm); +if (!cinfo.closure.ExecuteDynArgs(sqArray.data(), sqArray.size()))

+
+

console::error(“failed to execute command: %s”, printCollector.output.str());

+
+
+
else

console::print_d(printCollector.output.str());

+
+
+

return true;

+
+

}

+

bool executeScript(const char *argv[], int argc) +{

+
+
+
if (argc == 0 || !sqvm || !execCmd)

return false;

+
+
+

int found = console::collector_cmp(argv[0], argc, execCmd, 2, 100); +if (found != 1 || ICommandProcessor::cmdCollector)

+
+

return false;

+
+

String code(framemem_ptr()); +for (int i = 1; i < argc; i++) +{

+
+

code += argv[i]; +if (i < argc - 1)

+
+

code += “ “;

+
+
+

}

+

HSQUIRRELVM vm = sqvm; +SqStackChecker stackCheck(vm); +Sqrat::string errMsg; +SQPrintCollector printCollector(vm);

+

String scriptSrc(framemem_ptr()); +scriptSrc.printf(0, “return (@() (n

+
+

%sn

+
+
+
))()”,

code.c_str());

+
+
+

stackCheck.check();

+

HSQOBJECT bindings = interactiveEnv;

+

if (SQ_SUCCEEDED(sq_compile(vm, scriptSrc.c_str(), scriptSrc.length(), “interactive”, true, &bindings))) +{

+
+

HSQOBJECT scriptClosure; +sq_getstackobj(vm, -1, &scriptClosure); +Sqrat::Function func(vm, Sqrat::Object(vm), scriptClosure); +Sqrat::Object result; +if (func.Evaluate(result)) +{

+
+

Sqrat::Table objFormatSettings(vm); +objFormatSettings.SetValue(“silentMode”, true); +objFormatSettings.SetValue(“printFn”, make_func_obj(vm, sq_debug_print_to_output_str, “console_print_collect”, 2));

+

Sqrat::Function debugTableDataSq = objPrintFunc; +if (debugTableDataSq.IsNull()) +{

+
+

debug(“SqConsole: object printing function not found for this VM, ‘tostring()’ will be used instead”); +Sqrat::Object stubFunc = make_func_obj(vm, stub_debug_table_data, “stubDebugTableData”, -2, nullptr); +debugTableDataSq = Sqrat::Function(vm, Sqrat::Object(vm), stubFunc);

+
+

}

+
+
if (!debugTableDataSq.IsNull())

debugTableDataSq.Execute(result, objFormatSettings);

+
+
+
+

} +sq_pop(vm, 1); // script closure

+
+

}

+

stackCheck.check();

+

console::print_d(printCollector.output.str());

+
+
if (!errMsg.empty())

console::error(errMsg.c_str());

+
+
+

return true;

+
+

}

+

void destroy() override {}

+

static SQInteger sqRegisterCommand(HSQUIRRELVM vm); +static SQInteger setObjPrintFunc(HSQUIRRELVM vm);

+
+
private:

HSQUIRRELVM sqvm; +Sqrat::Function objPrintFunc; +Sqrat::Table interactiveEnv; +String execCmd;

+

eastl::hash_map<eastl::string, ClosureInfo> scriptCommands;

+

friend void create_script_console_processor(SqModules *module_mgr, const char *cmd);

+
+
+

};

+

static eastl::map<HSQUIRRELVM, SqConsoleProcessor> sq_console_processors;

+

void create_script_console_processor(SqModules *module_mgr, const char *cmd) +{

+
+

HSQUIRRELVM vm = module_mgr->getVM(); +auto ins = sq_console_processors.insert(vm); +if (ins.second) // if inserted

+
+

ins.first->second.init(module_mgr, cmd);

+
+

else +{

+
+

SqConsoleProcessor &sqcp = ins.first->second; +if ((!cmd != sqcp.execCmd.empty()) || (cmd && !sqcp.execCmd.empty() && sqcp.execCmd != cmd))

+
+
+
G_ASSERTF(0, “Console processor is already registered for this VM with different command: %s vs %s”, cmd ? cmd“<null>”,

!sqcp.execCmd.empty() ? sqcp.execCmd.c_str() : “<null>”);

+
+
+
+
+

}

+
+

}

+

void destroy_script_console_processor(HSQUIRRELVM vm) { sq_console_processors.erase(vm); }

+

void clear_script_console_processor(HSQUIRRELVM vm) +{

+
+

auto it = sq_console_processors.find(vm); +if (it != sq_console_processors.end())

+
+

it->second.clearScriptObjects();

+
+
+

}

+

SQInteger SqConsoleProcessor::sqRegisterCommand(HSQUIRRELVM vm) +{

+
+

auto sconIt = sq_console_processors.find(vm); +if (sconIt == sq_console_processors.end())

+
+

return sq_throwerror(vm, “Script console is not active for this VM”);

+
+

SQInteger nargs = sq_gettop(vm); +ClosureInfo closureInfo; +if (SQ_FAILED(sq_getclosureinfo(vm, 2, &closureInfo.nParams, &closureInfo.nFreevars)))

+
+

return SQ_ERROR;

+
+

HSQOBJECT closureObj; +sq_getstackobj(vm, 2, &closureObj);

+

closureInfo.closure = Sqrat::Function(vm, Sqrat::Object(vm), closureObj);

+
+
if (SQ_FAILED(sq_getclosurename(vm, 2)))

return SQ_ERROR;

+
+
+

const char *closureName = nullptr; +bool anon = false; +if (SQ_FAILED(sq_getstring(vm, -1, &closureName)) || !closureName || closureName[0] == ‘(‘)

+
+

anon = true;

+
+

eastl::string cmd; +if (nargs > 2) +{

+
+

const char *arg = nullptr; +G_VERIFY(SQ_SUCCEEDED(sq_getstring(vm, 3, &arg))); +if (!arg || !*arg)

+
+

return sq_throwerror(vm, “Command name must not be empty”);

+
+

cmd = arg;

+
+

} +else if (!anon)

+
+

cmd = closureName;

+
+
+
else

return sq_throwerror(vm, “sqRegisterCommand: you must specify name for anonymous closure”);

+
+
+
+
+
#if DAGOR_DBGLEVEL > 0

if (nargs > 3) +{

+
+

const char *arg = nullptr; +G_VERIFY(SQ_SUCCEEDED(sq_getstring(vm, 4, &arg))); +closureInfo.description = arg;

+
+

}

+
+
+

#endif

+
+
#if DAGOR_DBGLEVEL > 0

if (nargs > 4) +{

+
+

const char *arg = nullptr; +G_VERIFY(SQ_SUCCEEDED(sq_getstring(vm, 5, &arg))); +closureInfo.argsDescription = arg;

+
+

} +else if (sq_isclosure(closureObj)) +{

+
+

eastl::string argsDesc; +SQFunctionProto *sq_function_proto = closureObj._unVal.pClosure->_function; +for (int i = 1, n = sq_function_proto->_nparameters; i < n; ++i) +{

+
+

SQObjectPtr parameter = sq_function_proto->_parameters[i]; +if (sq_isstring(parameter)) +{

+
+

const char *paramName = _stringval(parameter); +argsDesc.append_sprintf(“<%s> “, paramName);

+
+

}

+
+

} +closureInfo.argsDescription = argsDesc;

+
+

}

+
+
+

#endif

+
+

sconIt->second.registerClosure(cmd, closureInfo); +return 0;

+
+

}

+

SQInteger SqConsoleProcessor::setObjPrintFunc(HSQUIRRELVM vm) +{

+
+

auto sconIt = sq_console_processors.find(vm); +if (sconIt == sq_console_processors.end())

+
+

return sq_throwerror(vm, “Script console is not active for this VM”);

+
+

SqConsoleProcessor &self = sconIt->second;

+

Sqrat::Var<Sqrat::Object> func(vm, 2); +if (!func.value.IsNull())

+
+

self.objPrintFunc = Sqrat::Function(vm, Sqrat::Object(vm), func.value);

+
+
+
else

self.objPrintFunc.Release();

+
+
+

return 0;

+
+

}

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daEditorEmbedded.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daEditorEmbedded.html new file mode 100644 index 000000000..92338a9a7 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daEditorEmbedded.html @@ -0,0 +1,342 @@ + + + + + + + daEditorEmbedded — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

daEditorEmbedded

+

module ‘daEditorEmbedded’

+

Source file: prog/gameLibs/daEditorE/daEditorE_sq.cpp

+

Usage:

+
let { setEditMode, getEditMode, isFreeCamMode, DE4_MODE_SELECT, DE4_MODE_MOVE, DE4_MODE_MOVE_SURF, DE4_MODE_ROTATE, DE4_MODE_SCALE, DE4_MODE_POINT_ACTION, DE4_CMD_DROP, DE4_CMD_DEL, setWorkMode, getWorkMode, setPointActionPreview } = require("daEditorEmbedded")
+
+
+

or:

+
from "daEditorEmbedded" import *
+
+
+
//'daEditorEmbedded' exports:
+{
+  function setEditMode()
+  function getEditMode()
+  function isFreeCamMode()
+  value DE4_MODE_SELECT
+  value DE4_MODE_MOVE
+  value DE4_MODE_MOVE_SURF
+  value DE4_MODE_ROTATE
+  value DE4_MODE_SCALE
+  value DE4_MODE_POINT_ACTION
+  value DE4_CMD_DROP
+  value DE4_CMD_DEL
+  function setWorkMode()
+  function getWorkMode()
+  function setPointActionPreview()
+}
+
+
+
+
+function setEditMode()
+
+ +
+
+function getEditMode()
+
+ +
+
+function isFreeCamMode()
+
+ +
+
+DE4_MODE_SELECT
+
+ +
+
+DE4_MODE_MOVE
+
+ +
+
+DE4_MODE_MOVE_SURF
+
+ +
+
+DE4_MODE_ROTATE
+
+ +
+
+DE4_MODE_SCALE
+
+ +
+
+DE4_MODE_POINT_ACTION
+
+ +
+
+DE4_CMD_DROP
+
+ +
+
+DE4_CMD_DEL
+
+ +
+
+function setWorkMode()
+
+ +
+
+function getWorkMode()
+
+ +
+
+function setPointActionPreview()
+
+ +
+
/;

module_mgr->addNativeModule(“daEditorEmbedded”, daEditor);

+
+
+

}

+

void ObjectEditor::updateToolbarButtons() +{

+
+

sqeventbus::send_event(“daEditorEmbedded.onDeSetWorkMode”, Json::Value(workMode.c_str())); +sqeventbus::send_event(“daEditorEmbedded.onDeSetEditMode”, Json::Value(editMode));

+
+

}

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.debug.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.debug.html new file mode 100644 index 000000000..e682d9b61 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.debug.html @@ -0,0 +1,253 @@ + + + + + + + daRg.debug — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

daRg.debug

+

module ‘daRg.debug’

+

Source file: prog/gameLibs/daRg/scriptBinding.cpp

+

Usage:

+
let {  } = require("daRg.debug")
+
+
+

or:

+
from "daRg.debug" import *
+
+
+
//'daRg.debug' exports:
+{
+}
+
+
+dargDebug.Func("requireFontSizeSlot", dbg_set_require_font_size_slot);
+module_mgr->addNativeModule("daRg.debug", dargDebug);
+
+
+

}

+

} // namespace binding

+

} // namespace darg

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.html new file mode 100644 index 000000000..a70ad3c60 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.html @@ -0,0 +1,2651 @@ + + + + + + + daRg — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

daRg

+

module ‘daRg’

+

Source file: prog/gameLibs/daRg/elementRef.cpp

+

Usage:

+
let { KBD_BIT_CAPS_LOCK, KBD_BIT_NUM_LOCK, KBD_BIT_SCROLL_LOCK, PANEL_ANCHOR_NONE, PANEL_ANCHOR_SCENE, PANEL_ANCHOR_VRSPACE, PANEL_ANCHOR_HEAD, PANEL_ANCHOR_LEFTHAND, PANEL_ANCHOR_RIGHTHAND, PANEL_ANCHOR_ENTITY, PANEL_GEOMETRY_NONE, PANEL_GEOMETRY_RECTANGLE, PANEL_RC_NONE, PANEL_RC_FACE_LEFT_HAND, PANEL_RC_FACE_RIGHT_HAND, PANEL_RC_FACE_HEAD, PANEL_RC_FACE_HEAD_LOCK_Y, PANEL_RC_FACE_ENTITY, PANEL_RENDER_CAST_SHADOW, PANEL_RENDER_OPAQUE, PANEL_RENDER_ALWAYS_ON_TOP, GuiScene, SceneConfig, anim_start, anim_request_stop, anim_skip, anim_skip_delay, set_kb_focus, capture_kb_focus, calc_comp_size, move_mouse_cursor, get_mouse_cursor_pos, resolve_button_id, gui_scene, FLOW_PARENT_RELATIVE, FLOW_HORIZONTAL, FLOW_VERTICAL, ALIGN_LEFT, ALIGN_TOP, ALIGN_RIGHT, ALIGN_BOTTOM, ALIGN_CENTER, VECTOR_WIDTH, VECTOR_COLOR, VECTOR_FILL_COLOR, VECTOR_MID_COLOR, VECTOR_OUTER_LINE, VECTOR_CENTER_LINE, VECTOR_INNER_LINE, VECTOR_TM_OFFSET, VECTOR_TM_SCALE, VECTOR_LINE, VECTOR_LINE_INDENT_PX, VECTOR_LINE_INDENT_PCT, VECTOR_ELLIPSE, VECTOR_SECTOR, VECTOR_RECTANGLE, VECTOR_POLY, VECTOR_INVERSE_POLY, VECTOR_OPACITY, VECTOR_LINE_DASHED, VECTOR_NOP, VECTOR_QUADS, FFT_NONE, FFT_SHADOW, FFT_GLOW, FFT_BLUR, FFT_OUTLINE, O_HORIZONTAL, O_VERTICAL, TOVERFLOW_CLIP, TOVERFLOW_CHAR, TOVERFLOW_WORD, TOVERFLOW_LINE, DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT, EVENT_BREAK, EVENT_CONTINUE, GESTURE_DETECTOR_DRAG, GESTURE_DETECTOR_PINCH, GESTURE_DETECTOR_ROTATE, Linear, InQuad, OutQuad, InOutQuad, InCubic, OutCubic, InOutCubic, InQuintic, OutQuintic, InOutQuintic, InQuart, OutQuart, InOutQuart, InSine, OutSine, InOutSine, InCirc, OutCirc, InOutCirc, InExp, OutExp, InOutExp, InElastic, OutElastic, InOutElastic, InBack, OutBack, InOutBack, InBounce, OutBounce, InOutBounce, InOutBezier, CosineFull, InStep, OutStep, Blink, DoubleBlink, BlinkSin, BlinkCos, Discrete8, Shake4, Shake6, S_KB_FOCUS, S_HOVER, S_TOP_HOVER, S_ACTIVE, S_MOUSE_ACTIVE, S_KBD_ACTIVE, S_HOTKEY_ACTIVE, S_TOUCH_ACTIVE, S_JOYSTICK_ACTIVE, S_VR_ACTIVE, S_DRAG, MR_NONE, MR_T, MR_R, MR_B, MR_L, MR_LT, MR_RT, MR_LB, MR_RB, MR_AREA, FMT_NO_WRAP, FMT_KEEP_SPACES, FMT_IGNORE_TAGS, FMT_HIDE_ELLIPSIS, FMT_AS_IS, DEVID_KEYBOARD, DEVID_MOUSE, DEVID_JOYSTICK, DEVID_TOUCH, DEVID_VR, KEEP_ASPECT_NONE, KEEP_ASPECT_FIT, KEEP_ASPECT_FILL, AXIS_L_THUMB_H, AXIS_L_THUMB_V, AXIS_R_THUMB_H, AXIS_R_THUMB_V, AXIS_L_TRIGGER, AXIS_R_TRIGGER, AXIS_LR_TRIGGER, XMB_STOP, XMB_CONTINUE, R_PROCESSED, SIZE_TO_CONTENT, Fonts, AnimProp, color, bgColor, fgColor, fillColor, borderColor, opacity, rotate, scale, translate, fValue, picSaturate, brightness, Behaviors, ScrollHandler, JoystickAxisObservable, ElemGroup, Behavior, Picture, Immediate, FormattedText, IGenVideoPlayer, IGenSound, DragAndDropState, EventDataRect, MouseClickEventData, HotkeyEventData, HoverEventData, MoveToAreaTarget, Color, sw, sh, flex, fontH, pw, ph, elemw, elemh, locate_element_source, get_element_info, get_font_metrics, resolve_button, setFontDefHt, getFontDefHt, getFontInitialHt, calc_str_box, LottieAnimation, ElementRef } = require("daRg")
+
+
+

or:

+
from "daRg" import *
+
+
+
//'daRg' exports:
+{
+  const KBD_BIT_CAPS_LOCK
+  const KBD_BIT_NUM_LOCK
+  const KBD_BIT_SCROLL_LOCK
+  const PANEL_ANCHOR_NONE
+  const PANEL_ANCHOR_SCENE
+  const PANEL_ANCHOR_VRSPACE
+  const PANEL_ANCHOR_HEAD
+  const PANEL_ANCHOR_LEFTHAND
+  const PANEL_ANCHOR_RIGHTHAND
+  const PANEL_ANCHOR_ENTITY
+  const PANEL_GEOMETRY_NONE
+  const PANEL_GEOMETRY_RECTANGLE
+  const PANEL_RC_NONE
+  const PANEL_RC_FACE_LEFT_HAND
+  const PANEL_RC_FACE_RIGHT_HAND
+  const PANEL_RC_FACE_HEAD
+  const PANEL_RC_FACE_HEAD_LOCK_Y
+  const PANEL_RC_FACE_ENTITY
+  const PANEL_RENDER_CAST_SHADOW
+  const PANEL_RENDER_OPAQUE
+  const PANEL_RENDER_ALWAYS_ON_TOP
+  class GuiScene
+  class SceneConfig
+  function anim_start()
+  function anim_request_stop()
+  function anim_skip()
+  function anim_skip_delay()
+  function set_kb_focus()
+  function capture_kb_focus()
+  function calc_comp_size(arg0): null or table or closure_and_nativeclosure or class_instance or class -> _undocumented_
+  function move_mouse_cursor(arg0, arg1, ...): any_type, bool, any_type -> _undocumented_
+  function get_mouse_cursor_pos(arg0, ...): class_instance, any_type -> _undocumented_
+  function resolve_button_id(arg0): string -> _undocumented_
+  value gui_scene
+  const FLOW_PARENT_RELATIVE
+  const FLOW_HORIZONTAL
+  const FLOW_VERTICAL
+  const ALIGN_LEFT
+  const ALIGN_TOP
+  const ALIGN_RIGHT
+  const ALIGN_BOTTOM
+  const ALIGN_CENTER
+  const VECTOR_WIDTH
+  const VECTOR_COLOR
+  const VECTOR_FILL_COLOR
+  const VECTOR_MID_COLOR
+  const VECTOR_OUTER_LINE
+  const VECTOR_CENTER_LINE
+  const VECTOR_INNER_LINE
+  const VECTOR_TM_OFFSET
+  const VECTOR_TM_SCALE
+  const VECTOR_LINE
+  const VECTOR_LINE_INDENT_PX
+  const VECTOR_LINE_INDENT_PCT
+  const VECTOR_ELLIPSE
+  const VECTOR_SECTOR
+  const VECTOR_RECTANGLE
+  const VECTOR_POLY
+  const VECTOR_INVERSE_POLY
+  const VECTOR_OPACITY
+  const VECTOR_LINE_DASHED
+  const VECTOR_NOP
+  const VECTOR_QUADS
+  const FFT_NONE
+  const FFT_SHADOW
+  const FFT_GLOW
+  const FFT_BLUR
+  const FFT_OUTLINE
+  const O_HORIZONTAL
+  const O_VERTICAL
+  const TOVERFLOW_CLIP
+  const TOVERFLOW_CHAR
+  const TOVERFLOW_WORD
+  const TOVERFLOW_LINE
+  const DIR_UP
+  const DIR_DOWN
+  const DIR_LEFT
+  const DIR_RIGHT
+  const EVENT_BREAK
+  const EVENT_CONTINUE
+  const GESTURE_DETECTOR_DRAG
+  const GESTURE_DETECTOR_PINCH
+  const GESTURE_DETECTOR_ROTATE
+  const Linear
+  const InQuad
+  const OutQuad
+  const InOutQuad
+  const InCubic
+  const OutCubic
+  const InOutCubic
+  const InQuintic
+  const OutQuintic
+  const InOutQuintic
+  const InQuart
+  const OutQuart
+  const InOutQuart
+  const InSine
+  const OutSine
+  const InOutSine
+  const InCirc
+  const OutCirc
+  const InOutCirc
+  const InExp
+  const OutExp
+  const InOutExp
+  const InElastic
+  const OutElastic
+  const InOutElastic
+  const InBack
+  const OutBack
+  const InOutBack
+  const InBounce
+  const OutBounce
+  const InOutBounce
+  const InOutBezier
+  const CosineFull
+  const InStep
+  const OutStep
+  const Blink
+  const DoubleBlink
+  const BlinkSin
+  const BlinkCos
+  const Discrete8
+  const Shake4
+  const Shake6
+  const S_KB_FOCUS
+  const S_HOVER
+  const S_TOP_HOVER
+  const S_ACTIVE
+  const S_MOUSE_ACTIVE
+  const S_KBD_ACTIVE
+  const S_HOTKEY_ACTIVE
+  const S_TOUCH_ACTIVE
+  const S_JOYSTICK_ACTIVE
+  const S_VR_ACTIVE
+  const S_DRAG
+  const MR_NONE
+  const MR_T
+  const MR_R
+  const MR_B
+  const MR_L
+  const MR_LT
+  const MR_RT
+  const MR_LB
+  const MR_RB
+  const MR_AREA
+  const FMT_NO_WRAP
+  const FMT_KEEP_SPACES
+  const FMT_IGNORE_TAGS
+  const FMT_HIDE_ELLIPSIS
+  const FMT_AS_IS
+  const DEVID_KEYBOARD
+  const DEVID_MOUSE
+  const DEVID_JOYSTICK
+  const DEVID_TOUCH
+  const DEVID_VR
+  const KEEP_ASPECT_NONE
+  const KEEP_ASPECT_FIT
+  const KEEP_ASPECT_FILL
+  const AXIS_L_THUMB_H
+  const AXIS_L_THUMB_V
+  const AXIS_R_THUMB_H
+  const AXIS_R_THUMB_V
+  const AXIS_L_TRIGGER
+  const AXIS_R_TRIGGER
+  const AXIS_LR_TRIGGER
+  const XMB_STOP
+  const XMB_CONTINUE
+  const R_PROCESSED
+  const SIZE_TO_CONTENT
+  value Fonts
+  enum AnimProp
+  value color
+  value bgColor
+  value fgColor
+  value fillColor
+  value borderColor
+  value opacity
+  value rotate
+  value scale
+  value translate
+  value fValue
+  value picSaturate
+  value brightness
+  table Behaviors
+  class ScrollHandler
+  class JoystickAxisObservable
+  class ElemGroup
+  class Behavior
+  class Picture
+  class Immediate
+  class FormattedText
+  class IGenVideoPlayer
+  class IGenSound
+  class DragAndDropState
+  class EventDataRect
+  class MouseClickEventData
+  class HotkeyEventData
+  class HoverEventData
+  class MoveToAreaTarget
+  function Color(arg0, arg1, arg2, arg3, ...): integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type -> _undocumented_
+  function sw()
+  function sh()
+  function flex(arg0, ...): integer_or_float, any_type -> _undocumented_
+  function fontH(arg0): integer_or_float -> _undocumented_
+  function pw(arg0): integer_or_float -> _undocumented_
+  function ph(arg0): integer_or_float -> _undocumented_
+  function elemw(arg0): integer_or_float -> _undocumented_
+  function elemh(arg0): integer_or_float -> _undocumented_
+  function locate_element_source(arg0): class_instance -> _undocumented_
+  function get_element_info(arg0): class_instance -> _undocumented_
+  function get_font_metrics(arg0, ...): integer, any_type -> _undocumented_
+  function resolve_button(fontId, fontHt): integer, float -> table
+  function setFontDefHt(font_name, pix_ht): string, integer -> bool
+  function getFontDefHt(font_name): string -> integer
+  function getFontInitialHt(font_name): string -> integer
+  function calc_str_box(element_or_text, element_or_style): string|closure_and_nativeclosure|table, table|closure_and_nativeclosure|null -> array
+  class LottieAnimation
+  class ElementRef
+}
+
+
+
+
+const KBD_BIT_CAPS_LOCK = 1
+
+ +
+
+const KBD_BIT_NUM_LOCK = 2
+
+ +
+
+const KBD_BIT_SCROLL_LOCK = 4
+
+ +
+
+const PANEL_ANCHOR_NONE = int
+
+ +
+
+const PANEL_ANCHOR_SCENE = int
+
+ +
+
+const PANEL_ANCHOR_VRSPACE = int
+
+ +
+
+const PANEL_ANCHOR_HEAD = int
+
+ +
+
+const PANEL_ANCHOR_LEFTHAND = int
+
+ +
+
+const PANEL_ANCHOR_RIGHTHAND = int
+
+ +
+
+const PANEL_ANCHOR_ENTITY = int
+
+ +
+
+const PANEL_GEOMETRY_NONE = int
+
+ +
+
+const PANEL_GEOMETRY_RECTANGLE = int
+
+ +
+
+const PANEL_RC_NONE = int
+
+ +
+
+const PANEL_RC_FACE_LEFT_HAND = int
+
+ +
+
+const PANEL_RC_FACE_RIGHT_HAND = int
+
+ +
+
+const PANEL_RC_FACE_HEAD = int
+
+ +
+
+const PANEL_RC_FACE_HEAD_LOCK_Y = int
+
+ +
+
+const PANEL_RC_FACE_ENTITY = int
+
+ +
+
+const PANEL_RENDER_CAST_SHADOW = int
+
+ +
+
+const PANEL_RENDER_OPAQUE = int
+
+ +
+
+const PANEL_RENDER_ALWAYS_ON_TOP = int
+
+ +
+

class GuiScene

+
+
+method GuiScene.setUpdateHandler(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (closure_and_nativeclosure or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, closure_and_nativeclosure or null

+
+ +
+
+method GuiScene.setShutdownHandler(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (closure_and_nativeclosure or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, closure_and_nativeclosure or null

+
+ +
+
+method GuiScene.setHotkeysNavHandler(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (closure_and_nativeclosure or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, closure_and_nativeclosure or null

+
+ +
+
+method GuiScene.addPanel(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg2 (closure_and_nativeclosure or table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: class_instance, integer, closure_and_nativeclosure or table

+
+ +
+
+method GuiScene.removePanel(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer

+
+ +
+
+method GuiScene.mark_panel_dirty(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer

+
+ +
+
+method GuiScene.setXmbFocus(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (null or table()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, null or table

+
+ +
+
+method GuiScene.getCompAABBbyKey()
+
+ +
+
+method GuiScene.setConfigProps(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, table

+
+ +
+
+method GuiScene.haveActiveCursorOnPanels()
+
+ +
+
+method GuiScene.clearTimer()
+
+ +
+
+property GuiScene.config
+

readonly

+
+ +
+
+method GuiScene.getAllObservables()
+
+ +
+
+property GuiScene.cursorPresent
+

readonly

+
+ +
+
+property GuiScene.cursorOverStickScroll
+

readonly

+
+ +
+
+property GuiScene.cursorOverClickable
+

readonly

+
+ +
+
+property GuiScene.hoveredClickableInfo
+

readonly

+
+ +
+
+property GuiScene.keyboardLayout
+

readonly

+
+ +
+
+property GuiScene.keyboardLocks
+

readonly

+
+ +
+
+property GuiScene.updateCounter
+

readonly

+
+ +
+
+property GuiScene.circleButtonAsAction
+

readonly

+
+ +
+
+property GuiScene.xmbMode
+

readonly

+
+ +
+
+method GuiScene.getJoystickAxis()
+
+ +
+
+method GuiScene.enableInput()
+
+ +
+
+method GuiScene.forceCursorActive(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (bool or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, bool or null

+
+ +

/;

+

#define V(x) .Var(#x, &SceneConfig::x)

+
+
+

class SceneConfig

+
+

Sqrat::Class<SceneConfig, Sqrat::NoConstructor<SceneConfig>> sqSceneConfig(sqvm, “SceneConfig”); +sqSceneConfig

+
+
+
+var SceneConfig.defaultFont
+

.SquirrelProp(“defaultFont”, SceneConfig::getDefaultFontId, SceneConfig::setDefaultFontId)

+
+ +
+
+var SceneConfig.defaultFontSize
+

.SquirrelProp(“defaultFontSize”, SceneConfig::getDefaultFontSize, SceneConfig::setDefaultFontSize)

+
+ +
+
+var SceneConfig.kbCursorControl
+

V(kbCursorControl)

+
+ +
+
+var SceneConfig.gamepadCursorControl
+

V(gamepadCursorControl)

+
+ +
+
+var SceneConfig.gamepadCursorSpeed
+

V(gamepadCursorSpeed)

+
+ +
+
+var SceneConfig.gamepadCursorHoverMaxTime
+

V(gamepadCursorHoverMaxTime)

+
+ +
+
+var SceneConfig.gamepadCursorAxisV
+

V(gamepadCursorAxisV)

+
+ +
+
+var SceneConfig.gamepadCursorAxisH
+

V(gamepadCursorAxisH)

+
+ +
+
+var gamepadCursorHoverMinMul
+

V(gamepadCursorHoverMinMul)

+
+ +
+
+var SceneConfig.gamepadCursorHoverMaxMul
+

V(gamepadCursorHoverMaxMul)

+
+ +
+
+var SceneConfig.gamepadCursorDeadZone
+

V(gamepadCursorDeadZone)

+
+ +
+
+var SceneConfig.gamepadCursorNonLin
+

V(gamepadCursorNonLin)

+
+ +
+
+var SceneConfig.reportNestedWatchedUpdate
+

V(reportNestedWatchedUpdate)

+
+ +
+
+var SceneConfig.joystickScrollAxisH
+

V(joystickScrollAxisH)

+
+ +
+
+var SceneConfig.joystickScrollAxisV
+

V(joystickScrollAxisV)

+
+ +
+
+var SceneConfig.clickRumbleEnabled
+

V(clickRumbleEnabled)

+
+ +
+
+var SceneConfig.clickRumbleLoFreq
+

V(clickRumbleLoFreq)

+
+ +
+
+var SceneConfig.clickRumbleHiFreq
+

V(clickRumbleHiFreq)

+
+ +
+
+var SceneConfig.clickRumbleDuration
+

V(clickRumbleDuration)

+
+ +
+
+var SceneConfig.dirPadRepeatDelay
+

V(dirPadRepeatDelay)

+
+ +
+
+var SceneConfig.dirPadRepeatTime
+

V(dirPadRepeatTime)

+
+ +
+
+var SceneConfig.useDefaultCursor
+

V(useDefaultCursor)

+
+ +
+
+var SceneConfig.defaultCursor
+

V(defaultCursor)

+
+ +
+
+var SceneConfig.clickPriority
+

V(actionClickByBehavior) +.Prop(“defSceneBgColor”, &SceneConfig::getDefSceneBgColor, &SceneConfig::setDefSceneBgColor) +.Prop(“defTextColor”, &SceneConfig::getDefTextColor, &SceneConfig::setDefTextColor) +.SquirrelFunc(“setClickButtons”, &SceneConfig::setClickButtons, 2, “xa”) +.SquirrelFunc(“getClickButtons”, &SceneConfig::getClickButtons, 1, “x”)

+
+ +

/*

+
+
+function anim_start()
+
+ +
+
+function anim_request_stop()
+
+ +
+
+function anim_skip()
+
+ +
+
+function anim_skip_delay()
+
+ +
+
+function set_kb_focus()
+
+ +
+
+function capture_kb_focus()
+
+ +
+
+function calc_comp_size(arg0)
+
+
Arguments:
+
    +
  • arg0 (null or table or closure_and_nativeclosure or class_instance or class()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, null or table or closure_and_nativeclosure or class_instance or class

+
+ +
+
+function move_mouse_cursor(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (bool()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, any_type, bool

+
+ +
+
+function get_mouse_cursor_pos(arg0, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-1

+

typecheck mask: any_type, class_instance

+
+ +
+
+function resolve_button_id(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+gui_scene = instance of GuiScene
+

type: GuiScene

+
+ +

/;

+
+

moduleMgr->addNativeModule(“daRg”, dargModuleExports);

+
+

}

+

} // namespace darg

+
+
+const FLOW_PARENT_RELATIVE
+
+ +
+
+const FLOW_HORIZONTAL
+
+ +
+
+const FLOW_VERTICAL
+
+ +
+
+const ALIGN_LEFT = ALIGN_LEFT
+
+ +
+
+const ALIGN_TOP = ALIGN_TOP
+
+ +
+
+const ALIGN_RIGHT = ALIGN_RIGHT
+
+ +
+
+const ALIGN_BOTTOM = ALIGN_BOTTOM
+
+ +
+
+const ALIGN_CENTER = ALIGN_CENTER
+
+ +
+
+const VECTOR_WIDTH
+
+ +
+
+const VECTOR_COLOR
+
+ +
+
+const VECTOR_FILL_COLOR
+
+ +
+
+const VECTOR_MID_COLOR
+
+ +
+
+const VECTOR_OUTER_LINE
+
+ +
+
+const VECTOR_CENTER_LINE
+
+ +
+
+const VECTOR_INNER_LINE
+
+ +
+
+const VECTOR_TM_OFFSET
+
+ +
+
+const VECTOR_TM_SCALE
+
+ +
+
+const VECTOR_LINE
+
+ +
+
+const VECTOR_LINE_INDENT_PX
+
+ +
+
+const VECTOR_LINE_INDENT_PCT
+
+ +
+
+const VECTOR_ELLIPSE
+
+ +
+
+const VECTOR_SECTOR
+
+ +
+
+const VECTOR_RECTANGLE
+
+ +
+
+const VECTOR_POLY
+
+ +
+
+const VECTOR_INVERSE_POLY
+
+ +
+
+const VECTOR_OPACITY
+
+ +
+
+const VECTOR_LINE_DASHED
+
+ +
+
+const VECTOR_NOP
+
+ +
+
+const VECTOR_QUADS
+
+ +
+
+const FFT_NONE
+
+ +
+
+const FFT_SHADOW
+
+ +
+
+const FFT_GLOW
+
+ +
+
+const FFT_BLUR
+
+ +
+
+const FFT_OUTLINE
+
+ +
+
+const O_HORIZONTAL
+
+ +
+
+const O_VERTICAL
+
+ +
+
+const TOVERFLOW_CLIP
+
+ +
+
+const TOVERFLOW_CHAR
+
+ +
+
+const TOVERFLOW_WORD
+
+ +
+
+const TOVERFLOW_LINE
+
+ +
+
+const DIR_UP
+
+ +
+
+const DIR_DOWN
+
+ +
+
+const DIR_LEFT
+
+ +
+
+const DIR_RIGHT
+
+ +
+
+const EVENT_BREAK = GuiScene::EVENT_BREAK
+
+ +
+
+const EVENT_CONTINUE = GuiScene::EVENT_CONTINUE
+
+ +
+
+const GESTURE_DETECTOR_DRAG = GestureDetector::Type::DRAG
+
+ +
+
+const GESTURE_DETECTOR_PINCH = GestureDetector::Type::PINCH
+
+ +
+
+const GESTURE_DETECTOR_ROTATE = GestureDetector::Type::ROTATE
+
+ +
+
+const Linear
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InQuad
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutQuad
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutQuad
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InCubic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutCubic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutCubic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InQuintic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutQuintic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutQuintic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InQuart
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutQuart
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutQuart
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InSine
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutSine
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutSine
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InCirc
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutCirc
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutCirc
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InExp
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutExp
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutExp
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InElastic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutElastic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutElastic
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InBack
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutBack
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutBack
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InBounce
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutBounce
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutBounce
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InOutBezier
+
+ +

Easing function for prebuilt animations functions.

+
+
+const CosineFull
+
+ +

Easing function for prebuilt animations functions.

+
+
+const InStep
+
+ +

Easing function for prebuilt animations functions.

+
+
+const OutStep
+
+ +

Easing function for prebuilt animations functions.

+
+ +
+ +

Easing function for prebuilt animations functions.

+
+ +
+ +

Easing function for prebuilt animations functions.

+
+
+const BlinkSin
+
+ +

Easing function for prebuilt animations functions.

+
+
+const BlinkCos
+
+ +

Easing function for prebuilt animations functions.

+
+
+const Discrete8
+
+ +

Easing function for prebuilt animations functions.

+
+
+const Shake4
+
+ +

Easing function for prebuilt animations functions.

+
+
+const Shake6
+
+ +

Easing function for prebuilt animations functions.

+
+
+const S_KB_FOCUS
+
+ +

State flag for keyboard focus.

+
+
+const S_HOVER
+
+ +
+
+const S_TOP_HOVER
+
+ +
+
+const S_ACTIVE
+
+ +

state flag for ‘pressed’ button.

+
+
+const S_MOUSE_ACTIVE
+
+ +

state flag for ‘pressed’ button with mouse.

+
+
+const S_KBD_ACTIVE
+
+ +

state flag for ‘pressed’ button with keyboard.

+
+
+const S_HOTKEY_ACTIVE
+
+ +

state flag for ‘pressed’ button with hotkey.

+
+
+const S_TOUCH_ACTIVE
+
+ +

state flag for pressed button with touch device.

+
+
+const S_JOYSTICK_ACTIVE
+
+ +

state flag for pressed button with joystick/gamepad device.

+
+
+const S_VR_ACTIVE
+
+ +

state flag for pressed button with VR controller.

+
+
+const S_DRAG
+
+ +

state flag for dragged state.

+
+
+const MR_NONE
+
+ +

.MOVE_RESIZE Beahvior constants, to define where was point started move or resize

+
+
+const MR_T
+
+ +
+
+const MR_R
+
+ +
+
+const MR_B
+
+ +
+
+const MR_L
+
+ +
+
+const MR_LT
+
+ +
+
+const MR_RT
+
+ +
+
+const MR_LB
+
+ +
+
+const MR_RB
+
+ +
+
+const MR_AREA
+
+ +
+
+const FMT_NO_WRAP
+
+ +
+
+const FMT_KEEP_SPACES
+
+ +
+
+const FMT_IGNORE_TAGS
+
+ +
+
+const FMT_HIDE_ELLIPSIS
+
+ +
+
+const FMT_AS_IS
+
+ +
+
+const DEVID_KEYBOARD
+
+ +
+
+const DEVID_MOUSE
+
+ +
+
+const DEVID_JOYSTICK
+
+ +
+
+const DEVID_TOUCH
+
+ +
+
+const DEVID_VR
+
+ +
+
+const KEEP_ASPECT_NONE
+
+ +
+
+const KEEP_ASPECT_FIT
+
+ +
+
+const KEEP_ASPECT_FILL
+
+ +
+
+const AXIS_L_THUMB_H
+
+ +
+
+const AXIS_L_THUMB_V
+
+ +
+
+const AXIS_R_THUMB_H
+
+ +
+
+const AXIS_R_THUMB_V
+
+ +
+
+const AXIS_L_TRIGGER
+
+ +
+
+const AXIS_R_TRIGGER
+
+ +
+
+const AXIS_LR_TRIGGER
+
+ +
+
+const XMB_STOP
+
+ +
+
+const XMB_CONTINUE
+
+ +
+
+const R_PROCESSED
+
+ +
+
+const SIZE_TO_CONTENT
+
+ +
+
+Fonts
+
+ +
+
+

enum AnimProp

+
+
+color
+
+ +
+
+bgColor
+
+ +
+
+fgColor
+
+ +
+
+fillColor
+
+ +
+
+borderColor
+
+ +
+
+opacity
+
+ +
+
+rotate
+
+ +
+
+scale
+
+ +
+
+translate
+
+ +
+
+fValue
+
+ +
+
+picSaturate
+
+ +
+
+brightness
+
+ +

/;

+
+
+

table Behaviors

+
+
+const Behaviors.Button
+

BHV(Button, bhv_button)

+
+ +
+
+const Behaviors.TextArea
+

BHV(TextArea, bhv_text_area)

+
+ +
+
+const Behaviors.TextInput
+

BHV(TextInput, bhv_text_input)

+
+ +
+
+const Behaviors.Slider
+

BHV(Slider, bhv_slider)

+
+ +
+
+const Behaviors.Pannable
+

BHV(Pannable, bhv_pannable)

+
+ +
+
+const Behaviors.Pannable2touch
+

BHV(Pannable2touch, bhv_pannable_2touch)

+
+ +
+
+const Behaviors.SwipeScroll
+

BHV(SwipeScroll, bhv_swipe_scroll)

+
+ +
+
+const Behaviors.MoveResize
+

BHV(MoveResize, bhv_move_resize)

+
+ +
+
+const Behaviors.ComboPopup
+

BHV(ComboPopup, bhv_combo_popup)

+
+ +
+
+const Behaviors.SmoothScrollStack
+

BHV(SmoothScrollStack, bhv_smooth_scroll_stack)

+
+ +
+
+const Behaviors.Marquee
+

BHV(Marquee, bhv_marquee)

+
+ +
+
+const Behaviors.WheelScroll
+

BHV(WheelScroll, bhv_wheel_scroll)

+
+ +
+
+const Behaviors.ScrollEvent
+

BHV(ScrollEvent, bhv_scroll_event)

+
+ +
+
+const Behaviors.InspectPicker
+

BHV(InspectPicker, bhv_inspect_picker)

+
+ +
+
+const Behaviors.RtPropUpdate
+

BHV(RtPropUpdate, bhv_rt_prop_update)

+
+ +
+
+const Behaviors.RecalcHandler
+

BHV(RecalcHandler, bhv_recalc_handler)

+
+ +
+
+const Behaviors.DragAndDrop
+

BHV(DragAndDrop, bhv_drag_and_drop)

+
+ +
+
+const Behaviors.FpsBar
+

BHV(FpsBar, bhv_fps_bar)

+
+ +
+
+const Behaviors.LatencyBar
+

BHV(LatencyBar, bhv_latency_bar)

+
+ +
+
+const Behaviors.OverlayTransparency
+

BHV(OverlayTransparency, bhv_overlay_transparency)

+
+ +
+
+const Behaviors.BoundToArea
+

place object inside an area (like placing tooltip under cursor BUT inside screen)

+
+ +
+
+const Behaviors.Movie
+

fields in component description:

+
+
@code:

movie:string = <path to movie file in .ivf file format> +loop:boolean = default true. Should video be looped +sound:string = path to .mp3 sound file. By default movie file with .mp3 added (like “<video_file_name_with_ext>.mp3”.). +enableSound:boolean = default true. Will play sound if sound track exists. Note: sound is not synced with video. +onStart: function = optional callback, called when movie started +onError: function = optional callback, called when playback failed to start +onFinish: function = optional callback, called when movie finished/terminated (can be used to remove it from layout)

+
+
+

code@

+
+ +
+

Note

+

Note: sound is played only for one-shot video.

+
+
+
+const Behaviors.Parallax
+
+ +
+
+const Behaviors.PieMenu
+
+ +
+
+const Behaviors.TransitionSize
+
+ +
+
+const Behaviors.TrackMouse
+
+ +
+
+const Behaviors.MoveToArea
+
+ +
+
+const Behaviors.ProcessPointingInput
+
+ +
+
+const Behaviors.ProcessGesture
+
+ +
+
+const Behaviors.EatInput
+
+ +
+
+const Behaviors.TextAreaEdit
+
+ +
+
+

class ScrollHandler

+
+
+ScrollHandler()
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ScrollHandler.scrollToX()
+
+ +
+
+method ScrollHandler.scrollToY()
+
+ +
+
+method ScrollHandler.scrollToChildren()
+
+ +
+
+property ScrollHandler.elem
+

readonly

+
+ +

/;

+
+
+

class JoystickAxisObservable

+
+

Sqrat::DerivedClass<JoystickAxisObservable, BaseObservable> joyAxisObservable(sqvm, “JoystickAxisObservable”); +joyAxisObservable //

+
+

.Prop(“value”, &JoystickAxisObservable::getValue) +.Var(“resolution”, &JoystickAxisObservable::resolution) +.Var(“deadzone”, &JoystickAxisObservable::deadzone)

+
+
+

/*

+
+
+

class ElemGroup

+
+
+

class Behavior

+
+
+

class Picture

+
+
+Picture(arg0)
+
+
Arguments:
+
    +
  • arg0 (null or string()) – autodoc from typemask/paramscheck

  • +
+
+
+

typecheck mask: any_type, null or string

+
+ +
+
+

class Immediate extends Picture

+
+
+Immediate(arg0)
+
+
Arguments:
+
    +
  • arg0 (null or string()) – autodoc from typemask/paramscheck

  • +
+
+
+

typecheck mask: any_type, null or string

+
+ +
+
+

class FormattedText

+
+
+

class IGenVideoPlayer

+
+
+

class IGenSound

+
+
+

class DragAndDropState

+
+
+

class EventDataRect

+
+
+EventDataRect.l
+
+ +
+
+EventDataRect.t
+
+ +
+
+EventDataRect.r
+
+ +
+
+EventDataRect.b
+
+ +
+
+

class MouseClickEventData

+
+
+property MouseClickEventData.targetRect
+

readonly

+
+ +

/; +#undef V

+
+
+

class HotkeyEventData

+
+

Sqrat::Class<HotkeyEventData, Sqrat::DefaultAllocator<HotkeyEventData>> sqHotkeyEventData(sqvm, “HotkeyEventData”); +sqHotkeyEventData.Prop(“targetRect”, &HotkeyEventData::getTargetRect);

+
+
+
+

class HoverEventData

+
+

Sqrat::Class<HoverEventData, Sqrat::DefaultAllocator<HoverEventData>> sqHoverEventData(sqvm, “HoverEventData”); +sqHoverEventData.Prop(“targetRect”, &HoverEventData::getTargetRect);

+

Sqrat::Class<AllTransitionsConfig> sqTransitAll(sqvm, “TransitAll”); +sqTransitAll.Ctor<const Sqrat::Object &>();

+

EditableText::bind_script(exports);

+
+
+
+

class MoveToAreaTarget

+
+

Sqrat::Class<BhvMoveToAreaTarget> sqBhvMoveToAreaTarget(sqvm, “BhvMoveToAreaTarget”); +sqBhvMoveToAreaTarget //

+
+

.Func(“set”, &BhvMoveToAreaTarget::set) +.Func(“clear”, &BhvMoveToAreaTarget::clear)

+
+
+

/*

+
+
+function Color(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-4

+

typecheck mask: any_type, integer_or_float, integer_or_float, integer_or_float, integer_or_float

+
+ +
+
+function sw()
+
+ +
+
+function sh()
+
+ +
+
+function flex(arg0, ...)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-1

+

typecheck mask: any_type, integer_or_float

+
+ +
+
+function fontH(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer_or_float

+
+ +
+
+function pw(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer_or_float

+
+ +
+
+function ph(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer_or_float

+
+ +
+
+function elemw(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer_or_float

+
+ +
+
+function elemh(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer_or_float

+
+ +
+
+function locate_element_source(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, class_instance

+
+ +
+
+function get_element_info(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, class_instance

+
+ +
+
+function get_font_metrics(arg0, ...)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, integer

+
+ +
+
+function resolve_button(fontId, fontHt)
+
+
Arguments:
+
    +
  • fontId (integer()) –

  • +
  • fontHt (float()) – optional, default is _def_fontHt font height set in font

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+
Returns:
+

font_params

+
+
Return type:
+

table

+
+
+
+ +
+
font_params
+
{
+  _def_fontHt : def height
+  fontHt : height
+  capsHt : height of H
+  lineSpacing : linespacing
+  ascent
+  descent
+  lowercaseHeight : height of x
+}
+@code
+
+
+
+
+
+function setFontDefHt(font_name, pix_ht)
+
+
Arguments:
+
    +
  • font_name (string()) –

  • +
  • pix_ht (integer()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function getFontDefHt(font_name)
+
+
Arguments:
+
    +
  • font_name (string()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function getFontInitialHt(font_name)
+
+
Arguments:
+
    +
  • font_name (string()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function calc_str_box(element_or_text, element_or_style)
+
+
Arguments:
+
    +
  • element_or_text (string|closure_and_nativeclosure|table()) – should be string of text or darg component description with ‘text’ in it

  • +
  • element_or_style (table|closure_and_nativeclosure|null()) – optional, if first element is text, it should be provided with font properties

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, string or table or closure_and_nativeclosure, table or closure_and_nativeclosure or null

+
+
Returns:
+

return array of two objects with width and height of text

+
+
Return type:
+

array

+
+
+
+ +

/;

+
+

register_constants(sqvm); +register_fonts(exports); +register_anim_props(sqvm);

+

register_std_behaviors(module_mgr);

+

register_rendobj_script_ids(sqvm);

+

Cursor::bind_script(exports); +ElementRef::bind_script(sqvm); +Sqrat::Class<Element, Sqrat::NoConstructor<Element>> sqElement(sqvm, “@Element”);

+

bind_das(exports);

+

Sqrat::Table dargDebug(sqvm);

+
+
+
+

class LottieAnimation extends Picture

+
+
+LottieAnimation(arg0)
+
+
Arguments:
+
    +
  • arg0 (null or string()) – autodoc from typemask/paramscheck

  • +
+
+
+

typecheck mask: any_type, null or string

+
+ +
+
+

class ElementRef

+
+
+method ElementRef.getCompDesc()
+
+ +
+
+method ElementRef.getScreenPosX(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getScreenPosY(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getWidth(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getHeight(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getContentWidth(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getContentHeight(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getScrollOffsX(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method ElementRef.getScrollOffsY(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +

/; +}

+

} // namespace darg

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dacoll.trace.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dacoll.trace.html new file mode 100644 index 000000000..1ff1a4bc1 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dacoll.trace.html @@ -0,0 +1,287 @@ + + + + + + + dacoll.trace — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dacoll.trace

+

module ‘dacoll.trace’

+

Source file: prog/gameLibs/quirrel/sqDacoll/sqDacoll.cpp

+

Usage:

+
let { rayhit_normalized, traceray_normalized } = require("dacoll.trace")
+
+
+

or:

+
from "dacoll.trace" import *
+
+
+
//'dacoll.trace' exports:
+{
+  function rayhit_normalized(&from, &dir, t): integer, integer, float -> bool
+  function traceray_normalized(arg0, arg1, arg2): class_instance, class_instance, float or integer -> _undocumented_
+}
+
+
+
+
+function rayhit_normalized(&from, &dir, t)
+
+
Arguments:
+
    +
  • &from (integer()) –

  • +
  • &dir (integer()) –

  • +
  • t (float()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function traceray_normalized(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg2 (float or integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:4

+

typecheck mask: any_type, class_instance, class_instance, float or integer

+
+ +

/;

+
+

module_mgr->addNativeModule(“dacoll.trace”, nsTbl);

+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.clipboard.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.clipboard.html new file mode 100644 index 000000000..0b008b382 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.clipboard.html @@ -0,0 +1,275 @@ + + + + + + + dagor.clipboard — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.clipboard

+

module ‘dagor.clipboard’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorClipboard.cpp

+

Usage:

+
let { set_clipboard_text, get_clipboard_text } = require("dagor.clipboard")
+
+
+

or:

+
from "dagor.clipboard" import *
+
+
+
//'dagor.clipboard' exports:
+{
+  function set_clipboard_text(arg0): string -> _undocumented_
+  function get_clipboard_text()
+}
+
+
+
+
+function set_clipboard_text(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+function get_clipboard_text()
+

nparamscheck:1

+

typecheck mask: any_type

+
+ +
+
/;

module_mgr->addNativeModule(“dagor.clipboard”, exports);

+
+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.debug.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.debug.html new file mode 100644 index 000000000..d02826214 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.debug.html @@ -0,0 +1,368 @@ + + + + + + + dagor.debug — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.debug

+

module ‘dagor.debug’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/sqratDagorDebug.cpp

+

Usage:

+
let { debug, fatal, screenlog, logerr, console_print, debug_dump_stack, assert, assertf, get_log_filename } = require("dagor.debug")
+
+
+

or:

+
from "dagor.debug" import *
+
+
+
//'dagor.debug' exports:
+{
+  function debug(msg): string -> null
+  function fatal(msg): string -> null
+  function screenlog(msg): string -> null
+  function logerr(arg0): string -> _undocumented_
+  function console_print()
+  function debug_dump_stack()
+  function assert(arg0, arg1, ...): any_type, string, any_type -> _undocumented_
+  function assertf(arg0, arg1): any_type, string -> _undocumented_
+  function get_log_filename()
+}
+
+
+
+
+function debug(msg)
+
+
Arguments:
+
    +
  • msg (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function fatal(msg)
+
+
Arguments:
+
    +
  • msg (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function screenlog(msg)
+
+
Arguments:
+
    +
  • msg (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function logerr(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+function console_print()
+
+ +
+
+function debug_dump_stack()
+

nparamscheck:1

+

typecheck mask: any_type

+
+ +
+
+function assert(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, any_type, string

+
+ +
+
+function assertf(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: any_type, any_type, string

+
+ +
+
+function get_log_filename()
+
+ +
+
/;

logerr_interceptor_bind_api(nsTbl);

+

module_mgr->addNativeModule(“dagor.debug”, nsTbl);

+

Sqrat::Table perfTbl(vm);

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.folders.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.folders.html new file mode 100644 index 000000000..8620a539b --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.folders.html @@ -0,0 +1,357 @@ + + + + + + + dagor.folders — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.folders

+

module ‘dagor.folders’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorFolders.cpp

+

Usage:

+
let { get_exe_dir, get_game_dir, get_temp_dir, get_gamedata_dir, get_local_appdata_dir, get_common_appdata_dir, get_downloads_dir } = require("dagor.folders")
+
+
+

or:

+
from "dagor.folders" import *
+
+
+
//'dagor.folders' exports:
+{
+  function get_exe_dir(arg0): table -> _undocumented_
+  function get_game_dir(arg0): table -> _undocumented_
+  function get_temp_dir(arg0): table -> _undocumented_
+  function get_gamedata_dir(arg0): table -> _undocumented_
+  function get_local_appdata_dir(arg0): table -> _undocumented_
+  function get_common_appdata_dir(arg0): table -> _undocumented_
+  function get_downloads_dir(arg0): table -> _undocumented_
+}
+
+
+
+
+function get_exe_dir(arg0)
+
+
Arguments:
+
    +
  • arg0 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: any_type, table

+
+ +
+
+function get_game_dir(arg0)
+
+
Arguments:
+
    +
  • arg0 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: any_type, table

+
+ +
+
+function get_temp_dir(arg0)
+
+
Arguments:
+
    +
  • arg0 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: any_type, table

+
+ +
+
+function get_gamedata_dir(arg0)
+
+
Arguments:
+
    +
  • arg0 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: any_type, table

+
+ +
+
+function get_local_appdata_dir(arg0)
+
+
Arguments:
+
    +
  • arg0 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: any_type, table

+
+ +
+
+function get_common_appdata_dir(arg0)
+
+
Arguments:
+
    +
  • arg0 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: any_type, table

+
+ +
+
+function get_downloads_dir(arg0)
+
+
Arguments:
+
    +
  • arg0 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: any_type, table

+
+ +

/;

+
+

module_mgr->addNativeModule(“dagor.folders”, exports);

+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.html new file mode 100644 index 000000000..edff44376 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.html @@ -0,0 +1,465 @@ + + + + + + + dagor.fs — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.fs

+

module ‘dagor.fs’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorFS.cpp

+

Usage:

+
let { , file_exists, dir_exists, mkdir, mkpath, scan_folder, find_files, read_text_from_file, read_text_from_file_on_disk, stat } = require("dagor.fs")
+
+
+

or:

+
from "dagor.fs" import *
+
+
+
//'dagor.fs' exports:
+{
+  warning
+  function file_exists(path): string -> bool
+  function dir_exists(path): string -> bool
+  function mkdir(path): string -> bool
+  function mkpath(path): string -> bool
+  function scan_folder({root, vromfs, realfs, recursive, files_suffix, directories_only}): table -> array
+  function find_files(file_mask, params): string, table -> array
+  function read_text_from_file(arg0): string -> string
+  function read_text_from_file_on_disk(arg0): string -> string
+  function stat(filename): string -> table|null
+}
+
+
+
+

Warning

+

All functions in this module are sync. +Better never use them in production code, cause this can cause freeze and fps stutter (and usually will).

+
+
+
+function file_exists(path)
+
+
Arguments:
+
    +
  • path (string()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function dir_exists(path)
+
+
Arguments:
+
    +
  • path (string()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function mkdir(path)
+
+
Arguments:
+
    +
  • path (string()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function mkpath(path)
+
+
Arguments:
+
    +
  • path (string()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function scan_folder({root, vromfs, realfs, recursive, files_suffix, directories_only})
+
+
Arguments:
+
    +
  • root (string()) – where to start scan

  • +
  • vromfs (bool()) – scan in vromfs

  • +
  • realfs (bool()) – scan in real file system

  • +
  • recursive (bool()) – scan in real file system

  • +
  • files_suffix (string()) – suffix of files to be included in result

  • +
  • directories_only (bool()) – return only directories (works for realfs only)

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, table

+

Function is kwarged - arguments passed in a table

+
+
Returns:
+

array of found files with path on root

+
+
Return type:
+

array

+
+
+
+ +
+
+function find_files(file_mask, params)
+
+
Arguments:
+
    +
  • file_mask (string()) – file mask like *.nut or foo/some.nut

  • +
  • params (table()) – table of params, the only possible param is {maxCount:i = -1} (-1 is default, means no limit)

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, string, table

+
+
Returns:
+

array of file_info

+
+
Return type:
+

array

+
+
+
+ +
+
file_info
+
{name:s, isDirectory:b, isReadOnly:b, isHidden:b, size:i, accessTime:i, modifyTime:i}
+
+
+
+
+
+function read_text_from_file(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+
Returns:
+

file as string

+
+
Return type:
+

string

+

will open file from in VROMS only in some cases (on platforms different then PC, on not allowed modding)

+

+
+
+
+ +
+
+function read_text_from_file_on_disk(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+
Returns:
+

file as string

+
+
Return type:
+

string

+

will open file from disk only

+

+
+
+
+ +
+
+function stat(filename)
+
+
Arguments:
+
    +
  • filename (string()) – path to file to get info

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+
Returns:
+

file_stat or or null if file not found

+
+
Return type:
+

table|null

+
+
+
+ +
+
file_stat
+
{size:i, atime:i, mtime:i, ctime:i}
+
+
+
+

/;

+
+

module_mgr->addNativeModule(“dagor.fs”, exports);

+
+

}

+

void register_dagor_fs_vrom_module(SqModules *module_mgr) +{

+
+

HSQUIRRELVM vm = module_mgr->getVM(); +Sqrat::Table exports(vm);

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.vrom.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.vrom.html new file mode 100644 index 000000000..e8f841524 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.vrom.html @@ -0,0 +1,253 @@ + + + + + + + dagor.fs.vrom — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.fs.vrom

+

module ‘dagor.fs.vrom’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorFS.cpp

+

Usage:

+
let {  } = require("dagor.fs.vrom")
+
+
+

or:

+
from "dagor.fs.vrom" import *
+
+
+
//'dagor.fs.vrom' exports:
+{
+}
+
+
+exports.SquirrelFunc("scan_vrom_folder", sq_scan_vrom_folder, 2, ".t");
+
+module_mgr->addNativeModule("dagor.fs.vrom", exports);
+
+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.http.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.http.html new file mode 100644 index 000000000..2c43eb80f --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.http.html @@ -0,0 +1,421 @@ + + + + + + + dagor.http — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.http

+

module ‘dagor.http’

+

Source file: prog/gameLibs/quirrel/http/sqHttpClient.cpp

+

Usage:

+
let { requestHttp, httpRequest, httpAbort, httpDownload, HTTP_SUCCESS, HTTP_FAILED, HTTP_ABORTED, HTTP_SHUTDOWN } = require("dagor.http")
+
+
+

or:

+
from "dagor.http" import *
+
+
+
//'dagor.http' exports:
+{
+  function requestHttp({method, url, userAgent, headers, data, json, callback, context, respEventId, timeout_ms, waitable, needResponseHeaders = "default)"}): table -> integer
+  function httpRequest(arg0): table -> _undocumented_
+  function httpAbort(arg0): integer -> _undocumented_
+  function httpDownload(request_id): integer -> _undocumented_
+  value HTTP_SUCCESS
+  value HTTP_FAILED
+  value HTTP_ABORTED
+  value HTTP_SHUTDOWN
+}
+
+
+
+
+function requestHttp({method, url, userAgent, headers, data, json, callback, context, respEventId, timeout_ms, waitable, needResponseHeaders = "default)"})
+
+
Arguments:
+
    +
  • method (string()) – (“POST” (default), “GET”, “HEAD”), optional

  • +
  • url (string()) –

  • +
  • userAgent (string()) – (optional)

  • +
  • headers (table()) – {string:string} (optional)

  • +
  • data (string|table|class_instance|class()) – (optional) : request data which is treated as from-urlencoded data. If specified, json field is omitted

  • +
  • json (string|table|class_instance|class()) – (optional) : request data which is treated as json data. If specified, data field is omitted

  • +
  • callback (any_type()) – ({status, http_code, response, headers}), optional

  • +
  • context (table()) – user data specific for request response, optional

  • +
  • respEventId (string()) – (optional) : event id to send into eventbus

  • +
  • timeout_ms (integer()) – (optional), DEF_REQUEST_TIMEOUT_MS by default (10 seconds)

  • +
  • waitable (bool()) – (optional, false by default) : if true then this request will be waited for on app shutdown

  • +
  • needResponseHeaders (by()) – , default = default)

  • +
+
+
+

Function is kwarged - arguments passed in a table

+
+
Returns:
+

request id

+
+
Return type:
+

integer

+
+
+
+ +

response in eventbus data or in callback will be table

+
+
response
+
{
+  "status" : integer (SUCCESS, FAILED, ABORTED)
+  "http_code" : integer
+  "context" : null | table | string
+  "headers" : table, optional
+  "reponce" : blob, optional
+}
+
+
+
+
+
+function httpRequest(arg0)
+
+
Arguments:
+
    +
  • arg0 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, table

+
+ +
+
+function httpAbort(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer

+
+ +
+
+function httpDownload(request_id)
+
+
Arguments:
+
    +
  • request_id (integer()) –

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, table

+
+ +
+
+HTTP_SUCCESS
+
+ +
+
+HTTP_FAILED
+
+ +
+
+HTTP_ABORTED
+
+ +
+
+HTTP_SHUTDOWN
+
+ +
+
/;

module_mgr->addNativeModule(“dagor.http”, nsTbl);

+
+
+

}

+

void http_client_wait_active_requests(int timeout_ms) +{

+
+
+
if (active_requests.empty())

return;

+
+
+

int deadLineTime = timeout_ms ? get_time_msec() + timeout_ms : 0; +do +{

+
+

auto wit = eastl::find_if(active_requests.begin(), active_requests.end(), [](const auto &req) { return req->waitable; }); +if (wit != active_requests.end() && (!timeout_ms || get_time_msec() <= deadLineTime)) +{

+
+

httprequests::poll(); +sleep_msec(10);

+
+

} +else

+
+

break;

+
+
+

} while (1);

+
+

}

+

void http_client_on_vm_shutdown(HSQUIRRELVM vm) +{

+
+

for (auto &req : active_requests) +{

+
+

if (req->callback.GetVM() == vm || req->context.GetVM() == vm) +{

+
+

req->callback.Release(); +req->context.Release();

+
+

}

+
+

} +whitelists.erase(vm);

+
+

}

+

void http_set_domains_whitelist(HSQUIRRELVM vm, const eastl::vector<eastl::string> &domains) +{

+
+

eastl::hash_set<eastl::string> &wl = whitelists[vm]; +wl.clear(); +wl.insert(domains.begin(), domains.end());

+
+

}

+

void http_set_blocking_wait_mode(bool on) { blocking_wait_mode = on; }

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.iso8601.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.iso8601.html new file mode 100644 index 000000000..2aea8548a --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.iso8601.html @@ -0,0 +1,340 @@ + + + + + + + dagor.iso8601 — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.iso8601

+

module ‘dagor.iso8601’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/sqratIso8601Time.cpp

+

Usage:

+
let { parse_msec, parse_unix_time, format_msec, format_unix_time } = require("dagor.iso8601")
+
+
+

or:

+
from "dagor.iso8601" import *
+
+
+
//'dagor.iso8601' exports:
+{
+  function parse_msec(iso8601str): string -> integer
+  function parse_unix_time(iso8601str): string -> integer
+  function format_msec(ts): integer -> string
+  function format_unix_time(ts): integer -> string
+}
+
+
+
+
+function parse_msec(iso8601str)
+
+
Arguments:
+
    +
  • iso8601str (string()) – ISO-8601 timestamp

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+
Returns:
+

UNIX timestamp in milliseconds

+
+
Return type:
+

integer

+
+
+
+ +
+
+function parse_unix_time(iso8601str)
+

Converts ISO-8601 timestamp string to UNIX timestamp integer.

+
+
Arguments:
+
    +
  • iso8601str (string()) – ISO-8601 timestamp

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+
Returns:
+

UNIX timestamp

+
+
Return type:
+

integer

+
+
+
+ +
+
+function format_msec(ts)
+
+
Arguments:
+
    +
  • ts (integer()) – UNIX timestamp in milliseconds

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer

+
+
Returns:
+

ISO-8601 timestamp

+
+
Return type:
+

string

+
+
+
+ +
+
+function format_unix_time(ts)
+

Converts UNIX timestamp integer to ISO-8601 timestamp string.

+
+
Arguments:
+
    +
  • ts (integer()) – UNIX timestamp

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer

+
+
Returns:
+

ISO-8601 timestamp

+
+
Return type:
+

string

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.localize.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.localize.html new file mode 100644 index 000000000..68bfc6086 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.localize.html @@ -0,0 +1,365 @@ + + + + + + + dagor.localize — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.localize

+

module ‘dagor.localize’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/localization.cpp

+

Usage:

+
let { loc, getLocTextForLang, processHypenationsCN, processHypenationsJP, doesLocTextExist, getCurrentLanguage, getForceLanguage, setLanguageToSettings, initLocalization } = require("dagor.localize")
+
+
+

or:

+
from "dagor.localize" import *
+
+
+
//'dagor.localize' exports:
+{
+  function loc(arg0, ...): string or null, any_type -> _undocumented_
+  function getLocTextForLang(arg0, arg1, ...): string, string or null, any_type -> _undocumented_
+  function processHypenationsCN(arg0): string -> _undocumented_
+  function processHypenationsJP(arg0): string -> _undocumented_
+  function doesLocTextExist(arg0): string -> _undocumented_
+  function getCurrentLanguage()
+  function getForceLanguage()
+  function setLanguageToSettings()
+  function initLocalization(arg0, arg1, ...): class_instance, string, any_type -> _undocumented_
+}
+
+
+
+
+function loc(arg0, ...)
+
+
Arguments:
+
    +
  • arg0 (string or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, string or null

+
+ +
+
+function getLocTextForLang(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, string, string or null

+
+ +
+
+function processHypenationsCN(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+function processHypenationsJP(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+function doesLocTextExist(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+function getCurrentLanguage()
+
+ +
+
+function getForceLanguage()
+
+ +
+
+function setLanguageToSettings()
+
+ +
+
+function initLocalization(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, class_instance, string

+
+ +
+
/;

module_mgr->addNativeModule(“dagor.localize”, exports);

+
+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.math.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.math.html new file mode 100644 index 000000000..7c9f3d5c5 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.math.html @@ -0,0 +1,1062 @@ + + + + + + + dagor.math — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.math

+

module ‘dagor.math’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/sqratDagorMath.cpp

+

Usage:

+
let { Point2, Point3, Point4, Quat, IPoint3, E3DCOLOR, Color4, matrix_to_euler, euler_to_quat, dir_to_quat, quat_to_euler, quat_to_matrix, quat_rotation_arc, qinterp, cvt, make_tm_quat, make_tm_axis } = require("dagor.math")
+
+
+

or:

+
from "dagor.math" import *
+
+
+
//'dagor.math' exports:
+{
+  class Point2
+  class Point3
+  class Point4
+  class Quat
+  class IPoint3
+  class E3DCOLOR
+  class Color4
+  function matrix_to_euler(&tm): TMatrix -> integer
+  function euler_to_quat(&e): integer -> inline Quat
+  function dir_to_quat(&p): integer -> inline Quat
+  function quat_to_euler(&quat): Quat -> integer
+  function quat_to_matrix(&quat): Quat -> inline TMatrix
+  function quat_rotation_arc()
+  function qinterp()
+  function cvt()
+  function make_tm_quat()
+  function make_tm_axis()
+}
+
+
+
+

class Point2

+
+
+Point2(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance or integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

typecheck mask: any_type, class_instance or integer_or_float, integer_or_float

+
+ +
+
+var Point2.x
+
+ +
+
+var Point2.y
+
+ +
+
+method Point2.lengthSq()
+
+ +
+
+method Point2.length()
+
+ +
+
+method Point2.normalize()
+
+ +
+
+operator Point2._add(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance

+
+ +
+
+operator Point2._sub(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance

+
+ +
+
+operator Point2._mul(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance or integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance or integer_or_float

+
+ +
+
+operator Point2._unm(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +

/;

+
+
+

class Point3

+
+

Sqrat::Class<Point3> sqPoint3(vm, “Point3”); +sqPoint3 //

+
+

.SquirrelCtor(math_flt_vector_ctor<Point3, 3>, 0, “.x|nnn”) +.Var(“x”, &Point3::x) +.Var(“y”, &Point3::y) +.Var(“z”, &Point3::z) +.Func(“lengthSq”, &Point3::lengthSq) +.Func(“length”, &Point3::length) +.Func(“normalize”, &Point3::normalize) +.SquirrelFunc(“_add”, op_add<Point3>, 2, “xx”) +.SquirrelFunc(“_sub”, op_sub<Point3>, 2, “xx”) +.SquirrelFunc(“_mul”, op_mul<Point3>, 2, “xx|n”) +.SquirrelFunc(“_modulo”, op_cross<Point3>, 2, “xx”) +.SquirrelFunc(“_unm”, op_unm<Point3>, 1, “x”)

+
+
+

/*

+
+
+Point3(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance or integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

typecheck mask: any_type, class_instance or integer_or_float, integer_or_float, integer_or_float

+
+ +
+
+var Point3.x
+
+ +
+
+var Point3.y
+
+ +
+
+var Point3.z
+
+ +
+
+method Point3.lengthSq()
+
+ +
+
+method Point3.length()
+
+ +
+
+method Point3.normalize()
+
+ +

/;

+
+
+

class Point4

+
+

Sqrat::Class<Point4> sqPoint4(vm, “Point4”); +sqPoint4 //

+
+

.SquirrelCtor(math_flt_vector_ctor<Point4, 4>, 0, “.x|nnnn”) +.Var(“x”, &Point4::x) +.Var(“y”, &Point4::y) +.Var(“z”, &Point4::z) +.Var(“w”, &Point4::w) +.Func(“lengthSq”, &Point4::lengthSq) +.Func(“length”, &Point4::length) +.SquirrelFunc(“_add”, op_add<Point4>, 2, “xx”) +.SquirrelFunc(“_sub”, op_sub<Point4>, 2, “xx”) +.SquirrelFunc(“_mul”, op_mul<Point4>, 2, “xx|n”) +.SquirrelFunc(“_modulo”, op_cross<Point4>, 2, “xx”) +.SquirrelFunc(“_unm”, op_unm<Point4>, 1, “x”)

+
+
+

/*

+
+
+Point4(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

typecheck mask: any_type, class_instance

+
+ +
+
+method Point4.orthonormalize()
+
+ +
+
+operator Point4._mul(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance or integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance or integer_or_float

+
+ +
+
+operator Point4._add(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance

+
+ +
+
+operator Point4._sub(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance

+
+ +
+
+operator Point4._modulo(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance

+
+ +
+
+operator Point4._set(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (class_instance or integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: class_instance, integer_or_float, class_instance or integer_or_float

+
+ +
+
+method Point4.setcol(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (class_instance or integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: class_instance, integer_or_float, class_instance or integer_or_float

+
+ +
+
+operator Point4._unm(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method Point4.inverse()
+
+ +
+
+operator Point4._get(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance

+
+ +
+
+method Point4.getcol(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance

+
+ +

/;

+
+
+

class Quat

+
+

Sqrat::Class<Quat> sqQuat(vm, “Quat”); +sqQuat //

+
+

.SquirrelCtor(quat_ctor, 0, “.x|nnnn”) +.Var(“x”, &Quat::x) +.Var(“y”, &Quat::y) +.Var(“z”, &Quat::z) +.Var(“w”, &Quat::w) +.SquirrelFunc(“_mul”, op_mul<Quat, Quat>, 2, “xx|n”) +.SquirrelFunc(“_mul”, op_mul_tm<Quat, Point3>, 2, “xx”) +.SquirrelFunc(“_unm”, op_unm<Quat>, 1, “x”) +.Func(“normalize”, &Quat::normalize)

+
+
+

/*

+
+
+Quat(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance or integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

typecheck mask: any_type, class_instance or integer_or_float, integer_or_float

+
+ +
+
+var Quat.x
+
+ +
+
+var Quat.y
+
+ +
+
+operator Quat._add(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance

+
+ +
+
+operator Quat._sub(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance

+
+ +
+
+operator Quat._unm(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +

/;

+
+
+

class IPoint3

+
+

Sqrat::Class<IPoint3> sqIPoint3(vm, “IPoint3”); +sqIPoint3 //

+
+

.SquirrelCtor(math_int_vector_ctor<IPoint3, 3>, 0, “.x|nnn”) +.Var(“x”, &IPoint3::x) +.Var(“y”, &IPoint3::y) +.Var(“z”, &IPoint3::z) +.SquirrelFunc(“_add”, op_add<IPoint3>, 2, “xx”) +.SquirrelFunc(“_sub”, op_sub<IPoint3>, 2, “xx”) +.SquirrelFunc(“_unm”, op_unm<IPoint3>, 1, “x”)

+
+
+

/*

+
+
+IPoint3(arg0, arg1, arg2, arg3)
+
+
Arguments:
+
    +
  • arg0 (class_instance or integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

typecheck mask: any_type, class_instance or integer_or_float, integer_or_float, integer_or_float, integer_or_float

+
+ +
+
+var IPoint3.x
+
+ +
+
+var IPoint3.y
+
+ +
+
+var IPoint3.z
+
+ +
+
+var IPoint3.w
+
+ +
+
+operator IPoint3._add(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance

+
+ +
+
+operator IPoint3._sub(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance

+
+ +
+
+operator IPoint3._unm(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +

/;

+
+
+

class E3DCOLOR

+
+

Sqrat::Class<E3DCOLOR> sqE3DCOLOR(vm, “E3DCOLOR”); +sqE3DCOLOR //

+
+

.SquirrelCtor(e3dcolor_ctor, 0, “.x|nnnn”) +.Var(“r”, &E3DCOLOR::r) +.Var(“g”, &E3DCOLOR::g) +.Var(“b”, &E3DCOLOR::b) +.Var(“a”, &E3DCOLOR::a) +.Var(“u”, &E3DCOLOR::u)

+
+
+

/*

+
+
+E3DCOLOR(arg0, arg1, arg2, arg3)
+
+
Arguments:
+
    +
  • arg0 (class_instance or integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

typecheck mask: any_type, class_instance or integer_or_float, integer_or_float, integer_or_float, integer_or_float

+
+ +
+
+var E3DCOLOR.r
+
+ +
+
+var E3DCOLOR.g
+
+ +
+
+var E3DCOLOR.b
+
+ +
+
+operator E3DCOLOR._add(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance

+
+ +
+
+operator E3DCOLOR._sub(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance

+
+ +
+
+operator E3DCOLOR._mul(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance or integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, class_instance or integer_or_float

+
+ +
+
+method E3DCOLOR.set(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: integer_or_float, integer_or_float, integer_or_float

+
+ +

/;

+
+
+

class Color4

+
+

Sqrat::Class<Color4> sqColor4(vm, “Color4”); +sqColor4 //

+
+

.SquirrelCtor(color4_ctor, 0, “.x|nnnn”) +.Var(“r”, &Color4::r) +.Var(“g”, &Color4::g) +.Var(“b”, &Color4::b) +.Var(“a”, &Color4::a) +.SquirrelFunc(“_add”, op_add<Color4>, 2, “xx”) +.SquirrelFunc(“_sub”, op_sub<Color4>, 2, “xx”) +.SquirrelFunc(“_mul”, op_mul<Color4, Color4>, 2, “xx|n”) +.SquirrelFunc(“set”, c4_set, 4, “nnnn”)

+
+
+

/*

+
+
+function matrix_to_euler(&tm)
+
+
Arguments:
+
    +
  • &tm (TMatrix()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function euler_to_quat(&e)
+
+
Arguments:
+
    +
  • &e (integer()) –

  • +
+
+
Returns:
+

inline Quat

+
+
+
+ +
+
+function dir_to_quat(&p)
+
+
Arguments:
+
    +
  • &p (integer()) –

  • +
+
+
Returns:
+

inline Quat

+
+
+
+ +
+
+function quat_to_euler(&quat)
+
+
Arguments:
+
+
+
Returns:
+

integer

+
+
+
+ +
+
+function quat_to_matrix(&quat)
+
+
Arguments:
+
+
+
Returns:
+

inline TMatrix

+
+
+
+ +
+
+function quat_rotation_arc()
+
+ +
+
+function qinterp()
+
+ +
+
+function cvt()
+
+ +
+
+function make_tm_quat()
+
+ +
+
+function make_tm_axis()
+
+ +

/;

+
+
#define BIND(cn) nsTbl.Bind(#cn, sq##cn);

BIND(Point2); +BIND(Point3); +BIND(Point4); +BIND(TMatrix); +BIND(IPoint2); +BIND(IPoint3); +BIND(IPoint4); +BIND(DPoint3); +BIND(E3DCOLOR); +BIND(Color3); +BIND(Color4); +BIND(Quat);

+
+
+

#undef BIND

+
+

module_mgr->addNativeModule(“dagor.math”, nsTbl);

+
+

}

+

} // namespace bindquirrel

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.memtrace.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.memtrace.html new file mode 100644 index 000000000..e8cdd3166 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.memtrace.html @@ -0,0 +1,308 @@ + + + + + + + dagor.memtrace — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.memtrace

+

module ‘dagor.memtrace’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/sqratDagorDebug.cpp

+

Usage:

+
let { get_quirrel_object_size, get_quirrel_object_size_as_string, is_quirrel_object_larger_than, reset_all, set_huge_alloc_threshold, dump_all, get_memory_allocated_kb } = require("dagor.memtrace")
+
+
+

or:

+
from "dagor.memtrace" import *
+
+
+
//'dagor.memtrace' exports:
+{
+  function get_quirrel_object_size()
+  function get_quirrel_object_size_as_string()
+  function is_quirrel_object_larger_than(arg0, arg1): any_type, integer -> _undocumented_
+  function reset_all()
+  function set_huge_alloc_threshold():  -> previously
+  function dump_all()
+  function get_memory_allocated_kb():  -> integer
+}
+
+
+
+
+function get_quirrel_object_size()
+
+ +
+
+function get_quirrel_object_size_as_string()
+
+ +
+
+function is_quirrel_object_larger_than(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: any_type, any_type, integer

+
+ +
+
+function reset_all()
+
+ +
+
+function set_huge_alloc_threshold()
+
+
Returns:
+

previously

+
+
+
+ +
+
+function dump_all()
+
+ +
+
+function get_memory_allocated_kb()
+
+
Returns:
+

integer

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.perf.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.perf.html new file mode 100644 index 000000000..6b80643d2 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.perf.html @@ -0,0 +1,252 @@ + + + + + + + dagor.perf — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.perf

+

module ‘dagor.perf’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/sqratDagorDebug.cpp

+

Usage:

+
let {  } = require("dagor.perf")
+
+
+

or:

+
from "dagor.perf" import *
+
+
+
//'dagor.perf' exports:
+{
+}
+
+
+perfTbl //
+  .Func("get_avg_cpu_only_cycle_time_usec", getAvgCpuOnlyCycleTimeUsec)
+  .Func("reset_summed_cpu_only_cycle_time", []() { workcycleperf::reset_summed_cpu_only_cycle_time(); })
+
+
+

/*

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.profiler.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.profiler.html new file mode 100644 index 000000000..efc744dfd --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.profiler.html @@ -0,0 +1,329 @@ + + + + + + + dagor.profiler — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.profiler

+

module ‘dagor.profiler’

+

Source file: prog/gameLibs/quirrel/sqDebugger/scriptProfiler.cpp

+

Usage:

+
let { dump, reset_values, get_total_time, detect_slow_calls, start, stop, stop_and_save_to_file } = require("dagor.profiler")
+
+
+

or:

+
from "dagor.profiler" import *
+
+
+
//'dagor.profiler' exports:
+{
+  function dump():  -> null
+  function reset_values():  -> null
+  function get_total_time():  -> integer
+  function detect_slow_calls(msec_threshold): integer -> null
+  function start()
+  function stop()
+  function stop_and_save_to_file(arg0): string -> _undocumented_
+}
+
+
+
+
+function dump()
+
+
Returns:
+

null

+
+
+
+ +
+
+function reset_values()
+
+
Returns:
+

null

+
+
+
+ +
+
+function get_total_time()
+
+
Returns:
+

integer

+
+
+
+ +
+
+function detect_slow_calls(msec_threshold)
+
+
Arguments:
+
    +
  • msec_threshold (integer()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function start()
+
+ +
+
+function stop()
+
+ +
+
+function stop_and_save_to_file(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +

/;

+
+

module_mgr->addNativeModule(“dagor.profiler”, exports);

+
+

}

+

void scriptprofile::shutdown(HSQUIRRELVM vm) { g_PerfProfile.shutdown(vm); }

+

#endif

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.random.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.random.html new file mode 100644 index 000000000..40a4b2fe9 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.random.html @@ -0,0 +1,385 @@ + + + + + + + dagor.random — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.random

+

module ‘dagor.random’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/random.cpp

+

Usage:

+
let { rnd, frnd, srnd, rnd_float, rnd_int, set_rnd_seed, get_rnd_seed, gauss_rnd, uint32_hash, uint_noise1D, uint_noise2D, uint_noise3D } = require("dagor.random")
+
+
+

or:

+
from "dagor.random" import *
+
+
+
//'dagor.random' exports:
+{
+  function rnd():  -> integer
+  function frnd():  -> float
+  function srnd():  -> float
+  function rnd_float(a, b): float, float -> float
+  function rnd_int(a, b): integer, integer -> integer
+  function set_rnd_seed(seed): integer -> null
+  function get_rnd_seed():  -> integer
+  function gauss_rnd(arg0): integer_or_float -> _undocumented_
+  function uint32_hash()
+  function uint_noise1D()
+  function uint_noise2D()
+  function uint_noise3D()
+}
+
+
+
+
+function rnd()
+
+
Returns:
+

integer

+
+
+
+ +
+
+function frnd()
+
+
Returns:
+

float

+
+
+
+ +
+
+function srnd()
+
+
Returns:
+

float

+
+
+
+ +
+
+function rnd_float(a, b)
+
+
Arguments:
+
    +
  • a (float()) –

  • +
  • b (float()) –

  • +
+
+
Returns:
+

float

+
+
+
+ +
+
+function rnd_int(a, b)
+
+
Arguments:
+
    +
  • a (integer()) –

  • +
  • b (integer()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function set_rnd_seed(seed)
+
+
Arguments:
+
    +
  • seed (integer()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function get_rnd_seed()
+
+
Returns:
+

integer

+
+
+
+ +
+
+function gauss_rnd(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer_or_float

+
+ +
+
+function uint32_hash()
+
+ +
+
+function uint_noise1D()
+
+ +
+
+function uint_noise2D()
+
+ +
+
+function uint_noise3D()
+
+ +

/;

+
+

module_mgr->addNativeModule(“dagor.random”, exports);

+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.shell.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.shell.html new file mode 100644 index 000000000..e82e53981 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.shell.html @@ -0,0 +1,268 @@ + + + + + + + dagor.shell — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.shell

+

module ‘dagor.shell’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorShell.cpp

+

Usage:

+
let { shell_execute } = require("dagor.shell")
+
+
+

or:

+
from "dagor.shell" import *
+
+
+
//'dagor.shell' exports:
+{
+  function shell_execute(params): table -> _undocumented_
+}
+
+
+
+
+function shell_execute(params)
+
+
Arguments:
+
    +
  • params (table()) – table to get result

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, table

+
+ +
+
params
+
{cmd:string, file:string, dir:string, params:string, force_sync:boolean}
+file or dir should be set. params is optional
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.file_handlers.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.file_handlers.html new file mode 100644 index 000000000..39f8d01b1 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.file_handlers.html @@ -0,0 +1,278 @@ + + + + + + + dagor.system.file_handlers — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.system.file_handlers

+

module ‘dagor.system.file_handlers’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorSystemFileHandlers.cpp

+

Usage:

+
let { get_meta_info_from_screenshot, init_file_drop_handler } = require("dagor.system.file_handlers")
+
+
+

or:

+
from "dagor.system.file_handlers" import *
+
+
+
//'dagor.system.file_handlers' exports:
+{
+  function get_meta_info_from_screenshot(name): string -> DataBlock
+  function init_file_drop_handler()
+}
+
+
+
+
+function get_meta_info_from_screenshot(name)
+
+
Arguments:
+
    +
  • name (string()) – path of the screenshot file

  • +
+
+
Returns:
+

datablock with screenshot meta info

+
+
Return type:
+

DataBlock

+
+
+
+ +
+
+function init_file_drop_handler()
+
+ +

/;

+
+

module_mgr->addNativeModule(“dagor.system.file_handlers”, exports);

+
+

}

+

void cleanup_dagor_system_file_handlers() { release_file_drop_handler(); }

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.html new file mode 100644 index 000000000..9ab2df8f0 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.html @@ -0,0 +1,524 @@ + + + + + + + dagor.system — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.system

+

module ‘dagor.system’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorSystem.cpp

+

Usage:

+
let { dgs_get_settings, exit, get_arg_value_by_name, get_log_directory, get_all_arg_values_by_name, get_primary_screen_info, message_box, set_app_window_title, argv, DBGLEVEL, SANITIZER, ARCH_BITS, MB_OK, MB_OK_CANCEL, MB_YES_NO, MB_RETRY_CANCEL, MB_ABORT_RETRY_IGNORE, MB_YES_NO_CANCEL, MB_CANCEL_TRY_CONTINUE, MB_DEF_BUTTON_1, MB_DEF_BUTTON_2, MB_DEF_BUTTON_3, MB_ICON_ERROR, MB_ICON_WARNING, MB_ICON_QUESTION, MB_ICON_INFORMATION, MB_TOPMOST, MB_FOREGROUND, MB_NATIVE_DLG, MB_FAIL, MB_CLOSE, MB_BUTTON_1, MB_BUTTON_2, MB_BUTTON_3 } = require("dagor.system")
+
+
+

or:

+
from "dagor.system" import *
+
+
+
//'dagor.system' exports:
+{
+  function dgs_get_settings():  -> DataBlock
+  function exit(exit_code): integer -> null
+  function get_arg_value_by_name():  -> string|null
+  function get_log_directory()
+  function get_all_arg_values_by_name(name): string -> array|null
+  function get_primary_screen_info()
+  function message_box(mbx_title, mbx_text, mbx_level): string, string, integer -> _undocumented_
+  function set_app_window_title(title, s): string, any_type -> null
+  const argv
+  const DBGLEVEL
+  const SANITIZER
+  const ARCH_BITS
+  const MB_OK
+  const MB_OK_CANCEL
+  const MB_YES_NO
+  const MB_RETRY_CANCEL
+  const MB_ABORT_RETRY_IGNORE
+  const MB_YES_NO_CANCEL
+  const MB_CANCEL_TRY_CONTINUE
+  const MB_DEF_BUTTON_1
+  const MB_DEF_BUTTON_2
+  const MB_DEF_BUTTON_3
+  const MB_ICON_ERROR
+  const MB_ICON_WARNING
+  const MB_ICON_QUESTION
+  const MB_ICON_INFORMATION
+  const MB_TOPMOST
+  const MB_FOREGROUND
+  const MB_NATIVE_DLG
+  const MB_FAIL
+  const MB_CLOSE
+  const MB_BUTTON_1
+  const MB_BUTTON_2
+  const MB_BUTTON_3
+}
+
+
+
+
+function dgs_get_settings()
+
+
Returns:
+

datablock with game settings

+
+
Return type:
+

DataBlock

+
+
+
+ +
+
+function exit(exit_code)
+
+
Arguments:
+
    +
  • exit_code (integer()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function get_arg_value_by_name()
+
+
Returns:
+

null if no named argument provided

+
+
Return type:
+

string|null

+
+
+
+ +
+
+function get_log_directory()
+
+ +
+
+function get_all_arg_values_by_name(name)
+
+
Arguments:
+
    +
  • name (string()) –

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+
Returns:
+

returns null or list [value1, value2,…] of all command line arguments provided in -name:value1 -name2:value2

+
+
Return type:
+

array|null

+
+
+
+ +

format

+
+
+function get_primary_screen_info()
+
+ +
+
+function message_box(mbx_title, mbx_text, mbx_level)
+
+
Arguments:
+
    +
  • mbx_title (string()) –

  • +
  • mbx_text (string()) –

  • +
  • mbx_level (integer()) – can be error, warning, info level

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, string, string, integer

+
+ +
+
+function set_app_window_title(title, s)
+
+
Arguments:
+
    +
  • title (string()) –

  • +
  • s (any_type()) – title

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+const argv
+

type: array

+
+ +
+
+const DBGLEVEL
+
+ +
+
+const SANITIZER
+
+ +
+
+const ARCH_BITS
+
+ +
+
+const MB_OK
+
+ +
+
+const MB_OK_CANCEL
+
+ +
+
+const MB_YES_NO
+
+ +
+
+const MB_RETRY_CANCEL
+
+ +
+
+const MB_ABORT_RETRY_IGNORE
+
+ +
+
+const MB_YES_NO_CANCEL
+
+ +
+
+const MB_CANCEL_TRY_CONTINUE
+
+ +
+
+const MB_DEF_BUTTON_1
+
+ +
+
+const MB_DEF_BUTTON_2
+
+ +
+
+const MB_DEF_BUTTON_3
+
+ +
+
+const MB_ICON_ERROR
+
+ +
+
+const MB_ICON_WARNING
+
+ +
+
+const MB_ICON_QUESTION
+
+ +
+
+const MB_ICON_INFORMATION
+
+ +
+
+const MB_TOPMOST
+
+ +
+
+const MB_FOREGROUND
+
+ +
+
+const MB_NATIVE_DLG
+
+ +
+
+const MB_FAIL
+
+ +
+
+const MB_CLOSE
+
+ +
+
+const MB_BUTTON_1
+
+ +
+
+const MB_BUTTON_2
+
+ +
+
+const MB_BUTTON_3
+
+ +

/;

+

#undef GUI_CONST

+
+

module_mgr->addNativeModule(“dagor.system”, exports);

+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.time.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.time.html new file mode 100644 index 000000000..9e6a32f9b --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.time.html @@ -0,0 +1,413 @@ + + + + + + + dagor.time — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.time

+

module ‘dagor.time’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorTime.cpp

+

Usage:

+
let { ref_time_ticks, get_time_usec, get_time_msec, get_local_unixtime, format_unixtime, unixtime_to_local_timetbl, local_timetbl_to_unixtime, unixtime_to_utc_timetbl, utc_timetbl_to_unixtime } = require("dagor.time")
+
+
+

or:

+
from "dagor.time" import *
+
+
+
//'dagor.time' exports:
+{
+  function ref_time_ticks()
+  function get_time_usec()
+  function get_time_msec():  -> integer
+  function get_local_unixtime():  -> integer
+  function format_unixtime(fmt, ts, ts): string, time_t, integer -> string
+  function unixtime_to_local_timetbl(ts): integer -> table
+  function local_timetbl_to_unixtime(localTimeTbl): table -> integer
+  function unixtime_to_utc_timetbl(ts): integer -> table
+  function utc_timetbl_to_unixtime(utcTimeTbl): table -> integer
+}
+
+
+

Date/time getters and converters.

+
+
+function ref_time_ticks()
+
+ +
+
+function get_time_usec()
+
+ +
+
+function get_time_msec()
+

Returns the number of milliseconds that have passed since the client was started.

+
+
Returns:
+

Milliseconds since client start

+
+
Return type:
+

integer

+
+
+
+ +
+
+function get_local_unixtime()
+

Returns UNIX timestamp from the local machine clock. Don’t trust it too much, because user can set a fake time on his

+
+
Returns:
+

UNIX timestamp from local machine clock

+
+
Return type:
+

integer

+
+
+
+ +

machine manually.

+
+
+function format_unixtime(fmt, ts, ts)
+
+
Arguments:
+
    +
  • fmt (string()) –

  • +
  • ts (integer()) –

  • +
  • ts – UNIX timestamp to format

  • +
+
+
Returns:
+

Formatted string

+
+
Return type:
+

string

+
+
+
+ +
+
+function unixtime_to_local_timetbl(ts)
+

Converts UNIX timestamp to Local time table.

+
+
Arguments:
+
    +
  • ts (integer()) – UNIX timestamp

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer

+
+
Returns:
+

Local time table

+
+
Return type:
+

table

+
+
+
+ +
+
+function local_timetbl_to_unixtime(localTimeTbl)
+

Converts Local time table to UNIX timestamp.

+
+
Arguments:
+
    +
  • localTimeTbl (table()) – Local time table

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, table

+
+
Returns:
+

UNIX timestamp

+
+
Return type:
+

integer

+
+
+
+ +
+
+function unixtime_to_utc_timetbl(ts)
+

Converts UNIX timestamp to UTC time table.

+
+
Arguments:
+
    +
  • ts (integer()) – UNIX timestamp

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer

+
+
Returns:
+

UTC time table

+
+
Return type:
+

table

+
+
+
+ +
+
+function utc_timetbl_to_unixtime(utcTimeTbl)
+

Converts UTC time table to UNIX timestamp.

+
+
Arguments:
+
    +
  • utcTimeTbl (table()) – UTC time table

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, table

+
+
Returns:
+

UNIX timestamp

+
+
Return type:
+

integer

+
+
+
+ +

/;

+
+

module_mgr->addNativeModule(“dagor.time”, nsTbl);

+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.workcycle.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.workcycle.html new file mode 100644 index 000000000..fb244b41d --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.workcycle.html @@ -0,0 +1,365 @@ + + + + + + + dagor.workcycle — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dagor.workcycle

+

module ‘dagor.workcycle’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/dagorWorkCycle.cpp

+

Usage:

+
let { defer, deferOnce, setTimeout, resetTimeout, setInterval, clearTimer } = require("dagor.workcycle")
+
+
+

or:

+
from "dagor.workcycle" import *
+
+
+
//'dagor.workcycle' exports:
+{
+  function defer(arg0): closure_and_nativeclosure -> _undocumented_
+  function deferOnce(arg0): closure_and_nativeclosure -> _undocumented_
+  function setTimeout(time_in_seconds, func, id = null): integer_or_float, closure_and_nativeclosure, any_type -> _undocumented_
+  function resetTimeout(time_in_seconds, func, id = null): integer_or_float, closure_and_nativeclosure, any_type -> _undocumented_
+  function setInterval(period_in_seconds, func, id = null): integer_or_float, closure_and_nativeclosure, any_type -> _undocumented_
+  function clearTimer(&id_): sqObject -> null
+}
+
+
+
+
+function defer(arg0)
+
+
Arguments:
+
    +
  • arg0 (closure_and_nativeclosure()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, closure_and_nativeclosure

+
+ +
+
+function deferOnce(arg0)
+
+
Arguments:
+
    +
  • arg0 (closure_and_nativeclosure()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, closure_and_nativeclosure

+
+ +
+
+function setTimeout(time_in_seconds, func, id = null)
+
+
Arguments:
+
    +
  • time_in_seconds (integer_or_float()) – time in seconds on which function would be called

  • +
  • func (closure_and_nativeclosure()) – function to be called on time

  • +
  • id (any_type()) – optional id of timer. If not provided closure ‘func’ is used as id

  • +
+
+
+
+ +
+
+function resetTimeout(time_in_seconds, func, id = null)
+
+
Arguments:
+
    +
  • time_in_seconds (integer_or_float()) – time in seconds on which function would be called

  • +
  • func (closure_and_nativeclosure()) – function to be called on time

  • +
  • id (any_type()) – optional id of timer. If not provided closure ‘func’ is used as id

  • +
+
+
+
+ +
+
+function setInterval(period_in_seconds, func, id = null)
+
+
Arguments:
+
    +
  • period_in_seconds (integer_or_float()) – period of time in seconds on which function would be called

  • +
  • func (closure_and_nativeclosure()) – function to be called on time

  • +
  • id (any_type()) – optional id of timer. If not provided closure ‘func’ is used as id

  • +
+
+
+
+ +
+
+function clearTimer(&id_)
+
+
Arguments:
+
    +
  • &id_ (sqObject()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +

/;

+
+

module_mgr->addNativeModule(“dagor.workcycle”, nsTbl);

+

eastl::string vmNameStr((vm_name && *vm_name) ? vm_name : “<unknown>”); +run_action_on_main_thread([vm, au = auto_update_from_idle_cycle, name = vmNameStr] {

+
+

VmData &v = vms[vm]; +v.autoUpdateFromIdleCycle = au; +v.name = name;

+
+

});

+
+

}

+

void clear_workcycle_actions(HSQUIRRELVM vm) +{

+
+

auto it = vms.find(vm); +if (it != vms.end()) +{

+
+

it->second.timers.clear(); +it->second.deferredCalls.clear();

+
+

}

+
+

}

+

void cleanup_dagor_workcycle_module(HSQUIRRELVM vm) { vms.erase(vm); }

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dainput2.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dainput2.html new file mode 100644 index 000000000..bac9ceb15 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dainput2.html @@ -0,0 +1,1387 @@ + + + + + + + dainput2 — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dainput2

+

module ‘dainput2’

+

Source file: prog/gameLibs/daInput/actionSqBind.cpp

+

Usage:

+
let { SingleButtonId, DigitalActionBinding, AnalogAxisActionBinding, AnalogStickActionBinding } = require("dainput2")
+
+
+

or:

+
from "dainput2" import *
+
+
+
//'dainput2' exports:
+{
+  class SingleButtonId
+  class DigitalActionBinding
+  class AnalogAxisActionBinding
+  class AnalogStickActionBinding
+}
+
+
+
+

class SingleButtonId

+
+
+property SingleButtonId.devId
+

integer

+
+ +
+
+property SingleButtonId.btnId
+

integer

+
+ +
+
+

class DigitalActionBinding

+
+
+property DigitalActionBinding.devId
+

integer

+
+ +
+
+property DigitalActionBinding.ctrlId
+

integer

+
+ +
+
+property DigitalActionBinding.eventType
+

integer

+
+ +
+
+property DigitalActionBinding.axisCtrlThres
+

integer

+
+ +
+
+property DigitalActionBinding.btnCtrl
+

bool

+
+ +
+
+property DigitalActionBinding.stickyToggle
+

bool

+
+ +
+
+property DigitalActionBinding.unordCombo
+

bool

+
+ +
+
+property DigitalActionBinding.modCnt
+

integer

+
+ +
+
+property DigitalActionBinding.mod
+

array

+
+ +
+
+

class AnalogAxisActionBinding

+
+
+property AnalogAxisActionBinding.devId
+

integer

+
+ +
+
+property AnalogAxisActionBinding.axisId
+

integer

+
+ +
+
+property AnalogAxisActionBinding.invAxis
+

bool

+
+ +
+
+property AnalogAxisActionBinding.axisRelativeVal
+

bool

+
+ +
+
+property AnalogAxisActionBinding.instantIncDecBtn
+

bool

+
+ +
+
+property AnalogAxisActionBinding.quantizeValOnIncDecBtn
+

bool

+
+ +
+
+property AnalogAxisActionBinding.modCnt
+

integer

+
+ +
+
+property AnalogAxisActionBinding.mod
+

array

+
+ +
+
+property AnalogAxisActionBinding.minBtn
+
+ +
+
+property AnalogAxisActionBinding.maxBtn
+
+ +
+
+property AnalogAxisActionBinding.incBtn
+
+ +
+
+property AnalogAxisActionBinding.decBtn
+
+ +
+
+property AnalogAxisActionBinding.deadZoneThres
+

float

+
+ +
+
+property AnalogAxisActionBinding.nonLin
+

float

+
+ +
+
+property AnalogAxisActionBinding.maxVal
+

float

+
+ +
+
+property AnalogAxisActionBinding.relIncScale
+

float

+
+ +
+
+

class AnalogStickActionBinding

+
+
+property AnalogStickActionBinding.devId
+

integer

+
+ +
+
+property AnalogStickActionBinding.axisXId
+

integer

+
+ +
+
+property AnalogStickActionBinding.axisYId
+

integer

+
+ +
+
+property AnalogStickActionBinding.axisXinv
+

bool

+
+ +
+
+property AnalogStickActionBinding.axisYinv
+

bool

+
+ +
+
+property AnalogStickActionBinding.modCnt
+

integer

+
+ +
+
+property AnalogStickActionBinding.mod
+

array

+
+ +
+
+property AnalogStickActionBinding.minXBtn
+
+ +
+
+property AnalogStickActionBinding.maxXBtn
+
+ +
+
+property AnalogStickActionBinding.minYBtn
+
+ +
+
+property AnalogStickActionBinding.maxYBtn
+
+ +
+
+property AnalogStickActionBinding.deadZoneThres
+

float

+
+ +
+
+property AnalogStickActionBinding.axisSnapAngK
+

float

+
+ +
+
+property AnalogStickActionBinding.nonLin
+

float

+
+ +
+
+property AnalogStickActionBinding.maxVal
+

float

+
+ +
+
+property AnalogStickActionBinding.sensScale
+

float

+
+ +
+
+const AnalogStickActionBinding.DEV_none
+
+ +
+
+const AnalogStickActionBinding.DEV_kbd
+
+ +
+
+const AnalogStickActionBinding.DEV_pointing
+
+ +
+
+const AnalogStickActionBinding.DEV_gamepad
+
+ +
+
+const AnalogStickActionBinding.DEV_joy
+
+ +
+
+const AnalogStickActionBinding.DEV_nullstub
+
+ +
+
+const AnalogStickActionBinding.DEV_USED_mouse
+
+ +
+
+const AnalogStickActionBinding.DEV_USED_kbd
+
+ +
+
+const AnalogStickActionBinding.DEV_USED_gamepad
+
+ +
+
+const AnalogStickActionBinding.DEV_USED_touch
+
+ +
+
+const AnalogStickActionBinding.TYPEGRP__MASK
+
+ +
+
+const AnalogStickActionBinding.TYPEGRP_DIGITAL
+
+ +
+
+const AnalogStickActionBinding.TYPE_BUTTON
+
+ +
+
+const AnalogStickActionBinding.TYPEGRP_AXIS
+
+ +
+
+const AnalogStickActionBinding.TYPE_TRIGGER
+
+ +
+
+const AnalogStickActionBinding.TYPE_STEERWHEEL
+
+ +
+
+const AnalogStickActionBinding.TYPEGRP_STICK
+
+ +
+
+const AnalogStickActionBinding.TYPE_SYSMOUSE
+
+ +
+
+const AnalogStickActionBinding.TYPE_ABSMOUSE
+
+ +
+
+const AnalogStickActionBinding.TYPE_STICK
+
+ +
+
+const AnalogStickActionBinding.TYPE_STICK_DELTA
+
+ +
+
+const AnalogStickActionBinding.BAD_ACTION_HANDLE
+
+ +
+
+const AnalogStickActionBinding.BAD_ACTION_SET_HANDLE
+
+ +
+
+const AnalogStickActionBinding.AXIS_NULL_ID
+
+ +
+
+const AnalogStickActionBinding.BTN_NULL_ID
+
+ +
+
+const AnalogStickActionBinding.BTN_pressed
+
+ +
+
+const AnalogStickActionBinding.BTN_pressed_long
+
+ +
+
+const AnalogStickActionBinding.BTN_pressed2
+
+ +
+
+const AnalogStickActionBinding.BTN_pressed3
+
+ +
+
+const AnalogStickActionBinding.BTN_released
+
+ +
+
+const AnalogStickActionBinding.BTN_released_short
+
+ +
+
+const AnalogStickActionBinding.BTN_released_long
+
+ +
+
+const AnalogStickActionBinding.ST_in_progress
+
+ +
+
+const AnalogStickActionBinding.ST_finished
+
+ +
+
+const AnalogStickActionBinding.ST_cancelled
+
+ +
+
+const AnalogStickActionBinding.GAMEPAD_VENDOR_UNKNOWN
+
+ +
+
+const AnalogStickActionBinding.GAMEPAD_VENDOR_MICROSOFT
+
+ +
+
+const AnalogStickActionBinding.GAMEPAD_VENDOR_SONY
+
+ +
+
+const AnalogStickActionBinding.GAMEPAD_VENDOR_NINTENDO
+
+ +
+
+method AnalogStickActionBinding.set_long_press_time()
+
+ +
+
+method AnalogStickActionBinding.get_long_press_time()
+
+ +
+
+method AnalogStickActionBinding.set_double_click_time()
+
+ +
+
+method AnalogStickActionBinding.get_double_click_time()
+
+ +
+
+method AnalogStickActionBinding.get_actions_config_version()
+
+ +
+
+method AnalogStickActionBinding.reset_actions_binding()
+
+ +
+
+method AnalogStickActionBinding.append_actions_binding()
+
+ +
+
+method AnalogStickActionBinding.clear_actions_binding()
+
+ +
+
+method AnalogStickActionBinding.load_actions_binding(&blk, column)
+
+
Arguments:
+
+
+
Returns:
+

null

+
+
+
+ +
+
+method AnalogStickActionBinding.save_actions_binding()
+
+ +
+
+method AnalogStickActionBinding.get_actions_binding_columns()
+
+ +
+
+method AnalogStickActionBinding.get_tag_str()
+
+ +
+
+method AnalogStickActionBinding.set_actions_binding_column_active()
+
+ +
+
+method AnalogStickActionBinding.get_actions_binding_column_active()
+
+ +
+
+method AnalogStickActionBinding.get_digital_action_state()
+
+ +
+
+method AnalogStickActionBinding.get_analog_axis_action_state()
+
+ +
+
+method AnalogStickActionBinding.get_analog_stick_action_state()
+
+ +
+
+method AnalogStickActionBinding.set_analog_axis_action_state()
+
+ +
+
+method AnalogStickActionBinding.get_digital_action_binding()
+
+ +
+
+method AnalogStickActionBinding.get_analog_axis_action_binding()
+
+ +
+
+method AnalogStickActionBinding.get_analog_stick_action_binding()
+
+ +
+
+method AnalogStickActionBinding.is_action_binding_set(a, col)
+
+
Arguments:
+
    +
  • a (dainput::action_handle_t()) –

  • +
  • col (integer()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+method AnalogStickActionBinding.get_analog_stick_action_smooth_value()
+
+ +
+
+method AnalogStickActionBinding.set_analog_stick_action_smooth_value()
+
+ +
+
+method AnalogStickActionBinding.get_action_handle()
+
+ +
+
+method AnalogStickActionBinding.get_action_type()
+
+ +
+
+method AnalogStickActionBinding.get_action_name()
+
+ +
+
+method AnalogStickActionBinding.is_action_active()
+
+ +
+
+method AnalogStickActionBinding.is_action_internal()
+
+ +
+
+method AnalogStickActionBinding.is_action_stateful(action)
+
+
Arguments:
+
    +
  • action (dainput::action_handle_t()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+method AnalogStickActionBinding.get_group_tag_for_action()
+
+ +
+
+method AnalogStickActionBinding.get_group_tag_str_for_action()
+
+ +
+
+method AnalogStickActionBinding.get_action_set_handle()
+
+ +
+
+method AnalogStickActionBinding.get_action_set_name()
+
+ +
+
+method AnalogStickActionBinding.get_action_set_actions(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer

+
+ +
+
+method AnalogStickActionBinding.setup_action_set(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • arg2 (array()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: any_type, string, array

+
+ +
+
+method AnalogStickActionBinding.clear_action_set_actions()
+
+ +
+
+method AnalogStickActionBinding.reset_action_set_stack()
+
+ +
+
+method AnalogStickActionBinding.activate_action_set()
+
+ +
+
+method AnalogStickActionBinding.get_action_set_stack_depth()
+
+ +
+
+method AnalogStickActionBinding.get_action_set_stack_item()
+
+ +
+
+method AnalogStickActionBinding.get_current_action_set()
+
+ +
+
+method AnalogStickActionBinding.set_breaking_action_set()
+
+ +
+
+method AnalogStickActionBinding.get_action_binding()
+
+ +
+
+method AnalogStickActionBinding.set_action_binding()
+
+ +
+
+method AnalogStickActionBinding.reset_action_binding()
+
+ +
+
+method AnalogStickActionBinding.get_actions_count()
+
+ +
+
+method AnalogStickActionBinding.get_action_handle_by_ord()
+
+ +
+
+method AnalogStickActionBinding.get_action_sets_count()
+
+ +
+
+method AnalogStickActionBinding.get_action_set_handle_by_ord()
+
+ +
+
+method AnalogStickActionBinding.start_recording_bindings()
+
+ +
+
+method AnalogStickActionBinding.start_recording_bindings_for_single_button()
+
+ +
+
+method AnalogStickActionBinding.is_recording_in_progress()
+
+ +
+
+method AnalogStickActionBinding.is_recording_complete()
+
+ +
+
+method AnalogStickActionBinding.finish_recording_bindings()
+
+ +
+
+method AnalogStickActionBinding.reset_digital_action_sticky_toggle()
+
+ +
+
+method AnalogStickActionBinding.get_last_used_device_mask()
+
+ +
+
+method AnalogStickActionBinding.get_overall_button_clicks_count()
+
+ +
+
+method AnalogStickActionBinding.enable_darg_events_for_button_clicks()
+
+ +
+
+method AnalogStickActionBinding.send_action_event()
+
+ +
+
+method AnalogStickActionBinding.send_action_terminated_event()
+
+ +
+
+method AnalogStickActionBinding.set_digital_event_progress_monitor(func)
+
+
Arguments:
+
    +
  • func (closure_and_nativeclosure()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+method AnalogStickActionBinding.enable_debug_traces()
+
+ +
+
+method AnalogStickActionBinding.check_bindings_conflicts(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg2 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: any_type, integer, class_instance

+
+ +
+
+method AnalogStickActionBinding.check_bindings_hides_action(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg2 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: any_type, integer, class_instance

+
+ +
+
+method AnalogStickActionBinding.check_bindings_conflicts_one()
+
+ +
+
+method AnalogStickActionBinding.get_action_bindings_text(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+method AnalogStickActionBinding.format_ctrl_name(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg3 (bool()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, integer, integer, bool

+
+ +
+
+method AnalogStickActionBinding.set_main_gamepad_stick_dead_zone(stick_idx, dzone)
+
+
Arguments:
+
    +
  • stick_idx (integer()) –

  • +
  • dzone (float()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+method AnalogStickActionBinding.set_joystick_stick_dead_zone(stick_idx, dzone)
+
+
Arguments:
+
    +
  • stick_idx (integer()) –

  • +
  • dzone (float()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+method AnalogStickActionBinding.get_main_gamepad_stick_dead_zone(stick_idx)
+
+
Arguments:
+
    +
  • stick_idx (integer()) –

  • +
+
+
Returns:
+

float

+
+
+
+ +
+
+method AnalogStickActionBinding.get_joystick_stick_dead_zone(stick_idx)
+
+
Arguments:
+
    +
  • stick_idx (integer()) –

  • +
+
+
Returns:
+

float

+
+
+
+ +
+
+method AnalogStickActionBinding.get_main_gamepad_stick_dead_zone_abs(stick_idx)
+
+
Arguments:
+
    +
  • stick_idx (integer()) –

  • +
+
+
Returns:
+

float

+
+
+
+ +
+
+method AnalogStickActionBinding.get_joystick_stick_dead_zone_abs(stick_idx)
+
+
Arguments:
+
    +
  • stick_idx (integer()) –

  • +
+
+
Returns:
+

float

+
+
+
+ +
+
+method AnalogStickActionBinding.enable_joystick_gyroscope(enable)
+
+
Arguments:
+
    +
  • enable (bool()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+method AnalogStickActionBinding.set_default_preset_prefix()
+
+ +
+
+method AnalogStickActionBinding.get_default_preset_prefix()
+
+ +
+
+method AnalogStickActionBinding.load_user_config()
+
+ +
+
+method AnalogStickActionBinding.save_user_config()
+
+ +
+
+method AnalogStickActionBinding.get_user_config_base_preset()
+
+ +
+
+method AnalogStickActionBinding.is_user_config_customized()
+
+ +
+
+method AnalogStickActionBinding.reset_user_config_to_preset()
+
+ +
+
+method AnalogStickActionBinding.reset_user_config_to_currest_preset()
+
+ +
+
+method AnalogStickActionBinding.get_user_props()
+
+ +
+
+method AnalogStickActionBinding.is_user_props_customized()
+
+ +
+
+method AnalogStickActionBinding.dump_action_sets()
+
+ +
+
+method AnalogStickActionBinding.dump_action_sets_stack()
+
+ +
+
+method AnalogStickActionBinding.dump_action_set()
+
+ +

/;

+
+

Sqrat::Class<SingleButtonId> sqSingleButtonId(vm, “SingleButtonId”); +sqSingleButtonId //

+
+

.SQ_BIND_PROP(SingleButtonId, devId) +.SQ_BIND_PROP(SingleButtonId, btnId)

+
+
+

/* +/;

+
+
+
Sqrat::Class<AnalogAxisActionBinding>(vm, “AnalogAxisActionBinding”) //

.SQ_BIND_PROP(AnalogAxisActionBinding, devId) +.SQ_BIND_PROP(AnalogAxisActionBinding, axisId) +.SQ_BIND_PROP(AnalogAxisActionBinding, invAxis) +.SQ_BIND_PROP(AnalogAxisActionBinding, axisRelativeVal) +.SQ_BIND_PROP(AnalogAxisActionBinding, instantIncDecBtn) +.SQ_BIND_PROP(AnalogAxisActionBinding, quantizeValOnIncDecBtn)

+

.SQ_BIND_PROP(AnalogAxisActionBinding, modCnt) +.SQ_BIND_PROP(AnalogAxisActionBinding, mod) +.SQ_BIND_PROP(AnalogAxisActionBinding, minBtn) +.SQ_BIND_PROP(AnalogAxisActionBinding, maxBtn) +.SQ_BIND_PROP(AnalogAxisActionBinding, incBtn) +.SQ_BIND_PROP(AnalogAxisActionBinding, decBtn) +.SQ_BIND_PROP(AnalogAxisActionBinding, deadZoneThres) +.SQ_BIND_PROP(AnalogAxisActionBinding, nonLin) +.SQ_BIND_PROP(AnalogAxisActionBinding, maxVal) +.SQ_BIND_PROP(AnalogAxisActionBinding, relIncScale)

+
+
+
+

/* +/;

+
+
+
Sqrat::Class<DigitalAction>(vm, “DigitalAction”) //

.SQ_BIND_MEMBER_VAR(DigitalAction, bState) +.SQ_BIND_MEMBER_VAR(DigitalAction, bActive) +.SQ_BIND_MEMBER_VAR(DigitalAction, bActivePrev)

+
+
+
+

/* +/;

+
+
+
Sqrat::Class<AnalogStickAction>(vm, “AnalogStickAction”) //

.SQ_BIND_MEMBER_VAR(AnalogStickAction, x) +.SQ_BIND_MEMBER_VAR(AnalogStickAction, y) +.SQ_BIND_MEMBER_VAR(AnalogStickAction, bActive) +.SQ_BIND_MEMBER_VAR(AnalogStickAction, bActivePrev)

+
+
+
+

/*

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dasevents.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dasevents.html new file mode 100644 index 000000000..925d8b5be --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dasevents.html @@ -0,0 +1,289 @@ + + + + + + + dasevents — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dasevents

+

module ‘dasevents’

+

Source file: prog/gameLibs/daECS/net/dasevents/dasEventsSQ.cpp

+

Usage:

+
let { sendNetEvent, broadcastNetEvent } = require("dasevents")
+
+
+

or:

+
from "dasevents" import *
+
+
+
//'dasevents' exports:
+{
+  function sendNetEvent(arg0, arg1, arg2, ...): integer, class_instance, array or null, any_type -> _undocumented_
+  function broadcastNetEvent(arg0, arg1, ...): class_instance, array or null, any_type -> _undocumented_
+}
+
+
+
+
+function sendNetEvent(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg2 (array or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, integer, class_instance, array or null

+
+ +
+
+function broadcastNetEvent(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (array or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, class_instance, array or null

+
+ +

/;

+
+
+
if (!existingModule)

module_mgr->addNativeModule(“dasevents”, tbl);

+
+
+
+

}

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/datacache.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/datacache.html new file mode 100644 index 000000000..3557edd35 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/datacache.html @@ -0,0 +1,371 @@ + + + + + + + datacache — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

datacache

+

module ‘datacache’

+

Source file: prog/gameLibs/quirrel/sqDataCache/datacache.cpp

+

Usage:

+
let { init_cache, request_entry, abort_requests, del_entry, get_all_entries, ERR_UNKNOWN, ERR_OK, ERR_PENDING, ERR_IO, ERR_ABORTED, ERR_MEMORY_LIMIT } = require("datacache")
+
+
+

or:

+
from "datacache" import *
+
+
+
//'datacache' exports:
+{
+  function init_cache(cache_name, params): string, Sqrat::Table -> null
+  function request_entry(cache_name, entry_key): string, string -> null
+  function abort_requests(cache_name): string -> null
+  function del_entry(cache_name, entry_key): string, string -> bool
+  function get_all_entries(arg0): string -> _undocumented_
+  value ERR_UNKNOWN
+  value ERR_OK
+  value ERR_PENDING
+  value ERR_IO
+  value ERR_ABORTED
+  value ERR_MEMORY_LIMIT
+}
+
+
+
+
+function init_cache(cache_name, params)
+
+
Arguments:
+
    +
  • cache_name (string()) –

  • +
  • params (Sqrat::Table()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function request_entry(cache_name, entry_key)
+
+
Arguments:
+
    +
  • cache_name (string()) –

  • +
  • entry_key (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function abort_requests(cache_name)
+
+
Arguments:
+
    +
  • cache_name (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function del_entry(cache_name, entry_key)
+
+
Arguments:
+
    +
  • cache_name (string()) –

  • +
  • entry_key (string()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function get_all_entries(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+ERR_UNKNOWN
+
+ +
+
+ERR_OK
+
+ +
+
+ERR_PENDING
+
+ +
+
+ERR_IO
+
+ +
+
+ERR_ABORTED
+
+ +
+
+ERR_MEMORY_LIMIT
+
+ +
+
/;

module_mgr->addNativeModule(“datacache”, nsTbl);

+
+
+

}

+

void shutdown_datacache() { datacaches.clear(); }

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.html new file mode 100644 index 000000000..fbd70ecc9 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.html @@ -0,0 +1,1678 @@ + + + + + + + ecs — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

ecs

+

module ‘ecs’

+

Source file: prog/gameLibs/ecs/scripts/sq/sqcoredaECS.cpp

+

Usage:

+
let { set_callback_timer, set_callback_timer_rt, clear_callback_timer, set_timer, clear_timer, BaseList, ListRO, List, COMP_FLAG_REPLICATED, COMP_FLAG_CHANGE_EVENT, INVALID_ENTITY_ID, EVCAST_UNICAST, EVCAST_BROADCAST, Event, SchemelessEvent, SQEvent, TemplateDB, EventsDB, Template, EntityManager, CompObjectRO, CompObject, CompArray, SqQuery, EntityId, _dbg_get_all_comps_inspect, _dbg_get_comp_val_inspect, obsolete_dbg_get_comp_val, get_comp_type, obsolete_dbg_set_comp_val, get_comp_flags, get_semantic_type, calc_hash, calc_hash_int, TYPE_NULL, TYPE_STRING, TYPE_INT8, TYPE_UINT8, TYPE_INT16, TYPE_UINT16, TYPE_INT, TYPE_UINT, TYPE_INT64, TYPE_UINT64, TYPE_FLOAT, TYPE_POINT2, TYPE_POINT3, TYPE_POINT4, TYPE_IPOINT2, TYPE_IPOINT3, TYPE_IPOINT4, TYPE_DPOINT3, TYPE_BOOL, TYPE_MATRIX, TYPE_EID, TYPE_COLOR, TYPE_OBJECT, TYPE_ARRAY, TYPE_SHARED_OBJECT, TYPE_SHARED_ARRAY, TYPE_INT_LIST, TYPE_UINT16_LIST, TYPE_STRING_LIST, TYPE_EID_LIST, TYPE_FLOAT_LIST, TYPE_POINT2_LIST, TYPE_POINT3_LIST, TYPE_POINT4_LIST, TYPE_IPOINT2_LIST, TYPE_IPOINT3_LIST, TYPE_IPOINT4_LIST, TYPE_BOOL_LIST, TYPE_TMATRIX_LIST, TYPE_COLOR_LIST, TYPE_INT64_LIST, TYPE_UINT64_LIST, TYPE_TAG, TYPE_AUTO, clear_vm_entity_systems, register_entity_system, modify_es_list, start_es_loading, end_es_loading, g_entity_mgr } = require("ecs")
+
+
+

or:

+
from "ecs" import *
+
+
+
//'ecs' exports:
+{
+  function set_callback_timer(handler, interval, repeat): sqObject, float, bool -> Object
+  function set_callback_timer_rt(handler, interval, repeat): sqObject, float, bool -> Object
+  function clear_callback_timer(handler): sqObject -> null
+  function set_timer(arg0): table -> _undocumented_
+  function clear_timer(arg0): table -> _undocumented_
+  class BaseList
+  class ListRO
+  class List
+  value COMP_FLAG_REPLICATED
+  value COMP_FLAG_CHANGE_EVENT
+  value INVALID_ENTITY_ID
+  value EVCAST_UNICAST
+  value EVCAST_BROADCAST
+  class Event
+  class SchemelessEvent
+  class SQEvent
+  class TemplateDB
+  class EventsDB
+  class Template
+  class EntityManager
+  class CompObjectRO
+  class CompObject
+  class CompArray
+  class SqQuery
+  class EntityId
+  function _dbg_get_all_comps_inspect(arg0): integer -> _undocumented_
+  function _dbg_get_comp_val_inspect(arg0, arg1, ...): integer, string, any_type -> _undocumented_
+  function obsolete_dbg_get_comp_val(arg0, arg1, ...): integer, string, any_type -> _undocumented_
+  function get_comp_type(eid, comp_name): ecs::EntityId, string -> integer
+  function obsolete_dbg_set_comp_val(arg0, arg1, ...): integer, string, any_type -> _undocumented_
+  function get_comp_flags(eid, comp): ecs::EntityId, string -> integer
+  function get_semantic_type(type_name): string -> component_type_t
+  function calc_hash(arg0): string -> _undocumented_
+  function calc_hash_int(arg0): string -> _undocumented_
+  value TYPE_NULL
+  const TYPE_STRING
+  const TYPE_INT8
+  const TYPE_UINT8
+  const TYPE_INT16
+  const TYPE_UINT16
+  const TYPE_INT
+  const TYPE_UINT
+  const TYPE_INT64
+  const TYPE_UINT64
+  const TYPE_FLOAT
+  const TYPE_POINT2
+  const TYPE_POINT3
+  const TYPE_POINT4
+  const TYPE_IPOINT2
+  const TYPE_IPOINT3
+  const TYPE_IPOINT4
+  const TYPE_DPOINT3
+  const TYPE_BOOL
+  const TYPE_MATRIX
+  const TYPE_EID
+  const TYPE_COLOR
+  const TYPE_OBJECT
+  const TYPE_ARRAY
+  const TYPE_SHARED_OBJECT
+  const TYPE_SHARED_ARRAY
+  const TYPE_INT_LIST
+  const TYPE_UINT16_LIST
+  const TYPE_STRING_LIST
+  const TYPE_EID_LIST
+  const TYPE_FLOAT_LIST
+  const TYPE_POINT2_LIST
+  const TYPE_POINT3_LIST
+  const TYPE_POINT4_LIST
+  const TYPE_IPOINT2_LIST
+  const TYPE_IPOINT3_LIST
+  const TYPE_IPOINT4_LIST
+  const TYPE_BOOL_LIST
+  const TYPE_TMATRIX_LIST
+  const TYPE_COLOR_LIST
+  const TYPE_INT64_LIST
+  const TYPE_UINT64_LIST
+  const TYPE_TAG
+  const TYPE_AUTO
+  function clear_vm_entity_systems()
+  function register_entity_system(arg0, arg1, arg2, arg3, ...): string, table, table, table or null, any_type -> _undocumented_
+  function modify_es_list(arg0): closure_and_nativeclosure -> _undocumented_
+  function start_es_loading()
+  function end_es_loading()
+  value g_entity_mgr
+}
+
+
+
+
+function set_callback_timer(handler, interval, repeat)
+
+
Arguments:
+
    +
  • handler (sqObject()) –

  • +
  • interval (float()) –

  • +
  • repeat (bool()) –

  • +
+
+
Returns:
+

Object

+
+
+
+ +
+
+function set_callback_timer_rt(handler, interval, repeat)
+
+
Arguments:
+
    +
  • handler (sqObject()) –

  • +
  • interval (float()) –

  • +
  • repeat (bool()) –

  • +
+
+
Returns:
+

Object

+
+
+
+ +
+
+function clear_callback_timer(handler)
+
+
Arguments:
+
    +
  • handler (sqObject()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function set_timer(arg0)
+
+
Arguments:
+
    +
  • arg0 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, table

+
+ +
+
+function clear_timer(arg0)
+
+
Arguments:
+
    +
  • arg0 (table()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, table

+
+ +

/; +}

+

void shutdown_timers(HSQUIRRELVM /*vm

+
+

class BaseList

+
+

This is not real class. Just all List classes has this methods!

+
+
Real classes are following:
    +
  • CompIntList(RO)

  • +
  • CompUInt16List(RO)

  • +
  • CompStringList(RO)

  • +
  • CompEidList(RO)

  • +
  • CompFloatList(RO)

  • +
  • CompPoint2List(RO)

  • +
  • CompPoint3List(RO)

  • +
  • CompPoint4List(RO)

  • +
  • CompIPoint2List(RO)

  • +
  • CompIPoint3List(RO)

  • +
  • CompBoolList(RO)

  • +
  • CompTMatrixList(RO)

  • +
  • CompColorList(RO)

  • +
  • CompInt64List(RO)

  • +
  • CompUInt64List(RO)

  • +
+
+
+
+
+
+BaseList()
+
+ +
+
+operator BaseList._get(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, any_type

+
+ +
+
+operator BaseList._nexti(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer or null

+
+ +
+
+method BaseList.len()
+
+ +
+
+method BaseList.indexof(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, any_type, integer

+
+ +
+
+method BaseList.getAll(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method BaseList.isReadOnly(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method BaseList.listType(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +

/;

+
+

if (readonly)

+
+
+
+

class ListRO extends ecs.BaseList

+
+
+
sqListClass //

.SquirrelFunc(“_set”, readonly_method_error, 3, “xi.”) +.SquirrelFunc(“append”, readonly_method_error, -2, “x.i”) +.SquirrelFunc(“insert”, readonly_method_error, -3, “xi.i”) +.SquirrelFunc(“remove”, readonly_method_error, 2, “xi”) +.SquirrelFunc(“pop”, readonly_method_error, 1, “x”) +.SquirrelFunc(“clear”, readonly_method_error, 1, “x”)

+
+
+
+

/*

+
+
+

class List extends ecs.BaseList

+
+
+operator List._set(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: class_instance, integer, any_type

+
+ +
+
+method List.append(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, any_type, integer

+
+ +
+
+method List.insert(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: class_instance, integer, any_type, integer

+
+ +
+
+method List.remove(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer

+
+ +
+
+method List.pop(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method List.clear()
+
+ +

/;

+
+

tbl.Bind(type_name, sqListClass);

+
+

}

+

template <typename TypeRW, typename TypeRO, typename ItemType> +static void bind_list_type(HSQUIRRELVM vm, Sqrat::Table &tbl, const char *type_name) +{

+
+

using TS = eastl::fixed_string<char, 256>;

+
+

bind_list_class<Sqrat::Class<TypeRO>, TypeRO, ItemType, /*ro

+
+
+COMP_FLAG_REPLICATED
+
+ +
+
+COMP_FLAG_CHANGE_EVENT
+
+ +
+
+INVALID_ENTITY_ID
+
+ +
+
+EVCAST_UNICAST
+
+ +
+
+EVCAST_BROADCAST
+
+ +
+
+

class Event

+
+
+method Event.getType()
+
+ +
+
+

class SchemelessEvent extends Event

+
+
+SchemelessEvent()
+
+ +
+
+

class SQEvent extends ecs.SchemelessEvent

+
+
+SQEvent()
+
+ +
+
+

class TemplateDB

+
+
+method TemplateDB.getTemplateByName()
+
+ +
+
+method TemplateDB.size()
+
+ +
+
+method TemplateDB.getTemplateMetaInfo()
+
+ +
+
+method TemplateDB.getComponentMetaInfo()
+
+ +
+
+method TemplateDB.hasComponentMetaInfo()
+
+ +

/;

+
+
+

class EventsDB

+
+

Sqrat::Class<EventsDB, Sqrat::NoConstructor<EventsDB>> sqEventsDB(vm, “EventsDB”); +sqEventsDB //

+
+

.Func(“findEvent”, &EventsDB::findEvent) +.Func(“hasEventScheme”, &EventsDB::hasEventScheme) +.Func(“getFieldsCount”, &EventsDB::getFieldsCount) +.Func(“findFieldIndex”, &EventsDB::findFieldIndex) +.Func(“getFieldName”, &EventsDB::getFieldName) +.Func(“getFieldType”, &EventsDB::getFieldType) +.Func(“getFieldOffset”, &EventsDB::getFieldOffset) +.SquirrelFunc(“getEventFieldValue”, evtdb_get_event_field, 4, “.xii”)

+
+
+

/*

+
+
+

class Template

+
+
+method Template.getName()
+
+ +
+
+method Template.getBase()
+
+ +
+
+method Template.getCompVal(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string

+
+ +
+
+method Template.getCompValNullable(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string

+
+ +
+
+method Template.hasComponent()
+
+ +
+
+method Template.getNumParentTemplates()
+
+ +
+
+method Template.getParentTemplate()
+
+ +
+
+method Template.getComponentsNames(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method Template.getTags(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +

/;

+
+

typedef bool (EntityManager::*removeCompFunc)(EntityId, const char *);

+
+
+
+

class EntityManager

+
+

Sqrat::Class<EntityManager, Sqrat::NoConstructor<EntityManager>> sqEntityManager(vm, “EntityManager”); +sqEntityManager //

+
+

.Func(“destroyEntity”, (bool(EntityManager::*)(const ecs::EntityId &)) & EntityManager::destroyEntity) +.Func(“doesEntityExist”, &EntityManager::doesEntityExist) +.Func(“getNumEntities”, &EntityManager::getNumEntities)

+

//.Func(“getNumComponents”, &EntityManager::getNumComponents)

+

.SquirrelFunc(“sendEvent”, emgr_send_event, 3, “xix”) +.SquirrelFunc(“broadcastEvent”, emgr_bcast_event, 2, “xx”)

+

//.Func(“getEntityTemplate”, &EntityManager::getEntityTemplate) +.Func(“getEntityTemplateName”, &EntityManager::getEntityTemplateName) +.Func(“getEntityFutureTemplateName”, &EntityManager::getEntityFutureTemplateName) +.GlobalFunc(“getTemplateDB”, emgr_get_tempate_db) // FIXME: sqrat binding is not supports returning references from member

+
+

// functions

+
+

.GlobalFunc(“getEventsDB”, emgr_get_events_db) +.SquirrelFunc(“createEntity”, create_entity, -3, “xstc|o”) +.SquirrelFunc(“createEntitySync”, create_entity_sync, -3, “xst|o”) +.SquirrelFunc(“reCreateEntityFrom”, recreate_entity, -4, “xistc|o”) +.SquirrelFunc(“createTemplate”, create_template, -3, “xstssis”) +.GlobalFunc(“getComponentType”, emgr_get_component_type) +.GlobalFunc(“getComponentTypeName”, emgr_get_component_type_name) +.GlobalFunc(“getTypeName”, emgr_get_type_name)

+
+
+

/*

+
+
+var EntityManager.dt
+
+ +
+
+var EntityManager.curTime
+
+ +

/;

+
+
+

class CompObjectRO

+
+

Sqrat::Class<ecs::ObjectRO> sqCompObjectRO(vm, “CompObjectRO”); +sqCompObjectRO //

+
+

.SquirrelFunc(“isReadOnly”, comp_is_readonly<true>, 1, “x”)

+
+
+

.SquirrelFunc(“getAll”, comp_obj_get_all<ecs::ObjectRO, ecs::ArrayRO, /*RO

+
+
+operator CompObjectRO._get(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string

+
+ +
+
+operator CompObjectRO._set(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: class_instance, string, any_type

+
+ +
+
+operator CompObjectRO._newslot(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: class_instance, string, any_type

+
+ +
+
+operator CompObjectRO._nexti(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string or null

+
+ +
+
+method CompObjectRO.remove(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, string

+
+ +
+
+method CompObjectRO.len()
+
+ +

/;

+
+
+

class CompObject extends ecs.CompObjectRO

+
+

Sqrat::DerivedClass<ecs::Object, ecs::ObjectRO> sqCompObject(vm, “CompObject”); +sqCompObject //

+
+

.SquirrelFunc(“isReadOnly”, comp_is_readonly<false>, 1, “x”) +.SquirrelFunc(“getAll”, comp_obj_get_all<ecs::Object, ecs::Array, false>, 1, “x”) +.SquirrelFunc(“_get”, comp_obj_get<ecs::Object, false>, 2, “xs”) +.SquirrelFunc(“_set”, comp_obj_set<ecs::Object>, 3, “xs.”) +.SquirrelFunc(“_newslot”, comp_obj_set<ecs::Object>, 3, “xs.”) +.SquirrelFunc(“_nexti”, comp_obj_nexti<ecs::Object>, 2, “xs|o”) +.SquirrelFunc(“remove”, comp_obj_erase<ecs::Object>, 2, “xs”) +.GlobalFunc(“len”, comp_t_len<ecs::Object>)

+
+
+

/*

+
+
+method CompObject.isReadOnly(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+method CompObject.getAll(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +
+
+operator CompObject._get(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer

+
+ +
+
+operator CompObject._set(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: class_instance, integer, any_type

+
+ +
+
+operator CompObject._nexti(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer or null()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer or null

+
+ +
+
+method CompObject.len()
+
+ +
+
+method CompObject.indexof(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, any_type, integer

+
+ +
+
+method CompObject.append(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, any_type, integer

+
+ +
+
+method CompObject.insert(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: class_instance, integer, any_type, integer

+
+ +
+
+method CompObject.remove(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: class_instance, integer

+
+ +
+
+method CompObject.pop(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +

/;

+
+
+

class CompArray extends ecs.CompArrayRO

+
+

Sqrat::DerivedClass<ecs::Array, ecs::ArrayRO> sqCompArray(vm, “CompArray”); +sqCompArray //

+
+

.SquirrelFunc(“isReadOnly”, comp_is_readonly<false>, 1, “x”) +.SquirrelFunc(“getAll”, comp_arr_get_all<ecs::Object, ecs::Array, false>, 1, “x”) +.SquirrelFunc(“_get”, comp_arr_get<ecs::Array, false>, 2, “x.”) +.SquirrelFunc(“_set”, comp_arr_set<ecs::Array>, 3, “xi.”) +.SquirrelFunc(“_nexti”, comp_arr_nexti<ecs::Array>, 2, “xi|o”) +.GlobalFunc(“len”, comp_t_len<ecs::Array>) +.SquirrelFunc(“indexof”, comp_arr_indexof<ecs::Array>, -2, “x.i”) +.SquirrelFunc(“append”, comp_arr_append<ecs::Array>, -2, “x.i”) +.SquirrelFunc(“insert”, comp_arr_insert<ecs::Array>, -3, “xi.i”) +.SquirrelFunc(“remove”, comp_arr_remove<ecs::Array>, 2, “xi”) +.SquirrelFunc(“pop”, comp_arr_pop<ecs::Array>, 1, “x”) +.GlobalFunc(“clear”, comp_arr_clear<ecs::Array>)

+
+
+

/*

+
+
+

class SqQuery

+
+
+SqQuery(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (table()) – autodoc from typemask/paramscheck

  • +
  • arg2 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: class_instance, string, table, string

+
+ +
+
+method SqQuery.perform(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer or closure_and_nativeclosure()) – autodoc from typemask/paramscheck

  • +
  • arg2 (closure_and_nativeclosure or string or null()) – autodoc from typemask/paramscheck

  • +
  • arg3 (string or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: class_instance, integer or closure_and_nativeclosure, closure_and_nativeclosure or string or null, string or null

+
+ +
+
+operator SqQuery._call(arg0, arg1, arg2, arg3, arg4, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer or closure_and_nativeclosure()) – autodoc from typemask/paramscheck

  • +
  • arg3 (closure_and_nativeclosure or string or null()) – autodoc from typemask/paramscheck

  • +
  • arg4 (string or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: class_instance, any_type, integer or closure_and_nativeclosure, closure_and_nativeclosure or string or null, string or null

+
+ +

/;

+
+
+

class EntityId

+
+

Sqrat::Class<ecs::EntityId> sqEntityId(vm, “EntityId”); +sqEntityId.SquirrelCtor(eid_ctor, -1, “xi”);

+

Sqrat::DerivedClass<EventDataGetter, ecs::Event, Sqrat::NoConstructor<EventDataGetter>> sqEventGetterProxy(vm, “EventDataGetter”);

+

sqEventGetterProxy.Var(“data”, &EventDataGetter::sqData);

+
+
tblEcs //

.Func(“get_component_name_by_idx”, get_component_name_by_idx) +.Func(“get_component_name_by_hash”, get_component_name_by_hash) +.SquirrelFunc(“register_sq_event”, register_sq_event, -2, “.sb|ii|o”)

+
+
+
+

/*

+
+
+function _dbg_get_all_comps_inspect(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, integer

+
+ +
+
+function _dbg_get_comp_val_inspect(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, integer, string

+
+ +
+
+function obsolete_dbg_get_comp_val(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, integer, string

+
+ +
+
+function get_comp_type(eid, comp_name)
+
+
Arguments:
+
    +
  • eid (ecs::EntityId()) –

  • +
  • comp_name (string()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function obsolete_dbg_set_comp_val(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, integer, string

+
+ +
+
+function get_comp_flags(eid, comp)
+
+
Arguments:
+
    +
  • eid (ecs::EntityId()) –

  • +
  • comp (string()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function get_semantic_type(type_name)
+
+
Arguments:
+
    +
  • type_name (string()) –

  • +
+
+
Returns:
+

component_type_t

+
+
+
+ +
+
+function calc_hash(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+function calc_hash_int(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+TYPE_NULL
+
+ +
+
+const TYPE_STRING
+
+ +
+
+const TYPE_INT8
+
+ +
+
+const TYPE_UINT8
+
+ +
+
+const TYPE_INT16
+
+ +
+
+const TYPE_UINT16
+
+ +
+
+const TYPE_INT
+
+ +
+
+const TYPE_UINT
+
+ +
+
+const TYPE_INT64
+
+ +
+
+const TYPE_UINT64
+
+ +
+
+const TYPE_FLOAT
+
+ +
+
+const TYPE_POINT2
+
+ +
+
+const TYPE_POINT3
+
+ +
+
+const TYPE_POINT4
+
+ +
+
+const TYPE_IPOINT2
+
+ +
+
+const TYPE_IPOINT3
+
+ +
+
+const TYPE_IPOINT4
+
+ +
+
+const TYPE_DPOINT3
+
+ +
+
+const TYPE_BOOL
+
+ +
+
+const TYPE_MATRIX
+
+ +
+
+const TYPE_EID
+
+ +
+
+const TYPE_COLOR
+
+ +
+
+const TYPE_OBJECT
+
+ +
+
+const TYPE_ARRAY
+
+ +
+
+const TYPE_SHARED_OBJECT
+
+ +
+
+const TYPE_SHARED_ARRAY
+
+ +
+
+const TYPE_INT_LIST
+
+ +
+
+const TYPE_UINT16_LIST
+
+ +
+
+const TYPE_STRING_LIST
+
+ +
+
+const TYPE_EID_LIST
+
+ +
+
+const TYPE_FLOAT_LIST
+
+ +
+
+const TYPE_POINT2_LIST
+
+ +
+
+const TYPE_POINT3_LIST
+
+ +
+
+const TYPE_POINT4_LIST
+
+ +
+
+const TYPE_IPOINT2_LIST
+
+ +
+
+const TYPE_IPOINT3_LIST
+
+ +
+
+const TYPE_IPOINT4_LIST
+
+ +
+
+const TYPE_BOOL_LIST
+
+ +
+
+const TYPE_TMATRIX_LIST
+
+ +
+
+const TYPE_COLOR_LIST
+
+ +
+
+const TYPE_INT64_LIST
+
+ +
+
+const TYPE_UINT64_LIST
+
+ +
+
+const TYPE_TAG
+
+ +
+
+const TYPE_AUTO
+
+ +
+
+function clear_vm_entity_systems()
+
+ +
+
+function register_entity_system(arg0, arg1, arg2, arg3, ...)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (table()) – autodoc from typemask/paramscheck

  • +
  • arg2 (table()) – autodoc from typemask/paramscheck

  • +
  • arg3 (table or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-4

+

typecheck mask: any_type, string, table, table, table or null

+
+ +
+
+function modify_es_list(arg0)
+
+
Arguments:
+
    +
  • arg0 (closure_and_nativeclosure()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, closure_and_nativeclosure

+
+ +
+
+function start_es_loading()
+
+ +
+
+function end_es_loading()
+
+ +
+
+g_entity_mgr = instance of EntityManager class
+

type: class_instance

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.netevent.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.netevent.html new file mode 100644 index 000000000..58413c3fa --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.netevent.html @@ -0,0 +1,319 @@ + + + + + + + ecs.netevent — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

ecs.netevent

+

module ‘ecs.netevent’

+

Source file: prog/gameLibs/ecs/scripts/sq/netsqevent.cpp

+

Usage:

+
let { server_send_net_sqevent, server_broadcast_net_sqevent, client_request_unicast_net_sqevent, client_request_broadcast_net_sqevent } = require("ecs.netevent")
+
+
+

or:

+
from "ecs.netevent" import *
+
+
+
//'ecs.netevent' exports:
+{
+  function server_send_net_sqevent(arg0, arg1, arg2, ...): integer, class_instance, array or null, any_type -> _undocumented_
+  function server_broadcast_net_sqevent(arg0, arg1, ...): class_instance, array or null, any_type -> _undocumented_
+  function client_request_unicast_net_sqevent(arg0, arg1, ...): integer, class_instance or null, any_type -> _undocumented_
+  function client_request_broadcast_net_sqevent(arg0, ...): class_instance or null, any_type -> _undocumented_
+}
+
+
+
+
+function server_send_net_sqevent(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg2 (array or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, integer, class_instance, array or null

+
+ +
+
+function server_broadcast_net_sqevent(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (array or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, class_instance, array or null

+
+ +
+
+function client_request_unicast_net_sqevent(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, integer, class_instance or null

+
+ +
+
+function client_request_broadcast_net_sqevent(arg0, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance or null()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, class_instance or null

+
+ +
+
/;

module_mgr->addNativeModule(“ecs.netevent”, exports);

+
+
+

}

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/entity_editor.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/entity_editor.html new file mode 100644 index 000000000..e5ff2b815 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/entity_editor.html @@ -0,0 +1,654 @@ + + + + + + + entity_editor — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

entity_editor

+

module ‘entity_editor’

+

Source file: prog/gameLibs/publicInclude/daEditorE/editorCommon/inGameEditor.inc.cpp

+

Usage:

+
let { DE4_MODE_CREATE_ENTITY, get_instance, get_saved_components, get_template_name_for_ui, reset_component, save_component, save_add_template, save_del_template, is_editor_activated, is_any_entity_selected, is_asset_wnd_shown, get_scene_filepath, clear_entity_save_order, add_entity_save_order_comp, clear_groups, add_group_require, add_group_variant, add_group_variext, get_ecs_tags, set_start_work_mode, get_point_action_op, get_point_action_mod, get_point_action_has_pos, get_point_action_pos, get_point_action_ext_id, get_point_action_ext_name, get_point_action_ext_mtx, get_point_action_ext_sph, get_point_action_ext_eid, gather_ri_by_sphere, get_ri_from_entity, make_cam_spawn_tm } = require("entity_editor")
+
+
+

or:

+
from "entity_editor" import *
+
+
+
//'entity_editor' exports:
+{
+  value DE4_MODE_CREATE_ENTITY
+  function get_instance()
+  function get_saved_components(arg0): integer -> _undocumented_
+  function get_template_name_for_ui(eid_int): SQInteger -> string
+  function reset_component(eid_int, comp_name): SQInteger, string -> null
+  function save_component(eid_int, comp_name): SQInteger, string -> null
+  function save_add_template(eid_int, templ_name): SQInteger, string -> null
+  function save_del_template(eid_int, templ_name): SQInteger, string -> null
+  function is_editor_activated():  -> bool
+  function is_any_entity_selected():  -> bool
+  function is_asset_wnd_shown():  -> bool
+  function get_scene_filepath()
+  function clear_entity_save_order():  -> null
+  function add_entity_save_order_comp(comp_name_start): string -> null
+  function clear_groups():  -> null
+  function add_group_require(group_name, require): string, string -> null
+  function add_group_variant(group_name, variant): string, string -> null
+  function add_group_variext(group_name, variant, tsuffix): string, string, string -> null
+  function get_ecs_tags()
+  function set_start_work_mode(mode): string -> null
+  function get_point_action_op()
+  function get_point_action_mod():  -> integer
+  function get_point_action_has_pos():  -> bool
+  function get_point_action_pos():  -> integer
+  function get_point_action_ext_id()
+  function get_point_action_ext_name()
+  function get_point_action_ext_mtx():  -> TMatrix
+  function get_point_action_ext_sph():  -> integer
+  function get_point_action_ext_eid():  -> integer
+  function gather_ri_by_sphere(arg0, arg1, arg2, arg3): float, float, float, float -> _undocumented_
+  function get_ri_from_entity(arg0): integer -> _undocumented_
+  function make_cam_spawn_tm():  -> TMatrix
+}
+
+
+
+
+DE4_MODE_CREATE_ENTITY
+
+ +
+
+function get_instance()
+
+ +
+
+function get_saved_components(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: table, integer

+
+ +
+
+function get_template_name_for_ui(eid_int)
+
+
Arguments:
+
    +
  • eid_int (SQInteger()) –

  • +
+
+
Returns:
+

string

+
+
+
+ +
+
+function reset_component(eid_int, comp_name)
+
+
Arguments:
+
    +
  • eid_int (SQInteger()) –

  • +
  • comp_name (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function save_component(eid_int, comp_name)
+
+
Arguments:
+
    +
  • eid_int (SQInteger()) –

  • +
  • comp_name (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function save_add_template(eid_int, templ_name)
+
+
Arguments:
+
    +
  • eid_int (SQInteger()) –

  • +
  • templ_name (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function save_del_template(eid_int, templ_name)
+
+
Arguments:
+
    +
  • eid_int (SQInteger()) –

  • +
  • templ_name (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function is_editor_activated()
+
+
Returns:
+

bool

+
+
+
+ +
+
+function is_any_entity_selected()
+
+
Returns:
+

bool

+
+
+
+ +
+
+function is_asset_wnd_shown()
+
+
Returns:
+

bool

+
+
+
+ +
+
+function get_scene_filepath()
+
+ +
+
+function clear_entity_save_order()
+
+
Returns:
+

null

+
+
+
+ +
+
+function add_entity_save_order_comp(comp_name_start)
+
+
Arguments:
+
    +
  • comp_name_start (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function clear_groups()
+
+
Returns:
+

null

+
+
+
+ +
+
+function add_group_require(group_name, require)
+
+
Arguments:
+
    +
  • group_name (string()) –

  • +
  • require (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function add_group_variant(group_name, variant)
+
+
Arguments:
+
    +
  • group_name (string()) –

  • +
  • variant (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function add_group_variext(group_name, variant, tsuffix)
+
+
Arguments:
+
    +
  • group_name (string()) –

  • +
  • variant (string()) –

  • +
  • tsuffix (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function get_ecs_tags()
+

nparamscheck:1

+

typecheck mask: any_type

+
+ +
+
+function set_start_work_mode(mode)
+
+
Arguments:
+
    +
  • mode (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function get_point_action_op()
+
+ +
+
+function get_point_action_mod()
+
+
Returns:
+

integer

+
+
+
+ +
+
+function get_point_action_has_pos()
+
+
Returns:
+

bool

+
+
+
+ +
+
+function get_point_action_pos()
+
+
Returns:
+

integer

+
+
+
+ +
+
+function get_point_action_ext_id()
+
+ +
+
+function get_point_action_ext_name()
+
+ +
+
+function get_point_action_ext_mtx()
+
+
Returns:
+

TMatrix

+
+
+
+ +
+
+function get_point_action_ext_sph()
+
+
Returns:
+

integer

+
+
+
+ +
+
+function get_point_action_ext_eid()
+
+
Returns:
+

integer

+
+
+
+ +
+
+function gather_ri_by_sphere(arg0, arg1, arg2, arg3)
+
+
Arguments:
+
    +
  • arg0 (float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (float()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:5

+

typecheck mask: table, float, float, float, float

+
+ +
+
+function get_ri_from_entity(arg0)
+
+
Arguments:
+
    +
  • arg0 (integer()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: table, integer

+
+ +
+
+function make_cam_spawn_tm()
+
+
Returns:
+

TMatrix

+
+
+
+ +
+
/;

module_mgr->addNativeModule(“entity_editor”, exports);

+
+
+

}

+

IDaEditor4EmbeddedComponent &get_da_editor4() { return *daEd4; } +void da_editor4_setup_scene(const char *fpath) +{

+
+

objEd_sceneFilePath = fpath; +if (objEd)

+
+

objEd->setupNewScene(fpath);

+
+
+

}

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/eventbus.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/eventbus.html new file mode 100644 index 000000000..3b65e50f6 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/eventbus.html @@ -0,0 +1,365 @@ + + + + + + + eventbus — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

eventbus

+

module ‘eventbus’

+

Source file: prog/gameLibs/quirrel/sqEventBus/sqEventBus.cpp

+

Usage:

+
let { eventbus_subscribe, eventbus_subscribe_onehit, eventbus_unsubscribe, eventbus_send, eventbus_send_foreign, eventbus_has_listeners, eventbus_has_foreign_listeners } = require("eventbus")
+
+
+

or:

+
from "eventbus" import *
+
+
+
//'eventbus' exports:
+{
+  function eventbus_subscribe(arg0, arg1, arg2, ...): string, closure_and_nativeclosure, array or string, any_type -> _undocumented_
+  function eventbus_subscribe_onehit(arg0, arg1, arg2, ...): string, closure_and_nativeclosure, array or string, any_type -> _undocumented_
+  function eventbus_unsubscribe(arg0, arg1): string, closure_and_nativeclosure -> _undocumented_
+  function eventbus_send()
+  function eventbus_send_foreign()
+  function eventbus_has_listeners()
+  function eventbus_has_foreign_listeners()
+}
+
+
+
+
+function eventbus_subscribe(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (closure_and_nativeclosure()) – autodoc from typemask/paramscheck

  • +
  • arg2 (array or string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, string, closure_and_nativeclosure, array or string

+
+ +
+
+function eventbus_subscribe_onehit(arg0, arg1, arg2, ...)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (closure_and_nativeclosure()) – autodoc from typemask/paramscheck

  • +
  • arg2 (array or string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-3

+

typecheck mask: any_type, string, closure_and_nativeclosure, array or string

+
+ +
+
+function eventbus_unsubscribe(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (closure_and_nativeclosure()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: any_type, string, closure_and_nativeclosure

+
+ +
+
+function eventbus_send()
+

nparamscheck:1

+
+ +
+
+function eventbus_send_foreign()
+

nparamscheck:1

+
+ +
+
+function eventbus_has_listeners()
+

nparamscheck:1

+
+ +
+
+function eventbus_has_foreign_listeners()
+

nparamscheck:1

+
+ +

/;

+
+

module_mgr->addNativeModule(“eventbus”, api);

+
+

}

+

void unbind(HSQUIRRELVM vm) +{

+
+

ScopedLockWriteTemplate guard(vmsLock); +G_ASSERT(!interlocked_acquire_load(is_in_send)); +vms.erase(vm);

+
+

}

+

void clear_on_reload(HSQUIRRELVM vm) +{

+
+

ScopedLockReadTemplate guard(vmsLock); +G_ASSERT(!interlocked_acquire_load(is_in_send)); +auto itVm = vms.find(vm); +if (itVm != vms.end()) +{

+
+

ScopedLockWriteTemplate handlerGuard(itVm->second.handlersLock); +itVm->second.handlers.clear();

+
+

}

+
+

}

+

void do_with_vm(const eastl::function<void(HSQUIRRELVM)> &callback) +{

+
+

ScopedLockReadTemplate guard(vmsLock); +// return any VM to allow creating script objects that will be passed to all VMs +auto it = vms.begin(); +callback(it != vms.end() ? it->first : nullptr);

+
+

}

+

void set_native_event_handler(NativeEventHandler handler) { g_native_event_handler = handler; }

+

} // namespace sqeventbus

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/executable.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/executable.html new file mode 100644 index 000000000..c498ac0de --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/executable.html @@ -0,0 +1,263 @@ + + + + + + + executable — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

executable

+

module ‘executable’

+

Source file: prog/gameLibs/quirrel/executable/executable.cpp

+

Usage:

+
let { is_exports_symbol } = require("executable")
+
+
+

or:

+
from "executable" import *
+
+
+
//'executable' exports:
+{
+  function is_exports_symbol(arg, arg): string, string -> integer
+}
+
+
+
+
+function is_exports_symbol(arg, arg)
+
+
Arguments:
+
    +
  • arg (string()) –

  • +
  • arg

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/frp.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/frp.html new file mode 100644 index 000000000..76d9d369a --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/frp.html @@ -0,0 +1,377 @@ + + + + + + + frp — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

frp

+

module ‘frp’

+

Source file: prog/gameLibs/quirrel/frp/frp.cpp

+

Usage:

+
let { Watched, Computed, FRP_INITIAL, FRP_DONT_CHECK_NESTED } = require("frp")
+
+
+

or:

+
from "frp" import *
+
+
+
//'frp' exports:
+{
+  class Watched
+  class Computed
+  const FRP_INITIAL
+  const FRP_DONT_CHECK_NESTED
+}
+
+
+
+

class Watched

+
+
+
Sqrat::DerivedClass<ScriptValueObservable, BaseObservable, Sqrat::NoCopy<ScriptValueObservable>> scriptValueObservable(vm,

“ScriptValueObservable”);

+
+
scriptValueObservable //

.SquirrelCtor(ScriptValueObservable::script_ctor, -1) +.Prop(“value”, &ScriptValueObservable::getValue) +.Func(“get”, &ScriptValueObservable::getValue) +.Prop(“timeChangeReq”, &ScriptValueObservable::getTimeChangeReq) +.Prop(“timeChanged”, &ScriptValueObservable::getTimeChanged) +.SquirrelFunc(“trigger”, &ScriptValueObservable::sqTrigger, 1, “x”) +.Func(“trace”, &ScriptValueObservable::trace) +.Func(“whiteListMutatorClosure”, &ScriptValueObservable::whiteListMutatorClosure) +.SquirrelFunc(“update”, &ScriptValueObservable::updateViaMethod, 2, “x”) +.SquirrelFunc(“set”, &ScriptValueObservable::updateViaMethod, 2, “x”) +.SquirrelFunc(“modify”, &ScriptValueObservable::modify, 2, “xc”) +.SquirrelFunc(“_call”, &ScriptValueObservable::updateViaCallMm, 3, “x”) +.SquirrelFunc(“mutate”, &ScriptValueObservable::mutate, 2, “xc”) +.SquirrelFunc(“_newslot”, &ScriptValueObservable::_newslot, 3, “x”) +.SquirrelFunc(“_delslot”, &ScriptValueObservable::_delslot, 2, “x”)

+
+
+
+

/*

+
+
+

class Computed extends Watched

+
+
+Computed()
+
+ +
+
+method Computed.update()
+
+ +
+
+method Computed.mutate()
+
+ +
+
+method Computed.set()
+
+ +
+
+method Computed.modify()
+
+ +
+
+operator Computed._call()
+
+ +
+
+operator Computed._newslot()
+
+ +
+
+operator Computed._delslot()
+
+ +
+
+property Computed.used
+

readonly

+
+ +
+
+method Computed._noComputeErrorFor()
+
+ +
+
+method Computed.getSources(arg0)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:1

+

typecheck mask: class_instance

+
+ +

/;

+
+

Sqrat::Table exports(vm); +exports.Bind(“Watched”, scriptValueObservable); +exports.Bind(“Computed”, sqComputedValue);

+
+
exports //

.SquirrelFunc(“set_nested_observable_debug”, set_nested_observable_debug, 2, “.b”) +.SquirrelFunc(“make_all_observables_immutable”, make_all_observables_immutable, 2, “.b”) +.SquirrelFunc(“set_default_deferred”, set_default_deferred, 2, “.bb”) +.SquirrelFunc(“set_recursive_sources”, set_recursive_sources, 2, “.b”) +.SquirrelFunc(“set_slow_update_threshold_usec”, set_slow_update_threshold_usec, 2, “.i”) +.SquirrelFunc(“recalc_all_computed_values”, recalc_all_computed_values, 1, “.”) +.SquirrelFunc(“gather_graph_stats”, gather_graph_stats, 1, “.”) +.SquirrelFunc(“update_deferred”, update_deferred, 1, “.”) +.SquirrelFunc(“register_stub_observable_class”, ObservablesGraph::register_stub_observable_class, 2, “.y”)

+
+
+
+

/*

+
+
+const FRP_INITIAL
+
+ +
+
+const FRP_DONT_CHECK_NESTED
+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/hash.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/hash.html new file mode 100644 index 000000000..0c89405a2 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/hash.html @@ -0,0 +1,316 @@ + + + + + + + hash — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

hash

+

module ‘hash’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/hash.cpp

+

Usage:

+
let { md5, sha1, crc32, crc32_int } = require("hash")
+
+
+

or:

+
from "hash" import *
+
+
+
//'hash' exports:
+{
+  function md5(arg0): string -> _undocumented_
+  function sha1(arg0): string -> _undocumented_
+  function crc32(arg0, arg1, ...): string, integer, any_type -> _undocumented_
+  function crc32_int(arg0, arg1, ...): string, integer, any_type -> _undocumented_
+}
+
+
+
+
+function md5(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+function sha1(arg0)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+ +
+
+function crc32(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, string, integer

+
+ +
+
+function crc32_int(arg0, arg1, ...)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, string, integer

+
+ +

/;

+
+

module_mgr->addNativeModule(“hash”, exports);

+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/index.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/index.html new file mode 100644 index 000000000..5d74d3b5b --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/index.html @@ -0,0 +1,355 @@ + + + + + + + Quirrel Gamelibs Native Modules — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Quirrel Gamelibs Native Modules

+

Docs for Quirrel modules extracted from source in gameLibs

+

Contents:

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/json.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/json.html new file mode 100644 index 000000000..3d93f6ee0 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/json.html @@ -0,0 +1,327 @@ + + + + + + + json — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

json

+

module ‘json’

+

Source file: prog/gameLibs/quirrel/quirrel_json/quirrel_json.cpp

+

Usage:

+
let { parse_json, parse_json_from_zstd_stream, object_to_json_string, object_to_zstd_json } = require("json")
+
+
+

or:

+
from "json" import *
+
+
+
//'json' exports:
+{
+  function parse_json(string): string -> null|string|integer_or_float|table|array
+  function parse_json_from_zstd_stream(blob): string -> null|string|integer_or_float|table|array
+  function object_to_json_string(object): null|string|integer_or_float|table|array|bool -> bool
+  function object_to_zstd_json(arg0, ...): any_type, any_type -> _undocumented_
+}
+
+
+
+
+function parse_json(string)
+
+
Arguments:
+
    +
  • string (string()) – string that would be parsed to json

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string

+
+
Returns:
+

quirrel object

+
+
Return type:
+

null|string|integer_or_float|table|array

+
+
+
+ +
+
+function parse_json_from_zstd_stream(blob)
+
+
Arguments:
+
    +
  • blob (string()) – blob with ztsd stream that would be parsed to json

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, class_instance

+
+
Returns:
+

quirrel object

+
+
Return type:
+

null|string|integer_or_float|table|array

+
+
+
+ +
+
+function object_to_json_string(object)
+
+
Arguments:
+
    +
  • object (null|string|integer_or_float|table|array|bool()) – object that will be converted to json

  • +
+
+
Returns:
+

blob with compressed json string

+
+
Return type:
+

bool

+
+
+
+ +
+
+function object_to_zstd_json(arg0, ...)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, any_type

+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/jwt.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/jwt.html new file mode 100644 index 000000000..f90c1bc7f --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/jwt.html @@ -0,0 +1,282 @@ + + + + + + + jwt — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

jwt

+

module ‘jwt’

+

Source file: prog/gameLibs/quirrel/sqJwt/sqJwt.cpp

+

Usage:

+
let { decode } = require("jwt")
+
+
+

or:

+
from "jwt" import *
+
+
+
//'jwt' exports:
+{
+  function decode(jwt_string, key): string, string -> table
+}
+
+
+
+
+function decode(jwt_string, key)
+
+
Arguments:
+
    +
  • jwt_string (string()) –

  • +
  • key (string()) –

  • +
+
+
+

nparamscheck:3

+

typecheck mask: any_type, string, string

+
+
Returns:
+

return decoded jwt table with {header=<json_value>, payload=<jsonvalue>} or {error=string}

+
+
Return type:
+

table

+

Error can be one of following:

+
"OK",
+"INVALID_TOKEN",
+"WRONG_HEADER",
+"INVALID_TOKEN_TYPE",
+"INVALID_TOKEN_SIGNATURE_ALGORITHM",
+"INVALID_PAYLOAD_COMPRESSION",
+"WRONG_PAYLOAD",
+"SIGNATURE_VERIFICATION_FAILED"
+
+
+

+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/modules.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/modules.html new file mode 100644 index 000000000..f98a420b2 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/modules.html @@ -0,0 +1,265 @@ + + + + + + + modules — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

modules

+

module ‘modules’

+

Source file: prog/gameLibs/quirrel/sqModules/sqModules.cpp

+

Usage:

+
let { get_native_module_names, on_module_unload } = require("modules")
+
+
+

or:

+
from "modules" import *
+
+
+
//'modules' exports:
+{
+  function get_native_module_names():  -> list
+  function on_module_unload()
+}
+
+
+
+
+function get_native_module_names()
+
+
Returns:
+

list

+
+
+
+ +
+
+function on_module_unload()
+

nparamscheck:1

+
+ +

register modules unload callback

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/nestdb.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/nestdb.html new file mode 100644 index 000000000..bae9a69c1 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/nestdb.html @@ -0,0 +1,328 @@ + + + + + + + nestdb — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

nestdb

+

module ‘nestdb’

+

Source file: prog/gameLibs/quirrel/nestdb/nestdb.cpp

+

Usage:

+
let { ndbWrite, ndbRead, ndbTryRead, ndbExists, ndbDelete } = require("nestdb")
+
+
+

or:

+
from "nestdb" import *
+
+
+
//'nestdb' exports:
+{
+  function ndbWrite(arg0, arg1): string or array, any_type -> _undocumented_
+  function ndbRead(arg0): string or array -> _undocumented_
+  function ndbTryRead(arg0): string or array -> _undocumented_
+  function ndbExists(arg0): string or array -> _undocumented_
+  function ndbDelete(arg0): string or array -> _undocumented_
+}
+
+
+
+
+function ndbWrite(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (string or array()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: any_type, string or array, any_type

+
+ +
+
+function ndbRead(arg0)
+
+
Arguments:
+
    +
  • arg0 (string or array()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string or array

+
+ +
+
+function ndbTryRead(arg0)
+
+
Arguments:
+
    +
  • arg0 (string or array()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string or array

+
+ +
+
+function ndbExists(arg0)
+
+
Arguments:
+
    +
  • arg0 (string or array()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string or array

+
+ +
+
+function ndbDelete(arg0)
+
+
Arguments:
+
    +
  • arg0 (string or array()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:2

+

typecheck mask: any_type, string or array

+
+ +
+
/;

module_mgr->addNativeModule(“nestdb”, exports);

+
+
+

}

+

} // namespace nestdb

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/net.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/net.html new file mode 100644 index 000000000..e440648d1 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/net.html @@ -0,0 +1,294 @@ + + + + + + + net — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

net

+

module ‘net’

+

Source file: prog/gameLibs/ecs/scripts/sq/netBindSq.cpp

+

Usage:

+
let { is_server, has_network, get_replay_proto_version, INVALID_CONNECTION_ID } = require("net")
+
+
+

or:

+
from "net" import *
+
+
+
//'net' exports:
+{
+  function is_server()
+  function has_network()
+  function get_replay_proto_version()
+  value INVALID_CONNECTION_ID
+}
+
+
+
+
+function is_server()
+
+ +
+
+function has_network()
+
+ +
+
+function get_replay_proto_version()
+
+ +
+
+INVALID_CONNECTION_ID
+
+ +

/; +#define DC(x) tbl.SetValue(#x, x);

+
+

DANET_DEFINE_DISCONNECTION_CAUSES

+
+

#undef DC

+
+

ecs::sq::EventsBind<

+
+
+
#define NET_ECS_EVENT(e, …) e,

NET_ECS_EVENTS

+
+
#undef NET_ECS_EVENT
+

ecs::sq::term_event_t>::bindall(tbl);

+
+
+
if (!existingModule)

module_mgr->addNativeModule(“net”, tbl);

+
+
+
+
+

}

+

} // namespace sq

+

} // namespace ecs

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/pathfinder.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/pathfinder.html new file mode 100644 index 000000000..98b805e65 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/pathfinder.html @@ -0,0 +1,360 @@ + + + + + + + pathfinder — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

pathfinder

+

module ‘pathfinder’

+

Source file: prog/gameLibs/quirrel/sqPathFinder/sqPathFinder.cpp

+

Usage:

+
let { project_to_nearest_navmesh_point, project_to_nearest_navmesh_point_no_obstacles, check_path, find_path, traceray_navmesh, POLYFLAG_GROUND, POLYFLAG_OBSTACLE, POLYFLAG_LADDER, POLYFLAG_JUMP, POLYFLAG_BLOCKED } = require("pathfinder")
+
+
+

or:

+
from "pathfinder" import *
+
+
+
//'pathfinder' exports:
+{
+  function project_to_nearest_navmesh_point(&wish_pos, horz_extents): integer, float -> integer
+  function project_to_nearest_navmesh_point_no_obstacles(&wish_pos, &horz_extents): integer, integer -> integer
+  function check_path()
+  function find_path(arg0, arg1, arg2, arg3, arg4, ...): class_instance, class_instance, float, float, float, any_type -> _undocumented_
+  function traceray_navmesh(&start_pos, &end_pos, dist_to_path): integer, integer, float -> integer
+  value POLYFLAG_GROUND
+  value POLYFLAG_OBSTACLE
+  value POLYFLAG_LADDER
+  value POLYFLAG_JUMP
+  value POLYFLAG_BLOCKED
+}
+
+
+
+
+function project_to_nearest_navmesh_point(&wish_pos, horz_extents)
+
+
Arguments:
+
    +
  • &wish_pos (integer()) –

  • +
  • horz_extents (float()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function project_to_nearest_navmesh_point_no_obstacles(&wish_pos, &horz_extents)
+
+
Arguments:
+
    +
  • &wish_pos (integer()) –

  • +
  • &horz_extents (integer()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function check_path()
+
+ +
+
+function find_path(arg0, arg1, arg2, arg3, arg4, ...)
+
+
Arguments:
+
    +
  • arg0 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg1 (class_instance()) – autodoc from typemask/paramscheck

  • +
  • arg2 (float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (float()) – autodoc from typemask/paramscheck

  • +
  • arg4 (float()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-5

+

typecheck mask: any_type, class_instance, class_instance, float, float, float

+
+ +
+
+function traceray_navmesh(&start_pos, &end_pos, dist_to_path)
+
+
Arguments:
+
    +
  • &start_pos (integer()) –

  • +
  • &end_pos (integer()) –

  • +
  • dist_to_path (float()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+POLYFLAG_GROUND
+
+ +
+
+POLYFLAG_OBSTACLE
+
+ +
+
+POLYFLAG_LADDER
+
+ +
+
+POLYFLAG_JUMP
+
+ +
+
+POLYFLAG_BLOCKED
+
+ +

/;

+
+

module_mgr->addNativeModule(“pathfinder”, nsTbl);

+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/platform.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/platform.html new file mode 100644 index 000000000..5b3ca4b70 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/platform.html @@ -0,0 +1,392 @@ + + + + + + + platform — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

platform

+

module ‘platform’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/platformMisc.cpp

+

Usage:

+
let { get_locale_lang, get_locale_country, get_platform_string_id, get_console_model, get_console_model_revision, get_default_lang, is_gdk_used, UNKNOWN, PS4, PS4_PRO, XBOXONE, XBOXONE_S, XBOXONE_X, XBOX_LOCKHART, XBOX_ANACONDA, PS5, PS5_PRO, NINTENDO_SWITCH } = require("platform")
+
+
+

or:

+
from "platform" import *
+
+
+
//'platform' exports:
+{
+  function get_locale_lang()
+  function get_locale_country()
+  function get_platform_string_id()
+  function get_console_model():  -> integer
+  function get_console_model_revision()
+  function get_default_lang()
+  function is_gdk_used():  -> bool
+  const UNKNOWN
+  const PS4
+  const PS4_PRO
+  const XBOXONE
+  const XBOXONE_S
+  const XBOXONE_X
+  const XBOX_LOCKHART
+  const XBOX_ANACONDA
+  const PS5
+  const PS5_PRO
+  const NINTENDO_SWITCH
+}
+
+
+
+
+function get_locale_lang()
+

nparamscheck:1

+

typecheck mask: any_type

+
+ +
+
+function get_locale_country()
+

nparamscheck:1

+

typecheck mask: any_type

+
+ +
+
+function get_platform_string_id()
+
+ +
+
+function get_console_model()
+
+
Returns:
+

integer

+
+
+
+ +
+
+function get_console_model_revision()
+
+ +
+
+function get_default_lang()
+
+ +
+
+function is_gdk_used()
+
+
Returns:
+

bool

+
+
+
+ +

/; +#define SET_CONST(n) tbl.SetValue(#n, SQInteger((int)ConsoleModel::n));

+
+
+const UNKNOWN
+

SET_CONST(UNKNOWN)

+
+ +
+
+const PS4
+

SET_CONST(PS4)

+
+ +
+
+const PS4_PRO
+

SET_CONST(PS4_PRO)

+
+ +
+
+const XBOXONE
+

SET_CONST(XBOXONE)

+
+ +
+
+const XBOXONE_S
+

SET_CONST(XBOXONE_S)

+
+ +
+
+const XBOXONE_X
+

SET_CONST(XBOXONE_X)

+
+ +
+
+const XBOX_LOCKHART
+

SET_CONST(XBOX_LOCKHART)

+
+ +
+
+const XBOX_ANACONDA
+

SET_CONST(XBOX_ANACONDA)

+
+ +
+
+const PS5
+

SET_CONST(PS5)

+
+ +
+
+const PS5_PRO
+

SET_CONST(PS5_PRO)

+
+ +
+
+const NINTENDO_SWITCH
+

SET_CONST(NINTENDO_SWITCH)

+
+ +
+
#undef SET_CONST

return tbl;

+
+
+

}

+

void bindquirrel::register_platform_module(SqModules *module_mgr) +{

+
+

module_mgr->addNativeModule(“platform”, make_platform_exports(module_mgr->getVM()));

+
+

}

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/regexp2.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/regexp2.html new file mode 100644 index 000000000..7a52540ec --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/regexp2.html @@ -0,0 +1,309 @@ + + + + + + + regexp2 — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

regexp2

+

module ‘regexp2’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/bindSqrat.cpp

+

Usage:

+
let regexp2 = require("regexp2")
+
+
+

or:

+
from "regexp2" import *
+
+
+
//'regexp2' exports:
+class regexp2
+
+
+
+

class regexp2

+
+
+regexp2(regexp_string)
+
+
Arguments:
+
    +
  • regexp_string (string()) –

  • +
+
+
+
+ +
+
+method regexp2.match()
+
+ +
+
+method regexp2.fullmatch()
+
+ +
+
+method regexp2.replace()
+
+ +
+
+method regexp2.multiExtract(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg1 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+
+ +
+
+method regexp2.pattern()
+
+ +

/;

+
+

module_mgr->addNativeModule(“regexp2”, Sqrat::Object(regexp2.GetObject(), vm));

+
+

}

+

void register_utf8(SqModules *module_mgr) +{

+
+

HSQUIRRELVM vm = module_mgr->getVM(); +Sqrat::Class<Utf8> utf8(vm, “utf8”);

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/renderCanvas.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/renderCanvas.html new file mode 100644 index 000000000..53d607ed4 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/renderCanvas.html @@ -0,0 +1,373 @@ + + + + + + + renderCanvas — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

renderCanvas

+
+

for render canvas

+
+

Source file: prog/gameLibs/daRg/canvasDraw.cpp

+

use it to draw in canvas

+
+
+function line(arg0, arg1, arg2)
+
+
Arguments:
+
    +
  • arg0 (array()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:4

+

typecheck mask: userdata, array, integer_or_float, any_type

+
+ +

function comment

+
+
+function line_dashed(arg0, arg1, arg2, arg3, arg4)
+
+
Arguments:
+
    +
  • arg0 (array()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg4 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:6

+

typecheck mask: userdata, array, integer_or_float, integer_or_float, integer_or_float, any_type

+
+ +
+
+function fill_poly(arg0, arg1, arg2, arg3)
+
+
Arguments:
+
    +
  • arg0 (array()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg3 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:5

+

typecheck mask: userdata, array, integer_or_float, any_type, any_type

+
+ +
+
+function fill_inverse_poly(arg0, arg1, arg2, arg3)
+
+
Arguments:
+
    +
  • arg0 (array()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg3 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:5

+

typecheck mask: userdata, array, integer_or_float, any_type, any_type

+
+ +
+
+function ellipse(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg4 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg5 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg6 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg7 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:9

+

typecheck mask: userdata, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type, any_type, any_type

+
+ +
+
+function sector(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg4 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg5 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg6 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg7 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg8 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg9 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:11

+

typecheck mask: userdata, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type, any_type, any_type

+
+ +
+
+function rect(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
+
+
Arguments:
+
    +
  • arg0 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg1 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg2 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg3 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg4 (integer_or_float()) – autodoc from typemask/paramscheck

  • +
  • arg5 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg6 (any_type()) – autodoc from typemask/paramscheck

  • +
  • arg7 (any_type()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:9

+

typecheck mask: userdata, integer_or_float, integer_or_float, integer_or_float, integer_or_float, integer_or_float, any_type, any_type, any_type

+
+ +

/; +}

+

} // namespace darg

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sound.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sound.html new file mode 100644 index 000000000..e58a97adb --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sound.html @@ -0,0 +1,737 @@ + + + + + + + sound — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

sound

+

module ‘sound’

+

Source file: prog/gameLibs/soundSystem/quirrel/soundSystemSq.cpp

+

Usage:

+
let { INVALID_SOUND_HANDLE, SOUND_STREAM_ERROR, SOUND_STREAM_CLOSED, SOUND_STREAM_OPENED, SOUND_STREAM_CONNECTING, SOUND_STREAM_BUFFERING, SOUND_STREAM_STOPPED, SOUND_STREAM_PAUSED, SOUND_STREAM_PLAYING, sound_debug_trace, sound_play_one_shot_3d, sound_play_one_shot, sound_release_all_instances, sound_play, sound_set_volume, sound_init_event, sound_release_event, sound_set_3d_attr, sound_set_var, sound_get_length, sound_set_timeline_pos, sound_get_timeline_pos, sound_start, sound_keyoff, sound_abandon, sound_is_playing, sound_init_stream, sound_open_stream, sound_close_stream, sound_set_stream_pos, sound_release_stream, sound_get_stream_state, sound_get_stream_state_name, sound_get_output_devices, sound_get_record_devices, sound_set_output_device, sound_set_callbacks } = require("sound")
+
+
+

or:

+
from "sound" import *
+
+
+
//'sound' exports:
+{
+  value INVALID_SOUND_HANDLE
+  value SOUND_STREAM_ERROR
+  value SOUND_STREAM_CLOSED
+  value SOUND_STREAM_OPENED
+  value SOUND_STREAM_CONNECTING
+  value SOUND_STREAM_BUFFERING
+  value SOUND_STREAM_STOPPED
+  value SOUND_STREAM_PAUSED
+  value SOUND_STREAM_PLAYING
+  function sound_debug_trace(text): string -> null
+  function sound_play_one_shot_3d(name, &pos): string, integer -> null
+  function sound_play_one_shot(name): string -> null
+  function sound_release_all_instances(name): string -> null
+  function sound_play(arg0, ...): string, any_type -> _undocumented_
+  function sound_set_volume(snd, volume): string, float -> null
+  function sound_init_event(name, path): string, string -> sound_handle_t
+  function sound_release_event(event_handle): sndsys::sound_handle_t -> null
+  function sound_set_3d_attr(event_handle, &pos): sndsys::sound_handle_t, integer -> null
+  function sound_set_var(event_handle, var_name, value): sndsys::sound_handle_t, string, float -> null
+  function sound_get_length(name): string -> integer
+  function sound_set_timeline_pos(event_handle, position): sndsys::sound_handle_t, integer -> null
+  function sound_get_timeline_pos(event_handle): sndsys::sound_handle_t -> integer
+  function sound_start(event_handle): sndsys::sound_handle_t -> null
+  function sound_keyoff(event_handle): sndsys::sound_handle_t -> bool
+  function sound_abandon(event_handle, delay): sndsys::sound_handle_t, float -> null
+  function sound_is_playing(event_handle): sndsys::sound_handle_t -> bool
+  function sound_init_stream(url, &min_max_distance): string, integer -> sound_handle_t
+  function sound_open_stream(stream_handle): sndsys::sound_handle_t -> null
+  function sound_close_stream(stream_handle): sndsys::sound_handle_t -> null
+  function sound_set_stream_pos(stream_handle, &pos): sndsys::sound_handle_t, integer -> null
+  function sound_release_stream(stream_handle): sndsys::sound_handle_t -> null
+  function sound_get_stream_state(stream_handle): sndsys::sound_handle_t -> StreamState
+  function sound_get_stream_state_name()
+  function sound_get_output_devices()
+  function sound_get_record_devices()
+  function sound_set_output_device(dev_id): integer -> null
+  function sound_set_callbacks(callbacks_): sqObject -> null
+}
+
+
+
+
+INVALID_SOUND_HANDLE
+
+ +
+
+SOUND_STREAM_ERROR
+
+ +
+
+SOUND_STREAM_CLOSED
+
+ +
+
+SOUND_STREAM_OPENED
+
+ +
+
+SOUND_STREAM_CONNECTING
+
+ +
+
+SOUND_STREAM_BUFFERING
+
+ +
+
+SOUND_STREAM_STOPPED
+
+ +
+
+SOUND_STREAM_PAUSED
+
+ +
+
+SOUND_STREAM_PLAYING
+
+ +
+
+function sound_debug_trace(text)
+
+
Arguments:
+
    +
  • text (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_play_one_shot_3d(name, &pos)
+
+
Arguments:
+
    +
  • name (string()) –

  • +
  • &pos (integer()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_play_one_shot(name)
+
+
Arguments:
+
    +
  • name (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_release_all_instances(name)
+
+
Arguments:
+
    +
  • name (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_play(arg0, ...)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, string

+
+ +
+
+function sound_set_volume(snd, volume)
+
+
Arguments:
+
    +
  • snd (string()) –

  • +
  • volume (float()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_init_event(name, path)
+
+
Arguments:
+
    +
  • name (string()) –

  • +
  • path (string()) –

  • +
+
+
Returns:
+

sound_handle_t

+
+
+
+ +
+
+function sound_release_event(event_handle)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_set_3d_attr(event_handle, &pos)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
  • &pos (integer()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_set_var(event_handle, var_name, value)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
  • var_name (string()) –

  • +
  • value (float()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_get_length(name)
+
+
Arguments:
+
    +
  • name (string()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function sound_set_timeline_pos(event_handle, position)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
  • position (integer()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_get_timeline_pos(event_handle)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function sound_start(event_handle)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_keyoff(event_handle)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function sound_abandon(event_handle, delay)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
  • delay (float()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_is_playing(event_handle)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function sound_init_stream(url, &min_max_distance)
+
+
Arguments:
+
    +
  • url (string()) –

  • +
  • &min_max_distance (integer()) –

  • +
+
+
Returns:
+

sound_handle_t

+
+
+
+ +
+
+function sound_open_stream(stream_handle)
+
+
Arguments:
+
    +
  • stream_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_close_stream(stream_handle)
+
+
Arguments:
+
    +
  • stream_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_set_stream_pos(stream_handle, &pos)
+
+
Arguments:
+
    +
  • stream_handle (sndsys::sound_handle_t()) –

  • +
  • &pos (integer()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_release_stream(stream_handle)
+
+
Arguments:
+
    +
  • stream_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_get_stream_state(stream_handle)
+
+
Arguments:
+
    +
  • stream_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

StreamState

+
+
+
+ +
+
+function sound_get_stream_state_name()
+
+ +
+
+function sound_get_output_devices()
+

nparamscheck:1

+

typecheck mask: any_type

+
+ +
+
+function sound_get_record_devices()
+

nparamscheck:1

+

typecheck mask: any_type

+
+ +
+
+function sound_set_output_device(dev_id)
+
+
Arguments:
+
    +
  • dev_id (integer()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_set_callbacks(callbacks_)
+
+
Arguments:
+
    +
  • callbacks (sqObject()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +

/;

+
+

return soundTbl;

+
+

}

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/statsd.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/statsd.html new file mode 100644 index 000000000..234a229ba --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/statsd.html @@ -0,0 +1,336 @@ + + + + + + + statsd — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

statsd

+

module ‘statsd’

+

Source file: prog/gameLibs/quirrel/sqStatsd/sqStatsd.cpp

+

Usage:

+
let { send_counter, send_gauge, send_gauge_dec, send_gauge_inc, send_profile, send_histogram } = require("statsd")
+
+
+

or:

+
from "statsd" import *
+
+
+
//'statsd' exports:
+{
+  function send_counter(metric_name, value, tags = {}): string, integer, table -> _undocumented_
+  function send_gauge(metric_name, value, tags = {}): string, integer, table -> _undocumented_
+  function send_gauge_dec(metric_name, value, tags = {}): string, integer, table -> _undocumented_
+  function send_gauge_inc(metric_name, value, tags = {}): string, float, table -> _undocumented_
+  function send_profile(metric_name, value, tags = {}): string, integer, table -> _undocumented_
+  function send_histogram(metric_name, value, tags = {}): string, integer, table -> _undocumented_
+}
+
+
+
+
+function send_counter(metric_name, value, tags = {})
+
+
Arguments:
+
    +
  • metric_name (string()) –

  • +
  • value (integer()) –

  • +
  • tags (table()) – tags for metrics

  • +
+
+
+
+ +
+
+function send_gauge(metric_name, value, tags = {})
+
+
Arguments:
+
    +
  • metric_name (string()) –

  • +
  • value (integer()) –

  • +
  • tags (table()) – tags for metrics

  • +
+
+
+
+ +
+
+function send_gauge_dec(metric_name, value, tags = {})
+
+
Arguments:
+
    +
  • metric_name (string()) –

  • +
  • value (integer()) –

  • +
  • tags (table()) – tags for metrics

  • +
+
+
+
+ +
+
+function send_gauge_inc(metric_name, value, tags = {})
+
+
Arguments:
+
    +
  • metric_name (string()) –

  • +
  • value (float()) –

  • +
  • tags (table()) – tags for metrics

  • +
+
+
+
+ +
+
+function send_profile(metric_name, value, tags = {})
+
+
Arguments:
+
    +
  • metric_name (string()) –

  • +
  • value (integer()) –

  • +
  • tags (table()) – tags for metrics

  • +
+
+
+
+ +
+
+function send_histogram(metric_name, value, tags = {})
+
+
Arguments:
+
    +
  • metric_name (string()) –

  • +
  • value (integer()) –

  • +
  • tags (table()) – tags for metrics

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sysinfo.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sysinfo.html new file mode 100644 index 000000000..8bc1c0181 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sysinfo.html @@ -0,0 +1,392 @@ + + + + + + + sysinfo — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

sysinfo

+

module ‘sysinfo’

+

Source file: prog/gameLibs/quirrel/sqSysInfo/sqSysInfo.cpp

+

Usage:

+
let { get_user_system_info, inline_raytracing_available, get_battery, is_charging, get_thermal_state, get_battery_capacity_mah, get_network_connection_type, TS_NORMAL, TS_LIGHT, TS_MODERATE, TS_SEVERE, TS_CRITICAL, TS_EMERGENCY, TS_SHUTDOWN } = require("sysinfo")
+
+
+

or:

+
from "sysinfo" import *
+
+
+
//'sysinfo' exports:
+{
+  function get_user_system_info():  -> DataBlock
+  function inline_raytracing_available():  -> bool
+  function get_battery():  -> float
+  function is_charging():  -> bool
+  function get_thermal_state():  -> int
+  function get_battery_capacity_mah():  -> int
+  function get_network_connection_type():  -> int
+  value TS_NORMAL
+  value TS_LIGHT
+  value TS_MODERATE
+  value TS_SEVERE
+  value TS_CRITICAL
+  value TS_EMERGENCY
+  value TS_SHUTDOWN
+}
+
+
+
+
+function get_user_system_info()
+
+
Returns:
+

datablock of user system info

+
+
Return type:
+

DataBlock

+
+
+
+ +
+
+function inline_raytracing_available()
+
+
Returns:
+

returns true if inline raytracing is available on device, otherwise false

+
+
Return type:
+

bool

+
+
+
+ +
+
+function get_battery()
+
+
Returns:
+

return battery level from 0.0 to 1.0. When battery level unknown return -1.0

+
+
Return type:
+

float

+
+
+
+ +
+
+function is_charging()
+
+
Returns:
+

return “is battery charging”

+
+
Return type:
+

bool

+
+
+
+ +
+
+function get_thermal_state()
+
+
Returns:
+

return capacity of battery or -1 if it is unavailable

+
+
Return type:
+

int

+
+
+
+ +
+
+function get_battery_capacity_mah()
+
+
Returns:
+

-1 – Unknown, 0 – Not connected, 1 – Cellular, 2 – Wi-Fi

+
+
Return type:
+

int

+
+
+
+ +
+
+function get_network_connection_type()
+
+
Returns:
+

return thermal state. from TS_NORMAL to TS_SHUTDOWN

+
+
Return type:
+

int

+
+
+
+ +
+
+TS_NORMAL
+
+ +
+
+TS_LIGHT
+
+ +
+
+TS_MODERATE
+
+ +
+
+TS_SEVERE
+
+ +
+
+TS_CRITICAL
+
+ +
+
+TS_EMERGENCY
+
+ +
+
+TS_SHUTDOWN
+
+ +

/;

+
+

module_mgr->addNativeModule(“sysinfo”, nsTbl);

+
+

} +} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/utf8.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/utf8.html new file mode 100644 index 000000000..dca7dad0f --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/utf8.html @@ -0,0 +1,264 @@ + + + + + + + utf8 — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

utf8

+

module ‘utf8’

+

Source file: prog/gameLibs/quirrel/bindQuirrelEx/bindSqrat.cpp

+

Usage:

+
let utf8 = require("utf8")
+
+
+

or:

+
from "utf8" import *
+
+
+
//'utf8' exports:
+class utf8
+
+
+
+

class utf8

+
+
+
utf8 //

.Ctor<const char *>()

+

.Func(“_tostring”, &Utf8::str) +.Func(“str”, &Utf8::str) +.Func(“charCount”, &Utf8::charCount) +.Func(“strtr”, &Utf8::strtr) +.SquirrelFunc(“slice”, utf8_slice, -2, nullptr) +.SquirrelFunc(“indexof”, utf8_indexof, -2, nullptr)

+
+
+
+

/*

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/win.registry.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/win.registry.html new file mode 100644 index 000000000..00af2e7e8 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/win.registry.html @@ -0,0 +1,415 @@ + + + + + + + win.registry — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

win.registry

+

module ‘win.registry’

+

Source file: prog/gameLibs/quirrel/win_registry/win_registry.cpp

+

Usage:

+
let { regKeyExists, regValueExists, getRegString, getRegInt, deleteRegKey, deleteRegValue, setRegString, setRegInt, HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS } = require("win.registry")
+
+
+

or:

+
from "win.registry" import *
+
+
+
//'win.registry' exports:
+{
+  function regKeyExists(root, path): integer, string -> bool
+  function regValueExists(root, path, name): integer, string, string -> bool
+  function getRegString()
+  function getRegInt(root, path, name, def): integer, string, string, integer -> integer
+  function deleteRegKey(root, path): integer, string -> bool
+  function deleteRegValue(root, path, name): integer, string, string -> bool
+  function setRegString(root, path, name, val): integer, string, string, string -> bool
+  function setRegInt(root, path, name, val): integer, string, string, integer -> bool
+  value HKEY_CLASSES_ROOT
+  value HKEY_CURRENT_CONFIG
+  value HKEY_CURRENT_USER
+  value HKEY_LOCAL_MACHINE
+  value HKEY_USERS
+}
+
+
+
+
+function regKeyExists(root, path)
+
+
Arguments:
+
    +
  • root (integer()) –

  • +
  • path (string()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function regValueExists(root, path, name)
+
+
Arguments:
+
    +
  • root (integer()) –

  • +
  • path (string()) –

  • +
  • name (string()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function getRegString()
+
+ +
+
+function getRegInt(root, path, name, def)
+
+
Arguments:
+
    +
  • root (integer()) –

  • +
  • path (string()) –

  • +
  • name (string()) –

  • +
  • def (integer()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function deleteRegKey(root, path)
+
+
Arguments:
+
    +
  • root (integer()) –

  • +
  • path (string()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function deleteRegValue(root, path, name)
+
+
Arguments:
+
    +
  • root (integer()) –

  • +
  • path (string()) –

  • +
  • name (string()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function setRegString(root, path, name, val)
+
+
Arguments:
+
    +
  • root (integer()) –

  • +
  • path (string()) –

  • +
  • name (string()) –

  • +
  • val (string()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function setRegInt(root, path, name, val)
+
+
Arguments:
+
    +
  • root (integer()) –

  • +
  • path (string()) –

  • +
  • name (string()) –

  • +
  • val (integer()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+HKEY_CLASSES_ROOT
+
+ +
+
+HKEY_CURRENT_CONFIG
+
+ +
+
+HKEY_CURRENT_USER
+
+ +
+
+HKEY_LOCAL_MACHINE
+
+ +
+
+HKEY_USERS
+
+ +

/;

+
+

module_mgr->addNativeModule(“win.registry”, win_registry);

+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/yupfile_parse.html b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/yupfile_parse.html new file mode 100644 index 000000000..a37146a2b --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/yupfile_parse.html @@ -0,0 +1,284 @@ + + + + + + + yupfile_parse — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

yupfile_parse

+

module ‘yupfile_parse’

+

Source file: prog/gameLibs/quirrel/yupfile_parse/yupfile_parse.cpp

+

Usage:

+
let { getStr, getInt } = require("yupfile_parse")
+
+
+

or:

+
from "yupfile_parse" import *
+
+
+
//'yupfile_parse' exports:
+{
+  function getStr(arg0, arg1): string, string -> _undocumented_
+  function getInt(arg0, arg1): string, string -> _undocumented_
+}
+
+
+
+
+function getStr(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: any_type, string, string

+
+ +
+
+function getInt(arg0, arg1)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • arg1 (string()) – autodoc from typemask/paramscheck

  • +
+
+
+

nparamscheck:3

+

typecheck mask: any_type, string, string

+
+ +
+
/;

module_mgr->addNativeModule(“yupfile_parse”, exports);

+
+
+

}

+

} // namespace bindquirrel

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/soundSystem/index.html b/api-references/quirrel-modules/quirrel-modules/soundSystem/index.html new file mode 100644 index 000000000..8f3bffe11 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/soundSystem/index.html @@ -0,0 +1,187 @@ + + + + + + + soundSystem — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

soundSystem

+

Docs for soundSystem Quirrel Modules. DaNetGameLibs can be used in any daNetGame based project

+

Contents:

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api-references/quirrel-modules/quirrel-modules/soundSystem/sound.html b/api-references/quirrel-modules/quirrel-modules/soundSystem/sound.html new file mode 100644 index 000000000..f0d882e40 --- /dev/null +++ b/api-references/quirrel-modules/quirrel-modules/soundSystem/sound.html @@ -0,0 +1,687 @@ + + + + + + + sound — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

sound

+

module ‘sound’

+

Source file: prog/gameLibs/soundSystem/quirrel/soundSystemSq.cpp

+

Usage:

+
let { INVALID_SOUND_HANDLE, SOUND_STREAM_ERROR, SOUND_STREAM_CLOSED, SOUND_STREAM_OPENED, SOUND_STREAM_CONNECTING, SOUND_STREAM_BUFFERING, SOUND_STREAM_STOPPED, SOUND_STREAM_PAUSED, SOUND_STREAM_PLAYING, sound_debug_trace, sound_play_one_shot_3d, sound_play_one_shot, sound_release_all_instances, sound_play, sound_set_volume, sound_init_event, sound_release_event, sound_set_3d_attr, sound_set_var, sound_get_length, sound_set_timeline_pos, sound_get_timeline_pos, sound_start, sound_keyoff, sound_abandon, sound_is_playing, sound_init_stream, sound_open_stream, sound_close_stream, sound_set_stream_pos, sound_release_stream, sound_get_stream_state, sound_get_stream_state_name, sound_get_output_devices, sound_get_record_devices, sound_set_output_device, sound_set_callbacks } = require("sound")
+
+
+

or:

+
from "sound" import *
+
+
+
//'sound' exports:
+{
+  value INVALID_SOUND_HANDLE
+  value SOUND_STREAM_ERROR
+  value SOUND_STREAM_CLOSED
+  value SOUND_STREAM_OPENED
+  value SOUND_STREAM_CONNECTING
+  value SOUND_STREAM_BUFFERING
+  value SOUND_STREAM_STOPPED
+  value SOUND_STREAM_PAUSED
+  value SOUND_STREAM_PLAYING
+  function sound_debug_trace(text): string -> null
+  function sound_play_one_shot_3d(name, &pos): string, integer -> null
+  function sound_play_one_shot(name): string -> null
+  function sound_release_all_instances(name): string -> null
+  function sound_play(arg0, ...): string, any_type -> _undocumented_
+  function sound_set_volume(snd, volume): string, float -> null
+  function sound_init_event(name, path): string, string -> sound_handle_t
+  function sound_release_event(event_handle): sndsys::sound_handle_t -> null
+  function sound_set_3d_attr(event_handle, &pos): sndsys::sound_handle_t, integer -> null
+  function sound_set_var(event_handle, var_name, value): sndsys::sound_handle_t, string, float -> null
+  function sound_get_length(name): string -> integer
+  function sound_set_timeline_pos(event_handle, position): sndsys::sound_handle_t, integer -> null
+  function sound_get_timeline_pos(event_handle): sndsys::sound_handle_t -> integer
+  function sound_start(event_handle): sndsys::sound_handle_t -> null
+  function sound_keyoff(event_handle): sndsys::sound_handle_t -> bool
+  function sound_abandon(event_handle, delay): sndsys::sound_handle_t, float -> null
+  function sound_is_playing(event_handle): sndsys::sound_handle_t -> bool
+  function sound_init_stream(url, &min_max_distance): string, integer -> sound_handle_t
+  function sound_open_stream(stream_handle): sndsys::sound_handle_t -> null
+  function sound_close_stream(stream_handle): sndsys::sound_handle_t -> null
+  function sound_set_stream_pos(stream_handle, &pos): sndsys::sound_handle_t, integer -> null
+  function sound_release_stream(stream_handle): sndsys::sound_handle_t -> null
+  function sound_get_stream_state(stream_handle): sndsys::sound_handle_t -> StreamState
+  function sound_get_stream_state_name()
+  function sound_get_output_devices()
+  function sound_get_record_devices()
+  function sound_set_output_device(dev_id): integer -> null
+  function sound_set_callbacks(callbacks_): sqObject -> null
+}
+
+
+
+
+INVALID_SOUND_HANDLE
+
+ +
+
+SOUND_STREAM_ERROR
+
+ +
+
+SOUND_STREAM_CLOSED
+
+ +
+
+SOUND_STREAM_OPENED
+
+ +
+
+SOUND_STREAM_CONNECTING
+
+ +
+
+SOUND_STREAM_BUFFERING
+
+ +
+
+SOUND_STREAM_STOPPED
+
+ +
+
+SOUND_STREAM_PAUSED
+
+ +
+
+SOUND_STREAM_PLAYING
+
+ +
+
+function sound_debug_trace(text)
+
+
Arguments:
+
    +
  • text (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_play_one_shot_3d(name, &pos)
+
+
Arguments:
+
    +
  • name (string()) –

  • +
  • &pos (integer()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_play_one_shot(name)
+
+
Arguments:
+
    +
  • name (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_release_all_instances(name)
+
+
Arguments:
+
    +
  • name (string()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_play(arg0, ...)
+
+
Arguments:
+
    +
  • arg0 (string()) – autodoc from typemask/paramscheck

  • +
  • ... (any_type()) – this function accepts unlimited arguments

  • +
+
+
+

nparamscheck:-2

+

typecheck mask: any_type, string

+
+ +
+
+function sound_set_volume(snd, volume)
+
+
Arguments:
+
    +
  • snd (string()) –

  • +
  • volume (float()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_init_event(name, path)
+
+
Arguments:
+
    +
  • name (string()) –

  • +
  • path (string()) –

  • +
+
+
Returns:
+

sound_handle_t

+
+
+
+ +
+
+function sound_release_event(event_handle)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_set_3d_attr(event_handle, &pos)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
  • &pos (integer()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_set_var(event_handle, var_name, value)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
  • var_name (string()) –

  • +
  • value (float()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_get_length(name)
+
+
Arguments:
+
    +
  • name (string()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function sound_set_timeline_pos(event_handle, position)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
  • position (integer()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_get_timeline_pos(event_handle)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

integer

+
+
+
+ +
+
+function sound_start(event_handle)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_keyoff(event_handle)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function sound_abandon(event_handle, delay)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
  • delay (float()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_is_playing(event_handle)
+
+
Arguments:
+
    +
  • event_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

bool

+
+
+
+ +
+
+function sound_init_stream(url, &min_max_distance)
+
+
Arguments:
+
    +
  • url (string()) –

  • +
  • &min_max_distance (integer()) –

  • +
+
+
Returns:
+

sound_handle_t

+
+
+
+ +
+
+function sound_open_stream(stream_handle)
+
+
Arguments:
+
    +
  • stream_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_close_stream(stream_handle)
+
+
Arguments:
+
    +
  • stream_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_set_stream_pos(stream_handle, &pos)
+
+
Arguments:
+
    +
  • stream_handle (sndsys::sound_handle_t()) –

  • +
  • &pos (integer()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_release_stream(stream_handle)
+
+
Arguments:
+
    +
  • stream_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_get_stream_state(stream_handle)
+
+
Arguments:
+
    +
  • stream_handle (sndsys::sound_handle_t()) –

  • +
+
+
Returns:
+

StreamState

+
+
+
+ +
+
+function sound_get_stream_state_name()
+
+ +
+
+function sound_get_output_devices()
+

nparamscheck:1

+

typecheck mask: any_type

+
+ +
+
+function sound_get_record_devices()
+

nparamscheck:1

+

typecheck mask: any_type

+
+ +
+
+function sound_set_output_device(dev_id)
+
+
Arguments:
+
    +
  • dev_id (integer()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +
+
+function sound_set_callbacks(callbacks_)
+
+
Arguments:
+
    +
  • callbacks (sqObject()) –

  • +
+
+
Returns:
+

null

+
+
+
+ +

/;

+
+

return soundTbl;

+
+

}

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/about-assets/about_assets.html b/assets/about-assets/about_assets.html new file mode 100644 index 000000000..0658c2208 --- /dev/null +++ b/assets/about-assets/about_assets.html @@ -0,0 +1,434 @@ + + + + + + + Introduction to Assets — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Introduction to Assets

+
+

Overview

+

Assets refer to all types of resources used in the Dagor Engine Tools.

+

You can find a list of supported asset types in your project in the +application.blk file. This file is a +key resource for configuring how the tools interact with your project.

+
assets{
+  types{}
+}
+
+
+

Within application.blk file, the base path to the asset directory is specified +as base:t=.

+

Assets are classified into three main categories:

+
    +
  1. Editor-only assets: These are resources used exclusively by the editor, +such as for exporting levels. Examples include materials, prefabs, spline +classes, and others.

  2. +
  3. Game-exported assets: These resources are exported into the game +(indicated by the export{} block in application.blk). They are stored in +.grp files within the game. Typically, the level editor uses the exported +game resources for performance reasons.

  4. +
  5. Textures: Although these are usually exported into the game, they are +stored in .dxp.bin files. The editor uses a texture cache rather than the +exported textures, allowing for real-time texture modifications.

  6. +
+
+
+

Asset Formats and Management

+

Assets for both the game and tools are stored in .blk files, which come in two +formats:

+
    +
  • Modern format: <asset_name>.<className>.blk (e.g., +my_house.rendinst.blk).

  • +
  • Legacy format: <asset_name>.blk, where the asset type must be specified +within the .blk file.

  • +
+

Each asset’s .blk file contains all the parameters required by the exporter +for that specific resource. Each type of resource has its own build tool plugin +and dedicated code in the game.

+

In some cases, the description within the .blk file is minimal. For example, a +texture asset might only require the texture name (if it’s in .dds format). In +other cases, like effects, the entire asset is defined within the .blk file, +and the Asset +Viewer acts as +its editor.

+

Most assets do not have dedicated editing tools. The primary method for creating +these assets is through manual editing and hot-reloading using the tools.

+

However, to avoid manually creating .blk files for every simple asset type +(e.g., textures, skeletons, dynamic models), Dagor supports a highly flexible +system for creating virtual assets - through a +.folder.blk file placed within the asset +directory.

+

In practice, simply placing textures and models into the appropriate directories +is sufficient in 99.99% of cases. Numerous rules, such as LOD (Level of Detail) +switching distances and texture conversion rules, will be generated +automatically.

+
+

Note

+

All resource names must be unique. While the system generally functions if +resources are unique within their type, it is advisable to ensure globally +unique names.

+
+
+
+

Asset Types and Their Rules

+
+

Texture Assets

+

A brief overview of texture asset parameters (all are optional, and for standard +diffuse .dds textures, nothing may need to be specified. For .tga files, two +parameters are typically required: convert:b=yes, fmt:="DXT1|DXT5"):

+
contents{
+  convert:b=yes; fmt:t="DXT1|DXT5"
+  mipmapType:t=mipmapGenerate
+  mipFilter:t="filterKaiser"; mipFilterAlpha:r=40; mipFilterStretch:r=2
+  addrU:t="wrap"; addrV:t="wrap";
+  swizzleARGB:t="RAG0"
+  hqMip:i=3; mqMip:i=3; lqMip:i=4
+  PC{
+    hqMip:i=2; mqMip:i=2; lqMip:i=3;
+  }
+  gamma:r=1
+  colorPadding:b=no
+  // alphaCoverageThresMip9:i=200
+  // alphaCoverage:b=no
+  // rtMipGen:b=no
+  // aniFunc:t="abs";
+  // anisotropy:i=8
+  addrU:t="wrap"; addrV:t="wrap";
+}
+
+
+
    +
  • convert: Converts the texture (mandatory for all .tga or .psd textures).

  • +
  • fmt:t: Specifies the format to convert to (options include DXT1, DXT5, +ARGB, L8, A8L8, L16).

  • +
  • mipmapType:t: Method for generating mipmaps (mipmapGenerate, +mipmapUseExisting, mipmapNone).

  • +
  • mipFilter: Specifies the filter used to generate mipmaps (filterKaiser, +filterBox, filterCubic).

  • +
  • hqMip, mqMip, lqMip: Specifies which mip level to use at high, medium, +and low quality settings.

  • +
  • swizzleARGB: Specifies how to swizzle the texture channels. Typically not +needed.

  • +
  • gamma: Gamma correction value (1 for normal maps and masks, default is +2.2).

  • +
  • addrU, addrV: Texture addressing mode (wrap, clamp, border).

  • +
+
+
+

Dynamic Models and Rendering Instances

+
lod{
+  range:r=70; fname:t="$1.lod00.dag";
+}
+lod{
+  range:r=200; fname:t="$1.lod01.dag";
+}
+lod{
+  range:r=550; fname:t="$1.lod02.dag";
+}
+lod{
+  range:r=4000; fname:t="$1.lod03.dag";
+}
+ref_skeleton:t="$1_skeleton"
+texref_prefix:t="low_"
+all_animated:b=yes
+
+
+
    +
  • lod: LOD parameters.

    +
      +
    • range:r: LOD distance.

    • +
    • fname:t: Optional filename, defaults to $1.lod<lod_number>.dag.

    • +
    +
  • +
  • texref_prefix:t: Prefix added to all texture references in the model.

  • +
  • ref_skeleton:t: Reference skeleton for dynamic models, necessary for correct +preview in Asset +Viewer.

  • +
  • all_animated:b: Indicates that all objects in the model should be +considered animated, i.e., having their own matrices.

  • +
+
+
+

Composite Dynamic Models

+

Composite dynamic models are structures composed of multiple dynamic models that +share a common skeleton.

+

Below are the rules for creating a +.skeleton.blk file for a composite model, +using a tank with several turret and gun options as an example:

+
name:t="tank_body.lod00.dag"
+attachSubSkel{
+  attach_to:t="bone_turret"
+  skel_file:t="turret_a.lod00.dag"
+  skel_node:t="bone_turret"
+  attachSubSkel{
+    attach_to:t="bone_gun_a"
+    skel_file:t="gun_a.lod00.dag"
+    skel_node:t="bone_gun_a"
+  }
+  attachSubSkel{
+    attach_to:t="bone_gun_b"
+    skel_file:t="gun_b.lod00.dag"
+    skel_node:t="bone_gun_b"
+    add_prefix:t="G1:"
+  }
+  attachSubSkel{
+    attach_to:t="bone_gun_c"
+    skel_file:t="gun_b.lod00.dag"
+    skel_node:t="bone_gun_b"
+    add_prefix:t="G2:"
+  }
+}
+attachSubSkel{
+  attach_to:t="bone_turret"
+  skel_file:t="turret_b.lod00.dag"
+  skel_node:t="bone_turret"
+  add_prefix:t="T1:"
+}
+
+
+
    +
  • name:t: Parent model name.

  • +
  • attachSubSkel{}: Block for adding a dynamic model.

    +
      +
    • attach_to:t: Node in the parent skeleton to which the additional dynamic +model is linked.

    • +
    • skel_file:t: Child model file name.

    • +
    • skel_node:t: Node in the child model’s skeleton to link with the parent.

    • +
    • add_prefix:t: Prefix for all child model nodes.

    • +
    +
  • +
+

In the .skeleton.blk file above, the skeleton generated from the tank_body +model is extended with the turrets turret_a and turret_b, which are attached +to the bone_turret. On turret_a, two unique guns, gun_a and gun_b, are +attached to bone_gun_a, bone_gun_b, and bone_gun_c. However, gun_b is +attached twice to different bones.

+

Since we are creating a single shared skeleton, it is critical to avoid +duplicate node names. To address this, a unique prefix is added to the nodes of +each duplicate. The two copies of bone_gun_b, forming different branches in +the hierarchy, received prefixes G1 and G2. Similarly, the nodes in +turret_b were prefixed with T1.

+
+

Important

+
    +
  • When specifying the attachment node, do not include automatically added +prefixes.

  • +
  • If a child model is attached to a node with the same name as one of its +bones, the previous node is removed from the hierarchy. There won’t be a +duplicate – don’t worry.

  • +
+
+

While theoretically, you can create a very deep hierarchy of dependencies, +simpler structures are easier to manage. Always evaluate the necessity of adding +new levels before doing that.

+

A multi-level hierarchy might look like this:

+
name:t="papa.lod00.dag"
+attachSubSkel{
+  attach_to:t="bone_papa"
+  skel_file:t="child.lod00.dag"
+  skel_node:t="bone_child"
+  add_prefix:t="layer01:"
+  attachSubSkel{
+    attach_to:t="bone_child"
+    skel_file:t="child.lod00.dag"
+    skel_node:t="bone_child"
+    add_prefix:t="layer02:"
+    attachSubSkel{
+      attach_to:t="bone_child"
+      skel_file:t="child.lod00.dag"
+      skel_node:t="bone_child"
+      add_prefix:t="layer03:"
+      attachSubSkel{
+        attach_to:t="bone_child"
+        skel_file:t="child.lod00.dag"
+        skel_node:t="bone_child"
+        add_prefix:t="layer04:"
+      }
+    }
+  }
+}
+
+
+

This hierarchy demonstrates a parent model (papa.lod00.dag) with multiple +layers of child models attached, each with its own prefix to ensure uniqueness +and proper hierarchy management.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/about-assets/how-to-test-assets-on-maps/how_to_test_assets_on_maps.html b/assets/about-assets/how-to-test-assets-on-maps/how_to_test_assets_on_maps.html new file mode 100644 index 000000000..de267442b --- /dev/null +++ b/assets/about-assets/how-to-test-assets-on-maps/how_to_test_assets_on_maps.html @@ -0,0 +1,357 @@ + + + + + + + How to Test Assets on Maps (Basic Workflow) — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

How to Test Assets on Maps (Basic Workflow)

+

This guide provides essential steps for testing assets on maps. Note that there +are differences between War Thunder and daNetGame-based projects.

+
+

Build Changes in Assets

+

If you’ve made changes to an asset, open it in Asset +Viewer and +build the corresponding components:

+
    +
  • Material changes: Build the asset group (grp)

    +../../../_images/how_to_test_assets_on_maps_01.jpg +
    +
  • +
  • Collision changes: Build the collision group (grp)

    +../../../_images/how_to_test_assets_on_maps_02.jpg +
    +
  • +
  • Texture changes: Build the texture bin

    +../../../_images/how_to_test_assets_on_maps_03.jpg +
    +
  • +
  • Multiple changes or uncertainty: Build the entire folder (this may take +longer depending on the number of assets and packs in the folder/subfolders)

    +../../../_images/how_to_test_assets_on_maps_04.jpg +
    +
  • +
+
+
+

Export the Map with the Asset

+
    +
  1. Launch daEditor +and open the map you want to modify. In the Landscape tab, place the +asset using the Create entity tool.

    +../../../_images/how_to_test_assets_on_maps_05.jpg +
    +
  2. +
  3. Export the map via Project ▸ Export to game (PC format).

    +../../../_images/how_to_test_assets_on_maps_06.jpg +
    +
  4. +
  5. Confirm all dialog boxes and choose the place to export level. A +successful export will replace the current map file.

    +../../../_images/how_to_test_assets_on_maps_07.jpg +
    +
  6. +
+
+
+

Launching the Level

+

The method for launching the level varies by project.

+
+

daNetGame-based projects

+

The following steps related to daNetGame-based projects are described using +the Enlisted project as an example.

+

To see your map in the game, you should launch the scene that includes your map, +which is a .blk file. There are two main approaches:

+

Using the Launcher:

+
    +
  1. Run /enlisted/game/z_enlisted_launcher.bat

  2. +
  3. Select the correct mission from the dropdown (the one with your exported +map). Customize mode, graphics settings, etc., if needed.

  4. +
  5. Click Play to launch the game.

  6. +
+

Manually:

+
    +
  1. Create a .bat file in the /enlisted/game/ directory.

  2. +
  3. Open it with a text editor (e.g., Notepad, Notepad++, VSCode).

  4. +
  5. Add the following line:

    +
    @start win64\\enlisted-dev.exe -scene:gamedata/scenes/<your_scene_path>.blk -config:disableMenu:b=yes
    +
    +
    +
  6. +
  7. Save and run the .bat file to launch your scene.

  8. +
+

While the launcher is the preferred method, manual execution is useful for +testing new scenes that haven’t been added to the launcher yet.

+
+
+

Enlisted CDK

+
    +
  1. Launch /Enlisted/modsEditor.bat

  2. +
  3. Select your scene. Choose the team, mode, and other settings using the +wrench icon.

  4. +
  5. Click Load or double-click the scene name to open it.

  6. +
+
+
+

War Thunder

+

In War Thunder, you will use the Mission Editor, which daNetGame-projects +do not have. You will have to create your mission using the following steps:

+
    +
  1. Select Vehicle Type from the dropdown:

    +
      +
    • armada: Aircraft

    • +
    • tankModels: Tanks

    • +
    • ships: Ships +(Others are non-playable.)

    • +
    +

    Place the unit on the map using the Create Unit button, then click the +map to position it.

    +../../../_images/how_to_test_assets_on_maps_08.jpg +
    +
    +

    Note

    +

    Aircraft will appear in the air, while tanks and ships will be placed on +land.

    +
    +
  2. +
  3. Change Vehicle Properties: If the wrong vehicle type is selected, modify +it in the Properties panel (press P after selecting the unit).

    +../../../_images/how_to_test_assets_on_maps_09.jpg +
    +

    After that you will have to choose:

    +
      +
    • Vehicle model

    • +
    • Weapon type (you may set to default)

    • +
    • Bullets (usually HE or default)

    • +
    • Bullets count

    • +
    +

    It can be done in the same unit’s Properties panel:

    +../../../_images/how_to_test_assets_on_maps_10.jpg +
    +
  4. +
  5. Configure Mission Properties:

    +
      +
    • Find your unit’s army number (different parties - different armies in pvp) +in unit’s Properties panel.

      +../../../_images/how_to_test_assets_on_maps_11.jpg +
      +
    • +
    • Assign the unit’s army number to Team A in Mission Settings +panel (deselect unit and press P button).

      +../../../_images/how_to_test_assets_on_maps_12.jpg +
      +
    • +
    • Specify your unit in wing inset.

      +../../../_images/how_to_test_assets_on_maps_13.jpg +../../../_images/how_to_test_assets_on_maps_14.jpg +../../../_images/how_to_test_assets_on_maps_15.jpg +
      +
    • +
    +

    In the same Mission Settings panel:

    +
      +
    • name: give the name to your mission;

    • +
    • type: select singleMission;

    • +
    • level: choose the location where the mission will start (otherwise, your vehicle +will spawn on default water location by default).

      +../../../_images/how_to_test_assets_on_maps_16.jpg +
      +
    • +
    +
  6. +
  7. Save the Mission: Save your mission in +<project_name>/develop/gameBase/gameData/missions.

    +../../../_images/how_to_test_assets_on_maps_17.jpg +
    +
    +

    Important

    +

    Be sure to save after every change – there is no autosave.

    +
    +
  8. +
  9. Play the Mission: Once ready, click the Play button.

    +../../../_images/how_to_test_assets_on_maps_18.jpg +
  10. +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/about-assets/how-to-test-assets-on-maps/index.html b/assets/about-assets/how-to-test-assets-on-maps/index.html new file mode 100644 index 000000000..e50388aaf --- /dev/null +++ b/assets/about-assets/how-to-test-assets-on-maps/index.html @@ -0,0 +1,189 @@ + + + + + + + How to Test Assets on Maps — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+ + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/about-assets/index.html b/assets/about-assets/index.html new file mode 100644 index 000000000..6ced6785b --- /dev/null +++ b/assets/about-assets/index.html @@ -0,0 +1,199 @@ + + + + + + + Assets — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/about-assets/ladders/climbable_ladders.html b/assets/about-assets/ladders/climbable_ladders.html new file mode 100644 index 000000000..dd4dacff1 --- /dev/null +++ b/assets/about-assets/ladders/climbable_ladders.html @@ -0,0 +1,336 @@ + + + + + + + Climbable Ladders — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Climbable Ladders

+
+

General Overview and Structure

+

In daNetGame-projects, there is a technology for climbing vertical (or +near-vertical) ladders.

+

Vertical ladders that are part of gameplay (which players can climb) are +actually composite objects. They consist of two components:

+
    +
  1. Visual geometry (*.dag)

  2. +
  3. Game object (*ladder.gameObj.blk).

  4. +
+
+

Note

+

The name of the .blk file must follow the convention with the ladder suffix +and the *.gameObj.blk extension.

+
+
+

Geometry Parameters

+

The visual geometry has no special distinctive features – everything is standard +and straightforward. It’s simply a model of a ladder with a specific number of +steps (the number of steps is important as it will be used in the game object).

+
+

Important

+

The only critical point to observe is that the steps must be spaced evenly. +Otherwise, the character’s hands and feet may not correctly align with the steps +during climbing.

+
+
+
+

Game Object Parameters

+

The game object (gameObj) is a procedurally generated object (similar to +wall_holes, indoor walls, etc.). To create it, you need to generate a text +file (*ladder.gameObj.blk) with the description of the ladder:

+
    +
  • volumeType:t="box" – the geometric type of the generated gameplay area, +similar to meshes, boxes, convex shapes in collisions. We specifically use the +box type.

  • +
  • boxSz:r=0.5 – defines the distance from the center to any side of the box. +This value represents half the side of a cube, meaning the default value of +0.5 generates a 1m cube. By default, it’s set to 0.5, and we do not change +this. It has minimal impact since the size of the box will later be defined by +the matrix in the composite object (as ladders are not cubic in shape).

  • +
  • isLadder:b=yes – specifies that this game object is a ladder.

  • +
  • ladderStepsCount:i=14 – the number of steps (this is important as it affects +the character’s hand and foot placement on the actual ladder geometry).

  • +
+

The actual size of the game object is determined in the composite object via its +matrix, which integrates the visual geometry with the game object. This allows +the game object to match the proportions required for the specific ladder.

+
+
+
+

Creating the Ladder Game Object

+
+

General Guidelines

+
    +
  1. You do not necessarily need to create a new game object. You can reuse an +existing one by transforming it within the composite object to fit your +ladder.

    +
    +

    Note

    +

    However, it’s crucial to remember that the game object contains a predefined +number of steps, which must not be altered. Changing it would break the +ladders where this object is already in use. If the step count does not suit +your needs, create a new object.

    +
    +
  2. +
  3. Avoid modifying the default cube size (boxSz:r=0.5, i.e., 1m per side). If, +for any reason, you decide to change this value, you must ensure that the +size is adjusted accordingly when creating the composite object in 3ds Max +(discussed below). Otherwise, the results in 3ds Max and Asset +Viewer will +not match.

  4. +
  5. It doesn’t matter whether the ladders are standalone objects or part of a +building – each case is unique. If a ladder is used multiple times, it makes +more sense to have it as a separate object. If the ladder is unique to a +specific building, it can remain part of the building’s geometry (consider +optimization, LODs, etc.).

    +

    The technology remains the same – each ladder must have a game object added +to it via the composite object.

    +
  6. +
  7. It’s best to store *ladder.gameObj.blk alongside the visual geometry.

  8. +
  9. Unless required for gameplay, avoid adding collision to every step in the +physics system. The physical collision does not interact with the climbing +animation – it only collides with the capsule.

  10. +
  11. The game object should span from the bottom step to the top step. +Otherwise, there may be incorrect hand and foot positioning.

  12. +
+

An example using the wood_ladder_a model is shown here:

+../../../_images/climbable_ladders_01.jpg +../../../_images/climbable_ladders_02.jpg +../../../_images/climbable_ladders_03.jpg +
+

Note

+

As of July 2023, the system is set up so that the character can only climb from +the X side of the game object. Climbing from other sides may not work or may +behave incorrectly.

+../../../_images/climbable_ladders_04.jpg +
+
+
+
+

Methods for Creating the Game Object

+
+

Method 1

+
    +
  1. In the 3ds Max scene, create a cube with dimensions 1x1x1m, with its pivot +point at the center. If you’ve changed the size of boxSz:r=0.5, you need to +adjust the cube size accordingly.

  2. +
  3. Scale the cube to match the dimensions of the ladder.

  4. +
  5. Export the composite object (ladder + game object) using available tools +(such as dag2rires).

    +../../../_images/climbable_ladders_05.jpg +
  6. +
+
+
+
+

Method 2

+
    +
  1. In daEditor, place +the pre-created *ladder.gameObj.blk.

  2. +
  3. Scale it to match the ladder’s dimensions.

  4. +
  5. Export the composite object (or the entire building) using the menu option +LandscapeExport as composite.

    +../../../_images/climbable_ladders_06.jpg +
    +../../../_images/climbable_ladders_07.jpg +
  6. +
+
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/about-assets/ladders/index.html b/assets/about-assets/ladders/index.html new file mode 100644 index 000000000..73ad3ba8e --- /dev/null +++ b/assets/about-assets/ladders/index.html @@ -0,0 +1,196 @@ + + + + + + + Ladders — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/about-assets/ladders/navmesh_gen_vert_ladders.html b/assets/about-assets/ladders/navmesh_gen_vert_ladders.html new file mode 100644 index 000000000..80c48ea75 --- /dev/null +++ b/assets/about-assets/ladders/navmesh_gen_vert_ladders.html @@ -0,0 +1,364 @@ + + + + + + + Infantry NavMesh Generation for Vertical Ladders — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Infantry NavMesh Generation for Vertical Ladders

+
+

Overview

+

This article outlines the principles behind NavMesh generation for vertical +ladders and discusses common errors that prevent NavMesh from being generated +for ladders.

+
+

Warning

+

Vertical ladders are often problematic for gameplay. Think carefully before +adding them to a level. However, if there is no alternative, please review this +article and consider the important nuances of designing ladders from the +perspective of AI navigation.

+
+
+
+

How NavMesh Generation for Vertical Ladders Works

+

The pathfinding for vertical ladders functions as follows. Each ladder has a +gameObj file like ladder_template.gameObj.blk, which contains:

+
    +
  • volumeType:t="box" – The type of primitive displayed in +daEditor.

  • +
  • boxSz:r=0.5 – The size of the base primitive.

  • +
  • isLadder:b=yes – A flag indicating that this is a ladder.

  • +
  • ladderStepsCount:i=13 – The number of steps on the ladder.

  • +
+

This gameObj is used to describe the geometry of the ladder along which a +character can climb vertically.

+

Example of a composite object: ladder geometry + its gameObj:

+../../../_images/navmesh_gen_vert_ladders_01.jpg +
+

During NavMesh generation in the location, each such gameObj is identified, and +the zones near the ends of the gameObj are analyzed: if there are NavMesh +polygons within a radius of <0.5m from the ends of the gameObj, a link is +created between the polygons through the vertical ladder.

+

This link is used by AI for pathfinding across NavMesh through vertical ladders.

+

Examples of NavMesh link generation through vertical ladders:

+ + + +
Conditions metConditions not met
+../../../_images/navmesh_gen_vert_ladders_02.jpg +../../../_images/navmesh_gen_vert_ladders_03.jpg +
+
+
+

Common Design Errors for Vertical Ladders

+

Let’s examine design errors that prevent link generation. These are typically +specific cases where the conditions for NavMesh generation are not met. To +create a NavMesh link through a vertical ladder, NavMesh polygons must be +generated within a radius of <0.5m from the ends of the gameObj.

+
+

Incorrect Ladder GameObj

+

The gameObj dimensions prevent the link from being generated.

+ + + + + + + +
ProblemSolution
The gameObj has insufficient dimensions to meet the conditions for link generation.Adjust the dimensions of the gameObj or set up a proper composite object with a gameObj that satisfies the link generation conditions.
SchemeExample
+../../../_images/navmesh_gen_vert_ladders_05.jpg +../../../_images/navmesh_gen_vert_ladders_04.jpg +
+ + + + + + + +
ProblemSolution
The gameObj has excessive dimensions, preventing the conditions for link generation from being met.Adjust the dimensions of the gameObj or set up a proper composite object with a gameObj that satisfies the link generation conditions.
SchemeExample
+../../../_images/navmesh_gen_vert_ladders_07.jpg +../../../_images/navmesh_gen_vert_ladders_06.jpg +
+ + + + + + + +
ProblemSolution
Two ladder composite objects with gameObjs are placed consecutively. Since there is no NavMesh at the junction of the gameObjs, the link cannot be generated.Only one gameObj should be used per ladder segment.
SchemeExample
+../../../_images/navmesh_gen_vert_ladders_09.jpg +../../../_images/navmesh_gen_vert_ladders_08.jpg +
+
+
+

Problematic Ladder Geometry

+

The ladder geometry prevents the NavMesh generation conditions from being met.

+ + + + + + + +
ProblemSolution
The ladder has additional structural elements that obstruct NavMesh generation at the necessary distance to meet the link conditions.To resolve this, experiment with the design – solutions vary depending on the ladder and the adjacent platform. In some cases, moving the elements is enough, while in others, the ladder geometry must be modified or replaced.
SchemeExample
+../../../_images/navmesh_gen_vert_ladders_10.jpg +
+
+
+

Problematic Environment Geometry

+

The ladder leads to a location where NavMesh cannot be generated.

+ + + + + + + +
ProblemSolution
Obstacles block access to the ladder, or other geometry obstructs NavMesh generation.It is important to clear the path to the ladder so that NavMesh can be generated nearby. Technically, obstacles do not prevent link generation, but the path will remain blocked for AI until the obstacles are destroyed.
SchemeExample
+../../../_images/navmesh_gen_vert_ladders_12.jpg +../../../_images/navmesh_gen_vert_ladders_11.jpg +
+ + + + + + + +
ProblemSolution
There isn't enough ceiling height for the attic floor to be suitable for NavMesh generation.This is often a geometry issue, so it's important to plan for sufficient ceiling height in advance. Incorrect NavMesh generation settings could also be the issue, such as setting the minimum ceiling height too low for NavMesh generation.
SchemeExample
+../../../_images/navmesh_gen_vert_ladders_14.jpg +../../../_images/navmesh_gen_vert_ladders_13.jpg +
+ + + + + + + +
ProblemSolution
Complex geometry on steep slopes is unsuitable for NavMesh generation.This is generally a geometry issue, so during the blocking phase, make sure the geometry along paths is suitable for NavMesh generation. Incorrect NavMesh settings, such as an overly restricted slope angle, may also be the cause.
SchemeExample
+../../../_images/navmesh_gen_vert_ladders_16.jpg +../../../_images/navmesh_gen_vert_ladders_15.jpg +
+ + + + + + + +
ProblemSolution
No NavMesh is available for link generation. The ladder is placed so that the player can climb it and clear a railing, but for link generation, NavMesh polygons are required. NavMesh does not generate on railings due to their size, and the end of the gameObj is too far from the nearest NavMesh polygons.The solution is to ensure the ladder leads to a properly generated NavMesh polygon. In this case, remove the railing or adjust the ladder length appropriately.
SchemeExample
+../../../_images/navmesh_gen_vert_ladders_18.jpg +../../../_images/navmesh_gen_vert_ladders_17.jpg +
+ + + + + + + +
ProblemSolution
NavMesh will not generate in water deeper than 2m, which prevents the creation of a link.The water depth needs to be reduced.
SchemeExample
+../../../_images/navmesh_gen_vert_ladders_20.jpg +../../../_images/navmesh_gen_vert_ladders_19.jpg +
+
+
+

Code Limitations

+

Cases not supported by the code:

+ + + + + + + +
ProblemSolution
Links cannot be generated for intermediate platforms. The code does not account for intermediate platforms along the ladder's path. Each platform must have its own ladder for AI navigation. However, since an overabundance of vertical ladders is undesirable, plan more convenient paths in advance.In this case, you can keep the vertical ladder for climbing to the middle level and create ramp-like geometry for reaching the top level.
SchemeExample
+../../../_images/navmesh_gen_vert_ladders_21.jpg +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/about-assets/occluder/index.html b/assets/about-assets/occluder/index.html new file mode 100644 index 000000000..97e677580 --- /dev/null +++ b/assets/about-assets/occluder/index.html @@ -0,0 +1,192 @@ + + + + + + + Occluder Box — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/about-assets/occluder/occluder_box.html b/assets/about-assets/occluder/occluder_box.html new file mode 100644 index 000000000..a43c56af5 --- /dev/null +++ b/assets/about-assets/occluder/occluder_box.html @@ -0,0 +1,348 @@ + + + + + + + Occluder Box — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Occluder Box

+
+

Overview

+

An occluder box is a specialized geometry used to improve performance. Every +object that fully obscured by occluder box is excluded from rendering. Partially +obscured objects stay intact.

+

If any part of an object extends beyond the occluder box, +it will reappear: see video +1 +and video +2 +for reference.

+
+
+

Creating an Occluder Box

+

To create an occluder box for an object, follow these steps:

+
    +
  1. Create a Box object.

  2. +
  3. Name the object occluder_box.

  4. +
  5. Create a material using the Dagor Dagorrat Material 2 shader.

    +../../../_images/occluder_box_01.jpg +
    +
  6. +
  7. Set the shader class to gi_black (for better visibility, it’s +recommended to choose a material color that contrasts with the object, like +bright red).

    +../../../_images/occluder_box_02.jpg +../../../_images/occluder_box_03.jpg +
  8. +
    +
  9. Assign the material to the object named occluder_box.

  10. +
  11. Open the object’s properties and uncheck the Renderable option (this will +prevent potential issues later on).

    +../../../_images/occluder_box_04.jpg +../../../_images/occluder_box_05.jpg +
  12. +
    +
  13. In the User Defined tab, input the following:

    +
    renderable:b=no
    +cast_shadows:b=no
    +occluder:b=yes
    +collidable:b=no
    +
    +
    +../../../_images/occluder_box_06.jpg +

    User Defined Properties:

    +
      +
    • renderable:b=no – Disables the object from being rendered.

    • +
    • cast_shadows:b=no – Prevents the object from casting shadows.

    • +
    • occluder:b=yes – Designates the object as an occluder.

    • +
    • collidable:b=no – Disables collision generation.

    • +
    +
    +
    +

    Important

    +

    Unchecking the collidable option in the Dagor object properties does not +achieve the same result!

    +

    To verify this, check the asset in the Asset +Viewer. If +the occluder box is visible in the collision data, the setup is incorrect. +The collision should not include an occluder_box node.

    +../../../_images/occluder_box_07.jpg +
    +
  14. +
  15. Convert the occluder_box object to Editable Poly or apply an Edit Poly +modifier.

  16. +
  17. Adjust the size to fit the object it should occlude. Specific size +requirements are detailed below.

  18. +
+
+
+

Editing the Occluder Box

+

The occluder box is aptly named because only its bounding box matters, +regardless of its orientation. Therefore, the following rules apply when +creating an occluder box:

+
    +
  1. The occluder box should never extend beyond the object’s geometry.

    +../../../_images/occluder_box_08.jpg +../../../_images/occluder_box_09.jpg +
  2. +
    +
  3. It should fill as much of the object’s internal space as possible, similar to +UV mapping, without exceeding the object’s boundaries.

    +../../../_images/occluder_box_10.jpg +
    +
  4. +
  5. Rotating the occluder box is highly discouraged.

    +

    Here is an example of an unrotated occluder box:

    +../../../_images/occluder_box_11.jpg +../../../_images/occluder_box_12.jpg +
    +

    And here’s how it looks when rotated:

    +../../../_images/occluder_box_13.jpg +../../../_images/occluder_box_14.jpg +
  6. +
    +
  7. Do not name the object anything other than occluder_box.

  8. +
  9. The occluder box should be placed in the LOD00 layer.

  10. +
+
+

Tip

+

If you need to remove an occluder box, delete its polygons while retaining the +object and its properties as described.

+
+
+
+

Verifying Occluder Box Setup

+

There are several ways to verify if the occluder box is set up correctly:

+
    +
  1. In Asset +Viewer, the +occluder box is displayed as a white rectangle.

    +

    If it’s not visible, ensure the proper setting is enabled. If the occluder +box appears misaligned (as shown in the image), you will need to correct it +in 3ds Max.

    +../../../_images/occluder_box_15.jpg +
    +
  2. +
  3. During in-game testing, you can observe the occluder box in action by +pressing F3 to display the wireframe, see +video +for reference.

    +

    If objects behind the occluder do not disappear, disappear too early, too +late, or not at all, recheck the setup based on the guidelines above. If the +occluder box is incorrectly configured, you will likely encounter issues +similar to those shown in video +1 +and video +2.

    +
  4. +
+
+
+

Examples of Well-Configured Occluder Boxes

+

Here are several example images of correctly set up occluder boxes.

+../../../_images/occluder_box_16.jpg +../../../_images/occluder_box_17.jpg +../../../_images/occluder_box_18.jpg +../../../_images/occluder_box_19.jpg +../../../_images/occluder_box_20.jpg +
+
+

Commands for Displaying Occluders

+
    +
  • render.debug occlusion – Shows occluders and their statistics.

  • +
  • render.debug occlusion occluded – Displays bounding boxes of occluded +objects.

  • +
+

Toggle commands:

+
    +
  • render.debug occlusion boxes

  • +
  • render.debug occlusion stats

  • +
  • render.debug occlusion occludedv

  • +
  • render.debug occlusion not_occluded

  • +
+

Additionally, you can use:

+
    +
  • occlusion.enabled – Enables or disables occlusion rendering entirely.

  • +
  • rendinst.check_occlusion – Enables or disables occlusion for render +instances.

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/all-about-blk/application_blk.html b/assets/all-about-blk/application_blk.html new file mode 100644 index 000000000..5b55857a5 --- /dev/null +++ b/assets/all-about-blk/application_blk.html @@ -0,0 +1,1079 @@ + + + + + + + application.blk — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

application.blk

+

The application.blk file is a key configuration file for the Dagor Engine +Tools, detailing the setup and customization of various aspects of the editors +and builders, including rendering options, shader configurations, shadow +settings, asset management, and game-specific settings. This file contains +multiple blocks, each dedicated to specific functions and settings.

+

Below is a description of each block within the application.blk file:

+
+

Root Level Parameters

+
    +
  • collision: Specifies the collision detection system to be used.

  • +
  • shaders: Defines the path to the shaders.

  • +
  • useDynrend: A boolean flag to enable or disable dynamic rendering.

  • +
+
+
+

dynamicDeferred{} Block

+

This block configures settings for the dynamic deferred rendering system, +including supported options, default rendering options, debug display options, +and various rendering formats.

+
    +
  • supportsRopt{} Block: Defines which rendering options are supported.

    +
      +
    • render shadows: Enables shadow rendering.

    • +
    • render VSM shadows: Enables variance shadow map shadows.

    • +
    • use SSAO: Enables screen space ambient occlusion.

    • +
    • use SSR: Enables screen space reflections.

    • +
    • no sun, no amb, no envi refl, no transp, no postfx: Enables sun, +ambient, environmental reflections, transparency, and post-processing +effects, respectively.

    • +
    +
  • +
  • defaultRopt{} Block: Sets the default rendering options.

    +
      +
    • render VSM shadows: Enables variance shadow map shadows.

    • +
    • no sun, no amb, no envi refl, no transp, no postfx: Enables sun, +ambient, environmental reflections, transparency, and post-processing +effects, respectively.

    • +
    +
  • +
  • dbgShow{} Block: Configures debug display options with various rendering +indices for different components.

    +
      +
    • diffuse: Diffuse component.

    • +
    • specular: Specular component.

    • +
    • normal: Normal vector component.

    • +
    • smoothness: Smoothness (or roughness) component.

    • +
    • base_color: Base color of the material.

    • +
    • metallness: Metallic component.

    • +
    • material: Material ID.

    • +
    • ssao: Screen space ambient occlusion (SSAO).

    • +
    • ao: Ambient occlusion (AO).

    • +
    • albedo_ao: Maps the albedo multiplied by ambient occlusion.

    • +
    • final_ao: Maps the final ambient occlusion.

    • +
    • preshadow: Maps the pre-shadow (shadow map before applying shadows).

    • +
    • translucency: Maps the translucency component.

    • +
    • translucency_color: Maps the translucency color component.

    • +
    • ssr: Maps the screen space reflections (SSR).

    • +
    • ssr_strength: Maps the strength of the screen space reflections.

    • +
    +
  • +
  • sceneFmt, postfxFmt, ssaoFmt: Specifies formats for scene, post-processing +effects, and SSAO.

  • +
  • postfx_sRGB_backbuf_write: Enables/disables sRGB back buffer writing for +post-processing effects.

  • +
  • gbufCount: Sets the number of G-buffers.

  • +
  • gbufFmt0, gbufFmt1, gbufFmt2: Defines formats for the G-buffers.

  • +
  • shadowPreset{} Block: Defines presets for shadow mapping parameters. These +presets are used to configure the resolution and distance for shadow maps, as +well as the variance shadow maps (VSM).

    +
      +
    • name: Defines the name of the shadow preset, describing its +configuration in terms of map size and maximum distance.

    • +
    • csmSize: Sets the size of the cascaded shadow map (CSM).

    • +
    • csmMaxDist: Sets the maximum distance for the cascaded shadow map.

    • +
    • vsmSize: Sets the size of the variance shadow map (VSM).

    • +
    • vsmMaxDist: Sets the maximum distance for the variance shadow map.

    • +
    +
  • +
  • hdrMode, postfx, vsmAllowed, grassTranslucency: Configures high dynamic +range mode, post-processing effects, VSM allowance, and grass translucency.

  • +
+
+
+

clipmap{} Block

+

Configures settings for clipmap rendering, which is typically used for large +terrains.

+
    +
  • sideSize, stackCount, texelSize, step, finalSize, cacheCnt, bufferCnt: +Defines various parameters for the clipmap, including size, number of stacks, +texel size, step size, final size, cache count, and buffer count.

  • +
  • cache_tex0, cache_tex1, cache_tex2, buf_tex0, buf_tex1, buf_tex2: +Specifies formats for cache textures and buffer textures.

  • +
  • useUAVFeedback, useToroidalHeightmap: Enables UAV feedback and toroidal +heightmap usage.

  • +
+
+
+

hdr_mode{} Block

+

Specifies the high dynamic range mode settings.

+
    +
  • ps3, real: Enables specific HDR modes.

  • +
+
+
+

SDK{} Block

+

Defines settings related to the SDK (Software Development Kit).

+
    +
  • sdk_folder, levels_folder: Paths to the SDK directory and levels +directory.

  • +
  • daeditor3x_additional_plugins: Path to additional plugins for the editor.

  • +
  • exclude_dll: Regex pattern to exclude specific .dll files.

  • +
  • allow_debug_bitmap_dump: Enables debug bitmap dumping.

  • +
  • levelExpSHA1Tags{} Block: Defines a list of SHA-1 tags associated with +various elements within a level. Each tag represents a specific type of data +or asset that is included in the level export process.

    +
      +
    • tag: Defines a certain tag.

    • +
    +
  • +
+
+
+

game{} Block

+

Contains game-specific settings and paths.

+
    +
  • game_folder, levels_bin_folder: Paths to the game directory and levels +binary directory.

  • +
  • physmat, params, entities, scene, car_params: Paths to various game +configuration files.

  • +
  • texStreamingFile, texStreamingBlock, navmesh_layers: Paths and settings +related to texture streaming and navigation mesh layers.

  • +
+
+
+

levelsBlkPrefix{} Block

+

Configures prefix settings for level blocks.

+
    +
  • useExportBinPath: Enables the use of export binary path.

  • +
  • try: Path to try for level export.

  • +
+
+
+

assets{} Block

+

Defines the parameters and settings related to the handling of game assets, +including their types, base paths, export settings, impostor rendering +parameters, and build configurations.

+
    +
  • types{} Block: Lists various asset types used in the game. Specifies +various asset types such as textures (tex), prefabs (prefab), render +instances (rendInst), effects (fx), and more.

    +
      +
    • type: Specifies the type of asset.

    • +
    +
  • +
  • base: Defines the base directory for asset storage.

  • +
  • export{} Block: Contains settings for exporting assets.

    +
      +
    • types{} Block: Specifies the types of assets to be exported.

      +
        +
      • type: Specifies the type of asset.

      • +
      +
    • +
    • cache: Defines the cache directory used during export.

    • +
    • useCache2Fast: Enables fast caching.

    • +
    • profiles{} Block: Defines export profiles.

      +
        +
      • dedicatedServer{} Block: A profile for dedicated servers.

        +
          +
        • strip_d3d_res: Removes Direct3D resources.

        • +
        • collapse_packs: Collapses packs.

        • +
        • reject_exp: Specifies asset types to reject during export.

        • +
        +
      • +
      +
    • +
    • destination{} Block: Specifies export destinations for different +platforms.

      +
        +
      • PC: PC destination path.

      • +
      • “PC~~dedicatedServer”: PC dedicated server destination path.

      • +
      • iOS: iOS destination path.

      • +
      • allow_patch: Disables patching.

      • +
      • additional{} Block: Additional export settings.

      • +
      +
    • +
    • destGrpHdrCache{} Block: Configures the group header cache in VROMFS for +export.

    • +
    • packages{} Block: Manages asset packages.

      +
        +
      • forceExplicitList: Enables explicit package list usage.

        +
          +
        • outer_space{} Block: Specifies settings for the OuterSpace +package.

        • +
        • outer_space_hq{} Block: Specifies settings for the high-quality +OuterSpace package.

        • +
        +
      • +
      +
    • +
    • stripPrefix: Specifies the prefix to strip from all package file paths.

    • +
    • addTexPrefix: Defines the prefix to add for texture packages.

    • +
    • packlist: Specifies the pack list file to maintain the current list of +valid packs.

    • +
    • defaultDdsxTexPack: Defines the default DDSX (DirectDraw Surface) +texture pack file.

    • +
    • rtMipGenAllowed: Disables real-time mipmap generation.

    • +
    • folderDefaults{} Block: Specifies default settings for directories when +certain properties are not explicitly defined for a specific directory.

      +
        +
      • ddsxTexPack: Defines that if a directory does not have an explicitly +defined ddsxTexPack, it can inherit this property from its parent +directory.

      • +
      • gameResPack: Defines that if a directory does not have an explicitly +defined gameResPack, it can inherit this property from its parent +directory.

      • +
      +
    • +
    • plugins{} Block: Specifies the locations of export plugins.

      +
        +
      • folder: Path to the directory.

      • +
      +
    • +
    • perTypeDest{} Block: Defines destination packages for specific asset +types.

    • +
    +
  • +
  • perTypeDest{} Block: Manages destination settings per asset type.

    +
      +
    • package{} Block: Specifies package settings.

      +
        +
      • pack{} Block: Specifies pack settings.

        +
          +
        • tifMask: Indicates that assets related to mask textures are grouped +into the certain package.

        • +
        • land: Indicates that assets related to landscape elements are +grouped into the certain package.

        • +
        • collision: Indicates that assets related to collision detection are +grouped into the certain package.

        • +
        +
      • +
      +
    • +
    +
  • +
  • impostor{} Block: Defines settings for impostor rendering (simplified +representations of complex objects to improve performance).

    +
      +
    • data_folder: Specifies the directory for impostor data.

    • +
    • aoBrightness: Adjusts ambient occlusion brightness.

    • +
    • aoFalloffStart: Sets the start distance for ambient occlusion falloff.

    • +
    • aoFalloffStop: Sets the stop distance for ambient occlusion falloff.

    • +
    • preshadowEnabled: Enables pre-shadowing.

    • +
    • textureQualityLevels{} Block: Defines texture quality levels.

      +
        +
      • qualityLevel{} Block: Quality levels based on:

        +
          +
        • minHeight: Defines minimum height.

        • +
        • textureHeight: Defines texture height.

        • +
        +
      • +
      +
    • +
    +
  • +
  • build{} Block: Configures general build settings.

    +
      +
    • maxJobs: Maximum number of build jobs.

    • +
    • stateGraph{} Block: Defines state graph settings.

      +
        +
      • cppOutDir: Specifies the output directory for state graph C++ files.

      • +
      +
    • +
    • dynModel{} Block: Sets parameters for dynamic models.

      +
        +
      • descListOutPath: Specifies the output path for the description list of +dynamic models.

      • +
      • separateModelMatToDescBin: Enables storing of model materials +separately in the description binary file.

      • +
      • ignoreMappingInPrepareBillboardMesh: Enables ignoring texture mapping +during the preparation of billboard meshes.

      • +
      • enableMeshNodeCollapse: Enables the collapsing of mesh nodes.

      • +
      • maxBonesCount: Sets the maximum number of bones that can be used in +the skeletal animation of a dynamic model.

      • +
      • setBonePerVertex: Specifies the number of bones influencing each +vertex.

      • +
      • maxVPRConst: Sets the maximum number of vertex shader constant +registers.

      • +
      • useDirectBones: Enables the use of direct bone transformations.

      • +
      • remapShaders{} Block: Maps original shader names to new or alternative +shaders, provides specific remapping rules, and optionally denies certain +shaders from being used.

        +
          +
        • denyShaders{} Block: Specifies a regular expression to deny shaders +whose names match the pattern.

        • +
        • bat_shader: Sets mapping for bat_shader.

        • +
        • rendinst_simple: Sets mapping for rendinst_simple.

        • +
        • rendinst_simple_glass: Sets mapping for rendinst_simple_glass.

        • +
        • glass: Sets mapping for glass.

        • +
        • glass_refraction: Sets mapping for glass_refraction.

        • +
        • simple: Sets mapping for dynamic_simple.

        • +
        • dynamic_simple: Sets mapping for dynamic_simple.

        • +
        • dynamic_null:: Sets mapping for dynamic_null.

        • +
        • propeller_front: Sets mapping for propeller_front.

        • +
        • propeller_side: Sets mapping for propeller_side.

        • +
        • dynamic_glass_chrome: Sets mapping for dynamic_glass_chrome.

        • +
        • dynamic_masked_chrome: Sets mapping for dynamic_masked_chrome.

        • +
        • dynamic_masked_glass_chrome: Sets mapping for +dynamic_masked_glass_chrome.

        • +
        • dynamic_illum: Sets mapping for dynamic_illum.

        • +
        • dynamic_mirror: Sets mapping for dynamic_mirror.

        • +
        • dynamic_alpha_blend: Sets mapping for dynamic_alpha_blend.

        • +
        • glass_crack: Sets mapping for glass_crack.

        • +
        • collimator: Sets mapping for collimator.

        • +
        • aces_weapon_fire: Sets mapping for aces_weapon_fire.

        • +
        • land_mesh_combined: Sets mapping for land_mesh_combined.

        • +
        • land_mesh_combined_2x: Sets mapping for land_mesh_combined_2x.

        • +
        • random_grass: Sets mapping for random_grass.

        • +
        • tracer_head: Sets mapping for tracer_head.

        • +
        • gi_black: Sets mapping for gi_black.

        • +
        +
      • +
      +
    • +
    • rendInst{} Block: Configures render instance settings, shader remapping, +and material processing.

      +
        +
      • ignoreMappingInPrepareBillboardMesh: Enables ignoring the mapping when +preparing billboard meshes.

      • +
      • descListOutPath: Specifies the output path for the descriptor list of +rendering instances.

      • +
      • impostorParamsOutPath: Specifies the output path for impostor +parameters.

      • +
      • separateModelMatToDescBin: Enables separating the model materials into +a descriptor binary.

      • +
      • forceRiExtra: Enables the inclusion of extra rendering instance data.

      • +
      • remapShaders{} Block: Maps original shader names to new or alternative +shaders, similar to the remapShaders{} Block in the dynModel{} Block.

      • +
      • processMat{} Block: Specifies material processing settings.

      • +
      +
    • +
    • collision{} Block: Defines settings for collision data.

      +
        +
      • preferZSTD: Enables a preference for ZSTD compression algorithm.

      • +
      • writePrecookedFmt: Enables writing the collision data in a pre-cooked +format.

      • +
      +
    • +
    • skeleton{} Block: Defines settings for skeleton data compression.

      +
        +
      • preferZSTD: Enables a preference for ZSTD compression algorithm.

      • +
      +
    • +
    • a2d{} Block: Defines settings for 2D assets data compression.

      +
        +
      • preferZSTD: Enables a preference for ZSTD compression algorithm.

      • +
      +
    • +
    • tex{} Block: Defines texture settings.

      +
        +
      • defMaxTexSz: Sets the default maximum texture size.

      • +
      • iOS{} Block: Configures settings for iOS platform.

        +
          +
        • defMaxTexSz: Sets the maximum texture size.

        • +
        +
      • +
      • and{} Block: Configures settings for Android platform**

        +
          +
        • defMaxTexSz: Sets the maximum texture size.

        • +
        +
      • +
      +
    • +
    • physObj{} Block: Configures physical object properties.

      +
        +
      • ragdoll{} Block: Specifies ragdoll physics for characters.

        +
          +
        • def_density: Sets the default density.

        • +
        • def_massType: Defines the default mass type.

        • +
        • def_collType: Specifies the default collision type.

        • +
        • name_full{} Block: Defines the physical properties and constraints +for the whole character.

        • +
        • name_tail{} Block: Specifies the joints for different parts of the +characters body.

          +
            +
          • “ Pelvis”{} Block

            +
              +
            • Joint{} Block

              +
                +
              • type: Defined joint type.

              • +
              • minLimit: Minimum rotational limits for the joint in X, Y, and +Z axes.

              • +
              • maxLimit: Maximum rotational limits for the joint in X, Y, and +Z axes.

              • +
              • Damping: Controls how quickly the joint’s motion slows down.

              • +
              • Twist Damping: Specified damping applied to rotational movements.

              • +
              +
            • +
            +
          • +
          • “ Spine1”{} Block

            +
              +
            • Joint{} Block

              +
                +
              • type: Defined joint type.

              • +
              • minLimit: Minimum rotational limits for the joint in X, Y, and +Z axes.

              • +
              • maxLimit: Maximum rotational limits for the joint in X, Y, and +Z axes.

              • +
              • Damping: Controls how quickly the joint’s motion slows down.

              • +
              • Twist Damping: Specified damping applied to rotational +movements.

              • +
              +
            • +
            +
          • +
          • “ R Calf”{} Block

            +
              +
            • Joint{} Block

              +
                +
              • type: Defined joint type.

              • +
              • minLimit: Minimum rotational limits for the joint in X, Y, and +Z axes.

              • +
              • Damping: Controls how quickly the joint’s motion slows down.

              • +
              +
            • +
            +
          • +
          • “@clone-last: L Calf”{} Block: Clones the settings from the "R Calf" joint for the left calf.

          • +
          • “ R Foot”{} Block

            +
              +
            • Joint{} Block

              +
                +
              • type: Defined joint type.

              • +
              • minLimit: Minimum rotational limits for the joint in X, Y, and +Z axes.

              • +
              • maxLimit: Maximum rotational limits for the joint in X, Y, and +Z axes.

              • +
              • Damping: Controls how quickly the joint’s motion slows down.

              • +
              • Twist Damping: Specified damping applied to rotational +movements.

              • +
              +
            • +
            +
          • +
          • “@clone-last: L Foot”{} Block: Clones the settings from the "R Foot" joint for the left foot.

            +
              +
            • Override{} Block: Overrides the parameters.

              +
                +
              • swapLimZ: Swaps the limits for the Z-axis.

              • +
              +
            • +
            +
          • +
          • “ Neck”{} Block

            +
              +
            • Joint{} Block

              +
                +
              • type: Defined joint type.

              • +
              • minLimit: Minimum rotational limits for the joint in X, Y, and +Z axes.

              • +
              • maxLimit: Maximum rotational limits for the joint in X, Y, and +Z axes.

              • +
              • Damping: Controls how quickly the joint’s motion slows down.

              • +
              • Twist Damping: Specified damping applied to rotational +movements.

              • +
              +
            • +
            +
          • +
          • “ Head”{} Block

            +
              +
            • Reference: References the neck bone for alignment.

            • +
            • Joint{} Block

              +
                +
              • type: Defined joint type.

              • +
              • minLimit: Minimum rotational limits for the joint in X, Y, and +Z axes.

              • +
              • maxLimit: Maximum rotational limits for the joint in X, Y, and +Z axes.

              • +
              • Damping: Controls how quickly the joint’s motion slows down.

              • +
              • Twist Damping: Specified damping applied to rotational +movements.

              • +
              +
            • +
            +
          • +
          +
        • +
        • def_helper{} Block: Sets default helper settings.

          +
            +
          • physObj: Enables treating object as a physical object.

          • +
          • animated_node: Enables treating object as an animated node.

          • +
          +
        • +
        • twist_ctrl{} Block: Specifies the configuration for controlling the +twisting motion of certain bones in the character’s rig.

          +
            +
          • node0: Specifies the starting bone or node for the twist control.

          • +
          • node1: Specifies the ending bone or node for the twist control.

          • +
          • twistNode: Defines the node that will handle the twisting effect +between node0 and node1.

          • +
          • twistNode: An additional twist node, which might be used to +enhance or refine the twisting effect.

          • +
          • angDiff:: Specifies the angular difference or rotation applied to +the twist nodes.

          • +
          +
        • +
        +
      • +
      +
    • +
    • lshader{} Block: Manages the location of shader subgraphs.

      +
        +
      • subgraphsFolder: Specifies the folder path where shader subgraphs are +stored.

      • +
      +
    • +
    • preferZSTD: Enables settings for ZSTD compression.

    • +
    • preferZLIB: Enables settings for ZLIB compression.

    • +
    • writeDdsxTexPackVer: Sets the version for writing DDS texture packs.

    • +
    • writeGameResPackVer: Sets the version for writing game resource packs.

    • +
    +
  • +
+
+
+

level_metrics{} Block

+

Defines metrics for levels and plugins.

+
    +
  • whole_level{} Block: Maximum sizes and counts for textures and level data.

    +
      +
    • textures_size: Maximum total size of textures allowed for the entire +level.

    • +
    • level_size: Maximum total size of the level data.

    • +
    • textures_count: Maximum number of textures allowed in the level.

    • +
    +
  • +
  • plugin{} Block: Metrics for collision plugins.

    +
      +
    • name:t=“Collision”: Name of the plugin or category. In this case, it +pertains to collision data.

    • +
    • max_size: Maximum size of collision data allowed.

    • +
    +
  • +
  • plugin{} Block: Metrics for occluders plugins.

    +
      +
    • name:t=“Occluders”: Name of the plugin or category related to +occluders.

    • +
    • max_triangles: Maximum number of triangles allowed for occluder data.

    • +
    +
  • +
  • plugin{} Block: Metrics for environment plugins.

    +
      +
    • name:t=“Environment”: Name of the plugin or category related to +environment data.

    • +
    • max_faces: Maximum number of faces allowed in the environment data.

    • +
    • znear_min: Minimum value for the near clipping plane in the +environment’s rendering setup.

    • +
    • znear_max: Maximum value for the near clipping plane.

    • +
    • zfar_min: Minimum value for the far clipping plane in the environment’s +rendering setup.

    • +
    • zfar_max: Maximum value for the far clipping plane.

    • +
    • z_ratio_max: Maximum ratio of the distance between far and near clipping +planes to the near clipping plane.

    • +
    +
  • +
+
+
+

genObjTypes{} Block

+

Lists general object types.

+
    +
  • type: Various object types used by the tools.

  • +
+
+
+

dagored_visibility_tags{} Block

+

Configures visibility tags for different plugins.

+
    +
  • plugin{} Block: Names of plugins and their associated tags for visibility.

  • +
+
+
+

dagored_disabled_plugins{} Block

+

Lists plugins that are disabled.

+
    +
  • disable: Names of plugins that are disabled in the editor.

  • +
+
+
+

daEditorExportOrder{} Block

+

Defines the order in which various game elements and assets are exported by the +editor. This ensures that dependencies are resolved and that assets are +processed in the correct sequence.

+
    +
  • plugin: Specifies the plugins used by the editor in a specific sequence.

  • +
+
+
+

lightmap{} Block

+

Configures settings for generating lightmaps, which are precomputed lighting +information used for static objects.

+
    +
  • High{} Block: A quality preset defining the number of passes and settings +per light.

    +
      +
    • passes: Number of passes or iterations for generating the lightmap.

    • +
    • cub5: Enables using the 5-face cubemaps.

    • +
    • perLight: Enables generating lightmaps per each light source.

    • +
    • map{} Block: Defines the settings for the lightmap textures, specifies +the resolution of the lightmaps used.

      +
        +
      • size: Size of the lightmap texture.

      • +
      +
    • +
    +
  • +
+
+
+

projectDefaults{} Block

+

Defines default project-wide settings.

+
    +
  • disableGrass: Enables grass rendering.

  • +
  • gpuGrass: Enables grass rendering on the GPU

    +
      +
    • riMgr{} Block: Configures settings for render instance management.

      +
        +
      • type: Specifies the type of render instance manager to use.

      • +
      • gridCellSize: Sets the size of the grid cell for rendering instances.

      • +
      • subGridSize: Defines the size of the sub-grid within the main grid.

      • +
      • minGridCellSize: Sets the minimum size for a grid cell.

      • +
      • minGridCellCount: Specifies the minimum number of grid cells.

      • +
      • writeOptTree: Enables the writing of an optimized tree for rendering +instances.

      • +
      • packedRIBB: Enables packed render instance bounding boxes.

      • +
      • gen{} Block: Configures generation settings for different platforms.

        +
          +
        • PC, and, iOS: Enables generation for PC, Android, and iOS.

        • +
        +
      • +
      • tmInst12x32bit: Enables a specific rendering instance mode.

      • +
      • maxRiGenPerCell: Sets the maximum number of render instances generated +per each cell.

      • +
      • perInstDataDwords: Specifies the number of DWORDs per instance data.

      • +
      • perInstDataUseSeed: Enables the use of seed data for instances.

      • +
      +
    • +
    • prefabMgr{} Block: Configures the prefab manager for handling reusable +game objects.

      +
        +
      • clipmapShaderRE: Defines a regular expression for selecting shaders +related to clipmaps.

      • +
      +
    • +
    • envi{} Block: Environment settings, including sky rendering and weather +types.

      +
        +
      • type: Specifies the type of environment.

      • +
      • znear: Sets the near clipping plane distance.

      • +
      • zfar: Sets the far clipping plane distance.

      • +
      • skiesFilePathPrefix: Defines the file path prefix for sky-related +files.

      • +
      • skiesWeatherTypes: Specifies the file for weather types.

      • +
      • skiesPresets: Defines the file pattern for weather presets.

      • +
      • skiesGlobal: Sets the global environment file.

      • +
      • daSkiesDepthTex: Specifies the depth texture for the skies.

      • +
      • enviNames: Enables specific environment names.

        +
          +
        • morning: Enables morning environment.

        • +
        • day: Enables day environment.

        • +
        • evening: Enables evening environment.

        • +
        • night: Enables night environment.

        • +
        +
      • +
      • skies: Placeholder for additional sky settings.

      • +
      +
    • +
    • hmap{} Block: Heightmap settings for terrain.

      +
        +
      • type: Specifies the type of heightmap to use.

      • +
      +
    • +
    • scnExport{} Block: Export settings for scenes.

      +
        +
      • removeInsideFaces: Enables removing inner faces during scene export.

      • +
      +
    • +
    • preferZSTD: Enables a preference for ZSTD compression algorithm.

    • +
    • preferZLIB: Enables a preference for ZLIB compression algorithm.

    • +
    +
  • +
+
+
+

shader_glob_vars_scheme{} Block

+

Global shader variables configuration.

+
    +
  • common{} Block: Common settings for shaders.

    +
      +
    • assetViewer{} Block: Specific settings for the Asset Viewer, including +anti-aliasing options.

      +
        +
      • caption: Defines the caption or label for a setting within the Asset +Viewer.

      • +
      • show_no_aa: Controls the display of assets without anti-aliasing.

      • +
      +
    • +
    +
  • +
+
+
+

heightMap{} Block

+

Configures settings for heightmaps, which define terrain elevation and other +surface details.

+
    +
  • useMeshSurface: Enables mesh surface using for height map generation.

  • +
  • requireTileTexe: Enables tile textures required for height maps.

  • +
  • hasColorTex: Enables color textures presenting in the height map.

  • +
  • hasLightmapTex: Enables lightmap textures presenting in the height map.

  • +
  • storeNxzInLtmapTex: Enables storing normal and height (NxZ) data in the +lightmap texture.

  • +
  • genFwdRadius: Defines the forward radius for height map generation.

  • +
  • genBackRadius: Defines the backward radius for height map generation.

  • +
  • genDiscardRadius: Defines the discard radius for height map generation.

  • +
  • landClassLayers{} Block: Defines various layers used in height maps. Each +layer specifies its properties and attributes.

    +
      +
    • layer{} Block: Represents a distinct layer in the height map.

      +
        +
      • name: The name of the layer.

      • +
      • bits: The bit width for this layer.

      • +
      • attr: The attribute associated with this layer.

      • +
      +
    • +
    +
  • +
  • lightmapCvtProps{} Block: Defines properties for converting lightmaps. +This includes format settings, swizzling, addressing, mipmap levels, and gamma +correction.

    +
      +
    • fmt: The format for the lightmap texture.

    • +
    • swizzleARGB: The swizzling pattern for the lightmap texture.

    • +
    • addr: The addressing mode for the lightmap texture.

    • +
    • hqMip; mqMip; lqMip: Mipmap levels for high, medium, and low +quality.

    • +
    • gamma: The gamma correction value.

    • +
    • iOS{} Block, and{} Block: Platform-specific format settings.

    • +
    +
  • +
+
+
+

additional_platforms{} Block

+

Lists additional platforms for which the tools are configured.

+
    +
  • platform: Specifies the platform.

  • +
+
+
+

parameters{} Block

+

Defines general parameters for the tools.

+
    +
  • maxTraceDistance: Maximum distance for tracing operations, such as ray +casting.

  • +
+
+
+

AssetLight{} Block

+

Configures lighting assets, including dynamic cube textures and level of detail +(LOD) settings.

+
    +
  • shader_var: Shader variable for dynamic cube textures.

  • +
  • blur_lods: Enables LOD blurring.

  • +
  • bound_with_camera: Enables binding the lighting to the camera.

  • +
+
+
+

defProjectLocal{} Block

+

Defines local project settings, particularly camera control settings for +different types of camera modes.

+
    +
  • freeCamera{} Block: Configures settings for a free-moving camera, +typically used for debugging or exploration purposes.

    +
      +
    • move_step: The step size for camera movement.

    • +
    • strife_step: The step size for strafing movement.

    • +
    • control_multiplier: The multiplier for camera control, affecting how +responsive the camera is to input.

    • +
    +
  • +
  • maxCamera{} Block: Configures settings for a maximum control camera, which +might be used for more precise control.

    +
      +
    • move_step: The step size for camera movement.

    • +
    • strife_step: The step size for strafing movement.

    • +
    • control_multiplier: The multiplier for camera control, offering more +fine-grained control compared to the freeCamera settings.

    • +
    +
  • +
+
+
+

animCharView{} Block

+

Defines variables and first-person shooter (FPS) views for character animation.

+
    +
  • vars{} Block: Contains various enumerations and ranges for character +states and animations. These settings allow for detailed control over +character behavior and animation.

    +
      +
    • weapon_mod_state{} Block: Enumeration for weapon modification states.

    • +
    • weapon_selected{} Block: Enumeration for selected weapons.

    • +
    • vehicle_selected{} Block: Enumeration for selected vehicles.

    • +
    • seat_type{} Block: Enumeration for seat types.

    • +
    • heal_item_selected{} Block: Enumeration for selected healing items.

    • +
    • weap_state{} Block: Enumeration for weapon states.

    • +
    • pos_state{} Block: Enumeration for position states.

    • +
    • move_state{} Block: Enumeration for movement states.

    • +
    • move_ang{} Block: Defines the angle range for movement with minimum, +maximum, and step values.

    • +
    • pers_course{} Block: Defines the personal course angle with minimum, +maximum, and step values.

    • +
    • aim_pitch{} Block: Defines the aim pitch angle with minimum, maximum, +and step values.

    • +
    • torso_lean{} Block: Defines the torso lean angle with minimum, maximum, +and step values.

    • +
    • torso_rotate{} Block: Defines the torso rotation angle with minimum, +maximum, and step values.

    • +
    • bolt_action{} Block: Progress for bolt action with a trackbar for UI +representation.

    • +
    • reload_progress{} Block: Progress for reloading with a trackbar for UI +representation.

    • +
    • reload_style{} Block: Enumeration for reload styles.

    • +
    • single_reload_progress{} Block: Progress for single reload with a +trackbar for UI representation.

    • +
    • single_reload_state{} Block: Enumeration for single reload states.

    • +
    • device_progress{} Block: Progress for device usage with a trackbar for +UI representation.

    • +
    • device_state{} Block: Enumeration for device states.

    • +
    • deflection_progress{} Block: Progress for deflection with a trackbar for +UI representation.

    • +
    • deflect_angle{} Block: Angle for deflection with a trackbar for UI +representation.

    • +
    • l.hand_ik_mul{} Block: Multiplier for left-hand IK with a trackbar for +UI representation.

    • +
    • r.hand_ik_mul{} Block: Multiplier for right-hand IK with a trackbar for +UI representation.

    • +
    • changeweapon_progress{} Block: Progress for changing weapons with a +trackbar for UI representation.

    • +
    • throw_progress{} Block: Progress for throwing with a trackbar for UI +representation.

    • +
    • action_progress{} Block: Progress for actions with a trackbar for UI +representation.

    • +
    • recover_progress{} Block: Progress for recovery with a trackbar for UI +representation.

    • +
    • gesture_progress{} Block: Progress for gestures with a trackbar for UI +representation.

    • +
    +
  • +
  • fps_view{} Block: Define the first-person shooter views for different +scenarios.

    +
      +
    • name: Name of the view.

    • +
    • node: Node to attach the camera.

    • +
    • camOfs: Camera offset.

    • +
    • camAxis: Camera axis.

    • +
    • camUpAxis: Camera up axis.

    • +
    • fixed_dir: Whether the direction is fixed.

    • +
    • pitch_param: Parameter for pitch.

    • +
    • yaw_param: Parameter for yaw.

    • +
    • znear: Near clipping plane.

    • +
    • zfar: Far clipping plane.

    • +
    • hideNodes{} Block: Nodes to hide during rendering.

    • +
    +
  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/all-about-blk/composit_blk.html b/assets/all-about-blk/composit_blk.html new file mode 100644 index 000000000..4322495b1 --- /dev/null +++ b/assets/all-about-blk/composit_blk.html @@ -0,0 +1,1553 @@ + + + + + + + .composit.blk — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

.composit.blk

+
+

What is a Composite Object?

+

A composite object is not an object, but a text file in the .blk format, which +contains a list of reference objects and some of their parameters. These files +are named according to specific conventions and always include one of the +following suffixes:

+
    +
  • _cmp.composit.blk: Simple composite object.

  • +
  • _random.composit.blk: Composite object with randomness (replacing objects or +making objects disappear).

  • +
  • _gameobj.composit.blk: Composite object containing game objects.

  • +
+

The primary purpose of composite objects is to simplify the work of level +designers. For example, they can assemble a house with interior elements without +manually placing each element every time.

+

From the game’s perspective, there is no difference between objects placed +individually or by a composite object. In the game, all objects from the +composite file are loaded as independent objects.

+
+

Note

+

The game engine does not recognize composite objects; they are solely +for convenience in arranging and editing sets of objects on a map. Only the +objects themselves (render instances, prefabs, etc.) are exported into the game +level. Composite files (.blk files) are not used beyond the editor.

+
+
+
+

Contents of .composit.blk Files

+

Composite objects consist of an enumeration of objects with certain parameters:

+
    +
  • Object names.

  • +
  • Placement coordinates.

  • +
  • Probability of including an object (or replacing it with another or with an +empty space).

  • +
+
+
+

Example of Declaring a Single Object

+
className:t="composit"
+node{
+  name:t="obj_name:rendInst"
+  tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]]
+}
+
+
+

In this example:

+
    +
  • className:t=“composit”: Indicates that this .blk file will be treated as +a composite by the engine.

  • +
  • node{}: Represents an individual building block of our composite object +(node). Ensure all curly braces are correctly matched; a missing or extra +brace will break the composite.

  • +
  • name:t=“obj_name:rendInst”: Specifies the name and type of the node. Here, +“obj_name” is a render instance.

  • +
+

If there are no “duplicates” (objects with the same name but different types), +you can simply specify the name without a type:

+
name:t="obj_name"
+
+
+

This simple naming indicates the object’s placement at specified coordinates +without additional parameters like disappearance or replacement.

+

By all means, you shouldn’t have any cases when type specification is necessary: +it is required only when there are full namesakes of different types, for +example “asset:rendinst” (asset.lod00.dag), “asset:composit” +(asset.composit.blk) and “asset:prefab” (asset.dag), which should not be +done at all.

+

If there are no namesakes, it is sufficient to record without specifying the +type: name:t="obj_name".

+

This is a simple object name. Simple in the sense that we can’t do anything with +it (set the probability of disappearance, substitution by another object, etc.). +We just say that there is such an object at such coordinates. If this string is +missing or name:t="", then the node will be “empty” – no asset will be drawn +in it.

+

We can set here either a rendInst, a composite or a game object (discussed +below). Composite doesn’t care what it refers to – it’s just a text file with a +list of objects placed in certain places. Names are given without extensions. +That is, instead of table_a.lod00.dag, you should just specify table_a. Or, +instead of table_a_plates_cmp.composit.blk, we set table_a_plates_cmp.

+
+

Warning

+

For the tools, the asset that was found earlier is prioritized. For example, +from two objects in the same directory table_a.composit.blk and +table_a.lod00.dag the engine will call table_a.composit.blk (in alphabetical +order .composit will be found before .lod), but if the composite, for +example, is in the subdirectory “/composits/”, then the first will be the +.lod. Thus, simply rearranging resources in a new way can break a +compositor referring to “namesakes” without an explicitly specified type.

+

For this reason, it is often an error when a composite refers to a .dag of +the same name. That is, a table_a rendInst is specified inside +table_a.composit.blk. The engine will not call the table_a rendInst – it +will call the table_a composite. Because of this, we get into recursion +(when an object refers to itself an infinite number of times).

+

So always call composites by content. For example, +is_table_a_dinner_chairs_cmp.composit.blk (a dining table with chairs), or +is_book_case_shelf_0_7m_a_cmp.composit.blk (a 0.7-meter shelf for a bookcase).

+

However, there are still situations when you want to set the same names. For +example, we already have table_a (rendInst) in multiple places. And, after 2 +years, it became necessary to put plates on it.

+

We can make a composite table_a_plates_cmp.composit.blk, in which to add +plates and replace it in these multiple places (and then overwrite it with +future edits).

+
+

This is the matrix of the object:

+
tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]]
+
+
+
+

Note

+

This is a matrix, not an indication of the object’s rotation in degrees or +scales in percent. Do not try to pick up parameters through a text editor. +They should be generated by a script or obtained when creating a composite +object in one of the editors. Only the last block of the matrix is the position +of the object in space, in meters. This block can be edited through a text +editor.

+
+

If no matrix is specified at all, it will be equal to the one above. Zero +offsets and rotation, unit size.

+
+

Note

+

The matrix specifies the transforms relative to the parent of our node. +In the example above, the parent is the composite itself, i.e. the offset is +specified relative to the pivot of the entire composite. However, this is not +always the case. More on this later.

+
+
+
+

Example of Declaring a Random Node

+

If we want one of several variants to be placed in the specified coordinates +instead of one particular asset, then we need to specify the node differently.

+
node{
+  ent{
+    name:t="obj_name1"; weight:r=1;
+  }
+  ent{
+    name:t="obj_name2"; weight:r=1;
+  }
+}
+
+
+

Here, instead of always having the same asset, we randomly choose one of the two +with equal probability. There can also be other parameters inside node{}, such +as a matrix. Only "name:t" cannot be specified at the same time as ent{}.

+
ent{}
+
+
+

This is how an entity block is allocated – there can be several of them +inside a node, but only one at a time will be output.

+

Accordingly, if we specify only one ent{} block, we will get exactly the same +result as in the first example. There is always only one option to choose from.

+

Inside there is already familiar to us parameter name:t, which works exactly +the same way as in nodes. In addition, a new parameter weight:r has been +added. If the parameter was not specified, it would be equal to 1 by default.

+

The higher its value is compared to the weight of other nodes, the higher +the probability that random will choose this option. The weight can be written +in any “dimension” – 0.0001 or 1000 – it is not the number itself that matters, +but how much it is greater/lower than the weight of its neighbors. We specify +the values that are easier to perceive.

+
+

Note

+

Unlike nodes, entities do not have their own matrix and other parameters. Only +the name and weight. The rest of the parameters are taken from the node in which +they are located.

+
+

The syntax allows you to separate entity parameters not only by semicolon, but +also by jumping to the new line. The two methods in the example below are +equivalent. Tabulation is used only to improve readability, in fact it will work +without indentation, and all blocks are separated only by curly braces.

+
ent{name:t="obj_name"; weight:r=1;}
+
+ent{
+  name:t="obj_name"
+  weight:r=1
+}
+
+
+

When creating a random node in a text editor, the second option may be more +convenient if the entity name is very long.

+

What should we do if we want to sometimes not spawn anything? Add the empty +entity mentioned earlier. As we remember, an empty name or no name:t parameter +will give us an empty node:

+
node{
+  ent{
+    name:t="obj_name1"; weight:r=1;
+  }
+  ent{
+    name:t="obj_name2"; weight:r=1;
+  }
+  ent{
+    name:t=""; weight:r=2;
+  }
+}
+
+
+

Now half the time nothing is drawn, because the weight of the empty node is +equal to the total weight of the other entities.

+
+

Note

+

If you have built a composite that randomizes a single node (e.g. a chair to a +similar one) – it’s a must to give it a name *_random.composit.blk – a simple +composite object.

+
+

It will work without it. But this composite will be arranged by a human, and the +search needs a meaningful name that explains what is inside without having to +open each .blk and check the contents.

+
+
+

Example of Declaring Multiple Objects

+

Let’s reinforce our knowledge by going through the same steps multiple times. In +practice, it’s unnecessary to use different node formats side by side (as it can +complicate readability), but each method works.

+
className:t="composit"
+
+// Standard object declaration. Without a specified matrix, it will have zero
+rotation, zero offset, and a scale of `1`:
+
+node{
+  name:t="obj_name0"
+}
+
+// Random entity with a single option behaves the same as the block above.
+The "default" matrix is identical to its absence:
+
+node{
+  ent{
+    name:t="obj_name1"; weight:r=1;
+  }
+  tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]]
+}
+
+// One of the objects or nothing is chosen with equal probability:
+
+node{
+  ent{
+    name:t="obj_name2" // Parameters can be separated by line breaks.
+    weight:r=1
+  }
+  ent{
+    name:t="obj_name3"; weight:r=1; // Or by semicolons.
+  }
+  ent{
+    name:t=""; weight:r=1;
+  }
+  tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]]
+}
+
+
+
+
+

Example of Declaring Random Transforms

+

As we discussed earlier, using a different format is required to select from +multiple entities. The process is similar for random object placement – rather +than a matrix, we use special parameters:

+
+

Available Parameters for Randomization

+
node{
+  offset_x:p2=0, 0
+  offset_y:p2=0, 0
+  offset_z:p2=0, 0
+  rot_x:p2=0, 0
+  rot_y:p2=0, 0
+  rot_z:p2=0, 0
+  scale:p2=1, 0
+  yScale:p2=1, 0
+}
+
+
+

All the parameters are optional but cannot be used simultaneously with a +matrix. If a matrix is specified, any of these will be ignored.

+
    +
  • offset_*:p2 - Specifies the object’s position along the corresponding axes in +meters. Replace the * with the axis letter. The first value is the absolute +offset, and the second is the allowed deviation in both directions after that. +For example, a value of 3, 0.5 means the final coordinate will be between +2.5 and 3.5 meters. If unspecified, it defaults to 0, 0.

  • +
  • rot_*:p2 - Similarly specifies rotation in degrees. To set any random +rotation around an axis, just input 0, 180 – random values will cover a full +rotation around the axis (from −180° to 180°). Defaults to 0, 0 if +unspecified.

  • +
  • yScale:p2 - Unlike rotation and offset, scaling on all axes cannot be +randomized independently. The exception is the Y-axis, which points upward in +Dagor. The first value is the initial scale, and the second is the deviation. +Defaults to 1, 0 if unspecified.

  • +
  • scale:p2 - Uniform scaling on all axes. Defaults to 1, 0 and can be used +alongside Y-axis scaling.

  • +
+
+
+

Random Transforms for Multiple Composites Simultaneously

+

The example above is inconvenient when controlling multiple composites +simultaneously, such as creating randomly slightly open windows using multiple +rendering instances for visual variety. Each shutter could be assigned its +random rotation parameter, but making adjustments would be cumbersome. To change +the angle, you’d have to go through all references to these shutters in every +composite – slow and prone to error. To avoid this, parameters can be placed in +a separate .blk.

+
+
+

Structure of a File with Random Transforms and Naming Conventions

+

Technically, the composite will accept any name, but since people will work with +them, the file name should be meaningful. Common suffixes are _rot.blk for +rotations, _offset.blk for offsets, or _transform.blk for both in a general +file. If some objects have left and right versions with different rotation +directions, add the suffixes _l and _r accordingly.

+

For example, for left window shutters, it makes sense to create a file +_shutter_rot_l.blk with:

+
rot_y:p2=85, 5
+rot_z:p2=0, 0.8
+
+
+

And for the right ones, _shutter_rot_r.blk with the corresponding rotations +for the right side. This file can then be included in the composite of the +shutter, for example, +name_city_house_window_shutter_1200x1900_a_l_cmp.composit.blk:

+
className:t="composit"
+
+node{
+  name:t="name_city_house_window_shutter_1200x1900_a_l"
+  include "_shutter_rot_l.blk"
+}
+
+
+
+

Important

+
    +
  • The path to the _shutter_rot_l.blk file is absolute. In the example above, +the including file is in the same directory as the composite. If you place this +file elsewhere, specify the full path in the command line format.

  • +
  • We are effectively substituting the shutter’s .dag file +name_city_house_window_shutter_1200x1900_a_l.lod00.dag with a composite that +has a random rotation, +name_city_house_window_shutter_1200x1900_a_l_cmp.composit.blk. This means we +include this _shutter_rot_l.blk in the composite of a single shutter – nothing +else is there. This is the composite that will later be placed in the windows, +instead of the shutter itself.

  • +
+
+
+
+

Why Use Includes in Nested Composites?

+
    +
  • Priority of the Matrix: Remember, the matrix has a higher priority. If the +node is not at the “zero” of the composite, the only way to change its +position is through random offset parameters along the unused axes.

  • +
  • Avoid Doing This in the “Outer” Composite, Though It Works:

  • +
+
className:t="composit"
+node{
+  name:t="name_city_house_window_shutter_1200x1900_a_l"
+  include "_shutter_rot_l.blk"
+  offset_y:p2=0.7, 0
+  offset_x:p2=1, 0
+  offset_z:p2=2, 0
+}
+node{
+  name:t="name_city_house_window_shutter_1200x1900_a_l"
+  include "_shutter_rot_l.blk"
+  offset_y:p2=0.7, 0
+  offset_x:p2=1, 0
+  offset_z:p2=-2, 0
+}
+
+
+

This will work and move the shutter to the specified coordinates, but all +editors currently operate with matrices by default – exporting transforms this +way won’t be possible. Positioning with this way is only feasible through +blind manual .blk editing – not the most convenient or fastest method.

+
    +
  • Potential for Duplicate Transformations: Without seeing the contents of +the included .blk, it’s easy to duplicate non-visible transformations, which +can lead to bugs. Each include is replaced on the fly with the contents of +the specified file. If a parameter is specified twice, only the first instance +will be applied.

  • +
+

Here’s how inattentiveness can break things:

+
className:t="composit"
+node{
+  name:t="name_city_house_window_shutter_1200x1900_a_l"
+  rot_y:p2=90, 0  // First transformation specified before include, shutter will
+  include "_shutter_rot_l.blk" // always stick at 90°, ignoring Y randomization
+}
+node{
+  name:t="name_city_house_window_shutter_1200x1900_a_l"
+  include "_shutter_rot_l.blk"
+  rot_y:p2=90, 0 // Second declaration of a parameter already present in the
+                 // include – attempting to rotate an additional 90° on Y will
+                 // be ignored.
+}
+
+
+
+
+
+

Example of Node Hierarchy in Composites

+

Inside the node{} block, there can be more than just a list of its parameters. +Another node{} can be placed inside. In this case, the inner node is +considered a child, and its transforms are calculated not from zero but from the +parent’s matrix.

+
className:t="composit"
+
+node{
+  tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 1, 0]]
+  node{
+    name:t="obj_name0"
+    tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 1]]
+  }
+}
+
+
+

In the example above, "obj_name0" is written inside another node{}, meaning +it inherits the offset. The upper node is an “empty” one with an offset of one +meter along the Y-axis. The node with the object has an offset of 1 meter +along the Z-axis in its matrix, but remember that matrices combine. Relative to +the composite’s center, it will be offset along both Y and Z. We can set other +coordinates for it, add another block with different objects next to it, etc.

+

It’s not frequently used, but it’s possible. Composites are exported from +daEditor this way – all nodes are parented to an empty node with a default +matrix. In text form, such composites are harder to perceive, and until +recently, we didn’t have the ability to visually edit composites, so practical +use is still rare.

+
+

Practical Example of Node Hierarchy Use

+

Let’s imagine we have two tables 0.7 meters tall and two cups. We want one of +the tables to be randomly selected in the composite and rotated. The cups should +also be chosen randomly, placed near one side, and shifted only along the +table’s length. They should also rotate and, perhaps, sometimes not appear at +all. We can implement this as follows:

+
className:t="composit"
+
+node{
+  rot_y:p2=0, 10
+  ent{
+    name:t="table_a";
+  }
+  ent{
+    name:t="table_b";
+  }
+  node{
+    offset_y:p2=0.7, 0
+    offset_z:p2=0.2, 0.05
+    offset_x:p2=0, 0.25
+    rot_y:p2=0, 180
+    ent{
+      name:t="cup_a";
+    }
+    ent{
+      name:t="cup_b";
+    }
+    ent{
+      name:t="";
+    }
+  }
+}
+
+
+

Breaking it down:

+
    +
  • The parent node has a random rotation from −10° to 10°. One of the tables is +drawn with equal probability since each entity has a weight of one, as we +didn’t manually set a different value.

  • +
  • The cup node is nested inside the table node, meaning its offset occurs +relative to the table, considering its rotation. Afterward, an absolute offset +of 0.7 meters upward is added – the cup should always be on the tabletop, no +randomization needed. But since we want to randomize other transforms, we +can’t use a matrix, so we set it this way.

  • +
  • We then shift closer to the edge by 0.2 meters to place it off-center and add +a bit of randomness – from 0.15 to 0.25, so it doesn’t fall off at the +extremes.

  • +
  • Along the table’s length, the distance is more significant – let it randomize +equally in both directions. The absolute offset is not set, and the deviation +is from −0.25 to 0.25 meters.

  • +
  • Finally, we add a completely random rotation – from −180° to 180°.

  • +
+

Randomized rotation

+
+

Important

+

For one-time use, this approach is faster than the old method, where a separate +subcomposite was created for each random element. One for selecting cups and +their rotation. Another for choosing the table. Then one for placing the cup on +the table with an offset. And finally, the top-level one, which slightly rotates +the table with the cup on it. But here – just one! However, if cups are to be +placed, for example, on shelves or in cabinets, it makes more sense to store +them in their own subcomposite so you don’t have to add a third cup to the +table, cabinet, and shelf composites one by one. If cups are only found on these +tables for some reason, then yes, don’t create unnecessary entities.

+

Thus, the correct application of this approach is for parts of a whole, which +shouldn’t be found with the same set of transforms. For example, randomly +opening car doors, the hood, or the whole/intact/missing windshield in their +coordinates relative to the body can be done this way. Similarly, cabinet doors, +unless it’s a modular system with the possibility of attachment at different +coordinates.

+

If composite parts might be needed elsewhere, move them to a subcomposite to +simplify reuse and potential future edits. If a node with certain transforms and +randomness is only required once, for example, as part of a unique object, the +single composite approach is preferable.

+
+
+
+
+

Game Objects

+
+

Overview

+

Game objects, or gameObj, are interactive elements within the game that are +dynamic and have a direct impact on gameplay. Examples of such objects include +health kits, ammunition, weapons, and other equipment. These objects are +automatically generated from an object known as loot_box.

+

Typically, these objects are placed on various horizontal surfaces such as +tables, chairs, shelves, and cabinets.

+
+
+

Example Node Description

+
node{
+  name:t="loot_box:gameObj"
+  tm:m=[[0.3, 0, 0] [0, 0.3, 0] [0, 0, 0.3] [0, 0.6, 0]]
+}
+
+
+

In this block name:t="loot_box:gameObj" specifies the object name along with +its type. The format is mandatory.

+

As discussed earlier, while omitting the type might work if there are no +conflicting assets of different types, it is crucial to specify the type when +editing the composite in text format. This ensures clarity and prevents +errors.

+
+
+

Creation Process

+

Unfortunately, these nodes are not generated automatically through dag2riRes +or the daEditor. They must be manually scripted.

+

You can (and should) place a cube named loot_box at the desired locations in +your scene/editor and then export them into a composite. The placement process +is identical to that of regular render instances. However, all these cubes will +initially be recorded as:

+
name:t="loot_box"
+
+
+

Therefore, after exporting, you will need to manually update each of these +objects within the composite, assigning them the correct parameters as described +above.

+
+

Important

+

After adding game objects to a composite, it is mandatory to name it using +the format *_gameobj.composit.blk to distinguish it as a simple composite +object.

+
+
+
+

Other Types of Game Objects

+

loot_box is not the only type of game object that needs to be placed in the +environment. Other commonly used game objects include indoor_wall, +wall_hole, and envi_probe for accurate indoor lighting and reflections, +vertical ladders, light sources, such as flickering lights, and many more.

+
+
+
+

Chain Destruction and Composite Nodes

+
+

Chain Destruction

+

We can assign certain assets the parent type within the game’s parameters (not +within the models – this is done in our internal .blk files). All objects +without an assigned parent are considered children. When a parent is +destroyed, all children whose collisions intersect the bounding box of the +parent will also be destroyed.

+
+

Important

+

The system operates strictly as follows: One parent destroys all children +whose collisions intersect its bounding box.

+

This means:

+
    +
  • Children cannot destroy parents.

  • +
  • Children cannot destroy other children. Only those children whose +collisions intersect the bounding box of the parent will be destroyed.

  • +
  • No subsequent chain of destruction will occur; the system is rigid and does +not support additional logic beyond these rules.

  • +
+
+
+

Examples

+

Let’s take an example, where we have an urn as a parent:

+

Urn as a parent

+

and an amphora as a child:

+

Amphora as a child

+

Placement Scenario 1: All correct. The child’s collision (the “spike” +at the bottom) enters the bounding box of the parent urn. Destroy the +parent, and the amphora will also be destroyed.

+

Placement Scenario 1

+

Placement Scenario 2: Ambiguous. If we want to destroy the amphora +through the urn, it’s correct – the side collision of the amphora enters the +urn’s bounding box. But if we don’t want that (since the amphora is just +standing next to the urn, not on it), it’s incorrect. The amphora will be +destroyed because of the urn.

+

Placement Scenario 2

+

Placement Scenario 3: Incorrect. The parent urn is hanging in the air. +Destroy it, and the amphora will collapse too. But if we destroy the amphora, +the parent urn will remain hanging.

+

Placement Scenario 3

+

Placement Scenario 4: Incorrect. When the parent urn is destroyed, only +the middle amphora will be destroyed because its collision enters the parent’s +bounding box. The top amphora will remain hanging in the air.

+

Placement Scenario 4

+

Placement Scenario 5: As an exception, parents can destroy other parents +following the same rules (and only within the immediate “circle” – collision +contact with the first destroyed parent is required). A special parameter must +be manually defined in the properties (in the same .blk files) to enable this. +It is not a default behavior for all parents, but a specific feature.

+

Placement Scenario 5

+
+

Important

+

Do not overuse this feature, as it is difficult to predict how and where objects +will be positioned in the game. For instance, we once allowed this parent +barrel to destroy other parents. It successfully took down a parent tent and +parent ammunition crates, as shown above.

+
+
+
+
+

Object Placement Rules

+

Why Discuss Destruction in this Section?

+

Because developers often forget that the game knows nothing about +composites. This has already been emphasized multiple times at the beginning, +and let’s discuss it again.

+

Only the objects and their matrices are exported into the game. A vast hierarchy +of a house with decorators, down to the last random composite vase, will be +exported into the game as a hundred objects with matrices. No composites will +exist in the game!

+

Similarly, objects cannot just destroy their neighbors arbitrarily. Only +parents destroy children (and sometimes other parents).

+

Thus, do not create composites where objects are stacked mindlessly on top of +each other! A composite is not magic. It’s merely a list of objects – it +won’t assist with destruction mechanics!

+
+

Examples

+

Placement Scenario 1: Canned cans on a cupboard shelf. Logically, the only +parent here is the cupboard. Destroy it – everything inside it wil be +destroyed. It turns out that the cans lie on top of each other and they are not +parents. If we shoot the bottom can – the top one will remain hanging in the +air.

+

Placement Scenario 1

+

Placement Scenario 2: On top of the closet are individual non-parent +objects: an upside-down shoebox lid, the shoe box itself inside the shoe box lid +and a shoe inside that shoe box. According to the rules this is incorrect, +because you can try and shoot the lid from under the box, and the box from under +the shoe. But here the thicknesses and dimensions are so small that this can be +neglected. This is an acceptable violation that in most cases will never be +noticed.

+

Placement Scenario 2

+

Placement Scenario 3: The issue has already been resolved, so here is an old +screenshot that doesn’t quite capture the correct angle. In the center, we can +observe a typical problem where the child object (a basin) hasn’t been +properly aligned with its parent (a wardrobe), which at this point has already +been destroyed. However, our focus here is on the arrangement to the right – the +artistic stacking of basins on top of the wardrobe. It looks impressive, but it +will be 100% noticeable when the lower basins start getting destroyed before the +upper ones.

+

Placement Scenario 3

+
+

Important

+

Summary:

+
    +
  1. Avoid stacking objects on top of each other without clearly defining which is +the parent and which is the child.

  2. +
  3. Child objects should only be placed on their parent in a single layer. +Any objects that do not collide with the parent’s bounding box will not be +destroyed correctly.

  4. +
  5. If you need to create a complex composition that cannot be achieved with the +current setup due to these limitations, request permission to create a unique +rendering composition that will break apart using a destruction mechanism.

  6. +
+
+
+
+
+

Hierarchy of Composites

+
+

Problems with Poor Hierarchy

+

A common issue when creating composites is that all objects are often placed +within a single large composite. The rationale behind this approach is +understandable – it’s easier to arrange everything in one scene, export it, and +forget about it.

+

However, the problem is that work with composites never truly ends there. Errors +are inevitable, and revisions are guaranteed. At some point, these revisions +will occur directly in the composite’s .blk file, not in the original scene +where everything was initially arranged. Once this happens, the original scene +becomes obsolete, and all work shifts to the .blk file.

+

This can lead to significant issues. For example, consider a composite:

+

Interior

+

Imagine that every object here is not part of a subcomposite but is instead +manually placed within this composite (for the sake of example, though this is +not actually the case).

+

Let’s examine the typical problems that might arise using this setup. Take this +cabinet with vases:

+

Cabinet with vases

+

Notice that it’s placed in several locations:

+

Cabinet with vases at several places

+

The designer, seeking efficiency, may simply copy and paste the entire setup +elsewhere in the scene. The result is identical arrangements throughout the +house, with perhaps one or two vases changed to give the illusion of randomness.

+

We’ve previously discussed chain destruction. Now, imagine you didn’t quite +align one of the vases with the cabinet, and it ends up hanging in the air when +the cabinet below is destroyed.

+

This introduces several problems:

+
    +
  • Remember, this setup has been copied across multiple locations in the house.

  • +
  • Some vases may also be standing independently, scattered on the floor, for +instance.

  • +
+

You’ll need to painstakingly search through the composite, identify each vase, +and adjust their positions individually.

+

Now, consider needing to place this cabinet with vases outside, with the +landscape involved. Either the vases will clip through the cabinet, or they’ll +float above it while the cabinet sits on the ground.

+

Procedural rotations and shifts are nearly impossible in such a scenario. Keep +in mind that these adjustments often can’t be automated and need to be manually +tweaked after tools like daEditor or dag2riRes. In a large composite, this +becomes utterly impractical.

+

Additionally, performing simple randomization, such as swapping one cabinet for +another, becomes highly inconvenient. You’ll have to sift through hundreds of +lines.

+

The root cause of these problems is the unreadability of the composite. It’s +nearly impossible to quickly make any adjustments in such a tangled mess. In +extreme cases, an entire house’s furnishings (minus the house itself) might be +crammed into a single composite, like this:

+

Entire house's furniture

+

Typically, we don’t assign tasks to “create a composite for a single house.” +More often, the tasks involve “creating 15 houses with full furnishings,” +handled by 5-8 different team members. Each person ends up spending an enormous +amount of time individually setting up unique render instances for their houses, +instead of leveraging low-level random composites created by a dedicated team +member—a method that could save everyone hours of work.

+

It’s understandable that every artist wants to create something unique, perhaps +to tell a story or guide the player towards a specific thought, like “this is +where the homeowner loved to admire their favorite vase on this cabinet.” But no +one will notice these details because in an online shooter the environment needs +to:

+
    +
  • Fit seamlessly into the overall scene;

  • +
  • Not interfere with gameplay.

  • +
+

What players will notice is a poorly placed object that disrupts their aim due +to collision issues. You will notice the massive headache when you try to find +that object in a composite with hundreds of lines. And your colleagues will +notice the time wasted on manually arranging objects instead of using pre-made +sets.

+
+

Important

+

Summary of Problems

+
    +
  • Uncontrolled propagation of errors.

  • +
  • Inability to align object groups with terrain.

  • +
  • Lack of variety.

  • +
  • Excessive time spent manually adding variety to the scene.

  • +
  • Unreadable composite files, making it extremely difficult to understand what +is located where and what it controls.

  • +
  • Inability to reuse composites, preventing the use of ready-made asset groups +in neighboring houses.

  • +
+
+

To avoid these issues, it’s crucial to adhere to strict composite hierarchy +rules.

+
+
+

Proper Hierarchy

+

The hierarchy of composites should be broken down to the smallest procedural +modification of an object. Let’s use the example of vases and cabinets:

+
    +
  1. Create composites for each small procedural modification of an object:

    +
      +
    • Procedural rotations/shifts (e.g., rotating vases around their axis).

    • +
    • Object randomization (e.g., swapping cabinets or vases for similar ones).

    • +
    +
  2. +
  3. From the composites created in step 1, build composites for object +groups.

    +
      +
    • Create several variations of vases arranged on a cabinet.

    • +
    • Combine these variations into a single random composite like “random vase +arrangement on cabinet.”

    • +
    +
  4. +
  5. From the composites created in step 2, create a random composite for +“cabinets with random vase arrangements.”

  6. +
  7. From the composites created in step 3, assemble a composite for furnishing +a large object, such as “random cabinets with vases placed around the +object.”

  8. +
  9. Finally, include the composite from step 3 in the overall “house” +composite, along with similar composites for “windows-doors,” “exterior +decor,” “interior decor,” etc.

  10. +
+
+

Note

+

Unfortunately, there is no universal composite structure – it all depends on +what you’re creating. If you need a random composite for a single cabinet, you +might only need one level of hierarchy – a random composite for that cabinet, +where you can specify shifts, rotations, and randomization.

+

But if you’re creating a furniture and dishware store, you may need 3-6 levels +of composite hierarchy.

+

The key is to start with the lowest level of composites and work your way up +step by step. This approach ensures everything remains as editable and fixable +as possible. You’ll be able to resolve any placement issues across all game maps +by simply tweaking a few numbers in one small, unobtrusive file.

+
+
+
+
+
+

Nuances about Composites

+
+

Additional Notes on Naming Conventions

+

As previously mentioned multiple times throughout this chapter, including at the +beginning, let’s clarify a few key points:

+
    +
  1. Composites vs. Render Instances: Unlike render instances, composites +don’t take up space in the game client (they simply aren’t included). +Therefore, it’s not a significant issue if you copy successful composites +from other maps and rename them for your own purposes. This approach helps +you avoid potential problems if the original composite’s creator decides to +modify it, which could disrupt your setup.

  2. +
  3. Detailed Naming: Always name composites as descriptively as possible, +including all relevant prefixes and suffixes designated for both composites +and render instances. This is crucial because, for example, you might create +a composite intended for interior use but fail to include the is_ prefix. A +colleague might then mistakenly use it outdoors and add landscape alignment, +causing the composite to sink into the ground in all your buildings.

  4. +
  5. Proper Use of Composites: Those placing existing composites should also +pay close attention to their intended use. If a composite is clearly marked +for interior use, do not place it outside. Instead, duplicate it, give it +a new name, and avoid any issues.

  6. +
  7. Random Composites: If the composite involves randomization, include the +numbers of the randomized objects in the name. For example, +is_table_abc_random.composit.blk.

  8. +
  9. Content Ownership: Clearly indicate the thematic ownership of a composite +in its name. For instance, if you’re creating a composite of ancient vases, +name it accordingly so that colleagues don’t unknowingly place it in a +futuristic setting.

  10. +
+
+
+

Object Placement on Terrain and Relative to Each Other

+

You might have noticed that when exporting composites from the editor, they +often include an additional parameter, place_type:i=1, in the nodes. For +example:

+
node{
+  name:t="fachwerk_horse_cart_a_cmp"
+  tm:m=[[0.999018, 0, -0.0443057] [0, 1, 0] [0.0443057, 0, 0.999018] [-6.7688, 0.0028134, -1.22241]]
+  place_type:i=1
+}
+node{
+  name:t="haystack_i"
+  tm:m=[[0.020657, 0, 0.999787] [0, 1, 0] [-0.999787, 0, 0.020657] [6.92909, 0, -1.47888]]
+  place_type:i=3
+}
+
+
+

These values can range from 1 to 6 (or potentially even higher).

+

This occurs because you exported objects that were placed on the terrain +according to specific rules.

+

Object properties

+

Placement Types:

+
    +
  • place pivot - place_type:i=1: Vertical placement of the object’s pivot on +the terrain (pivot in Dagger is at 0.0.0). Suitable for large, tall objects +that extend deep into the ground (buildings, poles, large piles of +debris)—essentially anything unaffected by terrain height variations.

  • +
+

place_type:i=1

+
    +
  • place pivot and use normal - place_type:i=2: Placement of the pivot on the +terrain, using the normal at the pivot point (if the terrain is uneven, the +object will tilt according to the normal). Best for smaller items that need to +conform to the terrain’s shape (e.g., barrels, buckets, bicycles, cans). Large +objects might not align correctly if their pivot is on the edge of a slope, +causing part of the object to float in the air. Use this only for small +assets.

  • +
+

place_type:i=2

+
    +
  • place 3-point (bbox) - place_type:i=3: Placement using three points of the +object’s bounding box. The bounding box is built based on the object’s maximum +geometry limits, and the object is placed on the ground at three of its +extreme points, accounting for terrain height variations. This method is more +precise than type 2 but slightly more demanding on the editor. It’s needed for +large objects that must conform to terrain undulations (e.g., haystacks, piles +of boards, ladders, carts, vehicles).

    +

    place_type:i=3

    +
    +

    Note

    +

    If the object extends below zero (e.g., piles, foundations), it may be pushed +up because the placement is based on the bounding box, which is built on the +outermost geometry points. For such objects, use types 1 or 2.

    +
    +
  • +
  • place foundation (bbox) - place_type:i=4: Vertical placement on the +terrain so that the entire base of the bounding box is not above the +terrain. The object may partially extend below the terrain but will never +float above it.

    +

    place_type:i=4

    +
  • +
  • place on water (floatable) - place_type:i=5: Vertical placement on a water +plane (yes, water has a plane).

    +

    place_type:i=5

    +
  • +
  • place pivot with rendInst collision - place_type:i=6: Vertical placement +of the render instance’s pivot on the collision of another render instance.

    +

    place_type:i=6

    +

    Works well on simple objects:

    +

    place_type:i=6

    +

    but struggles with complex ones as it may not correctly identify the collision +surface:

    +

    place_type:i=6

    +
  • +
+
+

Important

+

When exporting composites from the daEditor, ensure you set the placement +types for each component of the future composite (e.g., every barrel, bucket, +and vehicle).

+

When exporting composites from a 3ds Max scene, manually assign these +parameters to the appropriate objects in the final composite.

+

Do not export composites without these parameters and then apply them to the +entire composite afterward (e.g., setting the entire exterior decoration +composite of a house to place_type:i=3). This often leads to bugs, as it’s +unclear what is used as the pivot or bounding box.

+

Always assign the correct placement types to the objects intended for them.

+
+
+
+
+

Object Placement Precision

+

In any game, objects are placed on a grid according to their pivot point (recall +that the pivot for Dagger is at 0.0.0). This means that objects cannot be placed +with greater precision than the smallest unit allowed by the grid, which we can +refer to as the Dagger millimeter.

+

As a result, objects placed in non-zero positions will align perfectly only when +the composite has no rotation or offset.

+

For instance, a house with DP (dynamic positioning) components will remain +perfectly aligned regardless of rotation or displacement because both the +house’s base and its DP components are exported relative to zero at the correct +positions. They are exported this way to ensure optimal placement.

+

However, objects like windows, doors, or paintings that are hung on walls made +of debris or bricks may “drift” when the composite is rotated or moved, +especially paintings. But don’t worry.

+

In War Thunder, the placement grid isn’t precise enough for this to cause +significant issues – we have large margins for error. In daNetGame-based +games, this “drifting” only happens in the Asset Viewer and daEditor. When +the location is exported, a much higher level of precision is used than in the +tools, so objects generally align correctly. While you should check the final +placement, you don’t need to worry that it will be “just as bad” as it appears +in the daEditor.

+
+

Examples

+
    +
  • Editor View:

  • +
+

Editor view

+
    +
  • In-Game View:

  • +
+

In-game view

+
+
+

Special Parameters

+

Composites have several parameters designed for specific, limited-use cases.

+
+

War Thunder

+

quantizeTm:b=yes: This parameter should be applied outside the nodes +(immediately after the line className:t="composit") when combining the +geometry of a render instance with the collision of a prefab in a composite.

+

These object types have different positioning precision on the map (prefabs are +less precise). Additionally, prefabs have even less precision when it comes to +rotation. Therefore, when combining these two objects, the collision almost +always fails to align with the visual geometry.

+

This parameter forces the prefab to align exactly with the coordinates of the +render instance.

+
className:t="composit"
+quantizeTm:b=yes
+node{
+  tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]]
+  node{
+    name:t="sheer_cliff_a"
+    tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]]
+  }
+  node{
+    name:t="sheer_cliff_a_prefab_collision:prefab"
+    tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]]
+  }
+}
+
+
+
+
+

daNetGame-based Games

+

Random Object Seeds: In daNetGame-based game, all objects within a +composite, for example, share the same color scheme. This means you won’t find a +house with windows and doors of varying colors – the colors differ as you move +across the map, but each house’s windows and doors will always share a uniform +color.

+

This is intentional – each composite is assigned exactly one seed (a randomly +chosen value, essentially). This seed is applied from the top-level composite +down to the most nested object.

+

This approach has pros and cons. For instance, all the furniture, toys, and +dishes inside a house will be uniformly colored. This makes it impossible to +create something like a fabric shop, where you’d expect fabrics of different +colors, because all the fabrics will share one color. Similarly, identical +furniture items will show the same level of wear.

+

This can be addressed using the ignoreParentInstSeed:b=yes parameter, which is +applied to the specific object (or composite) that should have a different seed +from the parent composite.

+

For example, if you want each piece of fabric in a store to have a different +color, you need to apply this seed to each fabric node within the composite, +not to the overall “arranged fabrics” composite. Otherwise, the entire composite +will have a different seed, but the objects within it will share a single seed.

+

Correct Example: The shoe and its box will have different seeds and +therefore different colors.

+
node{
+  name:t="is_high_heel_shoe_a"
+  ignoreParentInstSeed:b=yes
+  tm:m=[[0.0888685, 0.939605, 0.205868] [0.49344, -0.244331, 0.902145] [0.896062, 0.0213662, -0.484326] [-2.40811, 1.9364, -31.9424]]
+}
+node{
+  name:t="is_high_heel_shoebox_a_opened"
+  ignoreParentInstSeed:b=yes
+  tm:m=[[0.0765914, 0, -0.997063] [0, 1, 0] [0.997063, 0, 0.0765914] [-4.67105, 2.93796, -24.8412]]
+}
+
+
+

Incorrect Example: Although the entire composite of items will have a +different seed from the main composite, all items within it will share the same +seed.

+
node{
+  name:t="city_1_department_store_shops_stuff_cmp"
+  ignoreParentInstSeed:b=yes
+  tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]]
+}
+
+
+
+

Important

+

Summary

+

Apply this parameter to specific render instances or composites that need to +have a different seed from the main composite.

+

Do not apply it to the entire composite expecting everything inside to +become randomized – it won’t. All nested objects will still share a common seed, +even if it differs from the main composite’s seed.

+
+
+
+
+

Checklist

+

Before considering composites as finished, you should verify the following:

+
    +
  • Correct display of the composite object in Asset Viewer: Ensure nothing is +misplaced or missing, and everything appears as intended.

  • +
  • Correct generation of variable objects using the “Generate Random Seed” +button in the right panel: Check that nothing overlaps or disappears +unexpectedly, and no extra objects are loaded.

  • +
  • No errors in the Asset Viewer log: Monitor the console for red error lines +related to asset display issues in the composite due to incorrect naming, +missing textures, or other unfinished work.

    +

    The composite log typically only indicates that an object isn’t displaying. +You’ll need to open the problematic object itself to see what the log says +about it.

    +
  • +
+
+
+
+

Creating a Standard Composite Object

+

Having discussed the structure and theory behind composite objects, let’s now +delve into the actual creation process. There are several methods available for +creating a composite object, each with its own advantages and disadvantages:

+ +
+

Manual Creation

+

There isn’t much to elaborate on here. You simply create a file with the +extension .composit.blk and manually define a series of nodes, specifying the +object names and their coordinates.

+

This method is only practical when you need to add parts of a single object +without any offsets, such as the walls of a house, its indoor furnishings, +decals, decor, and ground (everything being geometry or subcomposites centered +at the house’s “zero” point).

+

Pros:

+
    +
  • All composite object parameters are accessible in a single text file.

  • +
  • No need for the original scene file; you only need a new or existing +.composit.blk file.

  • +
+

Cons:

+
    +
  • Blind Work: You can’t see the result while working, making it challenging +to align objects correctly.

  • +
  • Matrix Definitions: Manually defining matrices is virtually impossible – +let the computer handle that.

  • +
+

This method is typically used as part of a pipeline to refine non-random +composite objects generated by other means.

+
+
+

Using the daEditor

+

This method is simple:

+
    +
  1. Place the necessary objects in the editor as desired.

  2. +
  3. Select the objects, starting with the central one (which will later become +the composite’s center).

  4. +
  5. In the Landscape tab, select the Export as Composit option:

    +

    Using daEditor

    +
  6. +
+

Pros:

+
    +
  • Easy to apply.

  • +
  • Unlike the manual method, it simplifies editing object transforms – matrices +are automatically calculated.

  • +
+

Cons:

+
    +
  • Composite Center: You can’t control the composite’s center. When selecting +multiple objects with a frame, it’s impossible to predict which one will +become the “zero” point. When selecting objects sequentially, the first +selected object becomes the “zero” coordinate, which isn’t always convenient. +You can’t set a center outside of an object.

  • +
  • Random Transformations: Only fixed matrices and specific assets are +allowed; you can’t set random transformations or objects.

  • +
+

A workaround is to add an additional object at the desired center, start +selecting from it, and then delete this placeholder after exporting the final +composite. However, this isn’t particularly convenient.

+

This method is typically used to create simple object sets (e.g., piles of +debris, rows of barrels, log stacks). Adding randomness requires further +refinement by other methods.

+
+
+

Using the dag2riRes Script

+

This is another relatively simple method. While the description may seem +complex, after trying it out, the steps will become logical and clear, requiring +minimal effort from the developer. The key is to follow the steps in order, as +missing one will force you to start over.

+

The idea behind this method is to assemble the composite from objects in 3ds +Max, export them as a .dag file, and then use the script to convert .dag +into .composit.blk. The script also allows you to split all objects exported +into one .dag file into individual .dag files.

+

Pros:

+
    +
  • Real-Time Preview: Move nodes directly in the viewport with instant +feedback.

  • +
  • Snapping Option: Allows for more precise placement of objects if needed.

  • +
+

Cons:

+
    +
  • No Randomization: You can’t define random transformations or entities.

  • +
  • No Include Statements: Unable to include general transformations.

  • +
+

Workflow:

+
    +
  1. Import all the base-level LODs of models into one scene that you plan to use +in the composite.

  2. +
  3. Attach each model into a single object (if they were split across multiple +objects in their scenes).

  4. +
  5. Name each model as its corresponding DAG, minus the .lod00.dag suffix +(e.g., if the DAG is table_a.lod00.dag, name the model table_a).

  6. +
  7. Reset the model’s pivot to 0.0.0, and zero out rotation and scale. Failing +to do so will result in incorrect matrix calculations in the final composite +(non-zeroed parameters will affect the matrices).

    +
      +
    • For example, if the pivot isn’t at 0.0.0 but remains a meter along the +X-axis, the model will shift that distance in the composite.

    • +
    +
  8. +
  9. Assign a three-digit postfix to each object: *_000 (e.g., table_a becomes +table_a_000).

    +
      +
    • When cloning, ensure the three-digit postfix remains intact: table_a_001, +table_a_002, etc.

    • +
    +
  10. +
  11. The object that will serve as the composite’s center should have the postfix +*_origin instead of _000 (e.g., table_origin).

  12. +
  13. Position the objects as desired, cloning them within the scene as references +or instances. Ensure the rotation, position, and scale match your intended +adjustments.

  14. +
  15. Export the final layout as a single .dag into the directory with the +dag2riRes script. It’s easier to keep the DAG name consistent to avoid +confusion later.

  16. +
  17. Run the script, which will generate a composit.res.blk file alongside the +.dag (more details below).

  18. +
  19. Rename and move the composit.res.blk file to the desired location. Ensure +the composite name is correct – refer to the beginning of the document for +naming conventions.

  20. +
+
+

Important

+

If several nodes in the 3ds Max scene are linked into a hierarchy before +export, the script will treat the entire hierarchy as a single node named after +the root object.

+
+

Running the dag2riRes Script:

+
    +
  1. Open FAR or the command line.

  2. +
  3. Navigate to the _Dag2riRes directory.

  4. +
  5. Enter the following command:

    +
    dag2riRes-dev.exe -s:<name.dag> -d:simple_dags -no_tex
    +
    +
    +

    where <name.dag> is your DAG file’s name. You can assign any name.

    +
  6. +
+

Naming Reminder:

+

Make sure to name the final composite correctly! Not just the name but also the +postfixes.

+
    +
  • *_cmp.composit.blk – Simple composite object.

  • +
  • *_random.composit.blk – Composite object with randomization (object +substitution, object disappearance).

  • +
  • *_gameobj.composit.blk – Composite object containing game objects.

  • +
+
+
+

Using the Composite Editor in Asset Viewer

+

It’s a relatively new option, still under development, so some basic features +might be missing at the time of writing and will be added over time.

+

Pros:

+
    +
  • Highly Visual: You can see the results of your work in real-time in the +viewport.

  • +
  • Works with .composit.blk: Allows editing existing composites without +needing the original 3ds Max scene.

  • +
  • Randomization: Nodes can be created with random entity selection.

  • +
  • Transform Randomization: Nodes can be created with random transforms.

  • +
+

Cons:

+
    +
  • In Development: Performance issues when editing large composites +(thousands of nodes), especially noticeable in daNetGame-based games due to +frequent use of multiple nested structures.

  • +
  • No Multi-Node Selection: Can only move nodes one by one.

  • +
  • No Undo: If you move a node and change your mind, you must either manually +revert it or reload from disk, losing all unsaved changes.

  • +
  • Limited Gizmo: Only available in world coordinates – can’t move an asset +along one of its own axes in the viewport.

  • +
  • No Include Support: Currently, there is no support for include +statements.

  • +
  • Interface Development: Some elements might not be intuitive.

  • +
+

In addition to adding includes, it allows you to fully create a hierarchy of +composites.

+
+
+

Using the dag4blend Add-on in Blender

+

It’s part of the dag4blend add-on, which was previously a simple +importer-exporter. It’s a new option, also under development.

+

Pros:

+
    +
  • Composite Import: You can import composites without needing the original +blend scene. All you need is the .composit.blk file and the asset DAGs +(applicable only to the version with geometry import).

  • +
  • High Visual Clarity: The workflow is highly visual, making it easier to +see and manage your changes.

  • +
  • Convenient Workflow: Features like snapping, multi-node selection, and +more make it significantly easier to work with, similar to the ease of use in +3ds Max.

  • +
  • Random Entity Nodes: You can directly create nodes that include random +entity selection.

  • +
  • Random Transform Nodes: You can directly create nodes with randomized +transforms.

  • +
  • Subcomposite Editing: You can decompose and edit any subcomposite at its +final position within the parent composite, allowing you to see the exact +final node placements.

  • +
  • Composite-to-DAG Conversion: Offers the ability to convert composites into +DAGs.

  • +
  • Game Object Conversion: Allows converting gameObj nodes into meshes and +converting a mesh’s bounding box into a gameObj node, which simplifies the +placement of elements like indoor walls, wall holes, environmental probes, +etc.

  • +
+

Cons:

+
    +
  • No Include Support: Currently, there is no support for include +statements.

  • +
  • Limited Random Node Preview: The visibility of entities within random +nodes must be manually toggled; they are not randomized automatically.

  • +
  • Game Object Preview: The preview for gameObjs must be manually +configured; otherwise, they appear as empty nodes.

  • +
  • No Random Transform Preview: There is no preview available for randomized +transforms.

  • +
  • Axis Confusion: Blender uses the Z-axis as the upward direction, whereas +the Dagor Engine uses the Y-axis. This difference must be considered when +defining parameters for random transforms.

  • +
+
+
+

Creating Random Composites in 3ds Max

+

When planning to use random objects in nodes, it’s best to prepare for this in +advance, during the composite assembly in 3ds Max. This is crucial to avoid +randomization issues later. If you skip this step, you might find a chair +clipping through a table, or a table through a dresser in the final composite.

+

For instance, suppose you want to create a random composite of chairs placed +around a table, with the chairs being of different sizes and shapes. You would +combine them into one object and name it after the final random composite (e.g., +chairs_abc_random for a composite named chairs_abc_random.composit.blk).

+

Using 3ds Max

+

You should use this combined geometry during placement to see the boundaries of +the objects that will be randomized in the node.

+

To configure the randomization itself, further refinement of the composite by +other methods is necessary.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/all-about-blk/config_and_settings_blk.html b/assets/all-about-blk/config_and_settings_blk.html new file mode 100644 index 000000000..fc3c8bc6b --- /dev/null +++ b/assets/all-about-blk/config_and_settings_blk.html @@ -0,0 +1,221 @@ + + + + + + + .config.blk and .settings.blk — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

.config.blk and .settings.blk

+

Dagor-based games use a primary configuration file named .settings.blk +(referred to as dgs_settings in the game code) for fundamental settings. For a +detailed description of the file format, see +.blk File Format section.

+
+

Purpose of .settings.blk

+

.settings.blk stores essential settings such as:

+
    +
  • Resolution

  • +
  • Debug settings

  • +
  • Video mode

  • +
  • Sound settings

  • +
+

In general, any settings required before the game is fully initialized are found +here.

+
+
+

Configuration Management

+
    +
  1. Automatic Patching: The engine automatically attempts to patch +.settings.blk with .config.blk. When the game modifies settings, it saves +them to .config.blk, which is then applied to .settings.blk upon loading.

  2. +
  3. Allowed Overrides: The permissible overrides are specified within the +__allowedConfigOverrides{} block in .settings.blk. In non-release builds, +all settings are allowed to be overridden.

  4. +
  5. Command Line Modifications: Any property that can be overridden may also +be modified via the command line. For example, running game.exe -config:debug/watchdog:b=no is equivalent to adding debug{watchdog:b=no} +to .config.blk.

  6. +
+
+
+

Game-Specific Adjustments

+

In certain games, the .settings.blk and .config.blk files are named +<game_name>.settings.blk and <game_name>.config.blk, respectively. The +<game_name> is provided via the -game:<game_name> command line argument or +specified in the code.

+

These mechanisms ensure a flexible and robust configuration management system +to meet different game requirements and development stages.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/all-about-blk/folder_blk.html b/assets/all-about-blk/folder_blk.html new file mode 100644 index 000000000..aaea38b4a --- /dev/null +++ b/assets/all-about-blk/folder_blk.html @@ -0,0 +1,590 @@ + + + + + + + .folder.blk — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

.folder.blk

+
+

.blk File Types

+

The .blk files interacting +with assets (all types of resources in Dagor Engine) can be categorized +into:

+
    +
  • resource .<className>.blk file types – the .blk files that process the +asset itself (extract collision, animation, create destruction, etc.) to +create a game resource of a certain class. A list of supported resources in +your project can be found in application.blk.

  • +
  • composit.blk – the .blk files that describe the handling of the final game +resource (composites).

  • +
+

We will focus on .<className>.blk files in more detail.

+
+

See also

+

For more information on composite files, see .composit.blk.

+
+

After exporting from 3ds Max, we usually obtain a .dag file or a .tif file +in the case of textures. These files are inert and cannot be used without the +engine’s tools, and the engine needs instructions on how to handle them.

+

This is where .<className>.blk files come into play. They define the +processing parameters for assets, turning them into “virtual” resources. From a +single .dag file, we can generate an level of detail (LOD), collision, +skeleton, and more, provided the necessary objects and properties are included.

+

The .<className>.blk files must be named according to the final resource name +in the game (in the Asset +Viewer) and must +contain the asset type (<className>) in the filename, as it contains semantics +that are used later in config interpretation.

+

For example:

+
    +
  • hangar_watch_tower_d.rendinst.blk – game resource hangar_watch_tower_d +(rendinst),

  • +
  • hangar_watch_tower_d.blk – same as above, but it can be a rendinst or prefab +(defined within the file),

  • +
  • hangar_watch_tower_d_collision.collision.blk – game resource +hangar_watch_tower_d_collision (collision),

  • +
  • airfield_workshop_a_overlay.tex.blk – game resource +airfield_workshop_a_overlay (texture).

  • +
+

To avoid manually creating a .blk file for every simple asset, such as .dag, +textures, skeletons, animations, dynamic models, etc., Dagor supports a highly +flexible system for creating virtual assets.

+

.folder.blk is a type of resource .<className>.blk files that process assets +in batches.

+

The .folder.blk file places in the assets directory and in most cases, it is +sufficient to simply place textures and models in the appropriate directories. +All numerous rules, such as LOD switching distances, texture conversion rules, +etc., will be created automatically.

+
+

Note

+

Resources must be uniquely named. In most cases, everything works fine if +resources are uniquely named within their type, but it is preferable to have a +fully unique name.

+
+
+
+

Syntax of .folder.blk

+
+

General Principles

+

The .folder.blk file defines how and where assets are exported, how they are +found, and the rules for creating virtual resource .<className>.blk files.

+

For assets, the .<className>.blk rules are always applied first if they exist +(i.e., if my_asset.dynmodel.blk exists, the rule for creating an asset named +my_asset will not be executed). Afterward, the rules from the .folder.blk +file next to the asset are applied, followed by the rules from .folder.blk +files higher in the directory hierarchy until a stopProcessing:b=true +directive is encountered.

+

To understand which rules apply to your file (e.g., my_texture.tif or +my_model.dag), start from the directory where the asset is located and look +for the nearest .folder.blk file up the hierarchy.

+
+

See also

+

For more information, see +.blk File Format.

+
+
+
+
+

Asset Scanning and Export Rules

+
+

Basic parameters

+
    +
  • inherit_rules:b=true\false – apply the rules from .folder.blk higher up +the hierarchy.

  • +
  • scan_assets:b=true\false – scan assets in this directory.

  • +
  • scan_folders:b=true\false – scan subdirectories in this directory.

  • +
  • exported:b=true\false – whether the content is exported to the game.

    +
    +

    Important

    +

    It is highly recommended to use a special directory with checkboxes if you are +going to make test assets that you want to commit and pass on to others, but +not include for everyone.

    +
    +
  • +
+
+

Export{} Block

+

The export parameters can be specified either directly through names or via +special keywords.

+
+
Basic Parameters
+
    +
  • ddsxTexPack:t="" – defines the name or texture packs for the current +directory and all nested directories, unless overridden by another rule, +possible values: <pack_name>, special keyword.

  • +
  • gameResPack:t="" – defines the name of resource packs for the current +directory and all nested directories, unless overridden by another rule, +possible values: <pack_name>, special keyword.

    +

    Examples:

    +
    ddsxTexPack:t="combat_suits.dxp.bin"
    +gameResPack:t="combat_suits.grp"
    +
    +
    +
    ddsxTexPack:t="*name_src"
    +gameResPack:t="*name_src"
    +
    +
    +
  • +
+
+
+
Optional Parameters
+
    +
  • ddsxTexPackPrefix:t="" or gameResPackPrefix:t="" – defines the prefix +before the package name, possible values: prefix.

    +

    Example:

    +
    ddsxTexPackPrefix:t="aircrafts/"
    +
    +
    +
  • +
  • package:t="" – defines the name of additional resource packs, possible +values: <pack_name> or * – means put in root pack (default value).

    +

    Examples:

    +
    package:t="outer_space"
    +
    +
    +
    package:t="*"
    +
    +
    +
  • +
+
+
+
Special Keywords
+
    +
  • *name_src – the name of the directory containing the asset will be used +as the pack name.

  • +
  • *path_src – the path to the directory containing the asset will be used +as the pack name.

  • +
  • *name – the name of the directory containing the .folder.blk file will be +used as the pack name.

  • +
  • *path – the path to the directory containing the .folder.blk file +will be used as the pack name.

  • +
  • *parent – the name of the parent directory will be used as the pack name.

  • +
+
+
+
Explanations
+
    +
  1. For example, for this file structure:

  2. +
+
  dir_1
+  ├── .folder.blk
+  └── dir_2
+      └── asset
+
+
+
    +
  • *name_src, *path_src: the dir_2 name (or dir_1/dir_2 path) will be +used as the pack name.

  • +
  • *name, *path: the dir_1 name (or dir_1 path) will be used as the +pack name.

  • +
  • *parent: the dir_1 name will be used as the pack name.

  • +
+
    +
  1. This is how the *parent key works:

  2. +
+
    if (p[0] != '*')
+    {
+      if (p[0] == '/')
+        return p + 1;
+      if (!prefix[0])
+        return p;
+      buf.printf(260, "%s%s", prefix, p);
+      return buf;
+    }
+
+    if (stricmp(p, "*parent") == 0)
+    {
+      fidx = mgr.getFolder(fidx).parentIdx;
+      if (fidx != -1)
+      {
+        p = mgr.getFolder(fidx).exportProps.getStr(paramName, def_val);
+        continue;
+      }
+      p = NULL;
+      break;
+    }
+    else if (stricmp(p, "*name") == 0)
+    {
+      buf.printf(260, "%s%s%s", prefix, mgr.getFolder(fidx).folderName.str(), pack_suffix);
+      return buf;
+    }
+    else if (stricmp(p, "*name_src") == 0)
+    {
+      buf.printf(260, "%s%s%s", prefix, mgr.getFolder(src_fidx).folderName.str(), pack_suffix);
+      return buf;
+    }
+    else if (stricmp(p, "*path") == 0)
+    {
+      makeRelFolderPath(buf, mgr, fidx);
+      buf2.printf(260, "%s%s%s", prefix, buf.str(), pack_suffix);
+      return buf2;
+    }
+    else if (stricmp(p, "*path_src") == 0)
+    {
+      makeRelFolderPath(buf, mgr, src_fidx);
+      buf2.printf(260, "%s%s%s", prefix, buf.str(), pack_suffix);
+      return buf2;
+    }
+
+
+
+
+
+

Virtual Resource Blocks (virtual_res{})

+

Virtual resource blocks (virtual_res{}) are used to create assets. They are +applied sequentially from top to bottom within a .folder.blk file, and then +from .folder.blk files higher in the directory hierarchy, until a +stopProcessing:b=true directive is encountered or all .folder.blk files in +the hierarchy are processed.

+
virtual_res_blk{
+  find:t="^(.*)\.dds$"
+  exclude:t="^(.*_nm)\.dds$"
+  className:t="tex"
+  name:t="low_$1"
+  stopProcessing:b=false
+  contents{}
+}
+
+
+
+
Key Parameters
+
    +
  • find: A regular expression to locate files for which the virtual resource +.<className>.blk will be created.

  • +
  • exclude: A regular expression for excluding files that match the find +pattern.

  • +
  • className: Specifies the type of asset in your project.

  • +
  • name: The asset’s name. By default, this corresponds to the first +capturing group in the find pattern (name:t="$1"). You can construct the +name using values from capturing groups (\(1 ... \)9) and other characters.

  • +
  • stopProcessing: Defaults to true, meaning no further virtual res blk +rules will be applied to the matched file. Set to false if you want to +create multiple assets (e.g., dynamic model, render instance, prefab, +skeleton, character) from one texture/model.

  • +
+

All other parameters are specified within the contents{} block and are +typically specific to the asset type.

+
+
+
+

Specialized Blocks: content{}, tag{}

+

Within the contents{} block, you can include specialization blocks based on +tags. Tags are generated from all directory names in the full path to the file +(excluding the base asset path).

+

For example, for develop/assets/test/warthunder/model/abc.tif, the tags would +be test, warthunder, and model. Specialization block names follow the +format tag:TTT{}, such as:

+
contents{
+  hqMip:i=1
+  //...
+  "tag:warthunder"{
+    hqMip:i=0
+  }
+}
+
+
+

If applicable specialization blocks are present (i.e., the full path contains +the specified tags), their contents are merged into the main contents{} for +the asset. If multiple specialization blocks apply, their contents are merged in +the order they appear within the contents{} block.

+

This approach allows for different properties to be set for similar assets +located in various directories with specific names, without duplicating the +.folder.blk.

+
+
+

Additional Details

+

Typically, virtual assets do not need to specify the file name for the resource +parameter (such as the texture name or .dag file). These are passed by default +and equal to the name of the file from which the resource is created. However, +you can specify a different file if needed (e.g., creating a dynamic model from +my_dynmodel.txt with a reference to dag_my_dynmodel.lod00.dag).

+
+
+

Common Parameters for Most Assets

+
    +
  • ddsxTexPack:t, gameResPack:t, package:t=: See +above for details.

  • +
  • export_PC:b: Whether to export the asset for the specified platform +(substitute PC with any 4-character platform code: _PS4, _and, ios, +PS3, etc.).

  • +
+
+
+
+
+

Using Regexp Rules

+

Regular expressions are used +in .folder.blk for resource generation, which starts with internal +subdirectories, not external ones.

+
+

Regular Expression Patterns

+
    +
  1. LOD Files

    +
    find:t="^(.*)\.lod00\.dag$"
    +
    +
    +
  2. +
  3. Texture and Mask Files

    +
    find:t="^((.*_mask)|(.*_tex_m))\.tif$"
    +
    +
    +
  4. +
+
+
+

Regular Expression Symbols Explained

+
    +
  • ^ : Asserts the position at the start of the line.

  • +
  • . : Matches any single character except for line terminators.

  • +
  • * : Matches the preceding element zero or more times.

  • +
  • \ : Escapes the following character, treating it as a literal.

  • +
  • $ : Asserts the position at the end of the line.

  • +
+
+
+

Processing Control

+
    +
  • stopProcessing:b=false : Indicates whether to continue processing or +reprocess the already found and processed items.

  • +
+
+
+

Examples

+
+

Rendering and Prefab Creation

+

To generate renderings from .lod00.dag files and create prefabs from them, +use:

+
find:t="^(.*)\.lod00\.dag$"
+
+
+
+
+

Texture Processing

+

To find and process all files matching "^(.*_n\.tif$" and convert them to +.dds format with swizzling, then process all remaining .tif files:

+
virtual_res_blk{
+  find:t="^(.*_n(_dmg|_expl|_inside)?)\.tif$"
+  swizzleARGB:t="RAG0"
+}
+
+virtual_res_blk{
+  find:t="^(.*)\.tif$"
+  convert:b=yes; fmt:t="DXT1|DXT5"
+}
+
+
+

These examples demonstrate how to use regular expressions to find specific file +types and perform various actions on them within the .folder.blk framework.

+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/all-about-blk/index.html b/assets/all-about-blk/index.html new file mode 100644 index 000000000..d9a37b1cf --- /dev/null +++ b/assets/all-about-blk/index.html @@ -0,0 +1,249 @@ + + + + + + + All about .blk — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+ + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/all-about-blk/skeleton_blk.html b/assets/all-about-blk/skeleton_blk.html new file mode 100644 index 000000000..6979de434 --- /dev/null +++ b/assets/all-about-blk/skeleton_blk.html @@ -0,0 +1,301 @@ + + + + + + + .skeleton.blk — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

.skeleton.blk

+
+

Purpose of .skeleton.blk

+

Composite models are constructed from multiple dynamic models that share a +common skeleton. Below are the rules for creating a .skeleton.blk file for a +composite model.

+
+
+

Examples

+

Let’s break down the configuration using the example of a tank with various +turret and gun options.

+
name:t="tank_body.lod00.dag"
+attachSubSkel{
+  attach_to:t="bone_turret"
+  skel_file:t="turret_a.lod00.dag"
+  skel_node:t="bone_turret"
+  attachSubSkel{
+    attach_to:t="bone_gun_a"
+    skel_file:t="gun_a.lod00.dag"
+    skel_node:t="bone_gun_a"
+  }
+  attachSubSkel{
+    attach_to:t="bone_gun_b"
+    skel_file:t="gun_b.lod00.dag"
+    skel_node:t="bone_gun_b"
+    add_prefix:t="G1:"
+  }
+  attachSubSkel{
+    attach_to:t="bone_gun_c"
+    skel_file:t="gun_b.lod00.dag"
+    skel_node:t="bone_gun_b"
+    add_prefix:t="G2:"
+  }
+}
+attachSubSkel{
+  attach_to:t="bone_turret"
+  skel_file:t="turret_b.lod00.dag"
+  skel_node:t="bone_turret"
+  add_prefix:t="T1:"
+}
+
+
+
+

Parameter Details

+
    +
  • name:t=: The name of the parent model.

  • +
  • attachSubSkel: Block for adding a dynamic model.

    +
      +
    • attach_to:t=: Node in the parent skeleton to which the dynamic model is +linked.

    • +
    • skel_file:t=: Name of the child model.

    • +
    • skel_node:t=: Node in the child skeleton that links to the parent +skeleton.

    • +
    • add_prefix:t=: Prefix for all nodes of the child model.

    • +
    +
  • +
+
+
+

Explanation

+

In the .skeleton.blk example above, we add the turret_a and turret_b +models to the skeleton generated by tank_body, linking them to the +bone_turret. Additionally, we attach the guns gun_a and gun_b to the nodes +bone_gun_a, bone_gun_b, and bone_gun_c of turret_a, with gun_b being +linked twice to different bones.

+

Since we are creating a single common skeleton, there cannot be nodes with +identical names. To address this, we assign a unique prefix to the nodes of each +duplicate. For instance, the nodes of the two copies of bone_gun_b receive the +prefixes G1 and G2, while the nodes of turret_b receive the prefix T1.

+
+

Important

+
    +
  • When specifying the attachment node, do not account for the automatically +added prefixes.

  • +
  • If a child node is linked to a node with the same name, the previous node is +removed from the hierarchy to avoid duplicates.

  • +
+
+
+
+

Hierarchical Dependencies

+

While it’s possible to create long chains of dependencies, simpler structures +are easier to manage. Before adding another level, ensure its necessity.

+

A multi-level hierarchy might look like this:

+
name:t="papa.lod00.dag"
+attachSubSkel{
+  attach_to:t="bone_papa"
+  skel_file:t="child.lod00.dag"
+  skel_node:t="bone_child"
+  add_prefix:t="layer01:"
+  attachSubSkel{
+    attach_to:t="bone_child"
+    skel_file:t="child.lod00.dag"
+    skel_node:t="bone_child"
+    add_prefix:t="layer02:"
+    attachSubSkel{
+      attach_to:t="bone_child"
+      skel_file:t="child.lod00.dag"
+      skel_node:t="bone_child"
+      add_prefix:t="layer03:"
+      attachSubSkel{
+        attach_to:t="bone_child"
+        skel_file:t="child.lod00.dag"
+        skel_node:t="bone_child"
+        add_prefix:t="layer04:"
+      }
+    }
+  }
+}
+
+
+

This structure allows for extensive customization while maintaining +manageability by using prefixes to avoid naming conflicts and ensure proper +hierarchy.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/all-about-blk/spline_blk.html b/assets/all-about-blk/spline_blk.html new file mode 100644 index 000000000..433755c7e --- /dev/null +++ b/assets/all-about-blk/spline_blk.html @@ -0,0 +1,606 @@ + + + + + + + spline.blk — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

spline.blk

+
+

loft{} Block

+

Procedural transparency independent of spline control points.

+
    +
  • randomOpacityMulAcross:p2=1,0.2 – Random transparency variation across the +spline.

  • +
  • randomOpacityMulAlong:p2=1,0.2 – Random transparency variation along the +spline.

    +
      +
    • The first number indicates the overall reduction in the heightmap of the +spline texture.

    • +
    • The second number indicates the delta change in the heightmap of the spline +texture.

    • +
    +
  • +
+../../_images/spline_blk_01.jpg +
+../../_images/spline_blk_02.jpg +
+

This feature allows for adding variation to roads and sidewalks. For instance, +sand may randomly appear, blending with the tile pattern.

+
    +
  • name:t=“afg_road_c” – The name of the spline.

  • +
  • matName:t=“afg_road_c” – The material reference for the spline.

  • +
  • loftLayerOrder:i=0 – Rendering layer order. The spline with the highest +i value is rendered last.

  • +
  • subdivCount:i=0 – Linear subdivision between spline points (higher values +create smoother transitions).

  • +
  • shapeSubdivCount:i=0 – Linear subdivision of the loft geometry relative to +the spline’s width, for example:

    + + + +

    shapeSubdivCount:i=8

    shapeSubdivCount:i=0 (or 1)

    +../../_images/spline_blk_03.jpg +../../_images/spline_blk_04.jpg +
  • +
+
+
    +
  • flipUV:b=0 – Swaps the u and v channels in the UVW mapping.

  • +
  • vTile:r=1.0 – Texture scaling along the spline width, for example:

    + + + + +

    vTile:r=1.0

    vTile:r=2.0

    vTile:r=0.5

    +../../_images/spline_blk_05.jpg +../../_images/spline_blk_06.jpg +../../_images/spline_blk_07.jpg +
  • +
+
+
    +
  • uSize:r=10.0 – Texture scaling along the spline length.

    +

    The ratio of uSize to vTile is directly influenced by the parameters in +the shape block (see below).

    +
  • +
  • extrude:b=0 – When set to 1, the loft geometry is extruded (gains +thickness)

    +
    +

    Note

    +

    This parameter currently has no effect.

    +
    +
  • +
  • cullcw:b=0 – Inverts the spline normals.

  • +
  • offset:p2=0, 0 – Offsets the loft geometry relative to the spline:

    +
      +
    • The first value offsets the loft relative to the spline width.

    • +
    • The second value offsets the loft vertically relative to the spline:

    • +
    + + + + +

    offset:p2 = 0, 0

    offset:p2 = 5.5, 0

    offset:p2 = -5.5, 0

    +../../_images/spline_blk_08.jpg +../../_images/spline_blk_09.jpg +../../_images/spline_blk_10.jpg +
    + + +

    offset:p2 = 0, -5

    +../../_images/spline_blk_11.jpg +
  • +
    +
  • placeAboveHt:r=100 – Distance from the heightmap to the spline where the +spline projection occurs.

  • +
+

The following parameters apply only to lofts. If the spline only projects a +texture and is not baked, this section can be omitted. If this block is enabled, +a check will always be performed, potentially causing long load times (up to +several minutes) in the +daEditor.

+
    +
  • roadBehavior:b=0 – Enables the road behavior block. If disabled, the loft +is placed directly onto the landscape mesh. This setting is rarely needed (95% +of cases).

  • +
  • htTestStep:r=100 – Number of points between spline control points where +conditions for followHills and followHollows will be checked. Cannot be +zero (could crash the daEditor).

  • +
  • followHills:b=0 – Ensures the loft is not drawn beneath hills (lifts the +loft to match hill height when enabled).

  • +
  • followHollows:b=0 – Ensures the loft is not drawn over depressions (lowers +the loft to match the depth when enabled).

  • +
  • maxHerr:r=1.5 – (Needs clarification)

  • +
  • roadTestWidth:r=4.0 – Distance from the center of the spline where +conditions of this block are tested.

  • +
  • curvatureStrength:r=0 – Controls the influence of spline curvature on loft geometry subdivision.

  • +
  • minStep:r=1 – Minimum distance between subdivisions, in meters.

  • +
  • maxStep:r=1000 – Maximum subdivision distance, in meters (see screenshots).

    +

    Examples:

    +
      +
    • curvatureStrength:r=1, minStep:r=1, maxStep:r=100 – Subdivides the loft where needed based on spline curvature, reducing unnecessary triangles:

    • +
    +../../_images/spline_blk_12.jpg +
    +
      +
    • curvatureStrength:r=0, minStep:r=1, maxStep:r=4 – Evenly spaced loft subdivisions, independent of spline curvature.

    • +
    +../../_images/spline_blk_13.jpg +
    +
      +
    • curvatureStrength:r=0, minStep:r=1, maxStep:r=1000 – Optimized for splines with two points and linear interpolation.

    • +
    +../../_images/spline_blk_14.jpg +
  • +
    +
  • integral_mapping_length:b=0 – When set to 1, calculates arc length using +integration (see Arc length).

  • +
  • sweepWidth:r=200 – Removes render instances generated by LandClasses +(e.g., trees or houses intersecting with roads or riverbanks).

  • +
  • addFuzzySweepHalfWidth:r=50 – Creates a “rough” mask or scatter effect +(should not exceed the value of sweepWidth).

  • +
  • sweep2Width:r=50 – Removes render instances even generated by this spline +in the objGen{} block (useful for intersections of roads, e.g., an asphalt +road with a tree-lined avenue intersecting a dirt road).

  • +
+
+
+

node_flags{} Block

+
    +
  • renderable:b=1 – Enables rendering of the loft.

  • +
  • collidable:b=1 – Enables collision for the loft.

  • +
+
+
+

shape{} Block

+
    +
  • closed:b=0 – Closes the loft’s cross-section.

  • +
+

The shape{} block manages the positions of the loft profile points. A +minimum of two points is required.

+

Example:

+

pt:p4= -5.0, 0.0, 1.0, 0.0 where:

+
    +
  • -5.0 – Offset of the point along the spline’s width, 5 meters from the +center.

  • +
  • 0.0 – Vertical offset of the point, relative to the spline (no vertical +offset).

  • +
  • 1.0 – UV coordinate shift along the spline’s length (this parameter has no +effect).

  • +
  • 0.0 – UV coordinate shift along the spline’s width.

  • +
+

Example:

+
    +
  • pt:p4= 5.0, 0.0, 1.0, 0.0 – This point is offset 5 meters in the opposite +direction, with the same vertical and UV settings.

    +../../_images/spline_blk_15.jpg +../../_images/spline_blk_16.jpg +
  • +
+

The final loft will have a width of 10 meters and be vertically aligned with the +spline’s control points (see screenshot). The ratio of vTile to uSize is +1:10 (as described above).

+

Example of a more complex curved profile:

+
    +
  • pt:p4= -7.5, 0.0, 0.0, 0.0

  • +
  • pt:p4= -5.0, 1.0, 0.0, 0.2

  • +
  • pt:p4= 5.0, 1.0, 0.0, 0.8

  • +
  • pt:p4= 7.5, 0.0, 0.0, 1.0

    +../../_images/spline_blk_17.jpg +../../_images/spline_blk_18.jpg +
  • +
+

The final loft will have a width of 15 meters (ranging from -7.5 to 7.5 meters) +and will be vertically aligned with the spline control points. The middle +section, 10 meters wide, will be raised 1 meter above the spline.

+

In the example above, the triangles of the loft behave uniformly. To +differentiate the behavior of points in the loft, the group{} block is used.

+

Example:

+
group{
+  pt:p4= -7.5, 0.0, 0.0, 0.0
+}
+
+group{
+  pt:p4= -5.0, 1.0, 0.25, 0.25
+  pt:p4= 5.0, 1.0, 0.75, 0.75
+}
+
+group{
+  pt:p4= 7.5, 0.0, 1.0, 1.0
+}
+
+
+

Grouping loft points defines their varying behavior.

+

Example:

+
group{
+  type:t="rel_to_collision"
+  pt:p4= -7.5, 0.0, 0.0, 0.0
+}
+
+group{
+  type:t="move_to_min"
+  pt:p4= -5.0, 1.0, 0.25, 0.25
+  pt:p4= 5.0, 1.0, 0.75, 0.75
+}
+
+group{
+  type:t="rel_to_collision"
+  pt:p4= 7.5, 0.0, 1.0, 1.0
+}
+
+
+../../_images/spline_blk_19.jpg +../../_images/spline_blk_20.jpg +

The resulting loft consists of three groups. The vertical positions of the +middle group’s points match the lowest vertical coordinate of the spline’s +control points (type:t="move_to_min"). The two outer groups are “dropped” onto +the collision object (in this case, the heightmap is used as the collision).

+
+
+

colliders{} Block

+

The colliders{} block defines the objects with which the spline collides.

+
    +
  • use:t=“HeightMap” – Collides with the heightmap.

  • +
  • use:t=“(srv) Prefab entities” – Collides with prefab entities.

  • +
  • use:t=“(filter) Generated by spline” – Collides with objects generated by +the spline itself.

  • +
  • use:t=“SGeometry” – Collides with scene geometry.

  • +
+
+
+

obj_generate{} Block

+

The obj_generate{} block is responsible for placing objects along the +spline.

+
    +
  • rseed:i = 111 – Random seed for generating random values. It is essential +to use unique seeds for different obj_generate{} blocks; otherwise, it +will cause a syntax error.

  • +
  • setSeedToEntities:b=yes – Enables randomization for composite objects. +Without this, the same random element will be generated repeatedly, instead of +different ones each time.

  • +
  • placeAtPoint:b=true – Places objects at the spline points, which is useful +for precise placements, such as poles in a city. The step value (discussed +below) will also apply.

  • +
  • step:p2 = 10, 0 – The first value is the distance (step) between objects, +while the second value defines a range for random variation. For example:

    +
      +
    • step:p2 = 10, 0 – Objects are placed exactly 10 meters apart.

    • +
    • step:p2 = 10, 2 – A random value between 0 and 2 meters is added (or +subtracted) to the 10-meter step, creating varied distances between objects.

    • +
    +../../_images/spline_blk_21.jpg +../../_images/spline_blk_22.jpg +
  • +
+

When using the genTag system, the step must be larger than the widest +object’s width. Otherwise, the distance between objects will be determined by +the step, not the object’s width.

+
    +
  • offset:p2 = 0.0, 0.0 – The first value shifts the object’s position along +the spline, and the second defines the range for random variation.

  • +
  • placeAboveHt:r=100 – Objects are projected onto the ground within a +100-meter distance.

  • +
  • startPadding:r=3.5; endPadding:r=3.5 – These parameters define the +exclusion zones at the start and end of the spline, where no objects will be +generated.

  • +
  • orientation:t=“normal” – Controls the orientation of the objects during +placement. Possible values include:

    +
      +
    • orientation:t=“normal” – Objects are not aligned; their tilt depends on +the surface’s normal beneath them.

    • +
    +../../_images/spline_blk_23.jpg +
    +
      +
    • orientation:t=“fence” – Objects are aligned along the spline, with no +tilt.

    • +
    +../../_images/spline_blk_24.jpg +
    +
      +
    • orientation:t=“fence_normal” – Objects are aligned along the spline, and +their tilt depends on the surface’s normal.

    • +
    +../../_images/spline_blk_25.jpg +
  • +
    +
  • tightFenceOrient:b=yes – Aligns objects along chords. As the name +suggests, this is useful for fences. Instead of placing objects on the spline +itself, they are positioned on a chord defined by the object’s width. Chords +are generated along the spline until they fit within its length. If the last +chord is shorter than the object’s width, the object will not be +generated, leaving a gap. To avoid gaps, you can use “filler” objects by +setting integral_end_entity:b=yes.

    +../../_images/spline_blk_26.jpg +
  • +
    +
  • tightFenceIntegral:t=“spline” – Makes chords ignore spline nodes.

  • +
  • tightFenceIntegral:t=“segment” – Treats each segment of the spline as a +separate spline. Useful for generating fences along irregular contours.

  • +
  • tightFenceIntegral:t=“corner” – Filler objects are placed only at corners.

  • +
  • placeAtVeryStart:b=yes and placeAtVeryEnd:b=yes – Ensures objects are +placed at the very start or end of the spline, regardless of their frequency +or padding.

  • +
+

To add unique objects at the start or end of the spline (without repetition +along the middle), use a zero step: step:p2 = 0, 0.

+
+

object{} Block

+

These parameters relate to the objects themselves, as defined in the +object{} block.

+

Example:

+
object{
+  genTag:t="a"
+  width:r=17
+  name:t="modern_siding_suburb_building_a"
+  weight:r=1
+
+  rot_x:p2=0, 0
+  rot_y:p2=0, 0
+  rot_z:p2=0, 0
+
+  offset_x:p2= 0, 0
+  offset_y:p2= 0, 0
+  offset_z:p2= 12, 0
+
+  scale:p2=1.0, 0.0
+  yScale:p2=1.0, 0
+}
+
+
+

Where:

+
    +
  • genTagSeq:t=“a” – The sequence (pattern) of objects used for placement.

    +
      +
    • genTagSeq:t=“a” – Only objects with genTag:t=“a” will be placed. If +there are multiple objects with the same tag, they will be randomly selected, +and their selection frequency is controlled by weight. If the sequence +contains multiple identical tags (e.g., genTagSeq:t=“aaaaaaa” or +genTagSeq:t=“a”), the result is the same.

    • +
    • genTagSeq:t=“ab” – Alternates between objects with genTag:t=“a” and +genTag:t=“b”.

    • +
    • genTagSeq:t=“abbccaccabcca” – Alternates between objects with four +different genTags.

    • +
    +

    Examples:

    +
      +
    • genTagSeq:t=“a”

      +../../_images/spline_blk_27.jpg +
    • +
      +
    • genTagSeq:t=“ab”

      +../../_images/spline_blk_28.jpg +
    • +
      +
    • genTagSeq:t=“abc”

      +../../_images/spline_blk_29.jpg +
    • +
    +
  • +
    +
  • width:r=17 – Distance between consecutive objects of the current type (17 +meters in this case).

  • +
  • name:t=“modern_siding_suburb_building_a” – Reference to the object.

  • +
  • weight:r=1 – The probability (frequency) of selecting this object when +randomly chosen from a group of objects with the same genTag.

  • +
  • rot_x, rot_y, rot_z – Rotation of the object in three planes with a random +value.

  • +
  • offset_x, offset_y, offset_z – Random offsets along the three axes.

  • +
  • scale:p2 – Uniform scale with a random value.

  • +
  • yScale:p2 – Vertical scale with a random value.

  • +
  • integral_end_entity:b=yes – Marks the object as a “filler” when using +tightFenceOrient. This object will be scaled or stretched to fit the +remaining spline length. This parameter only affects the last object in a +sequence.

  • +
+

Objects marked with integral_end_entity may not be generated (if their +genTag is not used in genTagSeq) but will still be used as fillers at +the end of the spline.

+

For correct operation and to avoid excessive distortion, it is recommended to +create multiple filler objects. Typically, in addition to the main object, you +should have three-quarter, half, and quarter-length versions. To allow scaling, +specify values in the xzScale:p2 parameter.

+../../_images/spline_blk_30.jpg +
+
+
+
+

Shape to Loft HDA

+

This script converts a polygonal shape into the coordinates of loft points, +allowing these values to be substituted into a spline class: +dgr_shape_to_loft.hda.

+

The tool is designed to facilitate the translation of polygonal geometry into a +usable format for lofting, enabling smoother integration of custom shapes into +spline-based workflows.

+
+

To visually display the loft geometry in the editor and adjust the parameters:

+
    +
  1. Open the *.mat.blk file and set render_landmesh_combined=0 to +render_landmesh_combined=1.

  2. +
  3. Open the *.spline.blk file and press Ctrl+S to apply the changes made to +*.mat.blk.

  4. +
+

The wireframe of the loft geometry will then be visible by pressing F3.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/animations/animation_export.html b/assets/animations/animation_export.html new file mode 100644 index 000000000..47483c853 --- /dev/null +++ b/assets/animations/animation_export.html @@ -0,0 +1,325 @@ + + + + + + + Animation Export — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Animation Export

+
+

Common Guideline

+

Animations are stored in the .a2d format. To export an animation from 3ds Max, +follow these steps:

+
    +
  1. Ensure Visibility: All layers containing bones, as well as the bones +themselves, must be unhidden and visible.

  2. +
  3. Export Settings: Specify the starting and ending frames for the animation +in the export settings. Automatic frame detection does not work.

  4. +
  5. Add Note Tracks: In the Track ViewDope Sheet, add a Note Track +to any of the animated bones.

    +
    +

    See also

    +

    For more information on adding and editing Note Tracks, see +Add Note Track.

    +
    +

    Add two keys to the Note Track:

    +
      +
    • At frame 0: set a key with the label start.

    • +
    • At the last frame: set a key with the label end.

    • +
    +

    These keys correspond to the key_start and key_end parameters in the +animtree.blk file of the unit. You can change the labels as needed.

    +
    +

    See also

    +

    For more information, see +.blk File Format.

    +
    +
  6. +
  7. Bone Consistency: The number of bones and their linking order must match +between the target model (the one the animation will be applied to) and the +bones exported to the .a2d file.

  8. +
+
+
+

Asset Transfer Between Projects

+

When transferring assets between projects, shader discrepancies may occur, +resulting in errors. To address this:

+
    +
  • Use F4 to edit the .dag files in FAR (configured for studio-specific +settings) and ensure shader compatibility.

  • +
  • Note that the dynamic_simple shader is universally available across studio +projects and is recommended during the initial stages of asset transfer.

  • +
+

Custom Properties in 3ds Max cannot be adjusted post-transfer. +Unfortunately, importing .dag files may cause skin data to break. However, you +can modify the properties using Alt+F4 in FAR.

+
+

Warning

+

Be cautious with the syntax: errors in syntax will not trigger warnings, and +unsaved changes will be discarded.

+
+
+
+

Limitations

+
    +
  • Bone Limit: A maximum of 200 bones per node with skin is supported. While +theoretically extendable to 255, current shader limitations cap the limit at +200.

  • +
  • Triangle Limit: A maximum of 65,534 triangles per node is allowed.

  • +
+
+
+

Project-Specific Custom Object Properties

+

Different projects may have unique requirements for Custom Object Properties +to ensure proper generation of virtual assets. For example:

+
    +
  • Enlisted: Each skinned object must include the following properties:

    +
    animated_node:b=yes
    +collidable:b=no
    +massType:t="none"
    +
    +
    +

    Omitting these properties will result in general errors during dynamic model +generation.

    +
  • +
  • CRSED: Such requirements do not apply.

    +
    +

    Tip

    +

    If you have questions regarding this section, reach out to the author directly +at a.vlasov@gaijin.team.

    +
    +
  • +
+
+
+

Animation Description in animtree.blk

+

Animations must be described in the animtree.blk of the corresponding block. +For War Thunder-based projects, this involves two blocks:

+
    +
  1. AnimBlendNodeLeaf{} block:

    +
    AnimBlendNodeLeaf{
    +  a2d:t="animation_file.a2d"  // Animation file name
    +
    +  continuous{
    +    name:t="animation_name"   // Animation name
    +    key_start:t="start"       // Start key
    +    key_end:t="end"           // End key
    +    time:r=1                  // Playback duration
    +    own_timer:b=yes
    +    eoa_irq:b=yes
    +    addMoveDirH:r=-90         // Direction of unit movement
    +    addMoveDist:r=1.33        // Distance covered per playback time
    +  }
    +}
    +
    +
    +
  2. +
  3. hub{} block:

    +
    hub{
    +  name:t="animation_file"  // Animation name
    +  const:b=yes              // Indicates whether the animation loops
    +}
    +
    +
    +
  4. +
+

Remember that the animtree.blk is also an exportable resource. To see it in +the game, you must perform a daBuild.

+
+
+

Animation Export Description in .blk

+

The export description for animations in .blk format:

+
file:t=some.a2d
+
+opt:b=yes  // Conservative optimization
+posEps:r=0.01
+rotEps:r=0.2
+sclEps:r=0.1
+
+
+

For .folder.blk files:

+
virtual_res_blk{
+  find:t="^(.*)\.a2d$"
+  className:t="a2d"
+  contents{
+    opt:b=yes  // Conservative optimization
+    posEps:r=0.01
+    rotEps:r=0.2
+    sclEps:r=0.1
+  }
+}
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/animations/index.html b/assets/animations/index.html new file mode 100644 index 000000000..b724e625f --- /dev/null +++ b/assets/animations/index.html @@ -0,0 +1,185 @@ + + + + + + + Animations — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+ + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/index.html b/assets/index.html new file mode 100644 index 000000000..e22a57d18 --- /dev/null +++ b/assets/index.html @@ -0,0 +1,221 @@ + + + + + + + Assets and Assets Management — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/assets/lighting/adding_light_fixtures_to_building_composites.html b/assets/lighting/adding_light_fixtures_to_building_composites.html new file mode 100644 index 000000000..e0df2e838 --- /dev/null +++ b/assets/lighting/adding_light_fixtures_to_building_composites.html @@ -0,0 +1,256 @@ + + + + + + + Adding Light Fixtures to Building Composites — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Adding Light Fixtures to Building Composites

+
+

Overview

+

This article explains how to add light fixtures to existing building composites, +using the Enlisted project as an example. However, the process is generally +applicable to any daNetGame-based projects.

+
+
+

Preparing Workspace

+

For efficient and streamlined work with large composites, you will need to open +three Asset +Viewer windows +and one daEditor window.

+
    +
  1. Open daEditor and select the desired map. In this example, it’s the Battle +of Berlin.

  2. +
  3. Locate the building composite you want to modify and copy its name. For this +guide, we will use goebbels_villa as the example.

  4. +
  5. In the first Asset Viewer window, find the composite of the selected +building.

  6. +
  7. In the second Asset Viewer window, open the composite that contains the +light fixtures or the one where the lights will be placed.

  8. +
  9. In the third Asset Viewer window, open the specific light fixture that will +be added to the composite.

  10. +
+

Your workspace should look something like this:

+

Workspace

+
+
+

Adding Light Fixture

+

The easiest way to add your light fixture is by replacing an existing object +within the composite. While not the only method, this approach is currently the +fastest, requiring minimal steps. Importantly, it preserves the original +composite’s pivot points and avoids the need for manual edits in a text editor.

+
    +
  1. Select any convenient object within the composite and duplicate it by +dragging the pivot arrows while holding down Shift. In the pop-up window, +click OK.

    +

    Adding Light Fixture

    +
  2. +
  3. In the Outliner window, select the duplicated asset, right-click on it, and +choose Change asset.

    +

    Adding Light Fixture

    +
  4. +
  5. In the pop-up window, type the name of the required light fixture in the +Filter field (e.g., is_chandelier_h_tall_double_on_cmp). In the ALL +tab, navigate to the directory where the light fixture is located. Then, +select the asset from the list in the lower window and click Select +asset. This will replace the existing object with the desired light +fixture.

    +

    Adding Light Fixture

    +

    Adding Light Fixture

    +
  6. +
  7. Adjust the position of the light fixture as needed, then save the composite.

  8. +
  9. After saving, check the changes in the parent composite using the first +Asset Viewer window and the daEditor window.

  10. +
  11. If any adjustments are needed, make the necessary changes in the appropriate +window, save again, and verify the updates in other windows.

    +

    Adding Light Fixture

    +
  12. +
+
+

Exporting the Map

+

If everything looks correct, export the map from daEditor by navigating to +ProjectExport to Game (PC Format). In the following windows, click +OK without changing any settings. When prompted, overwrite the existing map +by clicking OK in the dialog box.

+

Exporting the Map

+

Finally, launch the game and check for any bugs or issues.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/lighting/flickering_lights.html b/assets/lighting/flickering_lights.html new file mode 100644 index 000000000..a1bf498fd --- /dev/null +++ b/assets/lighting/flickering_lights.html @@ -0,0 +1,910 @@ + + + + + + + Flickering Lights — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Flickering Lights

+
+

General Workflow

+

A flickering light source object is composed of several components.

+ + + + + + + + + + + + + +

+ + + + + + + + + +

+ + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + +

Object Type

Naming Template

Description

Base RendInstindustrial_lamp_steel_wall_a.lod**.dagThis is the model used as + the base for creating a flickering lamp. In some cases, it may not be + required, especially if you are designing a lamp from scratch with built-in + flickering functionality.
RendInst without Emissiveindustrial_lamp_steel_wall_a_base.lod**.dagA detached part of the + object without any emissive properties, exported as a separate render + instance. +

This is necessary for:

+
    +
  • Casting shadows (render instance shadows are significantly computationally +cheaper than dynamic models shadows).

  • +
  • Destroying the light source (lights disappear when the render instance +whose bounding box contains the centers of the light sources is destroyed).

  • +
  • Visually destroying the object (render instances are easily destroyed via +destructors. Dealing with +dynamic models is more complex, so we make them disappear following the light +source rules – their pivots must fall within the bounding box of the +destroyed render instance).

  • +
+

Simply put, when the render instance is destroyed, the dynamic model +disappears, the light source is removed, and the render instance breaks apart +via the destructor.

DynModel with Emissiveindustrial_lamp_steel_wall_a_flicker_dynmodel.lod**.dagA detached part of the + overall model, exported with a dynamic glowing shader. Essentially, this + is the part that will glow and flicker.
AnimCharindustrial_lamp_steel_wall_a_flicker_char.animChar.blkA simple .blk file that + contains references to the dynamic model and its skeleton. Technically, this + is necessary because we cannot place a dynamic model directly on the map, as + it's not a static object. However, placing an animChar is possible. +

Example:

+
    +
  • dynModel:t=“industrial_lamp_steel_wall_a_flicker_dynmodel”

  • +
  • skeleton:t=“industrial_lamp_steel_wall_a_flicker_skeleton”

GameObj (Flickering Light)industrial_lamp_steel_wall_a_flicker_8m_light.gameObj.blkA .blk file containing the + name of the light source template from lights.blk file in the + /prog directory. It is placed in + develop/assets/common/gameRes/gameObjects directory. This game object will + be placed on the map as a "flickering light source" with an 8-meter radius.
GameObj (Flickering DynModel)industrial_lamp_steel_wall_a_flicker_8m_mesh.gameObj.blkA .blk file containing the + name of the light source template from lights.blk file in the + /prog directory. It is placed in + develop/assets/common/gameRes/gameObjects directory. This game object will + be placed on the map as a "flickering dynamic model".
Compositeindustrial_lamp_steel_wall_a_flicker_8m_cmp.composit.blkThis composite.blk file + includes: +
    +
  • The base render instance: industrial_lamp_steel_wall_a_base.lod**.dag

  • +
  • The flickering light game object: industrial_lamp_steel_wall_a_flicker_8m_light.gameObj.blk

  • +
  • The flickering dynamic model game object: industrial_lamp_steel_wall_a_flicker_8m_mesh.gameObj.blk

Flicker and Light Source Templates + (All templates are located in lights.blk file in the /prog directory)industrial_lamp_steel_wall_a_flicker_8m_templateFlicker Template. Defines + the flicker parameters.
industrial_lamp_steel_wall_a_flicker_8m_lightFlickering Light Source + Template. Links the light source to the flicker behavior (you can use a + ready-made light source or make your own). The file has the same name as the + industrial_lamp_steel_wall_a_flicker_8m_light.gameObj.blk file.
industrial_lamp_steel_wall_a_flicker_8m_meshFlickering Dynamic Model + Template. Links the dynamic model to the flicker behavior (via AnimChar). + The file has the same name as the industrial_lamp_steel_wall_a_flicker_8m_mesh.gameObj.blk file.
+
+

Important

+

Pay attention to the file name postfixes highlighted in the text, for example: industrial_lamp_steel_wall_a_**flicker_8m_light**. Please follow the same +naming conventions for your files and templates.

+
+
+
+

Working with Geometry

+

For flickering light sources, the visual model must be divided into two parts: +the Render Instance and the Dynamic Model. The reasons for this have +already been outlined:

+
    +
  • Shadow Casting:

    +

    Shadow casting for light sources from static models and dynamic models is +enabled separately in the light source template. While shadows +from static objects impact performance, the effect is not as significant. +However, shadows from dynamic models are very computationally expensive. That +is the reason why they are rarely used. If the entire light fixture is made +into a dynamic model, the light source inside it will not cast a shadow on the +fixture.

    +
  • +
  • Destruction:

    +

    The render instance is replaced with a destructible version when +destroyed. This is a +straightforward mechanism. In contrast, substituting the entire lamp dynamic +model with a broken version involves a new, more complex pipeline, which isn’t +practical. Therefore, we destroy the dynamic model alongside the render +instance. In this case, the dynamic model simply disappears, and the destroyed +render instance is replaced with a damaged version of the dynamic model’s +section, broken as necessary.

    +
  • +
+
+

Important

+

If you’re creating rare lamps that will be placed in around 10 locations on the +map and need to always flicker, follow the pipeline outlined in this article.

+

If you’re creating lamps that will be used extensively across the map, with only +a few needing to flicker, follow this approach:

+
    +
  • Create a standard render instance with emissive properties for the majority of +placements.

  • +
  • Separately, create the flickering lamps using the current pipeline.

  • +
+

For example, for the current lamp, you’ll have two distinct objects:

+
    +
  • industrial_lamp_steel_wall_a_on.lod**.dag – a render instance of the +constantly illuminated lamp.

  • +
  • industrial_lamp_steel_wall_a_flicker_8m_cmp.composit.blk – a composite file +for the flickering lamp.

  • +
+
+

The example used here is the lamp industrial_lamp_steel_wall_a:

+

industrial_lamp_steel_wall_a

+
+

RendInst + DynModel (Geometry Splitting)

+

A practical splitting between the render instance and the dynamic model is as +follows:

+
    +
  • Dynamic Model: Contains the bulb and part of the lamp that uses a lightmap +with an emissive intensity mask in the alpha channel of the texture.

  • +
  • Render Instance: Includes everything non-emissive and elements that cast +interesting shadows, such as the protective bulb net. While the protective net +could be part of the dynamic model (since it is illuminated), this would +result in flat, uninteresting shadows. The net adds variation and depth to the +shadow.

  • +
+../../_images/industrial_lamp_steel_wall_a_01.jpg +../../_images/industrial_lamp_steel_wall_a_02.jpg +
+

Important

+

To prevent de-synchronization between the matrices of the dynamic model and the +render instance, their pivots must align (positioned correctly in the scene +before exporting to .dag files). In the image above, they are shown side by +side for demonstration purposes only.

+
+
+
+

Naming of Exported Objects

+

For an object initially named industrial_lamp_steel_wall_a.lod**.dag, the +split render instance and dynamic model should be named as follows:

+
    +
  • RendInst: industrial_lamp_steel_wall_a_base.lod**.dag – the non-emissive +base, to which the rest is added.

  • +
  • Dynamic Model: industrial_lamp_steel_wall_a_flicker_dynmodel.lod**.dag – +the flickering dynamic model.

  • +
+
+
+

Shaders

+
    +
  • RendInst: Uses standard shaders based on the asset creation technology.

  • +
  • Dynamic Model: Uses a dynamic emissive shader, typically the +dynamic_emissive shader.

  • +
+
+
+

Destructions

+

As mentioned earlier, destruction is only applied to render instances. Since +destroying dynamic models is more complex, both the dynamic models and light +sources will simply vanish when the associated render instance is destroyed, as +long as they are within its bounding box.

+
+

Important

+

“Automatic” destruction of lights and dynamic models will only occur under the +following conditions:

+
    +
  1. Their pivots must be inside the bounding box of the destroyed render +instance. If they merely touch the edge, destruction will not occur.

  2. +
  3. The property destroyable_with_rendinst:tag{} must be specified in their +templates. Most lights (99%) inherit this property from their base templates, +so it typically doesn’t need to be added manually. However, for each new +dynamic model, you must include this property in the template, such as in +industrial_lamp_steel_wall_a_flicker_8m_mesh.

  4. +
+
+

To properly configure destruction, you only need to:

+
    +
  1. Create a standard _destr for the render instance.

  2. +
  3. Define the render instance destruction in rendinst_dmg.blk according to +standard guidelines.

  4. +
+
+

Important

+

When destroying the render instance, the entire model must be affected, meaning +the destruction process must cover both the static and dynamic parts. Otherwise, +the dynamic model will disappear abruptly, leaving gaps in the remaining render +instance’s geometry.

+
+

Here’s the proper destruction process:

+ + + + + +

Render Instance

Dynamic Model

Render Instance Dynamic Model Destruction

Render Instance Dynamic Model Destruction DMG(optional)

+../../_images/industrial_lamp_steel_wall_a_03.jpg +../../_images/industrial_lamp_steel_wall_a_04.jpg +../../_images/industrial_lamp_steel_wall_a_05.jpg +../../_images/industrial_lamp_steel_wall_a_06.jpg +
+
+
+

Working with Textures and Materials

+

Some key considerations:

+
    +
  • The emissive mask, which is stored in the alpha channel of the albedo texture +based on the +rendinst_emissive/dynamic_emissive +shader system, should only be baked for the part of the model included in the +dynamic model. Flickering is not supported for the render instance.

  • +
  • Therefore, the render instance should not use an emissive shader unless +specifically required by the artistic design (e.g., in a sci-fi setting).

  • +
  • Keep in mind that the flickering light source does not account for the light +color or the emissive color in the material. You must manually adjust the +emissive color to match the desired light color (or vice versa if you’re +creating a new light). There is no automatic synchronization between them.

  • +
  • Unless required by the artistic design, avoid baking colored light into the +albedo texture. Doing so will restrict the emissive color options for the +model (if someone else wishes to use it with a different color). The color and +intensity of the emissive effect are controlled in the +rendinst_emissive/dynamic_emissive +shader settings.

  • +
  • As a result, if you need two identical lamps with different emission colors +(e.g., white and red), you must create two separate dynamic models with +different emissive material settings. This won’t be possible if the emissive +color is baked into the albedo.

  • +
  • Be aware that the Asset +Viewer does not +accurately display emissive color and intensity. All testing should be done +in-game. Do not rely on the Asset Viewer for accurate results.

  • +
+
+
+

Configuring the .folder.blk

+

If you’re unsure how the system handles .dag files and distinguishes between +dynamic models and render instances, please refer to the following +documentation:

+ +
+

Static Geometry Processing

+

As usual, follow the standard procedure for processing static geometry. The only +thing to note is that if you’re handling static geometry at the beginning of the +.folder.blk, make sure to exclude dynamic models. Failing to do so will +cause them to be processed incorrectly.

+

Example:

+
virtual_res_blk{
+  find:t="^(.*)\.lod00\.dag$"
+  exclude:t = "_destr\.lod00\.dag$"
+  exclude:t = "_dynmodel\.lod00\.dag$"
+  className:t="rendInst"
+  contents{
+    lod{range:r=12;}
+    lod{range:r=30;}
+    lod{range:r=80;}
+    allowProxyMat:b=yes
+  }
+}
+
+
+

If you process dynamic models first, no exclusion is needed later (since a +resource processed twice will not be handled again). Just remember to remove +unnecessary stopProcessing:b=false flags.

+
+
+

Dynamic Geometry Processing

+

In Dagor Engine’s logic, a dynamic model is considered a dynamic model if:

+
    +
  1. It uses dynamic shaders.

  2. +
  3. It has a skeleton.

  4. +
+

We’ve already assigned dynamic shaders in the materials, so now we need to +create the skeleton:

+
virtual_res_blk{                          // Skeleton creation block
+  find:t="^((.*)_dynmodel)\.lod00\.dag$"  // Find all LOD00s with the _dynmodel postfix
+  stopProcessing:b=false                  // Allows reprocessing of these .dag files in the next block
+
+  className:t="skeleton"                  // Treat the found assets as skeletons (extracting data to build a skeleton asset)
+  name:t="$2_skeleton"                    // Name the skeleton using the dynamic model name ($2) with a _skeleton postfix
+  contents{                               // Additional data processing rules
+    addSkinNodes:b=yes
+    reduceNodes:b=yes
+  }
+}
+
+virtual_res_blk{                          // Dynamic model creation block
+  find:t="^((.*)_dynmodel)\.lod00\.dag$"  // Find all LOD00s with the _dynmodel postfix (due to the previous block's stopProcessing:b=false)
+  stopProcessing:b=false                  // Likely a redundant parameter here.
+  className:t="DynModel"                  // Process the found assets as dynamic models (extracting data to build the dynamic model asset)
+  name:t="$2_dynmodel"                    // Name the dynamic model as $2_dynmodel (i.e., dynamic model name with _dynmodel postfix)
+  contents{                               // Additional data processing rules
+    lod{range:r=12;}                      // LOD distances
+    lod{range:r=30;}
+    lod{range:r=80;}
+    ref_skeleton:t="$2_skeleton"          // Reference the skeleton created in the previous block
+  }
+}
+
+
+
+

Important

+

There may be some confusion regarding the naming of assets. We process objects +with the _dynmodel postfix, then assign two additional postfixes in the +skeleton and dynamic model creation blocks:

+
    +
  • _skeleton

  • +
  • _dynmodel

  • +
+

This might lead to an expectation of names like:

+
    +
  • _dynmodel_skeleton

  • +
  • _dynmodel_dynmodel

  • +
+

However, the Asset Viewer shows correct names without the redundant +_dynmodel.

+

Important: Naming Considerations

+

This is due to the search query defined in the +find:t="^((.*)_dynmodel)\.lod00\.dag$" statement.

+

Had the query been find:t="^(.*_dynmodel)\.lod00\.dag$", the entire dynamic +model name, including _dynmodel, would be treated as the object name ($2). The +query we use ensures that only the inner-most group (i.e., the core object name +without _dynmodel) is treated as the object name.

+
+
+
+

Collision Processing

+

As we know, collisions are now processed through file includes like include "#/develop/assets/_ri_collision_lod1.blk". By default, this include will also +affect dynamic models, as it doesn’t exclude them. A logical approach would be +to first include the dynamic model collision block, but dynamic models don’t +handle collisions the same way – they are processed through damage models (DMs).

+

Thus, a hybrid processing solution is needed:

+
include "#/develop/assets/_ri_collision_lod1.blk"                                      // Include RenderInst collision processing.
+"@override-last"{                                                                      // Override parameters from the included file.
+  "@override:find":t="^(.*)_dynmodel\.lod01\.dag$"                                     // Find LOD01s specifically for dynamic models.
+  "@override:contents"{gameResPack:t="game_logic.grp"; defCollidable:b=no;}         // Set assembly parameters for dynamic model collisions.
+  stopProcessing:b=no                                                                  // Likely a redundant parameter here.
+}
+
+include "#/develop/assets/_ri_collision_lod1.blk"                                      // Repeat the RenderInst collision processing include.
+
+
+

This hybrid approach ensures that both the render instances and dynamic models +are handled appropriately within the collision pipeline.

+
+
+

AnimChar

+

Technically, we cannot directly place a dynamic model on the map or use it +within the flicker templates we need. However, we can achieve this with an +animChar (animated character). Despite the abstract name, it allows us to manage +dynamic resources effectively.

+

In essence, the animChar file lists the dynamic resources that should be applied +to a specific animated model (flickering light is simply another form of +animation).

+

For instance, the industrial_lamp_steel_wall_a_flicker_char.animChar.blk +contains the following two lines:

+
dynModel:t="industrial_lamp_steel_wall_a_flicker_dynmodel"  // Dynamic model
+skeleton:t="industrial_lamp_steel_wall_a_flicker_skeleton"  // Associated skeleton
+
+
+

Place the animChar file alongside the dynamic model, naming it after the model +with the suffix _char.animChar.blk. No additional .folder.blk processing is +required.

+
+
+

GameObjects

+

Game Objects are essentially +placeholders, containers, or dummies with the same name as the related template. +They are used to position objects in the environment or to add them to template +composites. GameObjects provide the matrix information needed to trigger effects +like sound (SFX), visual effects (VFX), game triggers, and light sources.

+

Typically, GameObjects are stored in a common directory with other GameObjects. +In daNetGame-based projects, for example, this would be located at:

+

/<project_name>/develop/assets/common/gameRes/gameObjects/

+

We need the following:

+
    +
  1. industrial_lamp_steel_wall_a_flicker_8m_light.gameObj.blk – This GameObject +represents the flickering light source (with an 8-meter radius) and will be +placed on the map as a light source. Inside the .blk file, define:

    +
    volumeType:t="point"
    +
    +
    +
  2. +
  3. industrial_lamp_steel_wall_a_flicker_8m_mesh.gameObj.blk – This GameObject +represents the flickering dynamic model and will be placed on the map as the +dynamic object. Inside the .blk file, define:

    +
    volumeType:t="point"
    +ref_dynmodel:t="industrial_lamp_steel_wall_a_flicker_dynmodel"
    +
    +
    +
    +

    Important

    +

    Make sure to reference the correct dynamic model; otherwise, incorrect +resources may be loaded.

    +
    +
  4. +
+
+
+

Composite Object

+

To place everything on the map, you’ll need to create a composite object, which +will include:

+
    +
  • The base render instance

  • +
  • The flickering light game object

  • +
  • The flickering dynamic model game object

  • +
+

Don’t forget to adjust the orientation of the light source based on the lamp’s +configuration (usually, lights are directed sideways along the X-axis). +Additionally, for optimal visuals, make use of photometric light +sources in daNetGame-based projects.

+

An example composite file for the flickering lamp:

+
className:t="composit"
+
+node{
+  name:t="industrial_lamp_steel_wall_a_base:rendInst"
+  tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]]
+}
+
+node{
+  name:t="industrial_lamp_steel_wall_a_flicker_8m_mesh:gameObj"
+  tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0, 0, 0]]
+}
+
+node{
+  name:t="industrial_lamp_steel_wall_a_flicker_8m_light:gameObj"
+  tm:m=[[0.961074, 0.27629, 0] [-2.08593e-08, 7.25591e-08, 1] [0.27629, -0.961074, 7.54979e-08] [0.624191, -0.270539, 0.0204315]]
+}
+
+
+
+
+

Light and Flicker Templates

+

Flicker sources are defined by templates, similar to light source templates, and +are stored in the lights.blk file within the <project_name>/prog directory. For +example:

+

<project_name>/prog/gameBase/content/common/gamedata/templates/lights.blk

+

These templates usually extend from or use base templates found in +light_flicker.blk, which is located in the “global” prog directory:

+

/prog/daNetGameLibs/light_flicker/templates/light_flicker.blk

+

These templates define the flickering behavior for light sources and/or emissive +intensity for dynamic models using +rendinst_emissive/dynamic_emissive +shaders.

+

In general, three templates cover 99% of the cases, and they follow a specific +order. Using our current lamp as an example:

+
    +
  1. industrial_lamp_steel_wall_a_flicker_8m_template – Flicker template that +defines flicker parameters (frequency, pauses, emissive intensity, etc.).

  2. +
  3. industrial_lamp_steel_wall_a_flicker_8m_light – Flickering light template, +which links a light source (either an existing one or a custom one) to the +flicker behavior defined above.

  4. +
  5. industrial_lamp_steel_wall_a_flicker_8m_mesh – Flickering lamp template, +which links the flicker template to the dynamic model via the animChar.

  6. +
+

The relationship between these templates is as follows:

+
    +
  • The flicker template links to:

    +
      +
    • The flickering light template.

    • +
    • The flickering dynamic model template.

    • +
    +
  • +
+

You don’t always need to create new templates from scratch. If you have an +appropriate flicker template, you can reuse it by linking it to the required +light and dynamic model. However, the flickering lamp template (for the dynamic +model) will need to be recreated each time, as it uses specific animChars.

+

The flicker and flickering light templates can be reused in various combinations +and scenarios.

+
+

Caution

+

All templates are named after the lamps they are created for. Reusing templates +is possible, but this naming scheme can lead to confusion. It’s up to you to +decide whether to recreate all templates from scratch or reuse existing ones +(though they may be named after other objects).

+
+
+
+

Flicker Template

+
+

Important

+

The randomization settings for flickering will apply synchronously to all +identical lamps. This means that if you place two identical lamps next to each +other, they will flicker randomly but in sync! Each lamp can look very artistic, +but the sync flickering may not be desirable almost in all cases.

+

If you need to place multiple identical flickering lamps in close proximity, +create several flicker templates (and corresponding templates) along with +multiple composites, then place them randomly.

+
+

Let’s review the flicker template for the current lamp +(<project_name>/prog/gameBase/content/common/gamedata/templates/lights.blk):

+
industrial_lamp_steel_wall_a_flicker_8m_template{
+  _use:t="light_flicker_with_sparks"
+
+  light_flicker__attack_time:p2 = 0.01, 0.15  // Transition time from "off" to "on"
+  light_flicker__on_time:p2 = 1, 10           // Duration of "on" state
+  light_flicker__release_time:p2 = 0.75, 1.25 // Transition time from "on" to "off"
+  light_flicker__off_time:p2 = 0.01, 6        // Duration of "off" state
+
+  light_flicker__on_brightness:p2 = 1.0, 1.6  // Brightness during "on" state, multiplied by light__brightness
+  light_flicker__off_brightness:p2 = 0.0, 0.2 // Brightness during "off" state, multiplied by light__brightness
+
+  light_flicker__noise_brightness_on:p2 = 0.5, 1.0  // Noise amplitude multiplier during "on" state
+  light_flicker__noise_brightness_off:p2 = 0.0, 1.0 // Noise amplitude multiplier during "off" state
+  light_flicker__noise_time:r = 17.0                // Noise frequency (per second)
+}
+
+
+

This template extends the root template _use:t="light_flicker_with_sparks", +which contains additional parameters, including settings for sparks (covered in +the VFX section).

+

The key thing to understand about flicker parameter configuration is that each +parameter has a minimum and maximum value, and a random value between the two is +selected for each cycle. This allows you to create both uniform and highly +random flickering patterns.

+

Overall, the flicker effect is described by the following parameters, which +we’ll explore in detail below.

+

Flicker Template

+
+
+

Cycle Elements

+
    +
  • light_flicker__attack_time:p2 = 0.01, 0.15: Time required for the light +source to transition from the “off” to “on” state. The time, in seconds, for +the light source to ignite. With these parameters, each new cycle will take +between 0.01 and 0.15 seconds.

  • +
  • light_flicker__on_time:p2 = 0.01, 0.5: Duration of the “on” state. The time, +in seconds, the light source will remain lit.

  • +
  • light_flicker__release_time:p2 = 0.25, 0.75: Time required for the light +source to transition from the “on” to “off” state. The time, in seconds, for +the light source to fade out.

  • +
  • light_flicker__off_time:p2 = 0.01, 4: Duration of the “off” state. The time, +in seconds, the light source will remain off.

  • +
+
+
+

Brightness Control

+
    +
  • light_flicker__on_brightness:p2 = 0.6, 1.0: Brightness multiplier during +the “on” state. Multiplies the brightness of the base light source or +emissive shader when the light is on.

  • +
  • light_flicker__off_brightness:p2 = 0.0, 0.1: Brightness multiplier during +the “off” state. Multiplies the brightness of the base light source or +emissive shader when the light is off.

  • +
+
+
+

Additional Micro-Noise

+
    +
  • light_flicker__noise_brightness_on:p2=0.25,1.0: Multiplier for low/high +noise amplitude when the light is “on”. Multiplies the micro-flickering +effect during the “on” state, based on the light_flicker__on_brightness.

  • +
  • light_flicker__noise_brightness_off:p2=0.0,1.0: Multiplier for low/high +noise amplitude when the light is “off”. Multiplies the micro-flickering +effect during the “off” state, based on the light_flicker__off_brightness.

  • +
  • light_flicker__noise_time:r=50.0: Noise frequency (per second). The +frequency of micro-flickering. This value is deterministic and does not +involve randomness.

  • +
+
+
+

VFX

+

We can choose from various base templates, which are extended in our +implementation. Examples include:

+
    +
  • _use:t="light_flicker": Basic template without additional effects.

  • +
  • _use:t="light_flicker_with_sparks": Adds sparks and sound effects, suitable +for indoor lamps.

  • +
  • _use:t="light_flicker_with_sparks_nightly": Adds sparks and sound effects +only during nighttime, which is appropriate for outdoor lights.

  • +
+

The sparks will appear as shown below:

+

VFX

+

The chance of sparks appearing can be overridden using the parameter +light_flicker__sparksEffectSpawnChance:r=0.3.

+

Other settings are embedded in the base template light_flicker.blk in the +global program. By default, the envir_sparks_burst_tiny_smoke VFX is used, but +future updates will allow customization of the VFX.

+
+
+

Flickering Light Template (Light Source)

+

As an example, consider industrial_lamp_steel_wall_a_flicker_8m_light:

+
industrial_lamp_steel_wall_a_flicker_8m_light{
+  _use:t="spot_light_little_b"
+  _use:t="light_flicker_updater_light"
+  light_flicker_updater__template:t="industrial_lamp_steel_wall_a_flicker_8m_template"
+}
+
+
+

This template includes:

+
    +
  • _use:t="spot_light_little_b": Inherits the light source. However, you can +override the light source parameters as needed. For example:

    +
    light__max_radius:r=7
    +light__color:c=208, 191, 152, 255
    +light__brightness:r=121
    +light__nightly:b=no
    +
    +
    +
  • +
  • `_use:t=“light_flicker_updater_light”: A required parameter for flickering +light source templates. Synchronizes the flickering effect.

  • +
  • light_flicker_updater__template:t="industrial_lamp_steel_wall_a_flicker_8m_template": +Points to our flickering settings template from the previous section.

  • +
+
+

Important

+

Regarding _use:t="spot_light_little_b"

+

It’s recommended to create a unique light source for each new lamp. This +approach eliminates the need for overrides within the template. Layering +extended light sources on top of each other can create issues when trying to +modify the settings of a specific light source. You would need to ensure that no +other light source is extending it.

+

Alternatively, instead of extending a light source, you could define it entirely +within the current template. However, in this case, the light source would +always be tied to the flickering template. Typically, flickering light sources +are used to add variation to non-flickering lights. For example, in a hallway +with several identical lamps, only some of them flicker. It makes sense to use a +single reference light source for both variants.

+
+
+
+

Flickering Dynamic Model Template

+

For example, consider industrial_lamp_steel_wall_a_flicker_8m_mesh:

+
industrial_lamp_steel_wall_a_flicker_8m_mesh{
+  _use:t="light_flicker_updater_mesh"
+  animchar__res:t="industrial_lamp_steel_wall_a_flicker_char"
+  light_flicker_updater__template:t="industrial_lamp_steel_wall_a_flicker_8m_template"
+  "destroyable_with_rendinst:tag" {}
+}
+
+
+

This template includes:

+
    +
  • _use:t="light_flicker_updater_mesh": A required parameter for flickering +dynamic model templates. Synchronizes the flickering effect.

  • +
  • animchar__res:t="industrial_lamp_steel_wall_a_flicker_char": Specifies the +animation character for our model. This effectively transmits the flickering +effect to the dynamic model.

  • +
  • light_flicker_updater__template:t="industrial_lamp_steel_wall_a_flicker_8m_template": +Points to our flickering settings template.

  • +
  • "destroyable_with_rendinst:tag" {}: Specifies that the dynamic model should +disappear if its pivot intersects with the bounding box of a destroyed render +instance.

  • +
+
+

Note

+

All emissive settings of the dynamic model (except for color, likely) will be +overridden by the parameters from the flickering template +(industrial_lamp_steel_wall_a_flicker_8m_template).

+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/lighting/index.html b/assets/lighting/index.html new file mode 100644 index 000000000..d25a0e462 --- /dev/null +++ b/assets/lighting/index.html @@ -0,0 +1,233 @@ + + + + + + + Lighting — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/assets/lighting/lighting_catalog.html b/assets/lighting/lighting_catalog.html new file mode 100644 index 000000000..8a194f5ab --- /dev/null +++ b/assets/lighting/lighting_catalog.html @@ -0,0 +1,627 @@ + + + + + + + Lighting Catalog — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Lighting Catalog

+

This catalog is continuously updated.

+
    +
  • bunker_lamp_ceiling_b_on

  • +
+

bunker_lamp_ceiling_b_on

+
    +
  • is_chandelier_m_onoff_cmp

  • +
+

is_chandelier_m_onoff_cmp

+
    +
  • is_chandelier_m_damaged_onoff_cmp

  • +
+

is_chandelier_m_damaged_onoff_cmp

+
    +
  • is_chandelier_m_damaged_on_cmp

  • +
+

is_chandelier_m_damaged_on_cmp

+
    +
  • town_lamp_a_on

  • +
+

town_lamp_a_on

+
    +
  • is_african_lamp_a_glass_on

  • +
+

is_african_lamp_a_glass_on

+
    +
  • is_lamp_ceiling_a_on_cmp

  • +
+

is_lamp_ceiling_a_on_cmp

+
    +
  • is_lamp_ceiling_b_on_cmp

  • +
+

is_lamp_ceiling_b_on_cmp

+
    +
  • normandy_railway_bunker_a_projector_a_on_cmp

  • +
+

normandy_railway_bunker_a_projector_a_on_cmp

+
    +
  • factory_lamp_c_d_on_cmp

  • +
+

factory_lamp_c_d_on_cmp

+
    +
  • garage_floor_lamp_b_on

  • +
+

garage_floor_lamp_b_on

+
    +
  • factory_lamp_a_d_on_cmp

  • +
+

factory_lamp_a_d_on_cmp

+
    +
  • factory_lamp_a_e_on_cmp

  • +
+

factory_lamp_a_e_on_cmp

+
    +
  • factory_warning_lamp_a_on_cmp

  • +
+

factory_warning_lamp_a_on_cmp

+
    +
  • hangar_projector_a_on_cmp

  • +
+

hangar_projector_a_on_cmp

+
    +
  • us_ammunition_bunker_lamp_ceiling_a_on

  • +
+

us_ammunition_bunker_lamp_ceiling_a_on

+
    +
  • factory_lamp_b_a_on_cmp

  • +
+

factory_lamp_b_a_on_cmp

+
    +
  • factory_lamp_b_b_on_cmp

  • +
+

factory_lamp_b_b_on_cmp

+
    +
  • factory_lamp_b_c_on_cmp

  • +
+

factory_lamp_b_c_on_cmp

+
    +
  • factory_lamp_b_d_on_cmp

  • +
+

factory_lamp_b_d_on_cmp

+
    +
  • factory_lamp_c_a_on_cmp

  • +
+

factory_lamp_c_a_on_cmp

+
    +
  • factory_lamp_c_b_on_cmp

  • +
+

factory_lamp_c_b_on_cmp

+
    +
  • factory_lamp_c_c_on_cmp

  • +
+

factory_lamp_c_c_on_cmp

+
    +
  • is_troglodyte_lamp_a_on_cmp

  • +
+

is_troglodyte_lamp_a_on_cmp

+
    +
  • is_troglodyte_lamp_b_on_cmp

  • +
+

is_troglodyte_lamp_b_on_cmp

+
    +
  • is_troglodyte_lamp_c_on_cmp

  • +
+

is_troglodyte_lamp_c_on_cmp

+
    +
  • is_troglodyte_lamp_d_on_cmp

  • +
+

is_troglodyte_lamp_d_on_cmp

+
    +
  • is_troglodyte_lamp_e_on_cmp

  • +
+

is_troglodyte_lamp_e_on_cmp

+
    +
  • is_troglodyte_lamp_f_on_cmp

  • +
+

is_troglodyte_lamp_f_on_cmp

+
    +
  • is_troglodyte_lamp_g_on_cmp

  • +
+

is_troglodyte_lamp_g_on_cmp

+
    +
  • factory_lamp_c_on_cmp

  • +
+

factory_lamp_c_on_cmp

+
    +
  • factory_lamp_e_a_on_cmp

  • +
+

factory_lamp_e_a_on_cmp

+
    +
  • factory_lamp_d_a_on_cmp

  • +
+

factory_lamp_d_a_on_cmp

+
    +
  • factory_lamp_d_b_on_cmp

  • +
+

factory_lamp_d_b_on_cmp

+
    +
  • factory_lamp_d_c_on_cmp

  • +
+

factory_lamp_d_c_on_cmp

+
    +
  • factory_lamp_e_b_on_cmp

  • +
+

factory_lamp_e_b_on_cmp

+
    +
  • factory_lamp_f_c_on_cmp

  • +
+

factory_lamp_f_c_on_cmp

+
    +
  • factory_lamp_e_c_on_cmp

  • +
+

factory_lamp_e_c_on_cmp

+
    +
  • factory_lamp_f_a_on_cmp

  • +
+

factory_lamp_f_a_on_cmp

+
    +
  • factory_lamp_f_b_on_cmp

  • +
+

factory_lamp_f_b_on_cmp

+
    +
  • industrial_lamp_steel_floor_a_far_on_cmp

  • +
+

industrial_lamp_steel_floor_a_far_on_cmp

+
    +
  • industrial_lamp_steel_wall_a_far_on_cmp

  • +
+

industrial_lamp_steel_wall_a_far_on_cmp

+
    +
  • factory_lamp_g_on_cmp

  • +
+

factory_lamp_g_on_cmp

+
    +
  • lamppost_q_on_cmp

  • +
+

lamppost_q_on_cmp

+
    +
  • is_lamp_wall_f_on

  • +
+

is_lamp_wall_f_on

+
    +
  • wall_lamp_a_onoff_b_cmp

  • +
+

wall_lamp_a_onoff_b_cmp

+
    +
  • berlin_lamp_c_on_cmp

  • +
+

berlin_lamp_c_on_cmp

+
    +
  • lamp_wall_e_a_on_cmp

  • +
+

lamp_wall_e_a_on_cmp

+
    +
  • is_lamp_wall_e_sh_on_cmp

  • +
+

is_lamp_wall_e_sh_on_cmp

+
    +
  • bunker_lamp_wall_a_on

  • +
+

bunker_lamp_wall_a_on

+
    +
  • is_lamp_wall_g_on_cmp

  • +
+

is_lamp_wall_g_on_cmp

+
    +
  • 150cm_flak_sw_37_on_cmp

  • +
+

150cm_flak_sw_37_on_cmp

+
    +
  • garage_floor_lamp_a_b_on

  • +
+

garage_floor_lamp_a_b_on

+
    +
  • cdk_lamp_a_on_cmp

  • +
+

cdk_lamp_a_on_cmp

+
    +
  • 150cm_flak_sw_37_statick_on_cmp

  • +
+

150cm_flak_sw_37_statick_on_cmp

+
    +
  • bunker_lamp_oil_a_on_hook_cmp

  • +
+

bunker_lamp_oil_a_on_hook_cmp

+
    +
  • is_lamp_celling_a_b_on_cmp

  • +
+

is_lamp_celling_a_b_on_cmp

+
    +
  • is_lamp_celling_a_on_cmp

  • +
+

is_lamp_celling_a_on_cmp

+
    +
  • is_lamp_celling_c_on_cmp

  • +
+

is_lamp_celling_c_on_cmp

+
    +
  • is_chandelier_h_tall_on_cmp

  • +
+

is_chandelier_h_tall_on_cmp

+
    +
  • is_lamp_celling_b_a_dmg_on_cmp

  • +
+

is_lamp_celling_b_a_dmg_on_cmp

+
    +
  • is_chandelier_a_on_cmp

  • +
+

is_chandelier_a_on_cmp

+
    +
  • is_lamp_celling_b_b_dmg_on_cmp

  • +
+

is_lamp_celling_b_b_dmg_on_cmp

+
    +
  • is_chandelier_b_on_cmp

  • +
+

is_chandelier_b_on_cmp

+
    +
  • is_lantern_hanging_a_on

  • +
+

is_lantern_hanging_a_on

+
    +
  • is_lantern_hanging_ceiling_a_on

  • +
+

is_lantern_hanging_ceiling_a_on

+
    +
  • is_lantern_hanging_wall_a_on

  • +
+

is_lantern_hanging_wall_a_on

+
    +
  • is_lamp_wall_a_on_cmp

  • +
+

is_lamp_wall_a_on_cmp

+
    +
  • is_lamp_celling_b_on_cmp

  • +
+

is_lamp_celling_b_on_cmp

+
    +
  • is_chandelier_h_on_cmp

  • +
+

is_chandelier_h_on_cmp

+
    +
  • wooden_power_pole_d_on_cmp

  • +
+

wooden_power_pole_d_on_cmp

+
    +
  • wooden_power_pole_f_on_cmp

  • +
+

wooden_power_pole_f_on_cmp

+
    +
  • wooden_power_pole_d_glass_on

  • +
+

wooden_power_pole_d_glass_on

+
    +
  • lamppost_a_on_cmp

  • +
+

lamppost_a_on_cmp

+
    +
  • lamppost_b_on_cmp

  • +
+

lamppost_b_on_cmp

+
    +
  • lamppost_c_on_cmp

  • +
+

lamppost_c_on_cmp

+
    +
  • lamppost_d_on_cmp

  • +
+

lamppost_d_on_cmp

+
    +
  • lamppost_e_on_cmp

  • +
+

lamppost_e_on_cmp

+
    +
  • lamppost_f_on_cmp

  • +
+

lamppost_f_on_cmp

+
    +
  • lamppost_g_on_cmp

  • +
+

lamppost_g_on_cmp

+
    +
  • lamppost_h_on_cmp

  • +
+

lamppost_h_on_cmp

+
    +
  • lamppost_i_on_cmp

  • +
+

lamppost_i_on_cmp

+
    +
  • lamppost_j_on_cmp

  • +
+

lamppost_j_on_cmp

+
    +
  • lamppost_k_on_cmp

  • +
+

lamppost_k_on_cmp

+
    +
  • lamppost_l_on_always_cmp

  • +
+

lamppost_l_on_always_cmp

+
    +
  • lamppost_m_on_cmp

  • +
+

lamppost_m_on_cmp

+
    +
  • wall_lamp_a_on_cmp

  • +
+

wall_lamp_a_on_cmp

+
    +
  • lamppost_huge_a_on_cmp

  • +
+

lamppost_huge_a_on_cmp

+
    +
  • lamppost_huge_b_on_cmp

  • +
+

lamppost_huge_b_on_cmp

+
    +
  • lamppost_huge_c_on_cmp

  • +
+

lamppost_huge_c_on_cmp

+
    +
  • lamppost_huge_a_glass_on

  • +
+

lamppost_huge_a_glass_on

+
    +
  • lamppost_a_glass_on

  • +
+

lamppost_a_glass_on

+
    +
  • lamppost_b_glass_on

  • +
+

lamppost_b_glass_on

+
    +
  • lamppost_c_glass_on

  • +
+

lamppost_c_glass_on

+
    +
  • lamppost_d_glass_on

  • +
+

lamppost_d_glass_on

+
    +
  • lamppost_f_glass_on

  • +
+

lamppost_f_glass_on

+
    +
  • lamppost_g_glass_on

  • +
+

lamppost_g_glass_on

+
    +
  • lamppost_i_glass_on

  • +
+

lamppost_i_glass_on

+
    +
  • lamppost_j_glass_on

  • +
+

lamppost_j_glass_on

+
    +
  • lamppost_k_glass_on

  • +
+

lamppost_k_glass_on

+
    +
  • lamppost_l_glass_always_on

  • +
+

lamppost_l_glass_always_on

+
    +
  • lamppost_l_glass_on

  • +
+

lamppost_l_glass_on

+
    +
  • lamppost_m_glass_on

  • +
+

lamppost_m_glass_on

+
    +
  • wall_lamp_a_glass_on

  • +
+

wall_lamp_a_glass_on

+
    +
  • bonfire_a_vfx_cmp

  • +
+

bonfire_a_vfx_cmp

+
    +
  • is_lamp_table_a

  • +
+

is_lamp_table_a

+
    +
  • is_lamp_floor_a

  • +
+

is_lamp_floor_a

+
    +
  • is_table_lamp_b

  • +
+

is_table_lamp_b

+
    +
  • is_table_lamp_a

  • +
+

is_table_lamp_a

+
    +
  • is_lamp_wall_b

  • +
+

is_lamp_wall_b

+
    +
  • is_lamp_wall_c

  • +
+

is_lamp_wall_c

+
    +
  • is_lamp_wall_d

  • +
+

is_lamp_wall_d

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/lighting/lights.html b/assets/lighting/lights.html new file mode 100644 index 000000000..3122b7032 --- /dev/null +++ b/assets/lighting/lights.html @@ -0,0 +1,426 @@ + + + + + + + Lights — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Lights

+
+

Overview

+

This article discusses the mechanics and configuration of environmental light +sources, which are used as elements of the game world, added to composite +objects, or placed by level designers as game objects (gameobj).

+
    +
  • Light sources are templates located in the lights.blk file within the +<project_name>/prog directory.

  • +
  • They can be configured either via the .blk file or through the mission +editor (F12). However, the editor uses only for configuring settings. To +save changes, you must manually copy them back into the .blk file.

  • +
  • Globally, light sources fall into two categories: omni (spherical) and +spot (a 90-degree directional cone).

  • +
  • Lights are added to the scene as gameobj. More details about this process +are provided below.

  • +
  • It’s a good practice to name both the light sources and visual models with +details about their radius and color (if necessary).

  • +
  • Avoid reusing the same light sources in different environments. For instance, +if you have a chandelier hanging five meters above the ground, do not use the +same light at eight meters. Create a separate object with its own settings. In +reality, larger rooms require stronger bulbs.

  • +
+
+
+

Key Considerations When Creating a New Light Source

+
    +
  1. Spotlights vs. Omni Lights: Spotlights illuminate an area six times +smaller than omni lights, and they are also six times faster in terms of +performance. Whenever possible, use spotlights instead of omni lights.

  2. +
  3. Extending Light Templates: Creating or configuring a new light source +often involves adding a new visual model, such as a lamp or spotlight. Always +create a new light source by extending the original template unless there’s a +special reason to modify an existing one. This ensures that future changes to +a light source don’t unintentionally affect other lights that extend from it.

    +

    From a performance standpoint, there is no difference between ten clones of a +single light source and ten unique lights with the same parameters. +Therefore, don’t hesitate to increase the number of light sources. When +naming them, use descriptive titles that indicate their specific use, +including references to the visual model.

    +
  4. +
+
+
+

Light Source Parameters and Configuration

+
+

light__color

+

Defines the light color using RGBA values from 0 to 255. The alpha channel +(A) has no effect in this context.

+
+
+

light__brightness

+

It’s crucial to configure brightness in conjunction with the light’s maximum +radius.

+
    +
  • Do not set the brightness higher than necessary for the maximum radius. +Excessive brightness degrades visual quality, affects the eye adaptation +system, and can negatively impact gameplay.

  • +
  • Always adjust brightness individually for each light source instead of copying +values from other lights. Balance brightness with the maximum radius of the +light.

  • +
+

When configuring natural light sources like torches, candles, kerosene lamps, or +campfires, avoid using overly saturated yellow-orange colors or excessively high +brightness levels.

+
+
+

light__max_radius

+

Defines the boundary of the light’s influence. The edge is soft, with a gradient +extending inward. The gradient strength is fixed and represents a percentage of +the radius.

+
    +
  • Optimize Radius and Brightness Together: As with brightness, configure the +radius so it matches the brightness. Overlapping light radii harm performance, +so keep radii as small as possible and ensure minimal overlap between lights.

  • +
+
+

Important

+

The maximum visible distance of a light with white color (255, 255, 255) is 3 +meters for every unit of brightness.

+
+

For convenience, here’s a table showing the relationship between brightness and +radius:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BrightnessMax Radius
0.250.75
0.752.25
39
515
1030
+

Set the radius slightly below these values for optimization purposes, but never +exceed them. Additionally, take into account the effect of IES textures – since +light rays rarely reach their maximum value in such profiles, the maximum radius +should be adjusted accordingly on a case-by-case basis. However, the values in +the table should not be exceeded.

+
+
+

spot_light__shadows / omni_light__shadows

+

Enable shadows for large light sources that illuminate an entire room. Avoid +using shadows for minor lights like desk lamps or wall sconces, as shadows are +resource-intensive.

+
+
+

spot_light__dynamic_obj_shadows / omni_light__dynamic_obj_shadows

+

Use with extreme caution. This is very performance-intensive and should only +be applied to large, significant, and unique light sources. On a given map, +there should be no more than two or three such lights. Ideally, dynamic shadows +should not be used at all unless absolutely necessary.

+
+
+

spot_light__shadow_shrink / omni_light__shadow_shrink

+

This parameter controls shadow softness and is set using integer numbers (no +decimals).

+
    +
  • Wide visual light sources (like a campfire) should have soft shadows, while +small sources (like a bulb) should have sharper shadows.

  • +
  • The valid range is from 0 to 2.

  • +
+ + + +

0

2

+../../_images/lights_01.jpg +../../_images/lights_02.jpg +
+
+

spot_light__inner_attenuation

+

This parameter is specific to spotlights and controls the softness of the +spotlight’s edge.

+
    +
  • 0 for maximum blur, 1 for sharp edges.

  • +
+ + + +

0

1

+../../_images/lights_03.jpg +../../_images/lights_04.jpg +
+
+

light__texture_name

+

These are photometric data textures used for volumetric shadow mapping. Detailed +information can be found in a Photometric Lights +article.

+
    +
  • IES textures have negligible file size and should be placed in the common +directory:

    +
    <project_name>/develop/assets/manmade_common/textures/ies
    +
    +
    +
  • +
  • Feel free to create new textures to fit your needs if no existing ones are +suitable. Name them descriptively, preferably including the name of the visual +model they are paired with, and begin with ies_*. For example, +ies_barsed_lamp_b.

  • +
+
+
+

light__nightly

+

This is a binary setting (yes/no). When activated, the light will turn on +only during night time.

+
+
+

light__use_box

+

This setting, enabled by default for all omni lights, is a binary (yes/no) +option that controls whether the light is restricted to render only within an +envi_probe (typically indoors). If the light is used outdoors, this should be +disabled. Spotlights are usually sufficient for outdoor lighting.

+
+
+
+

Configuring Emission Strength for Visual Models

+

For configuring emission on shaders used by lamps and other visual models +associated with light sources, refer to the following shaders:

+ +

It’s important to keep in mind that overly bright emission, like excessive light +brightness, can ruin the visual quality, interfere with eye adaptation, and +negatively impact gameplay. Adjust emission to be as subtle as possible.

+
+
+

GameObj

+

To add a light source to a composite object, create a gameObject for it and +place it in */develop/assets/common/gameRes/gameObjects directory. Name the +file: template_name.gameObj.blk.

+
+

See also

+

For more information, see +gameObjects.

+
+

If the light source is used with a dynamic model (which cannot be drawn in +daEditor), you can add the following line to the gameObj to display the +model in the editor:

+
ref_dynmodel:t="name_of_dynmodel"
+
+
+
+
+

Restriction Box

+

It’s possible to further limit the influence of light sources using the +omni_light_restriction_box.gameObj.blk object. This is useful for preventing +light from passing through walls, for example. Despite the name containing +omni_light, this object also works for spotlights.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/lighting/lights_creation_guide.html b/assets/lighting/lights_creation_guide.html new file mode 100644 index 000000000..7138b4080 --- /dev/null +++ b/assets/lighting/lights_creation_guide.html @@ -0,0 +1,343 @@ + + + + + + + Lights Creation Guide — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Lights Creation Guide

+
+

Main Point

+

The key rule when working with lighting is to carefully check the source +placement results. The radius of light sources should be sufficient to +illuminate the necessary parts of a room or area, but not exceed reasonable +limits. For instance, it’s inappropriate to use a light source designed for a +small guardhouse to illuminate a large hangar.

+
+
+

Light Source

+

Templates for light sources are located in the lights.blk file within the +<project_name>/prog directory. For example, in daNetGame-based projects, it +can be found here:

+

<project_name>/prog/gameBase/content/common/gamedata/templates/lights.blk

+

Details about light source settings are discussed in the Lights +article.

+

Key points:

+
    +
  • For each new visual model, create and configure a new light source, including +the visual model’s name in the light source name (along with functional +parameters such as light radius if needed).

  • +
  • Prefer to use spot lights over omni lights.

  • +
  • Light sources can be adjusted via the mission editor (F12 in-game). These +changes won’t be saved but can be previewed immediately.

  • +
  • To change the time of day, use the browser-based tool Var +Editor.

  • +
  • Balance brightness and maximum radius when configuring light sources.

  • +
  • If creating an omni light for outdoor use (outside an envi_probe), +ensure the light__use_box parameter is disabled; otherwise, the light won’t +be rendered outside.

  • +
  • Avoid activating shadows if possible.

  • +
  • If shadows are enabled, they should only apply to static objects. Dynamic +objects may have a unique light source if necessary.

  • +
  • Always check shadows in-game, as enabled shadows may degrade the scene in +certain situations, depending on the light source’s position relative to the +visual model.

  • +
  • If the light source’s visual model can be destroyed, add the parameter +destroyable_with_rendinst:tag to the light source template.

  • +
  • If the light source is only active during nighttime (e.g., a street lamp), add +the parameter light__nightly:b=yes to the template.

  • +
+
+

IES Textures

+

Details on creating IES textures are covered in the Photometric +Lights article. Don’t hesitate to generate multiple +IES textures. Name them according to the light source and/or visual model.

+
+
+

Flickering Source

+

For more information on flickering light sources, refer to the Flickering +Lights article.

+

To correctly set up a flickering light source, the following entities must be +created:

+
    +
  1. A flickering light source.

    +
    +

    Note

    +

    This is not the same as a light source; refer to the +article for details.

    +
    +
  2. +
  3. A dynamic visual model with an animation controller.

  4. +
  5. A template linking the animChar of the dynamic model to the flickering +source. Don’t forget to specify destructibility if the dynamic model can be +destroyed.

  6. +
  7. A gameObj template linking the animChar of the dynamic model to the +flickering source.

  8. +
  9. A light source.

  10. +
  11. A template linking the light source to the flickering source.

  12. +
  13. A gameObj template linking the light source to the flickering source.

  14. +
  15. A composite file combining the two gameObjects: one for linking the +flickering source to the dynamic model and the other for linking the +flickering source to the light source.

  16. +
+
+
+
+

Visual Model

+

This refers to the geometric model of the light source, such as a lamp, +spotlight, torch, or any other visual representation of a light source.

+

Consider whether the light source requires flickering. For emergency lights, +torches, and most lamps (since many can have flickering variants), create a +dynamic model with an emissive surface and, if necessary, a render instance +base. The logic behind separating the visual model into render instances and +dynamic models, as well as their preparation, is detailed in the Flickering +Lights article.

+
+

Emission Strength

+

There are no exact values for emission strength since it depends on factors like +the albedo, emission mask, and the size of the emissive surface. Configure the +emission strength individually, keeping in mind that lower values are generally +better. Excessive emission can disrupt the camera’s adaptation and negatively +impact gameplay.

+

More details on configuring emission can be found in this +article.

+
+
+
+

GameObj

+
+

See also

+

For more information, see +gameObjects.

+
+

Create a gameObj for both the light source and the dynamic visual model. In +daNetGame-based projects, for example, they are located here:

+

<project_name>/develop/assets/common/gameRes/gameObjects

+

For convenience, ensure to define a reference model in the gameObj. For example:

+

ref_dynmodel:t="lamppost_d_glass_flicker_dynmodel"

+

This is necessary to display the geometry in the +daEditor.

+
+
+

Restriction Box

+

The Restriction Box is a gameObj used to cut off light. It’s required for +light sources that don’t cast shadows, to prevent light from passing through +walls. Typically, it’s not included in the composite file with the light source, +but rather placed manually at the location or added to the composite file for +the entire building.

+

The object is named:

+

omni_light_restriction_box.gameObj.blk

+
+
+

Composite

+

Composite file can use the same visual model +but have different light sources. In such cases, make sure to include the light +source functionality in the composite file name. Always specify the radius in +the names of composites containing light sources, e.g.:

+

factory_lamp_a_flicker_10m_cmp.composit.blk

+

A composite containing a light source may consist of:

+
    +
  • RendInst – static base, which can be destructible and include destruction +logic.

  • +
  • GameObj template describing the light source or linking the light source +to the flickering source.

  • +
  • GameObj template using a dynamic model, in case the light source has a +flickering variant.

  • +
  • Restriction Box for cutting off light, though it is often placed +separately and not included in the composite with the light source.

  • +
+
+
+

Placing Light Sources

+

Remember to account for the light radius when placing light sources. The same +light source cannot be used to illuminate both a small room and a large hall. +This would either leave the hall under-illuminated or cause the small room to be +over-lit. Excessive brightness not only breaks visual immersion but also +disrupts gameplay.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/lighting/photometric_lights.html b/assets/lighting/photometric_lights.html new file mode 100644 index 000000000..b5fdf1955 --- /dev/null +++ b/assets/lighting/photometric_lights.html @@ -0,0 +1,591 @@ + + + + + + + Photometric Lights (IES) — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Photometric Lights (IES)

+
+

Overview

+

In daNetGame-based projects, along with traditional light sources like spot or +omni, you can also add photometric light sources using the IES +format.

+

An IES file is essentially a text file that defines the distribution of light +intensity from a source, based on angles in 3D space. The format specification +can be found +here.

+

You can download ready-made IES files from the internet, as most lighting +manufacturers provide IES profiles for their products. There are also extensive +IES libraries available, containing thousands of profiles suitable for various +visualization needs.

+

Alternatively, you can create IES profiles manually using various editors. I’ve +used this IES +generator, which is +simple to use: you draw the light profile in the vertical plane with the mouse. +The resulting profile is then “rotated” around the vertical axis (similar to the +Lathe modifier in 3ds Max, which creates a 3D object from a spline). +However, this tool cannot create non-symmetrical IES profiles along both axes, +meaning the light distribution cannot vary simultaneously on walls and floors.

+

Photometric Light Sources

+

If more complex IES profiles are needed, you’ll have to find and test other +software, or search for existing IES files. For simpler tasks, this tool +suffices. Examples are provided at the end of this article.

+
+
+

Integrating IES Files in daNetGame-based Projects

+

Once you’ve downloaded or created an IES file, place it in the following +directory:

+
/<project_name>/develop/assets/manmade_common/textures/ies
+
+
+

The following block in the global foled.blk file handles the processing of IES +files:

+
virtual_res_blk{
+  find:t="^(.*)\.ies$"
+  className:t="tex"
+  contents{
+    addrU:t="clamp"; addrV:t="clamp"
+    convert:b=yes
+    buildIES:b=yes
+    textureWidth:i=128
+    textureHeight:i=128
+  }
+}
+
+
+

This means that during the build process, each IES file is converted into a +simple 128x128 pixel texture in L8 format.

+

Details of the engine’s implementation are discussed in the +Photometry section.

+
+
+

Using an IES File in a Light Source

+

To use a specific IES file as a light source, simply specify its name in the +template under the light.texture_name variable and compile the vroms.

+

The light template for daNetGame-based projects is located at:

+
/<project_name>/prog/gameBase/content/common/gamedata/templates/_lights.blk
+
+
+

For example, a wall sconce with two lamps would look like this:

+
light_sconce_medium{
+  _extends:t="omni_light"
+  light.max_radius:r=3.5
+  light.offset:p3=0, 0, 0
+  light.color:c=255, 152, 70, 255
+  light.brightness:r=2.5
+  light.contact_shadows:b=false
+  light.texture_name:t="ies_doublelamp_sconce_a"
+}
+
+
+
+
+

Important Notes on IES and Omni Lights

+

Photometric lights can only be applied to omni lights, which means they won’t +cast shadows. As such, they are not suitable for use in lamps, spotlights, or +similar sources. Instead, they should be reserved for artistic lighting effects.

+
+
+

Examples of IES Usage

+

Below are some example IES profiles (from left to right: view in the Asset +Viewer, view in +the IESGen 4 generator, and view in-game):

+
    +
  • ies_doublelamp_sconce_a

  • +
+../../_images/photometric_lights_02.jpg +../../_images/photometric_lights_03.jpg +../../_images/photometric_lights_04.jpg +
    +
  • ies_multilamp_sconce_a

  • +
+../../_images/photometric_lights_05.jpg +../../_images/photometric_lights_06.jpg +../../_images/photometric_lights_07.jpg +
    +
  • ies_singlelamp_sconce_a

  • +
+../../_images/photometric_lights_08.jpg +../../_images/photometric_lights_09.jpg +../../_images/photometric_lights_10.jpg +
    +
  • ies_singlelamp_sconce_b

  • +
+../../_images/photometric_lights_11.jpg +../../_images/photometric_lights_12.jpg +../../_images/photometric_lights_13.jpg +
    +
  • ies_hand_lantern_a (initially intended for a kerosene lamp, but ultimately +used for emergency exit signs).

  • +
+../../_images/photometric_lights_14.jpg +../../_images/photometric_lights_15.jpg +../../_images/photometric_lights_16.jpg +

In one of the examples, to get uneven lighting on the ceiling, I simply rotated +the light source horizontally by 90 degrees.

+
    +
  • ies_monitor_a

  • +
+../../_images/photometric_lights_17.jpg +../../_images/photometric_lights_18.jpg +../../_images/photometric_lights_19.jpg +

As shown in the last example, even under the table there is light because omni +lights do not cast shadows. However, the result is acceptable – certainly better +than placing there a spotlight with harsh shadows.

+
+
+

Limitations of IES

+

It’s important to understand that a single IES profile cannot perfectly recreate +the complex light pattern of multi-source or surface-based lights. The light +always radiates from a single point, not from multiple sources or an area. For +instance, representing a wall sconce with many small bulbs using a single IES +profile is always a compromise. You’ll notice that the light rays emanate from +the center rather than from each individual bulb. Nevertheless, the result is +still visually acceptable.

+

Limitations of IES

+
+
+

Photometry

+

daNetGame-based projects support photometry files to describe the light +distribution of omni lights. This article explains how to use them.

+
+

Supported File Types

+ +
+
+

File Placement

+

Photometry files should be placed in the develop/assets/ directory under an +appropriate folder. To export these assets, add the following block to the +.folder.blk:

+
virtual_res_blk{
+  find:t="^(.*)\.ies$"
+  className:t="tex"
+  contents{
+    convert:b=yes
+    buildIES:b=yes
+    textureWidth:i=128
+    textureHeight:i=128
+    blurRadius:r=3
+    phiMin:r=0
+    phiMax:r=360
+    thetaMin:r=0
+    thetaMax:r=180
+    edgeFadeout:r=-1
+  }
+}
+
+
+

Ensure that the asset names have the ies_ prefix. Without it, they will not be +recognized as photometry textures in the game.

+

The textureWidth and textureHeight components globally define the resolution +of the generated textures. While it’s possible to export photometry textures +with different resolutions, the game will not be able to load them. If you +create additional blocks to parse .ies files or add another type later, ensure +that all photometry textures maintain the same resolution.

+
+
+

Spotlights & Special Options

+

For spotlights, light is concentrated around the center, allowing for enhanced +texture quality. The IES exporter supports limiting light intensity to a +specific angle around the view direction (e.g., 180 degrees to restrict light to +the forward direction).

+
+

How to Use

+

This option must be applied individually to lights:

+
    +
  1. Place the .ies file in the appropriate directory (with a corresponding +.folder.blk for processing).

  2. +
  3. Open the Asset +Viewer and +select the IES resource.

    +
      +
    • Check the photometry info in the right-side panel.

    • +
    • The top three values (blur radius, scaling, rotated) show the current +configuration.

    • +
    • The bottom two values represent the calculated optimal values.

    • +
    +
  4. +
  5. Create a virtual asset .blk file, such as ies_flashlight_a.tex.blk for +ies_flashlight_a.ies.

  6. +
  7. Specify the iesScale:r and iesRotation:b properties with the optimal +values. (Currently, this process is not automated.)

  8. +
+

How to Use

+

The rotation value also implicitly adjusts the scaling. These specified values +should be close to the optimal values displayed in the Asset Viewer. If the +values are too low, leading to a loss in texture quality, daBuild will display +a warning and suggest the optimal values. If the scaling cannot store the +texture properly, daBuild will produce an error.

+
+
+
+

Blurring

+

Blurring can help mitigate pixelation or aliasing in lights. The blurRadius is +specified in degrees, not pixels, and applies to the entire sphere to ensure +texture edges align seamlessly.

+
+

Usage

+

Define the blurRadius:r parameter in the .folder.blk or the virtual asset +.blk file, as shown in the examples. The default value is 3.

+
+
+
+

Angular Restrictions

+

The light source’s content can be restricted to specific angular ranges on both +axes. The relevant options are:

+
phiMin:r=0
+phiMax:r=360
+thetaMin:r=0
+thetaMax:r=180
+edgeFadeout:r=-1
+
+
+
    +
  • The phiMin-phiMax range defines the restriction around the forward +direction.

  • +
  • thetaMin-thetaMax defines the restriction from forward (theta=0) to +backward (theta=180).

  • +
+

Light intensity is fully preserved within the specified area. Outside this area, +it fades out based on edgeFadeout. By default, edgeFadeout:r=-1 calculates +an automatic fadeout to ensure the light doesn’t bleed more than one pixel on +the texture (resolution-dependent). If edgeFadeout >= 0, it is treated as a +degree value, independent of texture resolution.

+

Example:

+

To prevent backlight leakage through walls, use a vertical restriction with +thetaMin:r=0 and thetaMax:r=93. You must create a new virtual resource with +these parameters in the .folder.blk (e.g., +<project-name>/develop/assets/manmade_common/textures/ies/.folder.blk).

+../../_images/photometry_02.jpg +../../_images/photometry_03.jpg +
+
+

Setting Photometry for an Omni Light

+

To set the photometry for an omni light:

+
    +
  1. Add the .ies files to an asset folder.

  2. +
  3. Define the photometry of the omni light in the map’s .blk file:

  4. +
+
entity{
+  _template:t="omni_light"
+  light.direction:p3=0, 1, 0
+  light.texture_name:t="asset_name"
+  ...
+}
+
+
+
+

Notes for Custom Textures

+
    +
  • Any texture can be used as a photometry texture in light.texture_name, but +for custom textures (not generated by the IES converter), keep the following +in mind:

    +
      +
    • The red channel is used in the shader.

    • +
    • The resolution must match the photometry resolution specified in the +.folder.blk.

    • +
    • The layout must match the mapping algorithm (spherical or octahedral).

    • +
    • If the resolution is low, folding lines may be visible in the light +intensity. This can be mitigated by blurring the pixel pairs at the folding +lines to have similar values:

      +
        +
      • Spherical mapping: Left and right sides (0, y)(w-1, y)

      • +
      • Octahedral mapping: Each side’s halves fold together, e.g., for the +top: (x, 0)(w-x-1, 0)

      • +
      +
    • +
    • Using custom textures for purposes other than testing is not recommended due +to the maintenance overhead associated with resolution and layout changes.

    • +
    +
  • +
  • The game will load assets based on the ies_ prefix.

  • +
  • Additionally, since photometry is not uniform, the light source direction must +be specified. By default, the light points downward, but this may not match +the orientation of the photometry in the .ies file. While this worked for +tested files, no rule guarantees a specific orientation in .ies files.

  • +
  • For better performance, lights do not store a full orientation and can rotate +freely around their direction. Below are the exact details of how the light’s +orientation is handled:

    +
      +
    • The light’s direction corresponds to its Y-axis. When sampling +photometry data, this direction is represented by theta = 0, while phi +varies within the range [0, 2*pi]. This typically reflects the direction +in which the light was pointed during measurement.

    • +
    • The X-axis is either (1, 0, 0) or (0, 0, 1) — whichever option +results in a vector that is perpendicular to the light’s direction. The +parallel component along the light’s direction is removed to ensure this +perpendicularity. The axis further from the light’s direction is chosen.

    • +
    +
  • +
  • If the texture is not found, the game will issue a warning and proceed without +applying a photometry texture.

  • +
  • In cases where no photometry texture is specified or located, the light will +behave as before, using full intensity.

  • +
+
+
+
+

Mapping

+

.ies files typically contain a limited number of non-uniformly spaced samples. +These are converted into textures using one of two mapping methods:

+
    +
  • Octahedral Mapping (default): Provides better sample distribution.

    +

    Octahedral Mapping

    +
  • +
  • Spherical Mapping: Though implemented, it’s not in use due to slightly +worse performance and uneven sample distribution (dense at the poles, sparse +on the sides).

  • +
+
+

Changing the Mapping Algorithm

+

To enable spherical mapping:

+
    +
  1. In <engine_root>/prog/gameLibs/publicInclude/render/renderLights.hlsl, +comment or uncomment the line:

  2. +
+
#define USE_OCTAHEDRAL_MAPPING
+
+
+
    +
  1. In prog/tools/sceneTools/assetExp/exporters/texExp.cpp, modify the +following:

  2. +
+
IesReader::ImageData img = ies.generateOctahedral(width, height);
+// IesReader::ImageData img = ies.generateSpherical(width, height)
+
+
+
+
+

Technical Details of Generated Textures

+
    +
  • Format: L8 (8-bit, single channel)

  • +
  • File type: .DDSX

  • +
  • Spherical Mapping: The first and last pixel columns are nearly identical +to avoid issues with interpolation at the folding lines (redundancy: h +pixels).

  • +
  • Octahedral Mapping: Edge pixels are nearly matched with corresponding +folding pixels (redundancy: h + w pixels).

  • +
+

Examples:

+ +../../_images/photometry_05.jpg +../../_images/photometry_06.jpg + +../../_images/photometry_07.jpg +../../_images/photometry_08.jpg +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/lighting/replacing_or_modifying_lights.html b/assets/lighting/replacing_or_modifying_lights.html new file mode 100644 index 000000000..619cd0222 --- /dev/null +++ b/assets/lighting/replacing_or_modifying_lights.html @@ -0,0 +1,427 @@ + + + + + + + Replacing or Modifying Lights in Props — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Replacing or Modifying Lights in Props

+

This article covers how to replace or modify light sources in props, using the +Enlisted project as an example. However, the general process is applicable to +any daNetGame-based project.

+
+

Phase 1: Setting Up the daEditor

+
    +
  1. Open daEditor: +Navigate to your directory: <your_drive>:/<engine_root>/enlisted/develop +and run daEditor.cmd.

    +

    +
  2. +
  3. Open the Project: Select Open Project from the menu.

    +

    +
  4. +
  5. Load the Map: Open the battle_of_berlin map.

    +

    +
  6. +
  7. Hide Unnecessary Visual Elements: Press P to open the Properties +window. In the Navigation meshes section, uncheck the unnecessary options +as shown below.

    +

    +
  8. +
  9. Disable Splines: Red dots represent splines. To hide them, click the +black cross on the toolbar.

    +

    +
  10. +
  11. Hide Additional Elements: If anything else needs to be hidden, press +F11 and uncheck the relevant boxes in the pop-up window.

    +

    +
  12. +
  13. Navigate to the Prop: Fly to the prop of interest using freeCamera +mode, toggled with the Spacebar. Move with WASD and LMB.

  14. +
  15. Select the Target Composite: When you reach the light fixtures, select +the composite (in this case, a building like the reichchancellery) and +press P to open Object Properties.

  16. +
  17. Identify the Selected Asset: Pay attention to the highlighted button that +shows the asset name (reichchancellery_cmp), which is more reliable than +the Name field, as these may differ.

    +

    +
  18. +
  19. Break the Composite into Components: In the Landscape menu, select +Split components into separate objects to break the composite down. +Repeat this until you can access the light fixtures.

  20. +
+

+
    +
  1. Select the Light Fixture: Enable object selection mode (red face icon) +and select the light fixture. The name of the fixture will appear on the +mentioned button.

  2. +
+

+
+
+

Phase 2: Asset Viewer and Light Preset Identification

+
    +
  1. Open the Asset +Viewer: Run +daViewer.cmd from the same directory as before. Copy the asset name and use +it to search the asset library.

  2. +
  3. Select the Composite: The asset consists of three parts:

    +
      +
    • Geometry

    • +
    • Composite (geometry + collision)

    • +
    • Collision

    • +
    +

    Select the composite, right-click it, and choose Reveal in Explorer.

    +

    +
  4. +
  5. Locate the .blk File: In the file directory, right-click the .blk +file and open it with a text editor or a tool like FAR Commander.

    +

    +
  6. +
  7. Find the Light Preset: In the .blk file, find the light preset +referenced by the light fixture. Copy its name.

    +

    +
  8. +
  9. Search for the Preset: Use FAR Commander (or a preferred method) to +search for the preset in the project directory <engine_root>/enlisted/prog. +Use Alt+F1 to select the correct drive and Alt+F7 to start the search. +The first line specifies the file mask, while the second line is for the name +of what you’re searching for. Enter the name into the second line and press +Enter.

    +

    +
  10. +
  11. Open the Preset File: The preset will be found in the lights.blk file. +Press F4 to open it and view all the light templates.

    +

    +

    +
  12. +
  13. Search for the Preset Name: Use F7 to search for the specific light +preset (e.g., light_chandelier_big) and navigate to the preset.

    +

    +
  14. +
+
+
+

Phase 3: Modifying and Creating Light Templates

+
    +
  1. Find the Parent Template: The extends parameter in the preset refers to +another preset (e.g., omni_light). Locate the parent preset.

    +

    +
  2. +
  3. Trace the Parent Presets: If necessary, trace the hierarchy of templates +to the top-level light preset (e.g., local_omni_light).

    +

    +
  4. +
  5. Create a New Light Template: Based on the parent template, create a new +one. This will require a new .gameObj file with a unique name, which the +new light template will reference.

  6. +
  7. Copy and Rename the Old Game Object: In the directory where the old +.gameObj file is located, copy it and rename it as needed. Open the +corresponding .blk file and adjust the references.

    +

    +
  8. +
  9. Verify the Asset: Search for the renamed asset in the Asset Viewer, +right-click it, and find its location in the file structure.

    +

    +

    +
  10. +
  11. Rename the Game Object: Follow the naming conventions as specified in the +Naming Conventions +article.

    +

    +
  12. +
+
+
+

Phase 4: Testing and Exporting

+
    +
  1. Open a Test Map in daEditor: Open the test map by selecting Open +Project during the daEditor load process.

    +

    +

    After the compilation is complete, daEditor will prompt you to open a map. +To proceed, navigate to levels/dev/asset_test_level and open the .blk +file for the test level.

    +

    +
  2. +
  3. Clean Up the Scene: Hide unnecessary elements as described earlier, and +delete any unwanted objects by pressing Ctrl+A and Delete.

  4. +
  5. Create and Place the New Entity: Click the white face icon on the toolbar +to create an entity. Search for the new gameObj in the search field and +drag it into the scene.

    +

    +
  6. +
  7. Adjust the Pivot: By default, the entity’s pivot will be set to the world +origin (0, 0, 0), as the Place on collision toggler is set to Place +pivot . Open the Properties window (P) and set it to -no-.

    +

    +
  8. +
  9. Place the Chandelier Asset: Copy the chandelier’s asset name, search for +it in daEditor, drag it into the scene, and align its collision settings by +entering the same numbers into the coordinate lines.

    +

    +
    +

    Note

    +

    The orientation of the game object along its axes is currently unclear and +can only be determined through experimentation.

    +
    +
  10. +
  11. Add Entities for Light Bulbs: Add two entities for future light bulbs and +duplicate them by dragging while holding Shift.

    +

    +
  12. +
  13. Update Composite in daEditor: You can change the composites tied to +entities via the Property window. Select the asset, click on the asset +name, and choose the appropriate entity (e.g., light_***_big).

    +

    +

    +
  14. +
  15. Export the Composite: Now, you need to assemble a new composite object. +The first object you select will serve as the root node, from which the +composite’s pivot will inherit. Start by selecting the chandelier (its +geometry), then hold Ctrl and drag to select the remaining elements. +Next, click on Landscape and choose Export as composite.

    +

    +
  16. +
  17. Save the Composite: Find the correct directory in the asset library, +append _cmp to the name, and save it.

    +

    +
  18. +
  19. Verify the Composite in Asset Viewer: Search for the composite in the +Asset Viewer and ensure everything looks correct.

  20. +
+

+
+
+

Final Steps: Export and Testing

+
    +
  1. Load the Location in daEditor: Open daEditor, load the +battle_of_berlin level, and uncheck all in Navigation meshes for faster +export.

    +

    +

    +
  2. +
  3. Export to Game: Select ProjectExport to game (PC format), +leave the settings unchanged, and confirm.

    +

    +

    +

    The scene will be exported, and the changes will be written into the binary +file.

    +
    +

    Important

    +

    If you are adding a new prop rather than modifying an existing one, a rebuild +is required.

    +
    +

    While the build is exporting, you can update the light preset to the one you +need. To do this, go to the prog directory and find the light.blk file.

    +

    +

    +
  4. +
  5. Replace the Light Preset: In the light.blk file, find the appropriate +spotlight preset for replacement and copy it.

    +

    +

    Next, replace the active template with the copied preset.

    +

    +

    After modifying the template parameters, save the changes and close the file: +F2 – save changes, F4 – exit.

    +
  6. +
  7. Launch the Game: Navigate to the <engine_root>/enlisted/game directory +and launch the game via the z_enlisted_launcher_prog.

    +

    +

    In the Scene section, select the berlin map, choose source in +Vroms, and press the Play button.

    +

    (Alternatively, you can enter the command app/timeSpeed 0 in the console to +freeze time in the game).

    +

    +
  8. +
  9. Adjust Lighting Orientation: Once in the game, switch to free camera +mode or press F12 and navigate to the asset you are working on. As we can +see, there are now two entity objects, confirming that the changes have been +applied. However, we also notice that the light fixtures are oriented +incorrectly.

    +

    +

    To fix this, return to the daEditor with the test map. Adjust the +orientation of the light entities, reassemble, and export the composite. +Afterward, re-export the map, reopen the game, and test the changes again.

    +

    +

    Once the lights are correctly oriented, proceed with the final lighting +configuration as described in the Lights article.

    +
  10. +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/materials/index.html b/assets/materials/index.html new file mode 100644 index 000000000..95c4f2410 --- /dev/null +++ b/assets/materials/index.html @@ -0,0 +1,184 @@ + + + + + + + Materials — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+ + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/materials/proxymats.html b/assets/materials/proxymats.html new file mode 100644 index 000000000..1d8b28293 --- /dev/null +++ b/assets/materials/proxymats.html @@ -0,0 +1,344 @@ + + + + + + + Proxymats — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Proxymats

+
+

Overview

+

Proxy materials (proxymats) are a system of shared reference materials for +multiple .dag files. These materials are stored as separate .blk files, and +when edited, changes automatically apply to all .dag files referencing that +specific proxy material.

+

To implement the system, follow these steps:

+
    +
  • Create a .blk file for the proxy material.

  • +
  • Specify that the material in the .dag file is a proxy material.

  • +
  • In the .folder.blk, specify that the underlying .dag files use proxy +materials. For example:

    +
    virtual_res_blk{
    +  find:t="^(.*)\.lod00\.dag$"
    +  className:t="rendInst"
    +  contents{
    +    lod{range:r=200;}
    +    allowProxyMat:b=yes
    +  }
    +}
    +
    +
    +
  • +
+

This way, all underlying .dag files will be rebuilt whenever the proxy +materials they reference are modified.

+
+

Important

+
    +
  1. Do not add this parameter to directories without .dag files that utilize +proxy materials. Doing so will slow down asset validation and building +resources.

  2. +
  3. Use the system wisely. Avoid creating common proxy materials across +fundamentally different asset packs.

    +

    For example, you don’t want the machine gun materials for player-controlled +ships to change just because an environment artist tweaked the proxy material +for their own needs.

    +

    In such cases, it’s better to duplicate the proxy material. Remember, it’s +just a material, not the textures themselves.

    +
  4. +
+
+
+
+

How to Create a Proxymat

+

Proxy material .blk files must have the suffix .proxymat.blk.

+

For instance, a .blk file for a brick wall proxy material would be named: +brick_wall.proxymat.blk.

+

The simplest way to create content for a proxy material .blk is to configure a +material on a .dag file and then copy the content into a separate .blk file. +Only minimal edits are required. Since a proxy material .blk can only contain +one material (though a .dag can reference any number of proxy materials), you +don’t need the material name or the enclosing brackets.

+

For example, instead of

+
material{
+  name:t="stz_workshop_brick_plaster_wall"
+  class:t="rendinst_emissive"
+  tex16support:b=yes
+  twosided:b=0
+  power:r=32
+  script:t="emissive_color=1,0.1,0.2,8"
+  tex0:t="emissive_a_tex_d.tif"
+  tex2:t="emissive_a_tex_n.tif"
+}
+
+
+

the proxy material .blk would contain only:

+
class:t="rendinst_emissive"
+tex16support:b=yes
+twosided:b=0
+power:r=32
+script:t="emissive_color=1,0.1,0.2,8"
+tex0:t="emissive_a_tex_d.tif"
+tex2:t="emissive_a_tex_n.tif"
+
+
+
+
+

How to Name a Proxymat

+

Proxy materials should be named according to their application. For example: +berlin_town_buildings_wall_brick_plaster_a.

+

This approach is necessary for the following reasons:

+
    +
  1. To avoid creating multiple similar proxy materials (e.g., +brick_plaster_wall_a-j for different maps) and losing track of their +purposes.

  2. +
  3. To ensure that the material’s usage is clear, preventing it from being +inadvertently applied to a different map or asset, which could result in +broken assets when the original proxy material is changed for other needs.

  4. +
+

Thus, always name the proxy material:

+
    +
  • Based on the asset type and location.

  • +
  • According to the material’s composition (i.e., what it’s made of).

  • +
+
+
+

How to Assign Proxymat in 3ds Max

+
+

Important

+

If you’re using proxymats, make sure to clean the materials into which they are +inserted. Leftover parameters won’t affect anything, but leftover textures could +cause errors, especially if those textures are later deleted. Although they +won’t have any direct influence, missing textures will prevent building +resources because the .dag file will reference non-existent textures.

+

Rule: Once you assign a proxymat to a material, remove everything else from +it!

+
+

Proxy materials are assigned as a class (shader), meaning that the class name +should reference the proxy material. For example:

+
class:t="brick_wall:proxymat"
+
+
+

An important note is that proxymats can only be assigned through the DagorMat +material type in 3ds Max. For example:

+../../_images/proxymats_01.jpg +
+

After export, the .dag will contain:

+
material{
+  name:t="brick_wall"
+  class:t="brick_wall:proxymat"
+  tex16support:b=yes
+  twosided:i=0
+  amb:ip3=255, 255, 255
+  diff:ip3=255, 255, 255
+  spec:ip3=255, 255, 255
+  emis:ip3=0, 0, 0
+  power:r=32
+}
+
+
+

Of course, you can manually change the material in any .dag file to a proxy +material by updating the class (shader) accordingly.

+
+
+

How to Assign Proxymat in Blender

+

To assign a proxymat in Blender, create a new material, name it according to +the desired proxymat (without the :proxymat suffix), and check the +corresponding checkbox:

+../../_images/proxymats_02.jpg +
+

If the proxymat already exists, specify the path to its directory and click +(Re)load from file to load it into the viewport.

+

If you are unsure of the path, but know the material exists in the project, +click Find missing proxymat, and the +add-on will +automatically locate the required .blk.

+

To edit a proxymat, open it as a text file, make changes, and apply them using +the corresponding buttons in the Tools panel. Then, save the changes using the +Save proxymat button.

+

You can also temporarily uncheck the is proxymat checkbox and edit the +material using standard tools instead of as text.

+

Any material can be converted into a proxymat by checking the appropriate +checkbbox, specifying the target directory, and saving it.

+
+

Important

+

The material name in Blender will always match the name of the proxymat. +Therefore, if an imported .dag contains a proxymat with a different name +(e.g., “bricks”, but the shader is "brick_wall:proxymat"), it will be +automatically renamed to match the proxymat.

+

If this material is referenced in the object properties for +apex_interior_material, that parameter will also be updated to avoid errors +during export and building resources.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/dynamic_painted_by_mask.html b/assets/shaders/dng-shaders/dynamic_painted_by_mask.html new file mode 100644 index 000000000..f5e5a4b43 --- /dev/null +++ b/assets/shaders/dng-shaders/dynamic_painted_by_mask.html @@ -0,0 +1,267 @@ + + + + + + + Shader: dynamic_painted_by_mask — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: dynamic_painted_by_mask

+
+

Overview

+

A dynamic shader designed for vehicles in daNetGame-based projects.

+
+
+

Textures

+
    +
  • tex0: Diffuse albedo

  • +
  • tex2: Normals + metalness + smoothness

  • +
  • tex4: Grayscale paint mask (white = 100% paint coverage, black = no paint)

  • +
  • tex5: Optional grayscale camouflage mask (white = painted with the second +color, black = no paint)

  • +
+
+
+

Parameters

+
    +
  • script:t="primary_color=0,0,0,0" – Defines the primary paint color based on +the mask from tex4. The first three values represent the RGB color; the +fourth value is unused.

  • +
  • script:t="secondary_color=0,0,0,0" – Defines the secondary paint color based +on the mask from tex5. The first three values represent the RGB color; the +fourth value is unused.

  • +
+
+
+

Functionality

+

If only one mask and one color are specified, the shader will apply the paint +based on that mask. For example:

+../../../_images/dynamic_painted_by_mask_01.jpg +
+

When both masks and two colors are provided, the shader can generate camouflage +patterns in any color combination. For example:

+../../../_images/dynamic_painted_by_mask_02.jpg +
+

The color defined in the asset will be applied to all vehicles of this type +unless it is overridden in the templates.

+

Predefined color sets and random color generation in-game are configured in +.blk files located in: +<project_name>/prog/gameBase/content/<project_name>/gamedata/templates/.

+

For example, predefined color sets:

+
vehicle_color_smoking_red value:p4=0.6, 0.105, 0.117, 1.0
+vehicle_color_vampire_red value:p4=0.419, 0.039, 0.074, 1.0
+vehicle_color_canyon_copper value:p4=0.807, 0.341, 0.184, 1.0
+
+
+

The following block indicates that there is a 90% chance the vehicle will be +painted in one of the four specified colors:

+
ar_painting.chance:r=0.9
+"car_painting.possibleColors:array"{
+  "item:object"{ color:t="vehicle_color_battleship_gray"; }
+  "item:object"{ color:t="vehicle_color_dark_gray"; }
+  "item:object"{ color:t="vehicle_color_thundercloud"; }
+  "item:object"{ color:t="vehicle_color_military_green"; }
+}
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/index.html b/assets/shaders/dng-shaders/index.html new file mode 100644 index 000000000..2e09598fc --- /dev/null +++ b/assets/shaders/dng-shaders/index.html @@ -0,0 +1,328 @@ + + + + + + + daNetGame-Based Shaders — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

daNetGame-Based Shaders

+
+

Contents:

+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/land_mesh_height_decal.html b/assets/shaders/dng-shaders/land_mesh_height_decal.html new file mode 100644 index 000000000..55fdf865f --- /dev/null +++ b/assets/shaders/dng-shaders/land_mesh_height_decal.html @@ -0,0 +1,266 @@ + + + + + + + Shader: land_mesh_height_decal — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: land_mesh_height_decal

+
+

Overview

+

This shader is used for rendering decals in clipmaps on prefabs or loft +geometries.

+
+

Important

+

For WarThunder-based projects, only the following parameters are supported: +alpha_threshold, height_above, and vertex_gamma.

+
+
+
+

Parameters

+
    +
  • height_above=1 – Controls whether the decal is convex or concave.

    +
      +
    • 1: The heightmap is interpreted as convex and is rendered above the +diffuse_threshold.

    • +
    • 0: The heightmap is interpreted as concave and is rendered below the +diffuse_threshold.

    • +
    +
  • +
  • diffuse_threshold=0.5 – Determines the diffuse value at which the decal is +fully rendered. A smooth transition is drawn up to this value, blending with +the underlying surface.

  • +
  • hmap_softness=1 – Configures the contrast of the resulting alpha for height +displacement.

  • +
  • norm_softness=1 – Configures the contrast of the resulting alpha for normal +mapping.

  • +
  • r_softness=1 – Configures the contrast of the resulting alpha for +reflectance, microdetails, smoothness, and occlusion.

  • +
  • vertex_gamma=1 – Configures the gamma for vertex alpha.

  • +
  • attenuation_from_heightmap_height=0.7 – Modulates the decal mask based on +the decal’s height above the heightmap surface.

    +
      +
    • 0: Disabled.

    • +
    • 1: Renders what is 1 meter above the landscape.

    • +
    • -1: Renders what is 1 meter below the landscape.

    • +
    +
  • +
  • height_scale=0.15 – Sets the height of the displacement.

  • +
  • height_offset=-0.1 – Offsets the height of the displacement.

  • +
  • grass_decal_id=255 – Controls the grass index mask:

    +
      +
    • 255: Removes grass.

    • +
    • 0: Keeps the grass as it was under the decal.

    • +
    • Other values: Specific indices where grass is rendered.

    • +
    +
  • +
  • script:t="vertex_opacity=1" – To use vertex alpha in decals created from +prefabs, write the vertex alpha into the second vertex channel. This ensures +the vertex alpha is read from the object.

  • +
  • color_mul_add=255,255,255,0 – Colors the diffuse of the decals. In +daEditor, there is a +UI with a color picker that allows saving .mat.blk and .dag files +(available only in War Thunder).

    +../../../_images/land_mesh_height_decal_01.jpg +
  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_blend_diffuse_decal.html b/assets/shaders/dng-shaders/rendinst_blend_diffuse_decal.html new file mode 100644 index 000000000..00f4bf643 --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_blend_diffuse_decal.html @@ -0,0 +1,306 @@ + + + + + + + Shader: rendinst_blend_diffuse_decal — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_blend_diffuse_decal

+
+

Overview

+

This decal shader supports albedo, smoothness, metalness, and normal maps. It +uses blending based on a mask stored in the albedo’s alpha channel, where black +indicates areas where the decal is not rendered, and lighter areas progressively +reveal the decal.

+

Parameters:

+
    +
  • script:t="gamma_mask=1,1,0,0" – Controls the intensity of the albedo, +normal, smoothness, and metalness.

    +
      +
    • The first component configures albedo/smoothness/metalness.

    • +
    • The second component configures the normal.

    • +
    • The third and fourth components are not used but must be specified.

    • +
    +
  • +
  • script:t="micro_detail_layer=0" – Standard syntax for microdetails.

  • +
  • script:t="micro_detail_layer_uv_scale=9" – UV scale for microdetails.

  • +
  • script:t="micro_detail_layer_v_scale=1" – Vertical scale for microdetails.

  • +
+
+
+

Parameters

+
    +
  • Parameter script:t="gamma_mask=1,1,0,0" – This parameter configures the +gamma of the mask (located in the albedo’s alpha channel) separately for +different maps (albedo, smoothness, metalness, normal). By configuring the +parameter values, you can control the visibility of specific maps.

  • +
+

The lower values of gamma setting make the map more visible, while higher values +make it less visible.

+
    +
  • The first component configures albedo/smoothness/metalness.

  • +
  • The second component configures the normal.

  • +
  • The third and fourth components are not used but must be specified.

  • +
+
+

Important

+

It’s important to understand how this works. Gamma is a power-function, and we +set the power to which the pixel value of the decal mask is raised.

+
+

Let’s look at a decal mask that has only two boundary values (0 - black, 1 - +white) with some faint gray strokes:

+../../../_images/rendinst_blend_diffuse_decal_01.jpg +
+

What happens when you raise 0 (black) to the power of 0.1? You get 0. +What happens when you raise 1 (white) to the power of 0.1? You get 1.

+

We cannot affect either the diffuse or the normal, no matter how much we tweak +these parameters. Below are two screenshots with examples:

+ + + +

script:t="gamma_mask=0.1,0.1,0,0"

script:t="gamma_mask=1,1,0,0"

+../../../_images/rendinst_blend_diffuse_decal_02.jpg +../../../_images/rendinst_blend_diffuse_decal_03.jpg +

Only the edges of the letters change, where gray outlines appear due to texture +compression. Raising gray (around 0.5) to 0.1 results in approximately +0.93 (almost white). Raising gray to 1 results in 0.5 – cutting it off +(possibly not entirely, but significantly).

+

However, this setting doesn’t globally affect the texture channels.

+

Now, let’s reduce the white value from 1 to approximately 0.8:

+../../../_images/rendinst_blend_diffuse_decal_04.jpg +
+ + + +

script:t="gamma_mask=0.1,0.1,0,0"

script:t="gamma_mask=1,1,0,0"

+../../../_images/rendinst_blend_diffuse_decal_05.jpg +../../../_images/rendinst_blend_diffuse_decal_06.jpg +

At minimal gamma values, the edges around the decal thicken because there’s more +information for pixelation due to texture compression.

+

At higher gamma values, the effects of your settings become apparent. For +example, the decal starts to blend with the corrugated surface, allowing the +normal map to show through. If we further increase the normal’s gamma (e.g., to +4), the text will conform more closely to the corrugated surface.

+ + +

script:t="gamma_mask=1,4,0,0"

+../../../_images/rendinst_blend_diffuse_decal_07.jpg +
+

Summary: Any “tweaks” only work if they can genuinely affect something. If +the texture has boundary values, there’s nothing to “tweak.”

+
+

Important

+

It’s highly recommended to avoid boundary values in decal textures, as this +allows us to apply them in a wider variety of scenarios.

+
+
    +
  • Microdetail Parameters

  • +
+

This shader supports +microdetails with the +standard syntax used in daNetGame-based projects.

+
    +
  • script:t="micro_detail_layer=0"

  • +
  • script:t="micro_detail_layer_uv_scale=9"

  • +
  • script:t="micro_detail_layer_v_scale=1"

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_blend_normal_decal.html b/assets/shaders/dng-shaders/rendinst_blend_normal_decal.html new file mode 100644 index 000000000..9479e79f3 --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_blend_normal_decal.html @@ -0,0 +1,211 @@ + + + + + + + Shader: rendinst_blend_normal_decal — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_blend_normal_decal

+
+

Overview

+

The rendinst_blend_normal_decal shader is used for decals that modify only the +normal map.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_deferred_decal.html b/assets/shaders/dng-shaders/rendinst_deferred_decal.html new file mode 100644 index 000000000..363fe39e3 --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_deferred_decal.html @@ -0,0 +1,214 @@ + + + + + + + Shader: rendinst_deferred_decal — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_deferred_decal

+
+

Overview

+

rendinst_deferred_decal is a shader for projection decals with a normal map.

+

It is a more performance-intensive version of the +rendinst_blend_diffuse_decal shader, as it +adds extra checks to prevent the decal from being projected “in the air” when +there is no geometry behind it.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_deferred_modulate2x_decal.html b/assets/shaders/dng-shaders/rendinst_deferred_modulate2x_decal.html new file mode 100644 index 000000000..130be60fd --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_deferred_modulate2x_decal.html @@ -0,0 +1,214 @@ + + + + + + + Shader: rendinst_deferred_modulate2x_decal — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_deferred_modulate2x_decal

+
+

Overview

+

It’s a deferred version of +rendinst_modulate2x_diffuse_decal.

+

It is visible only when have other geometry behind and can be used in +composites, unlike the base version +(which affects only geometry of the same .dag without any depth checks).

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_emissive.html b/assets/shaders/dng-shaders/rendinst_emissive.html new file mode 100644 index 000000000..fc33ecc2c --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_emissive.html @@ -0,0 +1,411 @@ + + + + + + + Shader: rendinst_emissive — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_emissive

+
+

Overview

+

This shader is designed for self-illuminating surfaces.

+

This shader supports the flickering +effect.

+

Parameters:

+
    +
  • use_alpha_for_emission_mask=1 – Uses the alpha channel of the albedo as an +emission mask. Values: 0/1.

  • +
  • emissive_color=1,1,1,1 – Specifies the emissive color and intensity.

    +
      +
    • The first three components represent the color (RGB)

    • +
    • The fourth component is the intensity. If the intensity is negative, the +emission mask is inverted.

    • +
    +
  • +
  • emission_albedo_mult=1 – Multiplies the emissive color by the albedo color. +Values range from 0 to 1.

  • +
  • nightly=0 – Emission only occurs at night. Values: 0/1.

  • +
+
+
+

Textures

+
    +
  • tex0: Diffuse

  • +
  • tex2: Normals

  • +
+

The alpha channel of the diffuse color texture can be used to store the emission +mask (areas that emit light are white).

+../../../_images/rendinst_emissive_01.jpg +../../../_images/rendinst_emissive_02.jpg +
+
+

Application

+
    +
  • Entire Model: Apply the shader to the entire model if you want widespread +emissive elements, such as simulating light reflections from a bulb on +chandelier parts. In this case, using an emission mask is recommended.

  • +
  • Specific Parts: Alternatively, apply the shader only to specific glowing +parts of the model. The emission mask may not be necessary in this scenario.

  • +
+

By default, the emissive color is derived from the albedo color.

+../../../_images/rendinst_emissive_03.jpg +../../../_images/rendinst_emissive_04.jpg +
+
+

Parameters

+
+

Important

+

This shader often requires custom parameter settings for each asset, rather than +reusing values from other assets. Therefore, it’s important to configure the +parameters specifically for your use case. Do not blindly copy parameters from +other assets.

+
+
    +
  • use_alpha_for_emission_mask=1

  • +
+

This parameter controls the use of the albedo’s alpha channel as the emission +mask.

+
    +
  • 1: The alpha channel of the albedo is used as the emission mask.

  • +
  • 0: The entire geometry with the shader emits light.

  • +
+ + + + + + + +

use_alpha_for_emission_mask=1

use_alpha_for_emission_mask=0

Only the areas defined by the albedo's alpha channel will emit light.

The entire geometry emits light. The difference in color is due to the non-red parts of the albedo where the emission fades out according to the mask, while the entire geometry emits light (including the grey areas).

+../../../_images/rendinst_emissive_05.jpg +../../../_images/rendinst_emissive_06.jpg +
    +
  • emissive_color=1,1,1,1

  • +
+

This parameter defines the color and intensity of the emission.

+
    +
  • The first three components are the RGB color of the emission.

  • +
  • The fourth component is the emission intensity.

    +
      +
    • If positive, the alpha channel of the albedo is used as a direct mask.

    • +
    • If negative, the mask is inverted.

    • +
    +
  • +
+

By default, all parameters are set to 1, meaning the albedo color and the +emission mask are used without modification.

+
+

Note

+

If a multicolored emission is needed for a single material (e.g., a stained +glass window), it is recommended to set the color in the diffuse texture and +multiply it with a white emissive color.

+
+
+

Important

+

Be sure to observe the differences between the Asset +Viewer and the +in-game results. This discrepancy underscores the importance of verifying and +fine-tuning your work by reviewing it directly within the game environment.

+
+

Examples with white albedo (as it is easier to override compared to the bright +red in previous examples):

+ + + + + + + +

emissive_color=0,1,0,1

emissive_color=0,1,0,10

Green emissive color is applied. In the Asset Viewer, it is barely noticeable, but it is very strong in-game.

A strong green emission is applied. The glow effect in-game is very prominent.

+../../../_images/rendinst_emissive_07.jpg +../../../_images/rendinst_emissive_08.jpg +../../../_images/rendinst_emissive_09.jpg +../../../_images/rendinst_emissive_10.jpg +
+

Important

+

Avoid excessive emission intensity. It directly impacts the glow effect, as seen +in the screenshots above. Fine-tune the emission carefully for each asset. +Excessive emission not only looks unnatural but can also negatively affect +gameplay by interfering with camera adaptation. Aim for minimal, but noticeable, +glow.

+

The glow effect also depends on the size of the emitting geometry. For example, +thicker lanterns have a stronger glow than thinner ones, not only because of +different emission intensities but also due to their larger size.

+../../../_images/rendinst_emissive_11.jpg +
+

In the screenshot above, the glow effect on the thick lanterns is excessive, but +reducing the values further made the glow barely visible – thus, the current +setting was kept. The glow effect on the thin lanterns is adequate, with room +for a slight increase, but not much.

+
+
    +
  • emission_albedo_mult=1

  • +
+

This parameter controls the multiplication of the emissive color by the albedo +color, as defined by the emissive_color shader parameter. Essentially, it acts +like the “Multiply” blend mode in Photoshop.

+

Values range from 0 to 1, where:

+
    +
  • 0: No multiplication. Only the shader’s emissive color is used.

  • +
  • 1: Full multiplication with the albedo color.

  • +
+
+

Important

+

When multiplying drastically different colors (e.g., red and green), the result +can be a complete absence of emission since (0,1,0) * (1,0,0) = (0,0,0). Avoid +this scenario.

+
+ + + + + + + + + +

+ emission_albedo_mult=0
+ emissive_color=0,1,0,1

+ emission_albedo_mult=0.5
+ emissive_color=0,1,0,1

+ emission_albedo_mult=1
+ emissive_color=0,1,0,1

No multiplication with albedo color. The shader’s emissive color is green. Results in a green emissive layer over the red albedo, leading to a yellow color in the Asset Viewer. The in-game result is correct.

Multiplies the albedo color by 50%. The shader’s emissive color is green. The in-game glow intensity is reduced by half due to the interaction of two contrasting colors.

Full multiplication with the albedo color. The shader’s emissive color is green. Almost no emission is visible since (0,1,0) * (1,0,0) = (0,0,0). Increasing emission intensity (e.g., to 10 or 100) may improve visibility, but this is not a proper solution and will likely not look correct.

+
    +
  • Asset Viewer:

  • +
+../../../_images/rendinst_emissive_12.jpg +../../../_images/rendinst_emissive_13.jpg +../../../_images/rendinst_emissive_14.jpg +
    +
  • Game - Result:

  • +
+../../../_images/rendinst_emissive_15.jpg +../../../_images/rendinst_emissive_16.jpg +../../../_images/rendinst_emissive_17.jpg +
    +
  • Game - Albedo:

  • +
+../../../_images/rendinst_emissive_18.jpg +../../../_images/rendinst_emissive_19.jpg +../../../_images/rendinst_emissive_20.jpg +
    +
  • Game - Emissive:

  • +
+../../../_images/rendinst_emissive_21.jpg +../../../_images/rendinst_emissive_22.jpg +../../../_images/rendinst_emissive_23.jpg +
    +
  • nightly=1

  • +
+

This parameter controls whether the emissive effect is active only during +nighttime.

+

Values:

+
    +
  • 0: By default, the emissive effect is always active.

  • +
  • 1: The emissive effect is only active during nighttime. The definition of +“night” is controlled by scripts elsewhere and is not influenced by this +parameter.

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_flag_colored.html b/assets/shaders/dng-shaders/rendinst_flag_colored.html new file mode 100644 index 000000000..5e606890c --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_flag_colored.html @@ -0,0 +1,385 @@ + + + + + + + Shader: rendinst_flag_colored — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_flag_colored

+
+

Overview

+

This is a simple shader designed for cloth simulation.

+

Parameters:

+
    +
  • script:t="frequency_amplitude=1,1,1,1" – intervals for random frequency and +amplitude;

  • +
  • script:t="wave_length=1" – wave length;

  • +
  • script:t="wind_direction=0,0,1,0" – wind direction;

  • +
  • script:t="use_painting=1" – main parameter to enable painting;

  • +
  • script:t="paint_palette_row=1" – painting parameters in daNetGame–based +projects, similar to rendinst_simple_painted +shader;

  • +
  • script:t="paint_white_point=0.1"

  • +
  • script:t="paint_black_point=0.05"

  • +
  • script:t="paint_mult=1"

  • +
  • script:t="micro_detail_layer=0" – microdetail settings;

  • +
  • script:t="micro_detail_layer_v_scale=1"

  • +
  • script:t="micro_detail_layer_uv_scale=1"

  • +
+
+
+

Functionality

+

This shader uses two textures (diffuse and normal) to enable basic geometry +animation. You can configure sinusoidal parameters for vertex displacement, with +smoother results achieved on denser meshes.

+
+

Important

+

Ensure the shader is applied only to geometry that is painted with vertex color, +as using it otherwise may cause errors in the game.

+
+
+
+

Animated Geometry

+

The area of the mesh to be animated is defined by the R-channel of the vertex +color. G and B channels are not used.

+ + + +

Vertex Color

Result

+../../../_images/rendinst_flag_colored_01.jpg +../../../_images/rendinst_flag_colored_02.gif +../../../_images/rendinst_flag_colored_03.jpg +../../../_images/rendinst_flag_colored_04.gif +
+

Note

+

Always reset unused vertex color channels to black, since they default to white +(with all channels set to maximum).

+
+
+
+

Parameters

+
    +
  • script:t="frequency_amplitude=1,1,1,1" – Defines the frequency and amplitude +intervals. (In this case, frequency controls the speed of the wave oscillations, +not the wavelength):

    +
      +
    • 1st and 2nd components – frequency range (min, max),

    • +
    • 3rd and 4th components – amplitude range (min, max).

    • +
    +
  • +
+

At the start of the mission, random values are selected from these intervals, +and remain static throughout the game. Different assets across the location will +animate with varying values.

+ + + +

Frequency = 1

Amplitude = 1

+../../../_images/rendinst_flag_colored_05.gif +../../../_images/rendinst_flag_colored_06.gif + + + +

Frequency = 3

Amplitude = 3

+../../../_images/rendinst_flag_colored_07.gif +../../../_images/rendinst_flag_colored_08.gif +

Random values are not visible in the Asset Viewer, so first verify the maximum +values in components 1 and 3 (as these are displayed in the Asset Viewer). +After that, move these values to components 2 and 4, and set the minimum values +in components 1 and 3.

+
    +
  • script:t="wave_length=1" – Defines the wavelength.

  • +
+

A longer wavelength reduces oscillation detail, as the sinusoidal wave stretches +and the model only captures a small portion of it.

+ + + + +

Wavelength = 1

Wavelength = 0.5

Wavelength = 5

+../../../_images/rendinst_flag_colored_07.gif +../../../_images/rendinst_flag_colored_08.gif +../../../_images/rendinst_flag_colored_09.gif +
    +
  • script:t="wind_direction=0,0,1,0" (temporary parameter) – Wind direction is +defined by a temporary parameter, as a global wind system is planned. In the +Asset Viewer and daEditor, the wind direction operates based on global +axes, so make sure to verify the wave direction in–game:

    +
      +
    • 1st component controls oscillations along the X–axis;

    • +
    • 2nd component controls oscillations along the Z–axis (vertical);

    • +
    • 3rd component controls oscillations along the Y–axis.

    • +
    +
  • +
+ + + +

wind_direction=1,0,0,0

wind_direction=0,0,1,0

+../../../_images/rendinst_flag_colored_10.gif +../../../_images/rendinst_flag_colored_11.gif +
    +
  • script:t="use_painting=1" – The painting parameters for the +daNetGame–based projects work similarly to +rendinst_simple_painted shader, with the +exception that this shader does not paint by default. To enable painting, set +the parameter as follows:

    +
      +
    • 1 – enable painting;

    • +
    • 0 – disable painting (optional).

    • +
    +
  • +
+
+
+

Working with Global Wind in daNetGame-based projects

+

This shader also supports wind animation using a global wind map and an +additional set of parameters. The previous algorithm remains available, with +wind behavior controlled by the shadervar wind_type parameter.

+

The new algorithm is preferred, as it takes into account wind strength +variations, including wind emitters.

+

Parameters:

+
    +
  • wind_type = 0 – Uses the old animation algorithm, independent of external +factors, and configured using frequency_amplitude, wind_direction, +wind_strength, and wave_length.

  • +
  • wind_type = 1 – New algorithm that ignores the R-channel in the vertex +color, instead using the normalized distance from the flagpole axis (ranging +from 0 at the attachment points to 1 at the flag’s end).

  • +
  • wind_type = 2 – New algorithm that uses the R-channel in the vertex color. +For correct operation, the R-channel must continuously increase from 0 at +the attachment points to 1 at the flag’s end, although the increase does not +need to be linear. If a large portion of the flag is uniformly colored, +incorrect behavior may occur.

  • +
  • flagpole_pos_0, flagpole_pos_1 – Define a segment in the model’s +coordinate system where the flag is attached. Points along this segment remain +stationary. For a single fixed point, a very short segment can be used.

  • +
  • flag_length – Defines the length of the flag, or the distance from the axis +to the flag’s end. This value doesn’t need to be exact; setting it 10-15% +larger than the actual size is acceptable, but setting it smaller is not +recommended.

  • +
+

Additional optional parameters include:

+
    +
  • flag_movement_scale = 1 – Controls how much the wind bends and shifts the +flag from its resting position.

  • +
  • stiffness = 0.1 – Determines the flag’s resistance to bending.

  • +
  • stretch = 0.1 – Controls how much the flag stretches:

    +
      +
    • 0 – no stretch,

    • +
    • 1 – unlimited stretch.

    • +
    +
  • +
  • sway_speed = 1 – Defines how quickly the flag bends.

  • +
  • bend = 2 – Shapes how the flag bends.

  • +
  • deviation = 4 – Controls the flag’s form when deviating from its equilibrium +position.

  • +
+
+

See also

+

You can view the shader results with different parameter configurations +here.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_flag_layered.html b/assets/shaders/dng-shaders/rendinst_flag_layered.html new file mode 100644 index 000000000..2b920a9b1 --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_flag_layered.html @@ -0,0 +1,268 @@ + + + + + + + Shader: rendinst_flag_layered — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_flag_layered

+
+

Overview

+

This shader is designed for fabric animation with detail blending based on +vertex color.

+
+
+

Parameters

+
    +
  • script:t="frequency_amplitude=1,1,1,1" – Sets the random frequency and +amplitude intervals.

  • +
  • script:t="wave_length=1" – Defines the wavelength.

  • +
  • script:t="wind_direction=0,0,1,0" – Specifies the wind direction.

  • +
  • script:t="details_tile=1,1,1,0" – Controls the tiling of the details.

  • +
  • script:t="invert_heights=0,0.5,0,0" – Inverts the heightmaps of the details +(can be fractional).

  • +
  • script:t="paint_details=1,0,0,1" – Specifies the coloring of the details.

  • +
  • script:t="overlay_color_from=0,0,0,0" – Defines the “from” and “to” colors +for blending via linear interpolation (lerp) using the blue channel of the +vertex color as the mask.

  • +
  • script:t="overlay_color_to=0,0,0,0" – Specifies the color range from 0 +(RGB value 0) to 1 (RGB value 255).

  • +
  • script:t="micro_detail_layer=0" – Parameters for micro details.

  • +
  • script:t="micro_detail_layer_v_scale=1"

  • +
  • script:t="micro_detail_layer_uv_scale=1"

  • +
  • script:t="atest=1" and script:t="details_alphatest=0,0,0,0" – Work +together. The first parameter enables alpha test, while the second defines the +alpha test strength for each detail.

  • +
+
+
+

Functionality

+

This shader operates on the same principles as its parent shaders:

+ +

All these parameters are fully described in the relevant shader documentation, +so they will not be repeated here – refer to the corresponding sections for +details.

+

The only key difference lies in the channels used for detail blending. Since +this shader handles not just three details but also includes animation, the +blending is controlled by different channels than in +rendinst_vcolor_layered.

+
    +
  • Red channel – Controls animation.

  • +
  • Green channel – Subtracts the second detail from the first.

  • +
  • Blue channel – Subtracts the third detail from the first two.

  • +
+
+

Important

+

The blue channel also controls the overlay (see +rendinst_vcolor_layered). Therefore, you must +decide which aspect is more important for a specific asset – overlay or an +additional detail.

+

If the overlay is needed, assign the same detail to the blue channel as you use +for the first (or second) detail, depending on which detail takes priority.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_mask_layered.html b/assets/shaders/dng-shaders/rendinst_mask_layered.html new file mode 100644 index 000000000..c4121970f --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_mask_layered.html @@ -0,0 +1,381 @@ + + + + + + + Shader: rendinst_mask_layered — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_mask_layered

+
+

Overview

+

The rendinst_mask_layered shader is designed for rendering instances using two +detail tiles, a global normal map, and an overlay texture (applied using +modulate2x). The details are blended according to their respective heightmaps +and a blending mask provided in the overlay texture.

+

The primary distinction between this shader and +rendinst_layered is that rendinst_mask_layered uses +only a single UV channel.

+

Parameters:

+
    +
  • script:t="detail_tile=7.1" – Controls the tiling of both detail maps +simultaneously. Applies to both details.

  • +
  • script:t="invert_height1=1" – (default – 0) – Inverts the heightmap of +Detail1. This can be a fractional value (e.g., 0.5 makes the heightmap +gray).

  • +
  • script:t="invert_height2=1" – (default is 0) – Inverts the heightmap of +Detail2 map. This can also be a fractional value.

  • +
  • script:t="paint_details=0,0,0,0" – Configures the coloring of the two +details.

  • +
  • script:t="paint_points=0,1,0,1" – Sets the black and white points for the +coloring range of both details.

  • +
  • script:t="atest=1" – Enables alpha test.

  • +
  • script:t="details_alphatest=0,0.15,0.45,0" – Specifies which detail to +apply alpha test on and with what intensity.

  • +
  • microdetails – This shader supports the standard syntax used in the +rendinst_simple or +rendinst_perlin_layered shaders.

  • +
  • heightmap blending– For more information on heightmap blending, refer to +Blending with Landscape +Heightmap.

  • +
+
+
+

Material Structure

+
    +
  • Slot 1: Overlay Texture +The overlay texture is applied over other textures using modulate2x.

    +
      +
    • RGB Channels: Albedo

    • +
    • Alpha Channel: Blending mask for the details, similar to +rendinst_layered.

      +
        +
      • White pixel: Detail2 (upper)

      • +
      • Black pixel: Detail1 (lower)

      • +
      • Gray pixel: Displays the detail with the higher heightmap value at that +location.

      • +
      +
    • +
    +
    +

    Important

    +

    If an overlay is created without a blending mask, it defaults to 100% black. +As a result, all further material adjustments will be nearly invisible because +only Detail1 will be displayed (black in the mask reveals Detail1).

    +
    +
  • +
  • Slot 2: Unused

  • +
  • Slot 3: Global Normal Texture +This texture is placed beneath the detail normals, modifying them.

    +
      +
    • RG Channels: Normal map

    • +
    • B Channel: Not used, should remain black.

    • +
    • Alpha Channel: Smoothness, applied using modulate2x over the details’ +smoothness.

    • +
    +
    +

    Important

    +

    Avoid adding unnecessary smoothness to the global normal unless:

    +
      +
    1. You’re emphasizing specific elements in the overlay, such as adding dirty +leaks and configuring their smoothness on the normal’s alpha.

    2. +
    3. You need to differentiate materials within the same detail, like making car +paint matte while keeping the bumper glossy.

    4. +
    5. The texture is not used uniquely, such as when part of the overlay and +global normal is shared with the rendinst_simple +shader for elements like headlights or glass.

    6. +
    +

    A common issue is adding smoothness to the global normal, which can override +the details’ smoothness, leaving only the most prominent details visible. +Unused areas of the global smoothness should remain 50% gray.

    +
    +
  • +
  • Slots 4-5: Detail1 Textures

    +
      +
    • Slot 4: Diffuse texture for Detail1.

    • +
    • Slot 5: Normal texture for Detail1.

    • +
    +
  • +
  • Slots 6-7: Detail2 Textures

    +
      +
    • Slot 6: Diffuse texture for Detail2.

    • +
    • Slot 7: Normal texture for Detail2.

    • +
    +
  • +
+
+
+

Parameters

+
    +
  • script:t="detail_tile=7.1" – Controls the tiling of both detail maps +simultaneously.

  • +
  • script:t="invert_height1=1" – (default – 0) – Inverts the heightmap of +Detail1.

  • +
  • script:t="invert_height2=1" – (default – 0) – Inverts the heightmap of +Detail2.

    +
    +

    Important

    +

    Unlike the rendinst_perlin_layered shader, +heightmap inversion parameters in rendinst_mask_layered do not affect the +overall distribution of details. Instead, details are distributed across the +model using the blending mask (overlay alpha). Heightmap inversion highlights +specific features within those details.

    +

    If the heightmap is not inverted, white (high) pixels take priority. For +example, intact sections of chipped stucco will be visible (as they are +higher). If the heightmap is inverted, the damaged sections will become +prominent (as they are higher after inversion).

    +
    +
  • +
  • script:t="paint_details=0,0,0,0" – Configures the coloring of the two +details (the overlay is not colored).

    +
      +
    • First component: Colors Detail1 (non-integer values can specify intensity).

    • +
    • Second component: Colors Detail2 (non-integer values can specify intensity).

    • +
    • Third component: Not used but must be included for the shader to function +correctly.

    • +
    • Fourth component: Selects the row for coloring.

    • +
    +
  • +
  • script:t="paint_points=0,1,0,1" – Sets the black and white points for the +coloring range of both detail maps.

  • +
  • First component: Black point for Detail1, similar to +rendinst_simple_painted.

  • +
  • Second component: White point for Detail1.

  • +
  • Third component: Black point for Detail2.

  • +
  • Fourth component: White point for Detail2.

  • +
+
+

Important

+

Always specify different values for the black and white points, even if the +detail is not being colored. The default configuration should be

+

script:t="paint_points=0,1,0,1".

+

Failure to do so may result in identical black and white points, causing a +division by zero error:

+

rendinst_mask_layered: divide by zero [real] while executing shader code. Stopped at operand #45.

+
+

This allows you to define a color range for materials with distinct brightness +variations, such as painted wood. You can adjust the black and white points to +control the color change in the paint layer while keeping the wood layer +beneath either unchanged or minimally altered.

+../../../_images/rendinst_mask_layered_01.jpg +../../../_images/rendinst_mask_layered_02.jpg +../../../_images/rendinst_mask_layered_03.jpg +
    +
  • script:t="atest=1" + script:t="details_alphatest=0,0.15,0.45,0":

    +

    The atest and details_alphatest parameters must be used together to enable +and configure alpha test:

    +
      +
    • script:t="atest=1" – Enables alpha test.

    • +
    • script:t="details_alphatest=0,0.15,0.45,0" – Specifies which detail to +apply alpha test on and with what intensity.

    • +
    +
  • +
  • Microdetails function the same as in the +rendinst_perlin_layered shader.

    +
    +

    See also

    +

    For more information, see +Microdetails.

    +
    +
  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_modulate2x_diffuse_decal.html b/assets/shaders/dng-shaders/rendinst_modulate2x_diffuse_decal.html new file mode 100644 index 000000000..1a9835010 --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_modulate2x_diffuse_decal.html @@ -0,0 +1,403 @@ + + + + + + + Shader: rendinst_modulate2x_diffuse_decal — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_modulate2x_diffuse_decal

+
+

Overview

+

The rendinst_modulate2x_diffuse_decal shader is used for modulating decals on +geometry within an object’s .dag file.

+

General Parameters:

+
    +
  • script:t="intensity=1,0,1,0"

    +
      +
    • 1st component: intensity (0 and above).

    • +
    • 2nd and 3rd components: clamping range.

    • +
    • 4th component: desaturation.

    • +
    +
  • +
+

daNetifme-Based Parameters:

+
    +
  • script:t="smoothness_metalness=1,1,0,0"

    +
      +
    • 1st component: affects smoothness.

    • +
    • 2nd component: affects metalness.

    • +
    • The remaining components are required but have no effect.

    • +
    +
  • +
  • script:t="draw_order=1" – Defines the draw order for decals. The default is +0 for all decals. You can set it to -1 (for decals that should always be +below others) or 1 (for decals that should always be on top).

  • +
+
+
+

Functionality

+

The shader uses 24-bit diffuse textures (without alpha). Darker than 50% gray +darkens the underlying surface, while lighter than 50% gray brightens it. This +is how modulation works.

+

If a texture requires areas that shouldn’t affect the surface (essentially, +“transparent” areas), these should be 50% gray. Applying a 50% gray modulation +(for example, using Photoshop’s overlay mode) will result in no visible +change.

+ + + +

Texture

Result

+../../../_images/rendinst_modulate2x_diffuse_decal_01.jpg +../../../_images/rendinst_modulate2x_diffuse_decal_02.jpg +

However, simply creating a texture with 50% gray in the “transparent” areas is +not enough. During compression, diffuse textures often get a gamma correction of +2.2, which alters brightness.

+

To avoid this, modulate decal textures must be processed with a gamma of 1. +These textures should be named with the suffix _tex_m, for example, +wall_dirt_spots_decal_a_tex_m.tif. Such textures are automatically processed +with gamma 1.

+
+
+

Parameters

+
+

General Parameters

+
    +
  • script:t="intensity=1,0,1,0" – This parameter controls several properties:

    +
      +
    • 1st component: decal intensity, from 0 upwards. Values below 0 invert the +decal’s color, which can be useful for creating effects like oil stains from +regular dirt.

    • +
    • 2nd and 3rd components: clamping – restricts the texture’s brightness range. +The 2nd component is “from”, and the 3rd component is “to”. This allows you +to display only a specific color range of the texture, making edges sharper +and outlines more distinct. Anything outside the clamping range defaults to +50% gray (i.e., it has no effect on the surface).

    • +
    • 4th component: decal desaturation, from 0 to 1 (default is 1, fully +desaturated).

    • +
    +
  • +
+

Examples:

+
    +
  • script:t="intensity=0,0,1,0" – Intensity set to 0.

    +../../../_images/rendinst_modulate2x_diffuse_decal_03.jpg +
    +
  • +
  • script:t="intensity=0.5,0,1,0" – Intensity set to 50%.

    +../../../_images/rendinst_modulate2x_diffuse_decal_04.jpg +
    +
  • +
  • script:t="intensity=1,0,1,0" – Intensity set to 100%.

    +../../../_images/rendinst_modulate2x_diffuse_decal_05.jpg +
    +
  • +
  • script:t="intensity=-1,0,1,0" – Inverted color.

    +../../../_images/rendinst_modulate2x_diffuse_decal_06.jpg +
    +
  • +
  • script:t="intensity=1,0,1,0" – Full color range.

    +../../../_images/rendinst_modulate2x_diffuse_decal_07.jpg +
    +
  • +
  • script:t="intensity=1,0,0.5,0" – Clamped visible range from 0 to 0.5 +(50% brightness), showing areas darker than 50%.

    +../../../_images/rendinst_modulate2x_diffuse_decal_08.jpg +
    +
  • +
  • script:t="intensity=1,0.5,1,0" – Clamped visible range from 0.5 to 1, +showing areas brighter than 50%. You can also use different ranges, such as +from 0.23 to 0.37.

    +../../../_images/rendinst_modulate2x_diffuse_decal_09.jpg +
    +
  • +
  • The same decals with different parameters can provide a wide range of effects +with minimal effort.

    +../../../_images/rendinst_modulate2x_diffuse_decal_10.jpg +
    +../../../_images/rendinst_modulate2x_diffuse_decal_11.jpg +
    +
  • +
+
+
+

daNetGame-Based Parameters

+
    +
  • script:t="smoothness_metalness=1,1,0,0" – This parameter controls the impact +on the smoothness and metalness of the underlying material. The default value +is 0. Reducing the value decreases the parameters, while increasing it +enhances them.

    +
      +
    • 1st component: smoothness.

    • +
    • 2nd component: metalness.

    • +
    +
  • +
+
+

Important

+

This parameter affects the material that the decal is applied to. If the +underlying material lacks metalness, for example, this parameter will have no +effect.

+
+ + + +

Source decal

script:t="smoothness_metalness=0,0,0,0"

+../../../_images/rendinst_modulate2x_diffuse_decal_12.jpg +../../../_images/rendinst_modulate2x_diffuse_decal_13.jpg + + + +

script:t="smoothness_metalness=1,0,0,0"

script:t="smoothness_metalness=-1,0,0,0"

+../../../_images/rendinst_modulate2x_diffuse_decal_14.jpg +../../../_images/rendinst_modulate2x_diffuse_decal_15.jpg +
    +
  • script:t="draw_order=1" – Controls the draw order for specific decal +materials. It has three values:

    +
      +
    • -1: “lower” draw order – rendered below all other decals.

    • +
    • 0: “middle” draw order – the default value for all decals.

    • +
    • 1: “upper” draw order – rendered above all other decals.

    • +
    +
  • +
+

A single object can have many overlapping decals. For example, numbering each +decal type shows how differently they can appear depending on the draw order:

+../../../_images/rendinst_modulate2x_diffuse_decal_16.jpg +
+

You can see that wear decals (2) are generally bright. However, they can be +darkened by soot decals (1). This is the decal layering in action, with the +soot decal “above” the wear decal, applied on top of it.

+

Without specifying the draw order, you might encounter:

+
    +
  • Z-fighting (where decals with the same draw order fight for visibility).

  • +
  • Incorrect layering, like this black seam (the soot decal should be “below” +the brick edge decal, but it’s drawn “above”).

    +../../../_images/rendinst_modulate2x_diffuse_decal_17.jpg +
    +
  • +
  • Or both issues simultaneously.

  • +
+
+

Important

+

If you don’t assign a draw order to any decal material, they default to 0. +However, in-game, the system may assign its own order because no clear hierarchy +is defined. Therefore, it’s important to specify at least the materials that +should be lower than 0. This ensures the rest will render above without issue. +For best results, set a clear draw order and don’t rely on chance.

+
+

Typically, modulate decals should be set to -1, while wear decals can remain +untouched. Wear often looks fresher than surrounding dirt and soot.

+

However, if the wear needs to appear dirty, you can either set the wear decals +to -1, leaving modulate decals untouched, or set the dirty modulate decals to +1 to preserve the overall layering scheme for modulate and diffuse decals.

+
+

Note

+

This parameter applies to all diffuse and modulate decals, not just this +specific shader.

+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_refraction.html b/assets/shaders/dng-shaders/rendinst_refraction.html new file mode 100644 index 000000000..af853f224 --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_refraction.html @@ -0,0 +1,373 @@ + + + + + + + Shader: rendinst_refraction — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_refraction

+
+

Overview

+

This shader is designed for glass surfaces with a refraction effect.

+

It’s a computationally expensive shader with several limitations, so use it +carefully.

+
    +
  • Z-Buffer limitation: When several assets with this shader overlaps, shader +can’t sort them properly – drawing order of polygons may be incorrect, and +geometry that closer to the camera may appear further away, and vise versa. +Overlapping polygons also do not refract properly.

  • +
  • Screen-space limitation: Shader affects whole rendered image, no matter if +geometry is behind the refractive surface or in front of it. So, for example, +weapon and character’s hands would be refracted as well, so it’s better not to +use way too strong parallax effect to make such limitation less noticeable.

  • +
+

Recommendations:

+
    +
  • Apply this shader to individual objects within enclosed spaces.

  • +
  • Position objects carefully to avoid overlap in the frame, as this shader isn’t +ideal for scenes with layered glass effects (e.g., a “crystal palace” +setting).

  • +
  • If using glass walls or doors, use them sparingly, and plan the layout to +avoid sightlines through multiple glass objects in succession.

  • +
+
+
+

Textures

+
    +
  • _tex_d.tif

    +
      +
    • RGB – Glass color

    • +
    • A – Opacity map

    • +
    +
  • +
  • _tex_n.tif

    +
      +
    • RG – Normals for reflections and parallax shift direction

    • +
    • B – Height map for parallax

    • +
    • A – Smoothness map, which also controls the blur of objects behind the +glass

    • +
    +
  • +
+
+
+

Parameters

+
    +
  • script:t="isShell=1" – Refraction strength at sharp angles

  • +
  • script:t="max_thickness=0.5" – Maximum parallax thickness

  • +
  • script:t="min_thickness=0.01" – Minimum parallax thickness

  • +
  • script:t="is_window=1" – Parameter for window glass

  • +
+
+
+

Albedo and Opacity Maps

+
+

Note

+

The glass color works as a multiplier, meaning the color also influences +transparency.

+
+../../../_images/rendinst_refraction_01.jpg +../../../_images/rendinst_refraction_02.jpg +../../../_images/rendinst_refraction_03.jpg +../../../_images/rendinst_refraction_04.jpg +
+
+

Normals Map and Smoothness

+

The normals map modifies the glass surface, affecting both the strength of the +parallax (vertically and horizontally) and the reflections.

+

Smoothness also alters the surface properties. As the reflection width changes, +so does the blurring strength of the refracted image (objects behind the +surface).

+../../../_images/rendinst_refraction_05.jpg +../../../_images/rendinst_refraction_06.jpg +
+
+

Height Map

+

The height map defines the parallax strength in the depth of the surface. It’s +best practice to bake the depth range from 0 to 255. Parallax strength is +controlled separately through shader parameters.

+

Both illustrations feature parallax based on the normals map. In the second one, +the height map adds more noticeable depth, especially at sharper angles.

+
+

Note

+

The height map doesn’t have to correspond exactly to the normals map. You can +add additional elements to the height map for more diverse parallax effects, +while keeping the normals smooth, simulating unevenness on the back side of the +glass rather than the front.

+
+../../../_images/rendinst_refraction_07.jpg +../../../_images/rendinst_refraction_08.jpg +
+
+

Thickness

+

This parameter defines the depth of the glass refraction. The greater the depth +and the larger the difference between the minimum and maximum heights, the +stronger the refraction effect.

+
+

Note

+

The refraction will also affect objects positioned between the surface and the +camera – such as weapons or character hands. The stronger the refraction, the +more noticeable the effect becomes.

+
+ + + + +

+ script:t="max_thickness=0.001"
+ script:t="min_thickness=0"

+ script:t="max_thickness=1"
+ script:t="min_thickness=0.01"

+ script:t="max_thickness=5"
+ script:t="min_thickness=0.01"

+../../../_images/rendinst_refraction_09.jpg +../../../_images/rendinst_refraction_10.jpg +../../../_images/rendinst_refraction_11.jpg +
+
+

isShell Parameter

+

The isShell parameter controls the parallax depth strength at sharper angles. +For flat surfaces like door, glass or tabletops, set isShell=0. For curved +surfaces such as bulbs, bottles, or jars, set isShell=1. While intermediate +values are possible, note that they do not reflect physical accuracy. +Additionally, increasing parallax strength will make objects between the surface +and the camera more prominent in the refraction effect.

+ + + + +

+ script:t="max_thickness=0.001"
+ script:t="isShell=0"

+ script:t="max_thickness=1"
+ script:t="isShell=1"

+ script:t="max_thickness=5"
+ script:t="isShell=3"

+../../../_images/rendinst_refraction_12.jpg +../../../_images/rendinst_refraction_13.jpg +../../../_images/rendinst_refraction_14.jpg +
+
+

is_window Parameter

+

The is_window parameter is common across most glass shaders but is disabled by +default in this shader:

+

script:t="is_window=0"

+

Enable this parameter for glass positioned at the boundary of an envi_probe, +where it needs to reflect two environments – indoor reflections (captured by the +enviro-probe) on one side and outdoor reflections on the other.

+

For objects used exclusively indoors or outdoors, such as glassware, lantern +covers, or car windows, keep this parameter disabled.

+
+
+

Example

+

In the archive below, you can find a model example, textures, high-poly assets, +and a .psd file containing various maps: Download +Example.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_simple.html b/assets/shaders/dng-shaders/rendinst_simple.html new file mode 100644 index 000000000..1abae3d08 --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_simple.html @@ -0,0 +1,318 @@ + + + + + + + Shader: rendinst_simple / simple_aces — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_simple / simple_aces

+
+

Overview

+

A basic shader used for objects that require a texture along with a normals, +metalness, and smoothness map. It supports alpha test and +microdetails.

+
+

Note

+

Technically, this is the rendinst_simple shader. However, it may be referred +as “simple_aces” on old assets, but the game interprets both as rendinst_ +simple.

+
+../../../_images/rendinst_simple_01.jpg +../../../_images/rendinst_simple_02.jpg +
+
+
+

Textures

+

The shader uses the first UV channel for mapping.

+
    +
  • tex0: – Diffuse albedo map

  • +
  • tex2: – Texture combining normals, metalness, and smoothness:

    +
      +
    • RG – Normal map

    • +
    • B – Metalness

    • +
    • Alpha – Smoothness

    • +
    +
  • +
+../../../_images/rendinst_simple_03.jpg +
+
+
+

Parameters

+../../../_images/rendinst_simple_04.jpg +
+

The shader is configured using the following parameters:

+
    +
  • “2 sided” checkbox (“two_sided” in Asset +Viewer) – +The original, outdated method for double-sided geometry. It works imperfectly +with shadows and is slightly more expensive with small triangle counts, but +performs well and is cost-effective for large triangle counts. Currently, it’s +only used for trees and not for environment assets (though older assets may +still have it, as this was the only option previously).

  • +
  • “2 sided real” checkbox (“real_two_sided” in Asset +Viewer) – +The second method for double-sided geometry. It duplicates and flips the +geometry where the material is applied (one triangle becomes two). This method +works correctly with shadows but doubles the number of triangles to which the +material is applied.

    +
    +

    Important

    +

    Avoid overusing this parameter or duplicating existing materials just to apply +it to parts of an asset. If a texture set is used and part of the geometry +needs to be double-sided while another part remains single-sided, it’s more +efficient to create a single material for the entire model with this texture +set and handle the double-sided geometry by flipping it directly in the LODs. +This approach is cheaper than using two nearly identical materials and +provides the same visual result.

    +
    +
  • +
  • atest – Alpha channel cutoff threshold. A switch for transparency based on +the diffuse’s alpha channel. The mask is compressed to a single bit: anything +darker than 127 becomes transparent, and the rest is opaque.

    +
    +

    Note

    +

    Although the atest parameter defaults to 127, it functions as a Boolean +switch. If the value is greater than 0, transparency is enabled; otherwise, +it’s not used. The threshold cannot be adjusted.

    +

    A smooth gradient from black to white will be cut off at the same point, +regardless of whether atest is set to 1, 255, or 1000.

    +
    +
  • +
  • use_painting – Controls painting from the palette defined in the shader +variables of the scene.

    +
      +
    • 1: Enable painting

    • +
    • 0: Disable painting

    • +
    • Values between 0.(0)1 and 0.(9): Apply partial painting (acts as a +multiplier). Painting is applied based on the diffuse alpha channel +multiplied by the use_painting value. Values from 1.(0)1 to 1.(9) +also influence the strength of the paint from 0.0 to 1.0 but disable the +random pixel selection from the painting stripe when the object is offset in +height. This ensures consistency in colors, for instance, when painting +modular skyscrapers the same color. The palette used is named +paint_colors.dds and is located here: +<project_name>/develop/assets/textures/colorize_textures.

    • +
    +
    +

    See also

    +

    For more information, see Procedural Rendinst +Painting.

    +
    +
  • +
  • painting_line – The painting stripe (from 0 to the last stripe in the +texture).

  • +
  • micro_detail_layer – The index of the microdetail layer (from 0 to +11).

    +
    +

    See also

    +

    For more information, see Microdetails on +Assets.

    +
    +
  • +
  • micro_detail_layer_v_scale – Vertical scale of the microdetail.

  • +
  • micro_detail_layer_uv_scale – UV scale of the microdetail texture. The +larger the value, the smaller the detail pattern will appear (range: 0 - +infinity).

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_simple_emissive_anim.html b/assets/shaders/dng-shaders/rendinst_simple_emissive_anim.html new file mode 100644 index 000000000..aaba08f2f --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_simple_emissive_anim.html @@ -0,0 +1,363 @@ + + + + + + + Shader: rendinst_simple_emissive_anim / dynamic_illum_anim — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_simple_emissive_anim / dynamic_illum_anim

+
+

Overview

+

This shader enables toggling, adjusting emission strength, and controlling +emission color.

+
+
+

Parameters

+

rendinst_simple_emissive_anim:

+
    +
  • class:t="rendinst_simple_emissive_anim"

  • +
  • script:t="illum_scroll_speed=0.1" – Controls the scroll speed of the “scan” +effect across the emission texture program. Reversing the sign of this +variable changes the scanning direction.

  • +
  • script:t="use_additive_blend=1" – Sets the blending mode: 0 for +multiplicative emission on the albedo, 1 for additive blending.

  • +
  • tex0:t="diffuse_map_tex_d.tif" – The alpha channel defines the emission +intensity.

  • +
  • tex2:t="normal_map_tex_n.tif" – Normal map.

  • +
  • tex3:t="program_map_program.tif" – The emission texture program. The minimum +texture size is 4x4.

  • +
  • tex4:t="shift_map_shift.tif" – Emission shift texture.

  • +
+

dynamic_illum_anim:

+
    +
  • script:t="illum_scroll_speed=0.1" – Controls the scroll speed of the “scan” +effect across the emission texture program. Reversing the sign of this +variable changes the scanning direction.

  • +
  • script:t="use_additive_blend=1" – Sets the blending mode: 0 for +multiplicative emission on the albedo, 1 for additive blending.

  • +
  • tex0:t="diffuse_map_tex_d.tif" – The alpha channel defines the emission +intensity.

  • +
  • tex2:t="program_map_program.tif" – Emission texture program. The minimum +texture size is 4x4.

  • +
  • tex3:t="shift_map_shift.tif" – Emission shift texture.

  • +
+

The shader operates in two modes: multiplicative and additive. The emission +program texture modifies two channels in the G-buffer: albedo and emission. In +this context, the emission channel is 8-bit (grayscale).

+

This means that there are three options for achieving colored emission. Choose +the one that best suits your case:

+
    +
  • In multiplicative mode, use a colored albedo and a grayscale program texture +to avoid overshadowing the albedo.

  • +
  • In multiplicative mode, use a colored program texture. This will modify the +base albedo map, subtracting from it.

  • +
  • Multiplicative mode is the default.

  • +
+
+
+

Textures

+

For animating the turning on and off of lights, you’ll need a .dag file for +the lights and two textures:

+
    +
  • tex0:t="emis_anim_shader_tex_d.tif" – The diffuse texture defines the lamp’s +color.

  • +
  • tex3:t="emis_anim_shader_program.tif" – The program texture defines when the +lamp emits light (independent of UV mapping).

  • +
+../../../_images/rendinst_simple_emissive_anim_01.jpg +
+
+

tex0:t=“emis_anim_shader_tex_d.tif”

+

Defines the lamp’s color and emission level:

+
    +
  • RGB channels: Albedo (color of the emission if no other color is defined in +the program texture (tex3:t="emis_anim_shader_program.tif")).

  • +
  • A channel: Emission intensity, where white is the maximum emission and black +means no emission.

  • +
+
+
+

tex3:t=“emis_anim_shader_program.tif”

+

The emission program texture defines:

+
    +
  1. Emission timing (emitting light in white areas, no emission in black areas).

  2. +
  3. Emission color (the color emitted can be defined here).

  4. +
  5. Emission intensity (non-white colors will reduce emission intensity).

  6. +
+
    +
  • RGB channels: If not black, the defined color will be emitted.

  • +
  • A channel: Not used.

  • +
+

Using these two textures, simple emission animations can be created. Separate +mapping for each lamp is not required.

+

Example: The lamp’s color is defined in the program texture +(tex0:t="emis_anim_shader_program.tif), and to prevent color conflicts between +the diffuse and program textures, the lamps in the diffuse texture are painted +white.

+../../../_images/rendinst_simple_emissive_anim_02.gif +../../../_images/rendinst_simple_emissive_anim_03.gif +
+
+
+

tex4:t=“emis_anim_shader_shift.tif”

+
    +
  • R channel: Controls horizontal displacement on the program texture:

    +
      +
    • White: No displacement.

    • +
    • Black: Maximum displacement.

    • +
    +
  • +
  • G channel: Controls vertical displacement on the program texture:

    +
      +
    • White: No displacement.

    • +
    • Black: Maximum displacement.

    • +
    +
  • +
  • B channel: Controls the speed:

    +
      +
    • White: Speed increases (visually by about 2x).

    • +
    • Black: Speed is controlled by the script:t="illum_scroll_speed=0.1" +parameter.

    • +
    +
  • +
+
+
+
+

Usage

+

For complex animations, use tex4:t="emis_anim_shader_shift.tif".

+

Example: In the example below, only the R channel is used to control the +shift on the program. The green and white lamps, marked by arrows in the shift +texture (tex4:t="emis_anim_shader_shift.tif), are painted according to the UV +shell of the lamps. This causes visible artifacts at the seams. It is better to +paint the area as with the red/blue lamps.

+../../../_images/rendinst_simple_emissive_anim_04.gif +
+

Example: For scrolling text, you’ll need a .dag file for the banner and +three textures.

+../../../_images/rendinst_simple_emissive_anim_05.gif +
+ + + + +

tex0:t="text_anim_tex_d"

tex3:t="text_anim_program"

tex4:t="text_anim_shift"

+../../../_images/rendinst_simple_emissive_anim_06.jpg +../../../_images/rendinst_simple_emissive_anim_07.jpg +../../../_images/rendinst_simple_emissive_anim_08.jpg +

For the scrolling text effect, both the gradient (which should be linear) and +the gamma value (gamma:r=1) of the textures are critical.

+../../../_images/rendinst_simple_emissive_anim_09.jpg +
+

Failing to meet these conditions will result in poor animation quality. For +example, using a Photoshop gradient with a gamma of 2.2 will produce subpar +results:

+../../../_images/rendinst_simple_emissive_anim_10.gif +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_simple_glass.html b/assets/shaders/dng-shaders/rendinst_simple_glass.html new file mode 100644 index 000000000..e23f5ba52 --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_simple_glass.html @@ -0,0 +1,236 @@ + + + + + + + Shader: rendinst_simple_glass — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_simple_glass

+
+

Overview

+

This shader can be assigned as glass when setting materials in 3ds Max.

+

For dynamic models, it is remapped to dynamic_simple_glass.

+
+
+

Parameters

+
    +
  • script:t="emission=X" – Activates emission during dark hours, X is the +brightness of the emission.

  • +
  • script:t="is_window=1" – A common parameter across most glass shaders.

  • +
+

In this shader, the is_window parameter is enabled by default since the +majority of assets using this shader are window glass.

+

This parameter should be enabled for glass objects located at the boundary of an +envi_probe, meaning the glass needs to reflect two different environments:

+
    +
  • The interior reflection, baked into the envi_probe.

  • +
  • The exterior reflection, typically reflecting the outside environment.

  • +
+

The parameter should be disabled for all glass objects used either entirely +inside or outside a building. Examples include glassware, lamp covers, vehicle +windows, etc.

+
+

See also

+

For more information on setting up emission, see +rendinst_emissive.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_simple_painted.html b/assets/shaders/dng-shaders/rendinst_simple_painted.html new file mode 100644 index 000000000..d0668fbe6 --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_simple_painted.html @@ -0,0 +1,347 @@ + + + + + + + Shader: rendinst_simple_painted — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_simple_painted

+
+

Overview

+

This is a basic shader for render instances that includes the ability to apply +color from a paint texture. Aside from this feature, it is identical to the +rendinst_simple shader.

+
+

Important

+

By default, this shader does not apply paint across the entire texture. Instead, +it only affects the range defined by the black and white points (explained +below). Out of the box, the shader will not fully paint the texture.

+

If you find that the paint is not being applied as expected – either it doesn’t +appear at all or the color is incorrect – the likely issue is that your texture +is too dark for the shader’s default settings.

+

Configure the paint point settings to achieve the desired result.

+

Unfortunately, the default settings are hardcoded, so they cannot be easily +modified.

+
+
+

Textures

+

As mentioned, this shader is identical to +rendinst_simple, with support for microdetails.

+
    +
  • tex0: Diffuse Albedo

  • +
  • tex2: Normals + Metalness + Smoothness

  • +
+
+
+

Parameters

+

The shader uses the following parameters:

+
    +
  1. paint_palette_row = 1 – Specifies the row number in the paint texture to +use. Default is row 1 (can be omitted if unchanged).

  2. +
  3. paint_white_point=0.2 – The diffuse brightness level at which the albedo +will be fully painted.

  4. +
  5. paint_black_point=0.05 – The diffuse brightness level below which the +albedo will not be painted.

  6. +
  7. paint_mult = 1 or 2 – Specifies the paint multiplier. Default is 1. Set +to 2 for a 2x multiplier.

  8. +
  9. paint_details = 1 – Configures the intensity of the paint, similar to other +shaders with multiple detail levels.

  10. +
  11. paint_const_color=0.5,0,0,0 – Specifies a constant paint color. The first +three components define the color, and the last component toggles between +modulating with the palette color (0) or replacing it with the constant +color (1).

  12. +
+

The paint_white_point and paint_black_point parameters define the brightness +range of the albedo that will be affected by the paint. By default, the shader +applies paint from darker to lighter areas, meaning it won’t paint anything +below the black point and will fully paint anything above the white point.

+
+

Note

+

You can invert this range by swapping the values. For example:

+
    +
  • paint_white_point=0.02

  • +
  • paint_black_point=0.5

  • +
+

In this case, darker areas will be painted, and lighter areas will not.

+
+
+

Warning

+

If you encounter a “divide by zero” error,

+../../../_images/rendinst_simple_painted_02.jpg +
+

it means you’ve set both parameters to the same value:

+
    +
  • script:t="paint_white_point=0"

  • +
  • script:t="paint_black_point=0"

  • +
+

or

+
    +
  • script:t="paint_white_point=0.5"

  • +
  • script:t="paint_black_point=0.5"

  • +
+
+
+
+
+

Paint Texture

+

The paint texture consists of several rows, each only 1 pixel in height. The +texture width must be at least 256 pixels (256 is recommended as it is more than +sufficient).

+

For example, a texture with three rows:

+../../../_images/rendinst_simple_painted_01.jpg +
+
+

Paint Texture Row Numbering

+

Row numbering starts at 0. The convention is as follows:

+
    +
  • Row 0: Exterior walls of buildings.

  • +
  • Row 1: Building trim (shutters, doors, windows, frames).

  • +
  • Other Rows: Assigned as needed by the level designer and asset manager.

  • +
+
+
+

Assigning a Paint Texture to a Level

+

The texture is assigned to shader variables in the scene via +paint_details_tex:t="texture_name*".

+

For example, in the Tunisia map, this is defined as follows:

+
    +
  • File path: +.../prog/gameBase/content/e_tunisia/gameData/scenes/tunisia_city_assault.blk

  • +
  • Block:

    +
    entity{
    +  _template:t="shaderVars"
    +}
    +
    +
    +
  • +
  • Line: paint_details_tex:t="tunisia_wall_color_tex_palette*"

  • +
+
+
+
+

How It Works?

+

When an object moves across the map, a color pixel is selected from the +specified row in the paint texture based on an algorithm. This pixel’s color is +then applied to the object’s material.

+
    +
  • If the object has multiple materials assigned to different paint rows, the +shader will select a single column of pixels from those specified rows.

  • +
  • If the object is a composite object, the same column of pixels will be used +for all the objects and materials within it.

  • +
+

For example, you might use row 0 to paint the walls blue and row 1 to paint the +windows and doors gray, ensuring that all windows and doors in the composite +object share the same color.

+../../../_images/rendinst_simple_painted_03.jpg +
+

This approach ensures consistent color application, preventing cases where a +single building has windows with varying colors.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_tree_colored.html b/assets/shaders/dng-shaders/rendinst_tree_colored.html new file mode 100644 index 000000000..71c351239 --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_tree_colored.html @@ -0,0 +1,255 @@ + + + + + + + Shader: rendinst_tree_colored — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_tree_colored

+
+

Overview

+

A basic shader for rendering vegetation.

+
+
+

Textures

+
    +
  • tex0: Diffuse texture with alpha channel.

  • +
+
+
+

Parameters

+

Default values are indicated in quotes.

+
    +
  • script:t="atest=0" – Enables alpha test.

  • +
  • script:t="interactions=0" – Configures interaction between characters and +vegetation.

    +
      +
    • 0: Disabled

    • +
    • 1: Tall plants

    • +
    • 2: Bushes

    • +
    +
  • +
  • script:t="interaction_strength=0.8" – Controls the strength of interactions, +ranging from 0 to 1 (values above 1 might work as well). This is a +multiplier and is only effective when interactions is set to 1 or 2.

  • +
  • script:t="angle_dissolve=1" – Toggles angle-based dissolve effects.

  • +
  • script:t="spherical_normals=1" – Applies spherical normals over branch +normals to smooth sharp edges and reduce low-poly appearance.

    +
    +

    Note

    +

    This feature is rarely used and may behave unexpectedly.

    +
    +
  • +
+
+
+

Vertex Colors

+

Unlike in War Thunder, the third channel is not used.

+
    +
  • Red Channel: Controls fine vertex jitter. The shift occurs along the +vertex normals but only in the horizontal plane.

  • +
  • Green Channel: Controls oscillation phase. It shifts the amplitude +oscillation by 90 degrees, randomizing the fine vertex jitter.

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_tree_perlin_layered.html b/assets/shaders/dng-shaders/rendinst_tree_perlin_layered.html new file mode 100644 index 000000000..17aec3535 --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_tree_perlin_layered.html @@ -0,0 +1,283 @@ + + + + + + + Shader: rendinst_tree_perlin_layered — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_tree_perlin_layered

+
+

Overview

+

The rendinst_tree_perlin_layered shader is designed for advanced rendering of +trees, using tessellation to enhance visual fidelity. This shader supports both +displacement and smoothing modes, allowing for detailed control over tree +geometry. Tessellation can be dynamically enabled or disabled at runtime, making +it adaptable for various performance settings.

+
+
+

Tessellation Overview

+

Tessellation in this shader can be toggled at runtime via a shader variable. By +setting pn_triangulation to 1 in the console, all trees configured for +tessellation, as well as rendinst_clipmap objects with default settings, will +be tessellated. In the future, this feature will be incorporated into the +graphics settings.

+
+
+

Enabling Tessellation in an Asset

+
    +
  1. Default Setting: Tessellation is disabled by default. To enable it, set +material_pn_triangulation to 1 or 2.

  2. +
  3. Common Parameter:

    +
      +
    • max_tessellation_factor: Controls the tessellation factor, which varies +with distance. This parameter sets the maximum factor when the camera is +close to the object.

    • +
    +
  4. +
  5. Tessellation Modes:

    +
      +
    • Mode 2: Smoothing only. This mode does not have any additional +configurable parameters.

    • +
    • Mode 1: Displacement mode. In this mode, the shader reads the +displacement strength from the alpha component of the three diffuse +textures. These textures are blended according to pixel shader blending +rules.

    • +
    +

    Displacement Mode Parameters:

    +
      +
    • rendinst_displacement_min: Defines the displacement when the diffuse +texture’s alpha is 0. The .xyz components correspond to the three +diffuse textures, while .w is unused.

    • +
    • rendinst_displacement_max: Defines the displacement when the diffuse +texture’s alpha is 1. The .xyz components correspond to the three +diffuse textures, while .w is unused.

    • +
    • rendinst_displacement_lod: Specifies the mip level used for sampling +the diffuse textures during displacement. Lower values result in more +noise, while higher values produce smoother displacement. The .xyz +components correspond to the three diffuse textures, and .w is unused.

    • +
    • rendinst_displacement_mod: If is_pivoted is set to 1, this shader +variable allows multipliers to be specified based on the vertex hierarchy. +The .x component is the multiplier for the trunk, while .yzw components +apply to the branches in hierarchical order.

    • +
    +
  6. +
+
+
+

Additional Notes

+
    +
  • Tessellation Factor Limit: The maximum tessellation factor is 12 due to +API limitations. Setting max_tessellation_factor higher will simply reach +this maximum at a greater distance. However, it is generally unnecessary to +set it too high, as tree triangles are typically small.

  • +
  • rendinst_displacement_lod Setting: This should be adjusted so that the +texels sampled at the selected mip level correspond to a single triangle after +tessellation, in terms of world size. Precise calculations aren’t +required – adjust until the visual result is satisfactory.

  • +
  • daEditor Configuration: When using +daEditor, ensure that +the PN triangulation checkbox is selected to view the tessellation results +immediately.

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/dng-shaders/rendinst_vcolor_layered.html b/assets/shaders/dng-shaders/rendinst_vcolor_layered.html new file mode 100644 index 000000000..acd9eee11 --- /dev/null +++ b/assets/shaders/dng-shaders/rendinst_vcolor_layered.html @@ -0,0 +1,599 @@ + + + + + + + Shader: rendinst_vcolor_layered — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_vcolor_layered

+
+

Overview

+

The rendinst_vcolor_layered shader is designed for rendering instances with +three detail layers, which blend based on:

+
    +
  1. The vertex color channels of the object’s geometry.

  2. +
  3. Corresponding heightmaps for each layer.

  4. +
+

Parameter List

+
    +
  • script:t="atest=1" and script:t="details_alphatest=0,0,0,0" – These +parameters work together to enable alpha test. The first parameter (atest) +activates alpha test, while the second (details_alphatest) sets the alpha +test strength for each detail layer.

  • +
  • script:t="details_tile=1,1,1,0" – Controls the tiling of the detail +textures.

  • +
  • script:t="invert_heights=0,0,1,0" – Inverts the heightmaps for each detail +layer. Fractional values can be used. The value of 0.5 turns heightmap into +neutral gray fill.

  • +
  • script:t="paint_details=0,0,0,0" – Allows painting over the three detail +layers.

  • +
  • script:t="overlay_color_from=0,0,0,0" – Defines the starting color for +overlay blending using linear interpolation (LERP), with masking defined by +the blue vertex color channel.

  • +
  • script:t="overlay_color_to=0,0,0,0" – Defines the target color range for +overlay blending, from 0 (black, RGB: 0,0,0) to 1 (white, RGB: +255,255,255).

  • +
+
+

Important

+

If vertex color is not painted after applying this shader, the Asset Viewer +will produce an error when selecting the model (related to the 5th mapping +channel). Ensure vertex colors are used with this shader, as it will not +function correctly without them.

+
+
+
+

Textures

+
    +
  • tex0: Detail1 Diffuse (Albedo)

  • +
  • tex2: Detail1 Normals + Metalness + Smoothness

  • +
  • tex3: Detail2 Diffuse (Albedo)

  • +
  • tex4: Detail2 Normals + Metalness + Smoothness

  • +
  • tex5: Detail3 Diffuse (Albedo)

  • +
  • tex6: Detail3 Normals + Metalness + Smoothness

  • +
+
+
+

Parameters

+
+

Alpha Test

+

This shader is suitable for materials that require transparency, such as +tattered cloth or paper. Alpha test is controlled by two parameters:

+
    +
  • script:t="atest=1" – Activates alpha test for the material. This parameter +alone does not alter the appearance until details_alphatest is specified.

  • +
  • script:t="details_alphatest=0,0,0,0" – Specifies the alpha test strength +for each detail layer, with values ranging from 0 to 1”:”

    +
      +
    • 1st component: Detail1

    • +
    • 2nd component: Detail2

    • +
    • 3rd component: Detail3

    • +
    • 4th component: Unused, but required.

    • +
    +
  • +
+
+
+

Detail Tiling

+

The detail tiling parameter behaves similarly to the +rendinst_perlin_layered shader.

+
    +
  • script:t="details_tile=1,1,1,0":

    +
      +
    • 1st component: Tiling for Detail1.

    • +
    • 2nd component: Tiling for Detail2.

    • +
    • 3rd component: Tiling for Detail3.

    • +
    • 4th component: Unused, but required.

    • +
    +
  • +
+
+
+

Procedural Painting

+

This feature allows procedural painting over the detail layers (similar to +rendinst_perlin_layered shader).

+
    +
  • script:t="paint_details=0,0,0,0" – Allows painting over the three detail +layers.

    +
      +
    • 1st component: Paint strength for Detail 1 (fractional values allowed).

    • +
    • 2nd component: Paint strength for Detail 2.

    • +
    • 3rd component: Paint strength for Detail 3.

    • +
    • 4th component: Selects line of painting palette.

    • +
    +
  • +
+
+
+

Vertex Color Overlay

+

The shader uses the blue channel of the vertex color to create a global color +overlay map. Two colors are blended using linear interpolation (LERP), with the +map defined by the blue vertex color channel.

+
    +
  • script:t="overlay_color_from=0,0,0,0" – Defines the starting color for the +blend.

  • +
  • script:t="overlay_color_to=0,0,0,0" – Defines the target color for the +blend.

    +
      +
    • The first three components represent the RGB values, ranging from 0 +(black) to 1 (white).

    • +
    • The 4th component is currently unused.

    • +
    +
  • +
+

This overlay modulates the blending of the detail layers. For example, storing +curvature data in the blue vertex color channel can create an effect where +cracks in stone appear black, while raised areas appear red. By default, both +colors are set to mid-gray, so no additional color effect is applied.

+
+

Important

+

The “from” color is applied globally by default. To prevent the entire model +from being painted, set the “from” color to a neutral gray (0.5, 0.5, 0.5, 0) +and configure the “to” color to highlight specific details.

+
+
+
+
+

Functionality

+
+

VertexPaint Modifier

+

Here are key settings you’ll need when using the VertexPaint modifier with +this shader:

+../../../_images/rendinst_vcolor_layered_01.jpg +
    +
  • This button toggles the display of vertex colors on the model.

  • +
+
+../../../_images/rendinst_vcolor_layered_02.jpg +
    +
  • Tools for painting or filling the vertex color.

  • +
+
+../../../_images/rendinst_vcolor_layered_03.jpg +
    +
  • Brush opacity and size settings (default size is 20 meters).

  • +
+
+../../../_images/rendinst_vcolor_layered_04.jpg +
    +
  • Options for geometry selection while painting.

  • +
+
+../../../_images/rendinst_vcolor_layered_05.jpg +
    +
  • Smooth brush tool for blending painted colors.

  • +
+
+../../../_images/rendinst_vcolor_layered_06.jpg +
    +
  • Vertex color blending modes (similar to Photoshop layers). When using multiple +modifiers, it’s recommended to paint each color channel (R, G, and B) +separately. The red channel typically uses the “normal” blend mode, while +green and blue use Add mode.

  • +
+
+
+

Important

+

By default, vertex colors on the model are set to white (maximum values for all +channels). To begin painting, fill the entire model with black.

+
+
+
+

Blending Details

+

The shader blends three detail layers using both vertex colors and heightmaps.

+
+

Vertex Color Blending

+

Initially, Detail1 is applied across the model. Detail2 and Detail3 are blended +into it based on the red and green vertex color channels.

+

For example, painting an area with 100% red will apply Detail2 there, while 100% +green will apply Detail3. Smooth gradients in the vertex colors create more +natural transitions between the detail layers.

+
+
+

Heightmap Blending

+

The brightness of the heightmaps influences how strongly each detail layer +blends. The intensity of the vertex colors is multiplied by the corresponding +heightmap brightness.

+

For example:

+
    +
  • If two detail layers have identical heightmaps and vertex color weights, they +will blend evenly.

  • +
  • A detail with a black heightmap and another with a mid-gray heightmap will +blend differently, as the mid-gray heightmap will have a higher visual impact.

  • +
+
+
+
+

Visual Examples

+

Let’s consider an example of a car tarp using multiple detail textures and their +corresponding heightmaps.

+ + + +

fabric_tarpaulin_a_tex_d – Detail1 and Detail2

fabric_shabby_a_tex_d – Detail3

+../../../_images/rendinst_vcolor_layered_07.jpg +../../../_images/rendinst_vcolor_layered_08.jpg +../../../_images/rendinst_vcolor_layered_09.jpg +../../../_images/rendinst_vcolor_layered_10.jpg +
    +
  • Shader Parameters:

  • +
+ +

+

    +
  • script:t="paint_details=1,0,0,1"
  • +
  • script:t="details_tile=12,16,20,0"
  • +
  • script:t="invert_heights=0,0,0,0"
  • +
  • script:t="details_alphatest=0,0,0,0"

+

    +
  • tex0:t="fabric_tarpaulin_a_tex_d.tif"
  • +
  • tex2:t="fabric_tarpaulin_a_tex_n.tif"
  • +
  • tex3:t="fabric_tarpaulin_a_tex_d.tif"
  • +
  • tex4:t="fabric_tarpaulin_a_tex_n.tif"
  • +
  • tex5:t="fabric_shabby_a_tex_d.tif"
  • +
  • tex6:t="fabric_shabby_a_tex_n.tif"
  • +

+ + + +

3ds Max

Asset Viewer

+../../../_images/rendinst_vcolor_layered_11.jpg +../../../_images/rendinst_vcolor_layered_12.jpg +

By default, the entire model is covered by Detail1 (as we cannot leave the model +without any detail). For clarity, it tinted a yellowish color (see shader +parameters).

+../../../_images/rendinst_vcolor_layered_13.jpg +../../../_images/rendinst_vcolor_layered_14.jpg +
    +
  • X-axis (100% Red): Subtracts Detail2 from Detail1.

  • +
  • Y-axis (100% Green): Subtracts Detail3 from Detail1.

  • +
  • Z-axis (100% Green and Red): Subtracts both Detail2 and Detail3 from Detail1.

  • +
+

These details blend based on their heightmaps (you may notice an uneven +transition from Detail2 to Detail3), but the blend is not perfect – Detail2’s +heightmap is stronger than Detail3’s.

+../../../_images/rendinst_vcolor_layered_15.jpg +../../../_images/rendinst_vcolor_layered_16.jpg +

We introduced some subtle variation by applying a 45% fill of Detail2 across the +fabric. This allows Detail2 to appear in scattered areas, blending based on the +heightmaps, which adds visual variety.

+../../../_images/rendinst_vcolor_layered_17.jpg +../../../_images/rendinst_vcolor_layered_18.jpg +../../../_images/rendinst_vcolor_layered_19.jpg +../../../_images/rendinst_vcolor_layered_20.jpg +

Next, we enhanced the raised parts of the tarp with a 55% application of +Detail2, simulating faded areas on protruding fabric sections. We used 55% +because 45% of the tarp was already covered with red (Detail2).

+

If we applied 100%, the result would have been 145%, creating an overly +saturated color and causing the wear effect to spread too much across the +fabric. There are two sets of screenshots – before and after blurring the +painted areas.

+
    +
  • Shader Parameters:

  • +
+ +

+

    +
  • script:t="atest=1"
  • +
  • script:t="paint_details=1,0.4,-4,1"
  • +
  • script:t="details_tile=12,16,20,0"
  • +
  • script:t="invert_heights=0,0,0,0"
  • +
  • script:t="details_alphatest=0,0,0.33,0"

+

    +
  • tex0:t="fabric_tarpaulin_a_tex_d.tif"
  • +
  • tex2:t="fabric_tarpaulin_a_tex_n.tif"
  • +
  • tex3:t="fabric_tarpaulin_a_tex_d.tif"
  • +
  • tex4:t="fabric_tarpaulin_a_tex_n.tif"
  • +
  • tex5:t="fabric_shabby_a_tex_d.tif"
  • +
  • tex6:t="fabric_shabby_a_tex_n.tif"
  • +

+ + + +

3ds Max

Asset Viewer

+../../../_images/rendinst_vcolor_layered_21.jpg +../../../_images/rendinst_vcolor_layered_22.jpg +

We added 100% spots of Detail3, then applied a 30% smoothing to blend them. At +100%, Detail3 would appear too weak due to its less pronounced heightmap +compared to Detail1 and Detail2.

+

Notice the spots around Detail3, which are actually from Detail2, even though we +didn’t directly paint them. This occurs because the entire tarp was filled with +45% of Detail2, and wherever Detail3 partially subtracts from Detail1, Detail2 +also starts to blend in.

+

We configured the colors for Detail2 and Detail3 to reduce the color contrast. +Additionally, we applied an alpha test to Detail3 (although it’s not very +visible in the screenshot).

+
    +
  • Shader Parameters:

  • +
+ +

+

    +
  • script:t="atest=1"
  • +
  • script:t="paint_details=1,0.4,-4,1"
  • +
  • script:t="details_tile=12,16,20,0"
  • +
  • script:t="invert_heights=0,0,0,0"
  • +
  • script:t="details_alphatest=0,0,0.33,0"
  • +
  • script:t="overlay_color_from=0.5,0.5,0.5,0"
  • +
  • script:t="overlay_color_to=0,0,0,0"

+

    +
  • tex0:t="fabric_tarpaulin_a_tex_d.tif"
  • +
  • tex2:t="fabric_tarpaulin_a_tex_n.tif"
  • +
  • tex3:t="fabric_tarpaulin_a_tex_d.tif"
  • +
  • tex4:t="fabric_tarpaulin_a_tex_n.tif"
  • +
  • tex5:t="fabric_shabby_a_tex_d.tif"
  • +
  • tex6:t="fabric_shabby_a_tex_n.tif"
  • +

+ + + +

3ds Max

Asset Viewer

+../../../_images/rendinst_vcolor_layered_23.jpg +../../../_images/rendinst_vcolor_layered_24.jpg +../../../_images/rendinst_vcolor_layered_25.jpg +../../../_images/rendinst_vcolor_layered_26.jpg +../../../_images/rendinst_vcolor_layered_27.jpg +../../../_images/rendinst_vcolor_layered_28.jpg +

We added a layered overlay in the blue channel. The color gradient ranges from +50% gray (which doesn’t affect the texture) 0.5,0.5,0.5,0 to 0% black +0,0,0,0.

+

To illustrate the “from-to” color concept, consider the following example: +script:t="overlay_color_from=0.549,0.239,0.239,0" (~RGB 140,61,61).

+../../../_images/rendinst_vcolor_layered_29.jpg +
+

Any area not painted with blue will be colored using the “from” value. This +approach can be useful in some cases, but not always necessary.

+../../../_images/rendinst_vcolor_layered_30.jpg +../../../_images/rendinst_vcolor_layered_31.jpg +

As a final touch, let’s create a burnt corner on the fabric. While this effect +may not look perfect without further geometry adjustments, the intention should +be clear. Note that we had to erase the initial 45% red fill in that area to +make Detail3 stand out properly.

+

Here’s an example of appropriate geometry with the shader applied correctly +(only one detail layer is used across the model), showcasing burnt edges:

+../../../_images/rendinst_vcolor_layered_32.jpg +
+

Most of the stages were painted in separate layers:

+
    +
  • Global application of Detail2.

  • +
  • Global application of Detail3.

  • +
  • Detail3 applied to the burnt corner.

  • +
  • Overlay for fabric folds.

  • +
  • Overlay for a dirty tarp top.

  • +
  • Overlay for individual spots.

  • +
  • Overlay for the burnt corner.

  • +
+
+
+
+

Shader Usage

+

This shader is well-suited for:

+
    +
  • Various types of fabric that don’t require fine details (not suitable for +clothing).

  • +
  • Stones, where you can highlight sharp edges (similar to a cavity effect) and +darken the rest.

  • +
  • Props without sharp details, like clay vases. However, it’s less applicable in +such cases because this shader works best with a dense mesh. Otherwise, it +will only affect large areas.

  • +
  • For props, it’s usually cheaper to create a unique texture or use the +rendinst_mask_layered shader instead.

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/index.html b/assets/shaders/index.html new file mode 100644 index 000000000..13d76df65 --- /dev/null +++ b/assets/shaders/index.html @@ -0,0 +1,267 @@ + + + + + + + Shaders — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Shaders

+
+

Contents:

+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/land_mesh_combined_decal_family.html b/assets/shaders/land_mesh_combined_decal_family.html new file mode 100644 index 000000000..95bd20ae4 --- /dev/null +++ b/assets/shaders/land_mesh_combined_decal_family.html @@ -0,0 +1,433 @@ + + + + + + + Shader Family: land_mesh_combined_decal — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader Family: land_mesh_combined_decal

+
+

Overview

+

We use several shaders for object geometry to apply decals to the terrain. This +is not to be confused with simple ground decals, which apply directly to the +terrain geometry – that’s a different topic. Here, we are dealing with +geometric decals.

+

When do we need to apply a decal to the terrain using geometry? When we want to +modify the landscape’s geometry and add some new color (and possibly details). A +good example would be airfields. Given their large size, it’s impractical to +render them as full-scale models with unique textures (or tiled textures), as +this would result in a poor texel density. Moreover, they wouldn’t blend +seamlessly with the surrounding terrain – there would be harsh transitions +between textures.

+

The solution is decals. For example, if you want a snowy airfield in a desert, +you can achieve this with decals. All decals are prefabs – they are baked into +the level’s geometry.

+../../_images/land_mesh_combined_decal_01.jpg +
+

There are several shaders we can use for this:

+
    +
  1. land_mesh_combined and its dynamic version dynamic_combined_decal

  2. +
  3. land_mesh_combined_detailed_decal and its dynamic version +dynamic_combined_detailed_decal

  4. +
  5. land_mesh_combined_mixed_decal and its dynamic version +dynamic_combined_mixed_decal

  6. +
+
+

Important

+

The difference between dynamic and static shaders boils down to two key points:

+
    +
  • Static shaders are applied to prefabs, while dynamic shaders are applied to +dynamic models (for simplicity, think of them as models with dynamic shaders).

  • +
  • Objects with dynamic shaders can only be placed through the MissionEditor as +units (whether they’re part of an object group or a dynamic object). In +contrast, static objects are placed directly as entities in the Landscape +tab.

  • +
+
+
+
+

land_mesh_combined / dynamic_combined_decal – Basic Shader

+

This is the simplest shader in the family. It has no parameters and applies only +a decal texture to the geometry. The typical material configuration looks like +this:

+
material{
+  name:t="airfield_side"
+  class:t="land_mesh_combined"
+  tex0:t="./norway_herdla_airfield_empty_alpha.tif"
+}
+
+
+

The decal texture represents the diffuse component of what we are applying. The +alpha channel controls the transparency of the decal.

+

For example:

+ + + + +

Airfield on the Map

Decal Diffuse

Decal Alpha

+../../_images/land_mesh_combined_decal_02.jpg +../../_images/land_mesh_combined_decal_03.jpg +../../_images/land_mesh_combined_decal_04.jpg +

Currently, this basic shader is rarely used because the need for greater detail, +even for aircraft-related assets, has increased. However, it’s sometimes applied +to the “manchette” of airfields (the curved edges used to blend the airfield +surface with the surrounding terrain). In such cases, the shader with a +transparent alpha texture is assigned to this geometry:

+../../_images/land_mesh_combined_decal_05.jpg +
+
+
+

land_mesh_combined_detailed_decal / dynamic_combined_detailed_decal – Shader with One Detail Layer

+

This shader works with three textures:

+
    +
  • Slot 1: decal texture with transparency in the alpha channel.

  • +
  • Slot 2: diffuse detail texture.

  • +
  • Slot 3: _r detail texture.

  • +
+

The first two slots are self-explanatory. The _r texture requires further +reading, but in short, it contains a height map, microdetail index, smoothness, +and reflectance. Based on these parameters, the detail on the terrain is +embossed and exhibits the physical properties of the desired material.

+
+

Important

+

This _r texture is not the same as the one used for landscapes! On landscapes, +the _r texture includes reflectance, ambient occlusion, microdetail index, and +smoothness.

+
+

This shader has the following parameters:

+
    +
  • script:t="detail1_size_ofs=0.25,0.25,0,0" – this offsets the detail texture +(effectively controlling the tiling).

  • +
+

A typical material configuration looks like this:

+
material{
+  name:t="smolensk_aero_south"
+  class:t="land_mesh_combined_detailed_decal"
+  script:t="detail1_size_ofs=64,32,0,0"
+  tex0:t="smolensk_aero_south_tex.tif"
+  tex1:t="detail_soil_cracked_tex_d.tif"
+  tex2:t="detail_soil_cracked_tex_r.tif"
+}
+
+
+

The logic is the same as in land_mesh_combined, except that this shader adds a +detail layer to the decal texture. Essentially, in this case, the decal acts +more as an overlay because of its large texel size, which results in a blurred +appearance.

+../../_images/land_mesh_combined_decal_06.jpg +../../_images/land_mesh_combined_decal_07.jpg +

The fine details come from the detail and microdetail textures. For instance, +fine textures such as small cracks or wear patterns are handled by the detail +layers, while larger surface elements, like ruts or pathways, are represented by +the decal.

+
+
+

land_mesh_combined_mixed_decal / dynamic_combined_mixed_decal – Shader with Four Detail Layers

+

This is the most advanced shader in the family. It operates similarly to +land_mesh_combined_detailed_decal but supports up to four detail layers +instead of one.

+
+

Important

+

There’s a known issue: if an object has mapping in the third channel, its +texture on the ground may appear semi-transparent. Avoid using unnecessary +mapping channels.

+
+
+

Important

+

The dynamic version is not suitable for large surfaces (hundreds of meters) made +of dense materials (concrete, asphalt, etc.), as it becomes semi-transparent +when viewed from a distance. For example, you might notice that the markings and +runway seem to fade when seen from far away.

+../../_images/land_mesh_combined_decal_08.jpg +
+
+

Shader Textures

+

The shader works with 10 textures:

+
    +
  • Slot 1: decal

  • +
  • Slot 2: detail blending mask

  • +
  • Slot 4: diffuse texture for detail layer 1

  • +
  • Slot 5: _r texture for detail layer 1

  • +
  • Slot 6: diffuse texture for detail layer 2

  • +
  • Slot 7: _r texture for detail layer 2

  • +
  • Slot 8: diffuse texture for detail layer 3

  • +
  • Slot 9: _r texture for detail layer 3

  • +
  • Slot 10: diffuse texture for detail layer 4

  • +
  • Slot 11: _r texture for detail layer 4

  • +
+

The blending mask is an RGB mask where:

+
    +
  • R-channel represents detail layer 1

  • +
  • G-channel represents detail layer 2

  • +
  • B-channel represents detail layer 3

  • +
  • Areas with less than 100% brightness in all channels will display detail layer +4.

  • +
+
+

Note

+

Don’t worry if the fourth detail layer appears in areas without detail layers 1, +2, or 3. The final decal’s visibility is controlled by the decal’s alpha +transparency, meaning you can control the appearance of all details, including +the fourth layer, using the transparency mask.

+
+

For example:

+ + + +

Airfield on the Map

Decal Diffuse

+../../_images/land_mesh_combined_decal_02.jpg +../../_images/land_mesh_combined_decal_03.jpg + + + +

Decal Alpha

Blending Mask

+../../_images/land_mesh_combined_decal_04.jpg +../../_images/land_mesh_combined_decal_09.jpg +

In this case:

+
    +
  • The blue channel defines the pathways.

  • +
  • The alpha mask smooths the edges of other detail layers, making them +transparent and revealing the fourth layer.

  • +
  • All channels together create a multicolored effect on the runway, blending +different types of sand, dirt, and rocks.

  • +
+

Some examples use more defined masks:

+ + + +

Airfield on the Map

Decal Diffuse

+../../_images/land_mesh_combined_decal_10.jpg +../../_images/land_mesh_combined_decal_11.jpg + + + +

Decal Alpha

Blending Mask

+../../_images/land_mesh_combined_decal_12.jpg +../../_images/land_mesh_combined_decal_13.jpg +../../_images/land_mesh_combined_decal_14.jpg +
+

In this case:

+
    +
  • R-channel represents concrete.

  • +
  • G-channel represents concrete slabs.

  • +
  • B-channel represents dirt.

  • +
  • A-channel (black in the mask) represents dirt paths and dust along the edges +of the concrete and slabs.

  • +
+

All these elements appear based on the decal’s alpha transparency.

+
+
+

Parameters

+
    +
  • script:t="detail1_size_ofs=0.25,0.25,0,0" – detail layer 1 texture offset +(tiling)

  • +
  • script:t="detail2_size_ofs=0.25,0.25,0,0" – detail layer 2 texture offset

  • +
  • script:t="detail3_size_ofs=0.25,0.25,0,0" – detail layer 3 texture offset

  • +
  • script:t="detail4_size_ofs=0.25,0.25,0,0" – detail layer 4 texture offset

  • +
+

A typical material configuration looks like this:

+
material{
+  name:t="markup_1"
+  class:t="land_mesh_combined_mixed_decal"
+  script:t="detail1_size_ofs=128,64,0,0"
+  script:t="detail2_size_ofs=128,64,0,0"
+  script:t="detail3_size_ofs=128,64,0,0"
+  script:t="detail4_size_ofs=256,128,0,0"
+  tex0:t="afghan_airfield_bagram_tex.tif"
+  tex1:t="afghan_airfield_bagram_tex_mask.tif"
+  tex3:t="detail_asphalt_a_tex_d.tif"
+  tex4:t="detail_asphalt_a_tex_r.tif"
+  tex5:t="detail_concrete_tex_d.tif"
+  tex6:t="detail_concrete_tex_r.tif"
+  tex7:t="detail_concrete_tex_d.tif"
+  tex8:t="detail_asphalt_cracks_tex_r.tif"
+  tex9:t="detail_sand_ground_tex_d.tif"
+  tex10:t="detail_sand_ground_tex_r.tif"
+}
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/rendinst_interior_mapping.html b/assets/shaders/rendinst_interior_mapping.html new file mode 100644 index 000000000..ddaa1aba2 --- /dev/null +++ b/assets/shaders/rendinst_interior_mapping.html @@ -0,0 +1,752 @@ + + + + + + + Shader: rendinst_interior_mapping — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_interior_mapping

+
+

Overview

+

The rendinst_interior_mapping shader was developed to simulate interiors for +large windows (and a significant number of windows) by projecting an interior +cubemap onto a plane or box. This shader creates the illusion of an interior +“behind the glass” using a drawn cubemap. Reflections on the glass are simulated +either from a custom-made cubemap or from an environment cubemap that is +generated each time the map is loaded.

+
+
+

General Parameters

+

Common parameters:

+
    +
  • script:t="fadeout=50, 100, 100, 200" – Cubemap fade settings. The first two +parameters control the interior fade, while the last two control the exterior +fade.

  • +
  • script:t="fade_color=0.188, 0.224, 0.259, 0" – Glass color during cubemap +fading, specified in RGB format using decimal values.

  • +
  • script:t="room_depth=1" – Sets the depth of the far wall, allowing it to be +pushed back to create the illusion of a larger space.

  • +
  • script:t="tile=1, 1, 1, 0" – Controls the tiling of the interior cubemap. +This parameter can be used to create multiple rooms on a single plane.

  • +
  • script:t="room_size=2, 1, 0, 0" – Defines the proportions of the window (and +the room behind it, as the room is usually “matched” to the window’s width and +height).

  • +
  • script:t="tile_space=1,1,0,0" – Creates spaces between the windows. The +first two components control the tiling, while the last two control the +offset.

  • +
  • script:t="tile_space_color=0.58,0.216,0.62,0,1" – Defines the color of the +spaces between the windows (first three components) and the strength of +reflections in these spaces (fourth component).

  • +
  • script:t="room_selfillum=0.4" – Controls the self-illumination of the +interior.

  • +
  • script:t="illum_random=3" – Adjusts the randomness of the interior’s +illumination.

  • +
  • script:t="illum_only_at_night=1" – Enables illumination only at night.

  • +
  • script:t="convexity_slope=-0.07,0.07,2,2" – The first two components control +the concavity/convexity of the glass, while the last two components adjust the +glass’s rotation on the horizontal and vertical axes.

  • +
  • script:t="contortion_tiling=1,1,1,1" – Tiling for refractions. The first two +components control the tiling width/height, the third controls the width of +the leftmost tile, and the fourth controls the height of the bottom tiles.

  • +
  • script:t="smoothness_metalness_reflection=0.5, 0.5, 1.5, 0" – Specifies +values for smoothness, metalness, and reflection.

  • +
+

daNetGame-based-specific parameters:

+
    +
  • script:t="shadow_caster=0" – Disables shadow casting by the glass using this +shader. By default, it is set to 1 (casting shadows enabled).

  • +
+
+
+

Asset Requirements

+

Let’s consider the standard requirements that allow the use of all procedural +parameters of the shader. Non-standard features will be discussed separately at +the end of the article.

+
    +
  1. The mapping coordinates should match the asset’s coordinates, meaning that +its top-bottom-left-right should correspond to the top-bottom-left-right on +the mapping.

    +../../_images/rendinst_interior_mapping_01.jpg +
    +
  2. +
  3. The mapping, regardless of the window’s proportions, must be a full square in +the “texture” unwrap.

  4. +
  5. Cubemaps should be created in the following format:

    +../../_images/rendinst_interior_mapping_02.jpg +
  6. +
+
    +
  • 1 – Left

  • +
  • 2 – Right

  • +
  • 3 – Top (rotated 180 degrees)

  • +
  • 4 – Bottom (rotated 180 degrees)

  • +
  • 5 – Front-facing side. For the interior cubemap, this side should simply be +black.

  • +
  • 6 – Far wall.

  • +
+
+
    +
  1. Cubemaps should be saved in .tif format.

  2. +
+
+

Note

+

In daNetGame-based projects, cubemaps can be created using the console command +screencap.take_screenshot_360.

+

The result will be saved as six images in the <project_name>/game/Screenshots +directory, which can then be assembled according to the template from point 3.

+
+
+
+

Shader Setup

+
+

Textures

+

The shader uses one or two textures.

+
    +
  1. The first slot is for the interior cubemap (mandatory texture). Simulates the +interior behind the glass.

  2. +
  3. The third slot is for the exterior cubemap (optional texture). Simulates the +external environment and is best used on lower floors. On higher floors, this +may not work as well because objects in the cubemap can appear +disproportionately large. For higher floors, it is recommended not to specify +this texture, in which case the environment cubemap will be used instead.

  4. +
+
+
+

Parameters

+
+

Cubemap Fading

+
    +
  1. script:t="fadeout=50, 100, 100, 200" – Controls cubemap fading. The first +two parameters affect the interior, and the last two affect the exterior. For +each cubemap, the first parameter specifies the distance at which fading +begins, and the second specifies the distance at which fading is complete.

  2. +
  3. script:t="fade_color=0.188, 0.224, 0.259, 0" – Sets the glass color during +cubemap fading. The color is specified in the RGB format using decimal +values. For example, an RGB color of 48, 57, 66 would be divided by 255 to +yield 0.188, 0.224, 0.259. The fourth parameter is unused.

  4. +
+
+
+

Smoothness, Metalness, and Reflection

+

script:t="smoothness_metalness_reflection=0.5, 0.5, 1.5, 0" – This parameter +directly sets smoothness, metalness, and reflection values.

+
+
+

Room Proportion and Tiling

+
+
Room Depth
+

script:t="room_depth=1" – Sets the depth of the far wall, allowing it to be +moved back to create the illusion of a larger space or brought closer to +simulate curtains behind the glass.

+
+
+
Interior Cubemap Tiling
+

script:t="tile=1, 1, 1, 0" – Controls the tiling of the interior cubemap, +allowing multiple rooms to be created on a single plane using this parameter:

+
    +
  • The first two components set the horizontal and vertical tiling, respectively.

  • +
  • The third component randomizes the cubemap rotation (0/1 values).

  • +
+

How does it work?

+
    +
  1. Map the surface (even if it’s a rectangle) into a square texture (1 tile per +UV) to achieve, for example, the following:

    +../../_images/rendinst_interior_mapping_03.jpg +
    +
  2. +
  3. Set the horizontal tiling value to 3 to create three rooms:

    +../../_images/rendinst_interior_mapping_04.jpg +
    +
  4. +
  5. Set the third component to 1 to achieve random cubemap rotation per room:

    +../../_images/rendinst_interior_mapping_05.jpg +
    +
  6. +
+
+
+
Room Size
+

script:t="room_size=2, 1, 0, 0" – Sets the proportions of the window (and thus +the room behind it, as the room usually matches the window’s width and height). +The first two components control width and height, respectively. These values +can be in any arbitrary units since they represent proportions, but it’s simpler +to use unit values.

+

Let’s examine how it works using the example above:

+
    +
  1. script:t="room_size=1, 1, 0, 0" – For testing, the window’s width and +height are set to be equal. This results in rooms curving towards the center:

    +../../_images/rendinst_interior_mapping_06.jpg +
    +
  2. +
  3. The model’s width is twice its height, so set the corresponding value to +script:t="room_size=2, 1, 0, 0":

    +../../_images/rendinst_interior_mapping_07.jpg +
    +
  4. +
+

Everything is now proportionally correct.

+
+

Important

+

This also presents a challenge – you cannot apply the same material to windows +with different proportions. The example uses a parallelepiped, and the side part +with the current material looks incorrect:

+../../_images/rendinst_interior_mapping_08.jpg +
+
+
+
+
Spacing Between Windows
+

script:t="tile_space=1,1,0,0" – This parameter allows for varying the spacing +between windows, which is useful for buildings with asymmetrical window spacing. +The first two components control X and Y spacing, respectively (though all +components must be specified).

+
    +
  1. By default, the values are set to script:t="tile_space=1,1,0,0":

    +../../_images/rendinst_interior_mapping_09.jpg +
    +
  2. +
  3. Increasing these parameters will decrease the size of the windows within the +same area (the windows shrink relative to their centers):

    +

    script:t="tile_space=2,2,0,0"

    +../../_images/rendinst_interior_mapping_10.jpg +
    +
  4. +
  5. script:t="tile_space=5,2,0,0"

    +../../_images/rendinst_interior_mapping_11.jpg +
    +
  6. +
  7. script:t="tile_space=5,2,0.5,0"

    +../../_images/rendinst_interior_mapping_12.jpg +
    +
  8. +
  9. script:t="tile_space=5,2,0.5,0.5"

    +../../_images/rendinst_interior_mapping_13.jpg +
    +
  10. +
+

Working with this parameter involves:

+
    +
  1. Counting the number of window openings.

  2. +
  3. Setting the appropriate window tiling using script:t="tile=1, 1, 1, 0".

  4. +
  5. Adjusting the spacing between windows with this parameter.

  6. +
+
+
+
Color of Spaces Between Windows
+

script:t="tile_space_color=0.58,0.216,0.62,0.1" – Sets the color of the spaces +between windows using the first three components. The fourth component controls +the reflection strength for these spaces.

+../../_images/rendinst_interior_mapping_14.jpg +
+
+
+
+

Window Illumination Parameters

+

Parameters for controlling the illumination of the interior cubemap. The ability +to make windows glow is implemented with two parameters:

+
    +
  • script:t="room_selfillum=0.4" – Controls self-illumination. The value can +range from 0 to any desired amount.

  • +
  • script:t="illum_random=3" – Controls the randomness of illumination. The +value represents the number of illumination states – the higher the number, +the greater the variety.

  • +
+

Illumination fades more slowly than the interior cubemap itself. This occurs +according to the function (1 - 0.8*distFade), where distFade is calculated +as (distance to glass)/(interior cubemap fade distance), but never exceeds +1. Therefore, the minimum illumination is 1-0.8=0.2, not 0, because it’s +technically impossible to smoothly fade illumination to 0 – it always cuts +off. As a result, a minimal level of light remains.

+
    +
  • script:t="illum_only_at_night=1" – Enables illumination only at night.

    +
    +

    Important

    +

    This parameter should be specified for everything that should light up, except +for rare cases when light is needed during the day.

    +
    +
  • +
+
+
+

Glass Distortion Parameters

+
+
Glass Distortion
+

You can set the glass distortion (convexity/concavity) and rotation (on +horizontal and vertical planes) to create varied reflections and sun glints on +the glass.

+

script:t="convexity_slope=-0.07,0.07,2,2" where:

+
    +
  • The first two components define the maximum concavity (away from the viewer) +and convexity (toward the viewer) of the glass. A random value within the +specified range is added to the glass normal. Usually, these values are less +than 1 (ranging from hundredths to tenths) and should be tested on specific +windows. Larger panoramic windows require smaller values, while smaller, less +common windows can handle larger values. Essentially, this sets the +“sharpness” of the distortion – the larger the values, the more pronounced the +center of the distortion. The position of the distortion center is randomized +across the glass surface.

  • +
  • The third and fourth components control the glass rotation on the horizontal +and vertical planes, respectively. This rotation is also added to the glass +normal and is specified in degrees. These values represent the absolute +maximum/minimum (e.g., with a value of 2, the range is |2|, meaning between +-2 and +2). As with distortion, a random value is chosen within this range. +For instance, setting a 10-degree rotation will randomize between -10 and +10.

  • +
+

Let’s look at some examples. In the images below: left – the normal map, right – +the result.

+
    +
  1. All distortion parameters set to zero:

    +../../_images/rendinst_interior_mapping_15.jpg +
    +
  2. +
  3. script:t="convexity_slope=-0.03,-0.03,0,0"

    +

    The normal map shows little change due to the small values, but the +reflection demonstrates significant distortion.

    +../../_images/rendinst_interior_mapping_16.jpg +
    +
  4. +
  5. script:t="convexity_slope=0,0,10,0"

    +

    Horizontal rotation is slightly noticeable on the normal map.

    +../../_images/rendinst_interior_mapping_17.jpg +
    +
  6. +
  7. script:t="convexity_slope=0,0,0,10"

    +

    Vertical rotation is also noticeable on the normal map.

    +../../_images/rendinst_interior_mapping_18.jpg +
    +
  8. +
  9. script:t="convexity_slope=-100,100,0,0"

    +

    Extremely exaggerated values are used to illustrate the nature of distortion. +(Also note that the distortion center is not centered on the window – there’s +a procedural shift on each window tile.)

    +../../_images/rendinst_interior_mapping_19.jpg +
    +
  10. +
  11. script:t="convexity_slope=-0.03,0.3,10,10"

    +

    Example on “distributed” windows with distortion:

    +../../_images/rendinst_interior_mapping_20.jpg +
    +

    Example on “distributed” windows without distortion:

    +../../_images/rendinst_interior_mapping_21.jpg +
    +
  12. +
  13. script:t="convexity_slope=-100.03,100.3,100,100"

    +

    Example on “distributed” windows with exaggerated values – demonstrating the +randomness of shifts and selection of values.

    +../../_images/rendinst_interior_mapping_22.jpg +
    +../../_images/rendinst_interior_mapping_23.jpg +
    +
  14. +
+

Different reflections on the windows of a building thanks to this technique. +Visible tiling seams on the cubemap – normal map seams visible across windows.

+../../_images/rendinst_interior_mapping_24.jpg +
+
+
+
+
+

Distortion Tiling

+

In practice, basic window tiling is often insufficient. The interior may consist +of a single “room”, but the window frame might have multiple panes of glass, +each needing to reflect light differently.

+ + + +

The current area of a single reflection

The desired area of a single reflection

+../../_images/rendinst_interior_mapping_25.jpg +../../_images/rendinst_interior_mapping_26.jpg +

To achieve this, use the parameter script:t="contortion_tiling=1,2,1,1", +where:

+
    +
  • The first component controls horizontal tiling of distortions.

  • +
  • The second component controls vertical tiling of distortions.

  • +
  • The third component sets the width (as a fraction of the window) of the +leftmost distortion tile.

    +../../_images/rendinst_interior_mapping_27.jpg +
    +
  • +
  • The fourth component sets the height (as a fraction of the window) of the +leftmost lower distortion tile.

    +../../_images/rendinst_interior_mapping_28.jpg +
    +
  • +
+

For the given window example:

+
    +
  • Horizontal tiling is set to 2 (indicating 2 panes of glass).

  • +
  • Vertical tiling is also set to 2 (indicating 2 panes of glass).

  • +
  • The width of the leftmost tile is set to 0.5 (half the window width).

  • +
  • The height of the bottom tile is set to 0.65 (approximately two-thirds of +the window’s total height).

  • +
+

Thus, script:t="contortion_tiling=2,2,0.5,0.65". This configuration ensures +that each pane of glass has its unique distortion (in Asset Viewer it’s not so +apparent, but in the game the difference is huge due to the reflections on the +windows).

+../../_images/rendinst_interior_mapping_29.jpg +
+
+

Important

+
    +
  • The third component specifies the width of only the leftmost tile. All +other tiles will maintain a uniform proportional width.

    +../../_images/rendinst_interior_mapping_30.jpg +
    +
  • +
  • The fourth component specifies the height for all bottom tiles, meaning it +affects the entire window.

    +../../_images/rendinst_interior_mapping_31.jpg +
    +
  • +
  • As a result, creating a window with a single vent procedurally isn’t +feasible – additional parameters would be required for every possible +configuration.

  • +
+
+
+
+
+

Non-Standard Solutions

+
+

Simulating Large Spaces

+

According to asset requirements, the window should be mapped strictly within a +square texture. However, this mapping results in the room behind the glass being +perfectly aligned with the window’s edges. If we want to increase the space +behind the glass, we need to reduce the mapping.

+

By reducing the mapping, the space behind the glass appears larger. The ceiling, +walls, and floor are pushed farther back, giving the impression of a room much +larger than the window.

+ + + +

Standard mapping

Reduced mapping

+../../_images/rendinst_interior_mapping_32.jpg +../../_images/rendinst_interior_mapping_33.jpg +../../_images/rendinst_interior_mapping_34.jpg +../../_images/rendinst_interior_mapping_35.jpg +

We need to show that a single room lies behind three separate windows. With +default mapping, you end up with three windows, each showing its own room. By +splitting the mapping, you achieve a single large room visible through all three +windows.

+ + + +

Standard mapping

Split mapping

+../../_images/rendinst_interior_mapping_36.jpg +../../_images/rendinst_interior_mapping_37.jpg +../../_images/rendinst_interior_mapping_38.jpg +../../_images/rendinst_interior_mapping_39.jpg +

In the previous example, the room became an enormous hangar because we +proportionally reduced the window mapping.

+

To avoid this, do the following:

+
    +
  1. Scale the mapping non-proportionally.

  2. +
  3. Compensate for the non-proportional mapping with the room_size=2, 1, 0, 0 +parameter.

  4. +
+ + + +

Split mapping

Compensated mapping

+../../_images/rendinst_interior_mapping_37.jpg +../../_images/rendinst_interior_mapping_40.jpg +../../_images/rendinst_interior_mapping_39.jpg +../../_images/rendinst_interior_mapping_41.jpg +
+

Note

+

By default, we use this parameter to emphasize the geometry’s proportions – if +the width is twice the height, we set room_size=2, 1. However, in our example, +the geometry is square, meaning the parameter should be room_size=1,1. But we +reduced the width of the mapping to roughly half the height, so we compensate by +setting the width to 2 and the height to 1. In this case, the smaller +mapping side corresponds to the larger parameter value.

+
+
+
+

Random Rotation in Individual Windows

+

We have a parameter for adding randomness to tiled cubemaps: script:t="tile=1, 1, 1, 0". This works when you have a large window area and procedurally tile +several rooms within it. However, there are often cases where each window is a +separate piece of geometry. Two primary scenarios arise:

+
    +
  • Each window is a separate piece of geometry within a single .dag.

  • +
  • Each window is a separate .dag, placed on a building by a composite.

  • +
+

Let’s consider both cases.

+
+

Window as Separate Geometry within a .dag

+

By default, exporting a .dag with windows and randomness enabled will not show +any difference – all windows will be mapped identically. However, when the +object moves across the map, the mapping will shift, but uniformly.

+ + + +

One object

A composite of three objects

+../../_images/rendinst_interior_mapping_42.jpg +../../_images/rendinst_interior_mapping_43.jpg +

The randomness works, but it’s flawed – everything remains too similar. To fix +this, you’ll need to manually adjust the mapping for each window. The fewer +identical mapping positions, the more randomness you’ll achieve.

+

Adjust the mapping both vertically and horizontally. This can be done +procedurally with plugins; the key is to keep the mapping within the bounds of +texture “cells”.

+
+

Note

+

It’s better to shift neighboring windows vertically rather than horizontally. +This improves the randomness effect.

+
+ + + +

One object

A composite of three objects

+../../_images/rendinst_interior_mapping_44.jpg +../../_images/rendinst_interior_mapping_45.jpg +

The difference might not be obvious here (the cubemap is too uniform), but +everything is randomly rotated on each section. Let’s replace the cubemap for +better visibility.

+../../_images/rendinst_interior_mapping_46.jpg +../../_images/rendinst_interior_mapping_47.jpg +
+
+

Window as a Separate .dag, Placed by a Composite

+

Although a different scenario, the solution remains the same.

+

In the previous case, enabled randomness on standard mapping worked in a grouped +manner – all windows changed mapping simultaneously when the object moved (since +the windows were part of one large .dag). In this case, the same thing +happens, but with individual windows. The windows are more frequently placed and +mapped. (Let’s set a cubemap with curtains in advance to better see the +difference.)

+ + + +

One object

A composite of three objects

+../../_images/rendinst_interior_mapping_48.jpg +../../_images/rendinst_interior_mapping_49.jpg +

Notice that the windows have identical randomness with identical shifts relative +to zero (center window at the bottom). (Exception: the middle left window – +because of some “magic”).

+

To avoid this situation, you can:

+
    +
  • Either set the randomness value to a different odd number (it doesn’t work +well with even numbers). For example, set it to 3 (script:t="tile=1, 1, 3, 0"):

    +../../_images/rendinst_interior_mapping_50.jpg +
    +
  • +
  • Or shift the window mapping (which I find works better).

    +../../_images/rendinst_interior_mapping_51.jpg +
  • +
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/rendinst_layered.html b/assets/shaders/rendinst_layered.html new file mode 100644 index 000000000..43cc91075 --- /dev/null +++ b/assets/shaders/rendinst_layered.html @@ -0,0 +1,1403 @@ + + + + + + + Shader: rendinst_layered — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_layered

+
+

Overview

+

This shader is used for objects where we want to apply multiple material +textures (e.g., brick and stucco tiles that are stored in different textures).

+

It can work with both tiles and unique textures. However, its primary purpose is +for using tiles – it allows objects to be created without visible tiling, +without the need for unique textures.

+

The shader uses the following types of textures:

+
    +
  • UV1: Global normal map – the normal map for the entire object.

  • +
  • UV3: Details (detail textures) with normal maps and speculars – 2 tiling +material textures.

  • +
  • UV2: Overlay map – applies effects of leaks/wear and tear to the +unwrapped parts of objects, over the detail textures (tiles).

  • +
  • UV2: Exclusion mask – globally indicates where certain materials should +appear on the object.

  • +
  • UV2: Blending mask – allows to randomize the blending of detail textures +with the exclusion mask across the model, resulting in diverse appearances of +the object using the same textures.

  • +
+

Let’s take a closer look.

+
+
+

Textures Used

+
+

Texture Assignment

+

For more details, see here.

+
+
+

Global Normal Map

+

This is straightforward. For most simple objects (fences, bollards, sometimes +houses), a standard normal map from our libraries is used. For more complex +objects, unique normal maps are created.

+

Their main purpose is to smooth out edges and chamfers. Since the objects +themselves will be covered with material tiles (which contain their own normal +maps), it’s important to achieve smoothing on the global normal map for those +aspects that the tile normal maps cannot smooth out.

+
+

Important

+

Do not create the texture details of the object’s materials on this texture. +Only smooth out seams, worn edges, etc.

+
+ + + +

Without a global normal map

With a normal map showing chamfers

+../../_images/rendinst_layered_01.jpg +../../_images/rendinst_layered_02.jpg +

The global normal map uses UV1. No other texture uses this UV channel.

+
+
+

Detail Textures (Details)

+

Let’s illustrate the concept using a brick house covered with stucco.

+

There are always two details!

+
    +
  • Detail1 represents the material the object is made of. For instance, if +the house wall is made of bricks, then Detail1 would be bricks.

  • +
  • Detail2 represents the material covering the object (such as moss on a +tree or dirt on a cobblestone). For the house wall covered in stucco, Detail2 +would be the stucco.

  • +
+

In this example, we use modern_brick_brown_dirt_d.tif and +stucco_new_d.tif, along with their respective normal maps, which contain +corresponding specular maps in their alpha channels.

+ + + +

1st map - Dirty Brickwork

2nd map - Fresh Stucco

+../../_images/rendinst_layered_03.jpg +../../_images/rendinst_layered_04.jpg +

In general, the process is straightforward, with one exception – we need to +blend these textures automatically on the model. To achieve this, we use the +alpha channel of the diffuse maps, which contains heightmaps: the lighter the +pixel, the “heavier” it is. The material with the higher heightmap at any given +point will dominate in that texel.

+../../_images/rendinst_layered_05.jpg +../../_images/rendinst_layered_06.jpg +

By blending these two heightmaps in the shader, we achieve a non-uniform texture +appearance: in some areas, the brickwork is visible because its heightmap is +higher, while in others, the stucco dominates. For example:

+../../_images/rendinst_layered_07.jpg +
+

What happens if we modify these heightmaps? Suppose we want the stucco to cover +the entire brick surface completely. To do this, we need to eliminate all the +light pixels in the brick’s heightmap, as these are the areas where the brick +shows through the stucco.

+ + + +

Making the heightmap entirely black:

Results in:

+../../_images/rendinst_layered_08.jpg +../../_images/rendinst_layered_09.jpg +
+

Important

+

Of course, this approach isn’t advisable – this was merely a demonstration of +how heightmaps work. These maps are essential for creating a seamless, +non-repeating overlay of stucco on top of the bricks.

+
+

Details use UV3 mapping, typically mapped using a 3x3x3 meter box without +packing.

+
+

Important

+

Ensure that the geometry does not exceed 7 tiles in the UV layout; otherwise, +artifacts may appear on consoles.

+
+
+
+

Overlay Map

+

The texture is named “overlay” because the shader applies it to the object using +a method similar to the “overlay” blend mode in Photoshop – multiply2X.

+

The purpose of the overlay is to give the object a “lived-in” appearance: +stains, cracks, dirt, soot, etc.

+ + + +

Here is our house without the overlay (technically with a 50% gray overlay – completely disabling it would prevent the shader from functioning). We can see only the brick and stucco – the object looks plasticky:

And here's the house with the overlay applied:

+../../_images/rendinst_layered_10.jpg +../../_images/rendinst_layered_11.jpg +
+
+

Universal Overlay

+

For this demonstration, we used a universal overlay – +buildings_overlay_tex_d.tif, which we apply to our houses and simpler +structures like fences. It looks like this:

+../../_images/rendinst_layered_12.jpg +
+

Conceptually, it’s divided into 16 cells (with indices starting from 0, not 1):

+../../_images/rendinst_layered_13.jpg +
+
    +
  • Cells 0-1 are used to decorate the building’s interior materials (walls +with wallpaper/stucco).

    +
    +

    Note

    +

    As shown, these two cells contain four smaller cells each – ensure that the +seams between these cells do not fall on a flat surface, or else a distinct +vertical line will appear on the model! For example:

    +
    +../../_images/rendinst_layered_14.jpg +
    +
  • +
  • Cell 2 is used to decorate wooden roof trim, similar to this:

    +../../_images/rendinst_layered_15.jpg +
    +

    It should be mapped as follows:

    +
      +
    • Either using a horizontal plane of 55x55 meters. Vertical supports should +be mapped separately in the vertical plane;

    • +
    • Or using box and flatten mapping.

    • +
    +
  • +
  • Cells 3, 6, 7 are currently unused.

  • +
  • Cells 4-5 are used to decorate roofs:

    +
      +
    • Cell 4 is for sloped roofs;

    • +
    • Cell 5 is for flat roofs.

    • +
    +
  • +
  • Cells 8-15 are used to decorate the building’s exterior.

  • +
+

In the example above, cell 11 was used. Here’s how it works:

+../../_images/rendinst_layered_16.jpg +
+
+

Important

+

All external surfaces of the building, except for the roof, should only be +mapped to cell 8. The shader will automatically shift the mapping to cells +9-15. More on this in the shader settings.

+
+
+

Note

+

In the early stages of War Thunder’s development, universal overlays were +widely used. However, as the project evolved, we transitioned to unique +overlays. Consequently, the content of this section is now outdated. Despite +this, universal overlays can still be employed, though they are better suited +for smaller objects rather than larger structures like buildings.

+
+
+
+

Unique Overlay

+

The universal overlay was designed to automate visual variety in objects – by +creating one house, you can give it up to eight different appearances without +any additional work. However, this map is not suitable for unique objects, as it +cannot emphasize the distinctive features that make an object more “alive”.

+

Let’s look at an example of a unique overlay:

+../../_images/rendinst_layered_17.jpg +
+

As you can see, the entire texture is dedicated to a unique UV layout, +reflecting soot marks on walls at bullet impact sites, rotting wood (small +details), moss-covered foundations, etc.

+

It was created for a partially ruined church:

+../../_images/rendinst_layered_18.jpg +
+
+
+

Exclusion Mask

+

This texture resides in the alpha channel of the overlay map and therefore uses +the same UV2. Let’s examine it using the universal overlay’s alpha channel as an +example.

+../../_images/rendinst_layered_19.jpg +
+

This is a black-and-white mask. It defines the global areas on the model where +we want to preserve only the first detail or only the second.

+
    +
  • Black pixels – only the first detail will remain.

  • +
  • White pixels – only the second detail will remain.

  • +
  • Intermediate grayscale values – adjust the global heightmaps of the two +details.

  • +
+

Why is this necessary? Let’s see how the details mix with a 50% gray exclusion +mask. (For clarity, we’ll set the overlay to the same 50% gray so it doesn’t +interfere with the detail mixing.)

+../../_images/rendinst_layered_20.jpg +
+

Several issues are apparent:

+
    +
  1. The tiling pattern is fully readable. Even after applying the overlay, this +might not be corrected, as the overlay cells (when using the universal +overlay) have varying levels of “dirtiness.” For example, using cell 8 +produces the following result:

    +../../_images/rendinst_layered_21.jpg +
    +
  2. +
+

It’s clear that the tiling is still visible.

+
    +
  1. Detail2 (stucco) blends with Detail1 (bricks) uniformly and boringly across +the entire wall area. This can be somewhat improved by using a dirtier +overlay. For example, let’s try cell 11:

    +../../_images/rendinst_layered_22.jpg +
    +
  2. +
+

Yes, it looks better. However, problem 1 remains – the cells are used +automatically, and the mapping will inevitably shift to a less detailed cell.

+

The exclusion mask is designed to address these specific issues. It globally +overrides the heightmaps of the details across the entire object mapped to it, +causing the blending to be rough and uneven. This helps hide the tiling (it’s +hard to notice when Detail2 covers different parts of Detail1) and eliminates +uniform blending.

+

Let’s switch the exclusion mask from gray to the original.

+../../_images/rendinst_layered_23.jpg +
+

The result is clear – both issues are resolved. However, cell 8 is rather +sparse for both the overlay and the exclusion mask.

+../../_images/rendinst_layered_24.jpg +
+

Let’s see what happens if we shift the UV2 mapping to cell 11. In the +screenshots above, it worked with a gray exclusion mask. Now let’s see its full +effect.

+../../_images/rendinst_layered_25.jpg +
+../../_images/rendinst_layered_26.jpg +
+

There is no visible tiling. The details blend randomly. The overlay adds even +more detail.

+

The more varied the exclusion mask, the smoother the detail +blending. The more gradients and fewer sharp transitions it contains, the +smoother the boundaries between details.

+
+

Important

+

In summary, the exclusion mask controls where Detail1 (the object’s base +material) is visible – where its pixels are black–and where Detail2 (the +object’s covering) appears – where its pixels are white.

+

Where the pixels are gray, the details blend based on their heightmaps, taking +into account the “grayness” of the exclusion mask:

+
    +
  • If the mask is 50% gray, only the heightmaps are used.

  • +
  • If it is darker than 50%, the heightmap of Detail1 is stronger.

  • +
  • If it is lighter than 50%, the heightmap of Detail2 takes precedence.

  • +
+
+
+
+

Blending Mask

+
+

How It Works

+

The blending mask is the final texture we utilize. Let’s examine it using the +example of the brick_stucco_m.tif texture, which was applied to the house we +discussed earlier.

+../../_images/rendinst_layered_27.jpg +
+

What does it do? Essentially, it performs the same function as the exclusion +mask:

+
    +
  • Black areas reveal Detail1.

  • +
  • White areas reveal Detail2.

  • +
  • Gray areas blend the two details based on their heightmaps and the gray value +of the blending mask.

  • +
+

Let’s recall how the house looked without a blending mask (in the earlier +screenshots, it was filled with 50% gray).

+../../_images/rendinst_layered_28.jpg +
+

Now, let’s see how the house appears with the brick_stucco_m.tif blending +mask applied.

+../../_images/rendinst_layered_29.jpg +
+

The difference is subtle – the exclusion mask creates a more noticeable change. +This is because, on UV2, our house occupies a single cell, which is quite +insignificant in the context of the blending mask.

+../../_images/rendinst_layered_30.jpg +
+

So, why do we need a blending mask that seemingly duplicates the exclusion mask, +but with less impact?

+

There are four key points to understand:

+
    +
  1. In reality, details are not blended solely by the exclusion mask.

  2. +
  3. Similarly, details are not blended solely by the blending mask.

  4. +
  5. The exclusion mask and blending mask are combined to create the final global +blending mask, which dictates how the details are blended.

    +
    +

    Note

    +

    These masks are combined using standard multiplication (not Photoshop’s +Multiply mode).

    +
    +
  6. +
  7. Our rendinst_layered shader randomly offsets the blending mask (the local +one we’re discussing) based on the position of the house on the map.

  8. +
+

To summarize in simpler terms:

+
    +
  1. Place the house on the map, for instance, at the center.

  2. +
  3. The blending mask and exclusion mask combine to form the global blending +mask.

    +
      +
    • Black areas reveal Detail1.

    • +
    • White areas reveal Detail2.

    • +
    • Intermediate gray values influence the blending of details based on their +heightmaps.

    • +
    +
  4. +
  5. Move the house slightly, and the blending mask and exclusion mask are +multiplied again, creating a new global blending mask and altering how the +details blend.

  6. +
+

Here’s how it looks in practice:

+../../_images/rendinst_layered_31.gif +
+

Each movement triggers a reassembly of the global blending mask via multiplying +the exclusion mask and the local blending mask, which results in the same object +having a different appearance as it is repositioned.

+

This is the core function of the blending mask. We cannot offset the exclusion +mask since it contains a unique mapping of detail blending (even within the +cells). The blending mask is designed precisely for this purpose.

+
+
+

Specifics of Using the Blending Mask

+

We used the brick_stucco_m.tif as our example. The name itself indicates that +it represents stucco over brick, meaning it’s intended for a specific type of +detail blending – Detail2 (stucco) is layered over Detail1 (brick) with clear +boundaries.

+

Let’s look at a real brick house with stucco, such as this one:

+../../_images/rendinst_layered_32.jpg +
+

The concept becomes clear – stucco peels off in sheets, revealing the underlying +wall material.

+

How did we achieve this effect on our house? The current blending mask has sharp +transitions between black and white, with almost no gradients. This means we +either see the brick (black areas) or the stucco (white areas).

+

But what if we want to create a stone wall with moss growing between the stones? +We’d use a stone texture (medieval_brick_d.tif) and a moss texture +(moss_different_d.tif). Let’s examine these textures and their heightmaps.

+
    +
  1. Stone Masonry: Its heightmap clearly indicates that any Detail2 should +only appear between the stones. Recall that the heightmap function – the +lighter the area, the stronger the effect.

    +../../_images/rendinst_layered_33.jpg +
    +
  2. +
  3. Moss: Its heightmap suggests that it doesn’t matter where it grows. It’s +uniformly gray, meaning it will be overpowered by almost any other detail’s +heightmap.

    +../../_images/rendinst_layered_34.jpg +
    +
  4. +
+

Let’s see how these details blend with the current blending mask. Remember, the +moss heightmap will likely be overridden by the stone heightmap, so the moss +should only appear between the stones – exactly what we want.

+

However, what we get is moss applied over the entire wall surface.

+../../_images/rendinst_layered_35.jpg +
+

Why did this happen?

+

Because our blending mask is unsuitable. As stated earlier:

+
    +
  • “What does the blending mask do? It functions exactly like the exclusion mask. +Black areas reveal Detail1, white areas reveal Detail2, and gray areas blend +the two details according to their heightmaps and the gray value of the +blending mask.”

  • +
  • “The current blending mask has sharp transitions between black and white, with +almost no gradients. This means we either see the brick (black) or the stucco +(white).”

  • +
+

Our brick_stucco_m.tif blending mask has overridden the detail heightmaps and +distributed them as it saw fit.

+

What to do in such cases? Change the blending mask.

+

The approach is straightforward:

+
    +
  • Ensure that the detail heightmaps are not overridden.

  • +
  • Detail heightmaps are not overridden by gray.

  • +
  • We need smooth transitions between the details.

  • +
+

Conclusion: We need a blending mask with lots of gray and few sharp +boundaries – everything should be gradient-based.

+

Let’s try gypsum_m.tif. It’s not a perfect mask, but it’s better than the +previous one. We can see that it contains a lot of gray, with minimal +black/white areas and many gradients. There are some patches, but they’re small +and sparse.

+../../_images/rendinst_layered_36.jpg +
+

Now, let’s see how it performs.

+../../_images/rendinst_layered_37.jpg +
+

The moss remains in some places, but mostly it has receded to the gaps between +the stones. The remaining local patches can be removed if needed, but that would +require additional methods.

+

Remember that these masks will be multiplied, and the final appearance will +continue to evolve:

+../../_images/rendinst_layered_38.gif +
+
+
+
+

Conclusion

+

A concise summary of how the shader uses textures:

+
    +
  1. Two details are blended based on their heightmaps (through alpha test).

  2. +
  3. The exclusion and blending masks combine to create the final global blending +mask for detail blending (using standard multiplication, not Photoshop’s +Multiply mode).

    +

    This raises a question: Why not blend the details directly using this mask? +Why do we need detail heightmaps as well?

    +

    Because the blending mask has a large texel size, blending directly would +result in blurry textures. Using the detail heightmaps allows for a sharper +blend.

    +
  4. +
  5. When the heightmaps are combined with the blended masks, the result is that +within the large texel of the global blending mask (which covers the entire +building), several smaller texels of the local blending mask are nested. +These smaller texels are where the detail heightmaps interact. This process +ensures that the image remains sharp, as the local blending mask allows for +finer detail within each texel of the global mask.

  6. +
  7. Next, a normal map and an overlay map are applied on top of the blended +details. These maps add texture and additional detail to the surface, +enhancing the visual complexity of the material.

  8. +
  9. Finally, when the object using this shader is repositioned, the blending mask +is offset. This offsetting causes the global blending mask to change, which +in turn alters how the details are mixed. As a result, the object’s +appearance shifts as the blending of the details adjusts to the new position.

  10. +
+
+
+

Shader Setup

+
+

General Shader Parameters

+

When setting up the shader, the initial view displays the basic parameters, +which can be further expanded for customization.

+../../_images/rendinst_layered_39.jpg +
+

Two key points to note:

+
    +
  1. The shader is part of the Dagor Material 2 set.

    +../../_images/rendinst_layered_40.jpg +
    +
  2. +
  3. The Add button allows access to additional parameters.

    +../../_images/rendinst_layered_41.jpg +
    +
  4. +
+
+
+

Texture Assignment

+

Textures are assigned to slots in the following order:

+
    +
  • Slot 1 – Overlay

  • +
  • Slot 2 – Blending Mask

  • +
  • Slot 3 – Normal Map

  • +
  • Slot 4 – Detail1 Diffuse

  • +
  • Slot 5 – Detail1 Normal Map

  • +
  • Slot 6 – Detail2 Diffuse

  • +
  • Slot 7 – Detail2 Normal Map

  • +
+
+
+

Shader Parameters

+

The shader offers a range of parameters for customization:

+
    +
  • atlas_first_tile/atlas_last_tile/atlas_tile_u/atlas_tile_v: Group of +parameters that manages the offset of uv-mapping on the universal overlay.

  • +
  • detail_tile_u/v: Controls the tiling of details.

  • +
  • detail_scroll_u/v: Adjusts the scrolling of details.

  • +
  • mask_gamma_start/end: Configures the transparency of Detail1 through +Detail2.

  • +
  • mask_tile_u/v: Controls the tiling of the blending mask.

  • +
  • mask_scroll_u/v: Adjusts the scrolling of the blending mask.

  • +
  • draw_grass: Enables grass growth on the object.

  • +
  • detail2_colored: Allows to colorize Detail2 in the Dagor Editor tool (an +outdated feature rarely used).

  • +
  • top_projection: Group of parameters that allows to project Detail2 above the +Detail1 using global and local normals.

  • +
  • top_projection_from

  • +
  • top_projection_to

  • +
  • top_projection_detail2_modulate

  • +
  • use_painting: Group of parameters used for colorizing of details.

  • +
  • painting_line

  • +
  • paint1stdetail

  • +
  • detail2_combined_normal: Blends details’ normal maps.

  • +
  • micro_detail_layer1: Group of parameters for microdetails.

  • +
  • micro_detail_layer2

  • +
  • micro_detail_layer1_uv_scale

  • +
  • micro_detail_layer2_uv_scale

  • +
  • material_shadow_influence: Controls shadow strength from the details.

  • +
  • material_shadow_scale: Adjusts the shadow size from the details.

  • +
+
+
+

Offset of UV-mapping on the Universal Overlay

+

To use the universal overlay effectively, remember the rule stated earlier:

+
+

Important

+

All exterior surfaces of the building, except the roof, should be mapped to +cell 8. The shader will automatically shift the mapping across cells +9-15.

+
+

The shader and universal overlay/mask are designed to automate content +variation. By mapping the exterior of the building to cell 8, the shader +will automatically shift the mapping to other cells, creating varied appearances +without manual intervention.

+

For example, if the walls and exterior parts of the house are mapped to cell +8:

+../../_images/rendinst_layered_42.jpg +
+

The shader will automatically shift the mapping to cell 9:

+../../_images/rendinst_layered_43.gif +
+

However, this automatic shifting requires specific parameters to be set. The +universal overlay cells are as follows:

+../../_images/rendinst_layered_44.jpg +
    +
  • cells 0-1: For internal materials (walls with wallpaper/stucco).

  • +
  • cell 2: For decorative wooden roof elements.

  • +
  • cells 3, 6, 7: Currently unused.

  • +
  • cells 4-5: For roof decoration: cell 4 for sloped roofs, cell 5 +for flat roofs.

  • +
  • cells 8-15: For decorating external parts of buildings.

  • +
+
+

To enable the shader to recognize and use these cells, the following parameters +must be set:

+
    +
  • atlas_first_tile: Start cell number for the mapping jump (usually cell +8).

  • +
  • atlas_last_tile: End cell number for the mapping jump (usually cell 15).

  • +
  • atlas_tile_u: Horizontal jump size in fractions of the texture width (e.g., +0.5).

  • +
  • atlas_tile_v: Vertical jump size in fractions of the texture height (e.g., +0.125).

  • +
+

For the universal overlay to work correctly, you need to add these parameters +using the Add button and set their values as follows:

+
    +
  • atlas_first_tile = 8

  • +
  • atlas_last_tile = 15

  • +
  • atlas_tile_u = 0.5

  • +
  • atlas_tile_v = 0.125

  • +
+

If these parameters are not set, the overlay will not shift correctly:

+../../_images/rendinst_layered_45.gif +
+

In some cases, you may want to limit the use of certain cells. For example, +wooden walls may not look good with stucco cracks and stains.

+../../_images/rendinst_layered_46.jpg +
+

In such cases, set atlas_last_tile = 10 to limit the jump to cells 8-10, +which are more neutral:

+../../_images/rendinst_layered_47.gif +
+
+
+

Detail Tiling Settings

+

The tiling of details is controlled by the parameters:

+
    +
  • detail1/2_tile_u: Adjusts the horizontal tiling of Detail1/2.

  • +
  • detail1/2_tile_v: Adjusts the vertical tiling of Detail1/2.

  • +
+

By default, if these parameters are not set, they are assumed to be 1.

+

These settings are useful when:

+
    +
  • The texels of the detail textures do not match, or

  • +
  • You want to adjust the display size of one detail relative to another.

  • +
+

Here’s an example of a house corner with the brick detail tiling set to 1 and +the stucco detail tiling set to 0.5:

+../../_images/rendinst_layered_48.jpg +
+

The stucco appears blurry because its texel size is twice as large as the brick. +Comparing the textures:

+ + + +

Modern Brick Brown Dirt (1024x1024)

Stucco New (512x512)

+../../_images/rendinst_layered_49.jpg +../../_images/rendinst_layered_50.jpg +

Increasing the stucco tile by 2x for both axes corrects this:

+../../_images/rendinst_layered_51.jpg +
+

However, you might want a more refined stucco finish without large, clear holes. +Setting the stucco tile to 2.54 achieves this:

+../../_images/rendinst_layered_52.jpg +
+

The result is a house with a more refined stucco texture. However, be cautious, +as extreme mismatches in texel sizes can lead to visual inconsistencies, +particularly on less detailed surfaces like roofs.

+

For instance, moss with a tile of 5.35 on a roof with a tile of 1 shows a +noticeable mismatch:

+../../_images/rendinst_layered_53.jpg +
+

To avoid such issues, always check texture sizes and the final result, ensuring +there’s no visible mismatch.

+
+

Important

+

It’s better to use non-integer tiling parameters (e.g., 1.54 instead of 1.5, +2.35 instead of 2). This reduces the visibility of the tiling pattern.

+
+
+
+

Disabling Tiling (detail1/2_scroll_u=-1)

+
+

Important

+

Use just detail1/2_scroll_u to disable detail scaling. Don’t use scroll_v, +because it’s incorrect and leads to visual bugs.

+
+

When scaling an object, tiling is often automatically applied based on the +object’s size, which can cause unwanted effects on unique UV mappings. For +instance, scaling a stone object 100 times can make the details tile 100 times +more frequent.

+

Example:

+ + + +

100% scale

1000% scale

+../../_images/rendinst_layered_54.jpg +../../_images/rendinst_layered_55.jpg +

The technology is useful, because it saves us texel when scaling objects. +However, a problem arises when we use such a shader on objects with unique UV. +For example, we take a bunch of tires and make them “dusty”. Detail1 mapping is +scaled when we scale the model of tires. But uv-mapping for this model is unique

+
    +
  • we get visual bug.

  • +
+

Example:

+ + + +

100% scale:

200% scale:

+../../_images/rendinst_layered_56.jpg +../../_images/rendinst_layered_57.jpg +

To prevent this, set detail1_scroll_u=-1 to disable tiling for a specific +detail when scaling is not desired.

+ + +

200% scale with detail1_scroll_u=-1

+../../_images/rendinst_layered_58.jpg +
+
+
+
+

Configuring Detail Offset

+

Control the horizontal and vertical offsets of details using:

+
    +
  • detail1/2_scroll_u – Horizontal offset.

  • +
  • detail1/2_scroll_v – Vertical offset.

  • +
+

Default values are 1. Use these settings when precise alignment of details is +necessary, such as aligning bricks in a wall section.

+../../_images/rendinst_layered_62.jpg +
+../../_images/rendinst_layered_63.jpg +
+../../_images/rendinst_layered_64.jpg +
+

To do this, we set the brick parameters detail1_scroll_u and +detail1_scroll_v to 0. What happens if we don’t set these parameters? For +example, detail1_scroll_u:

+../../_images/rendinst_layered_65.jpg +
+

We ended up with horizontal shifts in the texture, resulting in uneven seams: in +some places, the bricks vary in thickness, while in others, they appear +unusually short.

+

It’s easy to imagine what happens if detail1_scroll_v=0 is not set – complete +misalignment of the fence edges.”

+../../_images/rendinst_layered_66.jpg +
+
+

Important

+

Don’t set these parameters without a good reason. They limit the number of +variations you can achieve with your objects, so only use them when absolutely +necessary.

+
+
+
+

Configuring of Details Blending

+

Details are blended with the final blending mask, that represents a result of +combining of several masks (details’ heightmaps, exclusion mask, blending mask).

+

We can modify this final blending mask by raising it to the needed power - we +call it Gamma.

+

There’re 2 parameters:

+
    +
  • mask_gamma_start – smallest needed gamma value.

  • +
  • mask_gamma_end – largest needed gamma value.

  • +
+

We specify them both and Dagor chooses final gamma value between them +randomly. Our final blending mask is raised to the power of this gamma value.

+

Imagine final blending mask as a set of values – not colors. Black is 0. White +is 1. Nearly white is, for instance, 0.95.

+

Raise 0.95 to the power of 2 and you’ll get 0.9. But raise 0.95 to the +power of 0.2 and you’ll get 0.9898.

+

It means that the smaller gamma values you specify – the brighter final blending +mask you get. And more of Detail2 will be seen.

+

On the contrary the larger gamma values you specify – the darker final blending +mask you get. And more of detail1 will be seen.

+

For instance, we want to reduce the visibility of the stucco on this house.

+../../_images/rendinst_layered_67.jpg +
+

We assign the blend mask gypsum_m as it is the most “gentle” and gray, and we +get the following result:

+../../_images/rendinst_layered_68.jpg +
+

This is not sufficient. Let’s set the following parameter values:

+
    +
  • mask_gamma_start = 4

  • +
  • mask_gamma_end = 8

  • +
+../../_images/rendinst_layered_69.jpg +
+
+
+

Configuring Blend Mask Tiling

+

This is controlled by the following parameters:

+
    +
  • mask_tile_u – horizontal tiling of the blend mask;

  • +
  • mask_tile_v – vertical tiling of the blend mask.

  • +
+

If these parameters are not set, they default to 1.

+

These parameters are usually needed to add variety to the appearance of an +object. For example, here is our fence with the gypsum_m mask tiling set to +1.

+../../_images/rendinst_layered_70.jpg +
+

We want to reduce the size of the moss patches but increase their frequency. +Let’s set the mask tiling to 8.75.

+../../_images/rendinst_layered_71.jpg +
+

Unlike detail textures, the blend mask can be tiled non-proportionally. For +instance, we can keep the vertical tiling at 1 while setting the horizontal +tiling to 8.75.

+../../_images/rendinst_layered_72.jpg +
+

There will be no stretching of textures – we’ve simply created narrower and +taller blend areas, as the mask tiles nearly 9 times more frequently +horizontally than vertically. This technique can be useful when you need to +create “leaks” using the Detail2 layer.

+
+
+

Configuring Blend Mask Offset

+

This is controlled by the following parameters:

+
    +
  • mask_scroll_u – horizontal offset of the mask;

  • +
  • mask_scroll_v – vertical offset of the mask.

  • +
+

By default (when not added to the material), these values are set to 1.

+

In the shader textures documentation, we mentioned that the blend mask offsets +each time the object’s position in space changes. Let’s revisit how this looks +with the overlay removed:

+../../_images/rendinst_layered_73.gif +
+

These parameters increase the offset value, allowing for more varied blending of +detail layers. Let’s set these values to 0.5.

+../../_images/rendinst_layered_74.gif +
+

As you can see, the changes between blends became

+
    +
  • sometimes more visible,

  • +
  • sometimes less visible.

  • +
+

This is because the offsets of our blend mask became smaller. And uv-mapping +stays more time on areas that it used to jump over with offset=1.

+

We rarely use this parameter, because it’s much easier to random blending change +with more varied blending mask.

+
+

Important

+

If you need to disable blend mask jumps, use the parameter mask_tile_u=-1. +Not the scroll, but the tiling, specifically mask_tile_u set to -1.

+
+
+
+

Growing Grass on an Object

+

If you need to “grow” grass on a rendinst geometry, set the draw_grass +parameter in its material to a value of 1. It’s important to apply this on a +nearly horizontal surface to prevent grass from growing on walls.

+
+
+

Coloring the Detail2 in the daEditor (Deprecated)

+

In the initial version of the coloring process, the color range was specified +directly in the daEditor. +Only the Detail2 (the “upper” one) was colored, using a simple multiply +operation. This required careful selection of colors to avoid over-saturation.

+

The process was as follows:

+
    +
  1. The parameter detail2_colored was set to 1.

  2. +
  3. In the daEditor, a color gradient was applied set in the Properties▸ +TexturesRendinst 2-nd detail color section.

  4. +
+../../_images/rendinst_layered_112.jpg +../../_images/rendinst_layered_113.jpg +
+
+

Top Projection - Projecting the Detail2 using Local and Global Normals

+

There are scenarios where you need to add snow, sand, or moss to an object. For +this, the top_projection feature is used. It projects the Detail2 layer on top +of the Detail1 at a specified angle. For instance, on a stone surface, you can +project snow on top of the stone detail.

+

The parameters for this feature are:

+
    +
  • top_projection – 0/1 (off/on);

  • +
  • top_projection_from – the angle at which the projected detail starts to +appear (at a minimal amount);

  • +
  • top_projection_to – the angle at which the projected detail fully covers the +object;

  • +
  • top_projection_detail2_modulate – the intensity of the projection’s effect +on the Detail2 layer.

  • +
+

The function takes into account all normals:

+
    +
  1. Global geometry normals.

  2. +
  3. Global normal map normals.

  4. +
  5. Local detail layer normals.

  6. +
+

The function also takes into consideration the masks:

+
    +
  1. Exclusion mask (overlay alpha) – if set to black, the Detail2 layer +will not appear.

  2. +
  3. Blend mask.

  4. +
  5. However, it does NOT take into account the heightmap of the Detail1 layer, +as it could be very bright (e.g., stucco). If it were considered, projection +would be difficult.

  6. +
+

This is a procedural function – rotate the object as you like, and the Detail2 +layer will cover it according to the specified rules, from the appropriate side.

+../../_images/rendinst_layered_75.gif +
+

Let’s examine how these parameters work.

+
+
+

top_projection

+

This parameter has values 0 and 1 (off/on).

+
+

top_projection_from

+

Specifies the angle at which the projected detail begins to appear (at a minimal +amount). The angle is specified not in degrees but in the sine of the angle. For +example, if you want the snow to start at 45 degrees, take sin(45) = 0.7 and +enter 0.7 as the value.

+ + + +

Parameter value = 0.7

Parameter value = 0.1

+../../_images/rendinst_layered_76.jpg +../../_images/rendinst_layered_77.jpg +
+
+

top_projection_to

+

Specifies the angle at which the projected detail fully covers the object. +Again, this is specified in the sine of the angle. The difference is less +noticeable than with the starting parameter – it’s more apparent on flatter +objects than on steep ones.

+ + + +

Parameter value = 0.5

Parameter value = 1

+../../_images/rendinst_layered_78.jpg +../../_images/rendinst_layered_79.jpg +
+
+

top_projection_detail2_modulate

+

Specifies the intensity of the overlay’s effect on the second detail layer. If +you want pure white snow, set the value to 0. If you want it to appear dirtier, +increase the parameter up to 1.

+ + + +

Parameter value = 0.2

Parameter value = 1

+../../_images/rendinst_layered_80.jpg +../../_images/rendinst_layered_81.jpg +

In this example, the difference is not very noticeable because the overlay +itself is grayish.

+
+
+
+

Blending with Landscape Heightmap

+

To improve the visual integration of objects with the landscape, you can use +special parameters that allow detail layers of terrain and assets to blend based +on the intersection mask of the asset with the heightmap. This is particularly +useful for piles, rocks, cliffs, and similar objects.

+
+

Important

+

This is a computationally expensive technique, so use it sparingly.

+
+

Examples:

+ + + +

Without blend

With blend

+../../_images/rendinst_layered_82.jpg +../../_images/rendinst_layered_83.jpg +

Blending parameters:

+
    +
  • enable_hmap_blend=1 (default: 0) – Enables/disables heightmap blending.

  • +
  • hmap_blend_height=0.1 (default: 0.1) – Height of the blending.

  • +
  • ri_hmap_min_blend_angle=40 – Angle where landscape blending starts to fade +out. (90 degrees is upward).

  • +
  • ri_hmap_max_blend_angle=50 – Angle where landscape blending completely fades +out. (90 degrees is upward).

  • +
  • ri_hmap_blend_angle_vertex_normal_amount=0.75 – Floating value between texel +(0) or vertex (1) normals as dominant for the blend mask. The higher the +vertex normal dominance, the lower the chance of the projection appearing on +triangles with a vertical normal, even if the texel normal is directed upward.

  • +
  • ri_hmap_blend_check_holes=1 – Cuts the blend band at the intersection with +heightmap holes created using ground_hole:gameobj. This parameter should be +added only for rocks (or other objects that intersect between the +heightmap and underground space), as unnecessary checks can significantly +impact performance.

  • +
+

GPU objects and grass now correctly generate on objects with Heightmap Blending.

+
+

Global Shader Variables

+

These are shader parameters initialized in gamedata/.../scene.blk2 within the +shader_vars__vars:object block:

+
    +
  • ri_hmap_blend_sharpness=8.0 (default: 8.0) – The higher the value, the +sharper the blend boundary.

  • +
  • ri_hmap_perlin_tex_scale=0.25 (default: 0.25) – Perlin noise tiling +multiplier.

  • +
  • ri_hmap_min_height=0.5 (default: 0.5) – Minimum blend height, overriding +the shader parameter if necessary.

  • +
+

Examples:

+ + + + +

ri_hmap_blend_sharpness=2

ri_hmap_blend_sharpness=4

ri_hmap_blend_sharpness=8

+../../_images/rendinst_layered_103.jpg +../../_images/rendinst_layered_104.jpg +../../_images/rendinst_layered_105.jpg + + + + +

ri_hmap_perlin_tex_scale=0.01

ri_hmap_perlin_tex_scale=0.25

ri_hmap_perlin_tex_scale=4

+../../_images/rendinst_layered_106.jpg +../../_images/rendinst_layered_107.jpg +../../_images/rendinst_layered_108.jpg + + + + +

ri_hmap_min_height=0.1

ri_hmap_min_height=0.5

ri_hmap_min_height=3

+../../_images/rendinst_layered_109.jpg +../../_images/rendinst_layered_110.jpg +../../_images/rendinst_layered_111.jpg +
+
+

Static Shader Variables

+

These are additional shader parameters that adjust the influence of global +shader variables for a specific asset:

+
    +
  • ri_hmap_blend_sharpness_mul=1.0 – Multiplier for ri_hmap_blend_sharpness.

  • +
  • ri_hmap_perlin_tex_scale_mul=1.0 – Multiplier for +ri_hmap_perlin_tex_scale.

  • +
  • ri_hmap_min_height_mul=1.0 – Multiplier for ri_hmap_min_height.

  • +
+
+

Note

+

Global and Static Shader Variables for ri_hmap

+
    +
  1. Global shader variables affect all assets on the level with initialized +blending.

  2. +
  3. If global shader variables are not initialized in scene.blk, the default +values listed above are applied.

  4. +
  5. Static shader variables are multipliers of the global shader variables, +initialized in scene.blk, for a specific asset.

  6. +
+

For example, if the global shader variable is set to:

+

ri_hmap_blend_sharpness=8.0

+

and the static shader variable for the asset example.dag is:

+

ri_hmap_blend_sharpness_mul=0.5

+

then the final blend_sharpness value for the asset example.dag on the level +will be calculated as:

+

blend_sharpness = ri_hmap_blend_sharpness * ri_hmap_blend_sharpness_mul = 8.0 * 0.5 = 4

+
```{important}
+The heightmap blending shader also works in
+[*daEditor*](../../dagor-tools/daeditor/daeditor/daeditor.md), but since global
+shader variables for the editor are initialized separately and not pulled from
+
+
+

scene.blk, keep in mind that if you choose global shader variable values in +scene.blk that differ from the defaults, the editor will display something +different from what you’ll see in the game.

+
Instructions on how to configure global shader variables for the editor will be
+added to the article later.
+```
+
+
+
+
+
+
+

Procedural Detail Layer Coloring

+

You can procedurally color any detail layer (only one at a time) using a +palette.

+

The palette is called paint_colors.dds and is located at +...\develop\assets\textures\colorize_textures.

+../../_images/rendinst_layered_86.jpg +
+

It consists of a set of single-pixel rows, each containing between 1 and 64 +colors. In the coloring parameters, you specify a particular row for a specific +object (from 0 to the last row in the texture). As the object moves across the +map, each step will randomly shift the pixel within the selected coloring row. +If multiple colors are specified, the object will be procedurally recolored.

+../../_images/rendinst_layered_87.gif +
+

The coloring is applied based on the diffuse alpha (either the heightmap of the +detail layer or simply a coloring mask for a unique texture).

+

Shader parameters:

+
    +
  • use_painting – Controls whether to color detail layers from the palette +defined in the scene’s shader variables.

    +
      +
    • 1 – color,

    • +
    • 0 – don’t color;

    • +
    • values between 0.(01) and 0.(9) – partial coloring (multiplier).

    • +
    +

    Coloring is based on the diffuse alpha, multiplied by the use_painting +value. Values between 1.(0)1 and 1.(9) also affect the coloring strength +from 0.0 to 1.0 but disable random pixel selection from the coloring row when +the object changes height – useful for consistently coloring modular +skyscrapers, for example.

    +
  • +
  • painting_line – The coloring row (from 0 to the last row in the texture).

  • +
  • paint1stdetail – Default value is 1 (colors the first detail layer). If +you need to color the Detail2 layer, set the value to -1.

  • +
+
+
+

Normal Blending

+

There are situations where you need to reveal the underlying texture of the +Detail1 layer (such as metal texture) through the Detail2 layer (such as paint). +This is achieved using the detail2_combined_normal parameter, which has two +possible values: 0 (disabled) or 1 (enabled).

+ + + +

Parameter value = 1

Parameter value = 0

+../../_images/rendinst_layered_88.jpg +../../_images/rendinst_layered_89.jpg +
+
+

Microdetails

+
+

See also

+

For information on microdetails, see +Microdetails on Assets.

+
+
+
+

Material Shadows

+

Material shadows are generated based on the heightmap of detail layers. The +following parameters are available:

+
    +
  • material_shadow_influence=0.5, 1, 0, 0 – Controls the “intensity” of +shadows. Each component affects the corresponding detail layer. For instance, +0.5 affects the Detail1 layer, and 1 affects the Detail2 layer. The third +and fourth components are not used in the rendinst_layered shader since it +only supports two detail layers. However, in the rendinst_perlin_layered +shader, the first three components are used, as it supports three detail +layers.

  • +
  • material_shadow_scale=2 – Acts as a multiplier for the “size” of the +shadows. This applies to the shadows of all detail layers, as calculating it +separately for each layer would be computationally expensive.

  • +
+

Example:

+../../_images/rendinst_layered_90.jpg +
+
+
+
+

Shader Configuration Errors

+

This occurs when you forget to set all the necessary values. For example, you +might add the parameter detail2_tile_u=2.54 but forget to include +detail2_tile_v=2.54.

+../../_images/rendinst_layered_91.jpg +
+

At first glance, this might seem insignificant (and this is often where the +inspection ends, unfortunately). However, upon closer examination:

+../../_images/rendinst_layered_92.jpg +
+

Such subtle issues are common and often go unnoticed until you closely inspect +the settings. Sometimes, for instance, values like detail2_tile_u=2.3 and +detail2_tile_v=2.4 are set, which only becomes noticeable upon careful +examination.

+
+

Sloped Roof

+

Let’s recall what a sloped roof tile looks like and how it reflects details:

+../../_images/rendinst_layered_93.jpg +
+

Remember that each overlay tile contains a specifically designed blending mask.

+../../_images/rendinst_layered_94.jpg +
+

Here’s how this mask works with a house roof:

+../../_images/rendinst_layered_95.jpg +
+

What happens if we leave the tiling parameters on the roof material?

+

First, the roof will never land on the correct roof cell because +atlas_first_tile = 8. Second, you’ll end up with completely arbitrary overlays +and blending.

+

For example:

+../../_images/rendinst_layered_96.jpg +
+

As you can see, the logic of material blending on the roof is completely lost. +The materials blend across the entire surface as if they were on walls, not a +roof. Now, let’s see how the overlay appears on the roof.

+../../_images/rendinst_layered_97.gif +
+

The result is completely abstract decorations, which have nothing to do with the +intended metal sheets of the roof. This is precisely why the roof cell was +designed to be universal and neutral.

+
+
+

Flat Roof

+

Let’s recall how the flat roof cell looks and what it represents:

+../../_images/rendinst_layered_98.jpg +
+

Here’s its exclusion mask:

+../../_images/rendinst_layered_99.jpg +
+

In this case, there’s no need to show examples of incorrect atlas usage because +there simply aren’t any other cells that can fulfill the same function.

+
+
+

Wooden Roof Trim

+

Recall that the wooden trim has its own designated - cell 2:

+../../_images/rendinst_layered_100.jpg +
+

When mapped correctly, the wooden planks look like this (Detail2 shows charred +wood):

+../../_images/rendinst_layered_101.jpg +
+

What happens when you apply overlay tiling parameters here?

+

The mapping jumps to cell 8, and instead of smooth blending and a bronzed +appearance, you get these bright planks smeared with tar:

+../../_images/rendinst_layered_102.jpg +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/rendinst_layered_family.html b/assets/shaders/rendinst_layered_family.html new file mode 100644 index 000000000..8275067c1 --- /dev/null +++ b/assets/shaders/rendinst_layered_family.html @@ -0,0 +1,342 @@ + + + + + + + Shader Family: rendinst_layered — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader Family: rendinst_layered

+
+

Overview

+

As of writing, the rendinst_layered family includes four shaders:

+ +

Let’s examine the parameters for each shader.

+
+
+

rendinst_layered

+
+

See also

+

For more information, see rendinst_layered shader.

+
+
+
+

dynamic_layered

+

This shader functions similarly to rendinst_layered, but it is optimized for +dynamic objects (destrs).

+
+
+

rendinst_layered_atest

+

This version supports alpha test for one or both detail textures.

+
+

Parameters

+
    +
  • blended_atest: 0/1 (disabled/enabled)

  • +
  • detail1_atest_weight: Alpha test level for the first detail texture +(default: 127)

  • +
  • detail2_atest_weight: Alpha test level for the second detail texture +(default: 127)

  • +
+
+
+
+

rendinst_layered_lightmap

+

This is the standard rendinst_layered shader with added support for emissive +maps.

+
+

See also

+

For more information, see +rendinst_layered_lightmap shader.

+
+
+
+

rendinst_layered_hmap_blend

+

This version introduces a heightmap blend feature that allows seamless +transitions between the model and the terrain. It also supports projecting a +clipmap using top-down projection onto the model. The clipmap is blended into +the material in two layers: the first blends from the ground up to a specified +height, and the second applies a Perlin noise mask on horizontal surfaces with +positive normals, also modifiable by distance from the ground.

+

This shader is ideal for objects like rocks, cliffs, and debris piles that need +to blend into the terrain or hide seams with the ground.

+

Below are screenshots illustrating the effect:

+ + + +

Without heightmap blend

With heightmap blend

+../../_images/rendinst_layered_family_01.jpg +../../_images/rendinst_layered_family_02.jpg + + + +

Without clipmap projection

With clipmap projection

+../../_images/rendinst_layered_family_03.jpg +../../_images/rendinst_layered_family_04.jpg +
+

Parameters

+
+

Note

+

The hmp_blend_height parameter is deprecated! If you encounter it, please +remove it.

+
+
    +
  • land_blend_dist: Specifies the height (in meters) for the first layer of +clipmap blending, from the ground up. Default is 0.3 meters if not specified.

  • +
  • land_perlin_height: Specifies the maximum height (in meters) for the +second layer of clipmap projection, which uses Perlin noise and applies to +horizontal surfaces with positive normals.

  • +
  • land_perlin_scale: Controls the scale of the Perlin noise. A lower value +results in coarser noise. Start with a value of 0.2 for tuning.

  • +
  • land_perlin_blend: Defines the range (in meters) over which the Perlin +noise fades from 1 to 0, starting from the land_blend_perlin_height +parameter. For example, if land_blend_perlin_height is set to 20 meters and +you want the Perlin noise to begin fading 1 meter above the ground, set +land_blend_perlin_blend to 19.

  • +
  • land_blend_normal_start: The normal value at which the clipmap +projection begins. Default is 1. A value greater than 1 reduces the opacity on +perfectly horizontal surfaces.

  • +
  • land_blend_normal_end: The normal value at which the clipmap projection +ends. Default is 0.5.

  • +
+

Below is an illustration showing how the Perlin noise strength gradient operates +from land_blend_perlin_height (upper bound) to land_blend_perlin_blend +(lower bound):

+../../_images/rendinst_layered_family_05.jpg +
+
+
+

Salt Sediments

+

The rendinst_layered_hmap_blend shader is often used on rocks and cliffs. It +includes a feature called Salt Sediments, which simulates effects like waterline +marks, rust, or algae growth. This effect is illustrated below:

+../../_images/rendinst_layered_family_06.jpg +
+

In the example above, the following texture was used:

+../../_images/rendinst_layered_family_07.jpg +
+

This texture has an alpha channel that controls transparency. It replaces the +combined albedo of the first detail texture and overlay.

+
+

Note

+

It only affects the first detail texture.

+
+

In the example, the effect is visible on the stone, but the orange moss (the +second detail texture) remains unchanged.

+

The texture is subtracted using the AlbedoAO of the overlay and stretches +infinitely downward below the water level. If this effect is unwanted, make the +bottom two lines of pixels in the texture fully transparent.

+../../_images/rendinst_layered_family_08.jpg +
+

Parameters:

+

In level.blk, set the following:

+
    +
  • saltSedimentsStart:r=-0.25: Starting height for the sediment effect.

  • +
  • saltSedimentsEnd:r=4: Ending height for the sediment effect.

  • +
  • saltSedimentsTile:r=15: Horizontal tiling scale for the texture, in +meters.

  • +
  • saltSedimentsTex:t="waterline_grdnt_a_tex_d": Name of the projected +texture.

  • +
+

The shader also supports an optional command:

+
    +
  • script:t="salt_sediments_opacity=1": Controls the multiplier for the +texture’s alpha channel. You can use other values, but it’s generally +unnecessary.

  • +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/rendinst_layered_lightmap.html b/assets/shaders/rendinst_layered_lightmap.html new file mode 100644 index 000000000..36d766dbd --- /dev/null +++ b/assets/shaders/rendinst_layered_lightmap.html @@ -0,0 +1,206 @@ + + + + + + + Shader: rendinst_layered_lightmap — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_layered_lightmap

+
+

Overview

+

This is a self-illumination shader designed for objects with blended detail +textures.

+

It works exactly like rendinst_layered shader, but with +one key difference: the 8th slot (numbering starts from 0, so this corresponds +to the 7th slot in 3ds Max) is used for the emission mask. The shader uses +this mask to control the emission effect, with the color of the mask determining +the color of the illumination.

+

The second UV channel is used, similar to an overlay.

+ + + + +

Overlay

Emission Mask

Result

+../../_images/rendinst_layered_lightmap_01.jpg +../../_images/rendinst_layered_lightmap_02.jpg +../../_images/rendinst_layered_lightmap_03.jpg +../../_images/rendinst_layered_lightmap_04.jpg +../../_images/rendinst_layered_lightmap_05.jpg +../../_images/rendinst_layered_lightmap_06.jpg +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/rendinst_parallax_ice.html b/assets/shaders/rendinst_parallax_ice.html new file mode 100644 index 000000000..47b8fd637 --- /dev/null +++ b/assets/shaders/rendinst_parallax_ice.html @@ -0,0 +1,325 @@ + + + + + + + Shader: rendinst_parallax_ice — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_parallax_ice

+
+

Overview

+

As the name suggests, this shader is designed to simulate translucent ice using +parallax effects. It can be applied to both tiled textures, such as the surface +of a frozen lake, and unique assets, like a sculpted iceberg.

+

This shader blends two detail layers in a manner similar to the +rendinst_perlin_layered shader, but without +height-based gradients. A third detail layer is blended differently, using only +its diffuse texture, which is offset “into” the surface and refracted by the +normals of the mixed detail layers.

+

This shader uses a single UV channel, as +rendinst_mask_layered does, and is +intended for relatively flat surfaces. Using it on organic shapes may cause +visual glitches, so it’s recommended to make such areas opaque.

+
+
+

Required Textures

+
    +
  • tex0: D1 Diffuse (RGB) + HeightMap (Alpha)

  • +
  • tex1: Diffuse of the internal layer (RGB)

  • +
  • tex2: D1 Normal (RG) + Glossiness (A)

  • +
  • tex3: D2 Diffuse (RGB) + HeightMap (Alpha)

  • +
  • tex4: D2 Normal (RG) + Glossiness (A)

  • +
+
+
+

Optional Textures

+
    +
  • tex5: D1 transparency mask. If present, this mask is used for blending +with the internal layer instead of the diffuse alpha. If a detail needs to be +completely transparent or opaque, a black or white placeholder can be used.

  • +
  • tex6: D2 transparency mask. Used similarly to tex5.

  • +
  • tex7: Detail blending mask.

  • +
+
+

Important

+

All masks in .folder.blk must have gamma=1 for correct operation.

+
+
    +
  • VertexColor: If available, this is used to force the internal layer to +become opaque in black areas, while white areas remain unchanged. This is +useful for handling the edges of ice chunks to avoid artifacts at corners. +Only the red channel is checked, but for simplicity, it is shown as black +and white in the example.

    +../../_images/rendinst_parallax_ice_01.jpg +
    +
  • +
+
+
+

Parameters

+

Color:

+
    +
  • inner_layer_depth: Distance between the surface and the internal layer. +min=0.0 (no effect). Default: 0.1

    +../../_images/rendinst_parallax_ice_02.gif +
    +
  • +
  • inner_layer_mul: Multiplier for the internal layer’s diffuse color, +controlling brightness. Default: 1.0

    +../../_images/rendinst_parallax_ice_03.gif +
    +
  • +
  • inner_layer_power: Exponent that applied to the internal layer’s color after +multiplication, used to adjust contrast. Default: 1.0

    +../../_images/rendinst_parallax_ice_04.gif +
    +

    Increasing both power and mul values can produce non-realistic but +artistic effects, such as enhanced contrast and color saturation that give a +glowing appearance. Use these settings sparingly. Here’s an extreme example +with power=3 and mul=3:

    +../../_images/rendinst_parallax_ice_05.jpg +
    +
  • +
  • vcol_masked_mul: Brightness multiplier for blended detail layers in areas +marked white in VertexColor.

  • +
  • vcol_masked_power: Contrast exponent for the same blended detail layers.

  • +
  • ior: Index of refraction, controlling how much the normals of the detail +layers distort the internal layer’s diffuse. min=1.0 (no effect), Default: +1.31.

    +

    Left to right: ior=1.0 (no refraction), 1.31 (physically accurate for +ice), and an exaggerated 4.0. Other parameters, including depth, are +identical.

    +../../_images/rendinst_parallax_ice_06.jpg +
    +

    By default, the shader uses a physically accurate value for ice, but you can +adjust the ior to weaken or exaggerate the effect for visual purposes. +Adjusting depth is also necessary, as increasing ior not only intensifies +the internal layer’s distortion by detail normals but also brings it visually +closer to the surface.

    +

    On the left: ior=1.31 (default) and depth=0.1. On the right: ior=4.0 and +depth=1. These are not physically accurate, but they can be used for +artistic effect. The internal layer becomes less distinct, which can sometimes +be desirable.

    +
  • +
+ + + +

ior=1.31 and depth=0.1

ior=4.0 and depth=1

+../../_images/rendinst_parallax_ice_07.gif +../../_images/rendinst_parallax_ice_08.gif +

Texture Coordinates:

+
    +
  • inner_layer_tile_uv: Tiling of the internal layer.

  • +
  • inner_layer_u_offset: Horizontal offset.

  • +
  • inner_layer_v_offset: Vertical offset.

  • +
  • detail1_tile_uv

  • +
  • detail1_u_offset

  • +
  • detail1_v_offset

  • +
  • modify_detail1_mask_uv: Controls whether the transparency mask UVs for this +detail are adjusted by the three parameters above. Default: 1. This is +useful if the mask was specifically painted for the asset, so tiling/offset +adjustments don’t break the mask.

  • +
  • detail2_tile_uv

  • +
  • detail2_u_offset

  • +
  • detail2_v_offset

  • +
  • modify_detail2_mask_uv

  • +
+

Micro Details:

+
    +
  • micro_detail_layer1: Index of the first micro detail layer.

  • +
  • micro_detail_layer1_uv_scale: Tiling of the first micro detail layer.

  • +
  • micro_detail_layer2: Index of the second micro detail layer.

  • +
  • micro_detail_layer2_uv_scale: Tiling of the second micro detail layer.

  • +
+

Masks:

+
    +
  • mask_gamma: works the same way as in +rendinst_perlin_layered. The first two values +control the gamma of the detail masks, the third does nothing (since there is +no third detail), and the fourth sets the tiling for the Perlin noise. +Default: 1.0, 1.0, 0.0, 0.1.

  • +
  • heightmaps_invert: The first two values control the inversion of the detail +blending masks, and the second pair controls the inversion of the transparency +masks for those details. Default: 0,0, 0,0.

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/rendinst_perlin_layered.html b/assets/shaders/rendinst_perlin_layered.html new file mode 100644 index 000000000..66b09e50c --- /dev/null +++ b/assets/shaders/rendinst_perlin_layered.html @@ -0,0 +1,855 @@ + + + + + + + Shader: rendinst_perlin_layered — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_perlin_layered

+
+

Overview

+

This shader is a complex tool for creating layered textures on terrain and +assets. It supports blending multiple detail layers with normal maps, +controlling detail tiling, and generating shadows from heightmaps. The shader +includes features like height-based painting, which applies color based on +object elevation using a predefined palette, and integrates Perlin noise to +enhance texture blending. Parameters allow fine-tuning of shadow intensity, +texture scale, and noise behavior, making it useful for adding depth and +variation to surfaces in large-scale environments.

+
+
+

Parameters

+
+

General Parameters

+
    +
  • script:t="blend_normals=0,0,0,0" - Normal blending. The first three +components specify the normals involved in the blend, while the fourth +component determines the normal through which the others will blend.

  • +
  • script:t="invert_heights=0,0,0,0" - The first three components control the +inversion of heightmaps (values can be fractional). The fourth component +adjusts the height gradient of Detail3.

  • +
  • script:t="mask_gamma=0.1,0.1,0.1,0.5" - The first three components control +the gamma of the details (the power of their heightmaps). The fourth component +is a multiplier for noise tiling.

  • +
  • script:t="paint_details=0,0,0,0" - Detail painting. The first three +components control the intensity of detail painting. The fourth component +specifies the paint string.

  • +
  • script:t="micro_detail_layer=0" - Index of the micro detail.

  • +
  • script:t="micro_detail_layer_v_scale=1" - Vertical scale of the micro detail +(for rectangular textures).

  • +
  • script:t="micro_detail_layer_uv_scale=1" - Tiling of the micro detail.

  • +
+
+
+

daNetGame-based Parameters

+
    +
  • script:t="mask_by_normal=0,1,0,0.5" - Specifies which normals allow Detail2 +to show through other details. The first three components are normals (which +can be fractional values), and the fourth component decides whether to use +normals or Perlin noise.

  • +
  • script:t="perlin_noise_offset=1,2,3,1" - Noise freezing on the model. The +first three components define the noise offset along the x, y, z axes, while +the fourth component toggles the noise freezing on or off.

  • +
  • script:t="paint_points_black=0,0,0,0" - Painting points. The first three +components set black points for three details. The fourth component is unused +but required.

  • +
  • script:t="paint_points_white=1,1,1,0" - Painting points. The first three +components set white points for three details. The fourth component is unused +but required.

  • +
  • script:t="palette_index=0" - Paint palette selection. 0 for global, 1 +for per-map.

  • +
  • script:t="detail0_const_color=0,0,0,1" - Paint color for Detail1 (using +modulate2x).

  • +
  • script:t="detail1_const_color=0,0,0,1" - Paint color for Detail2 (using +modulate2x).

  • +
  • script:t="detail2_const_color=0,0,0,1" - Paint color for Detail3 (using +modulate2x).

  • +
  • script:t="enable_hmap_blend=1" - Enable/disable blending with the heightmap +(default is 0).

  • +
  • script:t="hmap_blend_height=0.1" - Height of the blend strip (default is +0.1).

  • +
+
+
+

War Thunder Parameters

+
    +
  • script:t="details_tile=1,1,1,0" - Tiling of the details. The first three +components are multipliers for the tiling of Details1-3. The fourth component +is unused but required.

  • +
+
+
+
+

General Operation and Principles

+

The shader operates with three details (layered), blending them based on:

+
    +
  1. Perlin noise (perlin_layered),

  2. +
  3. Height from the ground,

  4. +
  5. Their heightmaps.

    +../../_images/rendinst_perlin_layered_01.jpg +
    +
  6. +
+

Details are assigned to the following slots:

+
    +
  • Detail 1 (gray stucco): Albedo texture (heightmap in alpha) - empty.

  • +
  • Detail 1 (gray stucco): Normal texture (metalness in blue, smoothness in +alpha).

  • +
  • Detail 2 (white stucco): Albedo texture (heightmap in alpha).

  • +
  • Detail 2 (white stucco): Normal texture (metalness in blue, smoothness in +alpha).

  • +
  • Detail 3 (stone): Albedo texture (heightmap in alpha).

  • +
  • Detail 3 (stone): Normal texture (metalness in blue, smoothness in alpha).

  • +
+
+

Note

+
    +
  • You can use two details instead of three. Detail1 is mandatory and constant. +You can omit either Detail2 or Detail3, but not both.

  • +
  • If only Detail1 is used, there’s no point in blending – consider using a +simple shader instead.

  • +
+
+
+

Blending Details

+
+

First Level – Blending by Height Gradient

+

This is a special case where Detail3 is blended based on its height gradient +from the ground. If not configured properly, Detail3 may not be visible on most +of the object, dominating only at the bottom.

+../../_images/rendinst_perlin_layered_02.jpg +
+

Essentially, this complex “height gradient” represents a natural gradient +applied to the heightmap of Detail3.

+../../_images/rendinst_perlin_layered_03.jpg +
+
+
+

Second Level – Blending by Heightmaps

+

Each detail has its own heightmap. Let’s examine them:

+ + + + +

Detail1

Detail2

Detail3

+../../_images/rendinst_perlin_layered_04.jpg +../../_images/rendinst_perlin_layered_05.jpg +../../_images/rendinst_perlin_layered_06.jpg +

When blending three details over each other, they are strictly blended according +to these heightmaps.

+../../_images/rendinst_perlin_layered_07.jpg +
+

As shown in the screenshot, the heightmap of the white stucco (Detail2) is +significantly “higher” than that of the gray stucco (Detail1). Meanwhile, +Detail3 appears at the bottom based on the height gradient.

+
+
+

Third Level – Blending by Perlin Noise

+

As seen in the screenshots above, the gray stucco (with a weaker heightmap) +appears in a specific corner. It’s absent in other areas because the Perlin +noise at that location lightened the heightmap of Detail2, making it higher than +Detail1.

+../../_images/rendinst_perlin_layered_08.jpg +
+
+
+
+

Blending Control

+

Blending is controlled using the following parameters:

+
+

Parameter: invert_heights=0,0,0,1

+
+
First Three Components
+

These invert the heightmaps of the respective details (values can be fractional, +representing the linear interpolation factor between the inverted and original +heightmaps).

+
    +
  • 0 - original,

  • +
  • 1 - inverted.

  • +
+

Result of Inverted Heightmaps:

+ + + + +

Detail1

Detail2

Detail3

+../../_images/rendinst_perlin_layered_09.jpg +../../_images/rendinst_perlin_layered_10.jpg +../../_images/rendinst_perlin_layered_11.jpg +

Visual Appearance of Inverted Heightmap:

+ + + + +

Detail1

Detail2

Detail3

+../../_images/rendinst_perlin_layered_12.jpg +../../_images/rendinst_perlin_layered_13.jpg +../../_images/rendinst_perlin_layered_14.jpg +

Explanation:

+ + + + +

Detail1

Detail2

Detail3

+ + + + +

Inverting the "gray" heightmap has little effect, as it stays "gray" even after inversion.

Inverting the "white" heightmap makes Detail1 visible, as its "gray heightmap" becomes higher than the "black" (after inversion) heightmap of Detail2.

It may seem unchanged, but note how the brick protrudes through the stucco. It no longer sticks out, as if it was pushed out from underneath. Now, the stucco lies on top of the brick plane, crumbling between layers (which looks much more realistic).

+
+
+
Fourth Component
+

This controls the height gradient for Detail3.

+
    +
  • 0 - original height gradient,

  • +
  • 1 - no gradient.

  • +
+

Let’s see how this works:

+ + + + +

value = 0

value = 0.5

value = 1

+../../_images/rendinst_perlin_layered_15.jpg +../../_images/rendinst_perlin_layered_16.jpg +../../_images/rendinst_perlin_layered_17.jpg +

As shown, the higher the value, the less visible Detail3 becomes. This is +because the parameter represents gamma (or the power) of the height gradient.

+
+

Note

+

What does this mean?

+

It means the height gradient ranges from almost 0 (black) to nearly 1 +(white). Essentially, from around 0.01 to 0.99 (conditional, as the exact +implementation in code is unknown).

+

If we set a gamma of 0 for the nearly black part of the gradient (0.01), it +becomes 1 (white). Therefore, a value of 0 represents the maximum height of +Detail3.

+

As the gamma increases, the height decreases. For example, 0.01^0.5 = 0.1. And +0.01^1 = 0.01 - the gradient is completely black.

+
+
+
+
+

Parameter: mask_gamma=1,1,1,1

+
+
First Three Components
+

These set the gamma for a specific heightmap (as explained above). They +effectively darken the heightmaps of the specified details.

+
    +
  • 0 - untouched heightmap,

  • +
  • 1 - completely darkened heightmap.

  • +
+
+

Note

+

The formula requires a value slightly above zero, typically around 0.1.

+
+

Let’s see how this works:

+
    +
  • Heightmap 1

  • +
+ + + + +

value = 0.1

value = 0.5

value = 1

+../../_images/rendinst_perlin_layered_18.jpg +../../_images/rendinst_perlin_layered_19.jpg +../../_images/rendinst_perlin_layered_20.jpg +
    +
  • Heightmap 2

  • +
+ + + + +

value = 0.1

value = 0.5

value = 1

+../../_images/rendinst_perlin_layered_21.jpg +../../_images/rendinst_perlin_layered_22.jpg +../../_images/rendinst_perlin_layered_23.jpg +
    +
  • Heightmap 3

  • +
+ + + + +

value = 0.1

value = 0.5

value = 1

+../../_images/rendinst_perlin_layered_24.jpg +../../_images/rendinst_perlin_layered_25.jpg +../../_images/rendinst_perlin_layered_26.jpg +
+
+
Fourth Component
+

This sets the scale (or more precisely, the tiling) of the world noise. Let’s +examine a longer object to see the difference. A value of 0 is not used, as +noise would be absent, and blending would occur solely based on heightmaps.

+
    +
  • value = 0.1

    +../../_images/rendinst_perlin_layered_27.jpg +
    +
  • +
  • value = 0.5

    +../../_images/rendinst_perlin_layered_28.jpg +
    +
  • +
  • value = 1

    +../../_images/rendinst_perlin_layered_29.jpg +
    +
  • +
+
+
+
+
+

Normal Map Blending

+

Often, there’s a need to reveal the relief or texture of one detail through +another. For example, you might want to show wood through peeling paint, or moss +growing over tiles. In some cases, you might want to depict painted rusty metal, +or simply add variation to the detail by using different textures.

+

Instead of generating a bunch of separate textures for each scenario, the shader +provides a parameter for blending the normals of details. Essentially, this +parameter allows the “lower” or “farther” (relative to the camera’s position) +details’ normals to show through the “upper” or “closer” ones.

+
+

Parameter: blend_normals=1,1,1,1

+

This parameter controls how the normal maps of different details blend with each +other.

+
    +
  • The first three components specify which details’ normals participate in +the blending process.

  • +
  • The fourth component determines the “main” detail through which the other +normals will show. This is important because the blending effect will only be +visible through this selected detail (keep in mind that the details are +numbered starting from 0).

  • +
+
+

Important

+

You must be cautious with the fourth component. If you set it to the “lower” +detail that is not visible due to blending, you won’t see any blending effect – +because the detail through which the other normals should be visible is itself +not visible.

+

In other words, for the blending effect to work correctly, the selected “main” +detail (fourth component) must be visible. This ensures that the normals of the +other details can properly blend through it.

+
+ + + + +

blend_normals=0,0,0,0

blend_normals=1,1,1,1

blend_normals=1,0,1,0

+../../_images/rendinst_perlin_layered_30.jpg +../../_images/rendinst_perlin_layered_31.jpg +../../_images/rendinst_perlin_layered_32.jpg + + + + +

All Values Set to 0: No normal map blending occurs.

All Values Set to 1: All normals (first three components) are blended, with the main normal (through which others blend) set to 1, representing white stucco.

Blending Through 0 (fourth component): This blends through the gray stucco (Detail3). The Detail2 (white stucco) does not participate in the blend.

+
+
+
+

Procedural Object Painting

+
+

See also

+

For more information on procedural painting, see Procedural Rendinst +Painting.

+
+
+
+

Microdetails

+

The shader supports one microdetail across the entire stack of details. The +syntax is similar to simple_aces. For example:

+
    +
  • micro_detail_layer=0 - Index of the microdetail.

  • +
  • micro_detail_layer_v_scale=1 - Vertical-to-horizontal ratio for the +microdetail texture.

  • +
  • micro_detail_layer_uv_scale=16.371 - Scale (tiling) of the microdetail +texture.

  • +
+
+
+
+

daNetGame-Based Parameters

+
+

Overlaying the Detail2 by Normals

+

This is controlled by the parameter:

+

script:t="mask_by_normal=0,1,0,0.5"

+
    +
  • The first three components set the reference normal that dictates where

  • +
  • the second detail will appear (these are not normalized normals, so values +greater than one will cause the detail to appear more strongly with sharper +edges).

  • +
  • The last component controls the interpolation (lerp) between the noise +mask weight and the normal mask weight (0 means no normals are used, 1 means +only normals are used).

  • +
+
+
+

Freezing Perlin Noise

+

Controlled by the parameter:

+
    +
  • script:t="perlin_noise_offset=1,2,3,1"

  • +
  • The first three components determine the Perlin noise offset in the x, y, +and z directions.

  • +
  • The fourth component: 0 keeps the default noise unaffected by the +offset, while 1 freezes the noise, making it look consistent across both the +editor and the game regardless of the asset’s position, orientation, and +scale.

  • +
+

This parameter is recommended only for extreme cases, where more artistic +control over noise on unique assets is required.

+
+
+

Paint Points

+

These are analogous to black/white points in +rendinst_simple_painted and +rendinst_mask_layered.

+

Controlled by the parameters:

+
    +
  • script:t="paint_points_black=0,0,0,0"

  • +
  • The first three components set the black points for the three details, and +the fourth component is mandatory but unused.

  • +
  • script:t="paint_points_white=1,1,1,0"

  • +
  • The first three components set the white points for the three details, and +the fourth component is mandatory but unused.

  • +
+
+

Important

+

Black and white points must always be different, even if their details are +not being painted. If these parameters are added, ensure all black and white +points are different. By default, you can copy these parameters directly – black +points as all zeros, white points as all ones:

+
    +
  • script:t="paint_points_black=0,0,0,0"

  • +
  • script:t="paint_points_white=1,1,1,0"

  • +
+

Otherwise, you will encounter a “divide by zero” error:

+

rendinst_perlin_layered: divide by zero [real] while exec shader code. stopped at operand #45

+
+
+
+

Painting Details in Different Constant Colors

+

You can color each detail separately. However, this technology works with +shader-defined colors rather than a paint map – there is no randomness. Only the +color you specify will be applied.

+
+

Important

+

Painting works via modulate2x, so the resulting color may differ slightly from +what you set. This is a limitation of the technology.

+
+

Controlled by parameters like:

+
    +
  • script:t="detail0_const_color=0,0,0,1" - Paints the Detail1

  • +
  • script:t="detail1_const_color=0,0,0,1" - Paints the Detail2

  • +
  • script:t="detail2_const_color=0,0,0,1" - Paints the Detail3

  • +
+
+

Important

+

To activate these parameters, detail painting must be enabled, meaning the +parameter script:t="paint_details=1,1,1,0" should be set to 1 (or another +necessary value, just not 0) for the required details. The fourth component +(the paint line) does not affect those details for which a fixed color is set.

+
+

Parameter values:

+
    +
  • The first three components represent the color in RGB, scaled to the 0-1 +range.

    +../../_images/rendinst_perlin_layered_33.jpg +
    +
  • +
  • The fourth component controls the influence of the paint map on the +specified color: 0 means full influence, 1 means no influence.

  • +
+

This type of painting can be combined with standard paint map-based +painting – some details can use the map, while others use the specified color.

+

Paint points still apply.

+
+
+

Heightmap Blending

+

To better integrate objects with the terrain, you can use parameters that blend +the details of the terrain and the asset based on the mask of where the asset +intersects with the heightmap. This is useful for piles, rocks, cliffs, etc.

+
+

Important

+

This is a computationally expensive technique, so use it only when necessary.

+
+

Example of blending:

+ + + +

Without Blending

With Blending

+../../_images/rendinst_perlin_layered_34.jpg +../../_images/rendinst_perlin_layered_35.jpg +
+

Initialization and Operation of the Blend

+

Parameters to initialize the blend in the shader:

+
    +
  • script:t="enable_hmap_blend=1" - (default - 0) - enable/disable blending +with the heightmap.

  • +
  • script:t="hmap_blend_height=0.1" - (default - 0.1) - height of the blend +stripe.

  • +
+
+
+

Global Shadervars

+

Primary shader parameters, initialized in gamedata/.../scene.blk in the +"shader_vars__vars:object" block:

+
    +
  • ri_hmap_blend_sharpness = 8.0 - (default - 8.0) - higher value means sharper +blend edges.

  • +
  • ri_hmap_min_angle = 12.0 - (default - 12.0) - gradient perlin noise starts +from this angle to the max angle.

  • +
  • ri_hmap_max_angle = 50.0 - (default - 50.0) - maximum angle.

  • +
  • ri_hmap_perlin_tex_scale = 0.25 - (default - 0.25) - perlin noise tiling +multiplier.

  • +
  • ri_hmap_min_height = 0.5 - (default - 0.5) - minimum blend height, overrides +shader parameter if necessary.

  • +
+
+
+

Static Shadervars

+

Additional shader parameters that adjust the influence of global shadervars for +a specific asset:

+
    +
  • script:t="ri_hmap_blend_sharpness_mul = 1.0" - multiplier for +ri_hmap_blend_sharpness.

  • +
  • script:t="ri_hmap_min_angle_mul = 1.0" - multiplier for ri_hmap_min_angle.

  • +
  • script:t="ri_hmap_max_angle_mul = 1.0" - multiplier for ri_hmap_max_angle.

  • +
  • script:t="ri_hmap_perlin_tex_scale_mul = 1.0" - multiplier for +ri_hmap_perlin_tex_scale.

  • +
  • script:t="ri_hmap_min_height_mul = 1.0" - multiplier for +ri_hmap_min_height.

  • +
+
+
+

Global and Static Shadervars for ri_hmap

+
    +
  1. Global Shadervars: Affect all assets on a level with initialized blending.

  2. +
  3. Default Values: If global shadervars are not initialized in scene.blk, +the default values listed above are used.

  4. +
  5. Static Shadervars: These are shader parameters that act as multipliers +for the global shadervars initialized in scene.blk.

  6. +
+

For example, if the global shadervar is:

+

ri_hmap_blend_sharpness = 8.0

+

and the asset example.dag has a static shadervar set to:

+

script:t="ri_hmap_blend_sharpness_mul = 0.5"

+

the final blend sharpness value for example.dag on the level will be +calculated as:

+

blend_sharpness = ri_hmap_blend_sharpness * ri_hmap_blend_sharpness_mul = 8.0 * 0.5 = 4.

+
+

Important

+

The heightmap blending shader works in the +daEditor, but since the +global shadervars for the editor are initialized separately and not pulled from +scene.blk, be aware that if you select global shadervars values in scene.blk +that differ from the default values, the editor will display something different +from what you will see in the game. Instructions on how to set global shadervars +for the editor will be added to the article later.

+
+
+

Tip

+

Global shadervars can be changed in the game in real-time:

+
    +
  • If global shadervars are not initialized in scene.blk, they can only be +changed through the web UI Shader_vars – show global shader vars;

  • +
  • If initialized, they can be changed in the game itself using the mission +settings UI, which is called up by pressing F12.

  • +
+
+
+
+
+
+

War Thunder Parameters

+
+

Detail Tiling

+

In War Thunder, the texel density of details isn’t always consistent (although +all new details are created with correct texel density). To address this, the +parameter details_tile=1,1,1,0 was introduced.

+
    +
  • Only the first three components are used, with each one controlling the +tiling of its corresponding detail.

  • +
  • The default value for each component is 1.

  • +
+
+
+

Height-Based Painting

+../../_images/rendinst_perlin_layered_36.jpg +
+
    +
  • script:t="use_painting=1": Controls painting from a palette defined in the +scene’s shader variables.

    +
      +
    • 1 enables painting, while 0 disables it.

    • +
    • Values between 0.01 and 0.9 reduce the painting intensity +(multiplier). Painting is based on the alpha of the diffuse texture, +multiplied by the use_painting value.

    • +
    • Values between 1.01 and 1.9 affect the painting intensity from 0.0 +to 1.0 but disable the random pixel selection from the paint stripe when +the object is displaced vertically. This is useful for ensuring that +modular skyscrapers, for example, are painted the same color.

    • +
    +
  • +
+

The palette used is called paint_colors.dds and can be found at +.../develop/assets/textures/colorize_textures.

+
+

See also

+

For more information on procedural painting, see Procedural Rendinst +Painting.

+
+
+
+

Material Shadows

+

These are shadows derived from the heightmap of the details. The available +parameters include:

+
    +
  • script:t="material_shadow_influence=0.5, 1, 0.3, 0": Controls the “strength” +of shadows for each detail.

    +
      +
    • Each component affects the corresponding detail (e.g., 0.5 for the first +detail, 1 for the second, and 0.3 for the third).

    • +
    • The fourth component is not used in the rendinst_perlin_layered shader.

    • +
    +
  • +
  • script:t="material_shadow_scale=2": Acts as a multiplier for the “size” of +the shadow.

    +
      +
    • This scale is applied uniformly to the shadows of all details, as calculating it individually for each detail would be computationally expensive.

    • +
    +
  • +
+../../_images/rendinst_perlin_layered_37.jpg +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/rendinst_simple_emissive.html b/assets/shaders/rendinst_simple_emissive.html new file mode 100644 index 000000000..5eaa7f0c4 --- /dev/null +++ b/assets/shaders/rendinst_simple_emissive.html @@ -0,0 +1,284 @@ + + + + + + + Shader: rendinst_simple_emissive — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: rendinst_simple_emissive

+
+

Overview

+

A simple emissive shader primarily used for basic assets such as light bulbs, +spotlights, etc. It can also be applied using an emissive mask.

+
+

Parameters

+
    +
  • script:t="emission_only_at_night=1" – Controls emission visibility during +nighttime only.

    +
      +
    • 1: Enabled

    • +
    • 0: Disabled

    • +
    +
    +

    Note

    +

    This parameter works in Asset +Viewer also +(setting the environment to nighttime will trigger the emission).

    +
    +
    +

    Important

    +

    Always set this parameter unless emission is required at all times (e.g., for +skyscraper lights, car headlights, etc.).

    +
    +
  • +
  • script:t="emission_fadeout=1000,5000,0,0" – Controls the fade-out of the +emission (if needed). The first two components are functional:

    +
      +
    • Start of the fade-out.

    • +
    • End of the fade-out.

    • +
    • The 3rd and 4th components must be included but are not used.

    • +
    +
  • +
  • script:t="emission_strength=1" – Specifies the strength of the emission. +Values range from 0 to potentially infinity. A value of 1 is usually +sufficient as the maximum.

  • +
  • script:t="emission_color=0.94,1,0,0" – Defines the emission color in RGB, +with conversion as follows:

    +
      +
    • 0 RGB = 0 in the shader

    • +
    • 255 RGB = 1 in the shader

    • +
    +
  • +
+
+
+
+

Functionality

+
+

Standard Operation

+

The shader works based on an emissive mask located in the alpha channel of the +diffuse texture:

+
    +
  • Black – No emission

  • +
  • Lighter than black – Emits with the intensity of white

  • +
  • Albedo color – The emission color matches the albedo

  • +
+
+
+

Separate Emission Mask

+

If necessary, a separate emission mask can be applied, and the shader will +automatically use it. The mask is connected in the 6th texture slot (counting +starts from 0, so in 3ds Max, this would be the 5th slot).

+

A separate emission mask is typically required when procedural painting is used +on the asset, where white represents paintable areas. A conflict can arise +between the paint and emissive maps, causing areas meant to emit light to be +painted instead, and vice versa.

+../../_images/rendinst_simple_emissive_01.jpg +
+
+
+

Object Painting in War Thunder

+

Not yet implemented, but this is precisely why the separate emissive mask +functionality was prepared. The idea is for a single shader to both paint and +emit light on objects – such as buildings on aircraft.

+

Operation principle:

+
    +
  • If only the diffuse and normal maps are connected, the shader functions as a +standard emissive shader.

  • +
  • If a separate emissive mask is connected, the shader can paint based on the +diffuse alpha as if it were a paint mask (like the standard +simple_aces/rendinst_simple shader in War +Thunder).

  • +
+
+

See also

+

Painting parameters are standard for War Thunder, see Procedural Rendinst +Painting.

+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/assets/shaders/simple_aces_detailed.html b/assets/shaders/simple_aces_detailed.html new file mode 100644 index 000000000..7de5653df --- /dev/null +++ b/assets/shaders/simple_aces_detailed.html @@ -0,0 +1,254 @@ + + + + + + + Shader: simple_aces_detailed — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shader: simple_aces_detailed

+
+

Overview

+

This shader is designed for prefabs and render instances with additional +detailing, including a normal map.

+
+
+

Textures

+

In 3ds Max, the shader’s class name is simple_aces_detailed. It uses the +following texture slots:

+
    +
  • Slot 1 – Base texture (colormap)

  • +
  • Slot 3 – Normal map for the base texture

  • +
  • Slot 4 – Normal map for the detail texture

  • +
  • Slot 8 – Detail texture, with tiling controlled by the parameters +detail_scale_u=8 and detail_scale_v=8

  • +
+
+
+

Parameters

+

For example, in the .dag file, the material configuration appears as follows:

+
material{
+  name:t="19 – Default"
+  class:t="simple_aces_detailed"
+  tex16support:b=yes
+  twosided:i=0
+  amb:ip3=255, 255, 255
+  diff:ip3=255, 255, 255
+  spec:ip3=255, 255, 255
+  emis:ip3=0, 0, 0
+  power:r=32
+  script:t="real_two_sided=no"
+  script:t="detail_scale_u=8"
+  script:t="detail_scale_v=8"
+  tex0:t="./karelia_cliff_a_b_tex_d.tif"
+  tex2:t="./karelia_cliff_a_b_tex_n.tif"
+  tex3:t="./rock_detail_a_tex_n.tif"
+  tex7:t="./rock_detail_a_tex_d.tif"
+}
+
+
+

Explanation of Key Parameters:

+
    +
  • name:t="19 Default" – The material’s name.

  • +
  • class:t="simple_aces_detailed" – The shader class being used for the +material.

  • +
  • tex16support:b=yes – Enables support for 16-bit textures.

  • +
  • twosided:i=0 – Determines whether the material is rendered double-sided. In +this case, 0 means it’s single-sided.

  • +
  • amb:ip3=255, 255, 255 – Ambient color (RGB: 255, 255, 255).

  • +
  • diff:ip3=255, 255, 255 – Diffuse color (RGB: 255, 255, 255).

  • +
  • spec:ip3=255, 255, 255 – Specular color (RGB: 255, 255, 255).

  • +
  • emis:ip3=0, 0, 0 – Emission color (RGB: 0, 0, 0), meaning no +self-illumination.

  • +
  • power:r=32 – Specular power (shininess).

  • +
  • script:t="real_two_sided=no" – Explicitly disables double-sided rendering.

  • +
  • script:t="detail_scale_u=8" – Sets the tiling scale for the detail texture +along the U axis (horizontal).

  • +
  • script:t="detail_scale_v=8" – Sets the tiling scale for the detail texture +along the V axis (vertical).

  • +
  • tex0:t="./karelia_cliff_a_b_tex_d.tif" – Path to the base texture +(colormap).

  • +
  • tex2:t="./karelia_cliff_a_b_tex_n.tif" – Path to the normal map for the base +texture.

  • +
  • tex3:t="./rock_detail_a_tex_n.tif" – Path to the normal map for the detail +texture.

  • +
  • tex7:t="./rock_detail_a_tex_d.tif" – Path to the detail texture.

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/breathe/doxygen/d3dAPI.cfg b/breathe/doxygen/d3dAPI.cfg new file mode 100644 index 000000000..33dfb2123 --- /dev/null +++ b/breathe/doxygen/d3dAPI.cfg @@ -0,0 +1,96 @@ +PROJECT_NAME = "d3dAPI" +OUTPUT_DIRECTORY = d3dAPI +GENERATE_LATEX = NO +GENERATE_MAN = NO +GENERATE_RTF = NO +CASE_SENSE_NAMES = NO +INPUT = /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_tiledResource.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_query.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_vertexIndexBuffer.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_texFlags.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_shaderConstants.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_commands.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_async_pipeline.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_interface_table.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_buffers.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_res.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_drv3d_multi.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_d3dResource.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_resourceChecker.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_shaderLibrary.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_bindless.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_hangHandler.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_barrier.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_decl.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_shaderModelVersion.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_heap.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_renderTarget.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_resource.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_dispatch.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_lock.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_driverCode.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_resUpdateBuffer.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_draw.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_driver.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_shaderLibraryObject.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_tex3d.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_matricesAndPerspective.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_viewScissor.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_resetDevice.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_renderStateId.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_variableRateShading.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_dispatchMesh.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_consts.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_capture.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_samplerHandle.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_info.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_sampler.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_driverNetManager.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_texture.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_rwResource.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_platform_pc.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_platform.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_resId.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_renderPass.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_platform_ps.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_shader.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_consts_base.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_renderStates.h +ENABLE_PREPROCESSING = YES +QUIET = YES +JAVADOC_AUTOBRIEF = YES +JAVADOC_AUTOBRIEF = NO +GENERATE_HTML = NO +GENERATE_XML = YES +ALIASES = rst="\verbatim embed:rst" +ALIASES += endrst="\endverbatim" +ALIASES += inlinerst="\verbatim embed:rst:inline" +ENABLE_PREPROCESSING=YES +MACRO_EXPANSION=YES +PREDEFINED=DOXYGEN declare_new(x)= __restrict= __forceinline= +ALIASES += constcap{1}="\copybrief \1 \ref \1" +ALIASES += basecap{1}="\details \copybrief \1 \see \1" +ALIASES += runtimecap{2}="Runtime defined on \2. \ref \1" +ALIASES += microsoft="Microsoft" +ALIASES += win32="Windows" +ALIASES += windows="\win32" +ALIASES += xbone="Xbox One" +ALIASES += xboxone="\xbone" +ALIASES += scarlett="Xbox Series X / S" +ALIASES += xbox="\xbone and \scarlett" +ALIASES += sony="Sony" +ALIASES += ps4="PlayStation 4" +ALIASES += ps5="PlayStation 5" +ALIASES += ps="\ps4 and \ps5" +ALIASES += nintendo="Nintendo" +ALIASES += nswitch="\nintendo Switch" +ALIASES += apple="Apple" +ALIASES += ios="iOS" +ALIASES += mac="macOS" +ALIASES += tvos="tvOS" +ALIASES += google="Google" +ALIASES += android="Android" +ALIASES += linux="Linux" +ALIASES += nvidia="Nvidia" +ALIASES += AMD="AMD" +ALIASES += amd="\AMD" +ALIASES += ATI="AMD / ATI" +ALIASES += ati="\ATI" +ALIASES += intel="Intel" +ALIASES += ARM="ARM" +ALIASES += arm="\ARM" +ALIASES += mali="\arm Mali" +ALIASES += imgtec="imgTec" +ALIASES += powervrr="\imgtec Power VR Rogue" +ALIASES += qcomm="Qualcomm" +ALIASES += adreno="\qcomm Adreno" +ALIASES += mesa="Mesa 3D" +ALIASES += dx11="DirectX 11" +ALIASES += dx12="DirectX 12" +ALIASES += khronos="Khronos" +ALIASES += vk="Vulkan" +ALIASES += metal="Metal" +ALIASES += llvmpipe="\mesa LLVM pipe" +ALIASES += capbrief="\brief Indicates that the device driver" +ALIASES += briefconstcap{2}="\brief Constant \1\basecap{\2}" +ALIASES += NYI="\remarks This feature can be supported, but is not yet implemented." +ALIASES += someNYI="\remarks Some drivers without support could support this feature, but do not implement it yet." +ALIASES += constissue{1}="\copybrief \1 \ref \1" +ALIASES += baseissue{1}="\details \copybrief \1 \see \1" +ALIASES += briefconstissue{3}="\brief Is constant \1 on \2 \baseissue{\3}" +ALIASES += runtimeissue{2}="Runtime defined on \2. \ref \1" +ALIASES += caprefc{3}="\ref \3::\2 \"\1\"" +ALIASES += caprefa{3}="\ref \3::\2 \"\1\"" +ALIASES += caprefr{3}="\ref \3 \"\1\"" +ALIASES += caprefc{4}="\ref \3::\2 \"\1\"" +ALIASES += caprefa{4}="\ref \4::\2 \"\1\"" +ALIASES += caprefr{4}="\ref \3 \"\1\"" +ALIASES += capvaluec{2}="\copybrief \2::\1" +ALIASES += capvaluea{2}="\copybrief \2::\1" +ALIASES += capvaluer{2}="Runtime determined." +ALIASES += capvaluec{3}="\copybrief \2::\1" +ALIASES += capvaluea{3}="\copybrief \3::\1" +ALIASES += capvaluer{3}="Runtime determined." +ALIASES += platformtable{12}="\note ^^\ +
PlatformValue^^\ +
\capref\2{\xbone,\1,DeviceDriverCapabilitiesXboxOne} \capvalue\2{\1,DeviceDriverCapabilitiesXboxOne} ^^\ +
\capref\3{\scarlett,\1,DeviceDriverCapabilitiesScarlett,DeviceDriverCapabilitiesXboxOne} \capvalue\3{\1,DeviceDriverCapabilitiesScarlett,DeviceDriverCapabilitiesXboxOne} ^^\ +
\capref\4{\ps4,\1,DeviceDriverCapabilitiesPS4} \capvalue\4{\1,DeviceDriverCapabilitiesPS4} ^^\ +
\capref\5{\ps5,\1,DeviceDriverCapabilitiesPS5,DeviceDriverCapabilitiesPS4} \capvalue\5{\1,DeviceDriverCapabilitiesPS5,DeviceDriverCapabilitiesPS4} ^^\ +
\capref\6{\ios,\1,DeviceDriverCapabilitiesIOS} \capvalue\6{\1,DeviceDriverCapabilitiesIOS} ^^\ +
\capref\7{\tvos,\1,DeviceDriverCapabilitiesTVOS} \capvalue\7{\1,DeviceDriverCapabilitiesTVOS} ^^\ +
\capref\8{\nswitch,\1,DeviceDriverCapabilitiesNintendoSwitch} \capvalue\8{\1,DeviceDriverCapabilitiesNintendoSwitch} ^^\ +
\capref\9{\android,\1,DeviceDriverCapabilitiesAndroid} \capvalue\9{\1,DeviceDriverCapabilitiesAndroid} ^^\ +
\capref\10{\mac,\1,DeviceDriverCapabilitiesMacOSX} \capvalue\10{\1,DeviceDriverCapabilitiesMacOSX} ^^\ +
\capref\11{\linux,\1,DeviceDriverCapabilitiesLinux} \capvalue\11{\1,DeviceDriverCapabilitiesLinux} ^^\ +
\capref\12{\win32,\1,DeviceDriverCapabilitiesWindows} \capvalue\12{\1,DeviceDriverCapabilitiesWindows} ^^\ +
" \ No newline at end of file diff --git a/breathe/doxygen/d3dAPI/xml/bug.xml b/breathe/doxygen/d3dAPI/xml/bug.xml new file mode 100644 index 000000000..c3a1ef551 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/bug.xml @@ -0,0 +1,21 @@ + + + + bug + Bug List + + + + +Member DeviceDriverCapabilitiesBase::hasBindless +Nintendo Switch is experimental support and so is not a constant cap yet. + +Member DeviceDriverCapabilitiesBase::hasUAVOnlyForcedSampleCount +There is no way of querying the number of samples that are supported. So the Vulkan driver, for example, assumes 1, 2, 4 and 8 samples to be required. + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/class_base_texture.xml b/breathe/doxygen/d3dAPI/xml/class_base_texture.xml new file mode 100644 index 000000000..52fd96c70 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/class_base_texture.xml @@ -0,0 +1,1202 @@ + + + + BaseTexture + D3dResource + BaseTexture::IReloadData + + + bool + bool BaseTexture::samplerEnabled + + samplerEnabled + = true + + + + + + + + + + + + constexpr int + constexpr int BaseTexture::TEX_COPIED + + TEX_COPIED + = 1 << 30 + + + + + + + + + + + + bool + virtual bool BaseTexture::setReloadCallback + (IReloadData *) + setReloadCallback + + IReloadData * + + + + + + + + + + + int + virtual int BaseTexture::generateMips + ()=0 + generateMips + + + + + + + + + + int + virtual int BaseTexture::update + (BaseTexture *src)=0 + update + + BaseTexture * + src + + + + + + + + + + + int + int BaseTexture::calcSubResIdx + (int level, int slice=0) const + calcSubResIdx + + int + level + + + int + slice + 0 + + + + + + + + + + + int + virtual int BaseTexture::updateSubRegion + (BaseTexture *src, int src_subres_idx, int src_x, int src_y, int src_z, int src_w, int src_h, int src_d, int dest_subres_idx, int dest_x, int dest_y, int dest_z)=0 + updateSubRegion + + BaseTexture * + src + + + int + src_subres_idx + + + int + src_x + + + int + src_y + + + int + src_z + + + int + src_w + + + int + src_h + + + int + src_d + + + int + dest_subres_idx + + + int + dest_x + + + int + dest_y + + + int + dest_z + + + + + + + + + + + int + virtual int BaseTexture::updateSubRegionNoOrder + (BaseTexture *src, int src_subres_idx, int src_x, int src_y, int src_z, int src_w, int src_h, int src_d, int dest_subres_idx, int dest_x, int dest_y, int dest_z) + updateSubRegionNoOrder + + BaseTexture * + src + + + int + src_subres_idx + + + int + src_x + + + int + src_y + + + int + src_z + + + int + src_w + + + int + src_h + + + int + src_d + + + int + dest_subres_idx + + + int + dest_x + + + int + dest_y + + + int + dest_z + + + + + + + + + + + int + virtual int BaseTexture::level_count + () const =0 + level_count + + + + + + + + + + int + int BaseTexture::texaddr + (int addrmode) + texaddr + + int + addrmode + + + + + + + + + + + int + int BaseTexture::texaddru + (int addrmode) + texaddru + + int + addrmode + + + + + + + + + + + int + int BaseTexture::texaddrv + (int addrmode) + texaddrv + + int + addrmode + + + + + + + + + + + int + int BaseTexture::texaddrw + (int addrmode) + texaddrw + + int + addrmode + + + + + + + + + + + int + int BaseTexture::texbordercolor + (E3DCOLOR color) + texbordercolor + + E3DCOLOR + color + + + + + + + + + + + int + int BaseTexture::texfilter + (int filtermode) + texfilter + + int + filtermode + + + + + + + + + + + int + int BaseTexture::texmipmap + (int mipmapmode) + texmipmap + + int + mipmapmode + + + + + + + + + + + int + int BaseTexture::texlod + (float mipmaplod) + texlod + + float + mipmaplod + + + + + + + + + + + int + int BaseTexture::setAnisotropy + (int level) + setAnisotropy + + int + level + + + + + + + + + + + void + void BaseTexture::disableSampler + () + disableSampler + + + + + + + + + + bool + bool BaseTexture::isSamplerEnabled + () + isSamplerEnabled + + + + + + + + + + int + virtual int BaseTexture::texmiplevel + (int minlevel, int maxlevel)=0 + texmiplevel + + int + minlevel + + + int + maxlevel + + + + + + + + + + + bool + virtual bool BaseTexture::isCubeArray + () const + isCubeArray + + + + + + + + + + void + virtual void BaseTexture::setReadStencil + (bool) + setReadStencil + + bool + + + + + + + + + + + void + virtual void BaseTexture::setTID + (TEXTUREID) + setTID + + TEXTUREID + + + + + + + + + + + TEXTUREID + virtual TEXTUREID BaseTexture::getTID + () const + getTID + + + + + + + + + + const char * + const char* BaseTexture::getTexName + () const + getTexName + + + + + + + + + + void + virtual void BaseTexture::setResApiName + (const char *) const + setResApiName + setResApiName + + const char * + + + + + + + + + + + int + virtual int BaseTexture::lockimg + (void **, int &stride_bytes, int level, unsigned flags)=0 + lockimg + + void ** + + + int & + stride_bytes + + + int + level + + + unsigned + flags + + + + + + + + + + + int + virtual int BaseTexture::lockimg + (void **, int &stride_bytes, int layer, int level, unsigned flags)=0 + lockimg + + void ** + + + int & + stride_bytes + + + int + layer + + + int + level + + + unsigned + flags + + + + + + + + + + + int + virtual int BaseTexture::unlockimg + () + unlockimg + + + + + + + + + + int + int BaseTexture::unlock + () + unlock + + + + + + + + + + int + virtual int BaseTexture::lockbox + (void **, int &, int &, int, unsigned) + lockbox + + void ** + + + int & + + + int & + + + int + + + unsigned + + + + + + + + + + + int + virtual int BaseTexture::unlockbox + () + unlockbox + + + + + + + + + + int + virtual int BaseTexture::getinfo + (TextureInfo &info, int level=0) const =0 + getinfo + + TextureInfo & + info + + + int + level + 0 + + + + + + + + + + + + + typename T + + + int + int BaseTexture::lockimgEx + (T **p, int &stride_bytes, int level=0, unsigned flags=TEXLOCK_DEFAULT) + lockimgEx + + T ** + p + + + int & + stride_bytes + + + int + level + 0 + + + unsigned + flags + TEXLOCK_DEFAULT + + + + + + + + + + + BaseTexture * + virtual BaseTexture* BaseTexture::makeTmpTexResCopy + (int, int, int, int, bool=false) + makeTmpTexResCopy + + int + + + int + + + int + + + int + + + bool + false + + + + +created temporary BaseTexture with texture res object with given dimensions (texture format and texture subtype is used from original) + + + + + + + void + virtual void BaseTexture::replaceTexResObject + (BaseTexture *&new_tex) + replaceTexResObject + + BaseTexture *& + new_tex + + +replaces texture res object with new one of new_tex and then destroys new_tex (destruction may be delayed by driver) + + + + + + + + + bool + virtual bool BaseTexture::allocateTex + () + allocateTex + +forces allocation of texture resource; return true if tex allocated and ready for use + + + + + + + + + void + virtual void BaseTexture::discardTex + () + discardTex + +discards texture and returns it to STUB state + + + + + + + + + bool + virtual bool BaseTexture::downSize + (int width, int height, int depth, int mips, unsigned start_src_level, unsigned level_offset) + downSize + + int + width + + + int + height + + + int + depth + + + int + mips + + + unsigned + start_src_level + + + unsigned + level_offset + + + + + + + + + + + bool + virtual bool BaseTexture::upSize + (int width, int height, int depth, int mips, unsigned start_src_level, unsigned level_offset) + upSize + + int + width + + + int + height + + + int + depth + + + int + mips + + + unsigned + start_src_level + + + unsigned + level_offset + + + + + + + + + + + + BaseTexture::BaseTexture + ()=default + BaseTexture + + + + + + + + + + + BaseTexture::BaseTexture + (BaseTexture &&)=default + BaseTexture + + BaseTexture && + + + + + + + + + + + BaseTexture & + BaseTexture& BaseTexture::operator= + (BaseTexture &&)=default + operator= + + BaseTexture && + + + + + + + + + + + + + int + static int BaseTexture::calcSubResIdx + (int level, int slice, int mip_levels) + calcSubResIdx + + int + level + + + int + slice + + + int + mip_levels + + + + + + + + + + + + + + BaseTexture::~BaseTexture + () override + ~BaseTexture + + + + + + + + + + int + virtual int BaseTexture::texaddrImpl + (int addrmode)=0 + texaddrImpl + + int + addrmode + + + + + + + + + + + int + virtual int BaseTexture::texaddruImpl + (int addrmode)=0 + texaddruImpl + + int + addrmode + + + + + + + + + + + int + virtual int BaseTexture::texaddrvImpl + (int addrmode)=0 + texaddrvImpl + + int + addrmode + + + + + + + + + + + int + virtual int BaseTexture::texaddrwImpl + (int) + texaddrwImpl + + int + + + + + + + + + + + int + virtual int BaseTexture::texbordercolorImpl + (E3DCOLOR)=0 + texbordercolorImpl + + E3DCOLOR + + + + + + + + + + + int + virtual int BaseTexture::texfilterImpl + (int filtermode)=0 + texfilterImpl + + int + filtermode + + + + + + + + + + + int + virtual int BaseTexture::texmipmapImpl + (int mipmapmode)=0 + texmipmapImpl + + int + mipmapmode + + + + + + + + + + + int + virtual int BaseTexture::texlodImpl + (float mipmaplod)=0 + texlodImpl + + float + mipmaplod + + + + + + + + + + + int + virtual int BaseTexture::setAnisotropyImpl + (int level)=0 + setAnisotropyImpl + + int + level + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BaseTextureallocateTex + BaseTextureBaseTexture + BaseTextureBaseTexture + BaseTexturecalcSubResIdx + BaseTexturecalcSubResIdx + BaseTextureD3dResource + BaseTextureD3dResource + BaseTexturedestroy + BaseTexturedisableSampler + BaseTexturediscardTex + BaseTexturedownSize + BaseTexturegenerateMips + BaseTexturegetinfo + BaseTexturegetResName + BaseTexturegetTexName + BaseTexturegetTID + BaseTextureisCubeArray + BaseTextureisSamplerEnabled + BaseTexturelevel_count + BaseTexturelockbox + BaseTexturelockimg + BaseTexturelockimg + BaseTexturelockimgEx + BaseTexturemakeTmpTexResCopy + BaseTextureoperator= + BaseTextureoperator= + BaseTexturereplaceTexResObject + BaseTextureressize + BaseTexturerestype + BaseTexturesamplerEnabled + BaseTexturesetAnisotropy + BaseTexturesetAnisotropyImpl + BaseTexturesetReadStencil + BaseTexturesetReloadCallback + BaseTexturesetResApiName + BaseTexturesetResName + BaseTexturesetResName + BaseTexturesetTID + BaseTextureTEX_COPIED + BaseTexturetexaddr + BaseTexturetexaddrImpl + BaseTexturetexaddru + BaseTexturetexaddruImpl + BaseTexturetexaddrv + BaseTexturetexaddrvImpl + BaseTexturetexaddrw + BaseTexturetexaddrwImpl + BaseTexturetexbordercolor + BaseTexturetexbordercolorImpl + BaseTexturetexfilter + BaseTexturetexfilterImpl + BaseTexturetexlod + BaseTexturetexlodImpl + BaseTexturetexmiplevel + BaseTexturetexmipmap + BaseTexturetexmipmapImpl + BaseTextureunlock + BaseTextureunlockbox + BaseTextureunlockimg + BaseTextureupdate + BaseTextureupdateSubRegion + BaseTextureupdateSubRegionNoOrder + BaseTextureupSize + BaseTexture~BaseTexture + BaseTexture~D3dResource + + + diff --git a/breathe/doxygen/d3dAPI/xml/class_d3_d_r_e_s_i_d.xml b/breathe/doxygen/d3dAPI/xml/class_d3_d_r_e_s_i_d.xml new file mode 100644 index 000000000..5db7ceee5 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/class_d3_d_r_e_s_i_d.xml @@ -0,0 +1,384 @@ + + + + D3DRESID + dag_resId.h + +
Comparison operators
+ IDs are totally ordered w.r.t. the underlying representation to allow for use in ordered containers. No semantic meaning is attached to the ordering. + + + bool + bool D3DRESID::operator== + (const D3DRESID &rhs) const + operator== + + const D3DRESID & + rhs + + + + + + + + + + + bool + bool D3DRESID::operator!= + (const D3DRESID &rhs) const + operator!= + + const D3DRESID & + rhs + + + + + + + + + + + bool + bool D3DRESID::operator< + (const D3DRESID &rhs) const + operator< + + const D3DRESID & + rhs + + + + + + + + + + + bool + bool D3DRESID::operator> + (const D3DRESID &rhs) const + operator> + + const D3DRESID & + rhs + + + + + + + + + +
+ + + unsigned + unsigned D3DRESID::handle + + handle + = INVALID_ID + + + + + + + + + + + + constexpr + constexpr D3DRESID::D3DRESID + ()=default + D3DRESID + +Constructs an invalid resource ID. + + + + + + + + + + D3DRESID::D3DRESID + (const D3DRESID &rhs)=default + D3DRESID + + const D3DRESID & + rhs + + + + + + + + + + + + D3DRESID::D3DRESID + (D3DRESID &&rhs)=default + D3DRESID + + D3DRESID && + rhs + + + + + + + + + + + D3DRESID & + D3DRESID& D3DRESID::operator= + (const D3DRESID &)=default + operator= + + const D3DRESID & + + + + + + + + + + + D3DRESID & + D3DRESID& D3DRESID::operator= + (D3DRESID &&)=default + operator= + + D3DRESID && + + + + + + + + + + + constexpr + constexpr D3DRESID::D3DRESID + (unsigned h) + D3DRESID + + unsigned + h + + +Conversion from the underlying representation. + + + + + + + + + + D3DRESID::operator unsigned + () const + operator unsigned + +Conversion to the underlying representation. + + + + + + + + + + D3DRESID::operator bool + () const + operator bool + +Checks validity of the handle (it still might be broken though) + + + + + + + + + void + void D3DRESID::reset + () + reset + +Resets the resource ID to an invalid state. + + + + + + + + + unsigned + unsigned D3DRESID::index + () const + index + +Gets the entry index for this ID. + + + + + + + + + unsigned + unsigned D3DRESID::generation + () const + generation + +Gets the entry value generation for this ID. + + + + + + + + + bool + bool D3DRESID::checkMarkerBit + () const + checkMarkerBit + +Checks whether the ID is not broken (generation MUST be odd) + + + + + + + + + + + D3DRESID + static D3DRESID D3DRESID::make + (unsigned index, unsigned gen) + make + + unsigned + index + + + unsigned + gen + + +Creates a new resource ID from an index and a generation. + + + + +index + + +The resource manager entry index + + + + +gen + + +The generation counter for the resource + + + +A new resource ID + + + + + + + + + D3DRESID + static D3DRESID D3DRESID::fromIndex + (unsigned index) + fromIndex + + unsigned + index + + +Creates a new resource ID from an index. + + +The generation counter is acquired from the resource manager entry corresponding to the index. + +index + + +The resource manager entry index + + + +A new resource ID + + + + + + + + + +An indirect identifier for a resource. + + +Resource IDs are used to indirectly identify resources in the engine. The indirection is then used for streaming and stubbing out resources which are not yet loaded. E.g. binding SRVs to shaders is usually done through the shader var system, which in turn uses resource IDs and not raw texture object pointers. Consists of an index for an entry inside the resource manager and a generation counter to distinguish between different resources stored within the same slot. For most uses these details are of little importance. + + + + + + D3DRESIDcheckMarkerBit + D3DRESIDD3DRESID + D3DRESIDD3DRESID + D3DRESIDD3DRESID + D3DRESIDD3DRESID + D3DRESIDfromIndex + D3DRESIDgeneration + D3DRESIDhandle + D3DRESIDindex + D3DRESIDmake + D3DRESIDoperator bool + D3DRESIDoperator unsigned + D3DRESIDoperator!= + D3DRESIDoperator< + D3DRESIDoperator= + D3DRESIDoperator= + D3DRESIDoperator== + D3DRESIDoperator> + D3DRESIDreset + +
+
diff --git a/breathe/doxygen/d3dAPI/xml/class_d3d_resource.xml b/breathe/doxygen/d3dAPI/xml/class_d3d_resource.xml new file mode 100644 index 000000000..4ab48f410 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/class_d3d_resource.xml @@ -0,0 +1,230 @@ + + + + D3dResource + BaseTexture + Sbuffer + + + String + String D3dResource::statName + + statName + + + + + + + + + + + + void + virtual void D3dResource::destroy + ()=0 + destroy + + + + + + + + + + int + virtual int D3dResource::restype + () const =0 + restype + restype + + + + + + + + + + int + virtual int D3dResource::ressize + () const =0 + ressize + + + + + + + + + + const char * + const char* D3dResource::getResName + () const + getResName + + + + + + + + + + void + void D3dResource::setResName + (const char *name) + setResName + + const char * + name + + + + + + + + + + + void + void D3dResource::setResName + (const char *name, int size) + setResName + + const char * + name + + + int + size + + + + + + + + + + + void + virtual void D3dResource::setResApiName + (const char *) const + setResApiName + setResApiName + + const char * + + + + + + + + + + + + D3dResource::D3dResource + ()=default + D3dResource + + + + + + + + + + + D3dResource::D3dResource + (D3dResource &&)=default + D3dResource + + D3dResource && + + + + + + + + + + + D3dResource & + D3dResource& D3dResource::operator= + (D3dResource &&)=default + operator= + + D3dResource && + + + + + + + + + + + + + + virtual D3dResource::~D3dResource + () + ~D3dResource + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D3dResourceD3dResource + D3dResourceD3dResource + D3dResourcedestroy + D3dResourcegetResName + D3dResourceoperator= + D3dResourceressize + D3dResourcerestype + D3dResourcesetResApiName + D3dResourcesetResName + D3dResourcesetResName + D3dResourcestatName + D3dResource~D3dResource + + + diff --git a/breathe/doxygen/d3dAPI/xml/class_driver3d_init_callback.xml b/breathe/doxygen/d3dAPI/xml/class_driver3d_init_callback.xml new file mode 100644 index 000000000..49a397768 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/class_driver3d_init_callback.xml @@ -0,0 +1,357 @@ + + + + Driver3dInitCallback + dag_info.h + Driver3dInitCallback::RenderSize + Driver3dInitCallback::VersionRange + + + bool(*)() + using Driver3dInitCallback::NeedStereoRenderFunc = bool (*)() + + NeedStereoRenderFunc + +Function pointer type for checking if stereo rendering is needed. + + + + + + + + + int(*)() + using Driver3dInitCallback::StereoRenderDimensionFunc = int (*)() + + StereoRenderDimensionFunc + +Function pointer type for getting the dimension of stereo rendering. + + + + + + + + + const char *(*)() + using Driver3dInitCallback::StereoRenderExtensionsFunc = const char *(*)() + + StereoRenderExtensionsFunc + +Function pointer type for getting the extensions for stereo rendering. + + + + + + + + + VersionRange(*)() + using Driver3dInitCallback::StereoRenderVersionsFunc = VersionRange (*)() + + StereoRenderVersionsFunc + + + +Function pointer type for getting the supported versions for stereo rendering + + + + + + + int64_t(*)() + using Driver3dInitCallback::StereoRenderAdapterFunc = int64_t (*)() + + StereoRenderAdapterFunc + +Function pointer type for getting the adapter for stereo rendering. + + + + + + + + + + + void + virtual void Driver3dInitCallback::verifyResolutionSettings + (int &ref_scr_wdt, int &ref_scr_hgt, int base_scr_wdt, int base_scr_hgt, bool window_mode) const + verifyResolutionSettings + + int & + ref_scr_wdt + + + int & + ref_scr_hgt + + + int + base_scr_wdt + + + int + base_scr_hgt + + + bool + window_mode + + +Verifies the resolution settings. + + + + +ref_scr_wdt + + +The reference screen width + + + + +ref_scr_hgt + + +The reference screen height + + + + +base_scr_wdt + + +The base screen width + + + + +base_scr_hgt + + +The base screen height + + + + +window_mode + + +Flag indicating if the window mode is enabled + + + + + + + + + + + int + virtual int Driver3dInitCallback::validateDesc + (Driver3dDesc &desc) const =0 + validateDesc + + Driver3dDesc & + desc + + +Validates the driver description. + + + + +desc + + +The driver description to validate + + + +something + +TodoThis fucntion is not used anywhere. Remove it? + + + + + + + + int + virtual int Driver3dInitCallback::compareDesc + (Driver3dDesc &A, Driver3dDesc &B) const =0 + compareDesc + + Driver3dDesc & + A + + + Driver3dDesc & + B + + +Compares two driver descriptions. + + + + +A + + +The first driver description + + + + +B + + +The second driver description + + + +something + +TodoThis fucntion is not used anywhere. Remove it? + + + + + + + + bool + virtual bool Driver3dInitCallback::desiredStereoRender + () const + desiredStereoRender + +Checks if stereo rendering is desired. + + +True if stereo rendering is desired, false otherwise + + + + + + + + + int64_t + virtual int64_t Driver3dInitCallback::desiredAdapter + () const + desiredAdapter + +Gets the desired adapter. + + +The desired adapter ID + + + + + + + + + RenderSize + virtual RenderSize Driver3dInitCallback::desiredRendererSize + () const + desiredRendererSize + +Gets the desired size of the renderer. + + +The desired size of the renderer + + + + + + + + + const char * + virtual const char* Driver3dInitCallback::desiredRendererDeviceExtensions + () const + desiredRendererDeviceExtensions + +Gets the desired device extensions for the renderer. + + +The desired device extensions for the renderer + + + + + + + + + const char * + virtual const char* Driver3dInitCallback::desiredRendererInstanceExtensions + () const + desiredRendererInstanceExtensions + +Gets the desired instance extensions for the renderer. + + +The desired instance extensions for the renderer + + + + + + + + + VersionRange + virtual VersionRange Driver3dInitCallback::desiredRendererVersionRange + () const + desiredRendererVersionRange + +Gets the desired version range for the renderer. + + +The desired version range for the renderer + + + + + + + + + +Callback class for initializing the 3D driver. + + + + + + Driver3dInitCallbackcompareDesc + Driver3dInitCallbackdesiredAdapter + Driver3dInitCallbackdesiredRendererDeviceExtensions + Driver3dInitCallbackdesiredRendererInstanceExtensions + Driver3dInitCallbackdesiredRendererSize + Driver3dInitCallbackdesiredRendererVersionRange + Driver3dInitCallbackdesiredStereoRender + Driver3dInitCallbackNeedStereoRenderFunc + Driver3dInitCallbackStereoRenderAdapterFunc + Driver3dInitCallbackStereoRenderDimensionFunc + Driver3dInitCallbackStereoRenderExtensionsFunc + Driver3dInitCallbackStereoRenderVersionsFunc + Driver3dInitCallbackvalidateDesc + Driver3dInitCallbackverifyResolutionSettings + + + diff --git a/breathe/doxygen/d3dAPI/xml/class_driver_code.xml b/breathe/doxygen/d3dAPI/xml/class_driver_code.xml new file mode 100644 index 000000000..c754d9021 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/class_driver_code.xml @@ -0,0 +1,777 @@ + + + + DriverCode + dag_driverCode.h + + + int + int DriverCode::value + + value + +Stores the id value of the currently active driver. + + + + + + + + + + + constexpr + constexpr DriverCode::DriverCode + (int v) + DriverCode + + int + v + + +Private constructor, use make to create DriverCode instances. + + + + + + + + + + + + DriverCode::DriverCode + ()=default + DriverCode + +Enables support for default construction, using any operation on a default constructed DriverCode is undefined behavior. + + + + + + + + + + DriverCode::DriverCode + (const DriverCode &)=default + DriverCode + + const DriverCode & + + +Enables copy construction support. + + + + + + + + + DriverCode & + DriverCode& DriverCode::operator= + (const DriverCode &)=default + operator= + + const DriverCode & + + +Enables copy operation support. + + + + + + + + + unsigned + unsigned DriverCode::asFourCC + () const + asFourCC + + + +Returns the currently stored id value. Currently stored id value as four character code integer. + +For Null and Undefined driver this is either all 0 or all 0xFF. + + + + + + + + + + + typename T + + + constexpr bool + constexpr bool DriverCode::is + (T t) const + is + + T + t + + + + +Runs the matcher of t on the currently stored id value and returns its result. + +t + + +Matcher that should be run with the stored id value. + + + +Returns the result of the matcher of t. + + + + + + + + + + + typename T + + + constexpr bool + constexpr bool DriverCode::operator== + (T t) const + operator== + + T + t + + + + +Runs the matcher of t on the currently stored id value and returns its result. + +t + + +Matcher that should be run with the stored id value. + + + +Returns the result of the matcher of t. + + + + + + + + + + + typename T + + + constexpr bool + constexpr bool DriverCode::operator!= + (T t) const + operator!= + + T + t + + + + +Runs the matcher of t on the currently stored id value and returns its inverted result. + +t + + +Matcher that should be run with the stored id value. + + + +Returns the inverted result of the matcher of t. + + + + + + + + + + + typename T + + + d3d::drivercode::matcher::Map< T > + d3d::drivercode::matcher::Map<T> DriverCode::map + () const + map + + + +Creates a d3d::drivercode::matcher::Map to map driver code matchers to values. + +T + + +The type of the value that should be generated by a match. + + + +A d3d::drivercode::matcher::Map value that can be used to chain matchers and value pairs and check if anything was matched and retrieve the value. + + + + + + + + + + + typename T + + + typename D + + + d3d::drivercode::matcher::Map< T > + d3d::drivercode::matcher::Map<T> DriverCode::map + (D d, T &&v) const + map + + D + d + + + T && + v + + + + +Creates a d3d::drivercode::matcher::Map to with directly passing in the first map expression. + +d + + +The matcher that should match the driver code value against. + + + + +v + + +The value that should be moved into d3d::drivercode::matcher::Map storage should the matcher of d return true. + + + +A d3d::drivercode::matcher::Map value that can be used to chain matchers and value pairs and check if anything was matched and retrieve the value. + + + + + + + + + + + typename T + + + typename D + + + d3d::drivercode::matcher::Map< T > + d3d::drivercode::matcher::Map<T> DriverCode::map + (D d, const T &v) const + map + + D + d + + + const T & + v + + + + +Creates a d3d::drivercode::matcher::Map to with directly passing in the first map expression. + +d + + +The matcher that should match the driver code value against. + + + + +v + + +The value that should be moved into the d3d::drivercode::matcher::Map storage should the matcher of d return true. + + + +A d3d::drivercode::matcher::Map value that can be used to chain matchers and value pairs and check if anything was matched and retrieve the value. + + + + + + + + + + + typename D + + + size_t + N + N + + + d3d::drivercode::matcher::Map< const char * > + d3d::drivercode::matcher::Map<const char *> DriverCode::map + (D d, const char(&v)[N]) const + map + + D + d + + + const char(&) + v + [N] + + + + +Creates a d3d::drivercode::matcher::Map to with directly passing in the first map expression. This is a specialized version for strings, it will yield a const char * and takes an const array of chars. + +d + + +The matcher that should match the driver code value against. + + + + +v + + +The string of which the pointer should be stored in d3d::drivercode::matcher::Map storage should the matcher of d return true. + + + +A d3d::drivercode::matcher::Map value that can be used to chain matchers and value pairs and check if anything was matched and retrieve the value. + + + + + + + + + + + typename T + + + typename D + + + typename C + + + d3d::drivercode::matcher::EnableIf<!d3d::drivercode::matcher::SameAs< T, C >::value, d3d::drivercode::matcher::Map< T > >::Type + d3d::drivercode::matcher::EnableIf<!d3d::drivercode::matcher::SameAs<T, C>::value, d3d::drivercode::matcher::Map<T> >::Type DriverCode::map + (D d, C &&callable) const + map + + D + d + + + C && + callable + + + + +Creates a d3d::drivercode::matcher::Map to with directly passing in the first map expression. + +d + + +The matcher that should match the driver code value against. + + + + +callable + + +A generator callable that is invoked when the matcher of d returns true. Its returned value will be passed to the constructor of T. + + + +A d3d::drivercode::matcher::Map value that can be used to chain matchers and value pairs and check if anything was matched and retrieve the value. + + + + + + + + + + + typename T + + + typename D + + + typename A1 + + + typename A2 + + + typename... + As + As + + + d3d::drivercode::matcher::Map< T > + d3d::drivercode::matcher::Map<T> DriverCode::map + (D d, A1 &&a1, A2 &&a2, As &&...as) + map + + D + d + + + A1 && + a1 + + + A2 && + a2 + + + As &&... + as + + + + +Creates a d3d::drivercode::matcher::Map to with directly passing in the first map expression. +Invokes the constructor of T should the matcher of d return true for a in-place construction of T in the storage of the returned d3d::drivercode::matcher::Map. + +d + + +The matcher that should match the driver code value against. + + + + +a1 +a2 +as + + +Arguments passed to the constructor of T should the matcher of d return true. + + + +A d3d::drivercode::matcher::Map value that can be used to chain matchers and value pairs and check if anything was matched and retrieve the value. + + + + + + + + + d3d::drivercode::matcher::FirstMatch + d3d::drivercode::matcher::FirstMatch DriverCode::match + () const + match + + + +Creates a DriverCodeFirstMatch to match matchers against the driver code value. A DriverCodeFirstMatch value that can be used to chain matchers and check if a callable was called. + + + + + + + + + + + typename D + + + typename T + + + d3d::drivercode::matcher::FirstMatch + d3d::drivercode::matcher::FirstMatch DriverCode::match + (D d, T &&callable) const + match + + D + d + + + T && + callable + + + + +Creates a DriverCodeFirstMatch with directly passing in the first match expression. + +d + + +The matcher that should match the driver code value against. + + + + +callable + + +The callable that is called should the matcher of d return true. + + + +A DriverCodeFirstMatch value that can be used to chain additional matchers and check if a callable was called. + + + + + + + + + d3d::drivercode::matcher::FirstMatch + d3d::drivercode::matcher::FirstMatch DriverCode::matchFirst + () const + matchFirst + + + +Creates a DriverCodeFirstMatch to match matchers against the driver code value. A DriverCodeFirstMatch value that can be used to chain matchers and check if a callable was called. + + + + + + + + + + + typename D + + + typename T + + + d3d::drivercode::matcher::FirstMatch + d3d::drivercode::matcher::FirstMatch DriverCode::matchFirst + (D d, T &&callable) const + matchFirst + + D + d + + + T && + callable + + + + +Creates a DriverCodeFirstMatch with directly passing in the first match expression. + +d + + +The matcher that should match the driver code value against. + + + + +callable + + +The callable that is called should the matcher of d return true. + + + +A DriverCodeFirstMatch value that can be used to chain additional matchers and check if a callable was called. + + + + + + + + + d3d::drivercode::matcher::AllMatch + d3d::drivercode::matcher::AllMatch DriverCode::matchAll + () const + matchAll + + + +Creates a DriverCodeAllMatch to match matchers against the driver code value. A DriverCodeAllMatch value that can be used to chain matchers and check if any callable was called. + + + + + + + + + + + typename D + + + typename T + + + d3d::drivercode::matcher::AllMatch + d3d::drivercode::matcher::AllMatch DriverCode::matchAll + (D d, T &&callable) const + matchAll + + D + d + + + T && + callable + + + + +Creates a DriverCodeAllMatch with directly passing in the first match expression. + +d + + +The matcher that should match the driver code value against. + + + + +callable + + +The callable that is called should the matcher of d return true. + + + +A DriverCodeAllMatch value that can be used to chain additional matchers and check if any callable was called. + + + + + + + + + + + + + typename D + + + constexpr DriverCode + static constexpr DriverCode DriverCode::make + (D d) + make + + D + d + + + + +Creates a DriverCode value with the ID of the given driver matcher. + +d + + +The matcher that should be used to generate the driver id value, only id matchers work (drivercode::matcher::ID and drivercode::matcher::ConstID). + + + +A DriverCode value that will match true for the matcher of the input parameter. + + + + + + + + + + + +Stores which D3D driver is currently active. + + + + DriverCodeasFourCC + DriverCodeDriverCode + DriverCodeDriverCode + DriverCodeDriverCode + DriverCodeis + DriverCodemake + DriverCodemap + DriverCodemap + DriverCodemap + DriverCodemap + DriverCodemap + DriverCodemap + DriverCodematch + DriverCodematch + DriverCodematchAll + DriverCodematchAll + DriverCodematchFirst + DriverCodematchFirst + DriverCodeoperator!= + DriverCodeoperator= + DriverCodeoperator== + DriverCodevalue + + + diff --git a/breathe/doxygen/d3dAPI/xml/class_driver_net_manager.xml b/breathe/doxygen/d3dAPI/xml/class_driver_net_manager.xml new file mode 100644 index 000000000..c08955c1d --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/class_driver_net_manager.xml @@ -0,0 +1,115 @@ + + + + DriverNetManager + dag_driverNetManager.h + + + + virtual DriverNetManager::~DriverNetManager + ()=default + ~DriverNetManager + +Destructor. + + + + + + + + + void + virtual void DriverNetManager::sendPsoCacheBlkSync + (const DataBlock &cache_blk)=0 + sendPsoCacheBlkSync + + const DataBlock & + cache_blk + + +Send a cache block to the server. + + +This method is used to send a cache block to the server. A call of this method blocks the thread execution until the data is sent or the request is timed out. The blocking behavior is necessarty to ensure that all the data is send and it doesn't affect the players experience since we are sending data only when the driver shuts down. + + +cache_blk + + +The cache data block to send + + + + + + + + + + + void + virtual void DriverNetManager::sendHttpEventLog + (const char *type, const void *data, uint32_t size, Json::Value *meta)=0 + sendHttpEventLog + + const char * + type + + + const void * + data + + + uint32_t + size + + + Json::Value * + meta + + +Send an event log to the server. + + +This method is used to send gpu crash dump from DX12 driver, but other event log collections also could be used. + + + + + + + void + virtual void DriverNetManager::addFileToCrashReport + (const char *path)=0 + addFileToCrashReport + + const char * + path + + +Adds a file to the crash report. + + +It is used to send GPU crash dumps from DX12 driver. + + + + + + + +The DriverNetManager interface. + + +This class is responsible for providing network related functionality for d3d drivers. Some drivers need to send data from clients for debugging and infrastructure purposes. Methods of the class are very specific currently because we have a very strict set of use cases that we want to cover. + + + + DriverNetManageraddFileToCrashReport + DriverNetManagersendHttpEventLog + DriverNetManagersendPsoCacheBlkSync + DriverNetManager~DriverNetManager + + + diff --git a/breathe/doxygen/d3dAPI/xml/class_resource_barrier_desc.xml b/breathe/doxygen/d3dAPI/xml/class_resource_barrier_desc.xml new file mode 100644 index 000000000..7ccbed546 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/class_resource_barrier_desc.xml @@ -0,0 +1,1731 @@ + + + + ResourceBarrierDesc + dag_barrier.h + + + constexpr unsigned + constexpr unsigned ResourceBarrierDesc::single_element_count + + single_element_count + = ~0u + + + + + + + + + + + + Sbuffer * + Sbuffer* ResourceBarrierDesc::buffer + + buffer + + + + + + + + + + Sbuffer *const * + Sbuffer* const* ResourceBarrierDesc::buffers + + buffers + + + + + + + + + + BaseTexture * + BaseTexture* ResourceBarrierDesc::texture + + texture + + + + + + + + + + BaseTexture *const * + BaseTexture* const* ResourceBarrierDesc::textures + + textures + + + + + + + + + + RaytraceBottomAccelerationStructure * + RaytraceBottomAccelerationStructure* ResourceBarrierDesc::blas + + blas + + + + + + + + + + RaytraceBottomAccelerationStructure *const * + RaytraceBottomAccelerationStructure* const* ResourceBarrierDesc::blases + + blases + + + + + + + + + + ResourceBarrier + ResourceBarrier ResourceBarrierDesc::bufferState + + bufferState + + + + + + + + + + const ResourceBarrier * + const ResourceBarrier* ResourceBarrierDesc::bufferStates + + bufferStates + + + + + + + + + + ResourceBarrier + ResourceBarrier ResourceBarrierDesc::textureState + + textureState + + + + + + + + + + const ResourceBarrier * + const ResourceBarrier* ResourceBarrierDesc::textureStates + + textureStates + + + + + + + + + + unsigned + unsigned ResourceBarrierDesc::textureSubResIndex + + textureSubResIndex + + + + + + + + + + const unsigned * + const unsigned* ResourceBarrierDesc::textureSubResIndices + + textureSubResIndices + + + + + + + + + + unsigned + unsigned ResourceBarrierDesc::textureSubResRange + + textureSubResRange + + + + + + + + + + const unsigned * + const unsigned* ResourceBarrierDesc::textureSubResRanges + + textureSubResRanges + + + + + + + + + + + + union ResourceBarrierDesc::@3 + union ResourceBarrierDesc::@3 ResourceBarrierDesc::@4 + + @4 + + + + + + + + + + union ResourceBarrierDesc::@5 + union ResourceBarrierDesc::@5 ResourceBarrierDesc::@6 + + @6 + + + + + + + + + + union ResourceBarrierDesc::@7 + union ResourceBarrierDesc::@7 ResourceBarrierDesc::@8 + + @8 + + + + + + + + + + union ResourceBarrierDesc::@9 + union ResourceBarrierDesc::@9 ResourceBarrierDesc::@10 + + @10 + + + + + + + + + + union ResourceBarrierDesc::@11 + union ResourceBarrierDesc::@11 ResourceBarrierDesc::@12 + + @12 + + + + + + + + + + union ResourceBarrierDesc::@13 + union ResourceBarrierDesc::@13 ResourceBarrierDesc::@14 + + @14 + + + + + + + + + + union ResourceBarrierDesc::@15 + union ResourceBarrierDesc::@15 ResourceBarrierDesc::@16 + + @16 + + + + + + + + + + unsigned + unsigned ResourceBarrierDesc::bufferCount + + bufferCount + = 0 + + + + + + + + + + unsigned + unsigned ResourceBarrierDesc::textureCount + + textureCount + = 0 + + + + + + + + + + unsigned + unsigned ResourceBarrierDesc::blasCount + + blasCount + = 0 + + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + () + ResourceBarrierDesc + +Default constructor for ResourceBarrierDesc. + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (const ResourceBarrierDesc &)=default + ResourceBarrierDesc + + const ResourceBarrierDesc & + + +Copy constructor for ResourceBarrierDesc. + + + + +desc + + +The ResourceBarrierDesc object to be copied. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (Sbuffer *buf, ResourceBarrier rb) + ResourceBarrierDesc + + Sbuffer * + buf + + + ResourceBarrier + rb + + +Constructor for ResourceBarrierDesc with a single buffer and resource barrier. + + + + +buf + + +The buffer. + + + + +rb + + +The resource barrier. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (Sbuffer *const *bufs, const ResourceBarrier *rb, unsigned count) + ResourceBarrierDesc + + Sbuffer *const * + bufs + + + const ResourceBarrier * + rb + + + unsigned + count + + +Constructor for ResourceBarrierDesc with an array of buffers and resource barriers. + + + + +bufs + + +The array of buffers. + + + + +rb + + +The array of resource barriers. + + + + +count + + +The number of buffers and resource barriers. + + + + + + + + + + + + + unsigned + N + N + + + + ResourceBarrierDesc::ResourceBarrierDesc + (Sbuffer *(&bufs)[N], ResourceBarrier(&rb)[N]) + ResourceBarrierDesc + + Sbuffer *(&) + bufs + [N] + + + ResourceBarrier(&) + rb + [N] + + +Constructor for ResourceBarrierDesc with a fixed-size array of buffers and resource barriers. + + + + +N + + +The size of the fixed-size array. + + + + + +bufs + + +The fixed-size array of buffers. + + + + +rb + + +The fixed-size array of resource barriers. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (std::initializer_list< Sbuffer * > bufs, std::initializer_list< ResourceBarrier > rb) + ResourceBarrierDesc + + std::initializer_list< Sbuffer * > + bufs + + + std::initializer_list< ResourceBarrier > + rb + + +Constructor for ResourceBarrierDesc with initializer lists of buffers and resource barriers. + + + + +bufs + + +The initializer list of buffers. + + + + +rb + + +The initializer list of resource barriers. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (BaseTexture *tex, ResourceBarrier rb, unsigned sub_res_index, unsigned sub_res_range) + ResourceBarrierDesc + + BaseTexture * + tex + + + ResourceBarrier + rb + + + unsigned + sub_res_index + + + unsigned + sub_res_range + + +Constructor for ResourceBarrierDesc with a single texture, resource barrier, and sub-resource index and range. + + + + +tex + + +The texture. + + + + +rb + + +The resource barrier. + + + + +sub_res_index + + +The sub-resource index. + + + + +sub_res_range + + +The sub-resource range. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (BaseTexture *const *texs, const ResourceBarrier *rb, const unsigned *sub_res_index, const unsigned *sub_res_range, unsigned count) + ResourceBarrierDesc + + BaseTexture *const * + texs + + + const ResourceBarrier * + rb + + + const unsigned * + sub_res_index + + + const unsigned * + sub_res_range + + + unsigned + count + + +Constructor for ResourceBarrierDesc with an array of textures, resource barriers, sub-resource indices, and sub-resource ranges. + + + + +texs + + +The array of textures. + + + + +rb + + +The array of resource barriers. + + + + +sub_res_index + + +The array of sub-resource indices. + + + + +sub_res_range + + +The array of sub-resource ranges. + + + + +count + + +The number of textures, resource barriers, sub-resource indices, and sub-resource ranges. + + + + + + + + + + + + + unsigned + N + N + + + + ResourceBarrierDesc::ResourceBarrierDesc + (BaseTexture *(&texs)[N], ResourceBarrier(&rb)[N], unsigned(&sub_res_index)[N], unsigned(&sub_res_range)[N]) + ResourceBarrierDesc + + BaseTexture *(&) + texs + [N] + + + ResourceBarrier(&) + rb + [N] + + + unsigned(&) + sub_res_index + [N] + + + unsigned(&) + sub_res_range + [N] + + +Constructor for ResourceBarrierDesc with a fixed-size array of textures, resource barriers, sub-resource indices, and sub-resource ranges. + + + + +N + + +The size of the fixed-size array. + + + + + +texs + + +The fixed-size array of textures. + + + + +rb + + +The fixed-size array of resource barriers. + + + + +sub_res_index + + +The fixed-size array of sub-resource indices. + + + + +sub_res_range + + +The fixed-size array of sub-resource ranges. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (std::initializer_list< BaseTexture * > texs, std::initializer_list< ResourceBarrier > rb, std::initializer_list< unsigned > sub_res_index, std::initializer_list< unsigned > sub_res_range) + ResourceBarrierDesc + + std::initializer_list< BaseTexture * > + texs + + + std::initializer_list< ResourceBarrier > + rb + + + std::initializer_list< unsigned > + sub_res_index + + + std::initializer_list< unsigned > + sub_res_range + + +Constructor for ResourceBarrierDesc with initializer lists of textures, resource barriers, sub-resource indices, and sub-resource ranges. + + + + +texs + + +The initializer list of textures. + + + + +rb + + +The initializer list of resource barriers. + + + + +sub_res_index + + +The initializer list of sub-resource indices. + + + + +sub_res_range + + +The initializer list of sub-resource ranges. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (RaytraceBottomAccelerationStructure *blas) + ResourceBarrierDesc + + RaytraceBottomAccelerationStructure * + blas + + +Constructor for ResourceBarrierDesc with a single bottom level acceleration structure. + + + + +blas + + +The bottom level acceleration structure. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (RaytraceBottomAccelerationStructure *const *blases, unsigned count) + ResourceBarrierDesc + + RaytraceBottomAccelerationStructure *const * + blases + + + unsigned + count + + +Constructor for ResourceBarrierDesc with an array of bottom level acceleration structures. + + + + +blases + + +The array of bottom level acceleration structures. + + + + +count + + +The number of bottom level acceleration structures. + + + + + + + + + + + + + unsigned + N + N + + + + ResourceBarrierDesc::ResourceBarrierDesc + (RaytraceBottomAccelerationStructure *(&blases)[N]) + ResourceBarrierDesc + + RaytraceBottomAccelerationStructure *(&) + blases + [N] + + +Constructor for ResourceBarrierDesc with a fixed-size array of bottom level acceleration structures. + + + + +N + + +The size of the fixed-size array. + + + + + +blases + + +The fixed-size array of bottom level acceleration structures. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (std::initializer_list< RaytraceBottomAccelerationStructure * > blases) + ResourceBarrierDesc + + std::initializer_list< RaytraceBottomAccelerationStructure * > + blases + + +Constructor for ResourceBarrierDesc with initializer lists of bottom level acceleration structures. + + + + +blases + + +The initializer list of bottom level acceleration structures. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (Sbuffer *const *bufs, const ResourceBarrier *b_rb, unsigned b_count, BaseTexture *const *texs, const ResourceBarrier *t_rb, const unsigned *t_sub_res_index, const unsigned *t_sub_res_range, unsigned t_count) + ResourceBarrierDesc + + Sbuffer *const * + bufs + + + const ResourceBarrier * + b_rb + + + unsigned + b_count + + + BaseTexture *const * + texs + + + const ResourceBarrier * + t_rb + + + const unsigned * + t_sub_res_index + + + const unsigned * + t_sub_res_range + + + unsigned + t_count + + +Constructor for ResourceBarrierDesc with arrays of buffers, resource barriers, textures, resource barriers, sub-resource indices, and sub-resource ranges. + + + + +bufs + + +The array of buffers. + + + + +b_rb + + +The array of resource barriers for buffers. + + + + +b_count + + +The number of buffers and resource barriers for buffers. + + + + +texs + + +The array of textures. + + + + +t_rb + + +The array of resource barriers for textures. + + + + +t_sub_res_index + + +The array of sub-resource indices for textures. + + + + +t_sub_res_range + + +The array of sub-resource ranges for textures. + + + + +t_count + + +The number of textures, resource barriers for textures, sub-resource indices for textures, and sub-resource ranges for textures. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (Sbuffer *buf, ResourceBarrier b_rb, BaseTexture *const *texs, const ResourceBarrier *t_rb, const unsigned *t_sub_res_index, const unsigned *t_sub_res_range, unsigned t_count) + ResourceBarrierDesc + + Sbuffer * + buf + + + ResourceBarrier + b_rb + + + BaseTexture *const * + texs + + + const ResourceBarrier * + t_rb + + + const unsigned * + t_sub_res_index + + + const unsigned * + t_sub_res_range + + + unsigned + t_count + + +Constructor for ResourceBarrierDesc with a single buffer, resource barrier, array of textures, resource barriers, sub-resource indices, and sub-resource ranges. + + + + +buf + + +The buffer. + + + + +b_rb + + +The resource barrier for the buffer. + + + + +texs + + +The array of textures. + + + + +t_rb + + +The array of resource barriers for textures. + + + + +t_sub_res_index + + +The array of sub-resource indices for textures. + + + + +t_sub_res_range + + +The array of sub-resource ranges for textures. + + + + +t_count + + +The number of textures, resource barriers for textures, sub-resource indices for textures, and sub-resource ranges for textures. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (Sbuffer *const *bufs, const ResourceBarrier *b_rb, unsigned b_count, BaseTexture *tex, ResourceBarrier t_rb, unsigned t_sub_res_index, unsigned t_sub_res_range) + ResourceBarrierDesc + + Sbuffer *const * + bufs + + + const ResourceBarrier * + b_rb + + + unsigned + b_count + + + BaseTexture * + tex + + + ResourceBarrier + t_rb + + + unsigned + t_sub_res_index + + + unsigned + t_sub_res_range + + +Constructor for ResourceBarrierDesc with arrays of buffers, resource barriers, a single texture, resource barrier, sub-resource index, and sub-resource range. + + + + +bufs + + +The array of buffers. + + + + +b_rb + + +The array of resource barriers for buffers. + + + + +b_count + + +The number of buffers and resource barriers for buffers. + + + + +tex + + +The texture. + + + + +t_rb + + +The resource barrier for the texture. + + + + +t_sub_res_index + + +The sub-resource index for the texture. + + + + +t_sub_res_range + + +The sub-resource range for the texture. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (Sbuffer *buf, ResourceBarrier b_rb, BaseTexture *tex, ResourceBarrier t_rb, unsigned t_sub_res_index, unsigned t_sub_res_range) + ResourceBarrierDesc + + Sbuffer * + buf + + + ResourceBarrier + b_rb + + + BaseTexture * + tex + + + ResourceBarrier + t_rb + + + unsigned + t_sub_res_index + + + unsigned + t_sub_res_range + + +Constructor for ResourceBarrierDesc with a single buffer, resource barrier, a single texture, resource barrier, sub-resource index, and sub-resource range. + + + + +buf + + +The buffer. + + + + +b_rb + + +The resource barrier for the buffer. + + + + +tex + + +The texture. + + + + +t_rb + + +The resource barrier for the texture. + + + + +t_sub_res_index + + +The sub-resource index for the texture. + + + + +t_sub_res_range + + +The sub-resource range for the texture. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (std::initializer_list< Sbuffer * > bufs, std::initializer_list< ResourceBarrier > buf_rb, std::initializer_list< BaseTexture * > texs, std::initializer_list< ResourceBarrier > tex_rb, std::initializer_list< unsigned > sub_res_index, std::initializer_list< unsigned > sub_res_range) + ResourceBarrierDesc + + std::initializer_list< Sbuffer * > + bufs + + + std::initializer_list< ResourceBarrier > + buf_rb + + + std::initializer_list< BaseTexture * > + texs + + + std::initializer_list< ResourceBarrier > + tex_rb + + + std::initializer_list< unsigned > + sub_res_index + + + std::initializer_list< unsigned > + sub_res_range + + +Constructor for ResourceBarrierDesc with initializer lists of buffers, resource barriers, textures, resource barriers, sub-resource indices, and sub-resource ranges. + + + + +bufs + + +The initializer list of buffers. + + + + +buf_rb + + +The initializer list of resource barriers for buffers. + + + + +texs + + +The initializer list of textures. + + + + +tex_rb + + +The initializer list of resource barriers for textures. + + + + +sub_res_index + + +The initializer list of sub-resource indices for textures. + + + + +sub_res_range + + +The initializer list of sub-resource ranges for textures. + + + + + + + + + + + + ResourceBarrierDesc::ResourceBarrierDesc + (ResourceBarrier rb) + ResourceBarrierDesc + + ResourceBarrier + rb + + +Constructor for ResourceBarrierDesc with a single resource barrier. The expected use case is that 'rb' has the RB_FLUSH_UAV flag set for all pending UAV access. + + + + +rb + + +The resource barrier. + + + + + + + + + + + + + typename T + + + void + void ResourceBarrierDesc::enumerateBufferBarriers + (T clb) + enumerateBufferBarriers + + T + clb + + +Enumerates the buffer barriers and calls the provided callback function for each buffer barrier. + + + + +T + + +The type of the callback function. + + + + + +clb + + +The callback function that takes a buffer and a resource barrier as arguments. + + + + + + + + + + + + + typename T + + + void + void ResourceBarrierDesc::enumerateTextureBarriers + (T clb) + enumerateTextureBarriers + + T + clb + + +Enumerates the texture barriers and calls the provided callback function for each texture barrier. + + + + +T + + +The type of the callback function. + + + + + +clb + + +The callback function that takes a texture, a resource barrier, a sub-resource index, and a sub-resource range as arguments. + + + + + + + + + + + + + typename T + + + void + void ResourceBarrierDesc::enumerateBlasBarriers + (T clb) + enumerateBlasBarriers + + T + clb + + +Enumerates the bottom level acceleration structure barriers and calls the provided callback function for each bottom level acceleration structure barrier. + + + + +T + + +The type of the callback function. + + + + + +clb + + +The callback function that takes a bottom level acceleration structure as argument. + + + + + + + + + + + +The ResourceBarrierDesc class represents the input type for 'd3d::resource_barrier'. It allows one function to handle multiple input data layouts. Inputs can be simple single values, arrays of values, pointers to values, and initializer lists of values. To interpret the stored values, use the provided enumerate functions to get the buffer and texture barriers. For more details on resource barriers, see https://info.gaijin.lan/display/DE4/Resource+and+Execution+Barriers. + + + + + + + + + + + + + buffer + buffers + + + texture + textures + + + + + + + + + + + + + + + + + + + + + + + + ResourceBarrierDescblas + ResourceBarrierDescblasCount + ResourceBarrierDescblases + ResourceBarrierDescbuffer + ResourceBarrierDescbufferCount + ResourceBarrierDescbuffers + ResourceBarrierDescbufferState + ResourceBarrierDescbufferStates + ResourceBarrierDescenumerateBlasBarriers + ResourceBarrierDescenumerateBufferBarriers + ResourceBarrierDescenumerateTextureBarriers + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescResourceBarrierDesc + ResourceBarrierDescsingle_element_count + ResourceBarrierDesctexture + ResourceBarrierDesctextureCount + ResourceBarrierDesctextures + ResourceBarrierDesctextureState + ResourceBarrierDesctextureStates + ResourceBarrierDesctextureSubResIndex + ResourceBarrierDesctextureSubResIndices + ResourceBarrierDesctextureSubResRange + ResourceBarrierDesctextureSubResRanges + + + diff --git a/breathe/doxygen/d3dAPI/xml/class_sbuffer.xml b/breathe/doxygen/d3dAPI/xml/class_sbuffer.xml new file mode 100644 index 000000000..0c00138de --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/class_sbuffer.xml @@ -0,0 +1,737 @@ + + + + Sbuffer + D3dResource + ResourceChecker + dag_buffers.h + Sbuffer::IReloadData + + + bool + virtual bool Sbuffer::setReloadCallback + (IReloadData *) + setReloadCallback + + IReloadData * + + +Set the Reload Callback object for the buffer. + + +true if the callback was successfully set, false otherwise + + + + + + + + + int + int Sbuffer::restype + () const override final + restype + restype + +Returns the type of the D3dResource. It is always RES3D_SBUF for Sbuffer objects. + + +Todomake RES3D_ a enum class. +int RES3D_SBUF. + + + + + + + + + int + virtual int Sbuffer::lock + (uint32_t ofs_bytes, uint32_t size_bytes, void **p, int flags)=0 + lock + + uint32_t + ofs_bytes + + + uint32_t + size_bytes + + + void ** + p + + + int + flags + + + + +Locks a portion of the buffer for reading or writing. +It is better to use lock_sbuffer method for more safety. + + + +ofs_bytes + + +The offset in bytes from the beginning of the buffer. + + + + +size_bytes + + +The size in bytes of the portion to lock. The whole buffer will be locked if 0. + + + + +p + + +A pointer to a void pointer that will receive the locked memory address. + + + + +flags + + +Additional flags to control the locking behavior. + + + +An integer representing the result of the lock operation. 0 if the lock failed, 1 if the lock succeeded. + + + + + + + + + int + virtual int Sbuffer::unlock + ()=0 + unlock + + + +Unlocks the buffer after it has been locked. +An integer representing the result of the unlock operation. 0 if the unlock failed, 1 if the unlock succeeded. + + + + + + + + + int + virtual int Sbuffer::getFlags + () const =0 + getFlags + +Get the Flags object. + + +Flags that control the buffer behavior and was set on a buffer creation. + + + + + + + + + const char * + const char* Sbuffer::getBufName + () const + getBufName + +Get the Buffer name. + + +The name of the buffer. + + + + + + + + + int + virtual int Sbuffer::getElementSize + () const + getElementSize + +Get the size of the structured buffer element. + + +This method works only for structured buffers. +The size of the buffer element. + + + + + + + + + int + virtual int Sbuffer::getNumElements + () const + getNumElements + +Get the amount of elements in the structured buffer. + + +This method works only for structured buffers. +int amount of elements in the buffer. + + + + + + + + + bool + virtual bool Sbuffer::copyTo + (Sbuffer *dest) + copyTo + + Sbuffer * + dest + + +Copy current buffer to another buffer. The sizes of the buffers should match exactly. + + + + +dest + + +The destination buffer. + + + +true if the buffer was successfully copied, false otherwise. + + + + + + + + + bool + virtual bool Sbuffer::copyTo + (Sbuffer *dest, uint32_t dst_ofs_bytes, uint32_t src_ofs_bytes, uint32_t size_bytes) + copyTo + + Sbuffer * + dest + + + uint32_t + dst_ofs_bytes + + + uint32_t + src_ofs_bytes + + + uint32_t + size_bytes + + +Copy a portion of the buffer to another buffer. Both buffers must be large enough for the copied portion offset and size. + + + + +dest + + +The destination buffer. + + + + +dst_ofs_bytes + + +The offset in bytes from the beginning of the destination buffer. + + + + +src_ofs_bytes + + +The offset in bytes from the beginning of the source buffer. + + + + +size_bytes + + +The size in bytes of the portion to copy. + + + +true if the buffer was successfully copied, false otherwise. + + + + + + + + + + + typename T + + + int + int Sbuffer::lockEx + (uint32_t ofs_bytes, uint32_t size_bytes, T **p, int flags) + lockEx + + uint32_t + ofs_bytes + + + uint32_t + size_bytes + + + T ** + p + + + int + flags + + +Locks a portion of the buffer for reading or writing. + + +It is better to use lock_sbuffer method for more safety. + + + +T + + +type of the data to lock + + + + + +ofs_bytes + + +offset in bytes from the beginning of the buffer + + + + +size_bytes + + +size in bytes of the portion to lock + + + + +p + + +pointer to a pointer that will receive the locked memory address + + + + +flags + + +additional flags to control the locking behavior VBLOCK_* + + + +int 0 if the lock failed, 1 if the lock succeeded + + + + + + + + + bool + bool Sbuffer::updateDataWithLock + (uint32_t ofs_bytes, uint32_t size_bytes, const void *src, int lockFlags) + updateDataWithLock + + uint32_t + ofs_bytes + + + uint32_t + size_bytes + + + const void * + src + + + int + lockFlags + + +Updates buffer content with the specified data using lock/memcpy/unlock. + + + + +ofs_bytes + + +offset in bytes from the beginning of the buffer + + + + +size_bytes + + +size in bytes of the portion to update. Must be non-zero. + + + + +src + + +pointer to the source data + + + + +lockFlags + + +additional flags to control the locking behavior VBLOCK_* + + + +true if the buffer was successfully updated, false otherwise + + + + + + + + + bool + virtual bool Sbuffer::updateData + (uint32_t ofs_bytes, uint32_t size_bytes, const void *src, uint32_t lockFlags) + updateData + + uint32_t + ofs_bytes + + + uint32_t + size_bytes + + + const void * + src + + + uint32_t + lockFlags + + +Updates buffer content with the specified data using lock/memcpy/unlock. + + + + +ofs_bytes + + +offset in bytes from the beginning of the buffer + + + + +size_bytes + + +size in bytes of the portion to update. Must be non-zero. + + + + +src + + +pointer to the source data + + + + +lockFlags + + +additional flags to control the locking behavior VBLOCK_* + + + +true if the buffer was successfully updated, false otherwise + + + + + + + + + int + int Sbuffer::lock + (uint32_t ofs_bytes, uint32_t size_bytes, uint16_t **p, int flags) + lock + + uint32_t + ofs_bytes + + + uint32_t + size_bytes + + + uint16_t ** + p + + + int + flags + + +Lock method specified for index buffer with 16-bit indices. + + + + +ofs_bytes + + +offset in bytes from the beginning of the buffer + + + + +size_bytes + + +size in bytes of the portion to lock + + + + +p + + +pointer to a pointer that will receive the locked memory address + + + + +flags + + +additional flags to control the locking behavior VBLOCK_* + + + +int 0 if the lock failed, 1 if the lock succeeded + + + + + + + + + int + int Sbuffer::lock32 + (uint32_t ofs_bytes, uint32_t size_bytes, uint32_t **p, int flags) + lock32 + + uint32_t + ofs_bytes + + + uint32_t + size_bytes + + + uint32_t ** + p + + + int + flags + + +Lock method specified for index buffer with 32-bit indices. + + + + +ofs_bytes + + +offset in bytes from the beginning of the buffer + + + + +size_bytes + + +size in bytes of the portion to lock + + + + +p + + +pointer to a pointer that will receive the locked memory address + + + + +flags + + +additional flags to control the locking behavior VBLOCK_* + + + +int 0 if the lock failed, 1 if the lock succeeded + + + + + + + + + + + + Sbuffer::~Sbuffer + () override + ~Sbuffer + + + + + + + + + + +The Sbuffer class represents a buffer used for 3D rendering. + + +This class is derived from the D3dResource class and provides functionality for locking and unlocking the buffer, retrieving buffer information, and updating buffer data. It represents all possible buffer types in the engine. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SbuffercheckLockParams + SbuffercopyTo + SbuffercopyTo + SbufferD3dResource + SbufferD3dResource + Sbufferdestroy + SbuffergetBufName + SbuffergetElementSize + SbuffergetFlags + SbuffergetNumElements + SbuffergetResName + Sbufferinit + Sbufferlock + Sbufferlock + Sbufferlock32 + SbufferlockEx + Sbufferoperator= + Sbufferreport + Sbufferressize + Sbufferrestype + SbuffersetReloadCallback + SbuffersetResApiName + SbuffersetResName + SbuffersetResName + Sbufferunlock + SbufferupdateData + SbufferupdateDataWithLock + Sbuffer~D3dResource + Sbuffer~Sbuffer + + + diff --git a/breathe/doxygen/d3dAPI/xml/classd3d_1_1_auto_pipeline_async_compile_feedback.xml b/breathe/doxygen/d3dAPI/xml/classd3d_1_1_auto_pipeline_async_compile_feedback.xml new file mode 100644 index 000000000..e3efa10ee --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/classd3d_1_1_auto_pipeline_async_compile_feedback.xml @@ -0,0 +1,143 @@ + + + + d3d::AutoPipelineAsyncCompileFeedback + dag_async_pipeline.h + + + bool + allow_compute_pipelines + allow_compute_pipelines + true + + + + + bool + bool d3d::AutoPipelineAsyncCompileFeedback< allow_compute_pipelines >::needRetry + + needRetry + + + + + + + + + + bool + bool d3d::AutoPipelineAsyncCompileFeedback< allow_compute_pipelines >::supported + + supported + + + + + + + + + + bool + bool d3d::AutoPipelineAsyncCompileFeedback< allow_compute_pipelines >::externalNeedRetry + + externalNeedRetry + + + + + + + + + + + + bool + bool d3d::AutoPipelineAsyncCompileFeedback< allow_compute_pipelines >::isRetryNeeded + () const + isRetryNeeded + + + + + + + + + + bool + bool d3d::AutoPipelineAsyncCompileFeedback< allow_compute_pipelines >::isExternalRetryNeeded + () const + isExternalRetryNeeded + + + + + + + + + + bool + bool d3d::AutoPipelineAsyncCompileFeedback< allow_compute_pipelines >::isSupported + () const + isSupported + + + + + + + + + + + d3d::AutoPipelineAsyncCompileFeedback< allow_compute_pipelines >::AutoPipelineAsyncCompileFeedback + (uint32_t *feedback_ptr) + AutoPipelineAsyncCompileFeedback + + uint32_t * + feedback_ptr + + + + + + + + + + + + d3d::AutoPipelineAsyncCompileFeedback< allow_compute_pipelines >::~AutoPipelineAsyncCompileFeedback + () + ~AutoPipelineAsyncCompileFeedback + + + + + + + + + + +When feedback supported, enables async pipeline compilation and captures async compilation skip count into feedback_ptr in its scope needRetry field will be set if any pipeline was skipped in previous frames externalNeedRetry field will be set if any other (external) AsyncCompileFeedback in frame has needRetry set when feedback not supported, does nothing when allow_compute_pipelines is false, only graphics pipelines are async compiled (compute compiled as is) + + + + + + d3d::AutoPipelineAsyncCompileFeedbackAutoPipelineAsyncCompileFeedback + d3d::AutoPipelineAsyncCompileFeedbackexternalNeedRetry + d3d::AutoPipelineAsyncCompileFeedbackisExternalRetryNeeded + d3d::AutoPipelineAsyncCompileFeedbackisRetryNeeded + d3d::AutoPipelineAsyncCompileFeedbackisSupported + d3d::AutoPipelineAsyncCompileFeedbackneedRetry + d3d::AutoPipelineAsyncCompileFeedbacksupported + d3d::AutoPipelineAsyncCompileFeedback~AutoPipelineAsyncCompileFeedback + + + diff --git a/breathe/doxygen/d3dAPI/xml/classd3d_1_1drivercode_1_1matcher_1_1_all_match.xml b/breathe/doxygen/d3dAPI/xml/classd3d_1_1drivercode_1_1matcher_1_1_all_match.xml new file mode 100644 index 000000000..cc4272066 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/classd3d_1_1drivercode_1_1matcher_1_1_all_match.xml @@ -0,0 +1,461 @@ + + + + d3d::drivercode::matcher::AllMatch + + + int + int d3d::drivercode::matcher::AllMatch::value + + value + +Driver code value, stored as a int to break up dependency to the DriverCode type. + + + + + + + + + bool + bool d3d::drivercode::matcher::AllMatch::wasMatched + + wasMatched + = false + +Keeps track if anything was matched. + + + + + + + + + + + class + friend class ::DriverCode + + ::DriverCode + + ::DriverCode + + + + + + + + + + + + + + + typename T + + + void + void d3d::drivercode::matcher::AllMatch::onMatch + (bool did_match, T &&callable) + onMatch + + bool + did_match + + + T && + callable + + + + +Match execution handler, will update internal state and call callable when did_match is true. + +did_match + + +Indicator if a match was found, when true callable will be called and the internal state is updated to indicate that there was a match. + + + + +callable + + +Is called when did_match is true. + + + + + + + + + + + + + typename D + + + constexpr bool + constexpr bool d3d::drivercode::matcher::AllMatch::is + (D d) const + is + + D + d + + + + +Helper to shorten matcher invocation. + +d + + +Matcher to invoke with the driver code state value. + + + +The value returned by the matchers d is method. + + + + + + + + + + + + d3d::drivercode::matcher::AllMatch::AllMatch + (int v) + AllMatch + + int + v + + + + +Create a new object with a stored driver code value. + +v + + +Driver code value that is used on the matchers. + + + + + + + + + + + + + typename D + + + typename T + + + + d3d::drivercode::matcher::AllMatch::AllMatch + (int v, D d, T &&callable) + AllMatch + + int + v + + + D + d + + + T && + callable + + + + +Create a new object with a stored driver code value and a initial match call. + +v + + +Driver code value that is used on the matchers. + + + + +d + + +The matcher that should be immediately be matched on v. + + + + +callable + + +The callable that should be executed when the matcher d matches the driver code value v. + + + + + + + + + + + + + + d3d::drivercode::matcher::AllMatch::AllMatch + ()=delete + AllMatch + +Default construction is not allowed. + + + + + + + + + + d3d::drivercode::matcher::AllMatch::AllMatch + (const AllMatch &)=delete + AllMatch + + const AllMatch & + + +Disallow copying. + + + + + + + + + + d3d::drivercode::matcher::AllMatch::AllMatch + (AllMatch &&other)=default + AllMatch + + AllMatch && + other + + +Allow moving. + + + + + + + + + AllMatch & + AllMatch& d3d::drivercode::matcher::AllMatch::operator= + (const AllMatch &)=delete + operator= + + const AllMatch & + + +Disallow copy assignment. + + + + + + + + + AllMatch & + AllMatch& d3d::drivercode::matcher::AllMatch::operator= + (AllMatch &&)=delete + operator= + + AllMatch && + + +Disallow move assignment. + + + + + + + + + + + typename D + + + typename T + + + AllMatch & + AllMatch& d3d::drivercode::matcher::AllMatch::operator() + (D d, T &&callable) + operator() + + D + d + + + T && + callable + + + + +Executes the matcher of d with the driver code state and if it yields a match it will execute the callable of callable. + +d + + +The matcher that should match the driver code value against. + + + + +callable + + +The callable that is called should the matcher of d return true. + + + +A reference to this, so that multiple matches can be chained. + + + + + + + + + + + typename D + + + typename T + + + AllMatch & + AllMatch& d3d::drivercode::matcher::AllMatch::match + (D d, T &&callable) + match + + D + d + + + T && + callable + + + + +Executes the matcher of d with the driver code state and if it yields a match it will execute the callable of callable. + +d + + +The matcher that should match the driver code value against. + + + + +callable + + +The callable that is called should the matcher of d return true. + + + +A reference to this, so that multiple matches can be chained. + + + + + + + + + + d3d::drivercode::matcher::AllMatch::operator bool + () const + operator bool + + + +Explicit bool operator allows easy checking if any matcher was matched and any callable was executed. True when any matcher was matched and any callable was called. + + + + + + + + + bool + bool d3d::drivercode::matcher::AllMatch::operator! + () const + operator! + + + +Not operator overload allows easy checking if no matcher was matched and no callable was executed. True when no matcher was matched and no callable was called. + + + + + + + + + + + + + + + d3d::drivercode::matcher::AllMatch::DriverCode + d3d::drivercode::matcher::AllMatchAllMatch + d3d::drivercode::matcher::AllMatchAllMatch + d3d::drivercode::matcher::AllMatchAllMatch + d3d::drivercode::matcher::AllMatchAllMatch + d3d::drivercode::matcher::AllMatchAllMatch + d3d::drivercode::matcher::AllMatchis + d3d::drivercode::matcher::AllMatchmatch + d3d::drivercode::matcher::AllMatchonMatch + d3d::drivercode::matcher::AllMatchoperator bool + d3d::drivercode::matcher::AllMatchoperator! + d3d::drivercode::matcher::AllMatchoperator() + d3d::drivercode::matcher::AllMatchoperator= + d3d::drivercode::matcher::AllMatchoperator= + d3d::drivercode::matcher::AllMatchvalue + d3d::drivercode::matcher::AllMatchwasMatched + + + diff --git a/breathe/doxygen/d3dAPI/xml/classd3d_1_1drivercode_1_1matcher_1_1_first_match.xml b/breathe/doxygen/d3dAPI/xml/classd3d_1_1drivercode_1_1matcher_1_1_first_match.xml new file mode 100644 index 000000000..1996a017a --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/classd3d_1_1drivercode_1_1matcher_1_1_first_match.xml @@ -0,0 +1,461 @@ + + + + d3d::drivercode::matcher::FirstMatch + + + int + int d3d::drivercode::matcher::FirstMatch::value + + value + +Driver code value, stored as a int to break up dependency to the DriverCode type. + + + + + + + + + bool + bool d3d::drivercode::matcher::FirstMatch::wasMatched + + wasMatched + = false + +Keeps track if anything was matched. + + + + + + + + + + + class + friend class ::DriverCode + + ::DriverCode + + ::DriverCode + + + + + + + + + + + + + + + typename T + + + void + void d3d::drivercode::matcher::FirstMatch::onMatch + (bool did_match, T &&callable) + onMatch + + bool + did_match + + + T && + callable + + + + +Match execution handler, will update internal state and call callable when did_match is true and its internal state indicated that no matcher did match in previous match attempts. + +did_match + + +Indicator if a match was found. + + + + +callable + + +Is called when did_match is true and the internal state indicated that no matcher did match in previous match attempts. + + + + + + + + + + + + + typename D + + + constexpr bool + constexpr bool d3d::drivercode::matcher::FirstMatch::is + (D d) const + is + + D + d + + + + +Helper to shorten matcher invocation. + +d + + +Matcher to invoke with the driver code state value. + + + +The value returned by the matchers d is method. + + + + + + + + + + + + d3d::drivercode::matcher::FirstMatch::FirstMatch + (int v) + FirstMatch + + int + v + + + + +Create a new object with a stored driver code value. + +v + + +Driver code value that is used on the matchers. + + + + + + + + + + + + + typename D + + + typename T + + + + d3d::drivercode::matcher::FirstMatch::FirstMatch + (int v, D d, T &&callable) + FirstMatch + + int + v + + + D + d + + + T && + callable + + + + +Create a new object with a stored driver code value and a initial match call. + +v + + +Driver code value that is used on the matchers. + + + + +d + + +The matcher that should be immediately be matched on v. + + + + +callable + + +The callable that should be executed when the matcher d matches the driver code value v. + + + + + + + + + + + + + + d3d::drivercode::matcher::FirstMatch::FirstMatch + ()=delete + FirstMatch + +Default construction is not allowed. + + + + + + + + + + d3d::drivercode::matcher::FirstMatch::FirstMatch + (const FirstMatch &)=delete + FirstMatch + + const FirstMatch & + + +Disallow copying. + + + + + + + + + + d3d::drivercode::matcher::FirstMatch::FirstMatch + (FirstMatch &&other)=default + FirstMatch + + FirstMatch && + other + + +Allow moving. + + + + + + + + + FirstMatch & + FirstMatch& d3d::drivercode::matcher::FirstMatch::operator= + (const FirstMatch &)=delete + operator= + + const FirstMatch & + + +Disallow copy assignment. + + + + + + + + + FirstMatch & + FirstMatch& d3d::drivercode::matcher::FirstMatch::operator= + (FirstMatch &&)=delete + operator= + + FirstMatch && + + +Disallow move assignment. + + + + + + + + + + + typename D + + + typename T + + + FirstMatch & + FirstMatch& d3d::drivercode::matcher::FirstMatch::operator() + (D d, T &&callable) + operator() + + D + d + + + T && + callable + + + + +Executes the matcher of d with the driver code state and if it yields a match and there was no previous match it will execute the callable of callable. + +d + + +The matcher that should match the driver code value against. + + + + +callable + + +The callable that is called should the matcher of d return true and no matcher was found in previous matches. + + + +A reference to this, so that multiple matches can be chained. + + + + + + + + + + + typename D + + + typename T + + + FirstMatch & + FirstMatch& d3d::drivercode::matcher::FirstMatch::match + (D d, T &&callable) + match + + D + d + + + T && + callable + + + + +Executes the matcher of d with the driver code state and if it yields a match and there was no previous match it will execute the callable of callable. + +d + + +The matcher that should match the driver code value against. + + + + +callable + + +The callable that is called should the matcher of d return true and no matcher was found in previous matches. + + + +A reference to this, so that multiple matches can be chained. + + + + + + + + + + d3d::drivercode::matcher::FirstMatch::operator bool + () const + operator bool + + + +Explicit bool operator allows easy checking if a matcher was matched and a callable was executed. True when a matcher was matched and a callable was called. + + + + + + + + + bool + bool d3d::drivercode::matcher::FirstMatch::operator! + () const + operator! + + + +Not operator overload allows easy checking if no matcher was matched and no callable was executed. True when no matcher was matched and no callable was called. + + + + + + + + + + + + + + + d3d::drivercode::matcher::FirstMatch::DriverCode + d3d::drivercode::matcher::FirstMatchFirstMatch + d3d::drivercode::matcher::FirstMatchFirstMatch + d3d::drivercode::matcher::FirstMatchFirstMatch + d3d::drivercode::matcher::FirstMatchFirstMatch + d3d::drivercode::matcher::FirstMatchFirstMatch + d3d::drivercode::matcher::FirstMatchis + d3d::drivercode::matcher::FirstMatchmatch + d3d::drivercode::matcher::FirstMatchonMatch + d3d::drivercode::matcher::FirstMatchoperator bool + d3d::drivercode::matcher::FirstMatchoperator! + d3d::drivercode::matcher::FirstMatchoperator() + d3d::drivercode::matcher::FirstMatchoperator= + d3d::drivercode::matcher::FirstMatchoperator= + d3d::drivercode::matcher::FirstMatchvalue + d3d::drivercode::matcher::FirstMatchwasMatched + + + diff --git a/breathe/doxygen/d3dAPI/xml/classd3d_1_1drivercode_1_1matcher_1_1_map.xml b/breathe/doxygen/d3dAPI/xml/classd3d_1_1drivercode_1_1matcher_1_1_map.xml new file mode 100644 index 000000000..e644d44e2 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/classd3d_1_1drivercode_1_1matcher_1_1_map.xml @@ -0,0 +1,1349 @@ + + + + d3d::drivercode::matcher::Map + dag_driverCode.h + + + typename T + + + + + int + int d3d::drivercode::matcher::Map< T >::value + + value + +Driver code value, stored as a int to break up dependency to the DriverCode type. + + + + + + + + + bool + bool d3d::drivercode::matcher::Map< T >::wasMatched + + wasMatched + = false + +Keeps track if anything was matched. + + + + + + + + + unsigned char + unsigned char d3d::drivercode::matcher::Map< T >::memory[sizeof(T)] + [sizeof(T)] + memory + +Raw bytes to store T. + + + + + + + + + + + class + friend class ::DriverCode + + ::DriverCode + + ::DriverCode + + + + + + + + + + + + + T & + T& d3d::drivercode::matcher::Map< T >::object + () + object + + + +Helper to retrieve the stored instance of T. Reference to the store instance of T. + + + + + + + + + void + void d3d::drivercode::matcher::Map< T >::cMove + (bool should_construct, T &&v) + cMove + + bool + should_construct + + + T && + v + + +Conditional move constructor helper. + + +A new instance of T is going to be instantiated when should_construct is true and the internal state indicates that there is no instance stored yet. In this case v will be moved into the parameter of the move constructor of T for the new instance. + +should_construct + + +Indicates if a instance of T should be instantiated or not. + + + + +v + + +May be used as a input for the move constructor of T. + + + + + + + + + + + + + typename C + + + void + void d3d::drivercode::matcher::Map< T >::cContruct + (bool should_construct, C &&generator) + cContruct + + bool + should_construct + + + C && + generator + + +Conditional constructor helper. + + +A new instance of T is going to be instantiated when should_construct is true and the internal state indicates that there is no instance stored yet. In this case generator will be invoked to generate the input of the constructor of T for the new instance. + +should_construct + + +Indicates if a instance of T should be instantiated or not. + + + + +generator + + +When invoked it should generate valid input for the constructor of T. + + + + + + + + + + + + + typename... + Vs + Vs + + + void + void d3d::drivercode::matcher::Map< T >::cEmplace + (bool should_construct, Vs &&...vs) + cEmplace + + bool + should_construct + + + Vs &&... + vs + + + + +Conditional emplace constructor helper. +A new instance of T is going to be instantiated when should_construct is true and the internal state indicates that there is no instance stored yet. In this case vs will be moved into the parameter of the constructor of T for the new instance. + +should_construct + + +Indicates if a instance of T should be instantiated or not. + + + + +vs + + +May be used as a input for the constructor of T. + + + + + + + + + + + + + typename D + + + constexpr bool + constexpr bool d3d::drivercode::matcher::Map< T >::is + (D d) const + is + + D + d + + + + +Helper to shorten matcher invocation. + +d + + +Matcher to invoke with the driver code state value. + + + +The value returned by the matchers d is method. + + + + + + + + + + + + d3d::drivercode::matcher::Map< T >::Map + (int v) + Map + + int + v + + + + +Create a new object with a stored driver code value. + +v + + +Driver code value that is used on the matchers. + + + + + + + + + + + + + typename D + + + + d3d::drivercode::matcher::Map< T >::Map + (int v, D d, T &&val) + Map + + int + v + + + D + d + + + T && + val + + + + + + + + + + + + + typename D + + + + d3d::drivercode::matcher::Map< T >::Map + (int v, D d, const T &val) + Map + + int + v + + + D + d + + + const T & + val + + + + + + + + + + + + + typename D + + + typename C + + + + d3d::drivercode::matcher::Map< T >::Map + (int v, D d, C &&callable) + Map + + int + v + + + D + d + + + C && + callable + + + + + + + + + + + + + typename D + + + typename... + Vs + Vs + + + + d3d::drivercode::matcher::Map< T >::Map + (int v, D d, Vs &&...vs) + Map + + int + v + + + D + d + + + Vs &&... + vs + + + + + + + + + + + + + + d3d::drivercode::matcher::Map< T >::Map + ()=delete + Map + +Default construction is not allowed. + + + + + + + + + + d3d::drivercode::matcher::Map< T >::Map + (const Map &)=delete + Map + + const Map & + + +Disallow copying. + + + + + + + + + + d3d::drivercode::matcher::Map< T >::Map + (Map &&other) + Map + + Map && + other + + +Move constructor, will move internally stored object when needed. + + + + + + + + + Map & + Map& d3d::drivercode::matcher::Map< T >::operator= + (const Map &)=delete + operator= + + const Map & + + +Disallow copy assignment. + + + + + + + + + Map & + Map& d3d::drivercode::matcher::Map< T >::operator= + (Map &&)=delete + operator= + + Map && + + +Disallow move assignment. + + + + + + + + + + d3d::drivercode::matcher::Map< T >::~Map + () + ~Map + +Destructor will invoke the destructor of the stored object when any was constructed. + + + + + + + + + + + typename D + + + Map & + Map& d3d::drivercode::matcher::Map< T >::operator() + (D d, T &&v) + operator() + + D + d + + + T && + v + + + + +Maps a matcher to a value. + +d + + +The matcher that should match the driver code value against. + + + + +v + + +The value that should be stored should the matcher indicate a match. + + + +A reference to this, so that multiple matches can be chained. + + + + + + + + + + + typename D + + + typename C + + + EnableIf<!SameAs< T, C >::value, Map & >::Type + EnableIf<!SameAs<T, C>::value, Map &>::Type d3d::drivercode::matcher::Map< T >::operator() + (D d, C &&callable) + operator() + + D + d + + + C && + callable + + + + +Maps a matcher to a generator. + +d + + +The matcher that should match the driver code value against. + + + + +callable + + +Invoked to generate a input parameter for the constructor of T in case when a new instance of T is instantiated. + + + +A reference to this, so that multiple matches can be chained. + + + + + + + + + + + typename D + + + typename... + Vs + Vs + + + Map & + Map& d3d::drivercode::matcher::Map< T >::operator() + (D d, Vs &&...vs) + operator() + + D + d + + + Vs &&... + vs + + + + +Maps a matcher to a set of parameters for the constructor of T. + +d + + +The matcher that should match the driver code value against. + + + + +vs + + +Values passed to the constructor of T in case when a new instance of T is instantiated. + + + +A reference to this, so that multiple matches can be chained. + + + + + + + + + T && + T&& d3d::drivercode::matcher::Map< T >::operator() + (Any, T &&v) + operator() + + Any + + + T && + v + + + + +Maps the drivercode::matcher::Any matcher to a value. + +v + + +A alternative value that may be used when no value of T is stored in this map. + + + +Either the lvalue reference to the maps stored object or the parameter v. + + + + + + + + + T && + T&& d3d::drivercode::matcher::Map< T >::operator() + (Any, const T &v) + operator() + + Any + + + const T & + v + + + + +Maps the drivercode::matcher::Any matcher to a value. + +v + + +A alternative value that may be used when no value of T is stored in this map. + + + +A lvalue reference to the maps stored object. + + + + + + + + + + + typename C + + + EnableIf<!SameAs< T, C >::value, T && >::Type + EnableIf<!SameAs<T, C>::value, T &&>::Type d3d::drivercode::matcher::Map< T >::operator() + (Any, C &&callable) + operator() + + Any + + + C && + callable + + + + +Maps the drivercode::matcher::Any matcher to a generator. + +callable + + +Invoked to generate a input parameter for the constructor of T in case when a new instance of T is instantiated. + + + +A lvalue reference to the maps stored object. + + + + + + + + + + + typename... + Vs + Vs + + + T && + T&& d3d::drivercode::matcher::Map< T >::operator() + (Any, Vs &&...vs) + operator() + + Any + + + Vs &&... + vs + + + + +Maps the drivercode::matcher::Any matcher to a set of parameters for the constructor of T. + +vs + + +Values passed to the constructor of T in case when a new instance of T is instantiated. + + + +A lvalue reference to the maps stored object. + + + + + + + + + + + typename D + + + Map & + Map& d3d::drivercode::matcher::Map< T >::map + (D d, T &&v) + map + + D + d + + + T && + v + + + + +Maps a matcher to a value. + +d + + +The matcher that should match the driver code value against. + + + + +v + + +The value that should be stored should the matcher indicate a match. + + + +A reference to this, so that multiple matches can be chained. + + + + + + + + + + + typename D + + + typename C + + + EnableIf<!SameAs< T, C >::value, Map & >::Type + EnableIf<!SameAs<T, C>::value, Map &>::Type d3d::drivercode::matcher::Map< T >::map + (D d, C &&callable) + map + + D + d + + + C && + callable + + + + +Maps a matcher to a generator. + +d + + +The matcher that should match the driver code value against. + + + + +callable + + +Invoked to generate a input parameter for the constructor of T in case when a new instance of T is instantiated. + + + +A reference to this, so that multiple matches can be chained. + + + + + + + + + + + typename D + + + typename... + Vs + Vs + + + Map & + Map& d3d::drivercode::matcher::Map< T >::map + (D d, Vs &&...vs) + map + + D + d + + + Vs &&... + vs + + + + +Maps a matcher to a set of parameters for the constructor of T. + +d + + +The matcher that should match the driver code value against. + + + + +vs + + +Values passed to the constructor of T in case when a new instance of T is instantiated. + + + +A reference to this, so that multiple matches can be chained. + + + + + + + + + T && + T&& d3d::drivercode::matcher::Map< T >::map + (Any, T &&v) + map + + Any + + + T && + v + + + + +Maps the drivercode::matcher::Any matcher to the driver code. + +v + + +A alternative value that may be used when no value of T is stored in this map. + + + +Either the lvalue reference to the maps stored object or the parameter v. + + + + + + + + + T && + T&& d3d::drivercode::matcher::Map< T >::map + (Any, const T &v) + map + + Any + + + const T & + v + + + + +Maps the drivercode::matcher::Any matcher to a value. + +v + + +A alternative value that may be used when no value of T is stored in this map. + + + +A lvalue reference to the maps stored object. + + + + + + + + + + + typename C + + + EnableIf<!SameAs< T, C >::value, T && >::Type + EnableIf<!SameAs<T, C>::value, T &&>::Type d3d::drivercode::matcher::Map< T >::map + (Any, C &&callable) + map + + Any + + + C && + callable + + + + +Maps the drivercode::matcher::Any matcher to a generator. + +callable + + +Invoked to generate a input parameter for the constructor of T in case when a new instance of T is instantiated. + + + +A lvalue reference to the maps stored object. + + + + + + + + + + + typename... + Vs + Vs + + + T && + T&& d3d::drivercode::matcher::Map< T >::map + (matcher::Any, Vs &&...vs) + map + + matcher::Any + + + Vs &&... + vs + + + + +Maps the drivercode::matcher::Any matcher to a set of parameters for the constructor of T. + +vs + + +Values passed to the constructor of T in case when a new instance of T is instantiated. + + + +A lvalue reference to the maps stored object. + + + + + + + + + + + typename R + + + bool + bool d3d::drivercode::matcher::Map< T >::get + (R &&receiver) + get + + R && + receiver + + + + +When a value was generated by any match, receiver will be invoked and the value will be moved into its input parameter. + +receiver + + +A callable that will be invoked when a value was generated by any match, otherwise it will not be invoked. + + + +When receiver was invoked true, otherwise false. + + + + + + + + + + + typename A + + + bool + bool d3d::drivercode::matcher::Map< T >::get + (A &target) + get + + A & + target + + + + +When a value was generated by any match, this will move the value into target and return true. Otherwise nothing will be done to target and false will be returned. + +target + + +When a value was generated by any match, the value will move the value into this parameter. + + + +When a value was moved to target true, otherwise false. + + + + + + + + + + + typename R + + + bool + bool d3d::drivercode::matcher::Map< T >::operator>> + (R &&receiver) + operator>> + + R && + receiver + + + + +When a value was generated by any match, receiver will be invoked and the value will be moved into its input parameter. + +receiver + + +A callable that will be invoked when a value was generated by any match, otherwise it will not be invoked. + + + +When receiver was invoked true, otherwise false. + + + + + + + + + + + typename A + + + bool + bool d3d::drivercode::matcher::Map< T >::operator>> + (A &target) + operator>> + + A & + target + + + + +When a value was generated by any match, this will move the value into target and return true. Otherwise nothing will be done to target and false will be returned. + +target + + +When a value was generated by any match, the value will move the value into this parameter. + + + +When a value was moved to target true, otherwise false. + + + + + + + + + + + typename R + + + bool + bool d3d::drivercode::matcher::Map< T >::operator() + (R &&receiver) + operator() + + R && + receiver + + + + +When a value was generated by any match, receiver will be invoked and the value will be moved into its input parameter. + +receiver + + +A callable that will be invoked when a value was generated by any match, otherwise it will not be invoked. + + + +When receiver was invoked true, otherwise false. + + + + + + + + + + + typename A + + + bool + bool d3d::drivercode::matcher::Map< T >::operator() + (A &target) + operator() + + A & + target + + + + +When a value was generated by any match, this will move the value into target and return true. Otherwise nothing will be done to target and false will be returned. + +target + + +When a value was generated by any match, the value will move the value into this parameter. + + + +When a value was moved to target true, otherwise false. + + + + + + + + + + + +This type allows easy mappings of driver matchers to a value of the given type T. +The map maps the first mapping, not the most accurate mapping. So order the mapping accordingly. Mappings can either be values directly, emplacement constructor parameters or generators (lambda). + +T + + +Is the type of the value the map should store. Must be move or copyable and either be able to be constructed by copy, move or emplace. + + + + + + + + d3d::drivercode::matcher::Map::DriverCode + d3d::drivercode::matcher::MapcContruct + d3d::drivercode::matcher::MapcEmplace + d3d::drivercode::matcher::MapcMove + d3d::drivercode::matcher::Mapget + d3d::drivercode::matcher::Mapget + d3d::drivercode::matcher::Mapis + d3d::drivercode::matcher::MapMap + d3d::drivercode::matcher::MapMap + d3d::drivercode::matcher::MapMap + d3d::drivercode::matcher::MapMap + d3d::drivercode::matcher::MapMap + d3d::drivercode::matcher::MapMap + d3d::drivercode::matcher::MapMap + d3d::drivercode::matcher::MapMap + d3d::drivercode::matcher::Mapmap + d3d::drivercode::matcher::Mapmap + d3d::drivercode::matcher::Mapmap + d3d::drivercode::matcher::Mapmap + d3d::drivercode::matcher::Mapmap + d3d::drivercode::matcher::Mapmap + d3d::drivercode::matcher::Mapmap + d3d::drivercode::matcher::Mapmemory + d3d::drivercode::matcher::Mapobject + d3d::drivercode::matcher::Mapoperator() + d3d::drivercode::matcher::Mapoperator() + d3d::drivercode::matcher::Mapoperator() + d3d::drivercode::matcher::Mapoperator() + d3d::drivercode::matcher::Mapoperator() + d3d::drivercode::matcher::Mapoperator() + d3d::drivercode::matcher::Mapoperator() + d3d::drivercode::matcher::Mapoperator() + d3d::drivercode::matcher::Mapoperator() + d3d::drivercode::matcher::Mapoperator= + d3d::drivercode::matcher::Mapoperator= + d3d::drivercode::matcher::Mapoperator>> + d3d::drivercode::matcher::Mapoperator>> + d3d::drivercode::matcher::Mapvalue + d3d::drivercode::matcher::MapwasMatched + d3d::drivercode::matcher::Map~Map + + + diff --git a/breathe/doxygen/d3dAPI/xml/classd3d_1_1shadermodel_1_1_version_range_iterator.xml b/breathe/doxygen/d3dAPI/xml/classd3d_1_1shadermodel_1_1_version_range_iterator.xml new file mode 100644 index 000000000..352e6e049 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/classd3d_1_1shadermodel_1_1_version_range_iterator.xml @@ -0,0 +1,255 @@ + + + + d3d::shadermodel::VersionRangeIterator + dag_shaderModelVersion.h + + + typename V + + + typename VersionList + + + + + int + int d3d::shadermodel::VersionRangeIterator< V, VersionList >::index + + index + +Index into the VersionList list of versions. + + + + + + + + + + + constexpr + constexpr d3d::shadermodel::VersionRangeIterator< V, VersionList >::VersionRangeIterator + ()=default + VersionRangeIterator + +Default constructor, leaves type in uninitialized state. + + + + + + + + + constexpr + constexpr d3d::shadermodel::VersionRangeIterator< V, VersionList >::VersionRangeIterator + (const VersionRangeIterator &)=default + VersionRangeIterator + + const VersionRangeIterator & + + +Basic copy constructor. + + + + + + + + + constexpr + constexpr d3d::shadermodel::VersionRangeIterator< V, VersionList >::VersionRangeIterator + (int idx) + VersionRangeIterator + + int + idx + + + + +Constructor which initializes the state with an given index into the list of VersionList. + +idx + + +Index that should be stored in this iterator. + + + + + + + + + + + V + V d3d::shadermodel::VersionRangeIterator< V, VersionList >::operator* + () const + operator* + + + +Dereference operator that will return a value of V. A representation of the value at the VersionList at the currently stored index. + + + + + + + + + VersionRangeIterator & + VersionRangeIterator& d3d::shadermodel::VersionRangeIterator< V, VersionList >::operator++ + () + operator++ + + + +Increment operator, moves the current index to the previous entry of the VersionList type. Reference to an altered this. + + + + + + + + + constexpr VersionRangeIterator + constexpr VersionRangeIterator d3d::shadermodel::VersionRangeIterator< V, VersionList >::operator++ + (int) const + operator++ + + int + + + + +Increment operator, moves the current index to the previous entry of the VersionList type. Copy of this advanced by one. + + + + + + + + + VersionRangeIterator & + VersionRangeIterator& d3d::shadermodel::VersionRangeIterator< V, VersionList >::operator-- + () + operator-- + + + +Increment operator, moves the current index to the next entry of the VersionList type. Reference to an altered this. + + + + + + + + + constexpr VersionRangeIterator + constexpr VersionRangeIterator d3d::shadermodel::VersionRangeIterator< V, VersionList >::operator-- + (int) const + operator-- + + int + + + + +Increment operator, moves the current index to the previous entry of the VersionList type. Copy of this reversed one. + + + + + + + + + + + constexpr friend bool + constexpr friend bool operator== + (const VersionRangeIterator &l, const VersionRangeIterator &r) + operator== + + const VersionRangeIterator & + l + + + const VersionRangeIterator & + r + + + + +Equal compare operator for to VersionRangeIterator. l First value to compare. r Second value to compare. Returns true when l and r do represent the same version value. + + + + + + + + + constexpr friend bool + constexpr friend bool operator!= + (const VersionRangeIterator &l, const VersionRangeIterator &r) + operator!= + + const VersionRangeIterator & + l + + + const VersionRangeIterator & + r + + + + +Not equal compare operator for to VersionRangeIterator. l First value to compare. r Second value to compare. Returns true when l and r do not represent the same version value. + + + + + + + + + + + +Version range iterator. + +V + + +Value type that the iterator represents. \pparam VersionList List of versions that this iterator iterates over. + + + + + + + + d3d::shadermodel::VersionRangeIteratorindex + d3d::shadermodel::VersionRangeIteratoroperator!= + d3d::shadermodel::VersionRangeIteratoroperator* + d3d::shadermodel::VersionRangeIteratoroperator++ + d3d::shadermodel::VersionRangeIteratoroperator++ + d3d::shadermodel::VersionRangeIteratoroperator-- + d3d::shadermodel::VersionRangeIteratoroperator-- + d3d::shadermodel::VersionRangeIteratoroperator== + d3d::shadermodel::VersionRangeIteratorVersionRangeIterator + d3d::shadermodel::VersionRangeIteratorVersionRangeIterator + d3d::shadermodel::VersionRangeIteratorVersionRangeIterator + + + diff --git a/breathe/doxygen/d3dAPI/xml/classd3d_1_1shadermodel_1_1matcher_1_1_basic_map.xml b/breathe/doxygen/d3dAPI/xml/classd3d_1_1shadermodel_1_1matcher_1_1_basic_map.xml new file mode 100644 index 000000000..65634b2f4 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/classd3d_1_1shadermodel_1_1matcher_1_1_basic_map.xml @@ -0,0 +1,950 @@ + + + + d3d::shadermodel::matcher::BasicMap + d3d::shadermodel::matcher::EqualCompare< V > + dag_shaderModelVersion.h + + + typename V + + + typename T + + + typename FinalMapType + + + typename Cmp + EqualCompare<V> + + + + + V + V d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::value + + value + {} + +Value to compare to determine if a match was found or not. + + + + + + + + + bool + bool d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::wasMatched + + wasMatched + = false + +Keeps track if anything was matched. + + + + + + + + + unsigned char + unsigned char d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::memory[sizeof(T)] + [sizeof(T)] + memory + +Raw bytes to store T. + + + + + + + + + + + T & + T& d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::object + () + object + + + +Helper to retrieve the stored instance of T. Reference to the store instance of T. + + + + + + + + + void + void d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::cMove + (bool should_construct, T &&v) + cMove + + bool + should_construct + + + T && + v + + +Conditional move constructor helper. + + +A new instance of T is going to be instantiated when should_construct is true and the internal state indicates that there is no instance stored yet. In this case v will be moved into the parameter of the move constructor of T for the new instance. + +should_construct + + +Indicates if a instance of T should be instantiated or not. + + + + +v + + +May be used as a input for the move constructor of T. + + + + + + + + + + + + + typename C + + + void + void d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::cContruct + (bool should_construct, C &&generator) + cContruct + + bool + should_construct + + + C && + generator + + +Conditional constructor helper. + + +A new instance of T is going to be instantiated when should_construct is true and the internal state indicates that there is no instance stored yet. In this case generator will be invoked to generate the input of the constructor of T for the new instance. + +should_construct + + +Indicates if a instance of T should be instantiated or not. + + + + +generator + + +When invoked it should generate valid input for the constructor of T. + + + + + + + + + + + + + typename... + Vs + Vs + + + void + void d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::cEmplace + (bool should_construct, Vs &&...vs) + cEmplace + + bool + should_construct + + + Vs &&... + vs + + + + +Conditional emplace constructor helper. +A new instance of T is going to be instantiated when should_construct is true and the internal state indicates that there is no instance stored yet. In this case vs will be moved into the parameter of the constructor of T for the new instance. + +should_construct + + +Indicates if a instance of T should be instantiated or not. + + + + +vs + + +May be used as a input for the constructor of T. + + + + + + + + + + + + + + d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::BasicMap + ()=default + BasicMap + +Basic default constructor. + + + + + + + + + + d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::BasicMap + (const BasicMap &)=delete + BasicMap + + const BasicMap & + + +Copy is not allowed as we don't want users to copy maps around. + + + + + + + + + + d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::BasicMap + (BasicMap &&other) + BasicMap + + BasicMap && + other + + + + +Basic move constructor that moves internal state from other to this. + +other + + +Other instance that is used to initialize this, should a value be stored, it is moved to this. + + + + + + + + + + + BasicMap & + BasicMap& d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::operator= + (const BasicMap &)=delete + operator= + + const BasicMap & + + +Copy is not allowed as we don't want users to copy maps around. + + + + + + + + + BasicMap & + BasicMap& d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::operator= + (BasicMap &&)=delete + operator= + + BasicMap && + + +Move is not allowed as we don't want users to move maps around. + + + + + + + + + + d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::BasicMap + (const V &v) + BasicMap + + const V & + v + + + + +Constructor that initializes the compare value state. + +v + + +Value that should be used with matchers. + + + + + + + + + + + + + typename OV + + + + d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::BasicMap + (const V &v, const OV &cmp, T &&t) + BasicMap + + const V & + v + + + const OV & + cmp + + + T && + t + + + + +Constructor that initializes the compare value state and does one map operation. + +v + + +Value that should be used with matchers. + + + + +cmp + + +Matcher that should be compared to the compare value. + + + + +t + + +Value that is stored should the compare of the matcher to the value yield true. + + + + + + + + + + + + + typename OV + + + typename C + + + + d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::BasicMap + (const V &v, const OV &cmp, C &&c) + BasicMap + + const V & + v + + + const OV & + cmp + + + C && + c + + + + +Constructor that initializes the compare value state and does one map operation. + +v + + +Value that should be used with matchers. + + + + +cmp + + +Matcher that should be compared to the compare value. + + + + +c + + +A generator that is used to generate input to the constructor of T should the compare of the matcher to the value yield true. + + + + + + + + + + + + + typename OV + + + typename... + Vs + Vs + + + + d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::BasicMap + (const V &v, const OV &cmp, Vs &&...vs) + BasicMap + + const V & + v + + + const OV & + cmp + + + Vs &&... + vs + + + + +Constructor that initializes the compare value state and does one map operation. + +v + + +Value that should be used with matchers. + + + + +cmp + + +Matcher that should be compared to the compare value. + + + + +vs + + +Values that should be passed to the constructor of T should the compare of the matcher to the value yield true. + + + + + + + + + + + + + typename OV + + + BasicMap & + BasicMap& d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::map + (const OV &cmp, T &&t) + map + + const OV & + cmp + + + T && + t + + + + +Maps a matcher to a value. + +cmp + + +Value matcher. + + + + +t + + +Value that is stored in this if no value is stored in stored. + + + +Reference to this. + + + + + + + + + + + typename OV + + + typename C + + + BasicMap & + BasicMap& d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::map + (const OV &cmp, C &&c) + map + + const OV & + cmp + + + C && + c + + + + +Maps a matcher to a value. + +cmp + + +Value matcher. + + + + +c + + +Generator that generates input passed to the constructor of T should no value be stored in this. + + + +Reference to this. + + + + + + + + + + + typename OV + + + typename... + Vs + Vs + + + BasicMap & + BasicMap& d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::map + (const OV &cmp, Vs &&...vs) + map + + const OV & + cmp + + + Vs &&... + vs + + + + +Maps a matcher to a value. + +cmp + + +Value matcher. + + + + +vs + + +Parameters passed to the constructor of T should no value be stored in this. + + + +Reference to this. + + + + + + + + + T && + T&& d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::map + (const FinalMapType &cmp, T &&t) + map + + const FinalMapType & + cmp + + + T && + t + + + + +Maps final type to a value. + +cmp + + +Final value matcher. + + + + +t + + +Value that is stored in this if no value is stored in stored. + + + +Stored valued of T. + + + + + + + + + + + typename C + + + T && + T&& d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::map + (const FinalMapType &cmp, C &&c) + map + + const FinalMapType & + cmp + + + C && + c + + + + +Maps final type to a value. + +cmp + + +Final value matcher. + + + + +c + + +Generator that generates input passed to the constructor of T should no value be stored in this. + + + +Stored valued of T. + + + + + + + + + + + typename... + Vs + Vs + + + T && + T&& d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::map + (const FinalMapType &cmp, Vs &&...vs) + map + + const FinalMapType & + cmp + + + Vs &&... + vs + + + + +Maps final type to a value. + +cmp + + +Final value matcher. + + + + +vs + + +Parameters passed to the constructor of T should no value be stored in this. + + + +Stored valued of T. + + + + + + + + + bool + bool d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::get + (T &o) + get + + T & + o + + + + +Gets the stored value. + +c + + +Receiver of the value, should any value be stored in this. + + + +Returns true if a value was stored in this and this value was moved into o. + + + + + + + + + + + typename C + + + bool + bool d3d::shadermodel::matcher::BasicMap< V, T, FinalMapType, Cmp >::get + (C &&c) + get + + C && + c + + + + +Gets the stored value. + +c + + +Receiver of the value, should any value be stored in this. + + + +Returns true if a value was stored in this and c was called. + + + + + + + + + + + +Basic map type, that allows mapping of matchers to values. + +V + + +Type of the value that is matched with the input matchers on each matching attempt. + + + + +T + + +Type of the stored value. + + + + +finalMapType + + +Type of the terminating mapping. This acts as a default and returns the value instead of a map. + + + + +Cmp + + +Comparison type that should be used to determine if anything was matched. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d::shadermodel::matcher::BasicMapBasicMap + d3d::shadermodel::matcher::BasicMapBasicMap + d3d::shadermodel::matcher::BasicMapBasicMap + d3d::shadermodel::matcher::BasicMapBasicMap + d3d::shadermodel::matcher::BasicMapBasicMap + d3d::shadermodel::matcher::BasicMapBasicMap + d3d::shadermodel::matcher::BasicMapBasicMap + d3d::shadermodel::matcher::BasicMapcContruct + d3d::shadermodel::matcher::BasicMapcEmplace + d3d::shadermodel::matcher::BasicMapcMove + d3d::shadermodel::matcher::BasicMapcompare + d3d::shadermodel::matcher::BasicMapget + d3d::shadermodel::matcher::BasicMapget + d3d::shadermodel::matcher::BasicMapmap + d3d::shadermodel::matcher::BasicMapmap + d3d::shadermodel::matcher::BasicMapmap + d3d::shadermodel::matcher::BasicMapmap + d3d::shadermodel::matcher::BasicMapmap + d3d::shadermodel::matcher::BasicMapmap + d3d::shadermodel::matcher::BasicMapmemory + d3d::shadermodel::matcher::BasicMapobject + d3d::shadermodel::matcher::BasicMapoperator= + d3d::shadermodel::matcher::BasicMapoperator= + d3d::shadermodel::matcher::BasicMapvalue + d3d::shadermodel::matcher::BasicMapwasMatched + + + diff --git a/breathe/doxygen/d3dAPI/xml/classd3d_1_1shadermodel_1_1matcher_1_1_map.xml b/breathe/doxygen/d3dAPI/xml/classd3d_1_1shadermodel_1_1matcher_1_1_map.xml new file mode 100644 index 000000000..50cb69a74 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/classd3d_1_1shadermodel_1_1matcher_1_1_map.xml @@ -0,0 +1,112 @@ + + + + d3d::shadermodel::matcher::Map + d3d::shadermodel::matcher::BasicMap< V, T, AnyVersion > + dag_shaderModelVersion.h + + + typename T + + + typename V + + + + + BasicMap< V, T, AnyVersion > + using d3d::shadermodel::matcher::Map< T, V >::BaseType = BasicMap<V, T, AnyVersion> + + BaseType + +Type shorthand to reduce typing. + + + + + + + + + + + +Map type that exactly matches values versions. + +T + + +Type of the stored value. + + + + +V + + +Type of the value that is matched with the input matchers on each matching attempt. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d::shadermodel::matcher::MapBaseType + d3d::shadermodel::matcher::MapBasicMap + d3d::shadermodel::matcher::MapBasicMap + d3d::shadermodel::matcher::MapBasicMap + d3d::shadermodel::matcher::MapBasicMap + d3d::shadermodel::matcher::MapBasicMap + d3d::shadermodel::matcher::MapBasicMap + d3d::shadermodel::matcher::MapBasicMap + d3d::shadermodel::matcher::Mapcompare + d3d::shadermodel::matcher::Mapget + d3d::shadermodel::matcher::Mapget + d3d::shadermodel::matcher::Mapmap + d3d::shadermodel::matcher::Mapmap + d3d::shadermodel::matcher::Mapmap + d3d::shadermodel::matcher::Mapmap + d3d::shadermodel::matcher::Mapmap + d3d::shadermodel::matcher::Mapmap + d3d::shadermodel::matcher::Mapoperator= + d3d::shadermodel::matcher::Mapoperator= + + + diff --git a/breathe/doxygen/d3dAPI/xml/classeastl_1_1hash_3_01_resource_description_01_4.xml b/breathe/doxygen/d3dAPI/xml/classeastl_1_1hash_3_01_resource_description_01_4.xml new file mode 100644 index 000000000..4265608b7 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/classeastl_1_1hash_3_01_resource_description_01_4.xml @@ -0,0 +1,50 @@ + + + + eastl::hash< ResourceDescription > + dag_heap.h + + + + + size_t + size_t eastl::hash< ResourceDescription >::operator() + (const ResourceDescription &desc) const + operator() + + const ResourceDescription & + desc + + +Computes the hash value of a resource description. + + + + +desc + + +The resource description. + + + +The hash value of the resource description. + + + + + + + + + +Hash function specialization for ResourceDescription. + + + + + + eastl::hash< ResourceDescription >operator() + + + diff --git a/breathe/doxygen/d3dAPI/xml/classshaders_1_1_driver_render_state_id_dummy.xml b/breathe/doxygen/d3dAPI/xml/classshaders_1_1_driver_render_state_id_dummy.xml new file mode 100644 index 000000000..cc19bf123 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/classshaders_1_1_driver_render_state_id_dummy.xml @@ -0,0 +1,13 @@ + + + + shaders::DriverRenderStateIdDummy + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/combine.xslt b/breathe/doxygen/d3dAPI/xml/combine.xslt new file mode 100644 index 000000000..3bfa82c1e --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/combine.xslt @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/compound.xsd b/breathe/doxygen/d3dAPI/xml/compound.xsd new file mode 100644 index 000000000..6a8a83463 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/compound.xsd @@ -0,0 +1,1215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__async__pipeline_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__async__pipeline_8h.xml new file mode 100644 index 000000000..5f3cc982f --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__async__pipeline_8h.xml @@ -0,0 +1,276 @@ + + + + dag_async_pipeline.h + drv/3d/dag_driver.h + drv/3d/dag_commands.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d::AutoPipelineAsyncCompile + d3d::AutoPipelineAsyncCompileFeedback + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_driver.h> +#include<drv/3d/dag_commands.h> + +namespaced3d +{ + +template<boolallow_compute_pipelines=true> +structAutoPipelineAsyncCompile +{ +AutoPipelineAsyncCompile() +{ +d3d::driver_command(Drv3dCommand::SET_PIPELINE_COMPILATION_TIME_BUDGET,(void*)(uintptr_t)(0), +allow_compute_pipelines?nullptr:(void*)-1); +} +~AutoPipelineAsyncCompile(){d3d::driver_command(Drv3dCommand::SET_PIPELINE_COMPILATION_TIME_BUDGET,(void*)-1);} +}; + +template<boolallow_compute_pipelines=true> +classAutoPipelineAsyncCompileFeedback +{ +boolneedRetry; +boolsupported; +boolexternalNeedRetry; + +public: +boolisRetryNeeded()const{returnneedRetry;} +boolisExternalRetryNeeded()const{returnexternalNeedRetry;} +boolisSupported()const{returnsupported;} +AutoPipelineAsyncCompileFeedback(uint32_t*feedback_ptr) +{ +if(!feedback_ptr) +{ +externalNeedRetry=false; +needRetry=false; +supported=false; +return; +} +intcmdRet=d3d::driver_command(Drv3dCommand::ASYNC_PIPELINE_COMPILATION_FEEDBACK_BEGIN,(void*)feedback_ptr); +//decodebitset +externalNeedRetry=(cmdRet&4)>0; +needRetry=(cmdRet&2)>0; +supported=(cmdRet&1)>0; +if(supported) +d3d::driver_command(Drv3dCommand::SET_PIPELINE_COMPILATION_TIME_BUDGET,(void*)(uintptr_t)(0), +allow_compute_pipelines?nullptr:(void*)-1); +} +~AutoPipelineAsyncCompileFeedback() +{ +if(!supported) +return; +d3d::driver_command(Drv3dCommand::ASYNC_PIPELINE_COMPILATION_FEEDBACK_END); +d3d::driver_command(Drv3dCommand::SET_PIPELINE_COMPILATION_TIME_BUDGET,(void*)-1); +} +}; + +}//namespaced3d + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__barrier_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__barrier_8h.xml new file mode 100644 index 000000000..61bac02b0 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__barrier_8h.xml @@ -0,0 +1,354 @@ + + + + dag_barrier.h + EASTL/initializer_list.h + debug/dag_assert.h + drv/3d/dag_consts.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_interface_table.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_driver.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ResourceBarrierDesc + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<EASTL/initializer_list.h> + +#include<debug/dag_assert.h> + +#include<drv/3d/dag_consts.h> + +classSbuffer; +classBaseTexture; +structRaytraceBottomAccelerationStructure; + +classResourceBarrierDesc +{ +//specialcountvaluetodistinguisharrayofvaluesfromsinglevalue +staticconstexprunsignedsingle_element_count=~0u; +union +{ +Sbuffer*buffer; +Sbuffer*const*buffers; +}; +union +{ +BaseTexture*texture; +BaseTexture*const*textures; +}; +union +{ +RaytraceBottomAccelerationStructure*blas; +RaytraceBottomAccelerationStructure*const*blases; +}; +union +{ +ResourceBarrierbufferState; +constResourceBarrier*bufferStates; +}; +union +{ +ResourceBarriertextureState; +constResourceBarrier*textureStates; +}; +union +{ +unsignedtextureSubResIndex; +constunsigned*textureSubResIndices; +}; +union +{ +unsignedtextureSubResRange; +constunsigned*textureSubResRanges; +}; +unsignedbufferCount=0; +unsignedtextureCount=0; +unsignedblasCount=0; + +public: +ResourceBarrierDesc(): +buffer{nullptr}, +texture{nullptr}, +blas{nullptr}, +bufferStates{nullptr}, +textureStates{nullptr}, +textureSubResIndices{nullptr}, +textureSubResRanges{nullptr} +{} + +ResourceBarrierDesc(constResourceBarrierDesc&)=default; + +ResourceBarrierDesc(Sbuffer*buf,ResourceBarrierrb):buffer{buf},bufferState{rb},bufferCount{single_element_count}{} + +ResourceBarrierDesc(Sbuffer*const*bufs,constResourceBarrier*rb,unsignedcount): +buffers{bufs},bufferStates{rb},bufferCount{count} +{} + +template<unsignedN> +ResourceBarrierDesc(Sbuffer*(&bufs)[N],ResourceBarrier(&rb)[N]):buffers{bufs},bufferStates{rb},bufferCount{N} +{} + +ResourceBarrierDesc(std::initializer_list<Sbuffer*>bufs,std::initializer_list<ResourceBarrier>rb): +buffers{bufs.begin()},bufferStates{rb.begin()},bufferCount{static_cast<unsigned>(bufs.size())} +{ +G_ASSERT(bufs.size()==rb.size()); +} + +ResourceBarrierDesc(BaseTexture*tex,ResourceBarrierrb,unsignedsub_res_index,unsignedsub_res_range): +texture{tex}, +textureState{rb}, +textureSubResIndex{sub_res_index}, +textureSubResRange{sub_res_range}, +textureCount{single_element_count} +{} + +ResourceBarrierDesc(BaseTexture*const*texs,constResourceBarrier*rb,constunsigned*sub_res_index, +constunsigned*sub_res_range,unsignedcount): +textures{texs},textureStates{rb},textureSubResIndices{sub_res_index},textureSubResRanges{sub_res_range},textureCount{count} +{} + +template<unsignedN> +ResourceBarrierDesc(BaseTexture*(&texs)[N],ResourceBarrier(&rb)[N],unsigned(&sub_res_index)[N],unsigned(&sub_res_range)[N]): +textures{texs},textureStates{rb},textureSubResIndices{sub_res_index},textureSubResRanges{sub_res_range},textureCount{N} +{} + +ResourceBarrierDesc(std::initializer_list<BaseTexture*>texs,std::initializer_list<ResourceBarrier>rb, +std::initializer_list<unsigned>sub_res_index,std::initializer_list<unsigned>sub_res_range): +textures{texs.begin()}, +textureStates{rb.begin()}, +textureSubResIndices{sub_res_index.begin()}, +textureSubResRanges{sub_res_range.begin()}, +textureCount{static_cast<unsigned>(texs.size())} +{ +G_ASSERT(texs.size()==rb.size()); +G_ASSERT(texs.size()==sub_res_index.size()); +G_ASSERT(texs.size()==sub_res_range.size()); +} + +ResourceBarrierDesc(RaytraceBottomAccelerationStructure*blas):blas{blas},blasCount{single_element_count}{} + +ResourceBarrierDesc(RaytraceBottomAccelerationStructure*const*blases,unsignedcount):blases{blases},blasCount{count}{} + +template<unsignedN> +ResourceBarrierDesc(RaytraceBottomAccelerationStructure*(&blases)[N]):blases{blases},blasCount{N} +{} + +ResourceBarrierDesc(std::initializer_list<RaytraceBottomAccelerationStructure*>blases): +blases{blases.begin()},blasCount{static_cast<unsigned>(blases.size())} +{} + +ResourceBarrierDesc(Sbuffer*const*bufs,constResourceBarrier*b_rb,unsignedb_count,BaseTexture*const*texs, +constResourceBarrier*t_rb,constunsigned*t_sub_res_index,constunsigned*t_sub_res_range,unsignedt_count): +buffers{bufs}, +bufferStates{b_rb}, +bufferCount{b_count}, +textures{texs}, +textureStates{t_rb}, +textureSubResIndices{t_sub_res_index}, +textureSubResRanges{t_sub_res_range}, +textureCount{t_count} +{} + +ResourceBarrierDesc(Sbuffer*buf,ResourceBarrierb_rb,BaseTexture*const*texs,constResourceBarrier*t_rb, +constunsigned*t_sub_res_index,constunsigned*t_sub_res_range,unsignedt_count): +buffer{buf}, +bufferState{b_rb}, +bufferCount{single_element_count}, +textures{texs}, +textureStates{t_rb}, +textureSubResIndices{t_sub_res_index}, +textureSubResRanges{t_sub_res_range}, +textureCount{t_count} +{} + +ResourceBarrierDesc(Sbuffer*const*bufs,constResourceBarrier*b_rb,unsignedb_count,BaseTexture*tex,ResourceBarriert_rb, +unsignedt_sub_res_index,unsignedt_sub_res_range): +buffers{bufs}, +bufferStates{b_rb}, +bufferCount{b_count}, +texture{tex}, +textureState{t_rb}, +textureSubResIndex{t_sub_res_index}, +textureSubResRange{t_sub_res_range}, +textureCount{single_element_count} +{} + +ResourceBarrierDesc(Sbuffer*buf,ResourceBarrierb_rb,BaseTexture*tex,ResourceBarriert_rb,unsignedt_sub_res_index, +unsignedt_sub_res_range): +buffer{buf}, +bufferState{b_rb}, +bufferCount{single_element_count}, +texture{tex}, +textureState{t_rb}, +textureSubResIndex{t_sub_res_index}, +textureSubResRange{t_sub_res_range}, +textureCount{single_element_count} +{} + +ResourceBarrierDesc(std::initializer_list<Sbuffer*>bufs,std::initializer_list<ResourceBarrier>buf_rb, +std::initializer_list<BaseTexture*>texs,std::initializer_list<ResourceBarrier>tex_rb, +std::initializer_list<unsigned>sub_res_index,std::initializer_list<unsigned>sub_res_range): +buffers{bufs.begin()}, +bufferStates{buf_rb.begin()}, +bufferCount{static_cast<unsigned>(bufs.size())}, +textures{texs.begin()}, +textureStates{tex_rb.begin()}, +textureSubResIndices{sub_res_index.begin()}, +textureSubResRanges{sub_res_range.begin()}, +textureCount{static_cast<unsigned>(texs.size())} +{ +G_ASSERT(bufs.size()==buf_rb.size()); +G_ASSERT(texs.size()==tex_rb.size()); +G_ASSERT(texs.size()==sub_res_index.size()); +G_ASSERT(texs.size()==sub_res_range.size()); +} + +explicitResourceBarrierDesc(ResourceBarrierrb):buffer{nullptr},bufferState{rb},bufferCount{single_element_count}{} + +template<typenameT> +voidenumerateBufferBarriers(Tclb) +{ +if(single_element_count==bufferCount) +{ +clb(buffer,bufferState); +} +else +{ +for(unsignedi=0;i<bufferCount;++i) +{ +clb(buffers[i],bufferStates[i]); +} +} +} + +template<typenameT> +voidenumerateTextureBarriers(Tclb) +{ +if(single_element_count==textureCount) +{ +clb(texture,textureState,textureSubResIndex,textureSubResRange); +} +else +{ +for(unsignedi=0;i<textureCount;++i) +{ +clb(textures[i],textureStates[i],textureSubResIndices[i],textureSubResRanges[i]); +} +} +} + +template<typenameT> +voidenumerateBlasBarriers(Tclb) +{ +if(single_element_count==blasCount) +{ +clb(blas); +} +else +{ +for(unsignedi=0;i<blasCount;++i) +{ +clb(blases[i]); +} +} +} +}; + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__bindless_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__bindless_8h.xml new file mode 100644 index 000000000..801ddc5f0 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__bindless_8h.xml @@ -0,0 +1,109 @@ + + + + dag_bindless.h + drv/3d/dag_sampler.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_sampler.h> + +classBaseTexture; +classD3dResource; + +namespaced3d +{ +uint32_tregister_bindless_sampler(BaseTexture*texture); + +uint32_tregister_bindless_sampler(SamplerHandlesampler); + +uint32_tallocate_bindless_resource_range(uint32_tresource_type,uint32_tcount); + +uint32_tresize_bindless_resource_range(uint32_tresource_type,uint32_tindex,uint32_tcurrent_count,uint32_tnew_count); + +voidfree_bindless_resource_range(uint32_tresource_type,uint32_tindex,uint32_tcount); + +voidupdate_bindless_resource(uint32_tindex,D3dResource*res); + +voidupdate_bindless_resources_to_null(uint32_tresource_type,uint32_tindex,uint32_tcount); + +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineuint32_tregister_bindless_sampler(BaseTexture*texture){returnd3di.register_bindless_sampler(texture);} + +inlineuint32_tregister_bindless_sampler(SamplerHandlesampler){returnd3di.register_bindless_sampler(sampler);} + +inlineuint32_tallocate_bindless_resource_range(uint32_tresource_type,uint32_tcount) +{ +returnd3di.allocate_bindless_resource_range(resource_type,count); +} + +inlineuint32_tresize_bindless_resource_range(uint32_tresource_type,uint32_tindex,uint32_tcurrent_count,uint32_tnew_count) +{ +returnd3di.resize_bindless_resource_range(resource_type,index,current_count,new_count); +} + +inlinevoidfree_bindless_resource_range(uint32_tresource_type,uint32_tindex,uint32_tcount) +{ +d3di.free_bindless_resource_range(resource_type,index,count); +} + +inlinevoidupdate_bindless_resource(uint32_tindex,D3dResource*res){d3di.update_bindless_resource(index,res);} + +inlinevoidupdate_bindless_resources_to_null(uint32_tresource_type,uint32_tindex,uint32_tcount) +{ +d3di.update_bindless_resources_to_null(resource_type,index,count); +} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__buffers_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__buffers_8h.xml new file mode 100644 index 000000000..3da82618c --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__buffers_8h.xml @@ -0,0 +1,487 @@ + + + + dag_buffers.h + util/dag_globDef.h + drv/3d/dag_d3dResource.h + drv/3d/dag_consts.h + drv/3d/dag_decl.h + drv/3d/dag_tex3d.h + drv/3d/dag_resourceChecker.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sbuffer + Sbuffer::IReloadData + d3d + d3d::buffers + + + + +_ua_ -> allows UAV access (default is formatted/sampled view) +_sr_ -> allows SRV access (default is formatted/sampled view) +_cb -> allows const buffer access +_one_frame_ -> for cb to indicate this buffer contents is only valid this frame after a discard write +_persistent_ -> for cb counter part to _one_frame_, buffer holds its contents until changed +_byte_address -> for ua and sr to indicate byte address view +_structured -> for ua and sr to indicate structured view +_readback -> buffer is used for read back +_indirect -> buffer can be an indirect argument +_staging -> staging buffer + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_globDef.h> + +#include<drv/3d/dag_d3dResource.h> +#include<drv/3d/dag_consts.h> +#include<drv/3d/dag_decl.h> +#include<drv/3d/dag_tex3d.h> +#include<drv/3d/dag_resourceChecker.h> + +classSbuffer:publicD3dResource,publicResourceChecker +{ +public: +DAG_DECLARE_NEW(midmem) + + +structIReloadData +{ +virtual~IReloadData(){} +virtualvoidreloadD3dRes(Sbuffer*sb)=0; +virtualvoiddestroySelf()=0; +}; +virtualboolsetReloadCallback(IReloadData*){returnfalse;} + +intrestype()constoverridefinal{returnRES3D_SBUF;} + +virtualintlock(uint32_tofs_bytes,uint32_tsize_bytes,void**p,intflags)=0; + +virtualintunlock()=0; +virtualintgetFlags()const=0; +constchar*getBufName()const{returngetResName();} + +virtualintgetElementSize()const{return0;} +virtualintgetNumElements()const{return0;}; +virtualboolcopyTo(Sbuffer*dest) +{ +G_UNUSED(dest); +returnfalse; +} +virtualboolcopyTo(Sbuffer*dest,uint32_tdst_ofs_bytes,uint32_tsrc_ofs_bytes,uint32_tsize_bytes) +{ +G_UNUSED(dest); +G_UNUSED(dst_ofs_bytes); +G_UNUSED(src_ofs_bytes); +G_UNUSED(size_bytes); +returnfalse; +} + +template<typenameT> +inlineintlockEx(uint32_tofs_bytes,uint32_tsize_bytes,T**p,intflags) +{ +void*vp; +if(!lock(ofs_bytes,size_bytes,&vp,flags)) +{ +*p=NULL; +return0; +} +*p=(T*)vp; +return1; +} + +boolupdateDataWithLock(uint32_tofs_bytes,uint32_tsize_bytes,constvoid*__restrictsrc,intlockFlags) +{ +G_ASSERT_RETURN(size_bytes,false); +void*data=0; +if(lock(ofs_bytes,size_bytes,&data,lockFlags|VBLOCK_WRITEONLY)) +{ +if(data) +memcpy(data,src,size_bytes); +unlock(); +returntrue; +} +returnfalse; +} + +virtualboolupdateData(uint32_tofs_bytes,uint32_tsize_bytes,constvoid*__restrictsrc,uint32_tlockFlags) +{ +G_ASSERT_RETURN(size_bytes,false); +returnupdateDataWithLock(ofs_bytes,size_bytes,src,lockFlags); +} + +inlineintlock(uint32_tofs_bytes,uint32_tsize_bytes,uint16_t**p,intflags) +{ +G_ASSERT(!(getFlags()&SBCF_INDEX32)); +returnlockEx(ofs_bytes,size_bytes,p,flags); +} +inlineintlock32(uint32_tofs_bytes,uint32_tsize_bytes,uint32_t**p,intflags) +{ +G_ASSERT((getFlags()&SBCF_INDEX32)); +returnlockEx(ofs_bytes,size_bytes,p,flags); +} + +protected: +~Sbuffer()override{} +}; + +namespaced3d +{ +Sbuffer*create_sbuffer(intstruct_size,intelements,unsignedflags,unsignedtexfmt,constchar*name); + +boolset_buffer(unsignedshader_stage,unsignedslot,Sbuffer*buffer); + +boolset_rwbuffer(unsignedshader_stage,unsignedslot,Sbuffer*buffer); + +}//namespaced3d + +namespaced3d::buffers +{ +enumclassInit:uint32_t +{ +No, +Zero, +}; + + +enumclassIndirect:uint32_t +{ +Dispatch, +Draw, +DrawIndexed, +}; + + +inlineconstexpruint32_tCBUFFER_REGISTER_SIZE=16; + +inlineconstexpruint32_tBYTE_ADDRESS_ELEMENT_SIZE=sizeof(uint32_t); + + +template<typenameT> +inlineuint32_tcb_array_reg_count(uint32_tarray_size) +{ +static_assert(sizeof(T)%CBUFFER_REGISTER_SIZE==0, +"Structureshouldbealignedasfloat4tonothaveproblemswithalignmentincbuffer"); +returnsizeof(T)/CBUFFER_REGISTER_SIZE*array_size; +} + + +template<typenameT> +inlineuint32_tcb_struct_reg_count() +{ +returncb_array_reg_count<T>(1); +} + + +inlineSbuffer*create_persistent_cb(uint32_tregisters_count,constchar*name) +{ +returnd3d::create_sbuffer(CBUFFER_REGISTER_SIZE,registers_count,SBCF_CB_PERSISTENT,0,name); +} + +inlineSbuffer*create_one_frame_cb(uint32_tregisters_count,constchar*name) +{ +returnd3d::create_sbuffer(CBUFFER_REGISTER_SIZE,registers_count,SBCF_CB_ONE_FRAME,0,name); +} + +inlineSbuffer*create_ua_sr_byte_address(uint32_tsize_in_dwords,constchar*name,Initbuffer_init=Init::No) +{ +returnd3d::create_sbuffer(BYTE_ADDRESS_ELEMENT_SIZE,size_in_dwords, +SBCF_UA_SR_BYTE_ADDRESS|(buffer_init==Init::Zero?SBCF_ZEROMEM:0),0,name); +} + +inlineSbuffer*create_ua_sr_structured(uint32_tstructure_size,uint32_telements_count,constchar*name, +Initbuffer_init=Init::No) +{ +returnd3d::create_sbuffer(structure_size,elements_count,SBCF_UA_SR_STRUCTURED|(buffer_init==Init::Zero?SBCF_ZEROMEM:0),0, +name); +} + + +inlineSbuffer*create_ua_byte_address(uint32_tsize_in_dwords,constchar*name) +{ +returnd3d::create_sbuffer(BYTE_ADDRESS_ELEMENT_SIZE,size_in_dwords,SBCF_UA_BYTE_ADDRESS,0,name); +} + +inlineSbuffer*create_ua_structured(uint32_tstructure_size,uint32_telements_count,constchar*name) +{ +returnd3d::create_sbuffer(structure_size,elements_count,SBCF_UA_STRUCTURED,0,name); +} + +inlineSbuffer*create_ua_byte_address_readback(uint32_tsize_in_dwords,constchar*name,Initbuffer_init=Init::No) +{ +returnd3d::create_sbuffer(BYTE_ADDRESS_ELEMENT_SIZE,size_in_dwords, +SBCF_UA_BYTE_ADDRESS_READBACK|(buffer_init==Init::Zero?SBCF_ZEROMEM:0),0,name); +} + + +inlineSbuffer*create_ua_structured_readback(uint32_tstructure_size,uint32_telements_count,constchar*name, +Initbuffer_init=Init::No) +{ +returnd3d::create_sbuffer(structure_size,elements_count, +SBCF_UA_STRUCTURED_READBACK|(buffer_init==Init::Zero?SBCF_ZEROMEM:0),0,name); +} + + +inlineuint32_tdword_count_per_call(Indirectindirect_type) +{ +switch(indirect_type) +{ +caseIndirect::Dispatch:returnDISPATCH_INDIRECT_NUM_ARGS; +caseIndirect::Draw:returnDRAW_INDIRECT_NUM_ARGS; +caseIndirect::DrawIndexed:returnDRAW_INDEXED_INDIRECT_NUM_ARGS; +} +G_ASSERT(false);//impossiblesituation +return0; +} + +inlineSbuffer*create_ua_indirect(Indirectindirect_type,uint32_trecords_count,constchar*name) +{ +constuint32_tdwordsCount=records_count*dword_count_per_call(indirect_type); +returnd3d::create_sbuffer(BYTE_ADDRESS_ELEMENT_SIZE,dwordsCount,SBCF_UA_INDIRECT,0,name); +} + + +inlineSbuffer*create_indirect(Indirectindirect_type,uint32_trecords_count,constchar*name) +{ +constuint32_tdwordsCount=records_count*dword_count_per_call(indirect_type); +returnd3d::create_sbuffer(BYTE_ADDRESS_ELEMENT_SIZE,dwordsCount,SBCF_INDIRECT,0,name); +} + + +inlineSbuffer*create_staging(uint32_tsize_in_bytes,constchar*name) +{ +returnd3d::create_sbuffer(1,size_in_bytes,SBCF_STAGING_BUFFER,0,name); +} + + +inlineSbuffer*create_persistent_sr_tbuf(uint32_telements_count,uint32_tformat,constchar*name,Initbuffer_init=Init::No) +{ +returnd3d::create_sbuffer(get_tex_format_desc(format).bytesPerElement,elements_count, +SBCF_BIND_SHADER_RES|SBCF_CPU_ACCESS_WRITE|(buffer_init==Init::Zero?SBCF_ZEROMEM:0),format,name); +} + + +inlineSbuffer*create_persistent_sr_byte_address(uint32_tsize_in_dwords,constchar*name,Initbuffer_init=Init::No) +{ +returnd3d::create_sbuffer(BYTE_ADDRESS_ELEMENT_SIZE,size_in_dwords, +SBCF_BIND_SHADER_RES|SBCF_CPU_ACCESS_WRITE|SBCF_MISC_ALLOW_RAW|(buffer_init==Init::Zero?SBCF_ZEROMEM:0),0,name); +} + + +inlineSbuffer*create_persistent_sr_structured(uint32_tstructure_size,uint32_telements_count,constchar*name, +Initbuffer_init=Init::No) +{ +returnd3d::create_sbuffer(structure_size,elements_count, +SBCF_BIND_SHADER_RES|SBCF_CPU_ACCESS_WRITE|SBCF_MISC_STRUCTURED|(buffer_init==Init::Zero?SBCF_ZEROMEM:0),0,name); +} + + +inlineSbuffer*create_one_frame_sr_tbuf(uint32_telements_count,uint32_tformat,constchar*name) +{ +returnd3d::create_sbuffer(get_tex_format_desc(format).bytesPerElement,elements_count, +SBCF_BIND_SHADER_RES|SBCF_CPU_ACCESS_WRITE|SBCF_DYNAMIC|SBCF_FRAMEMEM,format,name); +} + + +inlineSbuffer*create_one_frame_sr_byte_address(uint32_tsize_in_dwords,constchar*name) +{ +returnd3d::create_sbuffer(BYTE_ADDRESS_ELEMENT_SIZE,size_in_dwords, +SBCF_BIND_SHADER_RES|SBCF_CPU_ACCESS_WRITE|SBCF_MISC_ALLOW_RAW|SBCF_DYNAMIC|SBCF_FRAMEMEM,0,name); +} + + +inlineSbuffer*create_one_frame_sr_structured(uint32_tstructure_size,uint32_telements_count,constchar*name) +{ +returnd3d::create_sbuffer(structure_size,elements_count, +SBCF_BIND_SHADER_RES|SBCF_CPU_ACCESS_WRITE|SBCF_MISC_STRUCTURED|SBCF_DYNAMIC|SBCF_FRAMEMEM,0,name); +} + +inlineSbuffer*create_raytrace_scratch_buffer(uint32_tsize_in_bytes,constchar*name) +{ +returnd3d::create_sbuffer(1,size_in_bytes,SBCF_USAGE_ACCELLERATION_STRUCTURE_BUILD_SCRATCH_SPACE,0,name); +} + +}//namespaced3d::buffers + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ + +inlineSbuffer*create_sbuffer(intstruct_size,intelements,unsignedflags,unsignedtexfmt,constchar*name) +{ +returnd3di.create_sbuffer(struct_size,elements,flags,texfmt,name); +} + +inlineboolset_buffer(unsignedshader_stage,unsignedslot,Sbuffer*buffer){returnd3di.set_buffer(shader_stage,slot,buffer);} + +inlineboolset_rwbuffer(unsignedshader_stage,unsignedslot,Sbuffer*buffer) +{ +returnd3di.set_rwbuffer(shader_stage,slot,buffer); +} + +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__capture_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__capture_8h.xml new file mode 100644 index 000000000..e69891760 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__capture_8h.xml @@ -0,0 +1,36 @@ + + + + dag_capture.h + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +namespaced3d +{ + +boolstart_capture(constchar*name,constchar*savepath); + +voidstop_capture(); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineboolstart_capture(constchar*name,constchar*savepath){returnd3di.start_capture(name,savepath);} +inlinevoidstop_capture(){d3di.stop_capture();} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__commands_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__commands_8h.xml new file mode 100644 index 000000000..0f852fbce --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__commands_8h.xml @@ -0,0 +1,1389 @@ + + + + dag_commands.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_async_pipeline.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_lock.h + + + + + + + + + + + + + + + + + + + FrameEvents + DeviceResetEventHandler + Drv3dTimings + CompilePipelineSet + Drv3dMakeTextureParams + d3d + + + + Drv3dCommand + + GETVISIBILITYBEGIN + + + + + + + GETVISIBILITYEND + + + + + + + GETVISIBILITYCOUNT + + + + + + + RELEASE_QUERY + + + + + + + ACQUIRE_OWNERSHIP + +acquire/release D3D lock (to perform rendering in non-primary thread) + + + + + + RELEASE_OWNERSHIP + + + + + + + ACQUIRE_LOADING + +acquire/release a mutex to perform resource loading in non-primary thread and postpone GPU resets, the lock is nonexclusive. + + + + + + RELEASE_LOADING + + + + + + + GET_GPU_FRAME_TIME + + + + + + + GET_VSYNC_REFRESH_RATE + + + + + + + SET_PIPELINE_COMPILATION_TIME_BUDGET + + + + + + + GET_PIPELINE_COMPILATION_QUEUE_LENGTH + + + + + + + ASYNC_PIPELINE_COMPILATION_FEEDBACK_BEGIN + + + + + + + ASYNC_PIPELINE_COMPILATION_FEEDBACK_END + + + + + + + TIMESTAMPFREQ + + + + + + + TIMESTAMPISSUE + + + + + + + TIMESTAMPGET + + + + + + + TIMECLOCKCALIBRATION + +Gets CPU and GPU time nearly at the same moment. + + + + + + FLUSH_STATES + + + + + + + D3D_FLUSH + + + + + + + COMPILE_PIPELINE + +flush pipeline states to compile pipeline + + + + + + GET_SECONDARY_BACKBUFFER + + + + + + + GET_VENDOR + + + + + + + OVERRIDE_MAX_ANISOTROPY_LEVEL + + + + + + + MAKE_TEXTURE + + + + + + + GET_TEXTURE_HANDLE + + + + + + + BEGIN_EXTERNAL_ACCESS + + + + + + + END_EXTERNAL_ACCESS + + + + + + + SET_VS_DEBUG_INFO + + + + + + + SET_PS_DEBUG_INFO + + + + + + + BEGIN_MRT_CLEAR_SEQUENCE + + + + + + + END_MRT_CLEAR_SEQUENCE + + + + + + + GET_SHADER_CACHE_UUID + + + + + + + AFTERMATH_MARKER + + + + + + + START_CAPTURE_FRAME + + + + + + + IS_HDR_AVAILABLE + + + + + + + IS_HDR_ENABLED + + + + + + + INT10_HDR_BUFFER + + + + + + + HDR_OUTPUT_MODE + + + + + + + GET_LUMINANCE + + + + + + + MEM_STAT + + + + + + + REGISTER_SHADER_DUMP + + + + + + + GET_SHADER + + + + + + + PIX_GPU_BEGIN_CAPTURE + + + + + + + PIX_GPU_END_CAPTURE + + + + + + + PIX_GPU_CAPTURE_NEXT_FRAMES + + + + + + + PIX_GPU_CAPTURE_AFTER_LONG_FRAMES + + + + + + + GET_FRAMERATE_LIMITING_FACTOR + + + + + + + LOAD_PIPELINE_CACHE + + + + + + + SAVE_PIPELINE_CACHE + + + + + + + GET_DLSS + + + + + + + GET_REFLEX + + + + + + + GET_XESS_STATE + + + + + + + IS_XESS_QUALITY_AVAILABLE_AT_RESOLUTION + + + + + + + GET_XESS_RESOLUTION + + + + + + + GET_XESS_VERSION + + + + + + + EXECUTE_DLSS + + + + + + + EXECUTE_DLSS_G + + + + + + + EXECUTE_XESS + + + + + + + SET_XESS_VELOCITY_SCALE + + + + + + + EXECUTE_FSR + + + + + + + EXECUTE_FSR2 + + + + + + + GET_FSR2_STATE + + + + + + + GET_FSR2_RESOLUTION + + + + + + + EXECUTE_PSSR + + + + + + + GET_METALFX_UPSCALE_STATE + + + + + + + EXECUTE_METALFX_UPSCALE + + + + + + + GET_TIMINGS + + + + + + + GET_RAYTRACE_ACCELERATION_STRUCTURES_MEMORY_USAGE + + + + + + + DEBUG_MESSAGE + + + + + + + GET_MONITORS + + + + + + + GET_MONITOR_INFO + + + + + + + GET_RESOLUTIONS_FROM_MONITOR + + + + + + + GET_VIDEO_MEMORY_BUDGET + + + +Returns video memory budget in KiByte values par1: pointer to uint32_t: Total memory budget on the device, possibly less than physical memory of the device par2: pointer to uint32_t: Free memory budget on the device, this is *par1 minus used memory par3: pointer to uint32_t: Used memory, this is *par1 minus *par2 Return: uint32_t: Physical memory of the device + + + + GET_RENDERING_COMMAND_QUEUE + + + + + + + GET_INSTANCE + + + + + + + GET_PHYSICAL_DEVICE + + + + + + + GET_QUEUE_FAMILY_INDEX + + + + + + + GET_QUEUE_INDEX + + + + + + + PROCESS_APP_INACTIVE_UPDATE + + + + + + + PRE_ROTATE_PASS + + + + + + + REGISTER_FRAME_COMPLETION_EVENT + + + + + + + REGISTER_ONE_TIME_FRAME_EXECUTION_EVENT_CALLBACKS + + + + + + + REPORT_RESOURCE_STATE_TRANSITIONS + + + + + + + REGISTER_DEVICE_RESET_EVENT_HANDLER + + + + + + + UNREGISTER_DEVICE_RESET_EVENT_HANDLER + + + + + + + PREPARE_TEXTURES_FOR_VR_CONSUMPTION + + + + + + + SET_APP_INFO + + + + + + + SEND_GPU_CRASH_DUMP + + + + + + + PROCESS_PENDING_RESOURCE_UPDATED + + + + + + + GET_PS5_PSSR_STATUS + + + + + + + SET_FREQ_LEVEL + + + + + + + ENABLE_IMMEDIATE_FLUSH + + + + + + + DISABLE_IMMEDIATE_FLUSH + + + + + + + GET_WORKER_CPU_CORE + + + + + + + SET_PS5_FSR_VIEW + + + + + + + SET_HDR + + + + + + + DEBUG_BREAK + + + + + + + ADD_DEBUG_BREAK_STRING_SEARCH + + + + + + + REMOVE_DEBUG_BREAK_STRING_SEARCH + + + + + + + IS_DEFRAG_REQUESTED + + + + + + + PROCESS_PENDING_DEFRAG_REQUESTS + + + + + + + COMPILE_PIPELINE_SET + + + + + + + GET_BUFFER_GPU_ADDRESS + + + + + + + ENABLE_WORKER_LOW_LATENCY_MODE + + + + + + + LOGERR_ON_SYNC + + + + + + + SET_DRIVER_NETWORD_MANAGER + + + + + + + GET_CONSOLE_HFR_STATUS + + + + + + + GET_CONSOLE_HFR_SUPPORTED + + + + + + + GET_RESOURCE_STATISTICS + + + + + + + DELAY_SYNC + + + + + + + CONTINUE_SYNC + + + + + + + CHANGE_QUEUE + + + + + + + USER + = 1000 + + + + + + + + + + + + + + + + @1 + + DRV3D_CPU_FREQ_TYPE_QPC + + + + + + + DRV3D_CPU_FREQ_TYPE_REF + + + + + + + DRV3D_CPU_FREQ_NSEC + + + + + + + DRV3D_CPU_FREQ_TYPE_PROFILE + + + + + + + DRV3D_CPU_FREQ_TYPE_UNKNOWN + + + + + + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +classDataBlock; + +structFrameEvents +{ +virtual~FrameEvents()=default; + +virtualvoidbeginFrameEvent()=0; +virtualvoidendFrameEvent()=0; +}; + +structDeviceResetEventHandler +{ +virtual~DeviceResetEventHandler()=default; + +virtualvoidpreRecovery()=0; +virtualvoidrecovery()=0; +}; + +enumclassDrv3dCommand +{ +GETVISIBILITYBEGIN, +GETVISIBILITYEND, +GETVISIBILITYCOUNT, +RELEASE_QUERY, + +ACQUIRE_OWNERSHIP, +RELEASE_OWNERSHIP, + +ACQUIRE_LOADING, +RELEASE_LOADING, + +GET_GPU_FRAME_TIME, + +GET_VSYNC_REFRESH_RATE, + +//settimelimit(inusecs)perframeforpipelinecompilation +//par2-ifnotnull,disablescomputepipelineasynccompilation(onlygraphicspipelineareasynccompiled) +SET_PIPELINE_COMPILATION_TIME_BUDGET, +//recivescurrentamountofpipelinesincompilationqueue +GET_PIPELINE_COMPILATION_QUEUE_LENGTH, +//formsasyncpipelinecompilationfeeedbackinrangeofdrawcommandsexecutedbetweenbegin&end +//par1-userpointertouint32_t,pointermustnotbereleased(i.e.permanentpointer!) +//beginmarksrangebegin +//setsbit2ifothercallstothiscommandsettedbit1insameframe +//setsbit1ifsomeofdrawswasrejectedduetopipelinewasnotready +//setsbit0ifsupported +//returns0ifnotsupported +//endmarksrangeend +//rangesmustnotintersect(forsimplicity) +ASYNC_PIPELINE_COMPILATION_FEEDBACK_BEGIN, +ASYNC_PIPELINE_COMPILATION_FEEDBACK_END, + +TIMESTAMPFREQ, +TIMESTAMPISSUE, +TIMESTAMPGET, + +//par1-cputimestamp +//par2-gputimestamp +//par3(optional)-cpufrequencytype(seebelow,DRV3D_CPU_FREQ_TYPE_*) +//Warning!withtimetimestamp_will_deviate.Weneedtorecalibrateclockfromtimetotime! +TIMECLOCKCALIBRATION, + + +FLUSH_STATES,//flushallstates,exceptbuffer.willresolvemsaa,generatemips,etc-ifsupported! +D3D_FLUSH,//ID3D11DeviceContext::FlushorIDirect3DQuery9::GetData(D3DGETDATA_FLUSH). + +//par1:uintptr_tthatstoresShaderStage +//ifpar1==STAGE_PS,compilesgraphicspipeline +//ifpar1==STAGE_CS,compilescomputepipeline +//par2:uintptr_tthatstorestopologyifpar1==ShaderStage::STAGE_PS +COMPILE_PIPELINE, + +GET_SECONDARY_BACKBUFFER, + +GET_VENDOR, + +OVERRIDE_MAX_ANISOTROPY_LEVEL, + +//Createsanenginetextureobjectfromarawresource +MAKE_TEXTURE, +GET_TEXTURE_HANDLE, + +//Start/Finishexclusiveaccessforworkingwithgraphicalresourcesandrenderingcontext. +//Itisusefulincaseswhenpartofsomerenderingisperformedbeyondthebordersofthedriver +BEGIN_EXTERNAL_ACCESS, +END_EXTERNAL_ACCESS, + +SET_VS_DEBUG_INFO, +SET_PS_DEBUG_INFO, + +//MRTclearsequenceisanoptimizationtoclearmrttargetswithdifferentcolorsin +//anoptimizedfashionfortargetAPIslikeVulkan. + +//Beginsamrtclearsequence. +//Thiscanturnasequenceofbindcolortarget->clearcolortarget +//intooneoperationofthebackend(andevencanmergetheclearinto +//therendertargetloadonthefirstdrawtoit). +//Thisdelaystheactuallcleareitheruntilthenextflushortothenext +//drawcommand(whichisaimpliciteflush). +//Param1istheindexofthenextmrtclearcolor,param1isusedasis +//soitis_NOT_apointertoanint,thepointervalueis_REINTERPRETED_as +//intptr_tandusedasindex. +//Youcansendthiscommandmultipletimeswithdifferentindiceseachtime +//tosettheindexbeforecommitingwithEND_MRT_CLEAR_SEQUENCE. +//Eachclearviewafterthisincrmentstheindexofthenextrendertargetclear +//color. +//Param2isanoptinalparametertoanuint32_tthatissetto1ifthebackend +//implementsmrtclearsequencesupport. +BEGIN_MRT_CLEAR_SEQUENCE, +//Endsamrtclearsequence.Thenextcommandthattriggersaclearwillthen +//usethecolorvalues(anddepthstencilvaluesforcolortarget0)todo +//theclearthecurrentlysetrendertargets. +//Param1isusedasahintifaimmediateclearwiththiscallisrequiredornot, +//ifParam1isNULLthenaclearwiththiscallisexecuted,ifParam1isnotNULL +//thentheclearisdelayedaslongaspossible. +END_MRT_CLEAR_SEQUENCE, +//Queriestheselectedrenderdervicesdrivercacheformatuuid. +//Firstparameterhastobeapointertoa128bytebigmemoryblocktostoretheuuid. +//Allotherparametersareunused. +//Returns1iftheuuidwaswrittentothefirstparameter. +GET_SHADER_CACHE_UUID, + +AFTERMATH_MARKER,//NvidiaAftermathmarker.Pointermustbevaliduntilthecrash.DoesnothingwhenAftermathis +//disabled. + +START_CAPTURE_FRAME, + +IS_HDR_AVAILABLE, +IS_HDR_ENABLED, +INT10_HDR_BUFFER, +HDR_OUTPUT_MODE, +GET_LUMINANCE, + +MEM_STAT,//Singlelinetexandbuffersstatistics. + +//LetstheD3DbackendknowaboutaScriptedShadersBinDumpOwnerthathasjustbeenloaded. +//Thiscommandallowsthebackendtoprepareallshadersofthisbindumpforfasterloading, +//includingusageofcachesofpreviousrunsoftheapplication. +// +//par1:constScriptedShadersBinDumpOwner*:Pointertoscriptedshaderdump,ornull. +//par2:constchar:Nameofthefileofthescriptedshaderdump,ornull. +REGISTER_SHADER_DUMP, + +//par1isexternalshaderid(shadernumberinthedump) +//par2isshaderstage(ShaderCodeType) +//[out]par3ispointertointernalshaderid(ifdriverdoesn'tsupportthiscommand,thenpar3remainsunchanged) +GET_SHADER, + +PIX_GPU_BEGIN_CAPTURE, +PIX_GPU_END_CAPTURE, +PIX_GPU_CAPTURE_NEXT_FRAMES, +PIX_GPU_CAPTURE_AFTER_LONG_FRAMES, + +//Askdriverbywhatfactoritwaslimitedwhenrenderinglastframe +GET_FRAMERATE_LIMITING_FACTOR, + +//Loadsadditionalpipelinecachefrompath@par1 +LOAD_PIPELINE_CACHE, +//SavescurrentpipelinecacheonFS. +SAVE_PIPELINE_CACHE, + +//GetpointertotheDLSSobject +//par1:DLSS** +GET_DLSS, + +//GetpointertotheReflexobject +//par1:Reflex** +GET_REFLEX, + +//ReturnsXeSSstateasaXessStatestructcastedtoint.Noparametersrequired +GET_XESS_STATE, + +//ReturnsifaXeSSqualityisavailableatatargetresolution +//par1:IPoint2*thatcontainstargetresolutionwidthandheight +//par2:XeSSqualityasint* +IS_XESS_QUALITY_AVAILABLE_AT_RESOLUTION, + +//ReturncurrentXESSrenderingresolutioninpar1andpar2 +//par1:int*width +//par2:int*height +GET_XESS_RESOLUTION, + +//ReturnscurrentXESSversionasastring. +//par1:char*version +//par2:size_tversionSize +GET_XESS_VERSION, + +//ExecutesDLSS +//par1:DlssParams* +//par2:int*view_index +EXECUTE_DLSS, + +//ExecutesDLSS-G +//par1:DlssGParams* +//par2:int*view_index +EXECUTE_DLSS_G, + +//ExecutesDLSS +//par1:XessParams* +EXECUTE_XESS, + +//SetvelocityscalingforXeSS, +//par1:float*x +//par2:float*y +SET_XESS_VELOCITY_SCALE, + +//ExecuteFSR +//par1:amd::FSR::UpscalingArgs* +EXECUTE_FSR, + +//ExecuteFSR2 +//par1:Fsr2Params* +EXECUTE_FSR2, + +//ReturnscurrentFSR2stateasFsr2Statecastedtoint.Noparametersrequired +GET_FSR2_STATE, + +//ReturncurrentFSR2renderingresolutioninpar1andpar2 +//par1:int*width +//par2:int*height +GET_FSR2_RESOLUTION, + +//ExecutePSSR +//par1:d3d::PSSR::FrameParameters* +EXECUTE_PSSR, + +//ReturnsstateofMetalFXupscaleavailability(int) +GET_METALFX_UPSCALE_STATE, + +//ExecuteMetalFXupscale +//par1:MtlFxUpscaleParams* +EXECUTE_METALFX_UPSCALE, + +//Queriesthecurrenttimingstatisticsofthedriver. +//par1:ApointertoaDrv3dTimingsvariabletoreceivethetimingdata. +//par2:Optionalintptr_t(notapointer!)asanindexintothelistofpasttimings +//0iscurrent,1isoneframeinthepastandsoon. +//Return:Numberoftimingsavailable. +GET_TIMINGS, + +//ReportsthecurrentGPUmemoryusedbyraytraceaccelerationstructures. +//par1:(uint64_t*):Raytraceaccelerationstructuresmemoryusageinbytes. +GET_RAYTRACE_ACCELERATION_STRUCTURES_MEMORY_USAGE, + +//Simplecommand,printsthestringintothedebuglog. +//Themessageisprintedasthedriverexecutesthecommandstreamitmighthasrecorded. +//Thiscommandisdesignedprimarilyforpostmortemloganalysis,tohaveaorientationpoint +//forothermessages,toeasiertrackdownlocationsofinterest. +//Takesupto3parameters: +//Firstisthestring,secondisthestringlengthasintptr_t(<=0meansusestrlen), +//andthirdisseveritylevelasintptr_t(0-debug,1-warning,2-error). +DEBUG_MESSAGE, + +//Returnsunique,identifiablenamesofactivemonitors(eg."\\.\DISPLAY1"),whichareattachedtotheactiveadapter +//par1:Tab<String>*monitorNames +GET_MONITORS, + +//Returnssomeuser-friendlyinfoaboutamonitor(friendlyname,uniqueindex) +//par1:constchar*uniqueMonitorName +//par1:String*friendlyMonitorName(optional) +//par2:int*uniqueMonitorIndex(optional) +GET_MONITOR_INFO, + +//Returnsavailableresolutionsforamonitor +//par1:Tab<String>*monitorNames +//par2:Tab<String>*availableResolutions +GET_RESOLUTIONS_FROM_MONITOR, + +GET_VIDEO_MEMORY_BUDGET, + +//Returnsahandlefortheplatformspecificgraphicscommandqueue +//par1:void**handleHolder +GET_RENDERING_COMMAND_QUEUE, + +//Returnsthecorrespondingvulkanobjectsonpar1 +GET_INSTANCE, +GET_PHYSICAL_DEVICE, +GET_QUEUE_FAMILY_INDEX, +GET_QUEUE_INDEX, + +//Shouldbecalledwhenworkcycleupdateloopdecides +//thatnodrawingwillbeperformedduetoappbeinghidden/inactive/minimized +PROCESS_APP_INACTIVE_UPDATE, + +//StartsspecialBBrotatetransformpass +PRE_ROTATE_PASS, + +//par1isapointertoanos_event_t,whichisgoingtobe +//signaledoncetherenderingofthecurrentframeiscompleted +//ontheGPU. +REGISTER_FRAME_COMPLETION_EVENT, + +//par1isapointertoaFrameEventsobject. +//par2isunderstoodasaboolean,specifyingifeventsshouldcomingfromfrontendorbackend +REGISTER_ONE_TIME_FRAME_EXECUTION_EVENT_CALLBACKS, + +//Thedriverwillreportallresourcestatetransitions,ofthegivenresource,tothedebuglog. +//par1pointertoresourcetobetracked. +//Returns1ifthedriversupportsthiscommand. +REPORT_RESOURCE_STATE_TRANSITIONS, + +//par1isapointertoaDeviceResetEventHandlerobject. +REGISTER_DEVICE_RESET_EVENT_HANDLER, +UNREGISTER_DEVICE_RESET_EVENT_HANDLER, + +//TellsthedrivertotransitionthetexturespassedintoastatethatitisconsumeablebyVR +//runtimes.ThisshouldbeRB_RW_RENDER_TARGETorRB_RW_DEPTH_STENCIL_TARGET. +//par1isanarrayofBaseTexture*pointers. +//par2isthenumberoftexturesinthearray. +PREPARE_TEXTURES_FOR_VR_CONSUMPTION, + +//Informsdriveraboutcurrentappname&version/buildnumber +//par1isappnamestring, +//par2isappveruint32_t +SET_APP_INFO, + +//UsestheprovideddatatosimulateaGPUcrash,wherewecaptureadumpandsendittologsserver. +//Logssendbythiswillhaveaextrametadatafield"was-manually-send"settotrue. +//par1:constchar*dump_type:currentlyonly"nv-gpudmp"issupported,anyotherwillbeignored. +//par2:constvoid*dump_data:pointertodumpdatatouse. +//par3:uintptr_tdump_data_size:sizeofthedataof'dump_data'. +SEND_GPU_CRASH_DUMP, + +//Allowstellingdrivertoperformneededperf-frameupdate(whenusedfromwaitcycleonmainthread) +//return1whenpendingopsperformed,0otherwise +PROCESS_PENDING_RESOURCE_UPDATED, + +GET_PS5_PSSR_STATUS, + +SET_FREQ_LEVEL, + +//Fordebugpurpose. +//Ifthisreturnstruethentherenderthreadwillbewaitaftereachdrawanddispatchcalls. +//ThishelpsinvestigatingwhichcommandcauseserroronGPU. +ENABLE_IMMEDIATE_FLUSH, +DISABLE_IMMEDIATE_FLUSH, + +GET_WORKER_CPU_CORE, + +//SetstothePS5driverwhicheyeisrenderedinVRandgetbackthedistortionresolveLUT'sID +SET_PS5_FSR_VIEW, + +//par1:boolenable/disableHDR +SET_HDR, + +//Thisraisesadebugbreakevent/signalinthedriverwhenitisexecuted. +//Driverswithbackendworkersthiswillbeexecutedinthatthread. +//Thiscommandallowstodebugbreakintothebackendtohelpwithissuesduringexecutionofd3dcommands. +DEBUG_BREAK, +//Addsastringthatissearchedintheresolvedcallstackstringandiffoundadebugbreakeventisraised. +ADD_DEBUG_BREAK_STRING_SEARCH, +//RemovesastringpreviouslyaddedwithADD_DEBUG_BREAK_STRING_SEARCH +REMOVE_DEBUG_BREAK_STRING_SEARCH, + +IS_DEFRAG_REQUESTED, +//returnstrueifdefragmentationwasdone +PROCESS_PENDING_DEFRAG_REQUESTS, + +//par1:CompilePipelineSet* +COMPILE_PIPELINE_SET, + +//par1:Sbuffer* +//par2:uint64_t* +GET_BUFFER_GPU_ADDRESS, + +ENABLE_WORKER_LOW_LATENCY_MODE, + +//par1enable(ifpar1notnull)/disablelogerrreportingwhendoingsyncreadbackoftextures/buffers +LOGERR_ON_SYNC, + +//Registersadrivernetworkmanagerthatwiilbeusedtosenddatafromclient +//Afterthecommandexecutionthedriverwilltakeownershipoftheobject +//par1:pointeronaDriverNetManagerobject +SET_DRIVER_NETWORD_MANAGER, + +//Getsiftheconsoleisrunningat120Hz +//returnstrueifrunningonaconsoleandthedisplayisrunningat120Hz +GET_CONSOLE_HFR_STATUS, + +//Getsiftheconsoleiscapabletorunat120Hz +//returnstrueifrunningonaconsoleandthedisplaysupports120Hz +GET_CONSOLE_HFR_SUPPORTED, + +//CollectsadumpofallgpuresourcescurrentlyinmemorytoavectorofResourceDumpInfostructs +//(ItworkssimilarlytoGET_TEXTURE_STATISTICS,howeverinsteadofitdumpingabunchoftext +//itdumpsitintothesamevectorofstructsacrossalldrivers) +//par1:pointertoaTab<ResourceDumpInfo>object +GET_RESOURCE_STATISTICS, + +//helperforlowlevelAPIs(vulkan)toimprovebarriertrackingonbatchedworkloads +//delaydisablesbarriergenerationtillcontinueiscalled +//whencontinueiscalled,recordedworkisanalyzedtoplacebarriersatpointoftimewhendelaywascalled +//thiswaybatchedworkloadisfreefrombarriers, +//whiletrackingisstillproperlyperformedandproperbarriersgenerated +// +//forsimplicity +//-nestingdelay-continuepairsisnotallowed +//-delay-continuepairmustbecompletedbeforeflushing/submittingworkloadtoGPU +DELAY_SYNC, +CONTINUE_SYNC, + +// +//ChangesGPUqueue/pipelinewhereorderdependantactioncommandswillbesubmitted +//i.e.dispatches,draws,andmostlyanycommandsthatexecuteworkonGPUandrequireGPUlock +//Representsqueue+commandbuffercombooflowlevelgraphicsAPIs +//MustbecalledunderGPUlock +//Effectofthiscommanddonot"revert"backonsomeautomaticbasis,yet +//devicereset/queueflushrestoresqueuetodefault(graphics) +//GpuPipelineparametersofd3d::APIcallsareignoredwhenthiscommandisineffect +// +//par1:GpuPipeline-targetqueue/pipelinewherecommandswillbesubmittedafterthiscommand +// +//returns1ifdriverswitchedqueue,otherwisereturns0 +CHANGE_QUEUE, + +USER=1000, +}; + +enum +{ +DRV3D_CPU_FREQ_TYPE_QPC,//QueryPerformanceCounter/QueryPerformanceFrequency +DRV3D_CPU_FREQ_TYPE_REF,//ref_time_ticks/ref_ticks_frequency.OftensameasDRV3D_CPU_FREQ_TYPE_QPC(butnotalways,see +//implementation!) +DRV3D_CPU_FREQ_NSEC,//timestampisnanoseconds,clock_gettime/1000000000ull +DRV3D_CPU_FREQ_TYPE_PROFILE,//profile_ref_ticks/profile_ticks_frequency +DRV3D_CPU_FREQ_TYPE_UNKNOWN, +}; + +//Allvaluesareinticks +structDrv3dTimings +{ +longlongfrontendUpdateScreenInterval; +longlongfrontendToBackendUpdateScreenLatency; +longlongfrontendBackendWaitDuration; +longlongbackendFrontendWaitDuration; +longlonggpuWaitDuration; +longlongpresentDuration; +longlongbackbufferAcquireDuration; +longlongfrontendWaitForSwapchainDuration; +}; + +structCompilePipelineSet +{ +constchar*defaultFormat; +constDataBlock*featureSet; +constDataBlock*inputLayoutSet; +constDataBlock*renderStateSet; +constDataBlock*outputFormatSet; +constDataBlock*graphicsPipelineSet; +constDataBlock*meshPipelineSet; +constDataBlock*computePipelineSet; +constDataBlock*signature; +constDataBlock*computeSet; +constDataBlock*graphicsSet; +constDataBlock*graphicsNullPixelOverrideSet; +constDataBlock*graphicsPixelOverrideSet; +}; + +enumResourceBarrier:int; + +structDrv3dMakeTextureParams +{ +void*tex; +constchar*name; +intflg; +intw,h,layers,mips; +ResourceBarriercurrentState; +}; + +namespaced3d +{ +intdriver_command(Drv3dCommandcommand,void*par1=nullptr,void*par2=nullptr,void*par3=nullptr); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineintdriver_command(Drv3dCommandcommand,void*p1,void*p2,void*p3){returnd3di.driver_command(command,p1,p2,p3);} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__consts_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__consts_8h.xml new file mode 100644 index 000000000..287be7ad5 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__consts_8h.xml @@ -0,0 +1,3820 @@ + + + + dag_consts.h + drv/3d/dag_driverCode.h + drv/3d/dag_shaderModelVersion.h + drv/3d/dag_consts_base.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_vertexIndexBuffer.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_shaderConstants.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_interface_table.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_buffers.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_resourceChecker.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_barrier.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_heap.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_dispatch.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_driver.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_variableRateShading.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_texture.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_renderPass.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_shader.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverCapabilitiesBase + DeviceDriverCapabilitiesXboxOne + DeviceDriverCapabilitiesScarlett + DeviceDriverCapabilitiesPS4 + DeviceDriverCapabilitiesPS5 + DeviceDriverCapabilitiesIOS + DeviceDriverCapabilitiesTVOS + DeviceDriverCapabilitiesNintendoSwitch + DeviceDriverCapabilitiesAndroid + DeviceDriverCapabilitiesMacOSX + DeviceDriverCapabilitiesLinux + DeviceDriverCapabilitiesWindows + DeviceDriverIssuesBase + DeviceDriverIssuesAndroid + DeviceDriverIssuesWindows + DeviceDriverIssuesNoIssues + DeviceDriverRaytraceProperties + Driver3dDesc + + + VSDOP_MASK + (7 << 29) + + + + + + + + + + VSDOP_STREAM + (1 << 29) + + + + + + + + + + VSDOP_INPUT + (2 << 29) + + + + + + + + + + VSDT_MASK + (31 << 16) + + + + + + + + + + VSDR_MASK + 31 + + + + + + + + + + VSDS_MASK + 15 + + + + + + + + + + VSDS_PER_INSTANCE_DATA + 16 + + + + + + + + + + GET_VSDREG + a + ((a)&VSDR_MASK) + + + + + + + + + + MAKE_VSDREG + a + (a) + + + + + + + + + + GET_VSDSTREAM + a + ((a)&VSDS_MASK) + + + + + + + + + + MAKE_VSDSTREAM + a + (a) + + + + + + + + + + VSD_SKIPFLG + (1 << 28) + + + + + + + + + + GET_VSDSKIP + a + (((a) >> 16) & 15) + + + + + + + + + + VSD_END + 0xFFFFFFFF + + + + + + + + + + VSTREAMSRC_NORMAL_DATA + 0 + + + + + + + + + + VSTREAMSRC_INDEXED_DATA + (1 << 30) + + + + + + + + + + VSTREAMSRC_INSTANCE_DATA + (2 << 30) + + + + + + + + + + + + + ShaderStage + + STAGE_CS + + + + + + + STAGE_PS + + + + + + + STAGE_VS + + + + + + + STAGE_MAX + + + + + + + STAGE_RAYTRACE + = STAGE_MAX + + + + + + + STAGE_CS_ASYNC_STATE + = STAGE_MAX + + + + + + + STAGE_MAX_EXT + + + + + + + + + + + + + + + + GpuPipeline + + GRAPHICS + + + + + + + ASYNC_COMPUTE + + + + + + + TRANSFER + + + + + + + + + + + + + + + + @40 + + MAXSAMPLERS + = 16 + + + + + + + MAXSTREAMS + = 16 + + + + + + + MAXSAMPLERS_VS + = 4 + + + + + + + MAX_SLI_AFRS + = 4 + + + + + + + + + + + + + + + + @41 + + VDECLUSAGE_POS + = 0 + + + + + + + VDECLUSAGE_BLENDW + + + + + + + VDECLUSAGE_BLENDIND + + + + + + + VDECLUSAGE_NORM + + + + + + + VDECLUSAGE_PSIZE + + + + + + + VDECLUSAGE_TC + + + + + + + VDECLUSAGE_TANG + + + + + + + VDECLUSAGE_BINORM + + + + + + + VDECLUSAGE_TESSFACTOR + + + + + + + VDECLUSAGE_TPOS + + + + + + + VDECLUSAGE_COLOR + + + + + + + VDECLUSAGE_FOG + + + + + + + VDECLUSAGE_DEPTH + + + + + + + VDECLUSAGE_SAMPLE + + + + + + + + + + + + + + + + @42 + + SBCF_USAGE_SHADER_BINDING_TABLE + = 0x0001 + + + +Buffer can be used as a shader binding table. Should not be used directly, use get_shader_binding_table_buffer_properties to calculate all properties, including create flags. + + + + SBCF_USAGE_ACCELLERATION_STRUCTURE_BUILD_SCRATCH_SPACE + = 0x0002 + +Buffer is used as scratch space for RT structure builds. + + + + + + SBCF_DYNAMIC + = 0x0004 + + + + + + + SBCF_ZEROMEM + = 0x0010 + + + + + + + SBCF_INDEX32 + = 0x0020 + + + + + + + SBCF_FRAMEMEM + = 0x0080 + + + + + + + SBCF_USAGE_READ_BACK + = 0x0040 + + + + + + + SBCF_ALIGN16 + = 0x1000 + + + + + + + SBCF_CPU_ACCESS_MASK + = 0xC000 + + + + + + + SBCF_CPU_ACCESS_WRITE + = 0x4000 + + + + + + + SBCF_CPU_ACCESS_READ + = 0x8000 + + + + + + + SBCF_BIND_MASK + = 0x00FF0000 + + + + + + + SBCF_BIND_VERTEX + = 0x00010000 + + + + + + + SBCF_BIND_INDEX + = 0x00020000 + + + + + + + SBCF_BIND_CONSTANT + = 0x00040000 + + + + + + + SBCF_BIND_SHADER_RES + = 0x00080000 + + + + + + + SBCF_BIND_UNORDERED + = 0x00800000 + + + + + + + SBCF_MISC_MASK + = 0x7000000 + + + + + + + SBCF_MISC_DRAWINDIRECT + = 0x1000000 + + + + + + + SBCF_MISC_ALLOW_RAW + = 0x2000000 + + + + + + + SBCF_MISC_STRUCTURED + = 0x4000000 + + + + + + + SBCF_MISC_ESRAM_ONLY + = 0 + + + + + + + SBCF_CB_PERSISTENT + = SBCF_BIND_CONSTANT | SBCF_DYNAMIC + + + + + + + SBCF_CB_ONE_FRAME + = SBCF_BIND_CONSTANT | SBCF_DYNAMIC | SBCF_FRAMEMEM + + + + + + + SBCF_UA_SR_BYTE_ADDRESS + = SBCF_BIND_UNORDERED | SBCF_MISC_ALLOW_RAW | SBCF_BIND_SHADER_RES + + + + + + + SBCF_UA_SR_STRUCTURED + = SBCF_BIND_UNORDERED | SBCF_MISC_STRUCTURED | SBCF_BIND_SHADER_RES + + + + + + + SBCF_UA_BYTE_ADDRESS + = SBCF_BIND_UNORDERED | SBCF_MISC_ALLOW_RAW + + + + + + + SBCF_UA_STRUCTURED + = SBCF_BIND_UNORDERED | SBCF_MISC_STRUCTURED + + + + + + + SBCF_UA_BYTE_ADDRESS_READBACK + = SBCF_BIND_UNORDERED | SBCF_MISC_ALLOW_RAW | SBCF_USAGE_READ_BACK + + + + + + + SBCF_UA_STRUCTURED_READBACK + = SBCF_BIND_UNORDERED | SBCF_MISC_STRUCTURED | SBCF_USAGE_READ_BACK + + + + + + + SBCF_UA_INDIRECT + = SBCF_BIND_UNORDERED | SBCF_MISC_ALLOW_RAW | SBCF_MISC_DRAWINDIRECT + + + + + + + SBCF_INDIRECT + = SBCF_MISC_DRAWINDIRECT + + + + + + + SBCF_STAGING_BUFFER + = SBCF_CPU_ACCESS_READ | SBCF_CPU_ACCESS_WRITE + + + + + + + + + + + + + + + + @43 + + WRAP_COORD0 + = 1 + + + + + + + WRAP_COORD1 + = 2 + + + + + + + WRAP_COORD2 + = 4 + + + + + + + WRAP_COORD3 + = 8 + + + + + + + + + + + + + + + + @44 + + VCDEST_NONE + = 0 + + + + + + + VCDEST_AMB + + + + + + + VCDEST_DIFF + + + + + + + VCDEST_AMB_DIFF + + + + + + + VCDEST_EMIS + + + + + + + VCDEST_SPEC + + + + + + + + + + + + + + + + @45 + + WRITEMASK_RED0 + = (1U << 0) + + + + + + + WRITEMASK_GREEN0 + = (1U << 1) + + + + + + + WRITEMASK_BLUE0 + = (1U << 2) + + + + + + + WRITEMASK_ALPHA0 + = (1U << 3) + + + + + + + WRITEMASK_RED1 + = (WRITEMASK_RED0 << 4) + + + + + + + WRITEMASK_RED2 + = (WRITEMASK_RED1 << 4) + + + + + + + WRITEMASK_RED3 + = (WRITEMASK_RED2 << 4) + + + + + + + WRITEMASK_RED4 + = (WRITEMASK_RED3 << 4) + + + + + + + WRITEMASK_RED5 + = (WRITEMASK_RED4 << 4) + + + + + + + WRITEMASK_RED6 + = (WRITEMASK_RED5 << 4) + + + + + + + WRITEMASK_RED7 + = (WRITEMASK_RED6 << 4) + + + + + + + WRITEMASK_GREEN1 + = (WRITEMASK_GREEN0 << 4) + + + + + + + WRITEMASK_GREEN2 + = (WRITEMASK_GREEN1 << 4) + + + + + + + WRITEMASK_GREEN3 + = (WRITEMASK_GREEN2 << 4) + + + + + + + WRITEMASK_GREEN4 + = (WRITEMASK_GREEN3 << 4) + + + + + + + WRITEMASK_GREEN5 + = (WRITEMASK_GREEN4 << 4) + + + + + + + WRITEMASK_GREEN6 + = (WRITEMASK_GREEN5 << 4) + + + + + + + WRITEMASK_GREEN7 + = (WRITEMASK_GREEN6 << 4) + + + + + + + WRITEMASK_BLUE1 + = (WRITEMASK_BLUE0 << 4) + + + + + + + WRITEMASK_BLUE2 + = (WRITEMASK_BLUE1 << 4) + + + + + + + WRITEMASK_BLUE3 + = (WRITEMASK_BLUE2 << 4) + + + + + + + WRITEMASK_BLUE4 + = (WRITEMASK_BLUE3 << 4) + + + + + + + WRITEMASK_BLUE5 + = (WRITEMASK_BLUE4 << 4) + + + + + + + WRITEMASK_BLUE6 + = (WRITEMASK_BLUE5 << 4) + + + + + + + WRITEMASK_BLUE7 + = (WRITEMASK_BLUE6 << 4) + + + + + + + WRITEMASK_ALPHA1 + = (WRITEMASK_ALPHA0 << 4) + + + + + + + WRITEMASK_ALPHA2 + = (WRITEMASK_ALPHA1 << 4) + + + + + + + WRITEMASK_ALPHA3 + = (WRITEMASK_ALPHA2 << 4) + + + + + + + WRITEMASK_ALPHA4 + = (WRITEMASK_ALPHA3 << 4) + + + + + + + WRITEMASK_ALPHA5 + = (WRITEMASK_ALPHA4 << 4) + + + + + + + WRITEMASK_ALPHA6 + = (WRITEMASK_ALPHA5 << 4) + + + + + + + WRITEMASK_ALPHA7 + = (WRITEMASK_ALPHA6 << 4) + + + + + + + WRITEMASK_RED + = WRITEMASK_RED0 | WRITEMASK_RED1 | WRITEMASK_RED2 | WRITEMASK_RED3 | WRITEMASK_RED4 | WRITEMASK_RED5 | + WRITEMASK_RED6 | WRITEMASK_RED7 + + + + + + + WRITEMASK_GREEN + = WRITEMASK_GREEN0 | WRITEMASK_GREEN1 | WRITEMASK_GREEN2 | WRITEMASK_GREEN3 | WRITEMASK_GREEN4 | WRITEMASK_GREEN5 | + WRITEMASK_GREEN6 | WRITEMASK_GREEN7 + + + + + + + WRITEMASK_BLUE + = WRITEMASK_BLUE0 | WRITEMASK_BLUE1 | WRITEMASK_BLUE2 | WRITEMASK_BLUE3 | WRITEMASK_BLUE4 | WRITEMASK_BLUE5 | + WRITEMASK_BLUE6 | WRITEMASK_BLUE7 + + + + + + + WRITEMASK_ALPHA + = WRITEMASK_ALPHA0 | WRITEMASK_ALPHA1 | WRITEMASK_ALPHA2 | WRITEMASK_ALPHA3 | WRITEMASK_ALPHA4 | WRITEMASK_ALPHA5 | + WRITEMASK_ALPHA6 | WRITEMASK_ALPHA7 + + + + + + + WRITEMASK_RGB + = WRITEMASK_RED | WRITEMASK_GREEN | WRITEMASK_BLUE + + + + + + + WRITEMASK_ALL + = 0xFFFFFFFFU + + + + + + + WRITEMASK_DEFAULT + = WRITEMASK_ALL + + + + + + + + + + + + + + + + XessState + + UNSUPPORTED_DEVICE + + + + + + + UNSUPPORTED_DRIVER + + + + + + + INIT_ERROR_UNKNOWN + + + + + + + DISABLED + + + + + + + SUPPORTED + + + + + + + READY + + + + + + + + + + + + + + + + Fsr2State + + NOT_CHECKED + + + + + + + INIT_ERROR + + + + + + + SUPPORTED + + + + + + + READY + + + + + + + + + + + + + + + + MtlfxUpscaleState + + UNSUPPORTED + + + + + + + READY + + + + + + + + + + + + + + + + HdrOutputMode + + SDR_ONLY + = 0 + + + + + + + HDR10_AND_SDR + = 1 + + + + + + + HDR10_ONLY + = 2 + + + + + + + HDR_ONLY + = 3 + + + + + + + + + + + + + + + + CSPreloaded + + No + + + + + + + Yes + + + + + + + + + + + + + + + unsigned + DepthResolveMode + + DEPTH_RESOLVE_MODE_NONE + = 0 + + + +Depth resolve unsupported. + + + + DEPTH_RESOLVE_MODE_SAMPLE_ZERO + = 1 << 0 + + + +Use a value from the 0th sample. If depth resolve is supported, this is generally supported too. + + + + DEPTH_RESOLVE_MODE_AVERAGE + = 1 << 1 + + + +Use the average value from all samples. Not supported on iOS, rarely supported on Android Vulkan. + + + + DEPTH_RESOLVE_MODE_MIN + = 1 << 2 + + + +Use the smallest value from all samples. Supported on iOS, rarely supported on Android Vulkan. + + + + DEPTH_RESOLVE_MODE_MAX + = 1 << 3 + + + +Same as DEPTH_RESOLVE_MODE_MIN, but the largest value is used instead. + + + + + +This enum defines bits signalling supported depth resolve modes. Depth resolve is a functionality supported by some GAPIs which allows to resolve MSAA depth into a single sampled one. +In the context of Vulkan, we do additional checks to determine supported depth resolve modes. Therefore, fewer modes than the driver returns can be reported. + + + + + + + + @46 + + DRV3D_FRAMERATE_LIMITED_BY_NOTHING + = 0x0 + + + + + + + DRV3D_FRAMERATE_LIMITED_BY_REPLAY_WAIT + = 0x1 + + + + + + + DRV3D_FRAMERATE_LIMITED_BY_REPLAY_UNDERFEED + = 0x2 + + + + + + + DRV3D_FRAMERATE_LIMITED_BY_GPU_UTILIZATION + = 0x4 + + + + + + + + + + + + + + + + VariableRateShadingCombiner + + VRS_PASSTHROUGH + +selects rate value from previous stage + + + + + + VRS_OVERRIDE + +selects rate from this stage + + + + + + VRS_MIN + +selects min of previous and this stage + + + + + + VRS_MAX + +selects max of previous and this stage + + + + + + VRS_SUM + +adds values of previous and this stage and clamps it to max possible value + + + + + +Combiners for VRS for vertex stage and pixel shader state. + + +Should the device support DeviceDriverCapabilities::hasVariableRateShadingCombiners, then each combiner can be used for any stage in any combination. When DeviceDriverCapabilities::hasVariableRateShadingCombiners is not supported then the following restrictions apply: +vertex state can only be PASSTHROUGH +if DeviceDriverCapabilities::hasVariableRateShadingShaderOutput is supported then vertex state can additionally be OVERRIDE +pixel state can only be PASSTHROUGH +if DeviceDriverCapabilities::hasVariableRateShadingTexture is supported then pixel state can additionally be OVERRIDE + + + + + + + + + int + ResourceBarrier + + RB_RW_RENDER_TARGET + = 1u << 0 + + + + + + + RB_RW_UAV + = 1u << 1 + + + + + + + RB_RW_COPY_DEST + = 1u << 2 + + + + + + + RB_RW_BLIT_DEST + = 1u << 3 + + + + + + + RB_RO_SRV + = 1u << 4 + + + + + + + RB_RO_CONSTANT_BUFFER + = 1u << 5 + + + + + + + RB_RO_VERTEX_BUFFER + = 1u << 6 + + + + + + + RB_RO_INDEX_BUFFER + = 1u << 7 + + + + + + + RB_RO_INDIRECT_BUFFER + = 1u << 8 + + + + + + + RB_RO_VARIABLE_RATE_SHADING_TEXTURE + = 1u << 9 + + + + + + + RB_RO_COPY_SOURCE + = 1u << 10 + + + + + + + RB_RO_BLIT_SOURCE + = 1u << 11 + + + + + + + RB_RO_RAYTRACE_ACCELERATION_BUILD_SOURCE + = 1u << 12 + + + + + + + RB_FLAG_RELEASE_PIPELINE_OWNERSHIP + = 1u << 13 + + + + + + + RB_FLAG_ACQUIRE_PIPELINE_OWNERSHIP + = 1u << 14 + + + + + + + RB_FLAG_SPLIT_BARRIER_BEGIN + = 1u << 15 + + + + + + + RB_FLAG_SPLIT_BARRIER_END + = 1u << 16 + + + + + + + RB_STAGE_VERTEX + = 1u << 17 + + + + + + + RB_STAGE_PIXEL + = 1u << 18 + + + + + + + RB_STAGE_COMPUTE + = 1u << 19 + + + + + + + RB_STAGE_RAYTRACE + = 1u << 20 + + + + + + + RB_FLUSH_UAV + = 1u << 21 + + + + + + + RB_FLAG_DONT_PRESERVE_CONTENT + = 1u << 22 + + + + + + + RB_SOURCE_STAGE_VERTEX + = 1u << 23 + + + + + + + RB_SOURCE_STAGE_PIXEL + = 1u << 24 + + + + + + + RB_SOURCE_STAGE_COMPUTE + = 1u << 25 + + + + + + + RB_SOURCE_STAGE_RAYTRACE + = 1u << 26 + + + + + + + RB_ALIAS_FROM + = 1u << 27 + + + + + + + RB_ALIAS_TO + = 1u << 28 + + + + + + + RB_RO_SHADER_BINDING_TABLE + = 1u << 29 + + + + + + + RB_FLUSH_RAYTRACE_ACCELERATION_BUILD_SCRATCH_USE + = 1u << 30 + + + + + + + RB_ALIAS_TO_AND_DISCARD + = RB_ALIAS_TO | RB_FLAG_DONT_PRESERVE_CONTENT + + + + + + + RB_ALIAS_ALL + = RB_ALIAS_FROM | RB_ALIAS_TO + + + + + + + RB_SOURCE_STAGE_ALL_GRAPHICS + = RB_SOURCE_STAGE_VERTEX | RB_SOURCE_STAGE_PIXEL + + + + + + + RB_SOURCE_STAGE_ALL_SHADERS + = RB_SOURCE_STAGE_VERTEX | RB_SOURCE_STAGE_PIXEL | RB_SOURCE_STAGE_COMPUTE | RB_SOURCE_STAGE_RAYTRACE + + + + + + + RB_RW_DEPTH_STENCIL_TARGET + = RB_RW_RENDER_TARGET + + + + + + + RB_RO_CONSTANT_DEPTH_STENCIL_TARGET + = RB_RW_DEPTH_STENCIL_TARGET | RB_RO_SRV + + + + + + + RB_RO_GENERIC_READ_BUFFER + = RB_RO_SRV | RB_RO_CONSTANT_BUFFER | RB_RO_VERTEX_BUFFER | RB_RO_INDEX_BUFFER | RB_RO_COPY_SOURCE | + RB_RO_RAYTRACE_ACCELERATION_BUILD_SOURCE + + + + + + + RB_RO_GENERIC_READ_TEXTURE + = RB_RO_SRV | RB_RO_COPY_SOURCE | RB_RO_BLIT_SOURCE | RB_RO_VARIABLE_RATE_SHADING_TEXTURE + + + + + + + RB_STAGE_ALL_SHADERS + = RB_STAGE_VERTEX | RB_STAGE_PIXEL | RB_STAGE_COMPUTE | RB_STAGE_RAYTRACE + + + + + + + RB_STAGE_ALL_GRAPHICS + = RB_STAGE_VERTEX | RB_STAGE_PIXEL + + + + + + + RB_NONE + = 0 + + + + + + + + + + + + + + + int + RenderPassTargetAction + + RP_TA_NONE + = 0 + +No action with target will happen. + + +Only dependencyBarrier of binding will be executed for this target Content of target becomes invalid if no action is supplied overall + + + + + + RP_TA_LOAD_READ + = 1u << 0 + +Loads contents of target from memory to framebuffer. + + +Avoid load operations on TBDR hardware + + + + + + RP_TA_LOAD_CLEAR + = 1u << 1 + +Loads clear value to framebuffer instead of doing any memory operation. + + + + + + RP_TA_LOAD_NO_CARE + = 1u << 2 + +Don't care about loading contents of target (aka discard) + + +Initial content of frame buffer is underfined, make sure to handle this + + + + + + RP_TA_LOAD_MASK + = RP_TA_LOAD_NO_CARE | RP_TA_LOAD_CLEAR | RP_TA_LOAD_READ + +Bitmask of any load operation. + + +load action is performed for each target when its being accessed for the first time in render pass + + + + + + RP_TA_SUBPASS_READ + = 1u << 3 + +Target contents will be readed by subpass. + + +This corresponds to SubpassInput with SubpassLoad inside shader + +Generic implementation uses T register with subpassBindingOffset instead of SubpassInput, this must be handled properly in shader code + + + + + + RP_TA_SUBPASS_RESOLVE + = 1u << 4 + +Target will be used as MSAA resolve destination of MSAA target bound in same slot. + + +MSAA Depth resolve is optional feature if non generic implementation is used + +Must supply MSAA target in same slot in another binding otherwise creation on render pass will fail + + + + + + RP_TA_SUBPASS_WRITE + = 1u << 5 + +Target contents will be written by subpass. + + + + + + RP_TA_SUBPASS_KEEP + = 1u << 6 + +Target contents will be keeped intact if it was not used in subpass (otherwise UB) + + + + + + RP_TA_SUBPASS_MASK + = RP_TA_SUBPASS_READ | RP_TA_SUBPASS_RESOLVE | RP_TA_SUBPASS_WRITE | RP_TA_SUBPASS_KEEP + +Bitmask of any subpass operation. + + + + + + RP_TA_STORE_WRITE + = 1u << 7 + +Contents of framebuffer will be written to target memory. + + + + + + RP_TA_STORE_NONE + = 1u << 8 + +Contents of framebuffer will not be stored. + + + + + + RP_TA_STORE_NO_CARE + = 1u << 9 + +Don't care about target memory contents. + + +Target memory contents will be left in UB state + + + + + + RP_TA_STORE_MASK + = RP_TA_STORE_NO_CARE | RP_TA_STORE_NONE | RP_TA_STORE_WRITE + +Bitmask of any load operation. + + +store action is performed once for each target on whole pass completion + + + + + +Bitfield of actions that happen with target at given slot and subpass. + + + + + + + + + int + RenderPassExtraIndexes + + RP_INDEX_NORMAL + = 0 + + + + + + + RP_SUBPASS_EXTERNAL_END + = -1 + +Pseudo subpass index, that happens at end of render pass. + + +Used to provide store actions as well as dependencyBarriers for generic implementation + + + + RP_SLOT_DEPTH_STENCIL + = -1 + +Slot for depth/stencil. + + +Using this slot will bind target as depth/stencil + + + +extra indexes that encode special cases of render pass description + + + + + + + + + + + int + typedef int VPROG + + VPROG + + + + + + + + + + int + typedef int FSHADER + + FSHADER + + + + + + + + + + int + typedef int VDECL + + VDECL + + + + + + + + + + int + typedef int PROGRAM + + PROGRAM + + + + + + + + + + int + typedef int PALID + + PALID + + + + + + + + + + int + typedef int VPRTYPE + + VPRTYPE + + + + + + + + + + unsigned long + typedef unsigned long FSHTYPE + + FSHTYPE + + + + + + + + + + unsigned long + typedef unsigned long VSDTYPE + + VSDTYPE + + + + + + + + + + unsigned long long + typedef unsigned long long GPUFENCEHANDLE + + GPUFENCEHANDLE + + + + + + + + + + DeviceDriverCapabilitiesBase + using DeviceDriverCapabilities = DeviceDriverCapabilitiesBase + + DeviceDriverCapabilities + + + + + + + + + + DeviceDriverIssuesNoIssues + using DeviceDriverIssues = DeviceDriverIssuesNoIssues + + DeviceDriverIssues + + + + + + + + + + d3d::shadermodel::Version + using DeviceDriverShaderModelVersion = d3d::shadermodel::Version + + DeviceDriverShaderModelVersion + + + + + + + + + + + + constexpr int + constexpr int BAD_VPROG + + BAD_VPROG + = -1 + + + + + + + + + + constexpr int + constexpr int BAD_FSHADER + + BAD_FSHADER + = -1 + + + + + + + + + + constexpr int + constexpr int BAD_VDECL + + BAD_VDECL + = -1 + + + + + + + + + + constexpr int + constexpr int BAD_PROGRAM + + BAD_PROGRAM + = -1 + + + + + + + + + + constexpr int + constexpr int BAD_PALID + + BAD_PALID + = -1 + + + + + + + + + + constexpr GPUFENCEHANDLE + constexpr GPUFENCEHANDLE BAD_GPUFENCEHANDLE + + BAD_GPUFENCEHANDLE + = 0 + + + + + + + + + + constexpr size_t + constexpr size_t RT_TRANSFORM_SIZE + + RT_TRANSFORM_SIZE + = sizeof(float) * 12 + + + + + + + + + + + + constexpr ResourceBarrier + constexpr ResourceBarrier operator| + (ResourceBarrier l, ResourceBarrier r) + operator| + + ResourceBarrier + l + + + ResourceBarrier + r + + + + + + + + + + + constexpr ResourceBarrier + constexpr ResourceBarrier operator& + (ResourceBarrier l, ResourceBarrier r) + operator& + + ResourceBarrier + l + + + ResourceBarrier + r + + + + + + + + + + + constexpr ResourceBarrier + constexpr ResourceBarrier operator^ + (ResourceBarrier l, ResourceBarrier r) + operator^ + + ResourceBarrier + l + + + ResourceBarrier + r + + + + + + + + + + + constexpr RenderPassTargetAction + constexpr RenderPassTargetAction operator| + (RenderPassTargetAction l, RenderPassTargetAction r) + operator| + + RenderPassTargetAction + l + + + RenderPassTargetAction + r + + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_driverCode.h> +#include<drv/3d/dag_shaderModelVersion.h> + +//declarespecifictypes +typedefintVPROG; +staticconstexprintBAD_VPROG=-1; + +typedefintFSHADER; +staticconstexprintBAD_FSHADER=-1; + +typedefintVDECL; +staticconstexprintBAD_VDECL=-1; + +typedefintPROGRAM; +staticconstexprintBAD_PROGRAM=-1; + +typedefintPALID; +staticconstexprintBAD_PALID=-1; + +typedefintVPRTYPE; +typedefunsignedlongFSHTYPE; +typedefunsignedlongVSDTYPE; + +typedefunsignedlonglongGPUFENCEHANDLE; +constexprGPUFENCEHANDLEBAD_GPUFENCEHANDLE=0; + +staticconstexprsize_tRT_TRANSFORM_SIZE=sizeof(float)*12; + +enumShaderStage +{ +STAGE_CS, +STAGE_PS, +STAGE_VS, +//keepasis,don'tbloatotherbackendswhentheycan'tsupportit +STAGE_MAX, + +STAGE_RAYTRACE=STAGE_MAX, +STAGE_CS_ASYNC_STATE=STAGE_MAX,//STAGE_CS_ASYNC_STATEisonlysupportedinDX11,andSTAGE_RAYTRACEisnotsupportedthere. + +STAGE_MAX_EXT +}; + +enumclassGpuPipeline +{ +GRAPHICS, +ASYNC_COMPUTE, +TRANSFER +}; + +//generallimitations +enum +{ +MAXSAMPLERS=16, +MAXSTREAMS=16, +MAXSAMPLERS_VS=4, +MAX_SLI_AFRS=4 +}; + +//vertexstreamdeclarations +#defineVSDOP_MASK(7<<29) +#defineVSDOP_STREAM(1<<29) +#defineVSDOP_INPUT(2<<29) + +#defineVSDT_MASK(31<<16) +#defineVSDR_MASK31 +#defineVSDS_MASK15 +#defineVSDS_PER_INSTANCE_DATA16 +#defineGET_VSDREG(a)((a)&VSDR_MASK) +#defineMAKE_VSDREG(a)(a) +#defineGET_VSDSTREAM(a)((a)&VSDS_MASK) +#defineMAKE_VSDSTREAM(a)(a) +#defineVSD_SKIPFLG(1<<28) +#defineGET_VSDSKIP(a)(((a)>>16)&15) + +//doesnothing,butwastesspace;whydoyouneedit? +//#defineVSD_NOP0 + +//endofdeclaration +#defineVSD_END0xFFFFFFFF + +enum +{ +VDECLUSAGE_POS=0, +VDECLUSAGE_BLENDW,//1 +VDECLUSAGE_BLENDIND,//2 +VDECLUSAGE_NORM,//3 +VDECLUSAGE_PSIZE,//4 +VDECLUSAGE_TC,//5 +VDECLUSAGE_TANG,//6 +VDECLUSAGE_BINORM,//7 +VDECLUSAGE_TESSFACTOR,//8 +VDECLUSAGE_TPOS,//9 +VDECLUSAGE_COLOR,//10 +VDECLUSAGE_FOG,//11 +VDECLUSAGE_DEPTH,//12 +VDECLUSAGE_SAMPLE,//13 +}; + + +#defineVSTREAMSRC_NORMAL_DATA0 +#defineVSTREAMSRC_INDEXED_DATA(1<<30) +#defineVSTREAMSRC_INSTANCE_DATA(2<<30) + + +enum +{ +SBCF_USAGE_SHADER_BINDING_TABLE=0x0001, +SBCF_USAGE_ACCELLERATION_STRUCTURE_BUILD_SCRATCH_SPACE=0x0002, +//Createdynamicbuffer +//meansdataisfrequentlychangedinitanditshouldhandleitfaster,alsomeans +//-bufferisCPUvisible +//-mustsupportlockwithdiscard/nooverwrite +//additionallogicthatismostlysupported,butbetterbeavoided +//(allowstargetspecificoptimizationswhenavoided) +//-bufferdatathatislockedbutnotwrittentoispersistent +//-lockswithnooverwriteflagscanbeoverlappedinoneframe +SBCF_DYNAMIC=0x0004, +SBCF_ZEROMEM=0x0010,//Makesuredriverhasclearedthebuffer(PS4,PS5) +SBCF_INDEX32=0x0020,//Use32-bitindices + +//Usesfastdiscardcodepath,allowingtomoreefficientlyutilizememmanagement +//there'sfewlimitation-itcanonlybelockedwithdiscardflag,therehastobecpuwriteaccessflag +//anditcan'tbeunordered +//thecontentsofsuchbufferisonlyvalidtilltheendoftheframe +//thedatahastobeupdatedeveryframewithdiscardflag +//somedriversmaychoosetoignorethisflagaltogether +//thisflagismeanttoaddafastCPU->GPUpathwherepossiblethusthosebuffersarenotGPUwritable +SBCF_FRAMEMEM=0x0080,//Usefastdiscardcodepath + +//waspreviouslySBCF_PS4_ONION +//-bufferisusedforreadbacksfromGPUanditshouldchooseamemorylayoutforthiskindofusage +//OnXBOXONE/SCARLETTandPS4thismappstoONIONbufferwhichresultsinbetterCPUaccessbehaviorthenGARLIC +SBCF_USAGE_READ_BACK=0x0040,//CreateCPUreadablebufferinasharedmemory(nosysmemcopies) + +SBCF_ALIGN16=0x1000,//GPUbuffer16bytealignment + +SBCF_CPU_ACCESS_MASK=0xC000,//CPUaccessflags(forstagingbuffer): +SBCF_CPU_ACCESS_WRITE=0x4000,//Host,sharedordevicememory +SBCF_CPU_ACCESS_READ=0x8000,//Hostorsharedmemory + +SBCF_BIND_MASK=0x00FF0000,//SHADERRESbuffer +SBCF_BIND_VERTEX=0x00010000,//VERTEXbuffer +SBCF_BIND_INDEX=0x00020000,//INDEXbuffer +SBCF_BIND_CONSTANT=0x00040000,//CONSTANTbuffer +SBCF_BIND_SHADER_RES=0x00080000,//SHADERRESbuffer +SBCF_BIND_UNORDERED=0x00800000,//UNORDEREDbuffer + +SBCF_MISC_MASK=0x7000000,//Resourcemiscflags +SBCF_MISC_DRAWINDIRECT=0x1000000,//D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS +SBCF_MISC_ALLOW_RAW=0x2000000,//D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS +SBCF_MISC_STRUCTURED=0x4000000,//D3D11_RESOURCE_MISC_BUFFER_STRUCTURED +#if_TARGET_XBOX +SBCF_MISC_ESRAM_ONLY=0x8000000, +#else +SBCF_MISC_ESRAM_ONLY=0, +#endif + +//Bufferflagsets. +//Constbuffers +//Suchbufferscouldbeupdatedfromtimetotime. +SBCF_CB_PERSISTENT=SBCF_BIND_CONSTANT|SBCF_DYNAMIC, +//Suchbuffersmustbeupdatedeveryframe.Becauseofthatwedon'tcareaboutitscontentondevicereset. +SBCF_CB_ONE_FRAME=SBCF_BIND_CONSTANT|SBCF_DYNAMIC|SBCF_FRAMEMEM, + +//UAVbuffers +//(RW)ByteAddressBufferinshader. +SBCF_UA_SR_BYTE_ADDRESS=SBCF_BIND_UNORDERED|SBCF_MISC_ALLOW_RAW|SBCF_BIND_SHADER_RES, +//(RW)StructuredBufferinshader. +SBCF_UA_SR_STRUCTURED=SBCF_BIND_UNORDERED|SBCF_MISC_STRUCTURED|SBCF_BIND_SHADER_RES, +//RWByteAddressBufferinshader. +SBCF_UA_BYTE_ADDRESS=SBCF_BIND_UNORDERED|SBCF_MISC_ALLOW_RAW, +//RWStructuredBufferinshader. +SBCF_UA_STRUCTURED=SBCF_BIND_UNORDERED|SBCF_MISC_STRUCTURED, +//ThesameasSBCF_UA_BYTE_ADDRESSbutitscontentcanbereadonCPU +SBCF_UA_BYTE_ADDRESS_READBACK=SBCF_BIND_UNORDERED|SBCF_MISC_ALLOW_RAW|SBCF_USAGE_READ_BACK, +//ThesameasSBCF_UA_STRUCTUREDbutitscontentcanbereadonCPU +SBCF_UA_STRUCTURED_READBACK=SBCF_BIND_UNORDERED|SBCF_MISC_STRUCTURED|SBCF_USAGE_READ_BACK, +//IndirectbufferfilledonGPU +SBCF_UA_INDIRECT=SBCF_BIND_UNORDERED|SBCF_MISC_ALLOW_RAW|SBCF_MISC_DRAWINDIRECT, + +//GPURObuffers +//IndirectbufferfilledonCPU +SBCF_INDIRECT=SBCF_MISC_DRAWINDIRECT, + +//Stagingbuffer +//AbufferfordatatransferonGPU +SBCF_STAGING_BUFFER=SBCF_CPU_ACCESS_READ|SBCF_CPU_ACCESS_WRITE +}; + +//---Renderstates--------- +enum +{ +WRAP_COORD0=1, +WRAP_COORD1=2, +WRAP_COORD2=4, +WRAP_COORD3=8, +}; + +enum +{ +VCDEST_NONE=0, +VCDEST_AMB, +VCDEST_DIFF, +VCDEST_AMB_DIFF, +VCDEST_EMIS, +VCDEST_SPEC, +}; + +//Flagsforwritemaskmethod +enum +{ +WRITEMASK_RED0=(1U<<0), +WRITEMASK_GREEN0=(1U<<1), +WRITEMASK_BLUE0=(1U<<2), +WRITEMASK_ALPHA0=(1U<<3), +WRITEMASK_RED1=(WRITEMASK_RED0<<4), +WRITEMASK_RED2=(WRITEMASK_RED1<<4), +WRITEMASK_RED3=(WRITEMASK_RED2<<4), +WRITEMASK_RED4=(WRITEMASK_RED3<<4), +WRITEMASK_RED5=(WRITEMASK_RED4<<4), +WRITEMASK_RED6=(WRITEMASK_RED5<<4), +WRITEMASK_RED7=(WRITEMASK_RED6<<4), +WRITEMASK_GREEN1=(WRITEMASK_GREEN0<<4), +WRITEMASK_GREEN2=(WRITEMASK_GREEN1<<4), +WRITEMASK_GREEN3=(WRITEMASK_GREEN2<<4), +WRITEMASK_GREEN4=(WRITEMASK_GREEN3<<4), +WRITEMASK_GREEN5=(WRITEMASK_GREEN4<<4), +WRITEMASK_GREEN6=(WRITEMASK_GREEN5<<4), +WRITEMASK_GREEN7=(WRITEMASK_GREEN6<<4), +WRITEMASK_BLUE1=(WRITEMASK_BLUE0<<4), +WRITEMASK_BLUE2=(WRITEMASK_BLUE1<<4), +WRITEMASK_BLUE3=(WRITEMASK_BLUE2<<4), +WRITEMASK_BLUE4=(WRITEMASK_BLUE3<<4), +WRITEMASK_BLUE5=(WRITEMASK_BLUE4<<4), +WRITEMASK_BLUE6=(WRITEMASK_BLUE5<<4), +WRITEMASK_BLUE7=(WRITEMASK_BLUE6<<4), +WRITEMASK_ALPHA1=(WRITEMASK_ALPHA0<<4), +WRITEMASK_ALPHA2=(WRITEMASK_ALPHA1<<4), +WRITEMASK_ALPHA3=(WRITEMASK_ALPHA2<<4), +WRITEMASK_ALPHA4=(WRITEMASK_ALPHA3<<4), +WRITEMASK_ALPHA5=(WRITEMASK_ALPHA4<<4), +WRITEMASK_ALPHA6=(WRITEMASK_ALPHA5<<4), +WRITEMASK_ALPHA7=(WRITEMASK_ALPHA6<<4), +WRITEMASK_RED=WRITEMASK_RED0|WRITEMASK_RED1|WRITEMASK_RED2|WRITEMASK_RED3|WRITEMASK_RED4|WRITEMASK_RED5| +WRITEMASK_RED6|WRITEMASK_RED7, +WRITEMASK_GREEN=WRITEMASK_GREEN0|WRITEMASK_GREEN1|WRITEMASK_GREEN2|WRITEMASK_GREEN3|WRITEMASK_GREEN4|WRITEMASK_GREEN5| +WRITEMASK_GREEN6|WRITEMASK_GREEN7, +WRITEMASK_BLUE=WRITEMASK_BLUE0|WRITEMASK_BLUE1|WRITEMASK_BLUE2|WRITEMASK_BLUE3|WRITEMASK_BLUE4|WRITEMASK_BLUE5| +WRITEMASK_BLUE6|WRITEMASK_BLUE7, +WRITEMASK_ALPHA=WRITEMASK_ALPHA0|WRITEMASK_ALPHA1|WRITEMASK_ALPHA2|WRITEMASK_ALPHA3|WRITEMASK_ALPHA4|WRITEMASK_ALPHA5| +WRITEMASK_ALPHA6|WRITEMASK_ALPHA7, +WRITEMASK_RGB=WRITEMASK_RED|WRITEMASK_GREEN|WRITEMASK_BLUE, +WRITEMASK_ALL=0xFFFFFFFFU, +WRITEMASK_DEFAULT=WRITEMASK_ALL +}; + +enumclassXessState +{ +UNSUPPORTED_DEVICE, +UNSUPPORTED_DRIVER, +INIT_ERROR_UNKNOWN, +DISABLED, +SUPPORTED, +READY +}; + +enumclassFsr2State +{ +NOT_CHECKED, +INIT_ERROR, +SUPPORTED, +READY +}; + +enumclassMtlfxUpscaleState +{ +UNSUPPORTED, +READY +}; + +enumclassHdrOutputMode//correspondingvaluesinhdr_ps_output.sh +{ +SDR_ONLY=0, +HDR10_AND_SDR=1, +HDR10_ONLY=2, +HDR_ONLY=3 +}; + +enumclassCSPreloaded +{ +No, +Yes +}; + +enumDepthResolveMode:unsigned +{ +DEPTH_RESOLVE_MODE_NONE=0, +DEPTH_RESOLVE_MODE_SAMPLE_ZERO=1<<0, +DEPTH_RESOLVE_MODE_AVERAGE=1<<1, +DEPTH_RESOLVE_MODE_MIN=1<<2, +DEPTH_RESOLVE_MODE_MAX=1<<3 +}; + + +structDeviceDriverCapabilitiesBase +{ +boolhasAnisotropicFilter:1; +boolhasDepthReadOnly:1; +boolhasStructuredBuffers:1; +boolhasNoOverwriteOnShaderResourceBuffers:1; +boolhasForcedSamplerCount:1; +boolhasVolMipMap:1; +boolhasAsyncCompute:1; +boolhasOcclusionQuery:1; +boolhasConstBufferOffset:1; +boolhasDepthBoundsTest:1; +boolhasConditionalRender:1; +boolhasResourceCopyConversion:1; +boolhasAsyncCopy:1; +boolhasReadMultisampledDepth:1; +boolhasInstanceID:1; +boolhasConservativeRassterization:1; +boolhasQuadTessellation:1; +boolhasGather4:1; +boolhasAlphaCoverage:1; +boolhasWellSupportedIndirect:1; +boolhasBindless:1; +boolhasNVApi:1; +boolhasATIApi:1; +boolhasVariableRateShading:1; +boolhasVariableRateShadingTexture:1; +boolhasVariableRateShadingShaderOutput:1; +boolhasVariableRateShadingCombiners:1; +boolhasVariableRateShadingBy4:1; +boolhasAliasedTextures:1; +boolhasResourceHeaps:1; +boolhasBufferOverlapCopy:1; +boolhasBufferOverlapRegionsCopy:1; +boolhasUAVOnlyForcedSampleCount:1; +boolhasShader64BitIntegerResources:1; +boolhasNativeRenderPassSubPasses:1; +boolhasTiled2DResources:1; +boolhasTiled3DResources:1; +boolhasTiledSafeResourcesAccess:1; +boolhasTiledMemoryAliasing:1; +boolhasDLSS:1; +boolhasXESS:1; +boolhasDrawID:1; +boolhasMeshShader:1; +boolhasBasicViewInstancing:1; +boolhasOptimizedViewInstancing:1; +boolhasAcceleratedViewInstancing:1; +boolhasRenderPassDepthResolve:1; +boolhasStereoExpansion:1; +boolhasTileBasedArchitecture:1; +boolhasLazyMemory:1; +boolhasIndirectSupport:1; +boolhasCompareSampler:1; +boolhasShaderFloat16Support:1; +boolhasUAVOnEveryStage:1; +boolhasRayAccelerationStructure:1; +boolhasRayQuery:1; +boolhasRayDispatch:1; +boolhasIndirectRayDispatch:1; +boolhasGeometryIndexInRayAccelerationStructure:1; +boolhasSkipPrimitiveTypeInRayTracingShaders:1; +boolhasBaseVertexSupport:1; +boolcastingFullyTypedFormatsSupported:1; +/* +*\capbriefsupportsexpansionofraytracepipelineswithoutextraeffortbyourdriver. +*\someNYI +*\platformtable{hasNativeRayTracePipelineExpansion,c,c,c,a,r,r,c,r,r,r,r} +*/ +boolhasNativeRayTracePipelineExpansion:1; + +boolhasWaveOps:1; +/*!!!!!TOADDNEWVALUES,FOLOWTHESTEPSDESCRIBEDATTHEREMARKSECTION,KEEPTHISATTHEENDOFTHISSTRUCT!!!!!*/ +}; +structDeviceDriverCapabilitiesXboxOne:DeviceDriverCapabilitiesBase +{ +staticconstexprboolhasAnisotropicFilter=true; +staticconstexprboolhasDepthReadOnly=true; +staticconstexprboolhasStructuredBuffers=true; +staticconstexprboolhasNoOverwriteOnShaderResourceBuffers=true; +staticconstexprboolhasForcedSamplerCount=true; +staticconstexprboolhasVolMipMap=true; +staticconstexprboolhasAsyncCompute=false; +staticconstexprboolhasOcclusionQuery=true; +staticconstexprboolhasConstBufferOffset=true; +staticconstexprboolhasDepthBoundsTest=true; +staticconstexprboolhasConditionalRender=true; +staticconstexprboolhasResourceCopyConversion=true; +staticconstexprboolhasAsyncCopy=true; +staticconstexprboolhasReadMultisampledDepth=true; +staticconstexprboolhasInstanceID=true; +staticconstexprboolhasConservativeRassterization=false; +staticconstexprboolhasQuadTessellation=true; +staticconstexprboolhasGather4=true; +staticconstexprboolhasAlphaCoverage=true; +staticconstexprboolhasWellSupportedIndirect=true; +staticconstexprboolhasBindless=true; +staticconstexprboolhasNVApi=false; +staticconstexprboolhasATIApi=false; +staticconstexprboolhasVariableRateShading=false; +staticconstexprboolhasVariableRateShadingTexture=false; +staticconstexprboolhasVariableRateShadingShaderOutput=false; +staticconstexprboolhasVariableRateShadingCombiners=false; +staticconstexprboolhasVariableRateShadingBy4=false; +staticconstexprboolhasAliasedTextures=true; +staticconstexprboolhasResourceHeaps=true; +staticconstexprboolhasBufferOverlapCopy=true; +staticconstexprboolhasBufferOverlapRegionsCopy=false; +staticconstexprboolhasUAVOnlyForcedSampleCount=true; +staticconstexprboolhasShader64BitIntegerResources=false; +staticconstexprboolhasNativeRenderPassSubPasses=false; +staticconstexprboolhasTiled2DResources=true; +staticconstexprboolhasTiled3DResources=true; +staticconstexprboolhasTiledSafeResourcesAccess=true; +staticconstexprboolhasTiledMemoryAliasing=true; +staticconstexprboolhasDLSS=false; +staticconstexprboolhasXESS=false; +staticconstexprboolhasDrawID=true; +staticconstexprboolhasMeshShader=false; +staticconstexprboolhasBasicViewInstancing=true; +staticconstexprboolhasOptimizedViewInstancing=true; +staticconstexprboolhasAcceleratedViewInstancing=true; +staticconstexprboolhasRenderPassDepthResolve=false; +staticconstexprboolhasStereoExpansion=false; +staticconstexprboolhasTileBasedArchitecture=false; +staticconstexprboolhasLazyMemory=false; +staticconstexprboolhasIndirectSupport=true; +staticconstexprboolhasCompareSampler=true; +staticconstexprboolhasShaderFloat16Support=true; +staticconstexprboolhasUAVOnEveryStage=true; +staticconstexprboolhasRayAccelerationStructure=false; +staticconstexprboolhasRayQuery=false; +staticconstexprboolhasRayDispatch=false; +staticconstexprboolhasIndirectRayDispatch=false; +staticconstexprboolhasGeometryIndexInRayAccelerationStructure=false; +staticconstexprboolhasSkipPrimitiveTypeInRayTracingShaders=false; +staticconstexprboolhasBaseVertexSupport=true; +staticconstexprboolcastingFullyTypedFormatsSupported=false; +staticconstexprboolhasNativeRayTracePipelineExpansion=false; +staticconstexprboolhasWaveOps=true; +}; +structDeviceDriverCapabilitiesScarlett:DeviceDriverCapabilitiesXboxOne +{ +staticconstexprboolhasConservativeRassterization=true; +staticconstexprboolhasVariableRateShading=true; +staticconstexprboolhasVariableRateShadingTexture=true; +staticconstexprboolhasVariableRateShadingShaderOutput=true; +staticconstexprboolhasVariableRateShadingCombiners=true; +staticconstexprboolhasShader64BitIntegerResources=true; +staticconstexprboolhasMeshShader=true; +staticconstexprboolhasRayAccelerationStructure=true; +staticconstexprboolhasRayQuery=true; +staticconstexprboolhasRayDispatch=true; +staticconstexprboolhasIndirectRayDispatch=true; +staticconstexprboolhasGeometryIndexInRayAccelerationStructure=true; +staticconstexprboolhasSkipPrimitiveTypeInRayTracingShaders=true; +staticconstexprboolhasBaseVertexSupport=true; +staticconstexprboolcastingFullyTypedFormatsSupported=false; +staticconstexprboolhasNativeRayTracePipelineExpansion=true; +}; +structDeviceDriverCapabilitiesPS4:DeviceDriverCapabilitiesBase +{ +staticconstexprboolhasAnisotropicFilter=true; +staticconstexprboolhasDepthReadOnly=true; +staticconstexprboolhasStructuredBuffers=true; +staticconstexprboolhasNoOverwriteOnShaderResourceBuffers=true; +staticconstexprboolhasForcedSamplerCount=false; +staticconstexprboolhasVolMipMap=true; +staticconstexprboolhasOcclusionQuery=true; +staticconstexprboolhasConstBufferOffset=false; +staticconstexprboolhasDepthBoundsTest=true; +staticconstexprboolhasConditionalRender=true; +staticconstexprboolhasResourceCopyConversion=true; +staticconstexprboolhasAsyncCopy=true; +staticconstexprboolhasReadMultisampledDepth=false; +staticconstexprboolhasInstanceID=true; +staticconstexprboolhasConservativeRassterization=false; +staticconstexprboolhasQuadTessellation=true; +staticconstexprboolhasGather4=false; +staticconstexprboolhasAlphaCoverage=false; +staticconstexprboolhasWellSupportedIndirect=true; +staticconstexprboolhasBindless=true; +staticconstexprboolhasNVApi=false; +staticconstexprboolhasATIApi=false; +staticconstexprboolhasVariableRateShading=false; +staticconstexprboolhasVariableRateShadingTexture=false; +staticconstexprboolhasVariableRateShadingShaderOutput=false; +staticconstexprboolhasVariableRateShadingCombiners=false; +staticconstexprboolhasVariableRateShadingBy4=false; +staticconstexprboolhasAliasedTextures=true; +staticconstexprboolhasBufferOverlapCopy=false; +staticconstexprboolhasBufferOverlapRegionsCopy=false; +staticconstexprboolhasUAVOnlyForcedSampleCount=true; +staticconstexprboolhasShader64BitIntegerResources=false; +staticconstexprboolhasNativeRenderPassSubPasses=false; +staticconstexprboolhasTiled2DResources=false; +staticconstexprboolhasTiled3DResources=false; +staticconstexprboolhasTiledSafeResourcesAccess=false; +staticconstexprboolhasTiledMemoryAliasing=false; +staticconstexprboolhasDLSS=false; +staticconstexprboolhasXESS=false; +staticconstexprboolhasDrawID=true; +staticconstexprboolhasMeshShader=false; +staticconstexprboolhasBasicViewInstancing=false; +staticconstexprboolhasOptimizedViewInstancing=false; +staticconstexprboolhasAcceleratedViewInstancing=false; +staticconstexprboolhasRenderPassDepthResolve=false; +staticconstexprboolhasStereoExpansion=false; +staticconstexprboolhasTileBasedArchitecture=false; +staticconstexprboolhasLazyMemory=false; +staticconstexprboolhasIndirectSupport=true; +staticconstexprboolhasCompareSampler=true; +staticconstexprboolhasShaderFloat16Support=false; +staticconstexprboolhasUAVOnEveryStage=true; +staticconstexprboolhasRayAccelerationStructure=false; +staticconstexprboolhasRayQuery=false; +staticconstexprboolhasRayDispatch=false; +staticconstexprboolhasIndirectRayDispatch=false; +staticconstexprboolhasGeometryIndexInRayAccelerationStructure=false; +staticconstexprboolhasSkipPrimitiveTypeInRayTracingShaders=false; +staticconstexprboolhasBaseVertexSupport=true; +staticconstexprboolcastingFullyTypedFormatsSupported=false; +staticconstexprboolhasNativeRayTracePipelineExpansion=false; +staticconstexprboolhasWaveOps=true; +}; +structDeviceDriverCapabilitiesPS5:DeviceDriverCapabilitiesPS4 +{ +staticconstexprboolhasStereoExpansion=true; +staticconstexprboolhasRayAccelerationStructure=true; +staticconstexprboolhasRayQuery=true; +staticconstexprboolhasRayDispatch=false; +staticconstexprboolhasIndirectRayDispatch=false; +staticconstexprboolhasGeometryIndexInRayAccelerationStructure=false; +staticconstexprboolhasSkipPrimitiveTypeInRayTracingShaders=false; +}; +structDeviceDriverCapabilitiesIOS:DeviceDriverCapabilitiesBase +{ +staticconstexprboolhasAnisotropicFilter=true; +staticconstexprboolhasDepthReadOnly=false; +staticconstexprboolhasStructuredBuffers=true; +staticconstexprboolhasNoOverwriteOnShaderResourceBuffers=true; +staticconstexprboolhasForcedSamplerCount=false; +staticconstexprboolhasVolMipMap=true; +staticconstexprboolhasAsyncCompute=false; +staticconstexprboolhasOcclusionQuery=true; +staticconstexprboolhasConstBufferOffset=false; +staticconstexprboolhasDepthBoundsTest=false; +staticconstexprboolhasConditionalRender=false; +staticconstexprboolhasResourceCopyConversion=true; +staticconstexprboolhasAsyncCopy=false; +staticconstexprboolhasReadMultisampledDepth=true; +staticconstexprboolhasInstanceID=true; +staticconstexprboolhasConservativeRassterization=false; +staticconstexprboolhasQuadTessellation=false; +staticconstexprboolhasGather4=true; +staticconstexprboolhasAlphaCoverage=true; +staticconstexprboolhasWellSupportedIndirect=false; +staticconstexprboolhasBindless=false; +staticconstexprboolhasNVApi=false; +staticconstexprboolhasATIApi=false; +staticconstexprboolhasVariableRateShading=false; +staticconstexprboolhasVariableRateShadingTexture=false; +staticconstexprboolhasVariableRateShadingShaderOutput=false; +staticconstexprboolhasVariableRateShadingCombiners=false; +staticconstexprboolhasVariableRateShadingBy4=false; +staticconstexprboolhasAliasedTextures=false; +staticconstexprboolhasResourceHeaps=false; +staticconstexprboolhasBufferOverlapCopy=false; +staticconstexprboolhasBufferOverlapRegionsCopy=false; +staticconstexprboolhasUAVOnlyForcedSampleCount=false; +staticconstexprboolhasShader64BitIntegerResources=false; +staticconstexprboolhasNativeRenderPassSubPasses=true; +staticconstexprboolhasTiled2DResources=false; +staticconstexprboolhasTiled3DResources=false; +staticconstexprboolhasTiledSafeResourcesAccess=false; +staticconstexprboolhasTiledMemoryAliasing=false; +staticconstexprboolhasDLSS=false; +staticconstexprboolhasXESS=false; +staticconstexprboolhasDrawID=false; +staticconstexprboolhasMeshShader=false; +staticconstexprboolhasBasicViewInstancing=false; +staticconstexprboolhasOptimizedViewInstancing=false; +staticconstexprboolhasAcceleratedViewInstancing=false; +staticconstexprboolhasStereoExpansion=false; +staticconstexprboolhasTileBasedArchitecture=true; +staticconstexprboolhasLazyMemory=false; +staticconstexprboolhasShaderFloat16Support=true; +staticconstexprboolhasUAVOnEveryStage=true; +staticconstexprboolhasRayDispatch=false; +staticconstexprboolhasIndirectRayDispatch=false; +staticconstexprboolcastingFullyTypedFormatsSupported=false; +staticconstexprboolhasWaveOps=true; +}; +structDeviceDriverCapabilitiesTVOS:DeviceDriverCapabilitiesBase +{ +staticconstexprboolhasAnisotropicFilter=true; +staticconstexprboolhasDepthReadOnly=false; +staticconstexprboolhasStructuredBuffers=true; +staticconstexprboolhasNoOverwriteOnShaderResourceBuffers=true; +staticconstexprboolhasForcedSamplerCount=false; +staticconstexprboolhasVolMipMap=true; +staticconstexprboolhasAsyncCompute=false; +staticconstexprboolhasOcclusionQuery=true; +staticconstexprboolhasConstBufferOffset=false; +staticconstexprboolhasDepthBoundsTest=false; +staticconstexprboolhasConditionalRender=false; +staticconstexprboolhasResourceCopyConversion=true; +staticconstexprboolhasAsyncCopy=false; +staticconstexprboolhasReadMultisampledDepth=true; +staticconstexprboolhasInstanceID=true; +staticconstexprboolhasConservativeRassterization=false; +staticconstexprboolhasQuadTessellation=false; +staticconstexprboolhasGather4=true; +staticconstexprboolhasAlphaCoverage=true; +staticconstexprboolhasWellSupportedIndirect=false; +staticconstexprboolhasBindless=false; +staticconstexprboolhasNVApi=false; +staticconstexprboolhasATIApi=false; +staticconstexprboolhasVariableRateShading=false; +staticconstexprboolhasVariableRateShadingTexture=false; +staticconstexprboolhasVariableRateShadingShaderOutput=false; +staticconstexprboolhasVariableRateShadingCombiners=false; +staticconstexprboolhasVariableRateShadingBy4=false; +staticconstexprboolhasAliasedTextures=false; +staticconstexprboolhasResourceHeaps=false; +staticconstexprboolhasBufferOverlapCopy=false; +staticconstexprboolhasBufferOverlapRegionsCopy=false; +staticconstexprboolhasUAVOnlyForcedSampleCount=false; +staticconstexprboolhasShader64BitIntegerResources=false; +staticconstexprboolhasNativeRenderPassSubPasses=true; +staticconstexprboolhasTiled2DResources=false; +staticconstexprboolhasTiled3DResources=false; +staticconstexprboolhasTiledSafeResourcesAccess=false; +staticconstexprboolhasTiledMemoryAliasing=false; +staticconstexprboolhasDLSS=false; +staticconstexprboolhasXESS=false; +staticconstexprboolhasDrawID=false; +staticconstexprboolhasMeshShader=false; +staticconstexprboolhasBasicViewInstancing=false; +staticconstexprboolhasOptimizedViewInstancing=false; +staticconstexprboolhasAcceleratedViewInstancing=false; +staticconstexprboolhasStereoExpansion=false; +staticconstexprboolhasTileBasedArchitecture=true; +staticconstexprboolhasLazyMemory=false; +staticconstexprboolhasShaderFloat16Support=true; +staticconstexprboolhasUAVOnEveryStage=true; +staticconstexprboolhasRayDispatch=false; +staticconstexprboolhasIndirectRayDispatch=false; +staticconstexprboolcastingFullyTypedFormatsSupported=false; +staticconstexprboolhasWaveOps=true; +}; +structDeviceDriverCapabilitiesNintendoSwitch:DeviceDriverCapabilitiesBase +{ +staticconstexprboolhasAnisotropicFilter=true; +staticconstexprboolhasDepthReadOnly=true; +staticconstexprboolhasStructuredBuffers=true; +staticconstexprboolhasNoOverwriteOnShaderResourceBuffers=true; +staticconstexprboolhasForcedSamplerCount=false; +staticconstexprboolhasVolMipMap=true; +staticconstexprboolhasAsyncCompute=false; +staticconstexprboolhasOcclusionQuery=false; +staticconstexprboolhasConstBufferOffset=false; +staticconstexprboolhasDepthBoundsTest=true; +staticconstexprboolhasResourceCopyConversion=true; +staticconstexprboolhasAsyncCopy=true; +staticconstexprboolhasReadMultisampledDepth=true; +staticconstexprboolhasInstanceID=true; +staticconstexprboolhasConservativeRassterization=false; +staticconstexprboolhasQuadTessellation=false; +staticconstexprboolhasGather4=true; +staticconstexprboolhasAlphaCoverage=true; +staticconstexprboolhasWellSupportedIndirect=true; +staticconstexprboolhasNVApi=false; +staticconstexprboolhasATIApi=false; +staticconstexprboolhasVariableRateShading=false; +staticconstexprboolhasVariableRateShadingTexture=false; +staticconstexprboolhasVariableRateShadingShaderOutput=false; +staticconstexprboolhasVariableRateShadingCombiners=false; +staticconstexprboolhasVariableRateShadingBy4=false; +staticconstexprboolhasAliasedTextures=false; +staticconstexprboolhasResourceHeaps=true; +staticconstexprboolhasBufferOverlapCopy=false; +staticconstexprboolhasBufferOverlapRegionsCopy=false; +staticconstexprboolhasUAVOnlyForcedSampleCount=true; +staticconstexprboolhasShader64BitIntegerResources=false; +staticconstexprboolhasNativeRenderPassSubPasses=true; +staticconstexprboolhasTiled2DResources=false; +staticconstexprboolhasTiled3DResources=false; +staticconstexprboolhasTiledSafeResourcesAccess=false; +staticconstexprboolhasTiledMemoryAliasing=false; +staticconstexprboolhasDLSS=false; +staticconstexprboolhasXESS=false; +staticconstexprboolhasDrawID=true; +staticconstexprboolhasMeshShader=false; +staticconstexprboolhasBasicViewInstancing=false; +staticconstexprboolhasOptimizedViewInstancing=false; +staticconstexprboolhasAcceleratedViewInstancing=false; +staticconstexprboolhasStereoExpansion=false; +staticconstexprboolhasTileBasedArchitecture=false; +staticconstexprboolhasLazyMemory=false; +staticconstexprboolhasIndirectSupport=true; +staticconstexprboolhasCompareSampler=true; +staticconstexprboolhasUAVOnEveryStage=true; +staticconstexprboolhasRayAccelerationStructure=false; +staticconstexprboolhasRayQuery=false; +staticconstexprboolhasRayDispatch=false; +staticconstexprboolhasIndirectRayDispatch=false; +staticconstexprboolhasGeometryIndexInRayAccelerationStructure=false; +staticconstexprboolhasSkipPrimitiveTypeInRayTracingShaders=false; +staticconstexprboolhasBaseVertexSupport=true; +staticconstexprboolcastingFullyTypedFormatsSupported=false; +staticconstexprboolhasNativeRayTracePipelineExpansion=false; +}; +structDeviceDriverCapabilitiesAndroid:DeviceDriverCapabilitiesBase +{ +staticconstexprboolhasDepthReadOnly=true; +staticconstexprboolhasStructuredBuffers=true; +staticconstexprboolhasNoOverwriteOnShaderResourceBuffers=true; +staticconstexprboolhasForcedSamplerCount=false; +staticconstexprboolhasVolMipMap=true; +staticconstexprboolhasAsyncCompute=false; +staticconstexprboolhasOcclusionQuery=false; +staticconstexprboolhasConstBufferOffset=false; +staticconstexprboolhasAsyncCopy=true; +staticconstexprboolhasReadMultisampledDepth=true; +staticconstexprboolhasGather4=true; +staticconstexprboolhasAlphaCoverage=true; +staticconstexprboolhasNVApi=false; +staticconstexprboolhasATIApi=false; +staticconstexprboolhasVariableRateShading=false; +staticconstexprboolhasVariableRateShadingTexture=false; +staticconstexprboolhasVariableRateShadingShaderOutput=false; +staticconstexprboolhasVariableRateShadingCombiners=false; +staticconstexprboolhasVariableRateShadingBy4=false; +staticconstexprboolhasAliasedTextures=false; +staticconstexprboolhasBufferOverlapCopy=false; +staticconstexprboolhasBufferOverlapRegionsCopy=false; +staticconstexprboolhasResourceCopyConversion=true; +staticconstexprboolhasShader64BitIntegerResources=false; +staticconstexprboolhasNativeRenderPassSubPasses=true; +staticconstexprboolhasTiled2DResources=false; +staticconstexprboolhasTiled3DResources=false; +staticconstexprboolhasTiledSafeResourcesAccess=false; +staticconstexprboolhasTiledMemoryAliasing=false; +staticconstexprboolhasDLSS=false; +staticconstexprboolhasXESS=false; +staticconstexprboolhasDrawID=true; +staticconstexprboolhasMeshShader=false; +staticconstexprboolhasBasicViewInstancing=false; +staticconstexprboolhasOptimizedViewInstancing=false; +staticconstexprboolhasAcceleratedViewInstancing=false; +staticconstexprboolhasStereoExpansion=false; +staticconstexprboolhasIndirectSupport=true; +staticconstexprboolhasCompareSampler=true; +staticconstexprboolhasUAVOnEveryStage=true; +staticconstexprboolhasBaseVertexSupport=true; +staticconstexprboolcastingFullyTypedFormatsSupported=false; +}; +structDeviceDriverCapabilitiesMacOSX:DeviceDriverCapabilitiesBase +{ +staticconstexprboolhasAnisotropicFilter=true; +staticconstexprboolhasDepthReadOnly=false; +staticconstexprboolhasStructuredBuffers=true; +staticconstexprboolhasNoOverwriteOnShaderResourceBuffers=true; +staticconstexprboolhasForcedSamplerCount=false; +staticconstexprboolhasVolMipMap=true; +staticconstexprboolhasAsyncCompute=false; +staticconstexprboolhasOcclusionQuery=true; +staticconstexprboolhasConstBufferOffset=false; +staticconstexprboolhasAsyncCopy=true; +staticconstexprboolhasDepthBoundsTest=false; +staticconstexprboolhasReadMultisampledDepth=true; +staticconstexprboolhasInstanceID=true; +staticconstexprboolhasConservativeRassterization=false; +staticconstexprboolhasQuadTessellation=false; +staticconstexprboolhasGather4=true; +staticconstexprboolhasAlphaCoverage=true; +staticconstexprboolhasWellSupportedIndirect=false; +staticconstexprboolhasNVApi=false; +staticconstexprboolhasATIApi=false; +staticconstexprboolhasVariableRateShading=false; +staticconstexprboolhasVariableRateShadingTexture=false; +staticconstexprboolhasVariableRateShadingShaderOutput=false; +staticconstexprboolhasVariableRateShadingCombiners=false; +staticconstexprboolhasVariableRateShadingBy4=false; +staticconstexprboolhasAliasedTextures=false; +staticconstexprboolhasResourceHeaps=false; +staticconstexprboolhasBufferOverlapCopy=false; +staticconstexprboolhasBufferOverlapRegionsCopy=false; +staticconstexprboolhasConditionalRender=false; +staticconstexprboolhasResourceCopyConversion=true; +staticconstexprboolhasShader64BitIntegerResources=false; +staticconstexprboolhasNativeRenderPassSubPasses=true; +staticconstexprboolhasTiled2DResources=false; +staticconstexprboolhasTiled3DResources=false; +staticconstexprboolhasTiledSafeResourcesAccess=false; +staticconstexprboolhasTiledMemoryAliasing=false; +staticconstexprboolhasDLSS=false; +staticconstexprboolhasXESS=false; +staticconstexprboolhasMeshShader=false; +staticconstexprboolhasBasicViewInstancing=false; +staticconstexprboolhasOptimizedViewInstancing=false; +staticconstexprboolhasAcceleratedViewInstancing=false; +staticconstexprboolhasStereoExpansion=false; +staticconstexprboolhasTileBasedArchitecture=false; +staticconstexprboolhasLazyMemory=false; +staticconstexprboolhasIndirectSupport=true; +staticconstexprboolhasCompareSampler=true; +staticconstexprboolhasShaderFloat16Support=false; +staticconstexprboolhasUAVOnEveryStage=true; +staticconstexprboolhasRayDispatch=false; +staticconstexprboolhasIndirectRayDispatch=false; +staticconstexprboolcastingFullyTypedFormatsSupported=false; +staticconstexprboolhasWaveOps=true; +}; +structDeviceDriverCapabilitiesLinux:DeviceDriverCapabilitiesBase +{ +staticconstexprboolhasAnisotropicFilter=true; +staticconstexprboolhasDepthReadOnly=true; +staticconstexprboolhasStructuredBuffers=true; +staticconstexprboolhasNoOverwriteOnShaderResourceBuffers=true; +staticconstexprboolhasForcedSamplerCount=false; +staticconstexprboolhasVolMipMap=true; +staticconstexprboolhasReadMultisampledDepth=true; +staticconstexprboolhasGather4=true; +staticconstexprboolhasAlphaCoverage=true; +staticconstexprboolhasShader64BitIntegerResources=false; +staticconstexprboolhasNativeRenderPassSubPasses=true; +staticconstexprboolhasTiled2DResources=false; +staticconstexprboolhasTiled3DResources=false; +staticconstexprboolhasTiledSafeResourcesAccess=false; +staticconstexprboolhasTiledMemoryAliasing=false; +staticconstexprboolhasDLSS=false; +staticconstexprboolhasXESS=false; +staticconstexprboolhasDrawID=true; +staticconstexprboolhasMeshShader=false; +staticconstexprboolhasBasicViewInstancing=false; +staticconstexprboolhasOptimizedViewInstancing=false; +staticconstexprboolhasAcceleratedViewInstancing=false; +staticconstexprboolhasAsyncCompute=false; +staticconstexprboolhasOcclusionQuery=false; +staticconstexprboolhasNVApi=false; +staticconstexprboolhasATIApi=false; +staticconstexprboolhasVariableRateShading=false; +staticconstexprboolhasVariableRateShadingTexture=false; +staticconstexprboolhasVariableRateShadingShaderOutput=false; +staticconstexprboolhasVariableRateShadingCombiners=false; +staticconstexprboolhasVariableRateShadingBy4=false; +staticconstexprboolhasAliasedTextures=false; +staticconstexprboolhasBufferOverlapCopy=false; +staticconstexprboolhasBufferOverlapRegionsCopy=false; +staticconstexprboolhasConstBufferOffset=false; +staticconstexprboolhasAsyncCopy=true; +staticconstexprboolhasResourceCopyConversion=true; +staticconstexprboolhasStereoExpansion=false; +staticconstexprboolhasLazyMemory=false; +staticconstexprboolhasIndirectSupport=true; +staticconstexprboolhasCompareSampler=true; +staticconstexprboolhasUAVOnEveryStage=true; +staticconstexprboolhasBaseVertexSupport=true; +staticconstexprboolcastingFullyTypedFormatsSupported=false; +}; +structDeviceDriverCapabilitiesWindows:DeviceDriverCapabilitiesBase +{ +staticconstexprboolhasAnisotropicFilter=true; +staticconstexprboolhasAlphaCoverage=true; +staticconstexprboolhasAsyncCopy=true; +staticconstexprboolhasStereoExpansion=false; +staticconstexprboolhasLazyMemory=false; +staticconstexprboolhasIndirectSupport=true; +staticconstexprboolhasCompareSampler=true; +staticconstexprboolhasBaseVertexSupport=true; +}; +#if_TARGET_XBOXONE +usingDeviceDriverCapabilities=DeviceDriverCapabilitiesXboxOne; +#elif_TARGET_SCARLETT +usingDeviceDriverCapabilities=DeviceDriverCapabilitiesScarlett; +#elif_TARGET_C1 + +#elif_TARGET_C2 + +#elif_TARGET_IOS +usingDeviceDriverCapabilities=DeviceDriverCapabilitiesIOS; +#elif_TARGET_TVOS +usingDeviceDriverCapabilities=DeviceDriverCapabilitiesTVOS; +#elif_TARGET_C3 + +#elif_TARGET_ANDROID +usingDeviceDriverCapabilities=DeviceDriverCapabilitiesAndroid; +#elif_TARGET_PC_MACOSX +usingDeviceDriverCapabilities=DeviceDriverCapabilitiesMacOSX; +#elif_TARGET_PC_LINUX +usingDeviceDriverCapabilities=DeviceDriverCapabilitiesLinux; +#elif_TARGET_PC_WIN +usingDeviceDriverCapabilities=DeviceDriverCapabilitiesWindows; +#else +usingDeviceDriverCapabilities=DeviceDriverCapabilitiesBase; +#endif + +structDeviceDriverIssuesBase +{ +boolhasComputeTimeLimited:1; +boolhasComputeCanNotWrite3DTex:1; +boolhasStrictRenderPassesOnly:1; +boolhasSmallSampledBuffers:1; +boolhasRenderPassClearDataRace:1; +boolhasBrokenBaseInstanceID:1; +boolhasMultisampledAndInstancingHang:1; +boolhasIgnoreDeviceLost:1; +boolhasPollDeviceFences:1; +boolhasBrokenShadersAfterAppSwitch:1; +boolhasBrokenSRGBConverionWithMRT:1; +boolhasBrokenComputeFormattedOutput:1; +boolhasClearColorBug:1; +boolhasBrokenMTRecreateImage:1; +boolhasBrokenSubpasses:1; +}; + +structDeviceDriverIssuesAndroid:DeviceDriverIssuesBase +{ +staticconstexprboolhasClearColorBug=false; +}; + +structDeviceDriverIssuesWindows:DeviceDriverIssuesBase +{ +staticconstexprboolhasComputeTimeLimited=false; +staticconstexprboolhasComputeCanNotWrite3DTex=false; +staticconstexprboolhasStrictRenderPassesOnly=false; +staticconstexprboolhasSmallSampledBuffers=false; +staticconstexprboolhasRenderPassClearDataRace=false; +staticconstexprboolhasBrokenBaseInstanceID=false; +staticconstexprboolhasMultisampledAndInstancingHang=false; +staticconstexprboolhasIgnoreDeviceLost=false; +staticconstexprboolhasPollDeviceFences=false; +staticconstexprboolhasBrokenShadersAfterAppSwitch=false; +staticconstexprboolhasBrokenSRGBConverionWithMRT=false; +staticconstexprboolhasBrokenComputeFormattedOutput=false; +staticconstexprboolhasBrokenMTRecreateImage=false; +staticconstexprboolhasBrokenSubpasses=false; +}; + +structDeviceDriverIssuesNoIssues:DeviceDriverIssuesWindows +{ +staticconstexprboolhasClearColorBug=false; +}; + +#if_TARGET_XBOXONE +usingDeviceDriverIssues=DeviceDriverIssuesNoIssues; +#elif_TARGET_SCARLETT +usingDeviceDriverIssues=DeviceDriverIssuesNoIssues; +#elif_TARGET_C1 + +#elif_TARGET_C2 + +#elif_TARGET_IOS +usingDeviceDriverIssues=DeviceDriverIssuesNoIssues; +#elif_TARGET_TVOS +usingDeviceDriverIssues=DeviceDriverIssuesNoIssues; +#elif_TARGET_C3 + +#elif_TARGET_ANDROID +usingDeviceDriverIssues=DeviceDriverIssuesAndroid; +#elif_TARGET_PC_MACOSX +usingDeviceDriverIssues=DeviceDriverIssuesNoIssues; +#elif_TARGET_PC_LINUX +usingDeviceDriverIssues=DeviceDriverIssuesNoIssues; +#elif_TARGET_PC_WIN +usingDeviceDriverIssues=DeviceDriverIssuesWindows; +#else +usingDeviceDriverIssues=DeviceDriverIssuesNoIssues; +#endif + +#if_TARGET_XBOXONE +usingDeviceDriverShaderModelVersion=decltype(d3d::sm60); +#elif_TARGET_SCARLETT +usingDeviceDriverShaderModelVersion=decltype(d3d::sm66); +#elif_TARGET_C1 + +#elif_TARGET_C2 + +#elif_TARGET_IOS +usingDeviceDriverShaderModelVersion=decltype(d3d::sm50); +#elif_TARGET_TVOS +usingDeviceDriverShaderModelVersion=decltype(d3d::sm50); +#elif_TARGET_C3 + +#elif_TARGET_ANDROID +usingDeviceDriverShaderModelVersion=d3d::shadermodel::Version; +#elif_TARGET_PC_MACOSX +usingDeviceDriverShaderModelVersion=d3d::shadermodel::Version; +#elif_TARGET_PC_LINUX +usingDeviceDriverShaderModelVersion=d3d::shadermodel::Version; +#elif_TARGET_PC_WIN +usingDeviceDriverShaderModelVersion=d3d::shadermodel::Version; +#else +usingDeviceDriverShaderModelVersion=d3d::shadermodel::Version; +#endif + +structDeviceDriverRaytraceProperties +{ +//requiredforcalculatingthesizeofindexbuffersfortoplevelaccelerationstructures +//onlyvalidwhencaps.hasRaytracingisset +unsignedtopAccelerationStructureInstanceElementSize=0; +unsignedaccelerationStructureBuildScratchBufferOffsetAlignment=0; +unsignedmaxRecursionDepth=0; +}; + +//---3dDriverdescription------- +structDriver3dDesc//-V730 +{ +intzcmpfunc,acmpfunc; +intsblend,dblend; + +intmintexw,mintexh; +intmaxtexw,maxtexh; +intmincubesize,maxcubesize; +intminvolsize,maxvolsize; +intmaxtexaspect; +intmaxtexcoord; +intmaxsimtex; +intmaxvertexsamplers; +intmaxclipplanes; +intmaxstreams; +intmaxstreamstr; +intmaxvpconsts; +intmaxprims,maxvertind; +floatupixofs,vpixofs; +intmaxSimRT; +boolis20ArbitrarySwizzleAvailable; +intminWarpSize,maxWarpSize; +//WhenDeviceDriverCapabilities::hasVariableRateShadingTextureisset,thistellshowmanyshadingpixelsarerepresentedbyeach +//texelofthetexture.Screenspacetotilespace:ceil(float(rtWith)/variableRateTextureTileSizeX),ceil(float(rtHeight)/ +//variableRateTextureTileSizeY).Possiblevaluesasofrightnoware8,16and32.OnDX12XandYareequalonVulkanthosecan +//differ.OnXBOXSCARLETTthesearealways8. +unsignedvariableRateTextureTileSizeX; +unsignedvariableRateTextureTileSizeY; +//WhenDeviceDriverCapabilities::hasRenderPassDepthResolveisset,thisvariableenumeratessupportedresolvemodes +unsigneddepthResolveModes=DepthResolveMode::DEPTH_RESOLVE_MODE_NONE; +DeviceDriverCapabilitiescaps; +DeviceDriverIssuesissues; +DeviceDriverShaderModelVersionshaderModel; +DeviceDriverRaytracePropertiesraytrace; +}; + +//---includedefinesspecifictotarget3d------- +#include<drv/3d/dag_consts_base.h> +#if_TARGET_C1|_TARGET_C2 + +#endif + +enum +{ +DRV3D_FRAMERATE_LIMITED_BY_NOTHING=0x0, +DRV3D_FRAMERATE_LIMITED_BY_REPLAY_WAIT=0x1, +DRV3D_FRAMERATE_LIMITED_BY_REPLAY_UNDERFEED=0x2, +DRV3D_FRAMERATE_LIMITED_BY_GPU_UTILIZATION=0x4, +}; + +enumclassVariableRateShadingCombiner +{ +VRS_PASSTHROUGH, +VRS_OVERRIDE, +VRS_MIN, +VRS_MAX, +VRS_SUM +}; + +//Resourcebarriers +//UsuallyRWtargetsareimplicitlytransitionedtoandneednoexplicitbarrier. +//Detailscanbefoundherehttps://info.gaijin.lan/display/DE4/Resource+and+Execution+Barriers +enumResourceBarrier:int +{ +//Forresourceswithcolorformatsthetargetisrendertargetandforresourceswithdepth +//stencilformatitisdepthstenciltarget.Ifresourcehasadepth/stencilformatandpaired +//withRB_RO_SRVthenitindicatesuseasaconstantdepthstenciltarget. +//SeeRB_RO_CONSTANT_DEPTH_STENCIL_TARGETandRB_RW_DEPTH_STENCIL_TARGETasconvenientaliases. +RB_RW_RENDER_TARGET=1u<<0, +//MustbepairedwithRB_STAGE_*ofstageswhereitsused. +RB_RW_UAV=1u<<1, +RB_RW_COPY_DEST=1u<<2, +RB_RW_BLIT_DEST=1u<<3, + +//MustbepairedwithRB_STAGE_*ofstageswhereitsused. +RB_RO_SRV=1u<<4, +//MustbepairedwithRB_STAGE_*ofstageswhereitsused. +RB_RO_CONSTANT_BUFFER=1u<<5, +RB_RO_VERTEX_BUFFER=1u<<6, +RB_RO_INDEX_BUFFER=1u<<7, +RB_RO_INDIRECT_BUFFER=1u<<8, +RB_RO_VARIABLE_RATE_SHADING_TEXTURE=1u<<9, +RB_RO_COPY_SOURCE=1u<<10, +RB_RO_BLIT_SOURCE=1u<<11, +//Forbuffersusedtobuild/updateTLAS/BLAS +RB_RO_RAYTRACE_ACCELERATION_BUILD_SOURCE=1u<<12, + +RB_FLAG_RELEASE_PIPELINE_OWNERSHIP=1u<<13, +RB_FLAG_ACQUIRE_PIPELINE_OWNERSHIP=1u<<14, + +RB_FLAG_SPLIT_BARRIER_BEGIN=1u<<15, +RB_FLAG_SPLIT_BARRIER_END=1u<<16, + +//includesvs,gs,hsandtsstages,alsoincludesmeshshaders +RB_STAGE_VERTEX=1u<<17, +RB_STAGE_PIXEL=1u<<18, +RB_STAGE_COMPUTE=1u<<19, +//coversallraytracestages +RB_STAGE_RAYTRACE=1u<<20, +//MustbepairedwithRB_STAGE_*ofstagesthathavetowaitforpreviousUAVaccess. +//MustbepairedwithRB_SOURCE_STAGE_*ofstagesthatneedtofinishbeforenextUAVaccesscan +//continue. +RB_FLUSH_UAV=1u<<21, +//Allowsthedrivertouseanonpreservingbarrierifitcan.Ifsupportedtheyareusually +//fasterasregularbarriers.IfpairedwithRB_FLAG_ACQUIRE_PIPELINE_OWNERSHIP,thenforthe +//resourcethereisnoRB_FLAG_RELEASE_PIPELINE_OWNERSHIPrequired. +RB_FLAG_DONT_PRESERVE_CONTENT=1u<<22, + +//sameasRB_STAGE_*buttoindicatelaststagethatneedstofinishexecutionbeforeUAVcan +//continuewithaRB_FLUSH_UAVbarrier. +RB_SOURCE_STAGE_VERTEX=1u<<23, +RB_SOURCE_STAGE_PIXEL=1u<<24, +RB_SOURCE_STAGE_COMPUTE=1u<<25, +RB_SOURCE_STAGE_RAYTRACE=1u<<26, +//WhenwehavetworesourceAandBalias,thenwhenAwasusedandBshouldbeused,thena +//aliaspairneedtobegeneratedforAandBbeforeBcanbeused. +// +//RB_ALIAS_FROMhastoreferenceresourceAandhastoimmediatelybefollowedbyRB_ALIAS_TO +//referencingresourceB.AfterthatresourceBhastobeinitialized,withwithacopyora +//clear,discardclearcanbeused,shouldtheinitialcontentofBnotmatter. +// +//NOTE:Thiskindofbarrierisonlyneededfortexturesarerender/depthstenciltargets, +//normaltexturesshouldworkwithoutit. +//NOTE:Thisbarrierisperresource,subresourceoffsetandrangeshouldencapsulatethis(eg +//both0). +//NOTE:Aliasingbarrierscannotbepairedwithotherbarriers. +//NOTE:ThisbarrierdoesalsoaimplicitRB_RW_RENDER_TARGETorRB_RW_UAVdependingonthe +//resourceusageflagsandthegpupipelinewherethisbarrierisissued. +RB_ALIAS_FROM=1u<<27, +//Secondpartofthealiasingbarrierpair,thisbarriershouldreferencethenextusedaliased +//resource. +// +//NOTE:Referencedresourcehastobeassociatedwiththeresourceofthepreviouslyissued +//RB_ALIAS_FROMbarrier,byaliasingthesamememoryregion. +//NOTE:RB_ALIAS_TO_AND_DISCARDcanbeusedinsteadtoimmediatelydiscardtheresource. +RB_ALIAS_TO=1u<<28, +//Stateforbuffersthatareusedasshaderbindingtableforraydispatches(directorindirect). +RB_RO_SHADER_BINDING_TABLE=1u<<29, +//Thisisintendedtoindicatethatallusesofabufferthatisusedasscratchspaceforacceleration +//buildsshouldbefinished,sothatthebuffercanbereused. +//NOTE:Thisisonlyneededtoreuseaalreadyusedregionofthebuffer,nonoverlappingregions +//ofthebufferdonotaffecteachother,sonoflushisneeded. +RB_FLUSH_RAYTRACE_ACCELERATION_BUILD_SCRATCH_USE=1u<<30, +//WilldothesameasRB_ALIAS_TOplusdiscardingtheresource,thisinitializedtheresource +//intoausablestate,thecontext(texels)willbeinaundefinedstateandareexpectedto +//beoverwrittenwithsubsequentoperations. +// +//NOTE:Donotusethisonresourcesthatwillbeinitializedbyothermeans,likeclearorbeing +//copiedto. +//NOTE:ThisbarrierdoesalsoaimplicitRB_RW_RENDER_TARGETorRB_RW_UAVdependingonthe +//resourceusageflagsandthegpupipelinewherethisbarrierisissued. +RB_ALIAS_TO_AND_DISCARD=RB_ALIAS_TO|RB_FLAG_DONT_PRESERVE_CONTENT, +//Flusheseverythingtoallowaliasingofanyaliasingresourcecombination. +//Mayormaynothasaperformancepenaltycomparedtotargetedaliasbarriers,maybeuseful +//whenmultipleresourcesneedaaliasingbarrieratonce,orotherscenarioswherealiasfrom/ +//toaredifficulttoknow. +RB_ALIAS_ALL=RB_ALIAS_FROM|RB_ALIAS_TO, + +RB_SOURCE_STAGE_ALL_GRAPHICS=RB_SOURCE_STAGE_VERTEX|RB_SOURCE_STAGE_PIXEL, +RB_SOURCE_STAGE_ALL_SHADERS=RB_SOURCE_STAGE_VERTEX|RB_SOURCE_STAGE_PIXEL|RB_SOURCE_STAGE_COMPUTE|RB_SOURCE_STAGE_RAYTRACE, + +RB_RW_DEPTH_STENCIL_TARGET=RB_RW_RENDER_TARGET, +//Alias,needstobepairedwithastagebit +RB_RO_CONSTANT_DEPTH_STENCIL_TARGET=RB_RW_DEPTH_STENCIL_TARGET|RB_RO_SRV, +//NOTE:RB_RO_INDIRECT_BUFFERisintentionallynotpartofthis,asthisisthecaseonXBOX(X +//andSX). +RB_RO_GENERIC_READ_BUFFER=RB_RO_SRV|RB_RO_CONSTANT_BUFFER|RB_RO_VERTEX_BUFFER|RB_RO_INDEX_BUFFER|RB_RO_COPY_SOURCE| +RB_RO_RAYTRACE_ACCELERATION_BUILD_SOURCE, +//This+RB_STAGE_ALL_SHADERSisthestateofstatictexturesafteruploadiscompleted. +RB_RO_GENERIC_READ_TEXTURE=RB_RO_SRV|RB_RO_COPY_SOURCE|RB_RO_BLIT_SOURCE|RB_RO_VARIABLE_RATE_SHADING_TEXTURE, +//This+RB_RO_GENERIC_READ_TEXTUREisthestateofstatictexturesafteruploadiscompleted. +RB_STAGE_ALL_SHADERS=RB_STAGE_VERTEX|RB_STAGE_PIXEL|RB_STAGE_COMPUTE|RB_STAGE_RAYTRACE, +RB_STAGE_ALL_GRAPHICS=RB_STAGE_VERTEX|RB_STAGE_PIXEL, +RB_NONE=0 +}; + +constexprinlineResourceBarrieroperator|(ResourceBarrierl,ResourceBarrierr) +{ +returnstatic_cast<ResourceBarrier>(static_cast<unsigned>(l)|static_cast<unsigned>(r)); +} + +constexprinlineResourceBarrieroperator&(ResourceBarrierl,ResourceBarrierr) +{ +returnstatic_cast<ResourceBarrier>(static_cast<unsigned>(l)&static_cast<unsigned>(r)); +} + +constexprinlineResourceBarrieroperator^(ResourceBarrierl,ResourceBarrierr) +{ +returnstatic_cast<ResourceBarrier>(static_cast<unsigned>(l)^static_cast<unsigned>(r)); +} + +enumRenderPassTargetAction:int +{ +RP_TA_NONE=0, + +RP_TA_LOAD_READ=1u<<0, +RP_TA_LOAD_CLEAR=1u<<1, +RP_TA_LOAD_NO_CARE=1u<<2, +RP_TA_LOAD_MASK=RP_TA_LOAD_NO_CARE|RP_TA_LOAD_CLEAR|RP_TA_LOAD_READ, + +RP_TA_SUBPASS_READ=1u<<3, +RP_TA_SUBPASS_RESOLVE=1u<<4, +RP_TA_SUBPASS_WRITE=1u<<5, +RP_TA_SUBPASS_KEEP=1u<<6, +RP_TA_SUBPASS_MASK=RP_TA_SUBPASS_READ|RP_TA_SUBPASS_RESOLVE|RP_TA_SUBPASS_WRITE|RP_TA_SUBPASS_KEEP, + +RP_TA_STORE_WRITE=1u<<7, +RP_TA_STORE_NONE=1u<<8, +RP_TA_STORE_NO_CARE=1u<<9, +RP_TA_STORE_MASK=RP_TA_STORE_NO_CARE|RP_TA_STORE_NONE|RP_TA_STORE_WRITE +}; + +constexprinlineRenderPassTargetActionoperator|(RenderPassTargetActionl,RenderPassTargetActionr) +{ +returnstatic_cast<RenderPassTargetAction>(static_cast<unsigned>(l)|static_cast<unsigned>(r)); +} + +enumRenderPassExtraIndexes:int +{ +RP_INDEX_NORMAL=0, +RP_SUBPASS_EXTERNAL_END=-1, +RP_SLOT_DEPTH_STENCIL=-1 +}; + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__consts__base_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__consts__base_8h.xml new file mode 100644 index 000000000..3183a747a --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__consts__base_8h.xml @@ -0,0 +1,1744 @@ + + + + dag_consts_base.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_interface_table.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_tex3d.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_consts.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_sampler.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_renderStates.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VSD_STREAM + n + (VSDOP_STREAM | (n) | ((n) == 0 ? 0 : VSDS_PER_INSTANCE_DATA)) + + + + + + + + + + VSD_STREAM_PER_VERTEX_DATA + n + (VSDOP_STREAM | (n)) + + + + + + + + + + VSD_STREAM_PER_INSTANCE_DATA + n + (VSDOP_STREAM | (n) | VSDS_PER_INSTANCE_DATA) + + + + + + + + + + VSD_REG + n + t + (VSDOP_INPUT | (t) | (n)) + + + + + + + + + + VSD_SKIP + n + (VSDOP_INPUT | VSD_SKIPFLG | ((n) << 16)) + + + + + + + + + + VSDT_FLOAT1 + (0x00 << 16) + + + + + + + + + + VSDT_FLOAT2 + (0x01 << 16) + + + + + + + + + + VSDT_FLOAT3 + (0x02 << 16) + + + + + + + + + + VSDT_FLOAT4 + (0x03 << 16) + + + + + + + + + + VSDT_E3DCOLOR + (0x04 << 16) + + + + + + + + + + VSDT_UBYTE4 + (0x05 << 16) + + + + + + + + + + VSDT_SHORT2 + (0x06 << 16) + + + + + + + + + + VSDT_SHORT4 + (0x07 << 16) + + + + + + + + + + VSDT_SHORT2N + (9 << 16) + + + + + + + + + + VSDT_SHORT4N + (10 << 16) + + + + + + + + + + VSDT_USHORT2N + (11 << 16) + + + + + + + + + + VSDT_USHORT4N + (12 << 16) + + + + + + + + + + VSDT_UDEC3 + (13 << 16) + + + + + + + + + + VSDT_DEC3N + (14 << 16) + + + + + + + + + + VSDT_HALF2 + (15 << 16) + + + + + + + + + + VSDT_HALF4 + (16 << 16) + + + + + + + + + + VSDT_INT1 + (17 << 16) + + + + + + + + + + VSDT_INT2 + (18 << 16) + + + + + + + + + + VSDT_INT3 + (19 << 16) + + + + + + + + + + VSDT_INT4 + (20 << 16) + + + + + + + + + + VSDT_UINT1 + (21 << 16) + + + + + + + + + + VSDT_UINT2 + (22 << 16) + + + + + + + + + + VSDT_UINT3 + (23 << 16) + + + + + + + + + + VSDT_UINT4 + (24 << 16) + + + + + + + + + + VSDR_POS + 0 + + + + + + + + + + VSDR_BLENDW + 1 + + + + + + + + + + VSDR_BLENDIND + 2 + + + + + + + + + + VSDR_NORM + 3 + + + + + + + + + + VSDR_PSIZE + 4 + + + + + + + + + + VSDR_DIFF + 5 + + + + + + + + + + VSDR_SPEC + 6 + + + + + + + + + + VSDR_TEXC0 + 7 + + + + + + + + + + VSDR_TEXC1 + 8 + + + + + + + + + + VSDR_TEXC2 + 9 + + + + + + + + + + VSDR_TEXC3 + 10 + + + + + + + + + + VSDR_TEXC4 + 11 + + + + + + + + + + VSDR_TEXC5 + 12 + + + + + + + + + + VSDR_TEXC6 + 13 + + + + + + + + + + VSDR_TEXC7 + 14 + + + + + + + + + + VSDR_POS2 + 15 + + + + + + + + + + VSDR_NORM2 + 16 + + + + + + + + + + VSDR_TEXC15 + 17 + + + + + + + + + + VSDR_TEXC8 + 18 + + + + + + + + + + VSDR_TEXC9 + 19 + + + + + + + + + + VSDR_TEXC10 + 20 + + + + + + + + + + VSDR_TEXC11 + 21 + + + + + + + + + + VSDR_TEXC12 + 22 + + + + + + + + + + VSDR_TEXC13 + 23 + + + + + + + + + + VSDR_TEXC14 + 24 + + + + + + + + + + + + + @48 + + VBLOCK_READONLY + = 0x02 + + + + + + + VBLOCK_WRITEONLY + = 0x04 + + + + + + + VBLOCK_NOSYSLOCK + = 0x08 + + + + + + + VBLOCK_DISCARD + = 0x10 + + + + + + + VBLOCK_NOOVERWRITE + = 0x20 + + + + + + + + + + + + + + + + @49 + + PRIM_POINTLIST + = 1 + + + + + + + PRIM_LINELIST + = 2 + + + + + + + PRIM_LINESTRIP + = 3 + + + + + + + PRIM_TRILIST + = 4 + + + + + + + PRIM_TRISTRIP + = 5 + + + + + + + PRIM_TRIFAN + = 6 + + + + + + + PRIM_4_CONTROL_POINTS + = 8 + + + + + + + PRIM_COUNT + + + + + + + + + + + + + + + + @50 + + TM_WORLD + = 0 + + + + + + + TM_VIEW + = 1 + + + + + + + TM_PROJ + = 2 + + + + + + + TM_LOCAL2VIEW + = 3 + + + + + + + TM_VIEW2LOCAL + = 4 + + + + + + + TM_GLOBAL + = 5 + + + + + + + TM__NUM + + + + + + + + + + + + + + + + @51 + + CLEAR_TARGET + = 1 + + + + + + + CLEAR_ZBUFFER + = 2 + + + + + + + CLEAR_STENCIL + = 4 + + + + + + + CLEAR_DISCARD_TARGET + = 8 + + + + + + + CLEAR_DISCARD_ZBUFFER + = 16 + + + + + + + CLEAR_DISCARD_STENCIL + = 32 + + + + + + + CLEAR_DISCARD + = CLEAR_DISCARD_TARGET | CLEAR_DISCARD_ZBUFFER | CLEAR_DISCARD_STENCIL + + + + + + + + + + + + + + + + BLEND_FACTOR + + BLEND_ZERO + = 1 + + + + + + + BLEND_ONE + = 2 + + + + + + + BLEND_SRCCOLOR + = 3 + + + + + + + BLEND_INVSRCCOLOR + = 4 + + + + + + + BLEND_SRCALPHA + = 5 + + + + + + + BLEND_INVSRCALPHA + = 6 + + + + + + + BLEND_DESTALPHA + = 7 + + + + + + + BLEND_INVDESTALPHA + = 8 + + + + + + + BLEND_DESTCOLOR + = 9 + + + + + + + BLEND_INVDESTCOLOR + = 10 + + + + + + + BLEND_SRCALPHASAT + = 11 + + + + + + + BLEND_BOTHINVSRCALPHA + = 13 + + + + + + + BLEND_BLENDFACTOR + = 14 + + + + + + + BLEND_INVBLENDFACTOR + = 15 + + + + + + + + + + + + + + + + BLENDOP + + BLENDOP_ADD + = 1 + + + + + + + BLENDOP_SUBTRACT + = 2 + + + + + + + BLENDOP_REVSUBTRACT + = 3 + + + + + + + BLENDOP_MIN + = 4 + + + + + + + BLENDOP_MAX + = 5 + + + + + + + + + + + + + + + + CMPF + + CMPF_NEVER + = 1 + + + + + + + CMPF_LESS + = 2 + + + + + + + CMPF_EQUAL + = 3 + + + + + + + CMPF_LESSEQUAL + = 4 + + + + + + + CMPF_GREATER + = 5 + + + + + + + CMPF_NOTEQUAL + = 6 + + + + + + + CMPF_GREATEREQUAL + = 7 + + + + + + + CMPF_ALWAYS + = 8 + + + + + + + + + + + + + + + + CULL_TYPE + + CULL_NONE + = 1 + + + + + + + CULL_CW + + + + + + + CULL_CCW + + + + + + + + + + + + + + + + @52 + + STNCLOP_KEEP + = 1 + + + + + + + STNCLOP_ZERO + = 2 + + + + + + + STNCLOP_REPLACE + = 3 + + + + + + + STNCLOP_INCRSAT + = 4 + + + + + + + STNCLOP_DECRSAT + = 5 + + + + + + + STNCLOP_INVERT + = 6 + + + + + + + STNCLOP_INCR + = 7 + + + + + + + STNCLOP_DECR + = 8 + + + + + + + + + + + + + + + + @53 + + TEXADDR_WRAP + = 1 + + + + + + + TEXADDR_MIRROR + = 2 + + + + + + + TEXADDR_CLAMP + = 3 + + + + + + + TEXADDR_BORDER + = 4 + + + + + + + TEXADDR_MIRRORONCE + = 5 + + + + + + + + + + + + + + + + @54 + + TEXFILTER_DEFAULT + = 0 + + + + + + + TEXFILTER_POINT + = 1 + + + + + + + TEXFILTER_LINEAR + = 2 + + + + + + + TEXFILTER_BEST + = 3 + + + + + + + TEXFILTER_COMPARE + = 4 + + + + + + + TEXFILTER_NONE + = 5 + + + + + + + + + + + + + + + + + constexpr int + constexpr int MAX_SURVEY_INDEX + + MAX_SURVEY_INDEX + = 0 + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +//streamnumber:specifyALLstreamregsafterit,becausethisstreamnumber +//can'tbeusedagaininthisdeclaration +#defineVSD_STREAM(n)(VSDOP_STREAM|(n)|((n)==0?0:VSDS_PER_INSTANCE_DATA))//Forcompatibility. +#defineVSD_STREAM_PER_VERTEX_DATA(n)(VSDOP_STREAM|(n)) +#defineVSD_STREAM_PER_INSTANCE_DATA(n)(VSDOP_STREAM|(n)|VSDS_PER_INSTANCE_DATA) + +//mapdataoftypettoinputregistern(0..15);nmustbeapre-defined +//constantwhenusingstandardvertexprogram(seebelow) +#defineVSD_REG(n,t)(VSDOP_INPUT|(t)|(n)) + +//skipn32-bitwordsofinputstreamdata(0..15) +#defineVSD_SKIP(n)(VSDOP_INPUT|VSD_SKIPFLG|((n)<<16)) + +//typesofinputdata: + +//1dfloat:x=>(x,0,0,1) +#defineVSDT_FLOAT1(0x00<<16) +//2dfloat:x,y=>(x,y,0,1) +#defineVSDT_FLOAT2(0x01<<16) +//3dfloat:x,y,z=>(x,y,z,1) +#defineVSDT_FLOAT3(0x02<<16) +//4dfloat:x,y,z,w=>(x,y,z,w) +#defineVSDT_FLOAT4(0x03<<16) +//4-byteB,G,R,Acolor(E3DCOLORtype)=>(R,G,B,A)(0..1range) +#defineVSDT_E3DCOLOR(0x04<<16) +//4duint8_tx,y,z,w=>(x,y,z,w) +#defineVSDT_UBYTE4(0x05<<16) +//2dsignedshort:x,y=>(x,y,0,1) +#defineVSDT_SHORT2(0x06<<16) +//4dsignedshort:x,y,z,w=>(x,y,z,w) +#defineVSDT_SHORT4(0x07<<16) + +//2Dsignedshortnormalized(v[0]/32767.0,v[1]/32767.0,0,1) +#defineVSDT_SHORT2N(9<<16) +//4Dsignedshortnormalized(v[0]/32767.0,v[1]/32767.0,0,1) +#defineVSDT_SHORT4N(10<<16) +//2Dunsignedshortnormalized(v[0]/65535.0,v[1]/65535.0,0,1) +#defineVSDT_USHORT2N(11<<16) +//4Dunsignedshortnormalized(v[0]/65535.0,v[1]/65535.0,v[2]/65535.0,v[3]/65535.0) +#defineVSDT_USHORT4N(12<<16) + +//3Dunsigned101010formatexpandedto(value,value,value,1) +#defineVSDT_UDEC3(13<<16) +//3Dsigned101010formatnormalizedandexpandedto(v[0]/511.0,v[1]/511.0,v[2]/511.0,1) +#defineVSDT_DEC3N(14<<16) + +//Two16-bitfloatingpointvalues,expandedto(value,value,0,1) +#defineVSDT_HALF2(15<<16) +//Four16-bitfloatingpointvalues +#defineVSDT_HALF4(16<<16) + +#defineVSDT_INT1(17<<16) +#defineVSDT_INT2(18<<16) +#defineVSDT_INT3(19<<16) +#defineVSDT_INT4(20<<16) + +#defineVSDT_UINT1(21<<16) +#defineVSDT_UINT2(22<<16) +#defineVSDT_UINT3(23<<16) +#defineVSDT_UINT4(24<<16) + +//registernumbersforstandardvertexprogram +#defineVSDR_POS0 +#defineVSDR_BLENDW1 +#defineVSDR_BLENDIND2 +#defineVSDR_NORM3 +#defineVSDR_PSIZE4 +#defineVSDR_DIFF5 +#defineVSDR_SPEC6 +#defineVSDR_TEXC07 +#defineVSDR_TEXC18 +#defineVSDR_TEXC29 +#defineVSDR_TEXC310 +#defineVSDR_TEXC411 +#defineVSDR_TEXC512 +#defineVSDR_TEXC613 +#defineVSDR_TEXC714 +#defineVSDR_POS215 +#defineVSDR_NORM216 +#defineVSDR_TEXC1517 +#defineVSDR_TEXC818 +#defineVSDR_TEXC919 +#defineVSDR_TEXC1020 +#defineVSDR_TEXC1121 +#defineVSDR_TEXC1222 +#defineVSDR_TEXC1323 +#defineVSDR_TEXC1424 + +enum +{ +VBLOCK_READONLY=0x02, +VBLOCK_WRITEONLY=0x04, +VBLOCK_NOSYSLOCK=0x08,//fordebugging +VBLOCK_DISCARD=0x10,//discardbuffercontents-theywon'tberead +VBLOCK_NOOVERWRITE=0x20//nodrawnvertexeswillbeoverwritten +}; + +enum +{ +PRIM_POINTLIST=1, +PRIM_LINELIST=2, +PRIM_LINESTRIP=3, +PRIM_TRILIST=4, +PRIM_TRISTRIP=5, +PRIM_TRIFAN=6, +#if_TARGET_XBOX +PRIM_QUADLIST=7,//D3D_PRIMITIVE_TOPOLOGY_QUADLIST=19,Xboxextension. +#endif +PRIM_4_CONTROL_POINTS=8,//Quadsforheightmaphardwaretesselation +PRIM_COUNT, +}; + + +enum +{ +TM_WORLD=0, +TM_VIEW=1, +TM_PROJ=2, + +TM_LOCAL2VIEW=3, +TM_VIEW2LOCAL=4, +TM_GLOBAL=5, +TM__NUM +}; + +enum +{ +CLEAR_TARGET=1, +CLEAR_ZBUFFER=2, +CLEAR_STENCIL=4, +CLEAR_DISCARD_TARGET=8,//IndicatestheinitialRTcontentwillbecompletelyoverwrittenanddoesn'tmatter-optimizationin +//someAPIs +CLEAR_DISCARD_ZBUFFER=16, +CLEAR_DISCARD_STENCIL=32, +CLEAR_DISCARD=CLEAR_DISCARD_TARGET|CLEAR_DISCARD_ZBUFFER|CLEAR_DISCARD_STENCIL +}; + +enumBLEND_FACTOR +{ +BLEND_ZERO=1, +BLEND_ONE=2, +BLEND_SRCCOLOR=3, +BLEND_INVSRCCOLOR=4, +BLEND_SRCALPHA=5, +BLEND_INVSRCALPHA=6, +BLEND_DESTALPHA=7, +BLEND_INVDESTALPHA=8, +BLEND_DESTCOLOR=9, +BLEND_INVDESTCOLOR=10, +BLEND_SRCALPHASAT=11, +BLEND_BOTHINVSRCALPHA=13, +BLEND_BLENDFACTOR=14, +BLEND_INVBLENDFACTOR=15 +}; + +enumBLENDOP +{ +BLENDOP_ADD=1, +BLENDOP_SUBTRACT=2, +BLENDOP_REVSUBTRACT=3, +BLENDOP_MIN=4, +BLENDOP_MAX=5, +}; + +enumCMPF +{ +CMPF_NEVER=1, +CMPF_LESS=2, +CMPF_EQUAL=3, +CMPF_LESSEQUAL=4, +CMPF_GREATER=5, +CMPF_NOTEQUAL=6, +CMPF_GREATEREQUAL=7, +CMPF_ALWAYS=8 +}; + +enumCULL_TYPE +{ +CULL_NONE=1, +CULL_CW, +CULL_CCW +}; + +enum +{ +STNCLOP_KEEP=1, +STNCLOP_ZERO=2, +STNCLOP_REPLACE=3, +STNCLOP_INCRSAT=4, +STNCLOP_DECRSAT=5, +STNCLOP_INVERT=6, +STNCLOP_INCR=7, +STNCLOP_DECR=8 +}; + +enum +{ +TEXADDR_WRAP=1, +TEXADDR_MIRROR=2, +TEXADDR_CLAMP=3, +TEXADDR_BORDER=4, +TEXADDR_MIRRORONCE=5,//dx9extension +}; + +enum +{ +TEXFILTER_DEFAULT=0,//driverdefault + +TEXFILTER_POINT=1, +TEXFILTER_LINEAR=2,//bilinear +TEXFILTER_BEST=3,//anisotropicandsimilar,ifavailable +TEXFILTER_COMPARE=4,//pointcomparasionforusinginpcf +TEXFILTER_NONE=5, +}; +staticconstexprintMAX_SURVEY_INDEX=0; + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__d3d_resource_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__d3d_resource_8h.xml new file mode 100644 index 000000000..7074a9484 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__d3d_resource_8h.xml @@ -0,0 +1,246 @@ + + + + dag_d3dResource.h + util/dag_string.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_buffers.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_heap.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_tex3d.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D3dResource + + + + @2 + + RES3D_TEX + + + + + + + RES3D_CUBETEX + + + + + + + RES3D_VOLTEX + + + + + + + RES3D_ARRTEX + + + + + + + RES3D_CUBEARRTEX + + + + + + + RES3D_SBUF + + + + + + + + + + + + + + + + + void + void destroy_d3dres + (D3dResource *res) + destroy_d3dres + + D3dResource * + res + + + + + + + + + + + + + class T + + + void + void del_d3dres + (T *&p) + del_d3dres + + T *& + p + + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_string.h> + +classD3dResource +{ +public: +virtualvoiddestroy()=0; +virtualintrestype()const=0; +virtualintressize()const=0; +constchar*getResName()const{returnstatName.c_str();} +voidsetResName(constchar*name){statName=name;} +voidsetResName(constchar*name,intsize){statName.setStr(name,size);} +//WARNING:Thismightallocate.Avoidcallingiteveryframe. +virtualvoidsetResApiName(constchar*/*name*/)const{} + +D3dResource()=default; +D3dResource(D3dResource&&)=default; +D3dResource&operator=(D3dResource&&)=default; + +protected: +virtual~D3dResource(){}; + +private: +StringstatName; +}; + +enum +{ +RES3D_TEX, +RES3D_CUBETEX, +RES3D_VOLTEX, +RES3D_ARRTEX, +RES3D_CUBEARRTEX, +RES3D_SBUF +}; + +inlinevoiddestroy_d3dres(D3dResource*res) +{ +if(res) +res->destroy(); +} + +template<classT> +inlinevoiddel_d3dres(T*&p) +{ +destroy_d3dres(p); +p=nullptr; +} + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__decl_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__decl_8h.xml new file mode 100644 index 000000000..2050920d5 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__decl_8h.xml @@ -0,0 +1,1007 @@ + + + + dag_decl.h + util/dag_globDef.h + util/dag_preprocessor.h + math/dag_TMatrix.h + math/dag_TMatrix4.h + math/dag_lsbVisitor.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_buffers.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_renderTarget.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_driver.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ScissorRect + Viewport + Driver3dPerspective + Driver3dRenderTarget + Driver3dRenderTarget::RTState + ScopeRenderTarget + ScopeViewport + ViewProjMatrixContainer + ScopeViewProjMatrix + DrawIndirectArgs + DrawIndexedIndirectArgs + ShaderWarmUpInfo + XessParams + Fsr2Params + MtlFxUpscaleParams + + + SCOPE_VIEW_PROJ_MATRIX + ScopeViewProjMatrix DAG_CONCAT(scopevpm, __LINE__) + + + + + + + + + + SCOPE_VIEWPORT + ScopeViewport DAG_CONCAT(scopevp, __LINE__) + + + + + + + + + + SCOPE_RENDER_TARGET + SCOPE_VIEWPORT; \ + ScopeRenderTarget DAG_CONCAT(scopert, __LINE__) + + + + + + + + + + DRAW_INDIRECT_NUM_ARGS + 4 + + + + + + + + + + DRAW_INDEXED_INDIRECT_NUM_ARGS + 5 + + + + + + + + + + DISPATCH_INDIRECT_NUM_ARGS + 3 + + + + + + + + + + INDIRECT_BUFFER_ELEMENT_SIZE + sizeof(uint32_t) + + + + + + + + + + DRAW_INDIRECT_BUFFER_SIZE + (DRAW_INDIRECT_NUM_ARGS * INDIRECT_BUFFER_ELEMENT_SIZE) + + + + + + + + + + DRAW_INDEXED_INDIRECT_BUFFER_SIZE + (DRAW_INDEXED_INDIRECT_NUM_ARGS * INDIRECT_BUFFER_ELEMENT_SIZE) + + + + + + + + + + DISPATCH_INDIRECT_BUFFER_SIZE + (DISPATCH_INDIRECT_NUM_ARGS * INDIRECT_BUFFER_ELEMENT_SIZE) + + + + + + + + + + INPUT_VERTEX_STREAM_COUNT + 4 + + + + + + + + + + STATE_GUARD_IMPL + ClassName + obj_name + func_call + val + default_value + struct ClassName \ + { \ + typedef decltype(val) val_type; \ + typedef decltype(func_call) func_type; \ + const val_type def_value; \ + const func_type &func; \ + ClassName(const val_type VALUE, const val_type def_value_, const func_type &func) : def_value(def_value_), func(func) \ + { \ + func(VALUE); \ + } \ + ~ClassName() \ + { \ + func(def_value); \ + } \ + } obj_name(val, default_value, func_call); + + + + + + + + + + STATE_GUARD + func_call + val + default_value + auto DAG_CONCAT(lambda, __LINE__) = [&](const decltype(val) VALUE) { func_call; }; \ + STATE_GUARD_IMPL(DAG_CONCAT(StateGuard, __LINE__), DAG_CONCAT(guard, __LINE__), DAG_CONCAT(lambda, __LINE__), val, default_value) + + + + + + + + + + STATE_GUARD_NULLPTR + func_call + val + STATE_GUARD(func_call, val, nullptr) + + + + + + + + + + STATE_GUARD_0 + func_call + val + STATE_GUARD(func_call, val, 0) + + + + + + + + + + + + + @17 + + D3D_VENDOR_NONE + + + + + + + D3D_VENDOR_MESA + + + + + + + D3D_VENDOR_IMGTEC + + + + + + + D3D_VENDOR_AMD + + + + + + + D3D_VENDOR_NVIDIA + + + + + + + D3D_VENDOR_INTEL + + + + + + + D3D_VENDOR_APPLE + + + + + + + D3D_VENDOR_SHIM_DRIVER + + + + + + + D3D_VENDOR_ARM + + + + + + + D3D_VENDOR_QUALCOMM + + + + + + + D3D_VENDOR_SAMSUNG + + + + + + + D3D_VENDOR_HUAWEI + + + + + + + D3D_VENDOR_COUNT + + + + + + + D3D_VENDOR_ATI + = D3D_VENDOR_AMD + + + + + + + + + + + + + + + + MtlfxColorMode + + PERCEPTUAL + = 0 + + + + + + + LINEAR + + + + + + + HDR + + + + + + + + + + + + + + + + + void + void d3d_get_render_target + (Driver3dRenderTarget &rt) + d3d_get_render_target + + Driver3dRenderTarget & + rt + + + + + + + + + + + void + void d3d_set_render_target + (Driver3dRenderTarget &rt) + d3d_set_render_target + + Driver3dRenderTarget & + rt + + + + + + + + + + + void + void d3d_get_view_proj + (ViewProjMatrixContainer &vp) + d3d_get_view_proj + + ViewProjMatrixContainer & + vp + + + + + + + + + + + void + void d3d_set_view_proj + (const ViewProjMatrixContainer &vp) + d3d_set_view_proj + + const ViewProjMatrixContainer & + vp + + + + + + + + + + + void + void d3d_get_view + (int &viewX, int &viewY, int &viewW, int &viewH, float &viewN, float &viewF) + d3d_get_view + + int & + viewX + + + int & + viewY + + + int & + viewW + + + int & + viewH + + + float & + viewN + + + float & + viewF + + + + + + + + + + + void + void d3d_set_view + (int viewX, int viewY, int viewW, int viewH, float viewN, float viewF) + d3d_set_view + + int + viewX + + + int + viewY + + + int + viewW + + + int + viewH + + + float + viewN + + + float + viewF + + + + + + + + + + + int + int d3d_get_vendor + (uint32_t vendor_id, const char *description=nullptr) + d3d_get_vendor + + uint32_t + vendor_id + + + const char * + description + nullptr + + + + + + + + + + + const char * + const char* d3d_get_vendor_name + (int vendor) + d3d_get_vendor_name + + int + vendor + + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_globDef.h> +#include<util/dag_preprocessor.h> +#include<math/dag_TMatrix.h> +#include<math/dag_TMatrix4.h> +#include<math/dag_lsbVisitor.h> + +classBaseTexture; +structDriver3dRenderTarget; +structViewProjMatrixContainer; +classString; + +externvoidd3d_get_render_target(Driver3dRenderTarget&rt); +externvoidd3d_set_render_target(Driver3dRenderTarget&rt); + +externvoidd3d_get_view_proj(ViewProjMatrixContainer&vp); +externvoidd3d_set_view_proj(constViewProjMatrixContainer&vp); + +externvoidd3d_get_view(int&viewX,int&viewY,int&viewW,int&viewH,float&viewN,float&viewF); +externvoidd3d_set_view(intviewX,intviewY,intviewW,intviewH,floatviewN,floatviewF); + +#defineSCOPE_VIEW_PROJ_MATRIXScopeViewProjMatrixDAG_CONCAT(scopevpm,__LINE__) +#defineSCOPE_VIEWPORTScopeViewportDAG_CONCAT(scopevp,__LINE__) +#defineSCOPE_RENDER_TARGET\ +SCOPE_VIEWPORT;\ +ScopeRenderTargetDAG_CONCAT(scopert,__LINE__) + +//---Datastructures------- +structScissorRect +{ +intx,y,w,h; +}; + +structViewport:publicScissorRect +{ +floatminz,maxz; + +staticconstexpruint32_tMAX_VIEWPORT_COUNT=16; +}; + +structDriver3dPerspective +{ +Driver3dPerspective():wk(0.f),hk(0.f),zn(0.f),zf(0.f),ox(0.f),oy(0.f){} + +Driver3dPerspective(floatwk_,floathk_,floatzn_,floatzf_,floatox_=0.f,floatoy_=0.f): +wk(wk_),hk(hk_),zn(zn_),zf(zf_),ox(ox_),oy(oy_) +{} + +floatwk,hk; +floatzn,zf; +floatox,oy; +}; + +structDriver3dRenderTarget +{ +structRTState +{ +BaseTexture*tex; +unsignedcharlevel; +union +{ +unsignedshortface; +unsignedshortlayer; +}; +voidset(BaseTexture*t,intlev,intf_l) +{ +tex=t; +level=lev; +face=f_l; +} + +friendbooloperator==(constRTState&l,constRTState&r) +{ +return(l.tex==r.tex)&&(l.level==r.level)&&(l.face==r.face); +} +friendbooloperator!=(constRTState&l,constRTState&r){return!(l==r);} +}; +staticconstexprintMAX_SIMRT=8; +#ifndefINSIDE_DRIVER +protected: +#endif +RTStatecolor[MAX_SIMRT],depth; +enum +{ +COLOR0=1<<0, +COLOR1=COLOR0<<1, +COLOR2=COLOR1<<1, +COLOR3=COLOR2<<1, +COLOR4=COLOR3<<1, +COLOR5=COLOR4<<1, +COLOR6=COLOR5<<1, +COLOR7=COLOR6<<1, +COLOR_MASK=(1<<MAX_SIMRT)-1, +DEPTH=1<<MAX_SIMRT, +DEPTH_READONLY=DEPTH<<1, +TOTAL_MASK=COLOR_MASK|DEPTH, +}; +uint32_tused=0; +voidreset(){used=0;} +voidsetColor(intindex,BaseTexture*t,intlev,intf_l) +{ +G_ASSERT(index<MAX_SIMRT); +color[index].set(t,lev,f_l); +used|=COLOR0<<index; +} +voidsetBackbufColor() +{ +used=(used&~COLOR_MASK); +setColor(0,NULL,0,0); +} +voidremoveColor(intindex) +{ +G_ASSERT(index<MAX_SIMRT); +used&=~(COLOR0<<index); +color[index].set(NULL,0,0); +} +voidsetDepth(BaseTexture*t,boolro=false) +{ +G_FAST_ASSERT(t!=nullptr); +depth.set(t,0,0); +used=DEPTH|(-int32_t(ro)&DEPTH_READONLY)|(used&(~DEPTH_READONLY)); +} +voidsetDepth(BaseTexture*t,intlayer,boolro=false) +{ +G_FAST_ASSERT(t!=nullptr); +depth.set((BaseTexture*)t,0,layer); +used=DEPTH|(-int32_t(ro)&DEPTH_READONLY)|(used&(~DEPTH_READONLY)); +} +voidremoveDepth() +{ +used&=~DEPTH; +depth.set(NULL,0,0); +} + +public: +constRTState&getColor(intindex)const{returncolor[index];} +constRTState&getDepth()const{returndepth;} +boolisBackBufferColor()const{return(used&COLOR0)&&!color[0].tex;} +boolisColorUsed(intindex)const{returnused&(COLOR0<<index);} +boolisDepthUsed()const{returnused&DEPTH;} +boolisColorUsed()const{return(used&COLOR_MASK);} +voidsetDepthReadOnly(){used|=DEPTH_READONLY;} +voidsetDepthRW(){used&=~DEPTH_READONLY;} +boolisDepthReadOnly()const{return(used&(DEPTH|DEPTH_READONLY))==(DEPTH|DEPTH_READONLY);} +Driver3dRenderTarget(){}//-V730 + +friendbooloperator==(constDriver3dRenderTarget&l,constDriver3dRenderTarget&r) +{ +if(l.used!=r.used) +returnfalse; + +if((l.used&Driver3dRenderTarget::DEPTH)&&l.depth!=r.depth) +returnfalse; + +for(autoi:LsbVisitor{l.used&Driver3dRenderTarget::COLOR_MASK}) +if(l.color[i]!=r.color[i]) +returnfalse; + +returntrue; +} + +friendbooloperator!=(constDriver3dRenderTarget&l,constDriver3dRenderTarget&r){return!(l==r);} +}; + +structScopeRenderTarget +{ +Driver3dRenderTargetprevRT; +ScopeRenderTarget(){d3d_get_render_target(prevRT);} +~ScopeRenderTarget(){d3d_set_render_target(prevRT);} +}; + +structScopeViewport +{ +intviewX,viewY,viewW,viewH; +floatviewN,viewF; +ScopeViewport(){d3d_get_view(viewX,viewY,viewW,viewH,viewN,viewF);} +~ScopeViewport(){d3d_set_view(viewX,viewY,viewW,viewH,viewN,viewF);} +}; + +structViewProjMatrixContainer +{ +constTMatrix&getViewTm()const{returnsavedView;} +constTMatrix4&getProjTm()const{returnsavedProj;} + +TMatrixsavedView=TMatrix::IDENT; +TMatrix4savedProj=TMatrix4::IDENT; +Driver3dPerspectivep; +boolp_ok=false; +}; + +structScopeViewProjMatrix:publicViewProjMatrixContainer +{ +ScopeViewProjMatrix(){d3d_get_view_proj(*this);} +~ScopeViewProjMatrix(){d3d_set_view_proj(*this);} +}; + +structDrawIndirectArgs +{ +uint32_tvertexCountPerInstance; +uint32_tinstanceCount; +uint32_tstartVertexLocation; +uint32_tstartInstanceLocation; +}; + +structDrawIndexedIndirectArgs +{ +uint32_tindexCountPerInstance; +uint32_tinstanceCount; +uint32_tstartIndexLocation; +int32_tbaseVertexLocation; +uint32_tstartInstanceLocation; +}; + +#defineDRAW_INDIRECT_NUM_ARGS4 +#defineDRAW_INDEXED_INDIRECT_NUM_ARGS5 +#defineDISPATCH_INDIRECT_NUM_ARGS3 +#defineINDIRECT_BUFFER_ELEMENT_SIZEsizeof(uint32_t) +#defineDRAW_INDIRECT_BUFFER_SIZE(DRAW_INDIRECT_NUM_ARGS*INDIRECT_BUFFER_ELEMENT_SIZE) +#defineDRAW_INDEXED_INDIRECT_BUFFER_SIZE(DRAW_INDEXED_INDIRECT_NUM_ARGS*INDIRECT_BUFFER_ELEMENT_SIZE) +#defineDISPATCH_INDIRECT_BUFFER_SIZE(DISPATCH_INDIRECT_NUM_ARGS*INDIRECT_BUFFER_ELEMENT_SIZE) + +#defineINPUT_VERTEX_STREAM_COUNT4 + +structShaderWarmUpInfo +{ +int32_tshaderProgram; +uint32_tcolorFormats[Driver3dRenderTarget::MAX_SIMRT]; +uint32_tdepthStencilFormat; +//bit31indicatesdepthstenciluse(1)ornot(0) +uint32_tvalidColorTargetAndDepthStencilMask; +uint32_tcolorWriteMask; + +uint32_tvertexInputStreamStrides[INPUT_VERTEX_STREAM_COUNT]; + +//Maskof1u<<<TOPOLOGY> +//Backendmaybeabletocombineloadswithdifferenttopologywhenmorethanonebitisset +uint8_tprimitiveTopologyMask; +uint8_tcullMode; +uint8_tdepthTestFunction; +uint8_tstencilTestFunction; +uint8_tstencilOnStencilFail; +uint8_tstencilOnDepthFail; +uint8_tstencilOnAllPass; +uint8_tblendOpRGB; +uint8_tblendOpAlpha; +uint8_tblendSrcFactorRGB; +uint8_tblendSrcFactorAlpha; +uint8_tblendDstFactorRGB; +uint8_tblendDstFactorAlpha; + +uint32_tpolyLineEnable:1; +uint32_tflipCullEnable:1; +uint32_tdepthTestEnable:1; +uint32_tdepthWriteEnable:1; +uint32_tdepthBoundsEnable:1; +uint32_tdepthClipEnable:1; +uint32_tstencilTestEnable:1; +uint32_tblendEnable:1; +uint32_tseparateBlendEnable:1; +}; + +enum +{ +D3D_VENDOR_NONE, +D3D_VENDOR_MESA, +D3D_VENDOR_IMGTEC, +D3D_VENDOR_AMD, +D3D_VENDOR_NVIDIA, +D3D_VENDOR_INTEL, +D3D_VENDOR_APPLE, +D3D_VENDOR_SHIM_DRIVER, +D3D_VENDOR_ARM, +D3D_VENDOR_QUALCOMM, +D3D_VENDOR_SAMSUNG, +D3D_VENDOR_HUAWEI, +D3D_VENDOR_COUNT, +D3D_VENDOR_ATI=D3D_VENDOR_AMD, +}; + +intd3d_get_vendor(uint32_tvendor_id,constchar*description=nullptr); +constchar*d3d_get_vendor_name(intvendor); + +structXessParams +{ +BaseTexture*inColor; +BaseTexture*inDepth; +BaseTexture*inMotionVectors; +floatinJitterOffsetX; +floatinJitterOffsetY; +floatinInputWidth; +floatinInputHeight; +intinColorDepthOffsetX; +intinColorDepthOffsetY; + +BaseTexture*outColor; +}; + +structFsr2Params +{ +BaseTexture*color; +BaseTexture*depth; +BaseTexture*motionVectors; +BaseTexture*output; +floatframeTimeDelta; +floatsharpness; +floatjitterOffsetX; +floatjitterOffsetY; +floatmotionVectorScaleX; +floatmotionVectorScaleY; +floatcameraNear; +floatcameraFar; +floatcameraFovAngleVertical; +uint32_trenderSizeX; +uint32_trenderSizeY; +}; + +enumclassMtlfxColorMode +{ +PERCEPTUAL=0, +LINEAR, +HDR +}; +structMtlFxUpscaleParams +{ +BaseTexture*color; +BaseTexture*output; +MtlfxColorModecolorMode; +}; + +#defineSTATE_GUARD_IMPL(ClassName,obj_name,func_call,val,default_value)\ +structClassName\ +{\ +typedefdecltype(val)val_type;\ +typedefdecltype(func_call)func_type;\ +constval_typedef_value;\ +constfunc_type&func;\ +ClassName(constval_typeVALUE,constval_typedef_value_,constfunc_type&func):def_value(def_value_),func(func)\ +{\ +func(VALUE);\ +}\ +~ClassName()\ +{\ +func(def_value);\ +}\ +}obj_name(val,default_value,func_call); + +#defineSTATE_GUARD(func_call,val,default_value)\ +autoDAG_CONCAT(lambda,__LINE__)=[&](constdecltype(val)VALUE){func_call;};\ +STATE_GUARD_IMPL(DAG_CONCAT(StateGuard,__LINE__),DAG_CONCAT(guard,__LINE__),DAG_CONCAT(lambda,__LINE__),val,default_value) + +#defineSTATE_GUARD_NULLPTR(func_call,val)STATE_GUARD(func_call,val,nullptr) +#defineSTATE_GUARD_0(func_call,val)STATE_GUARD(func_call,val,0) + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__dispatch_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__dispatch_8h.xml new file mode 100644 index 000000000..3d30b0737 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__dispatch_8h.xml @@ -0,0 +1,84 @@ + + + + dag_dispatch.h + util/dag_inttypes.h + drv/3d/dag_consts.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_inttypes.h> +#include<drv/3d/dag_consts.h> + +classSbuffer; + +namespaced3d +{ +booldispatch(uint32_tthread_group_x,uint32_tthread_group_y,uint32_tthread_group_z, +GpuPipelinegpu_pipeline=GpuPipeline::GRAPHICS); + +booldispatch_indirect(Sbuffer*args,uint32_tbyte_offset=0,GpuPipelinegpu_pipeline=GpuPipeline::GRAPHICS); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlinebooldispatch(uint32_tthread_group_x,uint32_tthread_group_y,uint32_tthread_group_z,GpuPipelinegpu_pipeline) +{ +returnd3di.dispatch(thread_group_x,thread_group_y,thread_group_z,gpu_pipeline); +} +inlinebooldispatch_indirect(Sbuffer*args,uint32_tbyte_offset,GpuPipelinegpu_pipeline) +{ +returnd3di.dispatch_indirect(args,byte_offset,gpu_pipeline); +} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__dispatch_mesh_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__dispatch_mesh_8h.xml new file mode 100644 index 000000000..5ebb83321 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__dispatch_mesh_8h.xml @@ -0,0 +1,65 @@ + + + + dag_dispatchMesh.h + util/dag_inttypes.h + + + + + + + + + + + + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_inttypes.h> + +classSbuffer; + +namespaced3d +{ +voiddispatch_mesh(uint32_tthread_group_x,uint32_tthread_group_y,uint32_tthread_group_z); + +voiddispatch_mesh_indirect(Sbuffer*args,uint32_tdispatch_count,uint32_tstride_bytes,uint32_tbyte_offset=0); + +voiddispatch_mesh_indirect_count(Sbuffer*args,uint32_targs_stride_bytes,uint32_targs_byte_offset,Sbuffer*count, +uint32_tcount_byte_offset,uint32_tmax_count); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlinevoiddispatch_mesh(uint32_tthread_group_x,uint32_tthread_group_y,uint32_tthread_group_z) +{ +d3di.dispatch_mesh(thread_group_x,thread_group_y,thread_group_z); +} +inlinevoiddispatch_mesh_indirect(Sbuffer*args,uint32_tdispatch_count,uint32_tstride_bytes,uint32_tbyte_offset) +{ +d3di.dispatch_mesh_indirect(args,dispatch_count,stride_bytes,byte_offset); +} +inlinevoiddispatch_mesh_indirect_count(Sbuffer*args,uint32_targs_stride_bytes,uint32_targs_byte_offset,Sbuffer*count, +uint32_tcount_byte_offset,uint32_tmax_count) +{ +d3di.dispatch_mesh_indirect_count(args,args_stride_bytes,args_byte_offset,count,count_byte_offset,max_count); +} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__draw_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__draw_8h.xml new file mode 100644 index 000000000..571487a65 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__draw_8h.xml @@ -0,0 +1,108 @@ + + + + dag_draw.h + util/dag_inttypes.h + + + + + + + + + + + + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_inttypes.h> + +classSbuffer; + +namespaced3d +{ +booldraw_base(inttype,intstart,intnumprim,uint32_tnum_instances,uint32_tstart_instance); + +inlinebooldraw(inttype,intstart,intnumprim){returndraw_base(type,start,numprim,1,0);} + +inlinebooldraw_instanced(inttype,intstart,intnumprim,uint32_tnum_instances,uint32_tstart_instance=0) +{ +returndraw_base(type,start,numprim,num_instances,start_instance); +} + +booldrawind_base(inttype,intstartind,intnumprim,intbase_vertex,uint32_tnum_instances,uint32_tstart_instance); + +inlinebooldrawind_instanced(inttype,intstartind,intnumprim,intbase_vertex,uint32_tnum_instances, +uint32_tstart_instance=0) +{ +returndrawind_base(type,startind,numprim,base_vertex,num_instances,start_instance); +} + +inlinebooldrawind(inttype,intstartind,intnumprim,intbase_vertex) +{ +returndrawind_base(type,startind,numprim,base_vertex,1,0); +} + +booldraw_up(inttype,intnumprim,constvoid*ptr,intstride_bytes); + +booldrawind_up(inttype,intminvert,intnumvert,intnumprim,constuint16_t*ind,constvoid*ptr,intstride_bytes); + +booldraw_indirect(inttype,Sbuffer*args,uint32_tbyte_offset=0); + +booldraw_indexed_indirect(inttype,Sbuffer*args,uint32_tbyte_offset=0); + +boolmulti_draw_indirect(intprim_type,Sbuffer*args,uint32_tdraw_count,uint32_tstride_bytes,uint32_tbyte_offset=0); + +boolmulti_draw_indexed_indirect(intprim_type,Sbuffer*args,uint32_tdraw_count,uint32_tstride_bytes,uint32_tbyte_offset=0); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlinebooldraw_base(inttype,intstart,intnumprim,uint32_tnum_instances,uint32_tstart_instance) +{ +returnd3di.draw_base(type,start,numprim,num_instances,start_instance); +} +inlinebooldrawind_base(inttype,intstartind,intnumprim,intbase_vertex,uint32_tnum_instances,uint32_tstart_instance) +{ +returnd3di.drawind_base(type,startind,numprim,base_vertex,num_instances,start_instance); +} +inlinebooldraw_up(inttype,intnumprim,constvoid*ptr,intstride_bytes) +{ +returnd3di.draw_up(type,numprim,ptr,stride_bytes); +} +inlinebooldrawind_up(inttype,intminvert,intnumvert,intnumprim,constuint16_t*ind,constvoid*ptr,intstride_bytes) +{ +returnd3di.drawind_up(type,minvert,numvert,numprim,ind,ptr,stride_bytes); +} +inlinebooldraw_indirect(inttype,Sbuffer*args,uint32_tbyte_offset){returnd3di.draw_indirect(type,args,byte_offset);} +inlinebooldraw_indexed_indirect(inttype,Sbuffer*args,uint32_tbyte_offset) +{ +returnd3di.draw_indexed_indirect(type,args,byte_offset); +} +inlineboolmulti_draw_indirect(intprim_type,Sbuffer*args,uint32_tdraw_count,uint32_tstride_bytes,uint32_tbyte_offset) +{ +returnd3di.multi_draw_indirect(prim_type,args,draw_count,stride_bytes,byte_offset); +} +inlineboolmulti_draw_indexed_indirect(intprim_type,Sbuffer*args,uint32_tdraw_count,uint32_tstride_bytes,uint32_tbyte_offset) +{ +returnd3di.multi_draw_indexed_indirect(prim_type,args,draw_count,stride_bytes,byte_offset); +} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__driver_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__driver_8h.xml new file mode 100644 index 000000000..cc52ada43 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__driver_8h.xml @@ -0,0 +1,548 @@ + + + + dag_driver.h + drv/3d/dag_decl.h + drv/3d/dag_barrier.h + drv/3d/dag_consts.h + drv/3d/dag_resource.h + drv/3d/dag_tex3d.h + util/dag_globDef.h + vecmath/dag_vecMathDecl.h + EASTL/initializer_list.h + drv/3d/dag_hangHandler.h + rayTrace/dag_drvRayTrace.h + rayTrace/rayTracedrv3d.inl.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_async_pipeline.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_drv3d_multi.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_lock.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_platform_pc.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_platform_ps.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d + + + D3D_HAS_QUADS + 0 + + + + + + + + + + d3derr + c + m + do \ + { \ + bool res = (c); \ + G_ANALYSIS_ASSUME(res); \ + if (!res) \ + { \ + bool canReset; \ + if (dagor_d3d_force_driver_reset || d3d::device_lost(&canReset)) \ + d3derr_in_device_reset(m); \ + else \ + DAG_FATAL("%s:\n%s", m, d3d::get_last_error()); \ + } \ + } while (0) + + + + + + + + + + d3d_err + c + d3derr((c), "Driver3d error") + + + + + + + + + + + + intptr_t + typedef intptr_t main_wnd_f(void *, unsigned, uintptr_t, intptr_t) + (void *, unsigned, uintptr_t, intptr_t) + main_wnd_f + + + + + + + + + + + + bool + bool dagor_d3d_force_driver_reset + + dagor_d3d_force_driver_reset + + + + + + + + + + + + void + void d3derr_in_device_reset + (const char *msg) + d3derr_in_device_reset + + const char * + msg + + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_decl.h> +#include<drv/3d/dag_barrier.h> +#include<drv/3d/dag_consts.h> +#include<drv/3d/dag_resource.h> +#include<drv/3d/dag_tex3d.h> +#include<util/dag_globDef.h> +#include<vecmath/dag_vecMathDecl.h> +#include<EASTL/initializer_list.h> +#include<drv/3d/dag_hangHandler.h> + +//forwarddeclarationsforexternalclasses +structD3dInterfaceTable; +classDriver3dInitCallback; +classSbuffer; +enumclassDrv3dCommand; + +//---Driver3dDesc&initialization------- +#include"rayTrace/dag_drvRayTrace.h" + +//mainwindowproc +typedefintptr_tmain_wnd_f(void*,unsigned,uintptr_t,intptr_t); + +namespaced3d +{ +classResUpdateBuffer; +}//namespaced3d + +//---3ddriverinterface------- +namespaced3d +{ +enum +{ +USAGE_TEXTURE=0x01, +USAGE_DEPTH=0x02, +USAGE_RTARGET=0x04, +USAGE_AUTOGENMIPS=0x08, +USAGE_FILTER=0x10, +USAGE_BLEND=0x20, +USAGE_VERTEXTEXTURE=0x40, +USAGE_SRGBREAD=0x80, +USAGE_SRGBWRITE=0x100, +USAGE_SAMPLECMP=0x200, +USAGE_PIXREADWRITE=0x400, +USAGE_TILED=0x800, +USAGE_UNORDERED=0x1000, +USAGE_UNORDERED_LOAD=0x2000 +}; + +enum +{ +CAPFMT_X8R8G8B8, +CAPFMT_R8G8B8, +CAPFMT_R5G6B5, +CAPFMT_X1R5G5B5, +}; + +voidupdate_window_mode(); + +staticconstexprintRENDER_TO_WHOLE_ARRAY=1023; +#if!_TARGET_D3D_MULTI +//DriverinitializationAPI + +boolinit_driver(); + +boolis_inited(); + +boolinit_video(void*hinst,main_wnd_f*,constchar*wcname,intncmdshow,void*&mainwnd,void*renderwnd,void*hicon, +constchar*title,Driver3dInitCallback*cb); + +voidrelease_driver(); + +boolfill_interface_table(D3dInterfaceTable&d3dit); + +voidprepare_for_destroy(); + +voidwindow_destroyed(void*hwnd); + +structBeforeWindowDestroyedCookie; +BeforeWindowDestroyedCookie*register_before_window_destroyed_callback(eastl::function<void()>callback); +voidunregister_before_window_destroyed_callback(BeforeWindowDestroyedCookie*cookie); + +//Devicemanagement + +booldevice_lost(bool*can_reset_now); + +boolreset_device(); + +//Rendering + +boolupdate_screen(boolapp_active=true); + +voidwait_for_async_present(boolforce=false); + +voidgpu_latency_wait(); + +GPUFENCEHANDLEinsert_fence(GpuPipelinegpu_pipeline); +voidinsert_wait_on_fence(GPUFENCEHANDLE&fence,GpuPipelinegpu_pipeline); +//additionalL2cacheflushcallswouldneedtobeaddedtosupportCPU<->ComputeContextdatacommunication +//(atleastonXboxOne,seeXDKdocs,article"OptimizingMonolithicDriverPerformance",part"ManualCacheandPipelineFlushing") + +//Miscellaneous +boolset_srgb_backbuffer_write(bool);//returnspreviousresult.switchon/offsrgbwritetobackbuffer(defaultisoff) + +boolsetgamma(float); + +floatget_screen_aspect_ratio(); +voidchange_screen_aspect_ratio(floatar); + +//Screencapture + +void*fast_capture_screen(int&w,int&h,int&stride_bytes,int&format); +voidend_fast_capture_screen(); + +TexPixel32*capture_screen(int&w,int&h,int&stride_bytes); +voidrelease_capture_buffer(); + +intcreate_predicate();//-1ifnotsupportedorsomethinggoeswrong +voidfree_predicate(intid); + +boolbegin_survey(intid);//falseifnotsupportedorbadid +voidend_survey(intid); + +voidbegin_conditional_render(intid); +voidend_conditional_render(intid); + +voidbeginEvent(constchar*);//fordebugging +voidendEvent();//fordebugging +boolget_vrr_supported(); +boolget_vsync_enabled(); +boolenable_vsync(boolenable); + +#include"rayTrace/rayTracedrv3d.inl.h" + +//SeeResourceBarrierDescandhttps://info.gaijin.lan/display/DE4/Resource+and+Execution+Barriers +voidresource_barrier(ResourceBarrierDescdesc,GpuPipelinegpu_pipeline=GpuPipeline::GRAPHICS); + +#endif + +#if_TARGET_XBOX||_TARGET_C1||_TARGET_C2 +voidresummarize_htile(BaseTexture*tex); +#else +inlinevoidresummarize_htile(BaseTexture*){} +#endif + +#if_TARGET_XBOX +voidset_esram_layout(constwchar_t*); +voidunset_esram_layout(); +voidreset_esram_layout(); +voidprefetch_movable_textures(); +voidwriteback_movable_textures(); +#else +inlinevoidset_esram_layout(constwchar_t*){} +inlinevoidunset_esram_layout(){} +inlinevoidreset_esram_layout(){} +inlinevoidprefetch_movable_textures(){} +inlinevoidwriteback_movable_textures(){} +#endif + +#if_TARGET_C1||_TARGET_XBOX +#defineD3D_HAS_QUADS1 +#else +#defineD3D_HAS_QUADS0 +#endif +};//namespaced3d + + +externvoid +#if_MSC_VER>=1300 +__declspec(noinline) +#endif +d3derr_in_device_reset(constchar*msg); +externbooldagor_d3d_force_driver_reset; + +#defined3derr(c,m)\ +do\ +{\ +boolres=(c);\ +G_ANALYSIS_ASSUME(res);\ +if(!res)\ +{\ +boolcanReset;\ +if(dagor_d3d_force_driver_reset||d3d::device_lost(&canReset))\ +d3derr_in_device_reset(m);\ +else\ +DAG_FATAL("%s:\n%s",m,d3d::get_last_error());\ +}\ +}while(0) + +#defined3d_err(c)d3derr((c),"Driver3derror") + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_drv3d_multi.h> +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__driver_code_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__driver_code_8h.xml new file mode 100644 index 000000000..72ea5799d --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__driver_code_8h.xml @@ -0,0 +1,1008 @@ + + + + dag_driverCode.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_consts.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_info.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d::drivercode::matcher::EnableIf + d3d::drivercode::matcher::EnableIf< true, T > + d3d::drivercode::matcher::SameAs + d3d::drivercode::matcher::SameAs< T, T > + d3d::drivercode::matcher::OpAnd + d3d::drivercode::matcher::OpOr + d3d::drivercode::matcher::Inverted + d3d::drivercode::matcher::BinaryOp + d3d::drivercode::matcher::ID + d3d::drivercode::matcher::Const + d3d::drivercode::matcher::ConstID + d3d::drivercode::matcher::Any + d3d::drivercode::matcher::Unsupported + d3d::drivercode::matcher::Map + d3d::drivercode::matcher::FirstMatch + d3d::drivercode::matcher::AllMatch + d3d::drivercode::matcher::Undefined + DriverCode + d3d + d3d::drivercode + d3d::drivercode::matcher + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +classDriverCode; + +namespaced3d::drivercode::matcher +{ +template<boolB,typenameT=void> +structEnableIf +{}; +template<typenameT> +structEnableIf<true,T> +{ +usingType=T; +}; +template<typenameA,typenameB> +structSameAs +{ +staticconstexprboolvalue=false; +}; +template<typenameT> +structSameAs<T,T> +{ +staticconstexprboolvalue=true; +}; +template<typenameT0,typenameT1,typenameOperator> +structBinaryOp; +structOpAnd +{ +staticconstexprboolinvoke(boola,boolb){returna&&b;} +}; +structOpOr +{ +staticconstexprboolinvoke(boola,boolb){returna||b;} +}; +template<typenameT> +structInverted +{ +Tbase; +usingThisType=Inverted<T>; +constexprboolis(intvalue){return!base.is(value);} +constexprToperator!()const{returnbase;} +}; +template<typenameT0,typenameT1,typenameOperator> +structBinaryOp +{ +T0first; +T1second; +usingThisType=BinaryOp<T0, T1, Operator>; +constexprboolis(intvalue){returnOperator::invoke(first.is(value),second.is(value));} +constexprInverted<ThisType>operator!()const{return{};} +}; +inlineconstexprintmake_foucc(intvalue) +{ +#if_TARGET_CPU_BE +returnvalue; +#else +return((value>>24)&0xFFu)|((value&0xFF0000u)>>8)|((value&0x00FF00u)<<8)|((value&0xFFu)<<24); +#endif +} +template<intIdent> +structID +{ +usingThisType=ID<Ident>; +staticconstexprintvalue=make_foucc(Ident); +staticconstexprboolis(intcmp){returnvalue==cmp;} +constexprInverted<ThisType>operator!()const{return{*this};} +}; +template<boolConstant> +structConst +{ +staticconstexprboolis(int){returnConstant;} +constexprConst<!Constant>operator!()const{return{};} +}; +template<intIdent,boolConstant> +structConstID:Const<Constant> +{ +usingThisType=ConstID<Ident, Constant>; +staticconstexprintvalue=make_foucc(Ident); +constexprConst<!Constant>operator!()const{return{};} +}; +structAny:Const<true> +{ +constexprInverted<Any>operator!()const=delete; +}; +structUnsupported +{ +Unsupported()=delete; +}; +template<typenameT,typenameT1> +constexprautooperator&&(constInverted<T>&l,constT1&r) +{ +returnBinaryOp<Inverted<T>,T1,OpAnd>{l,r}; +} +template<typenameT,typenameT1> +constexprautooperator||(constInverted<T>&l,constT1&r) +{ +returnBinaryOp<Inverted<T>,T1,OpOr>{l,r}; +} +template<typenameT0,typenameT1,typenameOperator,typenameTO> +constexprautooperator&&(constBinaryOp<T0, T1, Operator>&l,constTO&r) +{ +returnBinaryOp<BinaryOp<T0, T1, Operator>,TO,OpAnd>{l,r}; +} +template<typenameT0,typenameT1,typenameOperator,typenameTO> +constexprautooperator||(constBinaryOp<T0, T1, Operator>&l,constTO&r) +{ +returnBinaryOp<BinaryOp<T0, T1, Operator>,TO,OpOr>{l,r}; +} +template<intIdent,typenameT1> +constexprautooperator&&(constID<Ident>&l,constT1&r) +{ +returnBinaryOp<ID<Ident>,T1,OpAnd>{l,r}; +} +template<intIdent,typenameT1> +constexprautooperator||(constID<Ident>&l,constT1&r) +{ +returnBinaryOp<ID<Ident>,T1,OpOr>{l,r}; +} +template<typenameT1> +constexprconstT1&operator&&(constConst<true>&l,constT1&r) +{ +(void)l; +returnr; +} +template<typenameT1> +constexprconstConst<true>&operator||(constConst<true>&l,constT1&r) +{ +(void)r; +returnl; +} +template<typenameT1> +constexprconstConst<false>&operator&&(constConst<false>&l,constT1&r) +{ +(void)r; +returnl; +} +template<typenameT1> +constexprconstT1&operator||(constConst<false>&l,constT1&r) +{ +(void)l; +returnr; +} +template<typenameT1> +constexprconstT1&operator&&(Any,T1)=delete; +template<typenameT1> +constexprAnyoperator||(Any,T1)=delete; +template<typenameT1> +constexprconstT1&operator&&(T1,Any)=delete; +template<typenameT1> +constexprAnyoperator||(T1,Any)=delete; + +template<typenameT> +classMap +{ +intvalue; +boolwasMatched=false; +alignas(alignof(T))unsignedcharmemory[sizeof(T)];//-V730 +T&object(){return*(T*)&memory[0];} +voidcMove(boolshould_construct,T&&v) +{ +if(!should_construct) +return; +if(wasMatched) +return; +::new(&object())T{(T&&)v}; +wasMatched=true; +} +template<typenameC> +voidcContruct(boolshould_construct,C&&generator) +{ +if(!should_construct) +return; +if(wasMatched) +return; +::new(&object())T{generator()}; +wasMatched=true; +} +template<typename...Vs> +voidcEmplace(boolshould_construct,Vs&&...vs) +{ +if(!should_construct) +return; +if(wasMatched) +return; +::new(&object())T{(Vs&&)vs...}; +wasMatched=true; +} +template<typenameD> +constexprboolis(Dd)const +{ +returnd.is(value); +} + +protected: +friendclass::DriverCode; +Map(intv):value{v}//-V730 +{} +template<typenameD> +Map(intv,Dd,T&&val):value{v}//-V730 +{ +cMove(is(d),(T&&)val); +} +template<typenameD> +Map(intv,Dd,constT&val):value{v}//-V730 +{ +cEmplace(is(d),val); +} +template<typenameD,typenameC> +Map(intv,Dd,C&&callable):value{v}//-V730 +{ +cContruct(is(d),(C&&)callable); +} +template<typenameD,typename...Vs> +Map(intv,Dd,Vs&&...vs):value{v}//-V730 +{ +cEmplace(is(d),(Vs&&)vs...); +} + +public: +Map()=delete; +Map(constMap&)=delete; +Map(Map&&other):value{other.value},wasMatched{other.wasMatched}//-V730 +{ +if(wasMatched) +{ +::new(&object())T{(T&&)other.object()}; +} +} +Map&operator=(constMap&)=delete; +Map&operator=(Map&&)=delete; +~Map() +{ +if(wasMatched) +{ +object().~T(); +} +} +template<typenameD> +Map&operator()(Dd,T&&v) +{ +cMove(is(d),(T&&)v); +return*this; +} +template<typenameD,typenameC> +typenameEnableIf<!SameAs<T, C>::value,Map&>::Typeoperator()(Dd,C&&callable) +{ +cContruct(is(d),(C&&)callable); +return*this; +} +template<typenameD,typename...Vs> +Map&operator()(Dd,Vs&&...vs) +{ +cEmplace(is(d),(Vs&&)vs...); +return*this; +} +T&&operator()(Any,T&&v) +{ +if(wasMatched) +{ +return(T&&)object(); +} +return(T&&)v; +} +T&&operator()(Any,constT&v) +{ +cEmplace(true,v); +return(T&&)v; +} +template<typenameC> +typenameEnableIf<!SameAs<T, C>::value,T&&>::Typeoperator()(Any,C&&callable) +{ +cContruct(true,(C&&)callable); +return(T&&)object(); +} +template<typename...Vs> +T&&operator()(Any,Vs&&...vs) +{ +cEmplace(true,(Vs&&)vs...); +return(T&&)object(); +} +template<typenameD> +Map&map(Dd,T&&v) +{ +cMove(is(d),(T&&)v); +return*this; +} +template<typenameD,typenameC> +typenameEnableIf<!SameAs<T, C>::value,Map&>::Typemap(Dd,C&&callable) +{ +cContruct(is(d),(C&&)callable); +return*this; +} +template<typenameD,typename...Vs> +Map&map(Dd,Vs&&...vs) +{ +cEmplace(is(d),(Vs&&)vs...); +return*this; +} +T&&map(Any,T&&v) +{ +if(wasMatched) +{ +return(T&&)object(); +} +return(T&&)v; +} +T&&map(Any,constT&v) +{ +cEmplace(true,v); +return(T&&)v; +} +template<typenameC> +typenameEnableIf<!SameAs<T, C>::value,T&&>::Typemap(Any,C&&callable) +{ +cContruct(true,(C&&)callable); +return(T&&)object(); +} +template<typename...Vs> +T&&map(matcher::Any,Vs&&...vs) +{ +cEmplace(true,(Vs&&)vs...); +return(T&&)object(); +} +template<typenameR> +boolget(R&&receiver) +{ +if(wasMatched) +{ +receiver((T&&)object()); +returntrue; +} +returnfalse; +} +template<typenameA> +boolget(A&target) +{ +if(wasMatched) +{ +target=(T&&)object(); +returntrue; +} +returnfalse; +} +template<typenameR> +booloperator>>(R&&receiver) +{ +if(wasMatched) +{ +receiver((T&&)object()); +returntrue; +} +returntrue; +} +template<typenameA> +booloperator>>(A&target) +{ +if(wasMatched) +{ +target=(T&&)object(); +returntrue; +} +returnfalse; +} +template<typenameR> +booloperator()(R&&receiver) +{ +returnget<R>((R&&)receiver); +} +template<typenameA> +booloperator()(A&target) +{ +returnget(target); +} +}; +classFirstMatch +{ +intvalue; +boolwasMatched=false; +template<typenameT> +voidonMatch(booldid_match,T&&callable) +{ +if(!did_match) +return; +if(wasMatched) +return; +callable(); +wasMatched=true; +} +template<typenameD> +constexprboolis(Dd)const +{ +returnd.is(value); +} + +protected: +friendclass::DriverCode; +FirstMatch(intv):value{v}{} +template<typenameD,typenameT> +FirstMatch(intv,Dd,T&&callable):value{v} +{ +onMatch(is(d),(T&&)callable); +} + +public: +FirstMatch()=delete; +FirstMatch(constFirstMatch&)=delete; +FirstMatch(FirstMatch&&other)=default; +FirstMatch&operator=(constFirstMatch&)=delete; +FirstMatch&operator=(FirstMatch&&)=delete; +template<typenameD,typenameT> +FirstMatch&operator()(Dd,T&&callable) +{ +onMatch(is(d),(T&&)callable); +return*this; +} +template<typenameD,typenameT> +FirstMatch&match(Dd,T&&callable) +{ +onMatch(is(d),(T&&)callable); +return*this; +} +explicitoperatorbool()const{returnwasMatched;} +booloperator!()const{return!wasMatched;} +}; +classAllMatch +{ +intvalue; +boolwasMatched=false; +template<typenameT> +voidonMatch(booldid_match,T&&callable) +{ +if(!did_match) +return; +callable(); +wasMatched=true; +} +template<typenameD> +constexprboolis(Dd)const +{ +returnd.is(value); +} + +protected: +friendclass::DriverCode; +AllMatch(intv):value{v}{} +template<typenameD,typenameT> +AllMatch(intv,Dd,T&&callable):value{v} +{ +onMatch(is(d),(T&&)callable); +} + +public: +AllMatch()=delete; +AllMatch(constAllMatch&)=delete; +AllMatch(AllMatch&&other)=default; +AllMatch&operator=(constAllMatch&)=delete; +AllMatch&operator=(AllMatch&&)=delete; +template<typenameD,typenameT> +AllMatch&operator()(Dd,T&&callable) +{ +onMatch(is(d),(T&&)callable); +return*this; +} +template<typenameD,typenameT> +AllMatch&match(Dd,T&&callable) +{ +onMatch(is(d),(T&&)callable); +return*this; +} +explicitoperatorbool()const{returnwasMatched;} +booloperator!()const{return!wasMatched;} +}; +}//namespaced3d::drivercode::matcher + +#if_TARGET_XBOXONE +namespaced3d +{ +inlineconstexprdrivercode::matcher::Const<true>xboxOne; +inlineconstexprdrivercode::matcher::Const<false>scarlett; +inlineconstexprdrivercode::matcher::Const<false>iOS; +inlineconstexprdrivercode::matcher::Const<false>tvOS; +inlineconstexprdrivercode::matcher::Const<false>nintendoSwitch; +inlineconstexprdrivercode::matcher::Const<false>android; +inlineconstexprdrivercode::matcher::Const<false>macOSX; +inlineconstexprdrivercode::matcher::Const<false>linux; +inlineconstexprdrivercode::matcher::Const<false>windows; +inlineconstexprdrivercode::matcher::Const<false>dx11; +inlineconstexprdrivercode::matcher::ConstID<'DX12', true>dx12; +inlineconstexprdrivercode::matcher::Const<false>vulkan; +inlineconstexprdrivercode::matcher::Const<false>ps4; +inlineconstexprdrivercode::matcher::Const<false>ps5; +inlineconstexprdrivercode::matcher::Const<false>metal; +inlineconstexprdrivercode::matcher::Const<false>null; +inlineconstexprdrivercode::matcher::Const<false>stub; +}//namespaced3d +#elif_TARGET_SCARLETT +namespaced3d +{ +inlineconstexprdrivercode::matcher::Const<false>xboxOne; +inlineconstexprdrivercode::matcher::Const<true>scarlett; +inlineconstexprdrivercode::matcher::Const<false>iOS; +inlineconstexprdrivercode::matcher::Const<false>tvOS; +inlineconstexprdrivercode::matcher::Const<false>nintendoSwitch; +inlineconstexprdrivercode::matcher::Const<false>android; +inlineconstexprdrivercode::matcher::Const<false>macOSX; +inlineconstexprdrivercode::matcher::Const<false>linux; +inlineconstexprdrivercode::matcher::Const<false>windows; +inlineconstexprdrivercode::matcher::Const<false>dx11; +inlineconstexprdrivercode::matcher::ConstID<'DX12',true>dx12; +inlineconstexprdrivercode::matcher::Const<false>vulkan; +inlineconstexprdrivercode::matcher::Const<false>ps4; +inlineconstexprdrivercode::matcher::Const<false>ps5; +inlineconstexprdrivercode::matcher::Const<false>metal; +inlineconstexprdrivercode::matcher::Const<false>null; +inlineconstexprdrivercode::matcher::Const<false>stub; +}//namespaced3d +#elif_TARGET_C1 + + + + + + + + + + + + + + + + + + + + +#elif_TARGET_C2 + + + + + + + + + + + + + + + + + + + + +#elif_TARGET_IOS +namespaced3d +{ +inlineconstexprdrivercode::matcher::Const<false>xboxOne; +inlineconstexprdrivercode::matcher::Const<false>scarlett; +inlineconstexprdrivercode::matcher::Const<true>iOS; +inlineconstexprdrivercode::matcher::Const<false>tvOS; +inlineconstexprdrivercode::matcher::Const<false>nintendoSwitch; +inlineconstexprdrivercode::matcher::Const<false>android; +inlineconstexprdrivercode::matcher::Const<false>macOSX; +inlineconstexprdrivercode::matcher::Const<false>linux; +inlineconstexprdrivercode::matcher::Const<false>windows; +inlineconstexprdrivercode::matcher::Const<false>dx11; +inlineconstexprdrivercode::matcher::Const<false>dx12; +inlineconstexprdrivercode::matcher::Const<false>vulkan; +inlineconstexprdrivercode::matcher::Const<false>ps4; +inlineconstexprdrivercode::matcher::Const<false>ps5; +inlineconstexprdrivercode::matcher::ConstID<'MTL',true>metal; +inlineconstexprdrivercode::matcher::Const<false>null; +inlineconstexprdrivercode::matcher::Const<false>stub; +}//namespaced3d +#elif_TARGET_TVOS +namespaced3d +{ +inlineconstexprdrivercode::matcher::Const<false>xboxOne; +inlineconstexprdrivercode::matcher::Const<false>scarlett; +inlineconstexprdrivercode::matcher::Const<false>iOS; +inlineconstexprdrivercode::matcher::Const<true>tvOS; +inlineconstexprdrivercode::matcher::Const<false>nintendoSwitch; +inlineconstexprdrivercode::matcher::Const<false>android; +inlineconstexprdrivercode::matcher::Const<false>macOSX; +inlineconstexprdrivercode::matcher::Const<false>linux; +inlineconstexprdrivercode::matcher::Const<false>windows; +inlineconstexprdrivercode::matcher::Const<false>dx11; +inlineconstexprdrivercode::matcher::Const<false>dx12; +inlineconstexprdrivercode::matcher::Const<false>vulkan; +inlineconstexprdrivercode::matcher::Const<false>ps4; +inlineconstexprdrivercode::matcher::Const<false>ps5; +inlineconstexprdrivercode::matcher::ConstID<'MTL',true>metal; +inlineconstexprdrivercode::matcher::Const<false>null; +inlineconstexprdrivercode::matcher::Const<false>stub; +}//namespaced3d +#elif_TARGET_C3 + + + + + + + + + + + + + + + + + + + + +#elif_TARGET_ANDROID +namespaced3d +{ +inlineconstexprdrivercode::matcher::Const<false>xboxOne; +inlineconstexprdrivercode::matcher::Const<false>scarlett; +inlineconstexprdrivercode::matcher::Const<false>iOS; +inlineconstexprdrivercode::matcher::Const<false>tvOS; +inlineconstexprdrivercode::matcher::Const<false>nintendoSwitch; +inlineconstexprdrivercode::matcher::Const<true>android; +inlineconstexprdrivercode::matcher::Const<false>macOSX; +inlineconstexprdrivercode::matcher::Const<false>linux; +inlineconstexprdrivercode::matcher::Const<false>windows; +inlineconstexprdrivercode::matcher::Const<false>dx11; +inlineconstexprdrivercode::matcher::Const<false>dx12; +inlineconstexprdrivercode::matcher::ConstID<'VULK',true>vulkan; +inlineconstexprdrivercode::matcher::Const<false>ps4; +inlineconstexprdrivercode::matcher::Const<false>ps5; +inlineconstexprdrivercode::matcher::Const<false>metal; +inlineconstexprdrivercode::matcher::Const<false>null; +inlineconstexprdrivercode::matcher::Const<false>stub; +}//namespaced3d +#elif_TARGET_PC_MACOSX +namespaced3d +{ +inlineconstexprdrivercode::matcher::Const<false>xboxOne; +inlineconstexprdrivercode::matcher::Const<false>scarlett; +inlineconstexprdrivercode::matcher::Const<false>iOS; +inlineconstexprdrivercode::matcher::Const<false>tvOS; +inlineconstexprdrivercode::matcher::Const<false>nintendoSwitch; +inlineconstexprdrivercode::matcher::Const<false>android; +inlineconstexprdrivercode::matcher::Const<true>macOSX; +inlineconstexprdrivercode::matcher::Const<false>linux; +inlineconstexprdrivercode::matcher::Const<false>windows; +inlineconstexprdrivercode::matcher::ConstID<'DX11',false>dx11; +inlineconstexprdrivercode::matcher::ConstID<'DX12',false>dx12; +inlineconstexprdrivercode::matcher::ID<'VULK'>vulkan; +inlineconstexprdrivercode::matcher::Const<false>ps4; +inlineconstexprdrivercode::matcher::Const<false>ps5; +inlineconstexprdrivercode::matcher::ID<'MTL'>metal; +inlineconstexprdrivercode::matcher::ID<0>null; +inlineconstexprdrivercode::matcher::ID<'STUB'>stub; +}//namespaced3d +#elif_TARGET_PC_LINUX +namespaced3d +{ +inlineconstexprdrivercode::matcher::Const<false>xboxOne; +inlineconstexprdrivercode::matcher::Const<false>scarlett; +inlineconstexprdrivercode::matcher::Const<false>iOS; +inlineconstexprdrivercode::matcher::Const<false>tvOS; +inlineconstexprdrivercode::matcher::Const<false>nintendoSwitch; +inlineconstexprdrivercode::matcher::Const<false>android; +inlineconstexprdrivercode::matcher::Const<false>macOSX; +inlineconstexprdrivercode::matcher::Const<true>linux; +inlineconstexprdrivercode::matcher::Const<false>windows; +inlineconstexprdrivercode::matcher::ConstID<'DX11',false>dx11; +inlineconstexprdrivercode::matcher::ConstID<'DX12',false>dx12; +inlineconstexprdrivercode::matcher::ID<'VULK'>vulkan; +inlineconstexprdrivercode::matcher::Const<false>ps4; +inlineconstexprdrivercode::matcher::Const<false>ps5; +inlineconstexprdrivercode::matcher::ConstID<'MTL',false>metal; +inlineconstexprdrivercode::matcher::ID<0>null; +inlineconstexprdrivercode::matcher::ID<'STUB'>stub; +}//namespaced3d +#elif_TARGET_PC_WIN +namespaced3d +{ +inlineconstexprdrivercode::matcher::Const<false>xboxOne; +inlineconstexprdrivercode::matcher::Const<false>scarlett; +inlineconstexprdrivercode::matcher::Const<false>iOS; +inlineconstexprdrivercode::matcher::Const<false>tvOS; +inlineconstexprdrivercode::matcher::Const<false>nintendoSwitch; +inlineconstexprdrivercode::matcher::Const<false>android; +inlineconstexprdrivercode::matcher::Const<false>macOSX; +inlineconstexprdrivercode::matcher::Const<false>linux; +inlineconstexprdrivercode::matcher::Const<true>windows; +inlineconstexprdrivercode::matcher::ID<'DX11'>dx11; +inlineconstexprdrivercode::matcher::ID<'DX12'>dx12; +inlineconstexprdrivercode::matcher::ID<'VULK'>vulkan; +inlineconstexprdrivercode::matcher::Const<false>ps4; +inlineconstexprdrivercode::matcher::Const<false>ps5; +inlineconstexprdrivercode::matcher::ConstID<'MTL',false>metal; +inlineconstexprdrivercode::matcher::ID<0>null; +inlineconstexprdrivercode::matcher::ID<'STUB'>stub; +}//namespaced3d +#else +namespaced3d +{ +inlineconstexprdrivercode::matcher::UnsupportedxboxOne; +inlineconstexprdrivercode::matcher::Unsupportedscarlett; +inlineconstexprdrivercode::matcher::UnsupportediOS; +inlineconstexprdrivercode::matcher::UnsupportedtvOS; +inlineconstexprdrivercode::matcher::UnsupportednintendoSwitch; +inlineconstexprdrivercode::matcher::Unsupportedandroid; +inlineconstexprdrivercode::matcher::UnsupportedmacOSX; +inlineconstexprdrivercode::matcher::Unsupportedlinux; +inlineconstexprdrivercode::matcher::Unsupportedwindows; +inlineconstexprdrivercode::matcher::Unsupporteddx11; +inlineconstexprdrivercode::matcher::Unsupporteddx12; +inlineconstexprdrivercode::matcher::Unsupportedvulkan; +inlineconstexprdrivercode::matcher::Unsupportedps4; +inlineconstexprdrivercode::matcher::Unsupportedps5; +inlineconstexprdrivercode::matcher::Unsupportedmetal; +inlineconstexprdrivercode::matcher::Unsupportednull; +inlineconstexprdrivercode::matcher::Unsupportedstub; +}//namespaced3d +#endif +namespaced3d::drivercode::matcher +{ +usingNotAnyDriver= +decltype(!(d3d::dx11||d3d::dx12||d3d::vulkan||d3d::ps4||d3d::ps5||d3d::metal||d3d::null||d3d::stub)); +structUndefined:NotAnyDriver +{ +staticconstexprintvalue=~0L; +}; +}//namespaced3d::drivercode::matcher +namespaced3d +{ +inlineconstexprautoanyXbox=xboxOne||scarlett; +inlineconstexprautoanyPS=ps4||ps5; +inlineconstexprautoanyPC=macOSX||linux||windows; +inlineconstexprd3d::drivercode::matcher::Undefinedundefined; +inlineconstexprdrivercode::matcher::Anyany; +inlineconstexprautoapple=iOS||tvOS||macOSX; +#if_TARGET_64BIT +inlineconstexprdrivercode::matcher::Const<false>bit32; +inlineconstexprdrivercode::matcher::Const<true>bit64; +#else +inlineconstexprdrivercode::matcher::Const<true>bit32; +inlineconstexprdrivercode::matcher::Const<false>bit64; +#endif +}//namespaced3d + +classDriverCode +{ +protected: +intvalue; + +constexprDriverCode(intv):value{v}{} + +public: +DriverCode()=default; +DriverCode(constDriverCode&)=default; +DriverCode&operator=(constDriverCode&)=default; +unsignedasFourCC()const{returnvalue;} + +template<typenameT> +constexprboolis(Tt)const +{ +returnt.is(value); +} +template<typenameT> +constexprbooloperator==(Tt)const +{ +returnt.is(value); +} +template<typenameT> +constexprbooloperator!=(Tt)const +{ +return!t.is(value); +} +template<typenameD> +staticconstexprDriverCodemake(Dd) +{ +returnd.value; +} +template<typenameT> +d3d::drivercode::matcher::Map<T>map()const +{ +return{value}; +} +template<typenameT,typenameD> +d3d::drivercode::matcher::Map<T>map(Dd,T&&v)const +{ +return{value,d,(T&&)v}; +} +template<typenameT,typenameD> +d3d::drivercode::matcher::Map<T>map(Dd,constT&v)const +{ +return{value,d,v}; +} +template<typenameD,size_tN> +d3d::drivercode::matcher::Map<const char *>map(Dd,constchar(&v)[N])const +{ +return{value,d,v}; +} +template<typenameT,typenameD,typenameC> +typenamed3d::drivercode::matcher::EnableIf<!d3d::drivercode::matcher::SameAs<T, C>::value,d3d::drivercode::matcher::Map<T>>::Type +map(Dd,C&&callable)const +{ +return{value,d,(C&&)callable}; +} +template<typenameT,typenameD,typenameA1,typenameA2,typename...As> +d3d::drivercode::matcher::Map<T>map(Dd,A1&&a1,A2&&a2,As&&...as) +{ +return{value,d,(A1&&)a1,(A2&&)a2,(As&&)as...}; +} +d3d::drivercode::matcher::FirstMatchmatch()const{return{value};} +template<typenameD,typenameT> +d3d::drivercode::matcher::FirstMatchmatch(Dd,T&&callable)const +{ +return{value,d,(T&&)callable}; +} +d3d::drivercode::matcher::FirstMatchmatchFirst()const{return{value};} +template<typenameD,typenameT> +d3d::drivercode::matcher::FirstMatchmatchFirst(Dd,T&&callable)const +{ +return{value,d,(T&&)callable}; +} +d3d::drivercode::matcher::AllMatchmatchAll()const{return{value};} +template<typenameD,typenameT> +d3d::drivercode::matcher::AllMatchmatchAll(Dd,T&&callable)const +{ +return{value,d,(T&&)callable}; +} +}; + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__driver_net_manager_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__driver_net_manager_8h.xml new file mode 100644 index 000000000..e19317c5d --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__driver_net_manager_8h.xml @@ -0,0 +1,52 @@ + + + + dag_driverNetManager.h + util/dag_stdint.h + + + + + + + + + + + + DriverNetManager + Json + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_stdint.h> + +classDataBlock; + +namespaceJson +{ +classValue; +} + +classDriverNetManager +{ +public: +virtual~DriverNetManager()=default; +virtualvoidsendPsoCacheBlkSync(constDataBlock&cache_blk)=0; + +virtualvoidsendHttpEventLog(constchar*type,constvoid*data,uint32_tsize,Json::Value*meta)=0; + +virtualvoidaddFileToCrashReport(constchar*path)=0; +}; + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__drv3d__multi_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__drv3d__multi_8h.xml new file mode 100644 index 000000000..2d5dbfb17 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__drv3d__multi_8h.xml @@ -0,0 +1,308 @@ + + + + dag_drv3d_multi.h + drv/3d/dag_driver.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_driver.h> + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> + +classString; +classD3dEventQuery; +classDriver3dInitCallback; + +namespaced3d +{ +typedefD3dEventQueryEventQuery; + +boolinit_driver(); +boolis_inited(); + +boolinit_video(void*hinst,main_wnd_f*f,constchar*wcname,intncmdshow,void*&mainwnd,void*renderwnd,void*hicon, +constchar*title,Driver3dInitCallback*cb); + +voidrelease_driver(); +boolfill_interface_table(D3dInterfaceTable&d3dit); +voidprepare_for_destroy(); +voidwindow_destroyed(void*hwnd); + +structBeforeWindowDestroyedCookie; +BeforeWindowDestroyedCookie*register_before_window_destroyed_callback(eastl::function<void()>callback); +voidunregister_before_window_destroyed_callback(BeforeWindowDestroyedCookie*cookie); + +staticinlinebooldevice_lost(bool*can_reset_now){returnd3di.device_lost(can_reset_now);} +staticinlineboolreset_device(){returnd3di.reset_device();} + +staticinlineboolupdate_screen(boolapp_active=true){returnd3di.update_screen(app_active);} +staticinlinevoidwait_for_async_present(boolforce=false){returnd3di.wait_for_async_present(force);} +staticinlinevoidgpu_latency_wait(){returnd3di.gpu_latency_wait();} + +staticinlineGPUFENCEHANDLEinsert_fence(GpuPipelinegpu_pipeline){returnd3di.insert_fence(gpu_pipeline);} +staticinlinevoidinsert_wait_on_fence(GPUFENCEHANDLE&fence,GpuPipelinegpu_pipeline) +{ +d3di.insert_wait_on_fence(fence,gpu_pipeline); +} + +staticinlineboolset_srgb_backbuffer_write(boolon){returnd3di.set_srgb_backbuffer_write(on);} + +staticinlineboolsetgamma(floatpower){returnd3di.setgamma(power);} + +staticinlinefloatget_screen_aspect_ratio(){returnd3di.get_screen_aspect_ratio();} +staticinlinevoidchange_screen_aspect_ratio(floatar){returnd3di.change_screen_aspect_ratio(ar);} + +staticinlinevoid*fast_capture_screen(int&w,int&h,int&stride,int&fmt){returnd3di.fast_capture_screen(w,h,stride,fmt);} +staticinlinevoidend_fast_capture_screen(){returnd3di.end_fast_capture_screen();} + +staticinlineTexPixel32*capture_screen(int&w,int&h,int&stride_bytes){returnd3di.capture_screen(w,h,stride_bytes);} +staticinlinevoidrelease_capture_buffer(){returnd3di.release_capture_buffer();} + +staticinlineintcreate_predicate(){returnd3di.create_predicate();} +staticinlinevoidfree_predicate(intid){d3di.free_predicate(id);} + +staticinlineboolbegin_survey(intindex){returnd3di.begin_survey(index);} +staticinlinevoidend_survey(intindex){returnd3di.end_survey(index);} + +staticinlinevoidbegin_conditional_render(intindex){returnd3di.begin_conditional_render(index);} +staticinlinevoidend_conditional_render(intid){returnd3di.end_conditional_render(id);} + +staticinlineVDECLget_program_vdecl(PROGRAMp){returnd3di.get_program_vdecl(p);} +staticinlineboolset_vertex_shader(VPROGps){returnd3di.set_vertex_shader(ps);} +staticinlineboolset_pixel_shader(FSHADERps){returnd3di.set_pixel_shader(ps);} + +staticinlineVPROGcreate_vertex_shader_dagor(constVPRTYPE*p,intn){returnd3di.create_vertex_shader_dagor(p,n);} +staticinlineFSHADERcreate_pixel_shader_dagor(constFSHTYPE*p,intn){returnd3di.create_pixel_shader_dagor(p,n);} + +staticinlineboolget_vrr_supported(){returnd3di.get_vrr_supported();} +staticinlineboolget_vsync_enabled(){returnd3di.get_vsync_enabled();} +staticinlineboolenable_vsync(boolenable){returnd3di.enable_vsync(enable);} +staticinlinevoidget_video_modes_list(Tab<String>&list){d3di.get_video_modes_list(list);} + +staticinlinevoidbeginEvent(constchar*s){returnd3di.beginEvent(s);} +staticinlinevoidendEvent(){returnd3di.endEvent();} + +#include"rayTrace/rayTraceMulti.inl.h" + +staticinlinevoidresource_barrier(ResourceBarrierDescdesc,GpuPipelinegpu_pipeline=GpuPipeline::GRAPHICS) +{ +d3di.resource_barrier(desc,gpu_pipeline); +} + +#if_TARGET_PC_WIN +namespacepcwin32 +{ +staticinlinevoidset_present_wnd(void*hwnd){returnd3di.set_present_wnd(hwnd);} + +staticinlineboolset_capture_full_frame_buffer(boolison){returnd3di.set_capture_full_frame_buffer(ison);} +staticinlineunsignedget_texture_format(BaseTexture*tex){returnd3di.get_texture_format(tex);} +staticinlineconstchar*get_texture_format_str(BaseTexture*tex){returnd3di.get_texture_format_str(tex);} +staticinlinevoid*get_native_surface(BaseTexture*tex){returnd3di.get_native_surface(tex);} +}//namespacepcwin32 +#endif +};//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__hang_handler_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__hang_handler_8h.xml new file mode 100644 index 000000000..bf5156483 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__hang_handler_8h.xml @@ -0,0 +1,73 @@ + + + + dag_hangHandler.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_driver.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3dhang + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +namespaced3dhang +{ + +usingGPUHanger=void(*)(); + +voidregister_gpu_hanger(GPUHangernewHanger); +voidhang_gpu_on(constchar*event); +voidhang_if_requested(constchar*event); + +}//namespaced3dhang + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__heap_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__heap_8h.xml new file mode 100644 index 000000000..90be51e95 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__heap_8h.xml @@ -0,0 +1,515 @@ + + + + dag_heap.h + util/dag_inttypes.h + drv/3d/dag_consts.h + drv/3d/dag_resource.h + drv/3d/dag_d3dResource.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BasicResourceDescription + BufferResourceDescription + BasicTextureResourceDescription + TextureResourceDescription + VolTextureResourceDescription + ArrayTextureResourceDescription + CubeTextureResourceDescription + ArrayCubeTextureResourceDescription + ResourceDescription + eastl::hash< ResourceDescription > + ResourceHeapGroupProperties + ResourceAllocationProperties + eastl + d3d + + + FIELD_MATCHES + field + (this->field == r.field) + + + + + + + + + + + + unsigned + ResourceActivationAction + + REWRITE_AS_COPY_DESTINATION + +Rewrite the resource as a copy destination. + + + + + + REWRITE_AS_UAV + +Rewrite the resource as an unordered access view. + + + + + + REWRITE_AS_RTV_DSV + +Rewrite the resource as a render target or depth-stencil view. + + + + + + CLEAR_F_AS_UAV + +Clear the resource as a floating-point unordered access view. + + + + + + CLEAR_I_AS_UAV + +Clear the resource as an integer unordered access view. + + + + + + CLEAR_AS_RTV_DSV + +Clear the resource as a render target or depth-stencil view. + + + + + + DISCARD_AS_UAV + +Discard the resource as an unordered access view. + + + + + + DISCARD_AS_RTV_DSV + +Discard the resource as a render target or depth-stencil view. + + + + + +Enumeration representing different resource activation actions. + + + + + + + + + + ResourceHeapCreateFlag + + RHCF_NONE + = 0 + + + +By default the drivers are allowed to use already reserved memory of internal heaps, to source the needed memory. Drivers are also allowed to allocate larger memory heaps and use the excess memory for their internal resource and memory management. + + + + RHCF_REQUIRES_DEDICATED_HEAP + = 1u << 0 + + + +Resource heaps created with this flag, will use their own dedicate memory heap to supply the memory for resources. When this flag is not used to create a resource heap, the driver is allowed to source the need memory from existing driver managed heaps, or create a larger underlying memory heap and use the excess memory for its internal resource and memory management. This flag should be used only when really necessary, as it restricts the drivers option to use already reserved memory for this heap and increase the memory pressure on the system. +That on certain system configurations, for example GDK with predefined memory heap allocations, this flag may be ignored by the driver, as it would otherwise not be able to satisfy heap creation request. + + + + + +A set of flags that steer the behavior of the driver during creation of resource heaps. + + + + + + + + + + + uint32_t + using ResourceHeapCreateFlags = uint32_t + + ResourceHeapCreateFlags + +Definition of ResourceHeapCreateFlags type. See ResourceHeapCreateFlag for valid values. + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_inttypes.h> +#include<drv/3d/dag_consts.h> +#include<drv/3d/dag_resource.h> +#include<drv/3d/dag_d3dResource.h> + +classSbuffer; +classBaseTexture; + +usingResourceHeapCreateFlags=uint32_t; + +enumclassResourceActivationAction:unsigned +{ +REWRITE_AS_COPY_DESTINATION, +REWRITE_AS_UAV, +REWRITE_AS_RTV_DSV, +CLEAR_F_AS_UAV, +CLEAR_I_AS_UAV, +CLEAR_AS_RTV_DSV, +DISCARD_AS_UAV, +DISCARD_AS_RTV_DSV, +}; + +structBasicResourceDescription +{ +uint32_tcFlags; +ResourceActivationActionactivation; +ResourceClearValueclearValue; +}; + +structBufferResourceDescription:BasicResourceDescription +{ +uint32_telementSizeInBytes; +uint32_telementCount; +uint32_tviewFormat; +}; + +structBasicTextureResourceDescription:BasicResourceDescription +{ +uint32_tmipLevels; +}; + +structTextureResourceDescription:BasicTextureResourceDescription +{ +uint32_twidth; +uint32_theight; +}; + +structVolTextureResourceDescription:TextureResourceDescription +{ +uint32_tdepth; +}; + +structArrayTextureResourceDescription:TextureResourceDescription +{ +uint32_tarrayLayers; +}; + +structCubeTextureResourceDescription:BasicTextureResourceDescription +{ +uint32_textent; +}; + +structArrayCubeTextureResourceDescription:CubeTextureResourceDescription +{ +uint32_tcubes; +}; + +structResourceDescription +{ +uint32_tresType; +union +{ +BasicResourceDescriptionasBasicRes; +BufferResourceDescriptionasBufferRes; +BasicTextureResourceDescriptionasBasicTexRes; +TextureResourceDescriptionasTexRes; +VolTextureResourceDescriptionasVolTexRes; +ArrayTextureResourceDescriptionasArrayTexRes; +CubeTextureResourceDescriptionasCubeTexRes; +ArrayCubeTextureResourceDescriptionasArrayCubeTexRes; +}; + +ResourceDescription()=default; +ResourceDescription(constResourceDescription&)=default; +ResourceDescription&operator=(constResourceDescription&)=default; + +ResourceDescription(constBufferResourceDescription&buf): +resType{RES3D_SBUF},asBufferRes{buf}{} + +ResourceDescription(constTextureResourceDescription&tex):resType{RES3D_TEX},asTexRes{tex}{} + +ResourceDescription(constVolTextureResourceDescription&tex): +resType{RES3D_VOLTEX},asVolTexRes{tex}{} + +ResourceDescription(constArrayTextureResourceDescription&tex): +resType{RES3D_ARRTEX},asArrayTexRes{tex}{} + +ResourceDescription(constCubeTextureResourceDescription&tex): +resType{RES3D_CUBETEX},asCubeTexRes{tex}{} + +ResourceDescription(constArrayCubeTextureResourceDescription&tex): +resType{RES3D_CUBEARRTEX},asArrayCubeTexRes{tex}{} + +booloperator==(constResourceDescription&r)const +{ +#defineFIELD_MATCHES(field)(this->field==r.field) +if(!FIELD_MATCHES(resType)||!FIELD_MATCHES(asBasicRes.cFlags)) +returnfalse; +if(resType==RES3D_SBUF) +returnFIELD_MATCHES(asBufferRes.elementCount)&&FIELD_MATCHES(asBufferRes.elementSizeInBytes)&& +FIELD_MATCHES(asBufferRes.viewFormat); +if(!FIELD_MATCHES(asBasicTexRes.mipLevels)) +returnfalse; +if(resType==RES3D_CUBETEX||resType==RES3D_CUBEARRTEX) +{ +if(!FIELD_MATCHES(asCubeTexRes.extent)) +returnfalse; +if(resType==RES3D_CUBEARRTEX) +returnFIELD_MATCHES(asArrayCubeTexRes.cubes); +} +if(!FIELD_MATCHES(asTexRes.width)||!FIELD_MATCHES(asTexRes.height)) +returnfalse; +if(resType==RES3D_VOLTEX) +returnFIELD_MATCHES(asVolTexRes.depth); +if(resType==RES3D_ARRTEX) +returnFIELD_MATCHES(asArrayTexRes.arrayLayers); +returntrue; +#undefFIELD_MATCHES +} + +usingHashT=size_t; + +HashThash()const +{ +HashThashValue=resType; +switch(resType) +{ +caseRES3D_SBUF:returnhashPack(hashValue,asBufferRes.elementCount,asBufferRes.elementSizeInBytes,asBufferRes.viewFormat); +caseRES3D_TEX: +returnhashPack(hashValue,eastl::to_underlying(asTexRes.activation),asTexRes.cFlags,asTexRes.mipLevels,asTexRes.height, +asTexRes.width,asTexRes.clearValue.asUint[0],asTexRes.clearValue.asUint[1],asTexRes.clearValue.asUint[2], +asTexRes.clearValue.asUint[3]); +caseRES3D_VOLTEX: +returnhashPack(hashValue,eastl::to_underlying(asVolTexRes.activation),asVolTexRes.cFlags,asVolTexRes.mipLevels, +asVolTexRes.height,asVolTexRes.width,asVolTexRes.depth,asVolTexRes.clearValue.asUint[0],asVolTexRes.clearValue.asUint[1], +asVolTexRes.clearValue.asUint[2],asVolTexRes.clearValue.asUint[3]); +caseRES3D_ARRTEX: +returnhashPack(hashValue,eastl::to_underlying(asArrayTexRes.activation),asArrayTexRes.arrayLayers,asArrayTexRes.cFlags, +asArrayTexRes.height,asArrayTexRes.mipLevels,asArrayTexRes.height,asArrayTexRes.width,asArrayTexRes.clearValue.asUint[0], +asArrayTexRes.clearValue.asUint[1],asArrayTexRes.clearValue.asUint[2],asArrayTexRes.clearValue.asUint[3]); +caseRES3D_CUBETEX: +returnhashPack(hashValue,eastl::to_underlying(asCubeTexRes.activation),asCubeTexRes.cFlags,asCubeTexRes.extent, +asCubeTexRes.mipLevels,asCubeTexRes.clearValue.asUint[0],asCubeTexRes.clearValue.asUint[1], +asCubeTexRes.clearValue.asUint[2],asCubeTexRes.clearValue.asUint[3]); +caseRES3D_CUBEARRTEX: +returnhashPack(hashValue,eastl::to_underlying(asArrayCubeTexRes.activation),asArrayCubeTexRes.cFlags, +asArrayCubeTexRes.mipLevels,asArrayCubeTexRes.cubes,asArrayCubeTexRes.extent,asArrayCubeTexRes.clearValue.asUint[0], +asArrayCubeTexRes.clearValue.asUint[1],asArrayCubeTexRes.clearValue.asUint[2],asArrayCubeTexRes.clearValue.asUint[3]); +} +returnhashValue; +} + +private: +inlineHashThashPack()const{return0;} +template<typenameT,typename...Ts> +inlineHashThashPack(constT&first,constTs&...other)const +{ +HashThashVal=hashPack(other...); +hashVal^=first+0x9e3779b9+(hashVal<<6)+(hashVal>>2); +returnhashVal; +} +}; + +namespaceeastl +{ +template<> +classhash<ResourceDescription> +{ +public: +size_toperator()(constResourceDescription&desc)const{returndesc.hash();} +}; +}//namespaceeastl + +structResourceHeapGroup; + +structResourceHeapGroupProperties +{ +union +{ +uint32_tflags; +struct +{ +boolisCPUVisible:1; +boolisGPULocal:1; +boolisOnChip:1; +}; +}; +uint64_tmaxResourceSize; +uint64_tmaxHeapSize; +uint64_toptimalMaxHeapSize; +}; + +structResourceAllocationProperties +{ +size_tsizeInBytes; +size_toffsetAlignment; +ResourceHeapGroup*heapGroup; +}; + +enumResourceHeapCreateFlag +{ +RHCF_NONE=0, +RHCF_REQUIRES_DEDICATED_HEAP=1u<<0, +}; + +structResourceHeap; + +namespaced3d +{ +ResourceAllocationPropertiesget_resource_allocation_properties(constResourceDescription&desc); + +ResourceHeap*create_resource_heap(ResourceHeapGroup*heap_group,size_tsize,ResourceHeapCreateFlagsflags); + +voiddestroy_resource_heap(ResourceHeap*heap); + +Sbuffer*place_buffer_in_resource_heap(ResourceHeap*heap,constResourceDescription&desc,size_toffset, +constResourceAllocationProperties&alloc_info,constchar*name); + +BaseTexture*place_texture_in_resource_heap(ResourceHeap*heap,constResourceDescription&desc,size_toffset, +constResourceAllocationProperties&alloc_info,constchar*name); + +ResourceHeapGroupPropertiesget_resource_heap_group_properties(ResourceHeapGroup*heap_group); + +voidactivate_buffer(Sbuffer*buf,ResourceActivationActionaction,constResourceClearValue&value={}, +GpuPipelinegpu_pipeline=GpuPipeline::GRAPHICS); + +voidactivate_texture(BaseTexture*tex,ResourceActivationActionaction,constResourceClearValue&value={}, +GpuPipelinegpu_pipeline=GpuPipeline::GRAPHICS); + +voiddeactivate_buffer(Sbuffer*buf,GpuPipelinegpu_pipeline=GpuPipeline::GRAPHICS); + +voiddeactivate_texture(BaseTexture*tex,GpuPipelinegpu_pipeline=GpuPipeline::GRAPHICS); + +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineResourceAllocationPropertiesget_resource_allocation_properties(constResourceDescription&desc) +{ +returnd3di.get_resource_allocation_properties(desc); +} +inlineResourceHeap*create_resource_heap(ResourceHeapGroup*heap_group,size_tsize,ResourceHeapCreateFlagsflags) +{ +returnd3di.create_resource_heap(heap_group,size,flags); +} +inlinevoiddestroy_resource_heap(ResourceHeap*heap){d3di.destroy_resource_heap(heap);} +inlineSbuffer*place_buffer_in_resource_heap(ResourceHeap*heap,constResourceDescription&desc,size_toffset, +constResourceAllocationProperties&alloc_info,constchar*name) +{ +returnd3di.place_buffer_in_resource_heap(heap,desc,offset,alloc_info,name); +} +inlineBaseTexture*place_texture_in_resource_heap(ResourceHeap*heap,constResourceDescription&desc,size_toffset, +constResourceAllocationProperties&alloc_info,constchar*name) +{ +returnd3di.place_texture_in_resource_heap(heap,desc,offset,alloc_info,name); +} +inlineResourceHeapGroupPropertiesget_resource_heap_group_properties(ResourceHeapGroup*heap_group) +{ +returnd3di.get_resource_heap_group_properties(heap_group); +} +inlinevoidactivate_buffer(Sbuffer*buf,ResourceActivationActionaction,constResourceClearValue&value,GpuPipelinegpu_pipeline) +{ +d3di.activate_buffer(buf,action,value,gpu_pipeline); +} +inlinevoidactivate_texture(BaseTexture*tex,ResourceActivationActionaction,constResourceClearValue&value, +GpuPipelinegpu_pipeline) +{ +d3di.activate_texture(tex,action,value,gpu_pipeline); +} +inlinevoiddeactivate_buffer(Sbuffer*buf,GpuPipelinegpu_pipeline){d3di.deactivate_buffer(buf,gpu_pipeline);} +inlinevoiddeactivate_texture(BaseTexture*tex,GpuPipelinegpu_pipeline){d3di.deactivate_texture(tex,gpu_pipeline);} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__info_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__info_8h.xml new file mode 100644 index 000000000..a1ea0bb11 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__info_8h.xml @@ -0,0 +1,245 @@ + + + + dag_info.h + EASTL/initializer_list.h + util/dag_globDef.h + drv/3d/dag_driverCode.h + + + + + + + + + + + + + + + + + + + + + + + Driver3dInitCallback + Driver3dInitCallback::VersionRange + Driver3dInitCallback::RenderSize + d3d + + + + APISupport + + FULL_SUPPORT + +Full support for the API. + + + + + + OUTDATED_DRIVER + +The driver is outdated. + + + + + + BLACKLISTED_DRIVER + +The driver is blacklisted (we know about bugs in the driver) + + + + + + NO_DEVICE_FOUND + +No compatible device found. + + + + + +Enum representing the level of API support for a current hardware. Currently it is only used to check DX12 support with a fallback on DX11 if the support is not full. + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<EASTL/initializer_list.h> + +#include<util/dag_globDef.h> + +#include<drv/3d/dag_driverCode.h> + +structDagorDateTime; +structDriver3dDesc; + +classDriver3dInitCallback +{ +public: +structVersionRange +{ +uint64_tminVersion; +uint64_tmaxVersion; +}; + +structRenderSize +{ +intwidth; +intheight; +}; + +usingNeedStereoRenderFunc=bool(*)(); +usingStereoRenderDimensionFunc=int(*)(); +usingStereoRenderExtensionsFunc=constchar*(*)(); +usingStereoRenderVersionsFunc=VersionRange(*)(); +usingStereoRenderAdapterFunc=int64_t(*)(); + +virtualvoidverifyResolutionSettings(int&ref_scr_wdt,int&ref_scr_hgt,intbase_scr_wdt,intbase_scr_hgt,boolwindow_mode)const +{ +G_UNUSED(ref_scr_wdt); +G_UNUSED(ref_scr_hgt); +G_UNUSED(base_scr_wdt); +G_UNUSED(base_scr_hgt); +G_UNUSED(window_mode); +} + +virtualintvalidateDesc(Driver3dDesc&desc)const=0; + +virtualintcompareDesc(Driver3dDesc&A,Driver3dDesc&B)const=0; + +virtualbooldesiredStereoRender()const{returnfalse;} + +virtualint64_tdesiredAdapter()const{return0;} + +virtualRenderSizedesiredRendererSize()const{return{0,0};} + +virtualconstchar*desiredRendererDeviceExtensions()const{returnnullptr;} + +virtualconstchar*desiredRendererInstanceExtensions()const{returnnullptr;} + +virtualVersionRangedesiredRendererVersionRange()const{return{0,0};} +}; + +enumclassAPISupport +{ +FULL_SUPPORT, +OUTDATED_DRIVER, +BLACKLISTED_DRIVER, +NO_DEVICE_FOUND +}; + +namespaced3d +{ + +intguess_gpu_vendor(String*out_gpu_desc=NULL,uint32_t*out_drv_ver=NULL,DagorDateTime*out_drv_date=NULL, +uint32_t*device_id=nullptr); + +DagorDateTimeget_gpu_driver_date(intvendor); + +unsignedget_dedicated_gpu_memory_size_kb(); + +unsignedget_free_dedicated_gpu_memory_size_kb(); + +voidget_current_gpu_memory_kb(uint32_t*dedicated_total,uint32_t*dedicated_free); + +boolget_gpu_freq(String&out_freq); + +intget_gpu_temperature(); + +voidget_video_vendor_str(String&out_str); + +floatget_display_scale(); + +voiddisable_sli(); + +constchar*get_driver_name(); + +#if_TARGET_XBOX +inlineconstexprDriverCodeget_driver_code(){returnDriverCode::make(d3d::dx12);} +#elif_TARGET_C1 + +#elif_TARGET_C2 + +#elif_TARGET_ANDROID|_TARGET_C3 +inlineconstexprDriverCodeget_driver_code(){returnDriverCode::make(d3d::vulkan);} +#elif_TARGET_IOS +inlineconstexprDriverCodeget_driver_code(){returnDriverCode::make(d3d::metal);} +#else +DriverCodeget_driver_code(); +#endif + +staticinlineboolis_stub_driver(){returnget_driver_code().is(d3d::stub);} + +constchar*get_device_driver_version(); + +constchar*get_device_name(); + +constchar*get_last_error(); + +uint32_tget_last_error_code(); + +void*get_device(); + +void*get_context(); + +constDriver3dDesc&get_driver_desc(); + +boolis_in_device_reset_now(); + +boolis_window_occluded(); + +boolshould_use_compute_for_image_processing(std::initializer_list<unsigned>formats); + +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineconstchar*get_driver_name(){returnd3di.driverName;} +inlineconstchar*get_device_driver_version(){returnd3di.driverVer;} +inlineconstchar*get_device_name(){returnd3di.deviceName;} +inlineconstchar*get_last_error(){returnd3di.get_last_error();} +inlineuint32_tget_last_error_code(){returnd3di.get_last_error_code();} + +inlinevoid*get_device(){returnd3di.get_device();} + +inlineconstDriver3dDesc&get_driver_desc(){returnd3di.drvDesc;} + +inlineboolis_in_device_reset_now(){returnd3di.is_in_device_reset_now();} +inlineboolis_window_occluded(){returnd3di.is_window_occluded();} + +inlineboolshould_use_compute_for_image_processing(std::initializer_list<unsigned>formats) +{ +returnd3di.should_use_compute_for_image_processing(formats); +} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__interface__table_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__interface__table_8h.xml new file mode 100644 index 000000000..454abeb91 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__interface__table_8h.xml @@ -0,0 +1,631 @@ + + + + dag_interface_table.h + EASTL/initializer_list.h + generic/dag_span.h + generic/dag_tabFwd.h + math/dag_TMatrix4.h + drv/3d/dag_consts_base.h + drv/3d/dag_samplerHandle.h + drv/3d/dag_barrier.h + drv/3d/dag_consts.h + drv/3d/dag_resource.h + drv/3d/dag_renderStateId.h + drv/3d/dag_shaderLibraryObject.h + drv/3d/rayTrace/dag_drvRayTrace.h + rayTrace/rayTrace3di.inl.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D3dInterfaceTable + d3d + ddsx + + + TMatrix4 + using Matrix44 = TMatrix4 + + Matrix44 + + + + + + + + + + unsigned uint32_t + using ResourceHeapCreateFlags = unsigned uint32_t + + ResourceHeapCreateFlags + + + + + + + + + + BaseTexture + typedef BaseTexture Texture + + Texture + + + + + + + + + + + + D3dInterfaceTable + D3dInterfaceTable d3di + + d3di + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<EASTL/initializer_list.h> + +#include<generic/dag_span.h> +#include<generic/dag_tabFwd.h> +#include<math/dag_TMatrix4.h> + +#include<drv/3d/dag_consts_base.h> +#include<drv/3d/dag_samplerHandle.h> +#include<drv/3d/dag_barrier.h> +#include<drv/3d/dag_consts.h> +#include<drv/3d/dag_resource.h> +#include<drv/3d/dag_renderStateId.h> +#include<drv/3d/dag_shaderLibraryObject.h> +#include<drv/3d/rayTrace/dag_drvRayTrace.h> + +classD3dEventQuery; +namespaced3d +{ +typedefD3dEventQueryEventQuery; +structRenderPass; +structSamplerInfo; +classResUpdateBuffer; +}//namespaced3d + +usingMatrix44=TMatrix4; + +classString; +classBaseTexture; +classSbuffer; +classIGenLoad; +classD3dResource; +structDriver3dDesc; +structTexImage32; +structRectInt; +structDriver3dPerspective; +structDriver3dRenderTarget; +structmat44f; +structScissorRect; +structViewport; +structTexPixel32; +structRenderPassDesc; +structRenderPassArea; +structRenderPassTarget; +structRenderTarget; +structResourceDescription; +structResourceHeapGroup; +structResourceHeap; +structResourceAllocationProperties; +structResourceHeapGroupProperties; +structTileMapping; +structTextureTilingInfo; + +enumclassDepthAccess; +enumclassDrv3dCommand; +enumclassResourceActivationAction:unsigned; +usingResourceHeapCreateFlags=uint32_t; + +typedefBaseTextureTexture; + +namespaceddsx +{ +structHeader; +} + +//function-pointerstablethatmirrorsd3dAPI +structD3dInterfaceTable +{ +constchar*(*get_driver_name)(); +constchar*(*get_device_driver_version)(); +constchar*(*get_device_name)(); +constchar*(*get_last_error)(); +uint32_t(*get_last_error_code)(); + +void*(*get_device)(); +constDriver3dDesc&(*get_driver_desc)(); +int(*driver_command)(Drv3dCommandcommand,void*par1,void*par2,void*par3); +bool(*device_lost)(bool*can_reset_now); +bool(*reset_device)(); +bool(*is_in_device_reset_now)(); +bool(*is_window_occluded)(); + +bool(*should_use_compute_for_image_processing)(std::initializer_list<unsigned>formats); + + +unsigned(*get_texformat_usage)(intcflg,intrestype); +bool(*check_texformat)(intcflg); +int(*get_max_sample_count)(intcflg); +bool(*issame_texformat)(intcflg1,intcflg2); +bool(*check_cubetexformat)(intcflg); +bool(*check_voltexformat)(intcflg); +BaseTexture*(*create_tex_0)(TexImage32*img,intw,inth,intflg,intlevels,constchar*stat_name); +BaseTexture*(*create_cubetex_0)(intsize,intflg,intlevels,constchar*stat_name); +BaseTexture*(*create_voltex)(intw,inth,intd,intflg,intlevels,constchar*stat_name); +BaseTexture*(*create_array_tex)(intw,inth,intd,intflg,intlevels,constchar*stat_name); +BaseTexture*(*create_cube_array_tex)(intside,intd,intflg,intlevels,constchar*stat_name); + +BaseTexture*(*create_ddsx_tex)(IGenLoad&crd,intflg,intq,intlev,constchar*stat_name); +BaseTexture*(*alloc_ddsx_tex)(constddsx::Header&hdr,intflg,intq,intlev,constchar*stat_name,intstub_tex_idx); + +BaseTexture*(*alias_tex_0)(BaseTexture*baseTexture,TexImage32*img,intw,inth,intflg,intlevels,constchar*stat_name); +BaseTexture*(*alias_cubetex_0)(BaseTexture*baseTexture,intsize,intflg,intlevels,constchar*stat_name); +BaseTexture*(*alias_voltex_0)(BaseTexture*baseTexture,intw,inth,intd,intflg,intlevels,constchar*stat_name); +BaseTexture*(*alias_array_tex_0)(BaseTexture*baseTexture,intw,inth,intd,intflg,intlevels,constchar*stat_name); +BaseTexture*(*alias_cube_array_tex_0)(BaseTexture*baseTexture,intside,intd,intflg,intlevels,constchar*stat_name); + +bool(*stretch_rect_0)(BaseTexture*src,BaseTexture*dst,RectInt*rsrc,RectInt*rdst); +bool(*copy_from_current_render_target)(BaseTexture*to_tex); + +void(*get_texture_statistics)(uint32_t*num_textures,uint64_t*total_mem,String*out_dump); + +d3d::SamplerHandle(*request_sampler)(constd3d::SamplerInfo&sampler_info); +void(*set_sampler)(unsignedshader_stage,unsignedslot,d3d::SamplerHandlesampler); + +bool(*settex)(intstage,BaseTexture*); +bool(*settex_vs)(intstage,BaseTexture*); + +PROGRAM(*create_program_0)(VPROG,FSHADER,VDECL,unsigned*,unsigned); +PROGRAM(*create_program_1)(constuint32_t*,constuint32_t*,VDECL,unsigned*,unsigned); + +PROGRAM(*create_program_cs)(constuint32_t*cs_native,CSPreloadedpreloaded); + +bool(*set_program)(PROGRAM); +void(*delete_program)(PROGRAM); + +VPROG(*create_vertex_shader)(constuint32_t*native_code); +VPROG(*create_vertex_shader_dagor)(constVPRTYPE*tokens,intlen); +VPROG(*create_vertex_shader_asm)(constchar*asm_text); +VPROG(*create_vertex_shader_hlsl)(constchar*hlsl_text); +void(*delete_vertex_shader)(VPROGvs); + +bool(*set_vertex_shader)(VPROGps); +bool(*set_const)(unsignedstage,unsignedreg_base,constvoid*data,unsignednum_regs); +bool(*set_immediate_const)(unsignedstage,constuint32_t*data,unsignednum_words); + +FSHADER(*create_pixel_shader)(constuint32_t*native_code); +FSHADER(*create_pixel_shader_dagor)(constFSHTYPE*tokens,intlen); +FSHADER(*create_pixel_shader_asm)(constchar*asm_text); +FSHADER(*create_pixel_shader_hlsl)(constchar*hlsl_text); +void(*delete_pixel_shader)(FSHADERps); + +bool(*set_pixel_shader)(FSHADERps); +int(*set_vs_constbuffer_size)(intrequired_size); +int(*set_cs_constbuffer_size)(intrequired_size); +bool(*set_const_buffer)(unsignedstage,unsignedslot,Sbuffer*buffer,uint32_tconsts_offset,uint32_tconsts_size); + +uint32_t(*register_bindless_sampler_0)(BaseTexture*texture); +uint32_t(*register_bindless_sampler_1)(d3d::SamplerHandlesampler); + +inlineuint32_tregister_bindless_sampler(BaseTexture*texture){returnregister_bindless_sampler_0(texture);} +inlineuint32_tregister_bindless_sampler(d3d::SamplerHandlesampler){returnregister_bindless_sampler_1(sampler);} + +uint32_t(*allocate_bindless_resource_range)(uint32_tresource_type,uint32_tcount); +uint32_t(*resize_bindless_resource_range)(uint32_tresource_type,uint32_tindex,uint32_tcurrent_count,uint32_tnew_count); +void(*free_bindless_resource_range)(uint32_tresource_type,uint32_tindex,uint32_tcount); +void(*update_bindless_resource)(uint32_tindex,D3dResource*res); +void(*update_bindless_resources_to_null)(uint32_tresource_type,uint32_tindex,uint32_tcount); + +bool(*set_tex)(unsignedshader_stage,unsignedslot,BaseTexture*tex,booluse_sampler); +bool(*set_rwtex)(unsignedshader_stage,unsignedslot,BaseTexture*tex,uint32_t,uint32_t,bool); +bool(*clear_rwtexi)(BaseTexture*tex,constunsignedval[4],uint32_t,uint32_t); +bool(*clear_rwtexf)(BaseTexture*tex,constfloatval[4],uint32_t,uint32_t); +bool(*clear_rwbufi)(Sbuffer*tex,constunsignedval[4]); +bool(*clear_rwbuff)(Sbuffer*tex,constfloatval[4]); + +bool(*clear_rt)(constRenderTarget&rt,constResourceClearValue&clear_val); + +bool(*set_buffer)(unsignedshader_stage,unsignedslot,Sbuffer*buffer); +bool(*set_rwbuffer)(unsignedshader_stage,unsignedslot,Sbuffer*buffer); + +Sbuffer*(*create_vb_0)(intsize_bytes,intflags,constchar*name); +Sbuffer*(*create_ib)(intsize_bytes,intflags,constchar*stat_name); +Sbuffer*(*create_sbuffer)(intstruct_size,intelements,unsignedflags,unsignedtexfmt,constchar*); + +bool(*set_depth_0)(BaseTexture*,DepthAccess); +bool(*set_depth_1)(BaseTexture*tex,intlayer,DepthAccess); +bool(*set_render_target_0)(); +bool(*set_render_target_1)(intrt_index,BaseTexture*,uint8_tlevel); +bool(*set_render_target_2)(intrt_index,BaseTexture*,intfc,uint8_tlevel); +bool(*set_render_target_3)(constDriver3dRenderTarget&rt); +void(*get_render_target)(Driver3dRenderTarget&out_rt); +bool(*get_target_size)(int&w,int&h); +bool(*get_render_target_size)(int&w,int&h,BaseTexture*rt_tex,uint8_tlevel); +void(*set_variable_rate_shading)(unsignedrate_x,unsignedrate_y,VariableRateShadingCombinervertex_combiner, +VariableRateShadingCombinerpixel_combiner); +void(*set_variable_rate_shading_texture)(BaseTexture*rate_texture); + +bool(*settm_0)(intwhich,constMatrix44*tm); +bool(*settm_1)(intwhich,constTMatrix&tm); +void(*settm_2)(intwhich,constmat44f&tm); +bool(*gettm_0)(intwhich,Matrix44*out_tm); +bool(*gettm_1)(intwhich,TMatrix&out_tm); +void(*gettm_2)(intwhich,mat44f&out_tm); +constmat44f&(*gettm_cref)(intwhich); +void(*getm2vtm)(TMatrix&out_m2v); +void(*setglobtm)(Matrix44&m); +void(*getglobtm)(Matrix44&); +bool(*setpersp)(constDriver3dPerspective&,TMatrix4*); +bool(*getpersp)(Driver3dPerspective&); +bool(*validatepersp)(constDriver3dPerspective&); +bool(*calcproj_0)(constDriver3dPerspective&,TMatrix4&); +bool(*calcproj_1)(constDriver3dPerspective&,mat44f&); +void(*calcglobtm_0)(constmat44f&,constmat44f&,mat44f&); +void(*calcglobtm_1)(constmat44f&,constDriver3dPerspective&,mat44f&); +void(*calcglobtm_2)(constTMatrix&,constTMatrix4&,TMatrix4&); +void(*calcglobtm_3)(constTMatrix&,constDriver3dPerspective&,TMatrix4&); + +void(*getglobtm_vec)(mat44f&); +void(*setglobtm_vec)(constmat44f&); + +bool(*setscissor)(intx,inty,intw,inth); +bool(*setscissors)(dag::ConstSpan<ScissorRect>scissorRects); + +bool(*setview)(intx,inty,intw,inth,floatminz,floatmaxz); +bool(*setviews)(dag::ConstSpan<Viewport>viewports); +bool(*getview)(int&x,int&y,int&w,int&h,float&minz,float&maxz); +bool(*clearview)(intwhat,E3DCOLOR,floatz,uint32_tstencil); + +bool(*update_screen)(boolapp_active); +void(*wait_for_async_present)(boolforce); +void(*gpu_latency_wait)(); + +bool(*setvsrc_ex)(intstream,Sbuffer*vb,intofs,intstride_bytes); +bool(*setind)(Sbuffer*ib); +VDECL(*create_vdecl)(VSDTYPE*vsd); +void(*delete_vdecl)(VDECLvdecl); +bool(*setvdecl)(VDECLvdecl); + +bool(*draw_base)(inttype,intstart,intnumprim,uint32_tnum_instances,uint32_tstart_instance); +bool(*drawind_base)(inttype,intstartind,intnumprim,intbase_vertex,uint32_tnum_instances,uint32_tstart_instance); +bool(*draw_up)(inttype,intnumprim,constvoid*ptr,intstride_bytes); +bool(*drawind_up)(inttype,intminvert,intnumvert,intnumprim,constuint16_t*ind,constvoid*ptr,intstride_bytes); + +bool(*draw_indirect)(inttype,Sbuffer*buffer,uint32_toffset); +bool(*draw_indexed_indirect)(inttype,Sbuffer*buffer,uint32_toffset); +bool(*multi_draw_indirect)(intprim_type,Sbuffer*args,uint32_tdraw_count,uint32_tstride_bytes,uint32_tbyte_offset); +bool(*multi_draw_indexed_indirect)(intprim_type,Sbuffer*args,uint32_tdraw_count,uint32_tstride_bytes,uint32_tbyte_offset); + +bool(*dispatch)(uint32_tthread_group_x,uint32_tthread_group_y,uint32_tthread_group_z,GpuPipelinegpu_pipeline); +bool(*dispatch_indirect)(Sbuffer*buffer,uint32_toffset,GpuPipelinegpu_pipeline); +void(*dispatch_mesh)(uint32_tthread_group_x,uint32_tthread_group_y,uint32_tthread_group_z); +void(*dispatch_mesh_indirect)(Sbuffer*args,uint32_tdispatch_count,uint32_tstride_bytes,uint32_tbyte_offset); +void(*dispatch_mesh_indirect_count)(Sbuffer*args,uint32_targs_stride_bytes,uint32_targs_byte_offset,Sbuffer*count, +uint32_tcount_byte_offset,uint32_tmax_count); + +GPUFENCEHANDLE(*insert_fence)(GpuPipelinegpu_pipeline); +void(*insert_wait_on_fence)(GPUFENCEHANDLE&fence,GpuPipelinegpu_pipeline); + +shaders::DriverRenderStateId(*create_render_state)(constshaders::RenderState&); +bool(*set_render_state)(shaders::DriverRenderStateId); +void(*clear_render_states)(); + +bool(*set_blend_factor)(E3DCOLORcolor); +bool(*setstencil)(uint32_tref); + +bool(*setwire)(boolin); + +bool(*set_srgb_backbuffer_write)(boolon); + +bool(*setgamma)(floatpower); + +float(*get_screen_aspect_ratio)(); +void(*change_screen_aspect_ratio)(floatar); + +void*(*fast_capture_screen)(int&w,int&h,int&stride_bytes,int&format); +void(*end_fast_capture_screen)(); + +TexPixel32*(*capture_screen)(int&w,int&h,int&stride_bytes); +void(*release_capture_buffer)(); + +void(*get_screen_size)(int&w,int&h); + +bool(*set_depth_bounds)(floatzmn,floatzmx); + +int(*create_predicate)(); +void(*free_predicate)(intid); + +bool(*begin_survey)(intindex); +void(*end_survey)(intindex); + +void(*begin_conditional_render)(intindex); +void(*end_conditional_render)(intid); + +VDECL(*get_program_vdecl)(PROGRAMp); + +bool(*get_vrr_supported)(); +bool(*get_vsync_enabled)(); +bool(*enable_vsync)(boolenable); + +d3d::EventQuery*(*create_event_query)(); +void(*release_event_query)(d3d::EventQuery*q); +bool(*issue_event_query)(d3d::EventQuery*q); +bool(*get_event_query_status)(d3d::EventQuery*q,boolforce_flush); + +void(*set_present_wnd)(void*hwnd); + +bool(*set_capture_full_frame_buffer)(boolison); +unsigned(*get_texture_format)(BaseTexture*tex); +constchar*(*get_texture_format_str)(BaseTexture*tex); +void(*get_video_modes_list)(Tab<String>&list); +PROGRAM(*get_debug_program)(); +void(*beginEvent)(constchar*s); +void(*endEvent)(); + +Texture*(*get_backbuffer_tex)(); +Texture*(*get_secondary_backbuffer_tex)(); + +#include"rayTrace/rayTrace3di.inl.h" + +void(*resource_barrier)(ResourceBarrierDescdesc,GpuPipelinegpu_pipeline/*=GpuPipeline::GRAPHICS*/); + +d3d::RenderPass*(*create_render_pass)(constRenderPassDesc&rp_desc); +void(*delete_render_pass)(d3d::RenderPass*rp); + +void(*begin_render_pass)(d3d::RenderPass*rp,constRenderPassAreaarea,constRenderPassTarget*targets); +void(*next_subpass)(); +void(*end_render_pass)(); + +void(*allow_render_pass_target_load)(); + +ResourceAllocationProperties(*get_resource_allocation_properties)(constResourceDescription&desc); +ResourceHeap*(*create_resource_heap)(ResourceHeapGroup*heap_group,size_tsize,ResourceHeapCreateFlagsflags); +void(*destroy_resource_heap)(ResourceHeap*heap); +Sbuffer*(*place_buffer_in_resource_heap)(ResourceHeap*heap,constResourceDescription&desc,size_toffset, +constResourceAllocationProperties&alloc_info,constchar*name); +BaseTexture*(*place_texture_in_resource_heap)(ResourceHeap*heap,constResourceDescription&desc,size_toffset, +constResourceAllocationProperties&alloc_info,constchar*name); +ResourceHeapGroupProperties(*get_resource_heap_group_properties)(ResourceHeapGroup*heap_group); + +void(*map_tile_to_resource)(BaseTexture*tex,ResourceHeap*heap,constTileMapping*mapping,size_tmapping_count); + +TextureTilingInfo(*get_texture_tiling_info)(BaseTexture*tex,size_tsubresource); + +void(*activate_buffer)(Sbuffer*buf,ResourceActivationActionaction,constResourceClearValue&value, +GpuPipelinegpu_pipeline/*=GpuPipeline::GRAPHICS*/); +void(*activate_texture)(BaseTexture*tex,ResourceActivationActionaction,constResourceClearValue&value, +GpuPipelinegpu_pipeline/*=GpuPipeline::GRAPHICS*/); +void(*deactivate_buffer)(Sbuffer*buf,GpuPipelinegpu_pipeline/*=GpuPipeline::GRAPHICS*/); +void(*deactivate_texture)(BaseTexture*tex,GpuPipelinegpu_pipeline/*=GpuPipeline::GRAPHICS*/); + +d3d::ResUpdateBuffer*(*allocate_update_buffer_for_tex_region)(BaseTexture*dest_base_texture,unsigneddest_mip, +unsigneddest_slice,unsignedoffset_x,unsignedoffset_y,unsignedoffset_z,unsignedwidth,unsignedheight,unsigneddepth); +d3d::ResUpdateBuffer*(*allocate_update_buffer_for_tex)(BaseTexture*dest_tex,intdest_mip,intdest_slice); +void(*release_update_buffer)(d3d::ResUpdateBuffer*&rub); +char*(*get_update_buffer_addr_for_write)(d3d::ResUpdateBuffer*rub); +size_t(*get_update_buffer_size)(d3d::ResUpdateBuffer*rub); +size_t(*get_update_buffer_pitch)(d3d::ResUpdateBuffer*rub); +size_t(*get_update_buffer_slice_pitch)(d3d::ResUpdateBuffer*rub); +bool(*update_texture_and_release_update_buffer)(d3d::ResUpdateBuffer*&src_rub); + +void*(*get_native_surface)(BaseTexture*tex); + +bool(*start_capture)(constchar*name,constchar*savepath); +void(*stop_capture)(); + +//inlinewrappersforoverloadedfunctionpointers +Sbuffer*create_vb(intsize_bytes,intflags,constchar*name=""){returncreate_vb_0(size_bytes,flags,name);} +BaseTexture*create_tex(TexImage32*img,intw,inth,intflg,intlevels,constchar*stat_name=NULL) +{ +returncreate_tex_0(img,w,h,flg,levels,stat_name); +} +boolstretch_rect(BaseTexture*src,BaseTexture*dst,RectInt*rsrc=NULL,RectInt*rdst=NULL) +{ +returnstretch_rect_0(src,dst,rsrc,rdst); +} + +inlineboolsetvsrc(intstream,Sbuffer*vb,intstride_bytes){returnsetvsrc_ex(stream,vb,0,stride_bytes);} +BaseTexture*create_cubetex(intsize,intflg,intlevels,constchar*stat_name=NULL) +{ +returncreate_cubetex_0(size,flg,levels,stat_name); +} + +BaseTexture*alias_tex(BaseTexture*baseTexture,TexImage32*img,intw,inth,intflg,intlevels,constchar*stat_name=NULL) +{ +returnalias_tex_0(baseTexture,img,w,h,flg,levels,stat_name); +} + +BaseTexture*alias_cubetex(BaseTexture*baseTexture,intsize,intflg,intlevels,constchar*stat_name=NULL) +{ +returnalias_cubetex_0(baseTexture,size,flg,levels,stat_name); +} + +BaseTexture*alias_voltex(BaseTexture*baseTexture,intw,inth,intd,intflg,intlevels,constchar*stat_name=NULL) +{ +returnalias_voltex_0(baseTexture,w,h,d,flg,levels,stat_name); +} + +BaseTexture*alias_array_tex(BaseTexture*baseTexture,intw,inth,intd,intflg,intlevels,constchar*stat_name) +{ +returnalias_array_tex_0(baseTexture,w,h,d,flg,levels,stat_name); +} + +BaseTexture*alias_cube_array_tex(BaseTexture*baseTexture,intside,intd,intflg,intlevels,constchar*stat_name) +{ +returnalias_cube_array_tex_0(baseTexture,side,d,flg,levels,stat_name); +} + +boolset_render_target(){returnset_render_target_0();} +boolset_render_target(intri,BaseTexture*tex,intfc,intlevel){returnset_render_target_2(ri,tex,fc,level);} +boolset_render_target(intrt_index,BaseTexture*tex,intlevel){returnset_render_target_1(rt_index,tex,level);} +boolset_render_target(constDriver3dRenderTarget&rt){returnset_render_target_3(rt);} +inlineboolset_depth(BaseTexture*tex,DepthAccessaccess){returnset_depth_0(tex,access);} +inlineboolset_depth(BaseTexture*tex,intlayer,DepthAccessaccess){returnset_depth_1(tex,layer,access);} + +boolsettm(intwhich,constMatrix44*tm){returnsettm_0(which,tm);} +boolsettm(intwhich,constTMatrix&tm){returnsettm_1(which,tm);} +voidsettm(intwhich,constmat44f&tm){settm_2(which,tm);} +boolgettm(intwhich,Matrix44*out_tm){returngettm_0(which,out_tm);} +boolgettm(intwhich,TMatrix&out_tm){returngettm_1(which,out_tm);} +voidgettm(intwhich,mat44f&out_tm){gettm_2(which,out_tm);} + +ShaderLibrary(*create_shader_library)(constShaderLibraryCreateInfo&slci); +void(*destroy_shader_library)(ShaderLibrarylibrary); + +DriverCodedriverCode; +constchar*driverName; +constchar*driverVer; +constchar*deviceName; +Driver3dDescdrvDesc; +}; + +//function-pointerstableinstance(coudbeusedfordeferredd3dAPIcalls) +externD3dInterfaceTabled3di; + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__lock_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__lock_8h.xml new file mode 100644 index 000000000..2fa28a7a3 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__lock_8h.xml @@ -0,0 +1,259 @@ + + + + dag_lock.h + drv/3d/dag_driver.h + drv/3d/dag_commands.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d::GpuAutoLock + d3d::LoadingAutoLock + d3d::GPUWorkloadSplit + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_driver.h> +#include<drv/3d/dag_commands.h> + +namespaced3d +{ + +structGpuAutoLock +{ +GpuAutoLock(); +~GpuAutoLock(); +}; + +structLoadingAutoLock +{ +LoadingAutoLock(){driver_command(Drv3dCommand::ACQUIRE_LOADING);} +~LoadingAutoLock(){driver_command(Drv3dCommand::RELEASE_LOADING);} +}; + +structGPUWorkloadSplit +{ +boolneedSplitAtEnd; +GPUWorkloadSplit(booldo_split,boolsplit_at_end,constchar*marker):needSplitAtEnd(do_split&&split_at_end) +{ +if(!do_split) +return; +d3d::driver_command(Drv3dCommand::D3D_FLUSH,(void*)marker,(void*)0); +} + +~GPUWorkloadSplit() +{ +if(!needSplitAtEnd) +return; + +d3d::driver_command(Drv3dCommand::D3D_FLUSH,(void*)"split_end",(void*)1); +} +}; + +}//namespaced3d + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__matrices_and_perspective_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__matrices_and_perspective_8h.xml new file mode 100644 index 000000000..e9c4e13a8 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__matrices_and_perspective_8h.xml @@ -0,0 +1,122 @@ + + + + dag_matricesAndPerspective.h + d3d + + + TMatrix4 + using Matrix44 = TMatrix4 + + Matrix44 + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +classTMatrix4; +classTMatrix; +structmat44f; +structDriver3dPerspective; + +usingMatrix44=TMatrix4; + +namespaced3d +{ +boolsettm(intwhich,constMatrix44*tm); + +boolsettm(intwhich,constTMatrix&tm); + +voidsettm(intwhich,constmat44f&tm); + +boolgettm(intwhich,Matrix44*out_tm); + +boolgettm(intwhich,TMatrix&out_tm); + +voidgettm(intwhich,mat44f&out_tm); + +constmat44f&gettm_cref(intwhich); + +voidgetm2vtm(TMatrix&out_m2v); + +voidgetglobtm(Matrix44&out); + +voidsetglobtm(Matrix44&globtm); + +voidgetglobtm(mat44f&out); + +voidsetglobtm(constmat44f&globtm); + +boolsetpersp(constDriver3dPerspective&p,TMatrix4*proj_tm=nullptr); + +boolgetpersp(Driver3dPerspective&p); + +boolvalidatepersp(constDriver3dPerspective&p); + +boolcalcproj(constDriver3dPerspective&p,mat44f&proj_tm); + +boolcalcproj(constDriver3dPerspective&p,TMatrix4&proj_tm); + +voidcalcglobtm(constmat44f&view_tm,constmat44f&proj_tm,mat44f&result); + +voidcalcglobtm(constmat44f&view_tm,constDriver3dPerspective&persp,mat44f&result); + +voidcalcglobtm(constTMatrix&view_tm,constTMatrix4&proj_tm,TMatrix4&result); + +voidcalcglobtm(constTMatrix&view_tm,constDriver3dPerspective&persp,TMatrix4&result); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineboolsettm(intwhich,constMatrix44*tm){returnd3di.settm(which,tm);} +inlineboolsettm(intwhich,constTMatrix&tm){returnd3di.settm(which,tm);} +inlinevoidsettm(intwhich,constmat44f&out_tm){returnd3di.settm(which,out_tm);} + +inlineboolgettm(intwhich,Matrix44*out_tm){returnd3di.gettm(which,out_tm);} +inlineboolgettm(intwhich,TMatrix&out_tm){returnd3di.gettm(which,out_tm);} +inlinevoidgettm(intwhich,mat44f&out_tm){returnd3di.gettm(which,out_tm);} +inlineconstmat44f&gettm_cref(intwhich){returnd3di.gettm_cref(which);} + +inlinevoidgetm2vtm(TMatrix&out_m2v){returnd3di.getm2vtm(out_m2v);} +inlinevoidgetglobtm(Matrix44&m){returnd3di.getglobtm(m);} +inlinevoidsetglobtm(Matrix44&m){returnd3di.setglobtm(m);} + +inlinevoidgetglobtm(mat44f&m){returnd3di.getglobtm_vec(m);} +inlinevoidsetglobtm(constmat44f&m){returnd3di.setglobtm_vec(m);} + +inlineboolsetpersp(constDriver3dPerspective&p,TMatrix4*tm){returnd3di.setpersp(p,tm);} + +inlineboolgetpersp(Driver3dPerspective&p){returnd3di.getpersp(p);} + +inlineboolvalidatepersp(constDriver3dPerspective&p){returnd3di.validatepersp(p);} + +inlineboolcalcproj(constDriver3dPerspective&p,TMatrix4&proj_tm){returnd3di.calcproj_0(p,proj_tm);} +inlineboolcalcproj(constDriver3dPerspective&p,mat44f&proj_tm){returnd3di.calcproj_1(p,proj_tm);} + +inlinevoidcalcglobtm(constmat44f&v,constmat44f&p,mat44f&r){d3di.calcglobtm_0(v,p,r);} +inlinevoidcalcglobtm(constmat44f&v,constDriver3dPerspective&p,mat44f&r){d3di.calcglobtm_1(v,p,r);} +inlinevoidcalcglobtm(constTMatrix&v,constTMatrix4&p,TMatrix4&r){d3di.calcglobtm_2(v,p,r);} +inlinevoidcalcglobtm(constTMatrix&v,constDriver3dPerspective&p,TMatrix4&r){d3di.calcglobtm_3(v,p,r);} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__platform_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__platform_8h.xml new file mode 100644 index 000000000..681eadbe5 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__platform_8h.xml @@ -0,0 +1,19 @@ + + + + dag_platform.h + + + + + +#pragmaonce +#if_TARGET_PC|_TARGET_XBOX +#include<drv/3d/dag_platform_pc.h> +#elif_TARGET_C1|_TARGET_C2 + +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__platform__pc_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__platform__pc_8h.xml new file mode 100644 index 000000000..17f068c6e --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__platform__pc_8h.xml @@ -0,0 +1,286 @@ + + + + dag_platform_pc.h + drv/3d/dag_driver.h + generic/dag_tabFwd.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d + + + !error + !error __pad0__ + + __pad0__ + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#if!(_TARGET_PC|_TARGET_XBOX) +!error:mustnotbeincludedfornon-PCtarget! +#endif + +#include<drv/3d/dag_driver.h> +#include<generic/dag_tabFwd.h> + +classString; + +namespaced3d +{ +#if_TARGET_PC_WIN +VPROGcreate_vertex_shader_hlsl(constchar*hlsl_text,unsignedlen,constchar*entry,constchar*profile,String*out_err=NULL); +FSHADERcreate_pixel_shader_hlsl(constchar*hlsl_text,unsignedlen,constchar*entry,constchar*profile, +String*out_err=NULL); +boolcompile_compute_shader_hlsl(constchar*hlsl_text,unsignedlen,constchar*entry,constchar*profile, +Tab<uint32_t>&shader_bin,String&out_err); +#endif + +#if!_TARGET_D3D_MULTI +VDECLget_program_vdecl(PROGRAM); + +boolset_vertex_shader(VPROGps); +boolset_pixel_shader(FSHADERps); +#if_TARGET_PC_WIN +namespacepcwin32 +{ +unsignedget_texture_format(BaseTexture*tex); +constchar*get_texture_format_str(BaseTexture*tex); +void*get_native_surface(BaseTexture*tex); +}//namespacepcwin32 +#endif + +VPROGcreate_vertex_shader_asm(constchar*asm_text); +VPROGcreate_vertex_shader_dagor(constVPRTYPE*p,intn); + +FSHADERcreate_pixel_shader_asm(constchar*asm_text); +FSHADERcreate_pixel_shader_dagor(constFSHTYPE*p,intn); + +#if_TARGET_PC_WIN +//additionald3d::pcwin32interface(PCspecific) +namespacepcwin32 +{ +voidset_present_wnd(void*hwnd); + +//setcapturewholeframebufferwithcapture_screen(),notonlywindowdata. +boolset_capture_full_frame_buffer(boolison);//returnspreviousstate +}//namespacepcwin32 +#endif +boolget_vsync_enabled(); +boolenable_vsync(boolenable); +voidget_video_modes_list(Tab<String>&list); +#endif +};//namespaced3d + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__platform__ps_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__platform__ps_8h.xml new file mode 100644 index 000000000..5891900f5 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__platform__ps_8h.xml @@ -0,0 +1,253 @@ + + + + dag_platform_ps.h + drv/3d/dag_driver.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d + d3d::ps + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#if!(_TARGET_C1|_TARGET_C2|RIPPER) +#error:mustnotbeincludedfornon-PS4andnon-PS5target! +#endif + +#include<drv/3d/dag_driver.h> + +structSceHmdFieldOfView; +structSceHmdReprojectionTrackerState; + +namespaced3d +{ +VDECLget_program_vdecl(PROGRAM); + +boolget_vsync_enabled(); +boolenable_vsync(boolenable); + +namespaceps +{ +//Texturecreation +Texture*create_raw_tex(); +voidupdate_raw_tex(Texture*tex,void*gnm_texture,void*gnm_sampler=NULL); + +//directaccesstogpuheaps +void*alloc_mem_block(boolonion,uint32_tsize,uint32_talignment); +voidfree_mem_block(void*addr); + +//Debug: +//-1=stop0=querystate>0=countreturnstrueifinprogress +boolrecord_frame(intcontrol); + +//tocatchspecificpointofframeindebugger.idisanarbitraryvalue +voiddebug_point(intid=0); +voidset_verbose_mode(boolena);//enableverbosedebugmessages(auto-disabledonanysubmit) +voidsubmit_and_stall(boollocked_state);//forcegpupipelineflush +voidsubmit_background(); +voidfreeze_frame();//repeatcurrentframeonpresent + +//returnsGnm::Texturepointer +void*get_raw_texture_descriptor(Texture*tex); +}//namespaceps +};//namespaced3d + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__query_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__query_8h.xml new file mode 100644 index 000000000..03167bede --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__query_8h.xml @@ -0,0 +1,46 @@ + + + + dag_query.h + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +classD3dEventQuery; + +namespaced3d +{ + +usingEventQuery=D3dEventQuery; + +EventQuery*create_event_query(); + +voidrelease_event_query(EventQuery*query); + +boolissue_event_query(EventQuery*query); + +boolget_event_query_status(EventQuery*query,boolforce_flush); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineEventQuery*create_event_query(){returnd3di.create_event_query();} +inlinevoidrelease_event_query(EventQuery*q){returnd3di.release_event_query(q);} +inlineboolissue_event_query(EventQuery*q){returnd3di.issue_event_query(q);} +inlineboolget_event_query_status(EventQuery*q,boolforce_flush){returnd3di.get_event_query_status(q,force_flush);} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__render_pass_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__render_pass_8h.xml new file mode 100644 index 000000000..5351ab031 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__render_pass_8h.xml @@ -0,0 +1,213 @@ + + + + dag_renderPass.h + util/dag_inttypes.h + drv/3d/dag_consts.h + drv/3d/dag_renderTarget.h + drv/3d/dag_resource.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RenderPassBind + RenderPassTargetDesc + RenderPassTarget + RenderPassDesc + RenderPassArea + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_inttypes.h> +#include<drv/3d/dag_consts.h> +#include<drv/3d/dag_renderTarget.h> +#include<drv/3d/dag_resource.h> + +classBaseTexture; + +structRenderPassBind +{ +int32_ttarget; +int32_tsubpass; +int32_tslot; + +RenderPassTargetActionaction; +ResourceBarrierdependencyBarrier; +}; + +structRenderPassTargetDesc +{ +BaseTexture*templateResource; +unsignedtexcf; +boolaliased; +}; + +structRenderPassTarget +{ +RenderTargetresource; +ResourceClearValueclearValue; +}; + +structRenderPassDesc +{ +constchar*debugName; +uint32_ttargetCount; +uint32_tbindCount; + +constRenderPassTargetDesc*targetsDesc; +constRenderPassBind*binds; + +uint32_tsubpassBindingOffset; +}; + +structRenderPassArea +{ +uint32_tleft; +uint32_ttop; +uint32_twidth; +uint32_theight; +floatminZ; +floatmaxZ; +}; + +namespaced3d +{ +structRenderPass; +RenderPass*create_render_pass(constRenderPassDesc&rp_desc); +voiddelete_render_pass(RenderPass*rp); + +voidbegin_render_pass(RenderPass*rp,constRenderPassAreaarea,constRenderPassTarget*targets); +voidnext_subpass(); +voidend_render_pass(); + +#ifDAGOR_DBGLEVEL>0 +voidallow_render_pass_target_load(); +#else +inlinevoidallow_render_pass_target_load(){} +#endif + +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineRenderPass*create_render_pass(constRenderPassDesc&rp_desc){returnd3di.create_render_pass(rp_desc);} +inlinevoiddelete_render_pass(RenderPass*rp){d3di.delete_render_pass(rp);} +inlinevoidbegin_render_pass(RenderPass*rp,constRenderPassAreaarea,constRenderPassTarget*targets) +{ +d3di.begin_render_pass(rp,area,targets); +} +inlinevoidnext_subpass(){d3di.next_subpass();} +inlinevoidend_render_pass(){d3di.end_render_pass();} + +#ifDAGOR_DBGLEVEL>0 +inlinevoidallow_render_pass_target_load() +{ +if(d3di.driverCode.is(d3d::vulkan)) +d3di.allow_render_pass_target_load(); +} +#endif +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__render_state_id_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__render_state_id_8h.xml new file mode 100644 index 000000000..f9cb4a6f0 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__render_state_id_8h.xml @@ -0,0 +1,68 @@ + + + + dag_renderStateId.h + util/dag_generationRefId.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_interface_table.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_renderStates.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + shaders::DriverRenderStateIdDummy + shaders + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_generationRefId.h> + +namespaceshaders +{ +structRenderState; + +enumclassRenderStateId:uint32_t +{ +Invalid=0 +}; + +classDriverRenderStateIdDummy +{}; +usingDriverRenderStateId=GenerationRefId<8,DriverRenderStateIdDummy>;//weakreference +}//namespaceshaders + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__render_states_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__render_states_8h.xml new file mode 100644 index 000000000..0c68808e5 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__render_states_8h.xml @@ -0,0 +1,200 @@ + + + + dag_renderStates.h + string.h + drv/3d/dag_consts_base.h + drv/3d/dag_renderStateId.h + math/dag_e3dColor.h + shaders/dag_overrideStates.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + shaders::RenderStateBits + shaders::RenderState + shaders::RenderState::BlendFactors + shaders::RenderState::BlendParams + shaders + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<string.h> + +#include<drv/3d/dag_consts_base.h> +#include<drv/3d/dag_renderStateId.h> +#include<math/dag_e3dColor.h> +#include<shaders/dag_overrideStates.h> + +namespaceshaders +{ + +structRenderStateBits//-V730 +{ +uint32_tzwrite:1; +uint32_tztest:1; +uint32_tzFunc:4; +uint32_tstencilRef:8; +uint32_tcull:2; +uint32_tdepthBoundsEnable:1; +uint32_tforcedSampleCount:4; +uint32_tconservativeRaster:1; +uint32_tzClip:1; +uint32_tscissorEnabled:1; +uint32_tindependentBlendEnabled:1; +uint32_talphaToCoverage:1; +uint32_tviewInstanceCount:2; +uint32_tcolorWr=0xFFFFFFFF; +floatzBias=0; +floatslopeZBias=0; +StencilStatestencil; +}; + +structRenderState:publicRenderStateBits +{ +//increaseifmoreindependentblendparametersareneeded +staticconstexpruint32_tNumIndependentBlendParameters=4; + +structBlendFactors +{ +uint8_tsrc:4; +uint8_tdst:4; +}; +structBlendParams +{ +BlendFactorsablendFactors; +BlendFactorssepablendFactors; + +uint8_tblendOp:3; +uint8_tsepablendOp:3; +uint8_tablend:1; +uint8_tsepablend:1; +}; + +BlendParamsblendParams[NumIndependentBlendParameters]; + +//ensurethatnopaddingoccured +static_assert(sizeof(BlendParams)==3); +static_assert(sizeof(blendParams)==NumIndependentBlendParameters*sizeof(BlendParams)); + +RenderState() +{ +memset(this,0,sizeof(RenderState)); +zwrite=1; +ztest=1; +zFunc=CMPF_GREATEREQUAL; +stencilRef=0; +for(BlendParams&blendParam:blendParams) +{ +blendParam.ablendFactors.src=BLEND_ONE; +blendParam.ablendFactors.dst=BLEND_ZERO; +blendParam.sepablendFactors.src=BLEND_ONE; +blendParam.sepablendFactors.dst=BLEND_ZERO; +blendParam.blendOp=BLENDOP_ADD; +blendParam.sepablendOp=BLENDOP_ADD; +//donebymemsetwithzero +//blendParam.ablend=0; +//blendParam.sepablend=0; +} +cull=CULL_NONE; +depthBoundsEnable=0; +forcedSampleCount=0; +conservativeRaster=0; +viewInstanceCount=0; +colorWr=0xFFFFFFFF; +zClip=1; +alphaToCoverage=0; +independentBlendEnabled=0; +} + +booloperator==(constRenderState&s)const +{ +if(autor=memcmp(static_cast<constRenderStateBits*>(this),static_cast<constRenderStateBits*>(&s),//-V1014 +sizeof(RenderStateBits)); +r!=0) +returnfalse; + +size_tblendParamBytesToCompare=independentBlendEnabled?sizeof(blendParams):sizeof(BlendParams); +returnmemcmp(blendParams,s.blendParams,blendParamBytesToCompare)==0; +} +booloperator!=(constRenderState&s)const{return!(*this==s);} +}; +}//namespaceshaders + +namespaced3d +{ +boolset_blend_factor(E3DCOLORcolor); + +boolsetstencil(uint32_tref); + +boolsetwire(boolin); + +boolset_depth_bounds(floatzmin,floatzmax); + +shaders::DriverRenderStateIdcreate_render_state(constshaders::RenderState&state); + +boolset_render_state(shaders::DriverRenderStateIdstate_id); + +voidclear_render_states(); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineboolset_blend_factor(E3DCOLORcolor){returnd3di.set_blend_factor(color);} +inlineboolsetstencil(uint32_tref){returnd3di.setstencil(ref);} +inlineboolsetwire(boolin){returnd3di.setwire(in);} +inlineboolset_depth_bounds(floatzmin,floatzmax){returnd3di.set_depth_bounds(zmin,zmax);} +inlineshaders::DriverRenderStateIdcreate_render_state(constshaders::RenderState&state){returnd3di.create_render_state(state);} +inlineboolset_render_state(shaders::DriverRenderStateIdstate_id){returnd3di.set_render_state(state_id);} +inlinevoidclear_render_states(){d3di.clear_render_states();} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__render_target_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__render_target_8h.xml new file mode 100644 index 000000000..28f8111a1 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__render_target_8h.xml @@ -0,0 +1,250 @@ + + + + dag_renderTarget.h + util/dag_inttypes.h + generic/dag_span.h + drv/3d/dag_resource.h + drv/3d/dag_decl.h + math/dag_e3dColor.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_renderPass.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RenderTarget + d3d + + + + DepthAccess + + RW + +For regular depth attachment. + + + + + + SampledRO + + + +For read-only depth attachment which can also be sampled as a texture in the same shader. IF YOU DON'T NEED TO SAMPLE THE DEPTH, USE z_write=false WITH DepthAccess::RW INSTEAD. Using this state will cause HiZ decompression on some hardware and split of renderpass with flush of tile data into memory in a TBR. + + + +Specifies the access mode for a depth attachment. + + + + + + + + + + + BaseTexture + typedef BaseTexture Texture + + Texture + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_inttypes.h> +#include<generic/dag_span.h> +#include<drv/3d/dag_resource.h> +#include<drv/3d/dag_decl.h> +#include<math/dag_e3dColor.h> + +classBaseTexture; +typedefBaseTextureTexture; + +enumclassDepthAccess +{ +RW, + +SampledRO +}; + +structRenderTarget +{ +BaseTexture*tex; +uint32_tmip_level; +uint32_tlayer; +}; + +namespaced3d +{ +boolcopy_from_current_render_target(BaseTexture*to_tex); + +boolclear_rt(constRenderTarget&rt,constResourceClearValue&clear_val={}); + +boolset_render_target(); + +boolset_depth(BaseTexture*tex,DepthAccessaccess); + +boolset_depth(BaseTexture*tex,intlayer,DepthAccessaccess); + +boolset_render_target(intrt_index,BaseTexture*,intfc,uint8_tlevel); + +boolset_render_target(intrt_index,BaseTexture*,uint8_tlevel); + +inlineboolset_render_target(BaseTexture*t,uint8_tlevel){returnset_render_target()&&set_render_target(0,t,level);} + +inlineboolset_render_target(BaseTexture*t,intfc,uint8_tlevel) +{ +returnset_render_target()&&set_render_target(0,t,fc,level); +} + +inlinevoidset_render_target(RenderTargetdepth,DepthAccessdepth_access,dag::ConstSpan<RenderTarget>colors) +{ +inti=0; +for(;i<colors.size()&&i<Driver3dRenderTarget::MAX_SIMRT;++i) +set_render_target(i,colors[i].tex,colors[i].mip_level); +for(;i<Driver3dRenderTarget::MAX_SIMRT;++i) +set_render_target(i,nullptr,0); + +set_depth(depth.tex,depth_access); +} + +inlinevoidset_render_target(RenderTargetdepth,DepthAccessdepth_access,conststd::initializer_list<RenderTarget>colors) +{ +set_render_target(depth,depth_access,dag::ConstSpan<RenderTarget>(colors.begin(),colors.end()-colors.begin())); +} + +voidget_render_target(Driver3dRenderTarget&out_rt); + +boolset_render_target(constDriver3dRenderTarget&rt); + +boolget_target_size(int&w,int&h); + +boolget_render_target_size(int&w,int&h,BaseTexture*rt_tex,uint8_tlevel=0); + + +boolclearview(intwhat,E3DCOLORc,floatz,uint32_tstencil); + +voidget_screen_size(int&w,int&h); + +Texture*get_backbuffer_tex(); + +Texture*get_secondary_backbuffer_tex(); + +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineboolcopy_from_current_render_target(BaseTexture*to_tex){returnd3di.copy_from_current_render_target(to_tex);} +inlineboolclear_rt(constRenderTarget&rt,constResourceClearValue&clear_val){returnd3di.clear_rt(rt,clear_val);} +inlineboolset_render_target(){returnd3di.set_render_target();} +inlineboolset_depth(BaseTexture*tex,DepthAccessaccess){returnd3di.set_depth(tex,access);} +inlineboolset_depth(BaseTexture*tex,intlayer,DepthAccessaccess){returnd3di.set_depth(tex,layer,access);} +inlineboolset_render_target(intrt_index,BaseTexture*t,intfc,uint8_tlevel) +{ +returnd3di.set_render_target(rt_index,t,fc,level); +} +inlineboolset_render_target(intrt_index,BaseTexture*t,uint8_tlevel){returnd3di.set_render_target(rt_index,t,level);} +inlinevoidget_render_target(Driver3dRenderTarget&out_rt){returnd3di.get_render_target(out_rt);} +inlineboolset_render_target(constDriver3dRenderTarget&rt){returnd3di.set_render_target(rt);} +inlineboolget_target_size(int&w,int&h){returnd3di.get_target_size(w,h);} +inlineboolget_render_target_size(int&w,int&h,BaseTexture*rt_tex,uint8_tlevel) +{ +returnd3di.get_render_target_size(w,h,rt_tex,level); +} +inlineboolclearview(intwhat,E3DCOLORc,floatz,uint32_tstencil){returnd3di.clearview(what,c,z,stencil);} +inlinevoidget_screen_size(int&w,int&h){d3di.get_screen_size(w,h);} +inlineTexture*get_backbuffer_tex(){returnd3di.get_backbuffer_tex();} +inlineTexture*get_secondary_backbuffer_tex(){returnd3di.get_secondary_backbuffer_tex();} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__res_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__res_8h.xml new file mode 100644 index 000000000..68b5c0f03 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__res_8h.xml @@ -0,0 +1,28 @@ + + + + dag_res.h + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +namespaced3d +{ +voidreserve_res_entries(boolstrict_max,intmax_tex,intmax_vs,intmax_ps,intmax_vdecl,intmax_vb,intmax_ib,intmax_stblk); + +voidget_max_used_res_entries(int&max_tex,int&max_vs,int&max_ps,int&max_vdecl,int&max_vb,int&max_ib,int&max_stblk); + +voidget_cur_used_res_entries(int&max_tex,int&max_vs,int&max_ps,int&max_vdecl,int&max_vb,int&max_ib,int&max_stblk); +}//namespaced3d + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__res_id_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__res_id_8h.xml new file mode 100644 index 000000000..596ce342e --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__res_id_8h.xml @@ -0,0 +1,200 @@ + + + + dag_resId.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_tex3d.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D3DRESID + DebugConverter< D3DRESID > + + + D3DRESID + typedef D3DRESID TEXTUREID + + TEXTUREID + +Alias for backward compatibility and readability. + + + + + + + + + + + constexpr D3DRESID + constexpr D3DRESID BAD_D3DRESID + + BAD_D3DRESID + +An invalid resource ID constant. + + + + + + + + + constexpr D3DRESID + constexpr D3DRESID BAD_TEXTUREID + + BAD_TEXTUREID + +Alias for backwards compatibility and readability. + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +classD3dResource; +classBaseTexture; +classSbuffer; +typedefBaseTextureTexture; +typedefBaseTextureCubeTexture; +typedefBaseTextureVolTexture; +typedefBaseTextureArrayTexture; + +classD3DRESID +{ +public: +constexprD3DRESID()=default; + +D3DRESID(constD3DRESID&rhs)=default; +D3DRESID(D3DRESID&&rhs)=default; +D3DRESID&operator=(constD3DRESID&)=default; +D3DRESID&operator=(D3DRESID&&)=default; + +constexprexplicitD3DRESID(unsignedh):handle(h){} +explicitoperatorunsigned()const{returnhandle;} +explicitoperatorbool()const{returnhandle!=INVALID_ID;} + + +booloperator==(constD3DRESID&rhs)const{returnhandle==rhs.handle;} +booloperator!=(constD3DRESID&rhs)const{returnhandle!=rhs.handle;} +booloperator<(constD3DRESID&rhs)const{returnhandle<rhs.handle;} +booloperator>(constD3DRESID&rhs)const{returnhandle>rhs.handle;} + +voidreset(){handle=INVALID_ID;} +unsignedindex()const{returnhandle>>GENERATION_BITS;} +unsignedgeneration()const{returnhandle&GENERATION_MASK;} +boolcheckMarkerBit()const{returngeneration()&1;} + +enum:unsigned +{ +INVALID_ID=0u, +INVALID_ID2=~1u, +GENERATION_BITS=12, +GENERATION_MASK=(1<<GENERATION_BITS)-1, +GENERATION_BITS_START=1, +GENERATION_BITS_STEP=2, +}; + +staticinlineD3DRESIDmake(unsignedindex,unsignedgen){returnD3DRESID((index<<GENERATION_BITS)|(gen&GENERATION_MASK));} +staticD3DRESIDfromIndex(unsignedindex); + +private: +unsignedhandle=INVALID_ID; +}; + +typedefD3DRESIDTEXTUREID; + + +#if(__cplusplus>=201703L)||(defined(_MSVC_LANG)&&_MSVC_LANG>=201703L) +inlineD3DRESIDconstexprBAD_D3DRESID; +#else +staticconstexprD3DRESIDBAD_D3DRESID;//-V1043 +#endif + +#if(__cplusplus>=201703L)||(defined(_MSVC_LANG)&&_MSVC_LANG>=201703L) +inlineD3DRESIDconstexprBAD_TEXTUREID; +#else +staticconstexprD3DRESIDBAD_TEXTUREID;//-V1043 +#endif + +template<typenameT> +structDebugConverter; +template<> +structDebugConverter<D3DRESID> +{ +staticunsignedgetDebugType(constD3DRESID&v){returnunsigned(v);} +}; + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__res_update_buffer_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__res_update_buffer_8h.xml new file mode 100644 index 000000000..33999fda4 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__res_update_buffer_8h.xml @@ -0,0 +1,86 @@ + + + + dag_resUpdateBuffer.h + util/dag_stdint.h + + + + + + + + + + + + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_stdint.h> + +classBaseTexture; + +namespaced3d +{ + +classResUpdateBuffer; + +ResUpdateBuffer*allocate_update_buffer_for_tex_region(BaseTexture*dest_base_texture,unsigneddest_mip,unsigneddest_slice, +unsignedoffset_x,unsignedoffset_y,unsignedoffset_z,unsignedwidth,unsignedheight,unsigneddepth); + +ResUpdateBuffer*allocate_update_buffer_for_tex(BaseTexture*dest_tex,intdest_mip,intdest_slice); + +voidrelease_update_buffer(ResUpdateBuffer*&rub); + +char*get_update_buffer_addr_for_write(ResUpdateBuffer*rub); + +size_tget_update_buffer_size(ResUpdateBuffer*rub); + +size_tget_update_buffer_pitch(ResUpdateBuffer*rub); + +size_tget_update_buffer_slice_pitch(ResUpdateBuffer*rub); + +boolupdate_texture_and_release_update_buffer(ResUpdateBuffer*&src_rub); + +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineResUpdateBuffer*allocate_update_buffer_for_tex_region(BaseTexture*dest_base_texture,unsigneddest_mip,unsigneddest_slice, +unsignedoffset_x,unsignedoffset_y,unsignedoffset_z,unsignedwidth,unsignedheight,unsigneddepth) +{ +returnd3di.allocate_update_buffer_for_tex_region(dest_base_texture,dest_mip,dest_slice,offset_x,offset_y,offset_z,width, +height,depth); +} + +inlineResUpdateBuffer*allocate_update_buffer_for_tex(BaseTexture*dest_tex,intdest_mip,intdest_slice) +{ +returnd3di.allocate_update_buffer_for_tex(dest_tex,dest_mip,dest_slice); +} +inlinevoidrelease_update_buffer(ResUpdateBuffer*&rub){d3di.release_update_buffer(rub);} +inlinechar*get_update_buffer_addr_for_write(ResUpdateBuffer*rub){returnd3di.get_update_buffer_addr_for_write(rub);} +inlinesize_tget_update_buffer_size(ResUpdateBuffer*rub){returnd3di.get_update_buffer_size(rub);} +inlinesize_tget_update_buffer_pitch(ResUpdateBuffer*rub){returnd3di.get_update_buffer_pitch(rub);} +inlinesize_tget_update_buffer_slice_pitch(ResUpdateBuffer*rub){returnd3di.get_update_buffer_slice_pitch(rub);} +inlineboolupdate_texture_and_release_update_buffer(ResUpdateBuffer*&src_rub) +{ +returnd3di.update_texture_and_release_update_buffer(src_rub); +} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__reset_device_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__reset_device_8h.xml new file mode 100644 index 000000000..996982ca8 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__reset_device_8h.xml @@ -0,0 +1,404 @@ + + + + dag_resetDevice.h + util/dag_preprocessor.h + + + + + + + + + + + + IDrv3DResetCB + IDrv3DDeviceLostCB + D3dResetQueue + + + REGISTER_D3D_BEFORE_RESET_FUNC + F + static D3dResetQueue DAG_CONCAT(AutoD3dResetFunc, __LINE__)(#F, &F, false) + + + + + + + + + + REGISTER_D3D_AFTER_RESET_FUNC + F + static D3dResetQueue DAG_CONCAT(AutoD3dResetFunc, __LINE__)(#F, &F, true) + + + + + + + + + + + + IDrv3DDeviceLostCB * + IDrv3DDeviceLostCB* ext_drv3d_device_lost_handler + + ext_drv3d_device_lost_handler + + + + + + + + + + bool + bool dagor_d3d_force_driver_reset + + dagor_d3d_force_driver_reset + + + + + + + + + + bool + bool dagor_d3d_force_driver_mode_reset + + dagor_d3d_force_driver_mode_reset + + + + + + + + + + bool + bool dagor_d3d_notify_fullscreen_state_restored + + dagor_d3d_notify_fullscreen_state_restored + + + + + + + + + + + + void + void set_3d_device_reset_callback + (IDrv3DResetCB *handler) + set_3d_device_reset_callback + + IDrv3DResetCB * + handler + + + + + + + + + + + void + void set_3d_device_lost_callback + (IDrv3DDeviceLostCB *handler) + set_3d_device_lost_callback + + IDrv3DDeviceLostCB * + handler + + + + + + + + + + + bool + bool check_and_restore_3d_device + () + check_and_restore_3d_device + +returns true if drawing is allowed (device is not lost) + + + + + + + + + void + void before_reset_3d_device + (bool full_reset) + before_reset_3d_device + + bool + full_reset + + + + + + + + + + + void + void after_reset_3d_device + (bool full_reset) + after_reset_3d_device + + bool + full_reset + + + + + + + + + + + void + void change_driver_reset_request + (bool &out_apply_after_reset_device, bool mode_reset=true) + change_driver_reset_request + + bool & + out_apply_after_reset_device + + + bool + mode_reset + true + + + + + + + + + + + void + void zero_reset_3d_device_counter + () + zero_reset_3d_device_counter + + + + + + + + + + void + void set_window_size_has_been_changed_programmatically + (bool value) + set_window_size_has_been_changed_programmatically + + bool + value + + + + + + + + + + + bool + bool is_window_size_has_been_changed_programmatically + () + is_window_size_has_been_changed_programmatically + + + + + + + + + + void + void on_window_resized_change_reset_request + () + on_window_resized_change_reset_request + + + + + + + + + + bool + bool is_window_resizing_by_mouse + () + is_window_resizing_by_mouse + + + + + + + + + + void + void set_driver_reset_pending_on_exit_sizing + () + set_driver_reset_pending_on_exit_sizing + + + + + + + + + + unsigned int + unsigned int get_d3d_reset_counter + () + get_d3d_reset_counter + + + + + + + + + + unsigned int + unsigned int get_d3d_full_reset_counter + () + get_d3d_full_reset_counter + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_preprocessor.h> + +structIDrv3DResetCB +{ +virtualvoidbeforeReset(boolfull_reset)=0; +virtualvoidafterReset(boolfull_reset)=0; +virtualvoidresetCounter(){} +virtualvoidwindowResized(){} +virtualvoidfullscreenStateRestored(){} +}; + +structIDrv3DDeviceLostCB +{ +virtualvoidonDeviceLost()=0; +}; + +externIDrv3DDeviceLostCB*ext_drv3d_device_lost_handler; + +voidset_3d_device_reset_callback(IDrv3DResetCB*handler); +voidset_3d_device_lost_callback(IDrv3DDeviceLostCB*handler); + +#if_TARGET_PC_WIN|_TARGET_ANDROID +boolcheck_and_restore_3d_device(); +#else +inlineboolcheck_and_restore_3d_device(){returntrue;} +#endif + +voidbefore_reset_3d_device(boolfull_reset); +voidafter_reset_3d_device(boolfull_reset); +voidchange_driver_reset_request(bool&out_apply_after_reset_device,boolmode_reset=true); +voidzero_reset_3d_device_counter(); + +voidset_window_size_has_been_changed_programmatically(boolvalue); +boolis_window_size_has_been_changed_programmatically(); +voidon_window_resized_change_reset_request(); + +externbooldagor_d3d_force_driver_reset; +externbooldagor_d3d_force_driver_mode_reset; +externbooldagor_d3d_notify_fullscreen_state_restored; + +boolis_window_resizing_by_mouse(); +voidset_driver_reset_pending_on_exit_sizing(); + +unsignedintget_d3d_reset_counter();//returnscurrentresetgeneration,never0 +unsignedintget_d3d_full_reset_counter();//returnscurrent'full'resetgeneration,never0 + +structD3dResetQueue +{ +typedefvoid(*reset_func)(boolfull_reset); + +constD3dResetQueue*next=nullptr;//single-linkedlist +reset_funcfunc=nullptr; +constchar*name=nullptr;//name + +D3dResetQueue(constchar*n,reset_funcf,booladd_to_after_reset):name(n),func(f) +{ +if(add_to_after_reset) +{ +next=tailAfterReset; +tailAfterReset=this; +} +else +{ +next=tailBeforeReset; +tailBeforeReset=this; +} +} + +staticD3dResetQueue*tailBeforeReset,*tailAfterReset; +staticvoidperform_reset_queue(constD3dResetQueue*q,boolfull_reset); +staticvoidperform_before_reset(boolfull_reset){perform_reset_queue(tailBeforeReset,full_reset);} +staticvoidperform_after_reset(boolfull_reset){perform_reset_queue(tailAfterReset,full_reset);} +}; + +#defineREGISTER_D3D_BEFORE_RESET_FUNC(F)staticD3dResetQueueDAG_CONCAT(AutoD3dResetFunc,__LINE__)(#F,&F,false) +#defineREGISTER_D3D_AFTER_RESET_FUNC(F)staticD3dResetQueueDAG_CONCAT(AutoD3dResetFunc,__LINE__)(#F,&F,true) + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__resource_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__resource_8h.xml new file mode 100644 index 000000000..4c0ab417b --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__resource_8h.xml @@ -0,0 +1,393 @@ + + + + dag_resource.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_interface_table.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_heap.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_renderTarget.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_driver.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_renderPass.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ResourceClearValue + + + ResourceClearValue + ResourceClearValue make_clear_value + (uint32_t r, uint32_t g, uint32_t b, uint32_t a) + make_clear_value + + uint32_t + r + + + uint32_t + g + + + uint32_t + b + + + uint32_t + a + + + + +Creates a ResourceClearValue object with the specified RGBA values. + + +r + + +The red component of the clear value. + + + + +g + + +The green component of the clear value. + + + + +b + + +The blue component of the clear value. + + + + +a + + +The alpha component of the clear value. + + + +The created ResourceClearValue object. + + + + + + + + + ResourceClearValue + ResourceClearValue make_clear_value + (int32_t r, int32_t g, int32_t b, int32_t a) + make_clear_value + + int32_t + r + + + int32_t + g + + + int32_t + b + + + int32_t + a + + + + +Creates a ResourceClearValue object with the specified RGBA values. + + +r + + +The red component of the clear value. + + + + +g + + +The green component of the clear value. + + + + +b + + +The blue component of the clear value. + + + + +a + + +The alpha component of the clear value. + + + +The created ResourceClearValue object. + + + + + + + + + ResourceClearValue + ResourceClearValue make_clear_value + (float r, float g, float b, float a) + make_clear_value + + float + r + + + float + g + + + float + b + + + float + a + + + + +Creates a ResourceClearValue object with the specified RGBA values. + + +r + + +The red component of the clear value. + + + + +g + + +The green component of the clear value. + + + + +b + + +The blue component of the clear value. + + + + +a + + +The alpha component of the clear value. + + + +The created ResourceClearValue object. + + + + + + + + + ResourceClearValue + ResourceClearValue make_clear_value + (float d, uint8_t s) + make_clear_value + + float + d + + + uint8_t + s + + + + +Creates a ResourceClearValue object with the specified Depth/Stencil values. + + +d + + +The depth component of the clear value. + + + + +s + + +The stencil component of the clear value. + + + +The created ResourceClearValue object. + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +unionResourceClearValue +{ +struct +{ +uint32_tasUint[4]; +}; +struct +{ +int32_tasInt[4]; +}; +struct +{ +floatasFloat[4]; +}; +struct +{ +floatasDepth; +uint8_tasStencil; +}; +}; + +inlineResourceClearValuemake_clear_value(uint32_tr,uint32_tg,uint32_tb,uint32_ta) +{ +ResourceClearValueresult; +result.asUint[0]=r; +result.asUint[1]=g; +result.asUint[2]=b; +result.asUint[3]=a; +returnresult; +} + +inlineResourceClearValuemake_clear_value(int32_tr,int32_tg,int32_tb,int32_ta) +{ +ResourceClearValueresult; +result.asInt[0]=r; +result.asInt[1]=g; +result.asInt[2]=b; +result.asInt[3]=a; +returnresult; +} + +inlineResourceClearValuemake_clear_value(floatr,floatg,floatb,floata) +{ +ResourceClearValueresult; +result.asFloat[0]=r; +result.asFloat[1]=g; +result.asFloat[2]=b; +result.asFloat[3]=a; +returnresult; +} + +inlineResourceClearValuemake_clear_value(floatd,uint8_ts) +{ +ResourceClearValueresult; +result.asDepth=d; +result.asStencil=s; +returnresult; +} + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__resource_checker_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__resource_checker_8h.xml new file mode 100644 index 000000000..40e63e7fc --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__resource_checker_8h.xml @@ -0,0 +1,124 @@ + + + + dag_resourceChecker.h + drv/3d/dag_consts.h + osApiWrappers/dag_atomic.h + util/dag_globDef.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_buffers.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ResourceChecker + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_consts.h> +#include<osApiWrappers/dag_atomic.h> +#include<util/dag_globDef.h> + +structResourceChecker +{ +public: +#ifDAGOR_DBGLEVEL>0 +staticvoidinit(); +staticvoidreport(); +#else +staticvoidinit(){} +staticvoidreport(){} +#endif +protected: +voidcheckLockParams(uint32_toffset,uint32_tsize,intflags,intbufFlags) +{ +G_UNUSED(offset); +G_UNUSED(size); +G_UNUSED(flags); +G_UNUSED(bufFlags); +#ifDAGOR_DBGLEVEL>0 +interlocked_add(uploaded_total,size); +if((bufFlags&SBCF_FRAMEMEM)==0) +return; + +interlocked_add(uploaded_framemem,size); + +//thisismaxsizeofsingleupload,hastofitinternalringbufferchunksize +//otherwiseitsgonnabealwaysallocated/freed.couldbelogerrinsteadofassert +constuint32_tmax_dynamic_buffer_size=2<<20; +G_UNUSED(max_dynamic_buffer_size); +G_ASSERT(offset==0); +G_ASSERT(size<=max_dynamic_buffer_size); +G_ASSERT(bufFlags&SBCF_DYNAMIC); +G_ASSERT((bufFlags&SBCF_BIND_UNORDERED)==0); +G_ASSERT(flags&VBLOCK_DISCARD); +G_ASSERT((flags&(VBLOCK_READONLY|VBLOCK_NOOVERWRITE))==0); +#endif +} + +#ifDAGOR_DBGLEVEL>0 +staticuint32_tuploaded_framemem; +staticuint32_tuploaded_total; +staticuint32_tuploaded_framemem_limit; +staticuint32_tuploaded_total_limit; +#endif +}; + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__rw_resource_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__rw_resource_8h.xml new file mode 100644 index 000000000..ac2cfaee7 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__rw_resource_8h.xml @@ -0,0 +1,70 @@ + + + + dag_rwResource.h + util/dag_inttypes.h + + + + + + + + + + + + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_inttypes.h> + +classBaseTexture; +classSbuffer; + +namespaced3d +{ +boolset_rwtex(uint32_tshader_stage,uint32_tslot,BaseTexture*tex,uint32_tface,uint32_tmip_level,boolas_uint=false); + +boolclear_rwtexi(BaseTexture*tex,constuint32_tval[4],uint32_tface,uint32_tmip_level); + +boolclear_rwtexf(BaseTexture*tex,constfloatval[4],uint32_tface,uint32_tmip_level); + +boolclear_rwbufi(Sbuffer*buf,constuint32_tval[4]); + +boolclear_rwbuff(Sbuffer*buf,constfloatval[4]); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineboolset_rwtex(uint32_tshader_stage,uint32_tslot,BaseTexture*tex,uint32_tface,uint32_tmip,boolas_uint) +{ +returnd3di.set_rwtex(shader_stage,slot,tex,face,mip,as_uint); +} +inlineboolclear_rwtexi(BaseTexture*tex,constuint32_tval[4],uint32_tface,uint32_tmip) +{ +returnd3di.clear_rwtexi(tex,val,face,mip); +} +inlineboolclear_rwtexf(BaseTexture*tex,constfloatval[4],uint32_tface,uint32_tmip) +{ +returnd3di.clear_rwtexf(tex,val,face,mip); +} +inlineboolclear_rwbufi(Sbuffer*tex,constuint32_tval[4]){returnd3di.clear_rwbufi(tex,val);} +inlineboolclear_rwbuff(Sbuffer*tex,constfloatval[4]){returnd3di.clear_rwbuff(tex,val);} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__sampler_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__sampler_8h.xml new file mode 100644 index 000000000..6ab38dcbb --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__sampler_8h.xml @@ -0,0 +1,327 @@ + + + + dag_sampler.h + drv/3d/dag_consts_base.h + drv/3d/dag_samplerHandle.h + math/dag_color.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_bindless.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_tex3d.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d::BorderColor + d3d::SamplerInfo + d3d + + + EQU + field + (this->field == rhs.field) + + + + + + + + + + CMP + field + if (this->field != rhs.field) return field < rhs.field; + + + + + + + + + + FOR_EACH_FIELD + op + sep + op(mip_map_mode) \ + sep op(filter_mode) \ + sep op(address_mode_u) \ + sep op(address_mode_v) \ + sep op(address_mode_w) \ + sep op(border_color) \ + sep op(anisotropic_max) \ + sep op(mip_map_bias) + + + + + + + + + + + + + @47 + + TEXMIPMAP_DEFAULT + = 0 + +driver default + + + + + + TEXMIPMAP_NONE + = 1 + +no mipmapping + + + + + + TEXMIPMAP_POINT + = 2 + +point mipmapping + + + + + + TEXMIPMAP_LINEAR + = 3 + +linear mipmapping + + + + + +MipMapMode enum. + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_consts_base.h> +#include<drv/3d/dag_samplerHandle.h> +#include<math/dag_color.h> + +// +//Thesefamilesareplatformspecificandaredefinedindag_3dConst*.hheader: +//TEXADDR_ +//TEXFILTER_ +// + +enum +{ +TEXMIPMAP_DEFAULT=0, +TEXMIPMAP_NONE=1, +TEXMIPMAP_POINT=2, +TEXMIPMAP_LINEAR=3, +}; + +namespaced3d +{ +enumclassMipMapMode:uint32_t +{ +Default=TEXMIPMAP_DEFAULT, +Disabled=TEXMIPMAP_NONE, +Point=TEXMIPMAP_POINT, +Linear=TEXMIPMAP_LINEAR, +}; + +enumclassFilterMode:uint32_t +{ +Default=TEXFILTER_DEFAULT, +Disabled=TEXFILTER_NONE, +Point=TEXFILTER_POINT, +Linear=TEXFILTER_LINEAR, +Best=TEXFILTER_BEST, +Compare=TEXFILTER_COMPARE, +}; + +enumclassAddressMode:uint32_t +{ +Wrap=TEXADDR_WRAP, +Mirror=TEXADDR_MIRROR, +Clamp=TEXADDR_CLAMP, +Border=TEXADDR_BORDER, +MirrorOnce=TEXADDR_MIRRORONCE, +}; + +structBorderColor +{ +usingUnderlyingT=uint32_t; +enumclassColor:UnderlyingT +{ +TransparentBlack=0x00000000, +OpaqueBlack=0xFF000000, +OpaqueWhite=0xFFFFFFFF, +}color; +BorderColor(Colorcolor=Color::TransparentBlack):color(color){} +operatorE3DCOLOR()const{returnstatic_cast<E3DCOLOR>(eastl::to_underlying(color));}; +operatorUnderlyingT()const{returneastl::to_underlying(color);}; +}; + +structSamplerInfo +{ +MipMapModemip_map_mode=MipMapMode::Default; +FilterModefilter_mode=FilterMode::Default; +AddressModeaddress_mode_u=AddressMode::Wrap; +AddressModeaddress_mode_v=AddressMode::Wrap; +AddressModeaddress_mode_w=AddressMode::Wrap; +BorderColorborder_color; +floatanisotropic_max=1.f; +floatmip_map_bias=0.f; + +//clang-formatoff + +#defineEQU(field)(this->field==rhs.field) +#defineCMP(field)if(this->field!=rhs.field)returnfield<rhs.field; +#defineFOR_EACH_FIELD(op,sep)\ +op(mip_map_mode)\ +sepop(filter_mode)\ +sepop(address_mode_u)\ +sepop(address_mode_v)\ +sepop(address_mode_w)\ +sepop(border_color)\ +sepop(anisotropic_max)\ +sepop(mip_map_bias) + +booloperator==(constSamplerInfo&rhs)const{returnFOR_EACH_FIELD(EQU,&&);} +booloperator!=(constSamplerInfo&rhs)const{return!(*this==rhs);} +booloperator<(constSamplerInfo&rhs)const{FOR_EACH_FIELD(CMP,;);returnfalse;} + +//clang-formaton + +#undefEQU +#undefCMP +#undefFOR_EACH_FIELD +}; + +SamplerHandlerequest_sampler(constSamplerInfo&sampler_info); + +voidset_sampler(unsignedshader_stage,unsignedslot,SamplerHandlesampler); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineSamplerHandlerequest_sampler(constSamplerInfo&sampler_info){returnd3di.request_sampler(sampler_info);} +inlinevoidset_sampler(unsignedshader_stage,unsignedslot,SamplerHandlesampler){d3di.set_sampler(shader_stage,slot,sampler);} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__sampler_handle_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__sampler_handle_8h.xml new file mode 100644 index 000000000..c37c11e3f --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__sampler_handle_8h.xml @@ -0,0 +1,123 @@ + + + + dag_samplerHandle.h + util/dag_stdint.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_interface_table.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_sampler.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_stdint.h> + +namespaced3d +{ +//Havealways64bits-thisallowsthedriverstousepointers,packeddatastructuresofAPIobjectstobereturned +enumclassSamplerHandle:uint64_t +{ +Invalid=0x0, +}; +inlineconstSamplerHandleINVALID_SAMPLER_HANDLE=SamplerHandle::Invalid; +}//namespaced3d + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__shader_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__shader_8h.xml new file mode 100644 index 000000000..fc2149cf5 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__shader_8h.xml @@ -0,0 +1,118 @@ + + + + dag_shader.h + drv/3d/dag_consts.h + util/dag_inttypes.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_consts.h> +#include<util/dag_inttypes.h> + +namespaced3d +{ +PROGRAMcreate_program(VPROGvprog,FSHADERfsh,VDECLvdecl,unsigned*strides=nullptr,unsignedstreams=0); + +PROGRAMcreate_program(constuint32_t*vpr_native,constuint32_t*fsh_native,VDECLvdecl,unsigned*strides=nullptr, +unsignedstreams=0); + +PROGRAMcreate_program_cs(constuint32_t*cs_native,CSPreloadedpreloaded); + +boolset_program(PROGRAMprogram); + +voiddelete_program(PROGRAMprogram); + +VPROGcreate_vertex_shader(constuint32_t*native_code); + +voiddelete_vertex_shader(VPROGvs); + +FSHADERcreate_pixel_shader(constuint32_t*native_code); + +voiddelete_pixel_shader(FSHADERps); + +PROGRAMget_debug_program(); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlinePROGRAMcreate_program(VPROGvprog,FSHADERfsh,VDECLvdecl,unsigned*strides,unsignedstreams) +{ +returnd3di.create_program_0(vprog,fsh,vdecl,strides,streams); +} + +inlinePROGRAMcreate_program(constuint32_t*vpr_native,constuint32_t*fsh_native,VDECLvdecl,unsigned*strides,unsignedstreams) +{ +returnd3di.create_program_1(vpr_native,fsh_native,vdecl,strides,streams); +} + +inlinePROGRAMcreate_program_cs(constuint32_t*cs_native,CSPreloadedpreloaded) +{ +returnd3di.create_program_cs(cs_native,preloaded); +} + +inlineboolset_program(PROGRAMp){returnd3di.set_program(p);} + +inlinevoiddelete_program(PROGRAMp){returnd3di.delete_program(p);} + +inlineVPROGcreate_vertex_shader(constuint32_t*native_code){returnd3di.create_vertex_shader(native_code);} + +inlinevoiddelete_vertex_shader(VPROGvs){returnd3di.delete_vertex_shader(vs);} + +inlineFSHADERcreate_pixel_shader(constuint32_t*native_code){returnd3di.create_pixel_shader(native_code);} + +inlinevoiddelete_pixel_shader(FSHADERps){returnd3di.delete_pixel_shader(ps);} + +inlinePROGRAMget_debug_program(){returnd3di.get_debug_program();} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__shader_constants_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__shader_constants_8h.xml new file mode 100644 index 000000000..337e1f587 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__shader_constants_8h.xml @@ -0,0 +1,162 @@ + + + + dag_shaderConstants.h + debug/dag_assert.h + util/dag_globDef.h + drv/3d/dag_consts.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<debug/dag_assert.h> +#include<util/dag_globDef.h> + +#include<drv/3d/dag_consts.h> + +classSbuffer; + +namespaced3d +{ +boolset_const(unsignedstage,unsignedreg_base,constvoid*data,unsignednum_regs); + +inlineboolset_vs_const(unsignedreg_base,constvoid*data,unsignednum_regs) +{ +returnset_const(STAGE_VS,reg_base,data,num_regs); +} + +inlineboolset_ps_const(unsignedreg_base,constvoid*data,unsignednum_regs) +{ +returnset_const(STAGE_PS,reg_base,data,num_regs); +} + +inlineboolset_cs_const(unsignedreg_base,constvoid*data,unsignednum_regs) +{ +returnset_const(STAGE_CS,reg_base,data,num_regs); +} + +inlineboolset_vs_const1(unsignedreg,floatv0,floatv1,floatv2,floatv3) +{ +floatv[4]={v0,v1,v2,v3}; +returnset_vs_const(reg,v,1); +} + +inlineboolset_ps_const1(unsignedreg,floatv0,floatv1,floatv2,floatv3) +{ +floatv[4]={v0,v1,v2,v3}; +returnset_ps_const(reg,v,1); +} + + +boolset_immediate_const(unsignedstage,constuint32_t*data,unsignednum_words); + +boolset_const_buffer(unsignedstage,unsignedslot,constfloat*data,unsignednum_regs); + +boolset_const_buffer(unsignedstage,unsignedslot,Sbuffer*buffer,uint32_tconsts_offset=0,uint32_tconsts_size=0); + +intset_vs_constbuffer_size(intrequired_size); + +intset_cs_constbuffer_size(intrequired_size); + +inlineboolset_cb0_data(unsignedstage,constfloat*data,unsignednum_regs) +{ +#if_TARGET_C1|_TARGET_C2 + +#else +switch(stage) +{ +caseSTAGE_CS:returnset_cs_const(0,data,num_regs); +caseSTAGE_PS:returnset_ps_const(0,data,num_regs); +caseSTAGE_VS:returnset_vs_const(0,data,num_regs); +default:G_ASSERTF(0,"Stage%dunsupported",stage);returnfalse; +}; +#endif +} + +inlinevoidrelease_cb0_data(unsignedstage) +{ +#if_TARGET_C1|_TARGET_C2 + +#else +G_UNUSED(stage); +#endif +} + +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineboolset_const(unsignedstage,unsignedreg_base,constvoid*data,unsignednum_regs) +{ +returnd3di.set_const(stage,reg_base,data,num_regs); +} + +inlineboolset_immediate_const(unsignedstage,constuint32_t*data,unsignednum_words) +{ +returnd3di.set_immediate_const(stage,data,num_words); +} + +inlineintset_vs_constbuffer_size(intrequired_size){returnd3di.set_vs_constbuffer_size(required_size);} +inlineintset_cs_constbuffer_size(intrequired_size){returnd3di.set_cs_constbuffer_size(required_size);} + +inlineboolset_const_buffer(unsignedstage,unsignedslot,Sbuffer*buffer,uint32_tconsts_offset,uint32_tconsts_size) +{ +returnd3di.set_const_buffer(stage,slot,buffer,consts_offset,consts_size); +} + +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__shader_library_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__shader_library_8h.xml new file mode 100644 index 000000000..d2ebb48f2 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__shader_library_8h.xml @@ -0,0 +1,60 @@ + + + + dag_shaderLibrary.h + drv/3d/dag_shaderLibraryObject.h + + + + + + + + + + + + + + + + + + + + + + + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_shaderLibraryObject.h> + +namespaced3d +{ +ShaderLibrarycreate_shader_library(constShaderLibraryCreateInfo&slci); +voiddestroy_shader_library(ShaderLibrarylibrary); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> + +namespaced3d +{ +inlineShaderLibrarycreate_shader_library(constShaderLibraryCreateInfo&slci){returnd3di.create_shader_library(slci);} +inlinevoiddestroy_shader_library(ShaderLibrarylibrary){d3di.destroy_shader_library(library);} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__shader_library_object_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__shader_library_object_8h.xml new file mode 100644 index 000000000..a9ce7191a --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__shader_library_object_8h.xml @@ -0,0 +1,112 @@ + + + + dag_shaderLibraryObject.h + util/dag_inttypes.h + generic/dag_span.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_interface_table.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_shaderLibrary.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ShaderLibraryCreateInfo + ShaderInLibraryReference + + + ShaderLibraryType * + using ShaderLibrary = ShaderLibraryType * + + ShaderLibrary + +Shader library object handle type. + + + + + + + + + + + constexpr ShaderLibrary + constexpr ShaderLibrary InvalidShaderLibrary + + InvalidShaderLibrary + = nullptr + +Value of a invalid handle to ShaderLibrary object, eg NULL. + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_inttypes.h> +#include<generic/dag_span.h> + +structShaderLibraryType; +usingShaderLibrary=ShaderLibraryType*; +inlineconstexprShaderLibraryInvalidShaderLibrary=nullptr; + +structShaderLibraryCreateInfo +{ +constchar*debugName=nullptr; +dag::ConstSpan<constchar*>nameTable; +dag::ConstSpan<constuint8_t>driverBinary; +boolmayBeUsedByExpandablePipeline=false; +}; + +structShaderInLibraryReference +{ +ShaderLibrarylibrary; +uint32_tindex; +}; + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__shader_model_version_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__shader_model_version_8h.xml new file mode 100644 index 000000000..f22d3455a --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__shader_model_version_8h.xml @@ -0,0 +1,683 @@ + + + + dag_shaderModelVersion.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_consts.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d::shadermodel::AnyVersion + d3d::shadermodel::matcher::EqualCompare + d3d::shadermodel::matcher::BasicMap + d3d::shadermodel::matcher::Map + d3d::shadermodel::Version + d3d::shadermodel::VersionWithName + d3d::shadermodel::VersionConstant + d3d::shadermodel::VersionList + d3d::shadermodel::VersionRangeIterator + d3d::shadermodel::VersionRange< VersionList< Versions... > > + DebugConverter< d3d::shadermodel::VersionWithName > + DebugConverter< d3d::shadermodel::Version > + DebugConverter< d3d::shadermodel::VersionConstant< Major, Minor > > + d3d + d3d::shadermodel + d3d::shadermodel::matcher + + + constexpr d3d::shadermodel::Version + constexpr d3d::shadermodel::Version operator""_sm + (const char *text) + operator""_sm + + const char * + text + + + + +User literal operator for _sm to generate shader model versions. This is a raw operator, valid input is <digit>.<digit>, any other literals will result in undefined behavior. text Literal text to process. Format has to be <digit>.<digit> A valid version value should the input match the format. Otherwise undefined behavior. + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +namespaced3d +{ +namespaceshadermodel +{ +structAnyVersion +{}; +namespacematcher +{ +template<typenameT> +structEqualCompare +{ +template<typenameOT> +staticboolcompare(constT&l,constOT&r) +{ +returnl==r; +} +}; +template<typenameV,typenameT,typenameFinalMapType,typenameCmp=EqualCompare<V>> +classBasicMap:protectedCmp +{ +Vvalue{}; +boolwasMatched=false; +alignas(alignof(T))unsignedcharmemory[sizeof(T)];//-V730 +T&object(){return*(T*)&memory[0];} +voidcMove(boolshould_construct,T&&v) +{ +if(!should_construct) +return; +if(wasMatched) +return; +::new(&object())T{(T&&)v}; +wasMatched=true; +} +template<typenameC> +voidcContruct(boolshould_construct,C&&generator) +{ +if(!should_construct) +return; +if(wasMatched) +return; +::new(&object())T{generator()}; +wasMatched=true; +} +template<typename...Vs> +voidcEmplace(boolshould_construct,Vs&&...vs) +{ +if(!should_construct) +return; +if(wasMatched) +return; +::new(&object())T{(Vs&&)vs...}; +wasMatched=true; +} + +public: +BasicMap()=default; +BasicMap(constBasicMap&)=delete; +BasicMap(BasicMap&&other):value{(V&&)other.value},wasMatched{other.wasMatched}//-V730 +{ +if(wasMatched) +{ +::new(&object())T{(T&&)other.object()}; +} +} +BasicMap&operator=(constBasicMap&)=delete; +BasicMap&operator=(BasicMap&&)=delete; +BasicMap(constV&v):value{v}{}//-V730 +template<typenameOV> +BasicMap(constV&v,constOV&cmp,T&&t):value{v}//-V730 +{ +cMove(this->compare(value,cmp),(T&&)t); +} +template<typenameOV,typenameC> +BasicMap(constV&v,constOV&cmp,C&&c):value{v}//-V730 +{ +cContruct(this->compare(value,cmp),(C&&)c); +} +template<typenameOV,typename...Vs> +BasicMap(constV&v,constOV&cmp,Vs&&...vs):value{v}//-V730 +{ +cEmplace(this->compare(value,cmp),(Vs&&)vs...); +} +template<typenameOV> +BasicMap&map(constOV&cmp,T&&t) +{ +cMove(this->compare(value,cmp),(T&&)t); +return*this; +} +template<typenameOV,typenameC> +BasicMap&map(constOV&cmp,C&&c) +{ +cContruct(this->compare(value,cmp),(C&&)c); +return*this; +} +template<typenameOV,typename...Vs> +BasicMap&map(constOV&cmp,Vs&&...vs) +{ +cContruct(this->compare(value,cmp),(Vs&&)vs...); +return*this; +} +T&&map(constFinalMapType&cmp,T&&t) +{ +(void)cmp; +if(wasMatched) +{ +return(T&&)object(); +} +return(T&&)t; +} +template<typenameC> +T&&map(constFinalMapType&cmp,C&&c) +{ +(void)cmp; +cContruct(true,(C&&)c); +return(T&&)object(); +} +template<typename...Vs> +T&&map(constFinalMapType&cmp,Vs&&...vs) +{ +(void)cmp; +cEmplace(this->compare(value,cmp),(Vs&&)vs...); +return(T&&)object(); +} +boolget(T&o) +{ +if(wasMatched) +{ +o=(T&&)object(); +} +returnwasMatched; +} +template<typenameC> +boolget(C&&c) +{ +if(wasMatched) +{ +c((T&&)object()); +} +returnwasMatched; +} +}; +template<typenameT,typenameV> +classMap:protectedBasicMap<V,T,AnyVersion> +{ +usingBaseType=BasicMap<V, T, AnyVersion>; + +public: +usingBaseType::BaseType; +usingBaseType::map; +}; +}//namespacematcher +structVersion +{ +unsignedintmajor:16; +unsignedintminor:16; +constexprVersion():major{0},minor{0}{} +constexprVersion(unsignedintma,unsignedintmi):major{ma},minor{mi}{} +constexprVersion(constAnyVersion&v):major{0xFFff},minor{0xFFff}{(void)v;} +template<typenameT> +matcher::Map<T, Version>map(constVersion&version,T&&value)const +{ +return{*this,version,(T&&)value}; +} +template<unsignedintN> +matcher::Map<const char *, Version>map(constVersion&version,constchar(&str)[N])const +{ +return{*this,version,str}; +} +constexprboolsupports(Versionother)const{return(major>other.major)||((major==other.major)&&(minor>=other.minor));} +}; +structVersionWithName:Version +{ +constchar*versionName; +constchar*psName; +}; +template<unsignedintMajorVersion,unsignedintMinorVersion> +structVersionConstant +{ +staticconstexprunsignedintmajor=MajorVersion; +staticconstexprunsignedintminor=MinorVersion; +staticconstexprcharas_string[4]={'0'+MajorVersion,'.','0'+MinorVersion,'\0'}; +staticconstexprcharas_ps_string[5]={'p','s','0'+MajorVersion,'0'+MinorVersion,'\0'}; +constexproperatorVersion()const{return{major,minor};} +operatorVersionWithName()const{return{{major,minor},as_string,as_ps_string};} +template<typenameT> +matcher::Map<T, Version>map(constVersion&version,T&&value)const +{ +return{*this,version,(T&&)value}; +} +template<unsignedintN> +matcher::Map<const char *, Version>map(constVersion&version,constchar(&str)[N])const +{ +return{*this,version,str}; +} +constexprboolsupports(Versionother)const +{ +return(major>other.major)||((major==other.major)&&(minor>=other.minor));//-V560 +} +}; +constexprbooloperator==(constVersion&l,constVersion&r){returnl.major==r.major&&l.minor==r.minor;} +constexprbooloperator!=(constVersion&l,constVersion&r){return!(l==r);} +constexprbooloperator<(constVersion&l,constVersion&r) +{ +returnl.major<r.major||((l.major==r.major)&&l.minor<r.minor); +} +constexprbooloperator>(constVersion&l,constVersion&r){returnr<l;} +constexprbooloperator<=(constVersion&l,constVersion&r){returnl==r||l<r;} +constexprbooloperator>=(constVersion&l,constVersion&r){returnl==r||l>r;} +constexprbooloperator==(constAnyVersion&l,constVersion&r) +{ +(void)l; +(void)r; +returntrue; +} +constexprbooloperator==(constVersion&l,constAnyVersion&r) +{ +(void)l; +(void)r; +returntrue; +} +constexprbooloperator!=(constAnyVersion&l,constVersion&r) +{ +(void)l; +(void)r; +returnfalse; +} +constexprbooloperator!=(constVersion&l,constAnyVersion&r) +{ +(void)l; +(void)r; +returnfalse; +} +constexprbooloperator>(constAnyVersion&l,constVersion&r) +{ +(void)l; +(void)r; +returntrue; +} +constexprbooloperator>(constVersion&l,constAnyVersion&r) +{ +(void)l; +(void)r; +returnfalse; +} +constexprbooloperator<(constAnyVersion&l,constVersion&r) +{ +(void)l; +(void)r; +returnfalse; +} +constexprbooloperator<(constVersion&l,constAnyVersion&r) +{ +(void)l; +(void)r; +returntrue; +} +constexprbooloperator>=(constAnyVersion&l,constVersion&r){returnl==r||l>r;} +constexprbooloperator>=(constVersion&l,constAnyVersion&r){returnl==r||l>r;} +constexprbooloperator<=(constAnyVersion&l,constVersion&r){returnl==r||l<r;} +constexprbooloperator<=(constVersion&l,constAnyVersion&r){returnl==r||l<r;} +template<unsignedintmj1,unsignedintmi1,unsignedintmj2,unsignedintmi2> +constexprbooloperator==(constVersionConstant<mj1, mi1>&l,constVersionConstant<mj2, mi2>&r) +{ +(void)l; +(void)r; +returnmj1==mj2&&mi1==mi2; +} +template<unsignedintmj1,unsignedintmi1,unsignedintmj2,unsignedintmi2> +constexprbooloperator!=(constVersionConstant<mj1, mi1>&l,constVersionConstant<mj2, mi2>&r) +{ +return!(l==r); +} +template<unsignedintmj1,unsignedintmi1,unsignedintmj2,unsignedintmi2> +constexprbooloperator<(constVersionConstant<mj1, mi1>&l,constVersionConstant<mj2, mi2>&r) +{ +(void)l; +(void)r; +returnmj1<mj2||((mj1==mj2)&&mi1<mi2); +} +template<unsignedintmj1,unsignedintmi1,unsignedintmj2,unsignedintmi2> +constexprbooloperator>(constVersionConstant<mj1, mi1>&l,constVersionConstant<mj2, mi2>&r) +{ +returnr<l; +} +template<unsignedintmj1,unsignedintmi1,unsignedintmj2,unsignedintmi2> +constexprbooloperator<=(constVersionConstant<mj1, mi1>&l,constVersionConstant<mj2, mi2>&r) +{ +returnl==r||l<r; +} +template<unsignedintmj1,unsignedintmi1,unsignedintmj2,unsignedintmi2> +constexprbooloperator>=(constVersionConstant<mj1, mi1>&l,constVersionConstant<mj2, mi2>&r) +{ +returnl==r||l>r; +} +template<typename...Versions> +structVersionList +{ +staticconstexprautosize=sizeof...(Versions); +}; +template<typenameA,typenameB> +inlineconstexprautomax(VersionList<A, B>) +{ +constexprAa; +constexprBb; +ifconstexpr(a>b) +{ +returna; +} +else +{ +returnb; +} +} +template<typenameA,typenameB,typenameC,typename...Versions> +inlineconstexprautomax(VersionList<A, B, C, Versions...>) +{ +constexprAa; +constexprautob=max(VersionList<B, C, Versions...>{}); +ifconstexpr(a>b) +{ +returna; +} +else +{ +returnb; +} +} +template<typenameA,typenameB> +inlineconstexprautomin(VersionList<A, B>l) +{ +(void)l; +constexprAa; +constexprBb; +ifconstexpr(a<b) +{ +returna; +} +else +{ +returnb; +} +} +template<typenameA,typenameB,typenameC,typename...Versions> +inlineconstexprautomin(VersionList<A, B, C, Versions...>l) +{ +(void)l; +constexprAa; +constexprautob=min(VersionList<B, C, Versions...>{}); +ifconstexpr(a<b) +{ +returna; +} +else +{ +returnb; +} +} +template<typenameVC,typename...Vs> +inlineunsignedintindex_of(VersionList<Vs...>l,VCcurrent) +{ +(void)l; +staticconstVCvalueTable[]={Vs{}...}; +for(unsignedinti=0;i<sizeof...(Vs);++i) +{ +if(valueTable[i]==current) +{ +returni; +} +} +returnsizeof...(Vs); +} +template<typenameR,typename...Vs> +inlineRat(VersionList<Vs...>l,intindex) +{ +(void)l; +staticconstRvalueTable[]={Vs{}...}; +returnindex>=0&&index<sizeof...(Vs)?valueTable[index]:R{}; +} +template<typenameV,typenameVersionList> +classVersionRangeIterator +{ +intindex; + +public: +constexprVersionRangeIterator()=default; +constexprVersionRangeIterator(constVersionRangeIterator&)=default; +constexprVersionRangeIterator(intidx):index{idx}{} +Voperator*()const{returnat<V>(VersionList{},index);} +VersionRangeIterator&operator++() +{ +--index; +return*this; +} +constexprVersionRangeIteratoroperator++(int)const{return{index-1};} +VersionRangeIterator&operator--() +{ +++index; +return*this; +} +constexprVersionRangeIteratoroperator--(int)const{return{index+1};} +friendconstexprbooloperator==(constVersionRangeIterator&l,constVersionRangeIterator&r){returnl.index==r.index;} +friendconstexprbooloperator!=(constVersionRangeIterator&l,constVersionRangeIterator&r){return!(l==r);} +}; +template<typenameList> +structVersionRange; +template<typename...Versions> +structVersionRange<VersionList<Versions...>> +{ +usingListOfVersions=VersionList<Versions...>; +usingIterator=VersionRangeIterator<VersionWithName,VersionList<Versions...>>; +Iteratorbegin()const{return{ListOfVersions::size-1};} +Iteratorcbegin()const{returnbegin();} +Iteratorend()const{return{-1};} +Iteratorcend()const{returnend();} +autosize()const{returnListOfVersions::size;} +}; +}//namespaceshadermodel +inlineconstexprshadermodel::VersionConstant<0,0>smNone; +inlineconstexprshadermodel::VersionConstant<4,0>sm40; +inlineconstexprshadermodel::VersionConstant<4,1>sm41; +inlineconstexprshadermodel::VersionConstant<5,0>sm50; +inlineconstexprshadermodel::VersionConstant<6,0>sm60; +inlineconstexprshadermodel::VersionConstant<6,6>sm66; +inlineconstexprshadermodel::AnyVersionsmAny; +namespaceshadermodel +{ +usingAllVersionsList=VersionList<decltype(sm40),decltype(sm41),decltype(sm50),decltype(sm60),decltype(sm66)>; +}//namespaceshadermodel +inlineconstexprautosmMax=max(shadermodel::AllVersionsList{}); +inlineconstexprautosmMin=min(shadermodel::AllVersionsList{}); +inlineconstexprshadermodel::VersionRange<shadermodel::AllVersionsList>smAll; +inlineconstchar*as_string(d3d::shadermodel::Versionv) +{ +for(autoversion:d3d::smAll) +{ +if(version!=v) +continue; +returnversion.versionName; +} +return""; +} +inlineconstchar*as_string(d3d::shadermodel::VersionWithNamev){returnv.versionName;} +inlineconstchar*as_ps_string(d3d::shadermodel::Versionv) +{ +for(autoversion:d3d::smAll) +{ +if(version!=v) +continue; +returnversion.psName; +} +return""; +} +inlineconstchar*as_ps_string(d3d::shadermodel::VersionWithNamev){returnv.psName;} +}//namespaced3d +constexprd3d::shadermodel::Versionoperator""_sm(constchar*text) +{ +#if1 +//onlyworksif<digit>.<digit> +unsignedmajor=text[0]-'0'; +unsignedminor=text[2]-'0'; +#else +unsignedmajor=0; +unsignedminor=0; +unsignedi=0; +for(;'\0'!=text[i]&&'.'!=text[i];++i) +{ +major=major*10+text[i]-'0'; +} +if(text[i]!='\0') +{ +for(++i;'\0'!=text[i];++i) +{ +minor=minor*10+text[i]-'0'; +} +} +#endif +return{major,minor}; +} + +template<typenameT> +structDebugConverter; +template<> +structDebugConverter<d3d::shadermodel::VersionWithName> +{ +staticconstchar*getDebugType(constd3d::shadermodel::VersionWithName&version){returnversion.versionName;} +}; +template<> +structDebugConverter<d3d::shadermodel::Version> +{ +staticunsignedintgetDebugType(constd3d::shadermodel::Version&version){returnversion.major<<16|version.minor;} +}; +template<unsignedMajor,unsignedMinor> +structDebugConverter<d3d::shadermodel::VersionConstant<Major,Minor>> +{ +staticunsignedintgetDebugType(constd3d::shadermodel::VersionConstant<Major, Minor>&version) +{ +returnversion.major<<16|version.minor; +} +}; + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__tex3d_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__tex3d_8h.xml new file mode 100644 index 000000000..88f3bdef0 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__tex3d_8h.xml @@ -0,0 +1,1482 @@ + + + + dag_tex3d.h + drv/3d/dag_sampler.h + drv/3d/dag_d3dResource.h + drv/3d/dag_resId.h + drv/3d/dag_texFlags.h + math/dag_color.h + memory/dag_mem.h + util/dag_stdint.h + string.h + drv/3d/dag_consts_base.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_buffers.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_driver.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_texture.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextureChannelFormatDesc + TextureFormatDesc + TextureInfo + BaseTexture + BaseTexture::IReloadData + ddsx + + + + ChannelDType + + NONE + + + + + + + UNORM + + + + + + + SNORM + + + + + + + UFLOAT + + + + + + + SFLOAT + + + + + + + UINT + + + + + + + SINT + + + + + + + + + + + + + + + + @37 + + TEXLOCK_DISCARD + = 0x00002000L + + + + + + + TEXLOCK_RAWDATA + = 0x00004000L + + + + + + + TEXLOCK_NO_DIRTY_UPDATE + = 0x00008000L + + + + + + + TEXLOCK_NOSYSLOCK + = 0x00000800L + + + + + + + TEXLOCK_READ + = 0x01 + + + + + + + TEXLOCK_WRITE + = 0x02 + + + + + + + TEXLOCK_READWRITE + = TEXLOCK_READ | TEXLOCK_WRITE + + + + + + + TEXLOCK_RWMASK + = TEXLOCK_READWRITE + + + + + + + TEXLOCK_NOOVERWRITE + = 0x08 + + + + + + + TEXLOCK_DELSYSMEMCOPY + = 0x10 + + + + + + + TEXLOCK_SYSTEXLOCK + = 0x20 + + + + + + + TEXLOCK_UPDATEFROMSYSTEX + = 0x40 + + + + + + + TEXLOCK_DONOTUPDATEON9EXBYDEFAULT + = 0x80 + + + + + + + TEXLOCK_COPY_STAGING + = 0x100 + + + + + + + TEXLOCK_DEFAULT + = TEXLOCK_READWRITE + + + + + + + + + + + + + + + + @38 + + TEXLF_CALCMIPMAPS + = 0x0001 + + + + + + + + + + + + + + + + @39 + + CUBEFACE_POSX + = 0 + + + + + + + CUBEFACE_NEGX + = 1 + + + + + + + CUBEFACE_POSY + = 2 + + + + + + + CUBEFACE_NEGY + = 3 + + + + + + + CUBEFACE_POSZ + = 4 + + + + + + + CUBEFACE_NEGZ + = 5 + + + + + + + + + + + + + + + + TexLoadRes + + ERR + = 0 + + + + + + + OK + = 1 + + + + + + + ERR_RUB + = 2 + + + + + + + + + + + + + + + + + BaseTexture + typedef BaseTexture Texture + + Texture + + + + + + + + + + BaseTexture + typedef BaseTexture CubeTexture + + CubeTexture + + + + + + + + + + BaseTexture + typedef BaseTexture VolTexture + + VolTexture + + + + + + + + + + BaseTexture + typedef BaseTexture ArrayTexture + + ArrayTexture + + + + + + + + + + void(* + typedef void(* on_tex_slice_loaded_cb_t) () + )() + on_tex_slice_loaded_cb_t + +load texture content from DDSx stream using DDSx header for previously allocated texture + + + + + + + + + + + TexLoadRes(* + TexLoadRes(* d3d_load_ddsx_tex_contents_impl) (BaseTexture *tex, TEXTUREID tid, TEXTUREID paired_tid, const ddsx::Header &hdr, IGenLoad &crd, int q_id, int start_lev, unsigned tex_ld_lev, on_tex_slice_loaded_cb_t) + )(BaseTexture *tex, TEXTUREID tid, TEXTUREID paired_tid, const ddsx::Header &hdr, IGenLoad &crd, int q_id, int start_lev, unsigned tex_ld_lev, on_tex_slice_loaded_cb_t) + d3d_load_ddsx_tex_contents_impl + + + + + + + + + + TexLoadRes(* + TexLoadRes(* d3d_load_ddsx_to_slice) (BaseTexture *tex, int slice, const ddsx::Header &hdr, IGenLoad &crd, int q_id, int start_lev, unsigned tex_ld_lev) + )(BaseTexture *tex, int slice, const ddsx::Header &hdr, IGenLoad &crd, int q_id, int start_lev, unsigned tex_ld_lev) + d3d_load_ddsx_to_slice + +load texture content from DDSx stream using DDSx header to specified slice of previously allocated array texture + + + + + + + + + + + bool + bool is_alpha_texformat + (unsigned flags) + is_alpha_texformat + + unsigned + flags + + + + + + + + + + + bool + bool is_bc_texformat + (unsigned flags) + is_bc_texformat + + unsigned + flags + + + + + + + + + + + uint32_t + uint32_t auto_mip_levels_count + (uint32_t w, uint32_t min_size) + auto_mip_levels_count + + uint32_t + w + + + uint32_t + min_size + + + + + + + + + + + uint32_t + uint32_t auto_mip_levels_count + (uint32_t w, uint32_t h, uint32_t min_size) + auto_mip_levels_count + + uint32_t + w + + + uint32_t + h + + + uint32_t + min_size + + + + + + + + + + + uint32_t + uint32_t auto_mip_levels_count + (uint32_t w, uint32_t h, uint32_t d, uint32_t min_size) + auto_mip_levels_count + + uint32_t + w + + + uint32_t + h + + + uint32_t + d + + + uint32_t + min_size + + + + + + + + + + + void + void apply_gen_tex_props + (BaseTexture *t, const struct TextureMetaData &tmd, bool force_addr_from_tmd=true) + apply_gen_tex_props + + BaseTexture * + t + + + const struct TextureMetaData & + tmd + + + bool + force_addr_from_tmd + true + + + + + + + + + + + uint32_t + uint32_t parse_tex_format + (const char *name, uint32_t default_fmt) + parse_tex_format + + const char * + name + + + uint32_t + default_fmt + + + + + + + + + + + const TextureFormatDesc & + const TextureFormatDesc& get_tex_format_desc + (uint32_t fmt) + get_tex_format_desc + + uint32_t + fmt + + + + + + + + + + + const char * + const char* get_tex_format_name + (uint32_t fmt) + get_tex_format_name + + uint32_t + fmt + + + + + + + + + + + uint32_t + uint32_t get_tex_channel_value + (const void *pixel, const TextureChannelFormatDesc &channel) + get_tex_channel_value + + const void * + pixel + + + const TextureChannelFormatDesc & + channel + + +Extracts a the bits from a pixel at memory location pixel that correspond to a particular channel in the specified format. + + +Bits unused by the channel are set to 0, even for signed formats + +This is extremely slow! + + + +pixel + + +Memory location of the pixel + + + + +channel + + +Description of the channel's format + + + +A uint32_t whose lowest bits contain the bits of the channel + + + + + + + + + void + void set_tex_channel_value + (void *pixel, const TextureChannelFormatDesc &channel, uint32_t bits) + set_tex_channel_value + + void * + pixel + + + const TextureChannelFormatDesc & + channel + + + uint32_t + bits + + +Sets the bits for a pixel at memory location pixel that correspond to a particular channel in the specified format. + + +This is extremely slow! + + + +pixel + + +Memory location of the pixel + + + + +channel + + +Description of the channel's format + + + + +bits + + +The bits to assign to the channel (only the lowest bits are used) + + + + + + + + + + + float + float channel_bits_to_float + (uint32_t bits, ChannelDType type, const TextureChannelFormatDesc &channel) + channel_bits_to_float + + uint32_t + bits + + + ChannelDType + type + + + const TextureChannelFormatDesc & + channel + + +Converts raw bits of a channel in a certain format into a floating point value that matches the logical value of the channel as closely as possible. + + +Conversion is done as per section 3.9 of Vulkan API specification + +This is extremely slow! + + + +bits + + +The bits of the channel + + + + +type + + +The type of the value stored in the channel + + + + +channel + + +The description of the channel's format + + + +A float that matches the logical value of the channel + + + + + + + + + uint32_t + uint32_t float_to_channel_bits + (float value, ChannelDType type, const TextureChannelFormatDesc &channel) + float_to_channel_bits + + float + value + + + ChannelDType + type + + + const TextureChannelFormatDesc & + channel + + +Converts a float into raw bits of a channel in a certain format that match the provided float as closely as possible. + + +Conversion is done as per section 3.9 of Vulkan API specification + +Bits unused by the channel are set to 0, even for signed formats + +This is extremely slow! + + + +value + + +The floating point value to convert + + + + +type + + +The type of the value stored in the channel + + + + +channel + + +The description of the channel's format + + + +A uint32_t that contains the bits of the channel + + + + + + + + + TexLoadRes + TexLoadRes d3d_load_ddsx_tex_contents + (BaseTexture *tex, TEXTUREID tid, TEXTUREID paired_tid, const ddsx::Header &hdr, IGenLoad &crd, int q_id, int start_lev=0, unsigned tex_ld_lev=0, on_tex_slice_loaded_cb_t on_tex_slice_loaded_cb=nullptr) + d3d_load_ddsx_tex_contents + + BaseTexture * + tex + + + TEXTUREID + tid + + + TEXTUREID + paired_tid + + + const ddsx::Header & + hdr + + + IGenLoad & + crd + + + int + q_id + + + int + start_lev + 0 + + + unsigned + tex_ld_lev + 0 + + + on_tex_slice_loaded_cb_t + on_tex_slice_loaded_cb + nullptr + + + + + + + + + + + bool + bool convert_image_line + (const void *input, int width, int in_channels, int in_bits_per_channel, bool in_float, void *output, int out_channels, int out_bits_per_channel, bool out_float, bool swap_rb) + convert_image_line + + const void * + input + + + int + width + + + int + in_channels + + + int + in_bits_per_channel + + + bool + in_float + + + void * + output + + + int + out_channels + + + int + out_bits_per_channel + + + bool + out_float + + + bool + swap_rb + + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_sampler.h> +#include<drv/3d/dag_d3dResource.h> +#include<drv/3d/dag_resId.h> +#include<drv/3d/dag_texFlags.h> +#include<math/dag_color.h> +#include<memory/dag_mem.h> +#include<util/dag_stdint.h> +#include<string.h> + +//forwarddeclarationsfortexpixelformats +structTexPixel32; +structTexPixel8a; +classIGenLoad; +namespaceddsx +{ +structHeader; +} + + +//TexturesforDriver3d// + +structTextureChannelFormatDesc +{ +int8_tbits; +int8_toffset;//inbits +boolisFloatPoint; +boolisSigned; +boolisNormalized; +}; + +enumclassChannelDType +{ +NONE, +UNORM,//fixedpointreal\in[0,1] +SNORM,//fixedpointreal\in[0,1] +UFLOAT,//floatingpointreal\in[0,+\infty] +SFLOAT,//floatingpointreal\in[-\infty,+\infty] +UINT,//int\in[0,+\infty] +SINT//int\in[-\infty,+\infty] +}; + +structTextureFormatDesc +{ +uint32_tdagorTextureFormat; +uint16_tbytesPerElement; +boolisBlockFormat; +uint8_telementWidth;//pixels +uint8_telementHeight;//pixels +//Typeforrgbaanddepth,whichisalwaysthesame +ChannelDTypemainChannelsType; +//Separatetypeforstencil(asitusuallyisdifferent) +ChannelDTypestencilChannelType; +TextureChannelFormatDescr; +TextureChannelFormatDescg; +TextureChannelFormatDescb; +TextureChannelFormatDesca; +TextureChannelFormatDescdepth; +TextureChannelFormatDescstencil; + +boolhasAlpha()const{returna.bits>0;} + +boolisDepth()const{returndepth.bits>0;} + +intrgbaChannelsCount()const{return(r.bits>0?1:0)+(g.bits>0?1:0)+(b.bits>0?1:0)+(a.bits>0?1:0);} + +intchannelsCount()const{returnrgbaChannelsCount()+(depth.bits>0?1:0)+(stencil.bits>0?1:0);} +}; + +bool__forceinlineis_alpha_texformat(unsignedflags) +{ +flags&=TEXFMT_MASK; +if(flags>=TEXFMT_A2R10G10B10&&flags<=TEXFMT_A32B32G32R32F) +returntrue; +if(flags==TEXFMT_A8R8G8B8||flags==TEXFMT_A8||flags==TEXFMT_A1R5G5B5||flags==TEXFMT_A4R4G4B4||// +flags==TEXFMT_DXT3||flags==TEXFMT_DXT5) +returntrue; +returnfalse; +} + +bool__forceinlineis_bc_texformat(unsignedflags) +{ +flags&=TEXFMT_MASK; +if(flags>=TEXFMT_DXT1&&flags<=TEXFMT_DXT5) +returntrue; +if(flags>=TEXFMT_BC6H&&flags<=TEXFMT_BC7) +returntrue; +if(flags>=TEXFMT_ATI1N&&flags<=TEXFMT_ATI2N) +returntrue; +returnfalse; +} + +//Lockflags. +enum +{ +TEXLOCK_DISCARD=0x00002000L, +TEXLOCK_RAWDATA=0x00004000L,//PS4.Donotconvertdata +TEXLOCK_NO_DIRTY_UPDATE=0x00008000L,//? +TEXLOCK_NOSYSLOCK=0x00000800L, +TEXLOCK_READ=0x01, +TEXLOCK_WRITE=0x02, +TEXLOCK_READWRITE=TEXLOCK_READ|TEXLOCK_WRITE, +TEXLOCK_RWMASK=TEXLOCK_READWRITE, +TEXLOCK_NOOVERWRITE=0x08,//TEXLOCK_WRITEonly +TEXLOCK_DELSYSMEMCOPY=0x10,//deletesysmemcopyonunlock +TEXLOCK_SYSTEXLOCK=0x20,//lockstexcopyinsysTex(systemmemorytexture) +TEXLOCK_UPDATEFROMSYSTEX=0x40,//makescopyfromsystemmemorytovideoonunlock +TEXLOCK_DONOTUPDATEON9EXBYDEFAULT=0x80,//compatibility!notmakescopyfromsystemmemorytovideoonunlockbydefault,if9ex +TEXLOCK_COPY_STAGING=0x100, +TEXLOCK_DEFAULT=TEXLOCK_READWRITE, +}; + + +//textureloadingflags +enum +{ +TEXLF_CALCMIPMAPS=0x0001, +}; + +enum +{ +CUBEFACE_POSX=0, +CUBEFACE_NEGX=1, +CUBEFACE_POSY=2, +CUBEFACE_NEGY=3, +CUBEFACE_POSZ=4, +CUBEFACE_NEGZ=5, +}; + + +structTextureInfo +{ +unsignedshortw=1,h=1,d=1,a=1; +unsignedshortmipLevels=0,resType=0; +unsignedcflg=0; +}; + +//resultoftextureloadmethods +enumclassTexLoadRes +{ +ERR=0, +OK=1, +ERR_RUB=2 +}; + +classBaseTexture:publicD3dResource +{ +public: +structIReloadData +{ +virtual~IReloadData(){} +virtualvoidreloadD3dRes(BaseTexture*t)=0; +virtualvoiddestroySelf()=0; +}; +virtualboolsetReloadCallback(IReloadData*){returnfalse;} + +virtualintgenerateMips()=0; +//RequiresTEXCF_UPDATE_DESTINATION,TEXCF_RTARGETorTEXCF_UNORDEREDusageforthistexture. +virtualintupdate(BaseTexture*src)=0;//updatetexturefrom + +staticinlineintcalcSubResIdx(intlevel,intslice,intmip_levels){returnlevel+slice*mip_levels;} +inlineintcalcSubResIdx(intlevel,intslice=0)const{returncalcSubResIdx(level,slice,level_count());} +//RequiresTEXCF_UPDATE_DESTINATION,TEXCF_RTARGETorTEXCF_UNORDEREDusageforthistexture. +virtualintupdateSubRegion(BaseTexture*src,intsrc_subres_idx,intsrc_x,intsrc_y,intsrc_z,intsrc_w,intsrc_h,intsrc_d, +intdest_subres_idx,intdest_x,intdest_y,intdest_z)=0; +virtualintupdateSubRegionNoOrder(BaseTexture*src,intsrc_subres_idx,intsrc_x,intsrc_y,intsrc_z,intsrc_w,intsrc_h, +intsrc_d,intdest_subres_idx,intdest_x,intdest_y,intdest_z) +{ +returnupdateSubRegion(src,src_subres_idx,src_x,src_y,src_z,src_w,src_h,src_d,dest_subres_idx,dest_x,dest_y,dest_z); +} +virtualintlevel_count()const=0;//numberofmipmaplevels +inttexaddr(intaddrmode) +{ +G_ASSERT(samplerEnabled); +returntexaddrImpl(addrmode); +}//settexaddru,texaddrv,... +inttexaddru(intaddrmode) +{ +G_ASSERT(samplerEnabled); +returntexaddruImpl(addrmode); +}//defaultisTEXADDR_WRAP +inttexaddrv(intaddrmode) +{ +G_ASSERT(samplerEnabled); +returntexaddrvImpl(addrmode); +}//defaultisTEXADDR_WRAP +inttexaddrw(intaddrmode) +{ +G_ASSERT(samplerEnabled); +returntexaddrwImpl(addrmode); +}//defaultisTEXADDR_WRAP +inttexbordercolor(E3DCOLORcolor) +{ +G_ASSERT(samplerEnabled); +returntexbordercolorImpl(color); +} +inttexfilter(intfiltermode) +{ +G_ASSERT(samplerEnabled); +returntexfilterImpl(filtermode); +}//defaultisTEXFILTER_DEFAULT +inttexmipmap(intmipmapmode) +{ +G_ASSERT(samplerEnabled); +returntexmipmapImpl(mipmapmode); +}//defaultisTEXMIPMAP_DEFAULT +inttexlod(floatmipmaplod) +{ +G_ASSERT(samplerEnabled); +returntexlodImpl(mipmaplod); +}//defaultiszero.Setstexturelodbias +intsetAnisotropy(intlevel) +{ +G_ASSERT(samplerEnabled); +returnsetAnisotropyImpl(level); +}//defaultis1. +voiddisableSampler(){samplerEnabled=false;} +boolisSamplerEnabled(){returnsamplerEnabled;} +virtualinttexmiplevel(intminlevel,intmaxlevel)=0;//defaultis0,0 +virtualboolisCubeArray()const{returnfalse;} + +virtualvoidsetReadStencil(bool){}//fordepthstenciltextures,ifonwillreadstencil,notdepth.Currentlyeitheroftwo +virtualvoidsetTID(TEXTUREID/*tid*/){} +virtualTEXTUREIDgetTID()const{returnBAD_TEXTUREID;} +constchar*getTexName()const{returngetResName();} +virtualvoidsetResApiName(constchar*/*name*/)const{} + +//lockimagedata-noconversionisperformed +//rendertargetimageisread-onlybydefault +//non-render-targetimageisread-writebydefault +//returns0onerror +virtualintlockimg(void**,int&stride_bytes,intlevel,unsignedflags)=0; +virtualintlockimg(void**,int&stride_bytes,intlayer,intlevel,unsignedflags)=0; +virtualintunlockimg(){return0;}; +intunlock(){returnunlockimg();}; + +virtualintlockbox(void**,int&,int&,int,unsigned){return0;}; +virtualintunlockbox(){return0;}; + +virtualintgetinfo(TextureInfo&info,intlevel=0)const=0; + +template<typenameT> +inlineintlockimgEx(T**p,int&stride_bytes,intlevel=0,unsignedflags=TEXLOCK_DEFAULT) +{ +void*vp; +if(!lockimg(&vp,stride_bytes,level,flags)) +{ +*p=NULL; +return0; +} +*p=(T*)vp; +return1; +} + +virtualBaseTexture*makeTmpTexResCopy(int/*w*/,int/*h*/,int/*d*/,int/*l*/,bool/*staging_tex*/=false){returnnullptr;} +virtualvoidreplaceTexResObject(BaseTexture*&new_tex){del_d3dres(new_tex);} + +virtualboolallocateTex(){returntrue;} +virtualvoiddiscardTex(){} + +#ifDAGOR_DBGLEVEL>0 +//Notimplementedforallplatforms,onlyforsharedimplementationBaseTextureImplwhichisnotusedeverywhereyet +//Andaneedisquestionablebynow +virtualintgetTexfilter()const{return0;} +#endif +//Replacesthetexturewithasmalleronedefinedbyinfo,overlappingmiplevelsareautomatically +//migratedtothenewtexture.ThisdoesnotneedTEXCF_UPDATE_DESTINATIONtowork,evenifthedefault +//implementationwoulddoso.DriversthatcannotexecutedupdateSubRegioncorrectlywithoutthe +//TEXCF_UPDATE_DESTINATIONflaghavetoimplementthisinawaysoitwillworkcorrectly. +// +//Returnstrueonsuccess,mayreturnfalseonfail.Onlyfailcasecanbethefailuretoallocatethe +//replacementtexture. +virtualbooldownSize(intwidth,intheight,intdepth,intmips,unsignedstart_src_level,unsignedlevel_offset) +{ +autorep=makeTmpTexResCopy(width,height,depth,mips,false); +if(!rep) +{ +returnfalse; +} + +TextureInfoselfInfo; +getinfo(selfInfo); + +unsignedsourceLevel=max<unsigned>(level_offset,start_src_level); +unsignedsourceLevelEnd=min<unsigned>(selfInfo.mipLevels,mips+level_offset); +rep->texmiplevel(sourceLevel-level_offset,sourceLevelEnd-level_offset-1); +for(;sourceLevel<sourceLevelEnd;sourceLevel++) +{ +for(ints=0;s<selfInfo.a;s++) +{ +rep->updateSubRegion(this,calcSubResIdx(sourceLevel,s,selfInfo.mipLevels),0,0,0,max<int>(selfInfo.w>>sourceLevel,1), +max<int>(selfInfo.h>>sourceLevel,1),max<int>(selfInfo.d>>sourceLevel,selfInfo.a), +calcSubResIdx(sourceLevel-level_offset,s,mips),0,0,0); +} +} + +replaceTexResObject(rep); +returntrue; +} +//Replacesthetexturewithalargeronedefinedbyinfo,overlappingmiplevelsareautomatically +//migratedtothenewtexture.ThisdoesnotneedTEXCF_UPDATE_DESTINATIONtowork,evenifthedefault +//implementationwoulddoso.DriversthatcannotexecutedupdateSubRegioncorrectlywithoutthe +//TEXCF_UPDATE_DESTINATIONflaghavetoimplementthisinawaysoitwillworkcorrectly. +// +//Returnstrueonsuccess,mayreturnfalseonfail.Onlyfailcasecanbethefailuretoallocatethe +//replacementtexture. +virtualboolupSize(intwidth,intheight,intdepth,intmips,unsignedstart_src_level,unsignedlevel_offset) +{ +autorep=makeTmpTexResCopy(width,height,depth,mips,false); +if(!rep) +{ +returnfalse; +} + +TextureInfoselfInfo; +getinfo(selfInfo); + +unsigneddestinationLevel=level_offset+start_src_level; +unsigneddestinationLevelEnd=min<unsigned>(selfInfo.mipLevels+level_offset,mips); +rep->texmiplevel(destinationLevel,destinationLevelEnd-1); +for(;destinationLevel<destinationLevelEnd;destinationLevel++) +{ +for(ints=0;s<selfInfo.a;s++) +{ +rep->updateSubRegion(this,calcSubResIdx(destinationLevel-level_offset,s,selfInfo.mipLevels),0,0,0, +max<int>(width>>destinationLevel,1),max<int>(height>>destinationLevel,1), +max<int>(depth>>destinationLevel,selfInfo.a),calcSubResIdx(destinationLevel,s,mips),0,0,0); +} +} + +replaceTexResObject(rep); +returntrue; +} + +BaseTexture()=default; +BaseTexture(BaseTexture&&)=default; +BaseTexture&operator=(BaseTexture&&)=default; + +protected: +~BaseTexture()override{} +boolsamplerEnabled=true; +virtualinttexaddrImpl(intaddrmode)=0; +virtualinttexaddruImpl(intaddrmode)=0; +virtualinttexaddrvImpl(intaddrmode)=0; +virtualinttexaddrwImpl(int){return0;}; +virtualinttexbordercolorImpl(E3DCOLOR)=0; +virtualinttexfilterImpl(intfiltermode)=0; +virtualinttexmipmapImpl(intmipmapmode)=0; +virtualinttexlodImpl(floatmipmaplod)=0; +virtualintsetAnisotropyImpl(intlevel)=0; + +//Flagisusedtomarkthereadbackstatusfortexturestoprepareforcpuaccess, +//It'seithercopytostagingmemoryordirectaccessincaseofconsoles. +staticconstexprintTEX_COPIED=1<<30; +}; + +typedefBaseTextureTexture; +typedefBaseTextureCubeTexture; +typedefBaseTextureVolTexture; +typedefBaseTextureArrayTexture; + +uint32_tauto_mip_levels_count(uint32_tw,uint32_tmin_size); +uint32_tauto_mip_levels_count(uint32_tw,uint32_th,uint32_tmin_size); +uint32_tauto_mip_levels_count(uint32_tw,uint32_th,uint32_td,uint32_tmin_size); + +voidapply_gen_tex_props(BaseTexture*t,conststructTextureMetaData&tmd,boolforce_addr_from_tmd=true); + +uint32_tparse_tex_format(constchar*name,uint32_tdefault_fmt); +constTextureFormatDesc&get_tex_format_desc(uint32_tfmt); +constchar*get_tex_format_name(uint32_tfmt); + +uint32_tget_tex_channel_value(constvoid*pixel,constTextureChannelFormatDesc&channel); + +voidset_tex_channel_value(void*pixel,constTextureChannelFormatDesc&channel,uint32_tbits); + +floatchannel_bits_to_float(uint32_tbits,ChannelDTypetype,constTextureChannelFormatDesc&channel); + + +uint32_tfloat_to_channel_bits(floatvalue,ChannelDTypetype,constTextureChannelFormatDesc&channel); + +typedefvoid(*on_tex_slice_loaded_cb_t)(); +externTexLoadRes(*d3d_load_ddsx_tex_contents_impl)(BaseTexture*tex,TEXTUREIDtid,TEXTUREIDpaired_tid,constddsx::Header&hdr, +IGenLoad&crd,intq_id,intstart_lev,unsignedtex_ld_lev,on_tex_slice_loaded_cb_t); +inlineTexLoadResd3d_load_ddsx_tex_contents(BaseTexture*tex,TEXTUREIDtid,TEXTUREIDpaired_tid,constddsx::Header&hdr, +IGenLoad&crd,intq_id,intstart_lev=0,unsignedtex_ld_lev=0,on_tex_slice_loaded_cb_ton_tex_slice_loaded_cb=nullptr) +{ +returnd3d_load_ddsx_tex_contents_impl(tex,tid,paired_tid,hdr,crd,q_id,start_lev,tex_ld_lev,on_tex_slice_loaded_cb); +} +externTexLoadRes(*d3d_load_ddsx_to_slice)(BaseTexture*tex,intslice,constddsx::Header&hdr,IGenLoad&crd,intq_id, +intstart_lev,unsignedtex_ld_lev); + +boolconvert_image_line(constvoid*__restrictinput,intwidth,intin_channels,intin_bits_per_channel,boolin_float, +void*__restrictoutput,intout_channels,intout_bits_per_channel,boolout_float,boolswap_rb); + +//---includedefinesspecifictotarget3d------- +#include<drv/3d/dag_consts_base.h> + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__tex_flags_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__tex_flags_8h.xml new file mode 100644 index 000000000..6490daa52 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__tex_flags_8h.xml @@ -0,0 +1,1028 @@ + + + + dag_texFlags.h + math/dag_adjpow2.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d/dag_tex3d.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @0 + + TEXCF_RGB + = 0x00000000U + + + + + + + TEXCF_RTARGET + = 0x00000001U + + + + + + + TEXCF_TYPEMASK + = 0x00000001U + + + + + + + TEXCF_BEST + = 0x00000000U + + + + + + + TEXCF_ABEST + = 0x00000000U + + + + + + + TEXCF_UNORDERED + = 0x00000002U + + + + + + + TEXCF_VARIABLE_RATE + = 0x00000004U + + + + + + + TEXCF_UPDATE_DESTINATION + = 0x00004000U + + + + + + + TEXCF_SYSTEXCOPY + = 0x00000010U + + + + + + + TEXCF_DYNAMIC + = 0x00000100U + + + + + + + TEXCF_READABLE + = 0x00000200U + + + + + + + TEXCF_READONLY + = 0 + + + + + + + TEXCF_WRITEONLY + = 0x00000008U + + + + + + + TEXCF_LOADONCE + = 0x00000400U + + + + + + + TEXCF_MAYBELOST + = 0x00000800U + + + + + + + TEXCF_STREAMING + = 0x00000000U + + + + + + + TEXCF_SYSMEM + = 0x00010000U + + + + + + + TEXCF_SAMPLECOUNT_2 + = 0x00020000U + + + + + + + TEXCF_SAMPLECOUNT_4 + = 0x00040000U + + + + + + + TEXCF_SAMPLECOUNT_8 + = 0x00060000U + + + + + + + TEXCF_SAMPLECOUNT_MAX + = TEXCF_SAMPLECOUNT_8 + + + + + + + TEXCF_SAMPLECOUNT_MASK + = 0x00060000U + + + + + + + TEXCF_SAMPLECOUNT_OFFSET + = 17 + + + + + + + TEXCF_CPU_CACHED_MEMORY + = 0 + + + + + + + TEXCF_LINEAR_LAYOUT + = 0 + + + + + + + TEXCF_ESRAM_ONLY + = 0 + + + + + + + TEXCF_MOVABLE_ESRAM + = 0 + + + + + + + TEXCF_TC_COMPATIBLE + = 0 + + + + + + + TEXCF_RT_COMPRESSED + = 0 + + + + + + + TEXCF_SIMULTANEOUS_MULTI_QUEUE_USE + = 0x00080000U + + + + + + + TEXCF_SRGBWRITE + = 0x00200000U + + + + + + + TEXCF_SRGBREAD + = 0x00400000U + + + + + + + TEXCF_GENERATEMIPS + = 0x00800000U + + + + + + + TEXCF_CLEAR_ON_CREATE + = 0X00002000U + + + + + + + TEXCF_TILED_RESOURCE + = 0x00000080U + + + + + + + TEXCF_TRANSIENT + = 0x00001000U + + + + + + + TEXFMT_DEFAULT + = 0U + + + + + + + TEXFMT_A8R8G8B8 + = 0x00000000U + + + + + + + TEXFMT_A2R10G10B10 + = 0x01000000U + + + + + + + TEXFMT_A2B10G10R10 + = 0x02000000U + + + + + + + TEXFMT_A16B16G16R16 + = 0x03000000U + + + + + + + TEXFMT_A16B16G16R16F + = 0x04000000U + + + + + + + TEXFMT_A32B32G32R32F + = 0x05000000U + + + + + + + TEXFMT_G16R16 + = 0x06000000U + + + + + + + TEXFMT_G16R16F + = 0x07000000U + + + + + + + TEXFMT_G32R32F + = 0x08000000U + + + + + + + TEXFMT_R16F + = 0x09000000U + + + + + + + TEXFMT_R32F + = 0x0A000000U + + + + + + + TEXFMT_DXT1 + = 0x0B000000U + + + + + + + TEXFMT_DXT3 + = 0x0C000000U + + + + + + + TEXFMT_DXT5 + = 0x0D000000U + + + + + + + TEXFMT_R32G32UI + = 0x0E000000U + + + + + + + TEXFMT_L16 + = 0x10000000U + + + + + + + TEXFMT_A8 + = 0x11000000U + + + + + + + TEXFMT_R8 + = 0x12000000U + + + + + + + TEXFMT_L8 + = TEXFMT_R8 + + + + + + + TEXFMT_A1R5G5B5 + = 0x13000000U + + + + + + + TEXFMT_A4R4G4B4 + = 0x14000000U + + + + + + + TEXFMT_R5G6B5 + = 0x15000000U + + + + + + + TEXFMT_A8L8 + = 0x16000000U + + + + + + + TEXFMT_A16B16G16R16S + = 0x17000000U + + + + + + + TEXFMT_A16B16G16R16UI + = 0x18000000U + + + + + + + TEXFMT_A32B32G32R32UI + = 0x19000000U + + + + + + + TEXFMT_ATI1N + = 0x1A000000U + + + + + + + TEXFMT_ATI2N + = 0x1B000000U + + + + + + + TEXFMT_R8G8B8A8 + = 0x1C000000U + + + + + + + TEXFMT_R32UI + = 0x1D000000U + + + + + + + TEXFMT_R32SI + = 0x1E000000U + + + + + + + TEXFMT_R11G11B10F + = 0x1F000000U + + + + + + + TEXFMT_R9G9B9E5 + = 0x20000000U + + + + + + + TEXFMT_R8G8 + = 0x21000000U + + + + + + + TEXFMT_R8G8S + = 0x22000000U + + + + + + + TEXFMT_BC6H + = 0x23000000U + + + + + + + TEXFMT_BC7 + = 0x24000000U + + + + + + + TEXFMT_R8UI + = 0x25000000U + + + + + + + TEXFMT_R16UI + = 0x26000000U + + + + + + + TEXFMT_DEPTH24 + = 0x27000000U + + + + + + + TEXFMT_DEPTH16 + = 0x28000000U + + + + + + + TEXFMT_DEPTH32 + = 0x29000000U + + + + + + + TEXFMT_DEPTH32_S8 + = 0x2A000000U + + + + + + + TEXFMT_ASTC4 + = 0x2E000000U + + + + + + + TEXFMT_ASTC8 + = 0x2F000000U + + + + + + + TEXFMT_ASTC12 + = 0x30000000U + + + + + + + TEXFMT_ETC2_RG + = 0x31000000U + + + + + + + TEXFMT_ETC2_RGBA + = 0x32000000U + + + + + + + TEXFMT_PSSR_TARGET + = 0x33000000U + + + + + + + TEXFMT_FIRST_DEPTH + = TEXFMT_DEPTH24 + + + + + + + TEXFMT_LAST_DEPTH + = TEXFMT_DEPTH32_S8 + + + + + + + TEXFMT_MASK + = 0xFF000000U + + + + + + + + + + + + + + + + + int + int get_sample_count + (int flags) + get_sample_count + + int + flags + + + + + + + + + + + int + int make_sample_count_flag + (int sample_count) + make_sample_count_flag + + int + sample_count + + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<math/dag_adjpow2.h> + +//texturecreationflags +enum +{ +//typeoftexture-exactlyonemustbespecified: +TEXCF_RGB=0x00000000U,//sameasTEXFMT_A8R8G8B8 +TEXCF_RTARGET=0x00000001U,//rendertargetformat +TEXCF_TYPEMASK=0x00000001U, +//size/qualityhintsfortype-nomorethanonemustbespecified: +TEXCF_BEST=0x00000000U,//obsolete +TEXCF_ABEST=0x00000000U,//obsolete + +//https://msdn.microsoft.com/en-us/library/windows/desktop/ff476335(v=vs.85).aspx#Unordered_Access +TEXCF_UNORDERED=0x00000002U,//forcomputeshaders + +//IndicatesusageasVRStexture,enforcesthefollowingrules: +//-FormatmustbeTEXFMT_R8UI +//-2DTextureonly +//-noarrayedtexture +//-nomipmaps +//-nomultisampling +//-nousageasrendertarget(useUAVinstead) +//Ratetoperpixelvalueisasfollows: +//rate1=0 +//rate2=1 +//rate4=2 +//combinedrate:ratex<<2|ratey +//Whichmapsto +//1x1=0 +//1x2=1 +//2x1=4 +//2x2=5 +//2x4=6 +//4x2=9 +//4x4=10 +TEXCF_VARIABLE_RATE=0x00000004U, + +//UsesofthetexturemethodsupdateSubRegionandupdaterequirethis,TEXCF_RTARGETor +//TEXCF_UNORDEREDusageflagtobeset. +TEXCF_UPDATE_DESTINATION=0x00004000U, + +TEXCF_SYSTEXCOPY=0x00000010U,//makecopyinsystemmemory + +//creationoptions + +TEXCF_DYNAMIC=0x00000100U,//changesfrequently//D3DUSAGE_CPU_CACHED_MEMORY,XALLOC_MEMPROTECT_READWRITE +TEXCF_READABLE=0x00000200U,//canonlyberead,D3DLOCK_READONLY +TEXCF_READONLY=0, +TEXCF_WRITEONLY=0x00000008U,//cpucanwrite(TEXLOCK_WRITE) +TEXCF_LOADONCE=0x00000400U,//texturewillbeloadedonlyonce-don'tusewithdynamic +TEXCF_MAYBELOST=0x00000800U,//contentsofthetexturemaybesafelylost-theywillberegeneratedbeforeusingit +TEXCF_STREAMING=0x00000000U,//shouldbedeletedshortly,obsolete +TEXCF_SYSMEM=0x00010000U,//textureisallocatedinsystemmemoryandusedonlyasstagingtexture +//TEXCF_SYSMEM|TEXCF_WRITEONLYisallocatedinWCmemoryonPS4 +TEXCF_SAMPLECOUNT_2=0x00020000U,//= +TEXCF_SAMPLECOUNT_4=0x00040000U,//|multisampledrendertargetformats +TEXCF_SAMPLECOUNT_8=0x00060000U,//= +TEXCF_SAMPLECOUNT_MAX=TEXCF_SAMPLECOUNT_8, +TEXCF_SAMPLECOUNT_MASK=0x00060000U, +TEXCF_SAMPLECOUNT_OFFSET=17, + +#if_TARGET_C1|_TARGET_C2 + + + + + + +#elif_TARGET_XBOX +TEXCF_CPU_CACHED_MEMORY=0x00008000U,//todo:implementallocationinonioninsteadofgarlicmem +TEXCF_LINEAR_LAYOUT=0x00100000U,//todo:implementwithouttiling +TEXCF_ESRAM_ONLY=0x00000020U,//alwaysresideinESRAM +TEXCF_MOVABLE_ESRAM=0x00000040U,//CreatecopyinDDR +TEXCF_TC_COMPATIBLE=0, +TEXCF_RT_COMPRESSED=0, +#else +TEXCF_CPU_CACHED_MEMORY=0, +TEXCF_LINEAR_LAYOUT=0, +TEXCF_ESRAM_ONLY=0,//makecopyinsystemmemory +TEXCF_MOVABLE_ESRAM=0, +TEXCF_TC_COMPATIBLE=0, +TEXCF_RT_COMPRESSED=0, +#endif + +//Indicatesthatacolorrendertargetoruavtexturemaybeusedbythe3dandasynccomputequeueatthesametime. +//ThisdirectlymapstoDX12'sD3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESSflagandonVulkanthismapsdirectly +//toVK_SHARING_MODE_CONCURRENTforalldevicequeuesused. +//Thisflagremovestheneedtotransferownershipoftheresourcesbetweenexecutionqueues +//(eg.RB_FLAG_MOVE_PIPELINE_OWNERSHIPbetweendifferentGpuPipeline). +//RequiredtobepairedwithTEXCF_RTARGETand/orTEXCF_UNORDERED. +//Itisinvalidtoapplythisflagtoresourceswithdepth/stencilformats. +TEXCF_SIMULTANEOUS_MULTI_QUEUE_USE=0x00080000U, + +TEXCF_SRGBWRITE=0x00200000U,//performsrgbconversionwhenrendertothistexture.Worksonlyon8bit4componentstextures +TEXCF_SRGBREAD=0x00400000U,//performsrgbconversionwhensamplefromtexture +TEXCF_GENERATEMIPS=0x00800000U,//generateMipswillbecalled +TEXCF_CLEAR_ON_CREATE=0X00002000U,//willfilltexturewithzeroes + +TEXCF_TILED_RESOURCE=0x00000080U,//ThetextureisnotbackedbyGPUmemory.Itneedstobebackedmanuallybyheaps. + +//Transienttexture:contentandaccessisvalidonlyinsiderenderpass +//useslazymemoryallocationifpossible(TBDRframebuffer/tilememorybacking) +TEXCF_TRANSIENT=0x00001000U, + +//exacttextureformat +TEXFMT_DEFAULT=0U,//argb8! +TEXFMT_A8R8G8B8=0x00000000U, +TEXFMT_A2R10G10B10=0x01000000U, +TEXFMT_A2B10G10R10=0x02000000U, +TEXFMT_A16B16G16R16=0x03000000U,//unsigned +TEXFMT_A16B16G16R16F=0x04000000U, +TEXFMT_A32B32G32R32F=0x05000000U, +TEXFMT_G16R16=0x06000000U, +TEXFMT_G16R16F=0x07000000U, +TEXFMT_G32R32F=0x08000000U, +TEXFMT_R16F=0x09000000U, +TEXFMT_R32F=0x0A000000U, +TEXFMT_DXT1=0x0B000000U, +TEXFMT_DXT3=0x0C000000U, +TEXFMT_DXT5=0x0D000000U, +TEXFMT_R32G32UI=0x0E000000U, +TEXFMT_L16=0x10000000U, +TEXFMT_A8=0x11000000U, +TEXFMT_R8=0x12000000U, +TEXFMT_L8=TEXFMT_R8,//legacy,toberemoved +TEXFMT_A1R5G5B5=0x13000000U, +TEXFMT_A4R4G4B4=0x14000000U, +TEXFMT_R5G6B5=0x15000000U, +TEXFMT_A8L8=0x16000000U,//dx9,PS4 +TEXFMT_A16B16G16R16S=0x17000000U,//signed,d3d11 +TEXFMT_A16B16G16R16UI=0x18000000U,//unsigned,unorm +TEXFMT_A32B32G32R32UI=0x19000000U,//unsigned,unorm +TEXFMT_ATI1N=0x1A000000U,//BC4indx10 +TEXFMT_ATI2N=0x1B000000U,//BC5indx10 +TEXFMT_R8G8B8A8=0x1C000000U,//unorm +TEXFMT_R32UI=0x1D000000U,//unsignedint +TEXFMT_R32SI=0x1E000000U,//signedint +TEXFMT_R11G11B10F=0x1F000000U,//float +TEXFMT_R9G9B9E5=0x20000000U, +TEXFMT_R8G8=0x21000000U,//unorm,dx10+,OGL+ +TEXFMT_R8G8S=0x22000000U,//snorm,dx10+,OGL+ +TEXFMT_BC6H=0x23000000U, +TEXFMT_BC7=0x24000000U, +TEXFMT_R8UI=0x25000000U, +TEXFMT_R16UI=0x26000000U, + +//shouldgoinarow +TEXFMT_DEPTH24=0x27000000U, +TEXFMT_DEPTH16=0x28000000U, +TEXFMT_DEPTH32=0x29000000U, +TEXFMT_DEPTH32_S8=0x2A000000U, + +//mobileformats: +TEXFMT_ASTC4=0x2E000000U, +TEXFMT_ASTC8=0x2F000000U, +TEXFMT_ASTC12=0x30000000U, + +TEXFMT_ETC2_RG=0x31000000U, +TEXFMT_ETC2_RGBA=0x32000000U, + +TEXFMT_PSSR_TARGET=0x33000000U,//PS5only + +TEXFMT_FIRST_DEPTH=TEXFMT_DEPTH24, +TEXFMT_LAST_DEPTH=TEXFMT_DEPTH32_S8, + +TEXFMT_MASK=0xFF000000U,//TEXFMT_=0x__000000, +}; + +__forceinlineintget_sample_count(intflags){return1<<((flags&TEXCF_SAMPLECOUNT_MASK)>>TEXCF_SAMPLECOUNT_OFFSET);} + +__forceinlineintmake_sample_count_flag(intsample_count) +{ +return(get_log2i(sample_count)<<TEXCF_SAMPLECOUNT_OFFSET)&TEXCF_SAMPLECOUNT_MASK; +} + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__texture_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__texture_8h.xml new file mode 100644 index 000000000..a2cbc19d8 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__texture_8h.xml @@ -0,0 +1,272 @@ + + + + dag_texture.h + drv/3d/dag_consts.h + drv/3d/dag_tex3d.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_consts.h> +#include<drv/3d/dag_tex3d.h> + +structTexImage32; + +namespaced3d +{ +boolcheck_texformat(intcflg); + +intget_max_sample_count(intcflg); + +unsignedget_texformat_usage(intcflg,intrestype=RES3D_TEX); + +boolissame_texformat(intcflg1,intcflg2); + +boolcheck_cubetexformat(intcflg); + +boolcheck_voltexformat(intcflg); + +BaseTexture*create_tex(TexImage32*img,intw,inth,intflg,intlevels,constchar*stat_name=nullptr); + +BaseTexture*create_ddsx_tex(IGenLoad&crd,intflg,intquality_id,intlevels=0,constchar*stat_name=nullptr); + +BaseTexture*alloc_ddsx_tex(constddsx::Header&hdr,intflg,intquality_id,intlevels=0,constchar*stat_name=nullptr, +intstub_tex_idx=-1); + +inlineTexLoadResload_ddsx_tex_contents(BaseTexture*t,constddsx::Header&hdr,IGenLoad&crd,intq_id) +{ +returnd3d_load_ddsx_tex_contents(t,t->getTID(),BAD_TEXTUREID,hdr,crd,q_id); +} + +BaseTexture*create_cubetex(intsize,intflg,intlevels,constchar*stat_name=nullptr); + +BaseTexture*create_voltex(intw,inth,intd,intflg,intlevels,constchar*stat_name=nullptr); + +BaseTexture*create_array_tex(intw,inth,intd,intflg,intlevels,constchar*stat_name); + +BaseTexture*create_cube_array_tex(intside,intd,intflg,intlevels,constchar*stat_name); + +BaseTexture*alias_tex(BaseTexture*baseTexture,TexImage32*img,intw,inth,intflg,intlevels,constchar*stat_name=nullptr); + +BaseTexture*alias_cubetex(BaseTexture*baseTexture,intsize,intflg,intlevels,constchar*stat_name=nullptr); + +BaseTexture*alias_voltex(BaseTexture*baseTexture,intw,inth,intd,intflg,intlevels,constchar*stat_name=nullptr); + +BaseTexture*alias_array_tex(BaseTexture*baseTexture,intw,inth,intd,intflg,intlevels,constchar*stat_name); + +BaseTexture*alias_cube_array_tex(BaseTexture*baseTexture,intside,intd,intflg,intlevels,constchar*stat_name); + +boolstretch_rect(BaseTexture*src,BaseTexture*dst,RectInt*rsrc=nullptr,RectInt*rdst=nullptr); + +voidget_texture_statistics(uint32_t*num_textures,uint64_t*total_mem,String*out_dump); + +boolset_tex(unsignedshader_stage,unsignedslot,BaseTexture*tex,booluse_sampler=true); + +inlineboolsettex(intslot,BaseTexture*tex){returnset_tex(STAGE_PS,slot,tex);} + +inlineboolsettex_vs(intslot,BaseTexture*tex){returnset_tex(STAGE_VS,slot,tex);} + +}//namespaced3d + + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineboolcheck_texformat(intcflg){returnd3di.check_texformat(cflg);} +inlineintget_max_sample_count(intcflg){returnd3di.get_max_sample_count(cflg);} +inlineunsignedget_texformat_usage(intcflg,intrestype){returnd3di.get_texformat_usage(cflg,restype);} +inlineboolissame_texformat(intcflg1,intcflg2){returnd3di.issame_texformat(cflg1,cflg2);} +inlineboolcheck_cubetexformat(intcflg){returnd3di.check_cubetexformat(cflg);} +inlineboolcheck_voltexformat(intcflg){returnd3di.check_voltexformat(cflg);} + +inlineBaseTexture*create_tex(TexImage32*img,intw,inth,intflg,intlevels,constchar*stat_name) +{ +returnd3di.create_tex(img,w,h,flg,levels,stat_name); +} +inlineBaseTexture*create_cubetex(intsize,intflg,intlevels,constchar*stat_name) +{ +returnd3di.create_cubetex(size,flg,levels,stat_name); +} +inlineBaseTexture*create_voltex(intw,inth,intd,intflg,intlevels,constchar*stat_name) +{ +returnd3di.create_voltex(w,h,d,flg,levels,stat_name); +} +inlineBaseTexture*create_array_tex(intw,inth,intd,intflg,intlevels,constchar*stat_name) +{ +returnd3di.create_array_tex(w,h,d,flg,levels,stat_name); +} +inlineBaseTexture*create_cube_array_tex(intside,intd,intflg,intlevels,constchar*stat_name) +{ +returnd3di.create_cube_array_tex(side,d,flg,levels,stat_name); +} + +inlineBaseTexture*create_ddsx_tex(IGenLoad&crd,intflg,intquality_id,intlevels,constchar*stat_name) +{ +returnd3di.create_ddsx_tex(crd,flg,quality_id,levels,stat_name); +} + +inlineBaseTexture*alloc_ddsx_tex(constddsx::Header&hdr,intflg,intquality_id,intlevels,constchar*stat_name, +intstub_tex_idx) +{ +returnd3di.alloc_ddsx_tex(hdr,flg,quality_id,levels,stat_name,stub_tex_idx); +} + +inlineBaseTexture*alias_tex(BaseTexture*baseTexture,TexImage32*img,intw,inth,intflg,intlevels,constchar*stat_name) +{ +returnd3di.alias_tex(baseTexture,img,w,h,flg,levels,stat_name); +} + +inlineBaseTexture*alias_cubetex(BaseTexture*baseTexture,intsize,intflg,intlevels,constchar*stat_name) +{ +returnd3di.alias_cubetex(baseTexture,size,flg,levels,stat_name); +} + +inlineBaseTexture*alias_voltex(BaseTexture*baseTexture,intw,inth,intd,intflg,intlevels,constchar*stat_name) +{ +returnd3di.alias_voltex(baseTexture,w,h,d,flg,levels,stat_name); +} + +inlineBaseTexture*alias_array_tex(BaseTexture*baseTexture,intw,inth,intd,intflg,intlevels,constchar*stat_name) +{ +returnd3di.alias_array_tex(baseTexture,w,h,d,flg,levels,stat_name); +} + +inlineBaseTexture*alias_cube_array_tex(BaseTexture*baseTexture,intside,intd,intflg,intlevels,constchar*stat_name) +{ +returnd3di.alias_cube_array_tex(baseTexture,side,d,flg,levels,stat_name); +} + +inlineboolstretch_rect(BaseTexture*src,BaseTexture*dst,RectInt*rsrc,RectInt*rdst) +{ +returnd3di.stretch_rect(src,dst,rsrc,rdst); +} + +inlinevoidget_texture_statistics(uint32_t*num_textures,uint64_t*total_mem,String*out_dump) +{ +d3di.get_texture_statistics(num_textures,total_mem,out_dump); +} + +inlineboolset_tex(unsignedshader_stage,unsignedslot,BaseTexture*tex,booluse_sampler) +{ +returnd3di.set_tex(shader_stage,slot,tex,use_sampler); +} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__tiled_resource_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__tiled_resource_8h.xml new file mode 100644 index 000000000..27ae27f43 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__tiled_resource_8h.xml @@ -0,0 +1,76 @@ + + + + dag_tiledResource.h + TileMapping + TextureTilingInfo + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +structResourceHeap; +classBaseTexture; + +structTileMapping +{ +size_ttexX; +size_ttexY; +size_ttexZ; +size_ttexSubresource; +size_theapTileIndex; +size_theapTileSpan; +}; + + +structTextureTilingInfo +{ +size_ttotalNumberOfTiles; +size_tnumUnpackedMips; +size_tnumPackedMips; +size_tnumTilesNeededForPackedMips; +size_tfirstPackedTileIndex; +size_ttileWidthInPixels; +size_ttileHeightInPixels; +size_ttileDepthInPixels; +size_ttileMemorySize; + +size_tsubresourceWidthInTiles; +size_tsubresourceHeightInTiles; +size_tsubresourceDepthInTiles; +size_tsubresourceStartTileIndex; +}; + + +namespaced3d +{ +voidmap_tile_to_resource(BaseTexture*tex,ResourceHeap*heap,constTileMapping*mapping,size_tmapping_count); + +TextureTilingInfoget_texture_tiling_info(BaseTexture*tex,size_tsubresource); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlinevoidmap_tile_to_resource(BaseTexture*tex,ResourceHeap*heap,constTileMapping*mapping,size_tmapping_count) +{ +returnd3di.map_tile_to_resource(tex,heap,mapping,mapping_count); +} +inlineTextureTilingInfoget_texture_tiling_info(BaseTexture*tex,size_tsubresource) +{ +returnd3di.get_texture_tiling_info(tex,subresource); +} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__variable_rate_shading_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__variable_rate_shading_8h.xml new file mode 100644 index 000000000..f313d770a --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__variable_rate_shading_8h.xml @@ -0,0 +1,78 @@ + + + + dag_variableRateShading.h + drv/3d/dag_consts.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +classBaseTexture; + +#include<drv/3d/dag_consts.h> + +namespaced3d +{ +voidset_variable_rate_shading(unsignedrate_x,unsignedrate_y, +VariableRateShadingCombinervertex_combiner=VariableRateShadingCombiner::VRS_PASSTHROUGH, +VariableRateShadingCombinerpixel_combiner=VariableRateShadingCombiner::VRS_PASSTHROUGH); + +voidset_variable_rate_shading_texture(BaseTexture*rate_texture=nullptr); + +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlinevoidset_variable_rate_shading(unsignedrate_x,unsignedrate_y,VariableRateShadingCombinervertex_combiner, +VariableRateShadingCombinerpixel_combiner) +{ +d3di.set_variable_rate_shading(rate_x,rate_y,vertex_combiner,pixel_combiner); +} + +inlinevoidset_variable_rate_shading_texture(BaseTexture*rate_texture){d3di.set_variable_rate_shading_texture(rate_texture);} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__vertex_index_buffer_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__vertex_index_buffer_8h.xml new file mode 100644 index 000000000..b8fa5f961 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__vertex_index_buffer_8h.xml @@ -0,0 +1,118 @@ + + + + dag_vertexIndexBuffer.h + drv/3d/dag_consts.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d + + + Sbuffer + using Ibuffer = Sbuffer + + Ibuffer + + + + + + + + + + Sbuffer + using Vbuffer = Sbuffer + + Vbuffer + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_consts.h> + +classSbuffer; + +usingIbuffer=Sbuffer; +usingVbuffer=Sbuffer; + +namespaced3d +{ +Sbuffer*create_vb(intsize_bytes,intflags,constchar*name=""); + +Sbuffer*create_ib(intsize_bytes,intflags,constchar*stat_name="ib"); + +boolsetvsrc_ex(intstream,Sbuffer*vb,intoffset,intstride_bytes); + +inlineboolsetvsrc(intstream,Sbuffer*vb,intstride_bytes){returnsetvsrc_ex(stream,vb,0,stride_bytes);} + +boolsetind(Sbuffer*ib); + +VDECLcreate_vdecl(VSDTYPE*vsd); + +voiddelete_vdecl(VDECLvdecl); + +boolsetvdecl(VDECLvdecl); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineSbuffer*create_vb(intsz,intf,constchar*name){returnd3di.create_vb(sz,f,name);} +inlineSbuffer*create_ib(intsize_bytes,intflags,constchar*stat_name){returnd3di.create_ib(size_bytes,flags,stat_name);} +inlineboolsetvsrc_ex(ints,Sbuffer*vb,intofs,intstride_bytes){returnd3di.setvsrc_ex(s,vb,ofs,stride_bytes);} +inlineboolsetind(Sbuffer*ib){returnd3di.setind(ib);} +inlineVDECLcreate_vdecl(VSDTYPE*vsd){returnd3di.create_vdecl(vsd);} +inlinevoiddelete_vdecl(VDECLvdecl){returnd3di.delete_vdecl(vdecl);} +inlineboolsetvdecl(VDECLvdecl){returnd3di.setvdecl(vdecl);} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dag__view_scissor_8h.xml b/breathe/doxygen/d3dAPI/xml/dag__view_scissor_8h.xml new file mode 100644 index 000000000..087b829a6 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dag__view_scissor_8h.xml @@ -0,0 +1,61 @@ + + + + dag_viewScissor.h + generic/dag_span.h + + + + + + + + + + + + d3d + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<generic/dag_span.h> + +structScissorRect; +structViewport; + +namespaced3d +{ +boolsetscissor(intx,inty,intw,inth); + +boolsetscissors(dag::ConstSpan<ScissorRect>scissorRects); + +boolsetview(intx,inty,intw,inth,floatminz,floatmaxz); + +boolsetviews(dag::ConstSpan<Viewport>viewports); + +boolgetview(int&x,int&y,int&w,int&h,float&minz,float&maxz); +}//namespaced3d + +#if_TARGET_D3D_MULTI +#include<drv/3d/dag_interface_table.h> +namespaced3d +{ +inlineboolsetscissor(intx,inty,intw,inth){returnd3di.setscissor(x,y,w,h);} +inlineboolsetscissors(dag::ConstSpan<ScissorRect>scissorRects){returnd3di.setscissors(scissorRects);} +inlineboolsetview(intx,inty,intw,inth,floatminz,floatmaxz){returnd3di.setview(x,y,w,h,minz,maxz);} +inlineboolsetviews(dag::ConstSpan<Viewport>viewports){returnd3di.setviews(viewports);} +inlineboolgetview(int&x,int&y,int&w,int&h,float&minz,float&maxz){returnd3di.getview(x,y,w,h,minz,maxz);} +}//namespaced3d +#endif + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dir_60c44b399b02e309c83119e434d4c2e5.xml b/breathe/doxygen/d3dAPI/xml/dir_60c44b399b02e309c83119e434d4c2e5.xml new file mode 100644 index 000000000..727d3bbea --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dir_60c44b399b02e309c83119e434d4c2e5.xml @@ -0,0 +1,12 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dir_8ca3c33aea3b394a9c183002f8366461.xml b/breathe/doxygen/d3dAPI/xml/dir_8ca3c33aea3b394a9c183002f8366461.xml new file mode 100644 index 000000000..03ca2b825 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dir_8ca3c33aea3b394a9c183002f8366461.xml @@ -0,0 +1,12 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dir_dfe6bed94bcf04987b38a6f8493ab81c.xml b/breathe/doxygen/d3dAPI/xml/dir_dfe6bed94bcf04987b38a6f8493ab81c.xml new file mode 100644 index 000000000..5c2dc9dd2 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dir_dfe6bed94bcf04987b38a6f8493ab81c.xml @@ -0,0 +1,12 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/dir_ecce630f3dbd0506f837a6182ad5b860.xml b/breathe/doxygen/d3dAPI/xml/dir_ecce630f3dbd0506f837a6182ad5b860.xml new file mode 100644 index 000000000..a8bb6acf6 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/dir_ecce630f3dbd0506f837a6182ad5b860.xml @@ -0,0 +1,63 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d + dag_async_pipeline.h + dag_barrier.h + dag_bindless.h + dag_buffers.h + dag_capture.h + dag_commands.h + dag_consts.h + dag_consts_base.h + dag_d3dResource.h + dag_decl.h + dag_dispatch.h + dag_dispatchMesh.h + dag_draw.h + dag_driver.h + dag_driverCode.h + dag_driverNetManager.h + dag_drv3d_multi.h + dag_hangHandler.h + dag_heap.h + dag_info.h + dag_interface_table.h + dag_lock.h + dag_matricesAndPerspective.h + dag_platform.h + dag_platform_pc.h + dag_platform_ps.h + dag_query.h + dag_renderPass.h + dag_renderStateId.h + dag_renderStates.h + dag_renderTarget.h + dag_res.h + dag_resetDevice.h + dag_resId.h + dag_resource.h + dag_resourceChecker.h + dag_resUpdateBuffer.h + dag_rwResource.h + dag_sampler.h + dag_samplerHandle.h + dag_shader.h + dag_shaderConstants.h + dag_shaderLibrary.h + dag_shaderLibraryObject.h + dag_shaderModelVersion.h + dag_tex3d.h + dag_texFlags.h + dag_texture.h + dag_tiledResource.h + dag_variableRateShading.h + dag_vertexIndexBuffer.h + dag_viewScissor.h + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/group___heap_d3_d.xml b/breathe/doxygen/d3dAPI/xml/group___heap_d3_d.xml new file mode 100644 index 000000000..9a4ed1549 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/group___heap_d3_d.xml @@ -0,0 +1,541 @@ + + + + HeapD3D + HeapD3D + + + ResourceAllocationProperties + ResourceAllocationProperties d3d::get_resource_allocation_properties + (const ResourceDescription &desc) + get_resource_allocation_properties + + const ResourceDescription & + desc + + +Retrieves the resource allocation properties for a given resource description. + + + + +desc + + +The resource description. Resource descriptions that would describe a resource with one or more of its dimensions being 0 will result in an error. + + + +The resource allocation properties. On error sizeInBytes field of the returned value will be 0. + + + + + + + + + ResourceHeap * + ResourceHeap* d3d::create_resource_heap + (ResourceHeapGroup *heap_group, size_t size, ResourceHeapCreateFlags flags) + create_resource_heap + + ResourceHeapGroup * + heap_group + + + size_t + size + + + ResourceHeapCreateFlags + flags + + +Creates a resource heap with the specified size and flags. + + + + +heap_group + + +The resource heap group. + + + + +size + + +The size of the resource heap in bytes. A value of 0 is invalid and results in undefined behavior. + + + + +flags + + +The flags for creating the resource heap. + + + +A pointer to the created resource heap. May be nullptr on error, like out of memory or invalid inputs. + + + + + + + + + void + void d3d::destroy_resource_heap + (ResourceHeap *heap) + destroy_resource_heap + + ResourceHeap * + heap + + +Destroys a resource heap. + + + + +heap + + +The resource heap to destroy. + + + + + + + + + + + Sbuffer * + Sbuffer* d3d::place_buffer_in_resource_heap + (ResourceHeap *heap, const ResourceDescription &desc, size_t offset, const ResourceAllocationProperties &alloc_info, const char *name) + place_buffer_in_resource_heap + + ResourceHeap * + heap + + + const ResourceDescription & + desc + + + size_t + offset + + + const ResourceAllocationProperties & + alloc_info + + + const char * + name + + +Places a buffer in a resource heap at the specified offset. + + +The heap group of heap has to match the heap group of alloc_info that was returned by get_resource_allocation_properties. + + +heap + + +The resource heap. + + + + +desc + + +The resource description. + + + + +offset + + +The offset in the resource heap in bytes. + + + + +alloc_info + + +The resource allocation properties. + + + + +name + + +The name of the buffer. + + + +A pointer to the placed buffer. May be nullptr on error, like invalid inputs. + + + + + + + + + BaseTexture * + BaseTexture* d3d::place_texture_in_resource_heap + (ResourceHeap *heap, const ResourceDescription &desc, size_t offset, const ResourceAllocationProperties &alloc_info, const char *name) + place_texture_in_resource_heap + + ResourceHeap * + heap + + + const ResourceDescription & + desc + + + size_t + offset + + + const ResourceAllocationProperties & + alloc_info + + + const char * + name + + +Places a texture in a resource heap at the specified offset. + + +The heap group of heap has to match the heap group of alloc_info that was returned by get_resource_allocation_properties. + + +heap + + +The resource heap. + + + + +desc + + +The resource description. + + + + +offset + + +The offset in the resource heap in bytes. + + + + +alloc_info + + +The resource allocation properties. + + + + +name + + +The name of the texture. + + + +A pointer to the placed texture. May be nullptr on error, like invalid inputs. + + + + + + + + + ResourceHeapGroupProperties + ResourceHeapGroupProperties d3d::get_resource_heap_group_properties + (ResourceHeapGroup *heap_group) + get_resource_heap_group_properties + + ResourceHeapGroup * + heap_group + + +Retrieves the resource heap group properties for a given resource heap group. + + +Different groups may return identical values, this does not mean that the heap group is identical or can be substituted for each another. Heap groups represent purpose bound memory that may have device specific properties, that limit the use of a heap group for certain resource types. + + + +heap_group + + +The resource heap group. + + + +The resource heap group properties. + + + + + + + + + void + void d3d::activate_buffer + (Sbuffer *buf, ResourceActivationAction action, const ResourceClearValue &value={}, GpuPipeline gpu_pipeline=GpuPipeline::GRAPHICS) + activate_buffer + + Sbuffer * + buf + + + ResourceActivationAction + action + + + const ResourceClearValue & + value + {} + + + GpuPipeline + gpu_pipeline + GpuPipeline::GRAPHICS + + +Activates a buffer with the specified action and optional clear value. + + +Only activated placed buffer could be safely used. Using the buffer before being activated results in undefined behavior. + + +buf + + +The buffer to activate. + + + + +action + + +The activation action. + + + + +value + + +The clear value (optional). + + + + +gpu_pipeline + + +The GPU pipeline to use (optional). + + + +gpu_pipeline parameter doesn't work currently. + + + + + + + + + void + void d3d::activate_texture + (BaseTexture *tex, ResourceActivationAction action, const ResourceClearValue &value={}, GpuPipeline gpu_pipeline=GpuPipeline::GRAPHICS) + activate_texture + + BaseTexture * + tex + + + ResourceActivationAction + action + + + const ResourceClearValue & + value + {} + + + GpuPipeline + gpu_pipeline + GpuPipeline::GRAPHICS + + +Activates a texture with the specified action and optional clear value. + + +Only activated placed textures could be safely used. Using the texture before being activated results in undefined behavior. + + +tex + + +The texture to activate. + + + + +action + + +The activation action. + + + + +value + + +The clear value (optional). + + + + +gpu_pipeline + + +The GPU pipeline to use (optional). + + + +gpu_pipeline parameter doesn't work currently. + + + + + + + + + void + void d3d::deactivate_buffer + (Sbuffer *buf, GpuPipeline gpu_pipeline=GpuPipeline::GRAPHICS) + deactivate_buffer + + Sbuffer * + buf + + + GpuPipeline + gpu_pipeline + GpuPipeline::GRAPHICS + + +Deactivates a buffer with the specified GPU pipeline. + + +The method call is necessary to have a correct state of the resources on a heap. Using the buffer after being deactivated results in undefined behavior. + + +buf + + +The placed buffer to deactivate. + + + + +gpu_pipeline + + +The GPU pipeline to use (optional). + + + +gpu_pipeline parameter doesn't work currently. + + + + + + + + + void + void d3d::deactivate_texture + (BaseTexture *tex, GpuPipeline gpu_pipeline=GpuPipeline::GRAPHICS) + deactivate_texture + + BaseTexture * + tex + + + GpuPipeline + gpu_pipeline + GpuPipeline::GRAPHICS + + +Deactivates a texture with the specified GPU pipeline. + + +The method call is necessary to have a correct state of the resources on a heap. Using the texture after being deactivated results in undefined behavior. + + +tex + + +The placed texture to deactivate. + + + + +gpu_pipeline + + +The GPU pipeline to use (optional). + + + +gpu_pipeline parameter doesn't work currently. + + + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/group___render_pass_consts.xml b/breathe/doxygen/d3dAPI/xml/group___render_pass_consts.xml new file mode 100644 index 000000000..6b70a0595 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/group___render_pass_consts.xml @@ -0,0 +1,242 @@ + + + + RenderPassConsts + RenderPassConsts + + + int + RenderPassTargetAction + + RP_TA_NONE + = 0 + +No action with target will happen. + + +Only dependencyBarrier of binding will be executed for this target Content of target becomes invalid if no action is supplied overall + + + + + + RP_TA_LOAD_READ + = 1u << 0 + +Loads contents of target from memory to framebuffer. + + +Avoid load operations on TBDR hardware + + + + + + RP_TA_LOAD_CLEAR + = 1u << 1 + +Loads clear value to framebuffer instead of doing any memory operation. + + + + + + RP_TA_LOAD_NO_CARE + = 1u << 2 + +Don't care about loading contents of target (aka discard) + + +Initial content of frame buffer is underfined, make sure to handle this + + + + + + RP_TA_LOAD_MASK + = RP_TA_LOAD_NO_CARE | RP_TA_LOAD_CLEAR | RP_TA_LOAD_READ + +Bitmask of any load operation. + + +load action is performed for each target when its being accessed for the first time in render pass + + + + + + RP_TA_SUBPASS_READ + = 1u << 3 + +Target contents will be readed by subpass. + + +This corresponds to SubpassInput with SubpassLoad inside shader + +Generic implementation uses T register with subpassBindingOffset instead of SubpassInput, this must be handled properly in shader code + + + + + + RP_TA_SUBPASS_RESOLVE + = 1u << 4 + +Target will be used as MSAA resolve destination of MSAA target bound in same slot. + + +MSAA Depth resolve is optional feature if non generic implementation is used + +Must supply MSAA target in same slot in another binding otherwise creation on render pass will fail + + + + + + RP_TA_SUBPASS_WRITE + = 1u << 5 + +Target contents will be written by subpass. + + + + + + RP_TA_SUBPASS_KEEP + = 1u << 6 + +Target contents will be keeped intact if it was not used in subpass (otherwise UB) + + + + + + RP_TA_SUBPASS_MASK + = RP_TA_SUBPASS_READ | RP_TA_SUBPASS_RESOLVE | RP_TA_SUBPASS_WRITE | RP_TA_SUBPASS_KEEP + +Bitmask of any subpass operation. + + + + + + RP_TA_STORE_WRITE + = 1u << 7 + +Contents of framebuffer will be written to target memory. + + + + + + RP_TA_STORE_NONE + = 1u << 8 + +Contents of framebuffer will not be stored. + + + + + + RP_TA_STORE_NO_CARE + = 1u << 9 + +Don't care about target memory contents. + + +Target memory contents will be left in UB state + + + + + + RP_TA_STORE_MASK + = RP_TA_STORE_NO_CARE | RP_TA_STORE_NONE | RP_TA_STORE_WRITE + +Bitmask of any load operation. + + +store action is performed once for each target on whole pass completion + + + + + +Bitfield of actions that happen with target at given slot and subpass. + + + + + + + + + int + RenderPassExtraIndexes + + RP_INDEX_NORMAL + = 0 + + + + + + + RP_SUBPASS_EXTERNAL_END + = -1 + +Pseudo subpass index, that happens at end of render pass. + + +Used to provide store actions as well as dependencyBarriers for generic implementation + + + + RP_SLOT_DEPTH_STENCIL + = -1 + +Slot for depth/stencil. + + +Using this slot will bind target as depth/stencil + + + +extra indexes that encode special cases of render pass description + + + + + + + + + + + constexpr RenderPassTargetAction + constexpr RenderPassTargetAction operator| + (RenderPassTargetAction l, RenderPassTargetAction r) + operator| + + RenderPassTargetAction + l + + + RenderPassTargetAction + r + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/group___render_pass_d3_d.xml b/breathe/doxygen/d3dAPI/xml/group___render_pass_d3_d.xml new file mode 100644 index 000000000..b5add6321 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/group___render_pass_d3_d.xml @@ -0,0 +1,203 @@ + + + + RenderPassD3D + RenderPassD3D + + + RenderPass * + RenderPass* d3d::create_render_pass + (const RenderPassDesc &rp_desc) + create_render_pass + + const RenderPassDesc & + rp_desc + + +Creates render pass object. + + +Render pass objects are intended to be created once (and ahead of time), used many times No external sync required + +Do not run per frame/realtime! + +Avoid using at time sensitive places! + +Will assert-fail if rp_desc.bindCount is 0 + + + +rp_desc + + +Description of render pass to be created + + + +Pointer to opaque RenderPass object, may be nullptr if description is invalid + + + + + + + + + void + void d3d::delete_render_pass + (RenderPass *rp) + delete_render_pass + + RenderPass * + rp + + +Deletes render pass object. + + +Sync with usage is required (must not delete object that is in use in current CPU frame) + +All usage to object becomes invalid right after method call + + + +rp + + +Object to be deleted + + + + + + + + + + + void + void d3d::begin_render_pass + (RenderPass *rp, const RenderPassArea area, const RenderPassTarget *targets) + begin_render_pass + + RenderPass * + rp + + + const RenderPassArea + area + + + const RenderPassTarget * + targets + + +Begins render pass rendering. + + +After this command, viewport is reset to area supplied and subpass 0, described in render pass object, is started Must be external synced (GPU lock required) + +When inside pass, all other GPU execution methods aside of Draw* are prohibited! + +Avoid writes/reads outside area, it is UB in general + +Will assert-fail if other render pass is already in process + +Backbuffer can't be used as target + + + +rp + + +Render pass resource to begin with + + + + +area + + +Rendering area restriction + + + + +targets + + +Array of targets that will be used in rendering + + + + + + + + + + + void + void d3d::next_subpass + () + next_subpass + +Advances to next subpass. + + +Increases subpass number and executes necessary synchronization as well as binding, described for this subpass +Viewport is reset to render area on every call Must be external synced (GPU lock required) + +Will assert-fail if there is no subpass to advance to + +Will assert-fail if called outside of render pass + + + + + + + + + void + void d3d::end_render_pass + () + end_render_pass + +Ends render pass. + + +Processes store&sync operations described in render pass +After this call, any non Draw operations are allowed and render targets are reset to backbuffer Must be external synced (GPU lock required) + +Will assert-fail if subpass is not final + +Will assert-fail if called outside of render pass + + + + + + + + + void + void d3d::allow_render_pass_target_load + () + allow_render_pass_target_load + + + +When renderpass splits validation is enabled in Vulkan this command tells that we actually want to load previous contents of attached color targets or depth to render on top of it. Otherwise loading previous contents treated as renderpass split and the validation fails (we want to avoid RP splits cause of performance impact on TBDR). If it's known that the render target will be just fully redrawn (like in most postfx), it's better to use d3d::clearview(CLEAR_DISCARD, ...) instead of this command. + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/group___render_pass_structs.xml b/breathe/doxygen/d3dAPI/xml/group___render_pass_structs.xml new file mode 100644 index 000000000..4b28d1e7f --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/group___render_pass_structs.xml @@ -0,0 +1,16 @@ + + + + RenderPassStructs + RenderPassStructs + RenderPassBind + RenderPassTargetDesc + RenderPassTarget + RenderPassDesc + RenderPassArea + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/index.xml b/breathe/doxygen/d3dAPI/xml/index.xml new file mode 100644 index 000000000..f2bc7ffd5 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/index.xml @@ -0,0 +1,3278 @@ + + + d3d::drivercode::matcher::AllMatch + value + wasMatched + ::DriverCode + onMatch + is + AllMatch + AllMatch + AllMatch + AllMatch + AllMatch + operator= + operator= + operator() + match + operator bool + operator! + + d3d::drivercode::matcher::Any + operator! + + d3d::shadermodel::AnyVersion + + ArrayCubeTextureResourceDescription + cubes + + ArrayTextureResourceDescription + arrayLayers + + d3d::AutoPipelineAsyncCompile + AutoPipelineAsyncCompile + ~AutoPipelineAsyncCompile + + d3d::AutoPipelineAsyncCompileFeedback + needRetry + supported + externalNeedRetry + isRetryNeeded + isExternalRetryNeeded + isSupported + AutoPipelineAsyncCompileFeedback + ~AutoPipelineAsyncCompileFeedback + + BaseTexture + samplerEnabled + TEX_COPIED + setReloadCallback + generateMips + update + calcSubResIdx + updateSubRegion + updateSubRegionNoOrder + level_count + texaddr + texaddru + texaddrv + texaddrw + texbordercolor + texfilter + texmipmap + texlod + setAnisotropy + disableSampler + isSamplerEnabled + texmiplevel + isCubeArray + setReadStencil + setTID + getTID + getTexName + setResApiName + lockimg + lockimg + unlockimg + unlock + lockbox + unlockbox + getinfo + lockimgEx + makeTmpTexResCopy + replaceTexResObject + allocateTex + discardTex + downSize + upSize + BaseTexture + BaseTexture + operator= + calcSubResIdx + ~BaseTexture + texaddrImpl + texaddruImpl + texaddrvImpl + texaddrwImpl + texbordercolorImpl + texfilterImpl + texmipmapImpl + texlodImpl + setAnisotropyImpl + + d3d::shadermodel::matcher::BasicMap + value + wasMatched + memory + object + cMove + cContruct + cEmplace + BasicMap + BasicMap + BasicMap + operator= + operator= + BasicMap + BasicMap + BasicMap + BasicMap + map + map + map + map + map + map + get + get + + BasicResourceDescription + cFlags + activation + clearValue + + BasicTextureResourceDescription + mipLevels + + d3d::drivercode::matcher::BinaryOp + ThisType + first + second + is + operator! + + shaders::RenderState::BlendFactors + src + dst + + shaders::RenderState::BlendParams + ablendFactors + sepablendFactors + blendOp + sepablendOp + ablend + sepablend + + d3d::BorderColor + Color + TransparentBlack + OpaqueBlack + OpaqueWhite + UnderlyingT + color + BorderColor + operator E3DCOLOR + operator UnderlyingT + + BufferResourceDescription + elementSizeInBytes + elementCount + viewFormat + + CompilePipelineSet + defaultFormat + featureSet + inputLayoutSet + renderStateSet + outputFormatSet + graphicsPipelineSet + meshPipelineSet + computePipelineSet + signature + computeSet + graphicsSet + graphicsNullPixelOverrideSet + graphicsPixelOverrideSet + + d3d::drivercode::matcher::Const + is + operator! + + d3d::drivercode::matcher::ConstID + ThisType + value + operator! + + CubeTextureResourceDescription + extent + + D3dInterfaceTable + get_driver_name + get_device_driver_version + get_device_name + get_last_error + get_last_error_code + get_device + get_driver_desc + driver_command + device_lost + reset_device + is_in_device_reset_now + is_window_occluded + should_use_compute_for_image_processing + get_texformat_usage + check_texformat + get_max_sample_count + issame_texformat + check_cubetexformat + check_voltexformat + create_tex_0 + create_cubetex_0 + create_voltex + create_array_tex + create_cube_array_tex + create_ddsx_tex + alloc_ddsx_tex + alias_tex_0 + alias_cubetex_0 + alias_voltex_0 + alias_array_tex_0 + alias_cube_array_tex_0 + stretch_rect_0 + copy_from_current_render_target + get_texture_statistics + request_sampler + set_sampler + settex + settex_vs + create_program_0 + create_program_1 + create_program_cs + set_program + delete_program + create_vertex_shader + create_vertex_shader_dagor + create_vertex_shader_asm + create_vertex_shader_hlsl + delete_vertex_shader + set_vertex_shader + set_const + set_immediate_const + create_pixel_shader + create_pixel_shader_dagor + create_pixel_shader_asm + create_pixel_shader_hlsl + delete_pixel_shader + set_pixel_shader + set_vs_constbuffer_size + set_cs_constbuffer_size + set_const_buffer + register_bindless_sampler_0 + register_bindless_sampler_1 + allocate_bindless_resource_range + resize_bindless_resource_range + free_bindless_resource_range + update_bindless_resource + update_bindless_resources_to_null + set_tex + set_rwtex + clear_rwtexi + clear_rwtexf + clear_rwbufi + clear_rwbuff + clear_rt + set_buffer + set_rwbuffer + create_vb_0 + create_ib + create_sbuffer + set_depth_0 + set_depth_1 + set_render_target_0 + set_render_target_1 + set_render_target_2 + set_render_target_3 + get_render_target + get_target_size + get_render_target_size + set_variable_rate_shading + set_variable_rate_shading_texture + settm_0 + settm_1 + settm_2 + gettm_0 + gettm_1 + gettm_2 + gettm_cref + getm2vtm + setglobtm + getglobtm + setpersp + getpersp + validatepersp + calcproj_0 + calcproj_1 + calcglobtm_0 + calcglobtm_1 + calcglobtm_2 + calcglobtm_3 + getglobtm_vec + setglobtm_vec + setscissor + setscissors + setview + setviews + getview + clearview + update_screen + wait_for_async_present + gpu_latency_wait + setvsrc_ex + setind + create_vdecl + delete_vdecl + setvdecl + draw_base + drawind_base + draw_up + drawind_up + draw_indirect + draw_indexed_indirect + multi_draw_indirect + multi_draw_indexed_indirect + dispatch + dispatch_indirect + dispatch_mesh + dispatch_mesh_indirect + dispatch_mesh_indirect_count + insert_fence + insert_wait_on_fence + create_render_state + set_render_state + clear_render_states + set_blend_factor + setstencil + setwire + set_srgb_backbuffer_write + setgamma + get_screen_aspect_ratio + change_screen_aspect_ratio + fast_capture_screen + end_fast_capture_screen + capture_screen + release_capture_buffer + get_screen_size + set_depth_bounds + create_predicate + free_predicate + begin_survey + end_survey + begin_conditional_render + end_conditional_render + get_program_vdecl + get_vrr_supported + get_vsync_enabled + enable_vsync + create_event_query + release_event_query + issue_event_query + get_event_query_status + set_present_wnd + set_capture_full_frame_buffer + get_texture_format + get_texture_format_str + get_video_modes_list + get_debug_program + beginEvent + endEvent + get_backbuffer_tex + get_secondary_backbuffer_tex + resource_barrier + create_render_pass + delete_render_pass + begin_render_pass + next_subpass + end_render_pass + allow_render_pass_target_load + get_resource_allocation_properties + create_resource_heap + destroy_resource_heap + place_buffer_in_resource_heap + place_texture_in_resource_heap + get_resource_heap_group_properties + map_tile_to_resource + get_texture_tiling_info + activate_buffer + activate_texture + deactivate_buffer + deactivate_texture + allocate_update_buffer_for_tex_region + allocate_update_buffer_for_tex + release_update_buffer + get_update_buffer_addr_for_write + get_update_buffer_size + get_update_buffer_pitch + get_update_buffer_slice_pitch + update_texture_and_release_update_buffer + get_native_surface + start_capture + stop_capture + create_shader_library + destroy_shader_library + driverCode + driverName + driverVer + deviceName + drvDesc + register_bindless_sampler + register_bindless_sampler + create_vb + create_tex + stretch_rect + setvsrc + create_cubetex + alias_tex + alias_cubetex + alias_voltex + alias_array_tex + alias_cube_array_tex + set_render_target + set_render_target + set_render_target + set_render_target + set_depth + set_depth + settm + settm + settm + gettm + gettm + gettm + + D3dResetQueue + reset_func + next + func + name + tailBeforeReset + tailAfterReset + D3dResetQueue + perform_reset_queue + perform_before_reset + perform_after_reset + + D3DRESID + operator== + operator!= + operator< + operator> + handle + D3DRESID + D3DRESID + D3DRESID + operator= + operator= + D3DRESID + operator unsigned + operator bool + reset + index + generation + checkMarkerBit + make + fromIndex + + D3dResource + statName + destroy + restype + ressize + getResName + setResName + setResName + setResApiName + D3dResource + D3dResource + operator= + ~D3dResource + + DebugConverter + + DebugConverter< d3d::shadermodel::Version > + getDebugType + + DebugConverter< d3d::shadermodel::VersionConstant< Major, Minor > > + getDebugType + + DebugConverter< d3d::shadermodel::VersionWithName > + getDebugType + + DebugConverter< D3DRESID > + getDebugType + + DeviceDriverCapabilitiesAndroid + hasDepthReadOnly + hasStructuredBuffers + hasNoOverwriteOnShaderResourceBuffers + hasForcedSamplerCount + hasVolMipMap + hasAsyncCompute + hasOcclusionQuery + hasConstBufferOffset + hasAsyncCopy + hasReadMultisampledDepth + hasGather4 + hasAlphaCoverage + hasNVApi + hasATIApi + hasVariableRateShading + hasVariableRateShadingTexture + hasVariableRateShadingShaderOutput + hasVariableRateShadingCombiners + hasVariableRateShadingBy4 + hasAliasedTextures + hasBufferOverlapCopy + hasBufferOverlapRegionsCopy + hasResourceCopyConversion + hasShader64BitIntegerResources + hasNativeRenderPassSubPasses + hasTiled2DResources + hasTiled3DResources + hasTiledSafeResourcesAccess + hasTiledMemoryAliasing + hasDLSS + hasXESS + hasDrawID + hasMeshShader + hasBasicViewInstancing + hasOptimizedViewInstancing + hasAcceleratedViewInstancing + hasStereoExpansion + hasIndirectSupport + hasCompareSampler + hasUAVOnEveryStage + hasBaseVertexSupport + castingFullyTypedFormatsSupported + + DeviceDriverCapabilitiesBase + hasAnisotropicFilter + hasDepthReadOnly + hasStructuredBuffers + hasNoOverwriteOnShaderResourceBuffers + hasForcedSamplerCount + hasVolMipMap + hasAsyncCompute + hasOcclusionQuery + hasConstBufferOffset + hasDepthBoundsTest + hasConditionalRender + hasResourceCopyConversion + hasAsyncCopy + hasReadMultisampledDepth + hasInstanceID + hasConservativeRassterization + hasQuadTessellation + hasGather4 + hasAlphaCoverage + hasWellSupportedIndirect + hasBindless + hasNVApi + hasATIApi + hasVariableRateShading + hasVariableRateShadingTexture + hasVariableRateShadingShaderOutput + hasVariableRateShadingCombiners + hasVariableRateShadingBy4 + hasAliasedTextures + hasResourceHeaps + hasBufferOverlapCopy + hasBufferOverlapRegionsCopy + hasUAVOnlyForcedSampleCount + hasShader64BitIntegerResources + hasNativeRenderPassSubPasses + hasTiled2DResources + hasTiled3DResources + hasTiledSafeResourcesAccess + hasTiledMemoryAliasing + hasDLSS + hasXESS + hasDrawID + hasMeshShader + hasBasicViewInstancing + hasOptimizedViewInstancing + hasAcceleratedViewInstancing + hasRenderPassDepthResolve + hasStereoExpansion + hasTileBasedArchitecture + hasLazyMemory + hasIndirectSupport + hasCompareSampler + hasShaderFloat16Support + hasUAVOnEveryStage + hasRayAccelerationStructure + hasRayQuery + hasRayDispatch + hasIndirectRayDispatch + hasGeometryIndexInRayAccelerationStructure + hasSkipPrimitiveTypeInRayTracingShaders + hasBaseVertexSupport + castingFullyTypedFormatsSupported + hasNativeRayTracePipelineExpansion + hasWaveOps + + DeviceDriverCapabilitiesIOS + hasAnisotropicFilter + hasDepthReadOnly + hasStructuredBuffers + hasNoOverwriteOnShaderResourceBuffers + hasForcedSamplerCount + hasVolMipMap + hasAsyncCompute + hasOcclusionQuery + hasConstBufferOffset + hasDepthBoundsTest + hasConditionalRender + hasResourceCopyConversion + hasAsyncCopy + hasReadMultisampledDepth + hasInstanceID + hasConservativeRassterization + hasQuadTessellation + hasGather4 + hasAlphaCoverage + hasWellSupportedIndirect + hasBindless + hasNVApi + hasATIApi + hasVariableRateShading + hasVariableRateShadingTexture + hasVariableRateShadingShaderOutput + hasVariableRateShadingCombiners + hasVariableRateShadingBy4 + hasAliasedTextures + hasResourceHeaps + hasBufferOverlapCopy + hasBufferOverlapRegionsCopy + hasUAVOnlyForcedSampleCount + hasShader64BitIntegerResources + hasNativeRenderPassSubPasses + hasTiled2DResources + hasTiled3DResources + hasTiledSafeResourcesAccess + hasTiledMemoryAliasing + hasDLSS + hasXESS + hasDrawID + hasMeshShader + hasBasicViewInstancing + hasOptimizedViewInstancing + hasAcceleratedViewInstancing + hasStereoExpansion + hasTileBasedArchitecture + hasLazyMemory + hasShaderFloat16Support + hasUAVOnEveryStage + hasRayDispatch + hasIndirectRayDispatch + castingFullyTypedFormatsSupported + hasWaveOps + + DeviceDriverCapabilitiesLinux + hasAnisotropicFilter + hasDepthReadOnly + hasStructuredBuffers + hasNoOverwriteOnShaderResourceBuffers + hasForcedSamplerCount + hasVolMipMap + hasReadMultisampledDepth + hasGather4 + hasAlphaCoverage + hasShader64BitIntegerResources + hasNativeRenderPassSubPasses + hasTiled2DResources + hasTiled3DResources + hasTiledSafeResourcesAccess + hasTiledMemoryAliasing + hasDLSS + hasXESS + hasDrawID + hasMeshShader + hasBasicViewInstancing + hasOptimizedViewInstancing + hasAcceleratedViewInstancing + hasAsyncCompute + hasOcclusionQuery + hasNVApi + hasATIApi + hasVariableRateShading + hasVariableRateShadingTexture + hasVariableRateShadingShaderOutput + hasVariableRateShadingCombiners + hasVariableRateShadingBy4 + hasAliasedTextures + hasBufferOverlapCopy + hasBufferOverlapRegionsCopy + hasConstBufferOffset + hasAsyncCopy + hasResourceCopyConversion + hasStereoExpansion + hasLazyMemory + hasIndirectSupport + hasCompareSampler + hasUAVOnEveryStage + hasBaseVertexSupport + castingFullyTypedFormatsSupported + + DeviceDriverCapabilitiesMacOSX + hasAnisotropicFilter + hasDepthReadOnly + hasStructuredBuffers + hasNoOverwriteOnShaderResourceBuffers + hasForcedSamplerCount + hasVolMipMap + hasAsyncCompute + hasOcclusionQuery + hasConstBufferOffset + hasAsyncCopy + hasDepthBoundsTest + hasReadMultisampledDepth + hasInstanceID + hasConservativeRassterization + hasQuadTessellation + hasGather4 + hasAlphaCoverage + hasWellSupportedIndirect + hasNVApi + hasATIApi + hasVariableRateShading + hasVariableRateShadingTexture + hasVariableRateShadingShaderOutput + hasVariableRateShadingCombiners + hasVariableRateShadingBy4 + hasAliasedTextures + hasResourceHeaps + hasBufferOverlapCopy + hasBufferOverlapRegionsCopy + hasConditionalRender + hasResourceCopyConversion + hasShader64BitIntegerResources + hasNativeRenderPassSubPasses + hasTiled2DResources + hasTiled3DResources + hasTiledSafeResourcesAccess + hasTiledMemoryAliasing + hasDLSS + hasXESS + hasMeshShader + hasBasicViewInstancing + hasOptimizedViewInstancing + hasAcceleratedViewInstancing + hasStereoExpansion + hasTileBasedArchitecture + hasLazyMemory + hasIndirectSupport + hasCompareSampler + hasShaderFloat16Support + hasUAVOnEveryStage + hasRayDispatch + hasIndirectRayDispatch + castingFullyTypedFormatsSupported + hasWaveOps + + DeviceDriverCapabilitiesNintendoSwitch + hasAnisotropicFilter + hasDepthReadOnly + hasStructuredBuffers + hasNoOverwriteOnShaderResourceBuffers + hasForcedSamplerCount + hasVolMipMap + hasAsyncCompute + hasOcclusionQuery + hasConstBufferOffset + hasDepthBoundsTest + hasResourceCopyConversion + hasAsyncCopy + hasReadMultisampledDepth + hasInstanceID + hasConservativeRassterization + hasQuadTessellation + hasGather4 + hasAlphaCoverage + hasWellSupportedIndirect + hasNVApi + hasATIApi + hasVariableRateShading + hasVariableRateShadingTexture + hasVariableRateShadingShaderOutput + hasVariableRateShadingCombiners + hasVariableRateShadingBy4 + hasAliasedTextures + hasResourceHeaps + hasBufferOverlapCopy + hasBufferOverlapRegionsCopy + hasUAVOnlyForcedSampleCount + hasShader64BitIntegerResources + hasNativeRenderPassSubPasses + hasTiled2DResources + hasTiled3DResources + hasTiledSafeResourcesAccess + hasTiledMemoryAliasing + hasDLSS + hasXESS + hasDrawID + hasMeshShader + hasBasicViewInstancing + hasOptimizedViewInstancing + hasAcceleratedViewInstancing + hasStereoExpansion + hasTileBasedArchitecture + hasLazyMemory + hasIndirectSupport + hasCompareSampler + hasUAVOnEveryStage + hasRayAccelerationStructure + hasRayQuery + hasRayDispatch + hasIndirectRayDispatch + hasGeometryIndexInRayAccelerationStructure + hasSkipPrimitiveTypeInRayTracingShaders + hasBaseVertexSupport + castingFullyTypedFormatsSupported + hasNativeRayTracePipelineExpansion + + DeviceDriverCapabilitiesPS4 + hasAnisotropicFilter + hasDepthReadOnly + hasStructuredBuffers + hasNoOverwriteOnShaderResourceBuffers + hasForcedSamplerCount + hasVolMipMap + hasOcclusionQuery + hasConstBufferOffset + hasDepthBoundsTest + hasConditionalRender + hasResourceCopyConversion + hasAsyncCopy + hasReadMultisampledDepth + hasInstanceID + hasConservativeRassterization + hasQuadTessellation + hasGather4 + hasAlphaCoverage + hasWellSupportedIndirect + hasBindless + hasNVApi + hasATIApi + hasVariableRateShading + hasVariableRateShadingTexture + hasVariableRateShadingShaderOutput + hasVariableRateShadingCombiners + hasVariableRateShadingBy4 + hasAliasedTextures + hasBufferOverlapCopy + hasBufferOverlapRegionsCopy + hasUAVOnlyForcedSampleCount + hasShader64BitIntegerResources + hasNativeRenderPassSubPasses + hasTiled2DResources + hasTiled3DResources + hasTiledSafeResourcesAccess + hasTiledMemoryAliasing + hasDLSS + hasXESS + hasDrawID + hasMeshShader + hasBasicViewInstancing + hasOptimizedViewInstancing + hasAcceleratedViewInstancing + hasRenderPassDepthResolve + hasStereoExpansion + hasTileBasedArchitecture + hasLazyMemory + hasIndirectSupport + hasCompareSampler + hasShaderFloat16Support + hasUAVOnEveryStage + hasRayAccelerationStructure + hasRayQuery + hasRayDispatch + hasIndirectRayDispatch + hasGeometryIndexInRayAccelerationStructure + hasSkipPrimitiveTypeInRayTracingShaders + hasBaseVertexSupport + castingFullyTypedFormatsSupported + hasNativeRayTracePipelineExpansion + hasWaveOps + + DeviceDriverCapabilitiesPS5 + hasStereoExpansion + hasRayAccelerationStructure + hasRayQuery + hasRayDispatch + hasIndirectRayDispatch + hasGeometryIndexInRayAccelerationStructure + hasSkipPrimitiveTypeInRayTracingShaders + + DeviceDriverCapabilitiesScarlett + hasConservativeRassterization + hasVariableRateShading + hasVariableRateShadingTexture + hasVariableRateShadingShaderOutput + hasVariableRateShadingCombiners + hasShader64BitIntegerResources + hasMeshShader + hasRayAccelerationStructure + hasRayQuery + hasRayDispatch + hasIndirectRayDispatch + hasGeometryIndexInRayAccelerationStructure + hasSkipPrimitiveTypeInRayTracingShaders + hasBaseVertexSupport + castingFullyTypedFormatsSupported + hasNativeRayTracePipelineExpansion + + DeviceDriverCapabilitiesTVOS + hasAnisotropicFilter + hasDepthReadOnly + hasStructuredBuffers + hasNoOverwriteOnShaderResourceBuffers + hasForcedSamplerCount + hasVolMipMap + hasAsyncCompute + hasOcclusionQuery + hasConstBufferOffset + hasDepthBoundsTest + hasConditionalRender + hasResourceCopyConversion + hasAsyncCopy + hasReadMultisampledDepth + hasInstanceID + hasConservativeRassterization + hasQuadTessellation + hasGather4 + hasAlphaCoverage + hasWellSupportedIndirect + hasBindless + hasNVApi + hasATIApi + hasVariableRateShading + hasVariableRateShadingTexture + hasVariableRateShadingShaderOutput + hasVariableRateShadingCombiners + hasVariableRateShadingBy4 + hasAliasedTextures + hasResourceHeaps + hasBufferOverlapCopy + hasBufferOverlapRegionsCopy + hasUAVOnlyForcedSampleCount + hasShader64BitIntegerResources + hasNativeRenderPassSubPasses + hasTiled2DResources + hasTiled3DResources + hasTiledSafeResourcesAccess + hasTiledMemoryAliasing + hasDLSS + hasXESS + hasDrawID + hasMeshShader + hasBasicViewInstancing + hasOptimizedViewInstancing + hasAcceleratedViewInstancing + hasStereoExpansion + hasTileBasedArchitecture + hasLazyMemory + hasShaderFloat16Support + hasUAVOnEveryStage + hasRayDispatch + hasIndirectRayDispatch + castingFullyTypedFormatsSupported + hasWaveOps + + DeviceDriverCapabilitiesWindows + hasAnisotropicFilter + hasAlphaCoverage + hasAsyncCopy + hasStereoExpansion + hasLazyMemory + hasIndirectSupport + hasCompareSampler + hasBaseVertexSupport + + DeviceDriverCapabilitiesXboxOne + hasAnisotropicFilter + hasDepthReadOnly + hasStructuredBuffers + hasNoOverwriteOnShaderResourceBuffers + hasForcedSamplerCount + hasVolMipMap + hasAsyncCompute + hasOcclusionQuery + hasConstBufferOffset + hasDepthBoundsTest + hasConditionalRender + hasResourceCopyConversion + hasAsyncCopy + hasReadMultisampledDepth + hasInstanceID + hasConservativeRassterization + hasQuadTessellation + hasGather4 + hasAlphaCoverage + hasWellSupportedIndirect + hasBindless + hasNVApi + hasATIApi + hasVariableRateShading + hasVariableRateShadingTexture + hasVariableRateShadingShaderOutput + hasVariableRateShadingCombiners + hasVariableRateShadingBy4 + hasAliasedTextures + hasResourceHeaps + hasBufferOverlapCopy + hasBufferOverlapRegionsCopy + hasUAVOnlyForcedSampleCount + hasShader64BitIntegerResources + hasNativeRenderPassSubPasses + hasTiled2DResources + hasTiled3DResources + hasTiledSafeResourcesAccess + hasTiledMemoryAliasing + hasDLSS + hasXESS + hasDrawID + hasMeshShader + hasBasicViewInstancing + hasOptimizedViewInstancing + hasAcceleratedViewInstancing + hasRenderPassDepthResolve + hasStereoExpansion + hasTileBasedArchitecture + hasLazyMemory + hasIndirectSupport + hasCompareSampler + hasShaderFloat16Support + hasUAVOnEveryStage + hasRayAccelerationStructure + hasRayQuery + hasRayDispatch + hasIndirectRayDispatch + hasGeometryIndexInRayAccelerationStructure + hasSkipPrimitiveTypeInRayTracingShaders + hasBaseVertexSupport + castingFullyTypedFormatsSupported + hasNativeRayTracePipelineExpansion + hasWaveOps + + DeviceDriverIssuesAndroid + hasClearColorBug + + DeviceDriverIssuesBase + hasComputeTimeLimited + hasComputeCanNotWrite3DTex + hasStrictRenderPassesOnly + hasSmallSampledBuffers + hasRenderPassClearDataRace + hasBrokenBaseInstanceID + hasMultisampledAndInstancingHang + hasIgnoreDeviceLost + hasPollDeviceFences + hasBrokenShadersAfterAppSwitch + hasBrokenSRGBConverionWithMRT + hasBrokenComputeFormattedOutput + hasClearColorBug + hasBrokenMTRecreateImage + hasBrokenSubpasses + + DeviceDriverIssuesNoIssues + hasClearColorBug + + DeviceDriverIssuesWindows + hasComputeTimeLimited + hasComputeCanNotWrite3DTex + hasStrictRenderPassesOnly + hasSmallSampledBuffers + hasRenderPassClearDataRace + hasBrokenBaseInstanceID + hasMultisampledAndInstancingHang + hasIgnoreDeviceLost + hasPollDeviceFences + hasBrokenShadersAfterAppSwitch + hasBrokenSRGBConverionWithMRT + hasBrokenComputeFormattedOutput + hasBrokenMTRecreateImage + hasBrokenSubpasses + + DeviceDriverRaytraceProperties + topAccelerationStructureInstanceElementSize + accelerationStructureBuildScratchBufferOffsetAlignment + maxRecursionDepth + + DeviceResetEventHandler + ~DeviceResetEventHandler + preRecovery + recovery + + DrawIndexedIndirectArgs + indexCountPerInstance + instanceCount + startIndexLocation + baseVertexLocation + startInstanceLocation + + DrawIndirectArgs + vertexCountPerInstance + instanceCount + startVertexLocation + startInstanceLocation + + Driver3dDesc + zcmpfunc + acmpfunc + sblend + dblend + mintexw + mintexh + maxtexw + maxtexh + mincubesize + maxcubesize + minvolsize + maxvolsize + maxtexaspect + maxtexcoord + maxsimtex + maxvertexsamplers + maxclipplanes + maxstreams + maxstreamstr + maxvpconsts + maxprims + maxvertind + upixofs + vpixofs + maxSimRT + is20ArbitrarySwizzleAvailable + minWarpSize + maxWarpSize + variableRateTextureTileSizeX + variableRateTextureTileSizeY + depthResolveModes + caps + issues + shaderModel + raytrace + + Driver3dInitCallback + NeedStereoRenderFunc + StereoRenderDimensionFunc + StereoRenderExtensionsFunc + StereoRenderVersionsFunc + StereoRenderAdapterFunc + verifyResolutionSettings + validateDesc + compareDesc + desiredStereoRender + desiredAdapter + desiredRendererSize + desiredRendererDeviceExtensions + desiredRendererInstanceExtensions + desiredRendererVersionRange + + Driver3dPerspective + wk + hk + zn + zf + ox + oy + Driver3dPerspective + Driver3dPerspective + + Driver3dRenderTarget + @18 + COLOR0 + COLOR1 + COLOR2 + COLOR3 + COLOR4 + COLOR5 + COLOR6 + COLOR7 + COLOR_MASK + DEPTH + DEPTH_READONLY + TOTAL_MASK + MAX_SIMRT + color + depth + used + reset + setColor + setBackbufColor + removeColor + setDepth + setDepth + removeDepth + getColor + getDepth + isBackBufferColor + isColorUsed + isDepthUsed + isColorUsed + setDepthReadOnly + setDepthRW + isDepthReadOnly + Driver3dRenderTarget + operator== + operator!= + + DriverCode + value + DriverCode + DriverCode + DriverCode + operator= + asFourCC + is + operator== + operator!= + map + map + map + map + map + map + match + match + matchFirst + matchFirst + matchAll + matchAll + make + + DriverNetManager + ~DriverNetManager + sendPsoCacheBlkSync + sendHttpEventLog + addFileToCrashReport + + shaders::DriverRenderStateIdDummy + + Drv3dMakeTextureParams + tex + name + flg + w + h + layers + mips + currentState + + Drv3dTimings + frontendUpdateScreenInterval + frontendToBackendUpdateScreenLatency + frontendBackendWaitDuration + backendFrontendWaitDuration + gpuWaitDuration + presentDuration + backbufferAcquireDuration + frontendWaitForSwapchainDuration + + d3d::drivercode::matcher::EnableIf + + d3d::drivercode::matcher::EnableIf< true, T > + Type + + d3d::shadermodel::matcher::EqualCompare + compare + + d3d::drivercode::matcher::FirstMatch + value + wasMatched + ::DriverCode + onMatch + is + FirstMatch + FirstMatch + FirstMatch + FirstMatch + FirstMatch + operator= + operator= + operator() + match + operator bool + operator! + + FrameEvents + ~FrameEvents + beginFrameEvent + endFrameEvent + + Fsr2Params + color + depth + motionVectors + output + frameTimeDelta + sharpness + jitterOffsetX + jitterOffsetY + motionVectorScaleX + motionVectorScaleY + cameraNear + cameraFar + cameraFovAngleVertical + renderSizeX + renderSizeY + + d3d::GpuAutoLock + GpuAutoLock + ~GpuAutoLock + + d3d::GPUWorkloadSplit + needSplitAtEnd + GPUWorkloadSplit + ~GPUWorkloadSplit + + eastl::hash< ResourceDescription > + operator() + + d3d::drivercode::matcher::ID + ThisType + value + is + operator! + + IDrv3DDeviceLostCB + onDeviceLost + + IDrv3DResetCB + beforeReset + afterReset + resetCounter + windowResized + fullscreenStateRestored + + d3d::drivercode::matcher::Inverted + ThisType + base + is + operator! + + BaseTexture::IReloadData + ~IReloadData + reloadD3dRes + destroySelf + + Sbuffer::IReloadData + ~IReloadData + reloadD3dRes + destroySelf + + d3d::LoadingAutoLock + LoadingAutoLock + ~LoadingAutoLock + + d3d::drivercode::matcher::Map + value + wasMatched + memory + ::DriverCode + object + cMove + cContruct + cEmplace + is + Map + Map + Map + Map + Map + Map + Map + Map + operator= + operator= + ~Map + operator() + operator() + operator() + operator() + operator() + operator() + operator() + map + map + map + map + map + map + map + get + get + operator>> + operator>> + operator() + operator() + + d3d::shadermodel::matcher::Map + BaseType + + MtlFxUpscaleParams + color + output + colorMode + + d3d::drivercode::matcher::OpAnd + invoke + + d3d::drivercode::matcher::OpOr + invoke + + RenderPassArea + left + top + width + height + minZ + maxZ + + RenderPassBind + target + subpass + slot + action + dependencyBarrier + + RenderPassDesc + debugName + targetCount + bindCount + targetsDesc + binds + subpassBindingOffset + + RenderPassTarget + resource + clearValue + + RenderPassTargetDesc + templateResource + texcf + aliased + + Driver3dInitCallback::RenderSize + width + height + + shaders::RenderState + NumIndependentBlendParameters + blendParams + RenderState + operator== + operator!= + + shaders::RenderStateBits + zwrite + ztest + zFunc + stencilRef + cull + depthBoundsEnable + forcedSampleCount + conservativeRaster + zClip + scissorEnabled + independentBlendEnabled + alphaToCoverage + viewInstanceCount + colorWr + zBias + slopeZBias + stencil + + RenderTarget + tex + mip_level + layer + + ResourceAllocationProperties + sizeInBytes + offsetAlignment + heapGroup + + ResourceBarrierDesc + single_element_count + buffer + buffers + texture + textures + blas + blases + bufferState + bufferStates + textureState + textureStates + textureSubResIndex + textureSubResIndices + textureSubResRange + textureSubResRanges + @4 + @6 + @8 + @10 + @12 + @14 + @16 + bufferCount + textureCount + blasCount + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + ResourceBarrierDesc + enumerateBufferBarriers + enumerateTextureBarriers + enumerateBlasBarriers + + ResourceChecker + init + report + checkLockParams + + ResourceClearValue + asUint + @28 + asInt + @30 + asFloat + @32 + asDepth + asStencil + @34 + + ResourceDescription + HashT + resType + asBasicRes + asBufferRes + asBasicTexRes + asTexRes + asVolTexRes + asArrayTexRes + asCubeTexRes + asArrayCubeTexRes + @22 + ResourceDescription + ResourceDescription + operator= + ResourceDescription + ResourceDescription + ResourceDescription + ResourceDescription + ResourceDescription + ResourceDescription + operator== + hash + hashPack + hashPack + + ResourceHeapGroupProperties + flags + isCPUVisible + isGPULocal + isOnChip + @24 + maxResourceSize + maxHeapSize + optimalMaxHeapSize + + Driver3dRenderTarget::RTState + tex + level + face + layer + @20 + set + operator== + operator!= + + d3d::drivercode::matcher::SameAs + value + + d3d::drivercode::matcher::SameAs< T, T > + value + + d3d::SamplerInfo + mip_map_mode + filter_mode + address_mode_u + address_mode_v + address_mode_w + border_color + anisotropic_max + mip_map_bias + operator== + operator!= + operator< + + Sbuffer + setReloadCallback + restype + lock + unlock + getFlags + getBufName + getElementSize + getNumElements + copyTo + copyTo + lockEx + updateDataWithLock + updateData + lock + lock32 + ~Sbuffer + + ScissorRect + x + y + w + h + + ScopeRenderTarget + prevRT + ScopeRenderTarget + ~ScopeRenderTarget + + ScopeViewport + viewX + viewY + viewW + viewH + viewN + viewF + ScopeViewport + ~ScopeViewport + + ScopeViewProjMatrix + ScopeViewProjMatrix + ~ScopeViewProjMatrix + + ShaderInLibraryReference + library + index + + ShaderLibraryCreateInfo + debugName + nameTable + driverBinary + mayBeUsedByExpandablePipeline + + ShaderWarmUpInfo + shaderProgram + colorFormats + depthStencilFormat + validColorTargetAndDepthStencilMask + colorWriteMask + vertexInputStreamStrides + primitiveTopologyMask + cullMode + depthTestFunction + stencilTestFunction + stencilOnStencilFail + stencilOnDepthFail + stencilOnAllPass + blendOpRGB + blendOpAlpha + blendSrcFactorRGB + blendSrcFactorAlpha + blendDstFactorRGB + blendDstFactorAlpha + polyLineEnable + flipCullEnable + depthTestEnable + depthWriteEnable + depthBoundsEnable + depthClipEnable + stencilTestEnable + blendEnable + separateBlendEnable + + TextureChannelFormatDesc + bits + offset + isFloatPoint + isSigned + isNormalized + + TextureFormatDesc + dagorTextureFormat + bytesPerElement + isBlockFormat + elementWidth + elementHeight + mainChannelsType + stencilChannelType + r + g + b + a + depth + stencil + hasAlpha + isDepth + rgbaChannelsCount + channelsCount + + TextureInfo + w + h + d + a + mipLevels + resType + cflg + + TextureResourceDescription + width + height + + TextureTilingInfo + totalNumberOfTiles + numUnpackedMips + numPackedMips + numTilesNeededForPackedMips + firstPackedTileIndex + tileWidthInPixels + tileHeightInPixels + tileDepthInPixels + tileMemorySize + subresourceWidthInTiles + subresourceHeightInTiles + subresourceDepthInTiles + subresourceStartTileIndex + + TileMapping + texX + texY + texZ + texSubresource + heapTileIndex + heapTileSpan + + d3d::drivercode::matcher::Undefined + value + + d3d::drivercode::matcher::Unsupported + Unsupported + + d3d::shadermodel::Version + major + minor + Version + Version + Version + map + map + supports + + d3d::shadermodel::VersionConstant + major + minor + as_string + as_ps_string + operator Version + operator VersionWithName + map + map + supports + + d3d::shadermodel::VersionList + size + + d3d::shadermodel::VersionRange + + Driver3dInitCallback::VersionRange + minVersion + maxVersion + + d3d::shadermodel::VersionRange< VersionList< Versions... > > + ListOfVersions + Iterator + begin + cbegin + end + cend + size + + d3d::shadermodel::VersionRangeIterator + index + VersionRangeIterator + VersionRangeIterator + VersionRangeIterator + operator* + operator++ + operator++ + operator-- + operator-- + operator== + operator!= + + d3d::shadermodel::VersionWithName + versionName + psName + + Viewport + minz + maxz + MAX_VIEWPORT_COUNT + + ViewProjMatrixContainer + savedView + savedProj + p + p_ok + getViewTm + getProjTm + + VolTextureResourceDescription + depth + + XessParams + inColor + inDepth + inMotionVectors + inJitterOffsetX + inJitterOffsetY + inInputWidth + inInputHeight + inColorDepthOffsetX + inColorDepthOffsetY + outColor + + d3d + @35 + USAGE_TEXTURE + USAGE_DEPTH + USAGE_RTARGET + USAGE_AUTOGENMIPS + USAGE_FILTER + USAGE_BLEND + USAGE_VERTEXTEXTURE + USAGE_SRGBREAD + USAGE_SRGBWRITE + USAGE_SAMPLECMP + USAGE_PIXREADWRITE + USAGE_TILED + USAGE_UNORDERED + USAGE_UNORDERED_LOAD + @36 + CAPFMT_X8R8G8B8 + CAPFMT_R8G8B8 + CAPFMT_R5G6B5 + CAPFMT_X1R5G5B5 + SamplerHandle + Invalid + MipMapMode + Default + Disabled + Point + Linear + FilterMode + Default + Disabled + Point + Linear + Best + Compare + AddressMode + Wrap + Mirror + Clamp + Border + MirrorOnce + EventQuery + smNone + sm40 + sm41 + sm50 + sm60 + sm66 + smAny + smMax + smMin + smAll + xboxOne + scarlett + iOS + tvOS + nintendoSwitch + android + macOSX + linux + windows + dx11 + dx12 + vulkan + ps4 + ps5 + metal + null + stub + anyXbox + anyPS + anyPC + undefined + any + apple + bit32 + bit64 + RENDER_TO_WHOLE_ARRAY + INVALID_SAMPLER_HANDLE + map_tile_to_resource + get_texture_tiling_info + create_event_query + release_event_query + issue_event_query + get_event_query_status + create_vb + create_ib + setvsrc_ex + setvsrc + setind + create_vdecl + delete_vdecl + setvdecl + set_const + set_vs_const + set_ps_const + set_cs_const + set_vs_const1 + set_ps_const1 + set_immediate_const + set_const_buffer + set_const_buffer + set_vs_constbuffer_size + set_cs_constbuffer_size + set_cb0_data + release_cb0_data + driver_command + create_sbuffer + set_buffer + set_rwbuffer + reserve_res_entries + get_max_used_res_entries + get_cur_used_res_entries + create_shader_library + destroy_shader_library + register_bindless_sampler + register_bindless_sampler + allocate_bindless_resource_range + resize_bindless_resource_range + free_bindless_resource_range + update_bindless_resource + update_bindless_resources_to_null + as_string + as_string + as_ps_string + as_ps_string + get_resource_allocation_properties + create_resource_heap + destroy_resource_heap + place_buffer_in_resource_heap + place_texture_in_resource_heap + get_resource_heap_group_properties + activate_buffer + activate_texture + deactivate_buffer + deactivate_texture + copy_from_current_render_target + clear_rt + set_render_target + set_depth + set_depth + set_render_target + set_render_target + set_render_target + set_render_target + set_render_target + set_render_target + get_render_target + set_render_target + get_target_size + get_render_target_size + clearview + get_screen_size + get_backbuffer_tex + get_secondary_backbuffer_tex + dispatch + dispatch_indirect + allocate_update_buffer_for_tex_region + allocate_update_buffer_for_tex + release_update_buffer + get_update_buffer_addr_for_write + get_update_buffer_size + get_update_buffer_pitch + get_update_buffer_slice_pitch + update_texture_and_release_update_buffer + draw_base + draw + draw_instanced + drawind_base + drawind_instanced + drawind + draw_up + drawind_up + draw_indirect + draw_indexed_indirect + multi_draw_indirect + multi_draw_indexed_indirect + update_window_mode + init_driver + is_inited + init_video + release_driver + fill_interface_table + prepare_for_destroy + window_destroyed + register_before_window_destroyed_callback + unregister_before_window_destroyed_callback + device_lost + reset_device + update_screen + wait_for_async_present + gpu_latency_wait + insert_fence + insert_wait_on_fence + set_srgb_backbuffer_write + setgamma + get_screen_aspect_ratio + change_screen_aspect_ratio + fast_capture_screen + end_fast_capture_screen + capture_screen + release_capture_buffer + create_predicate + free_predicate + begin_survey + end_survey + begin_conditional_render + end_conditional_render + beginEvent + endEvent + get_vrr_supported + get_vsync_enabled + enable_vsync + resource_barrier + resummarize_htile + set_esram_layout + unset_esram_layout + reset_esram_layout + prefetch_movable_textures + writeback_movable_textures + settm + settm + settm + gettm + gettm + gettm + gettm_cref + getm2vtm + getglobtm + setglobtm + getglobtm + setglobtm + setpersp + getpersp + validatepersp + calcproj + calcproj + calcglobtm + calcglobtm + calcglobtm + calcglobtm + setscissor + setscissors + setview + setviews + getview + set_variable_rate_shading + set_variable_rate_shading_texture + dispatch_mesh + dispatch_mesh_indirect + dispatch_mesh_indirect_count + start_capture + stop_capture + guess_gpu_vendor + get_gpu_driver_date + get_dedicated_gpu_memory_size_kb + get_free_dedicated_gpu_memory_size_kb + get_current_gpu_memory_kb + get_gpu_freq + get_gpu_temperature + get_video_vendor_str + get_display_scale + disable_sli + get_driver_name + get_driver_code + is_stub_driver + get_device_driver_version + get_device_name + get_last_error + get_last_error_code + get_device + get_context + get_driver_desc + is_in_device_reset_now + is_window_occluded + should_use_compute_for_image_processing + request_sampler + set_sampler + check_texformat + get_max_sample_count + get_texformat_usage + issame_texformat + check_cubetexformat + check_voltexformat + create_tex + create_ddsx_tex + alloc_ddsx_tex + load_ddsx_tex_contents + create_cubetex + create_voltex + create_array_tex + create_cube_array_tex + alias_tex + alias_cubetex + alias_voltex + alias_array_tex + alias_cube_array_tex + stretch_rect + get_texture_statistics + set_tex + settex + settex_vs + set_rwtex + clear_rwtexi + clear_rwtexf + clear_rwbufi + clear_rwbuff + get_program_vdecl + set_vertex_shader + set_pixel_shader + create_vertex_shader_asm + create_vertex_shader_dagor + create_pixel_shader_asm + create_pixel_shader_dagor + get_video_modes_list + create_render_pass + delete_render_pass + begin_render_pass + next_subpass + end_render_pass + allow_render_pass_target_load + create_program + create_program + create_program_cs + set_program + delete_program + create_vertex_shader + delete_vertex_shader + create_pixel_shader + delete_pixel_shader + get_debug_program + set_blend_factor + setstencil + setwire + set_depth_bounds + create_render_state + set_render_state + clear_render_states + + d3d::buffers + Init + No + Zero + Indirect + Dispatch + Draw + DrawIndexed + CBUFFER_REGISTER_SIZE + BYTE_ADDRESS_ELEMENT_SIZE + cb_array_reg_count + cb_struct_reg_count + create_persistent_cb + create_one_frame_cb + create_ua_sr_byte_address + create_ua_sr_structured + create_ua_byte_address + create_ua_structured + create_ua_byte_address_readback + create_ua_structured_readback + dword_count_per_call + create_ua_indirect + create_indirect + create_staging + create_persistent_sr_tbuf + create_persistent_sr_byte_address + create_persistent_sr_structured + create_one_frame_sr_tbuf + create_one_frame_sr_byte_address + create_one_frame_sr_structured + create_raytrace_scratch_buffer + + d3d::drivercode + + d3d::drivercode::matcher + NotAnyDriver + make_foucc + operator&& + operator|| + operator&& + operator|| + operator&& + operator|| + operator&& + operator|| + operator&& + operator|| + operator&& + operator|| + operator&& + operator|| + + d3d::ps + create_raw_tex + update_raw_tex + alloc_mem_block + free_mem_block + record_frame + debug_point + set_verbose_mode + submit_and_stall + submit_background + freeze_frame + get_raw_texture_descriptor + + d3d::shadermodel + AllVersionsList + operator== + operator!= + operator< + operator> + operator<= + operator>= + operator== + operator== + operator!= + operator!= + operator> + operator> + operator< + operator< + operator>= + operator>= + operator<= + operator<= + operator== + operator!= + operator< + operator> + operator<= + operator>= + max + max + min + min + index_of + at + + d3d::shadermodel::matcher + + d3dhang + GPUHanger + register_gpu_hanger + hang_gpu_on + hang_if_requested + + ddsx + + eastl + + Json + + shaders + RenderStateId + Invalid + DriverRenderStateId + + dag_async_pipeline.h + + dag_barrier.h + + dag_bindless.h + + dag_buffers.h + + dag_capture.h + + dag_commands.h + Drv3dCommand + GETVISIBILITYBEGIN + GETVISIBILITYEND + GETVISIBILITYCOUNT + RELEASE_QUERY + ACQUIRE_OWNERSHIP + RELEASE_OWNERSHIP + ACQUIRE_LOADING + RELEASE_LOADING + GET_GPU_FRAME_TIME + GET_VSYNC_REFRESH_RATE + SET_PIPELINE_COMPILATION_TIME_BUDGET + GET_PIPELINE_COMPILATION_QUEUE_LENGTH + ASYNC_PIPELINE_COMPILATION_FEEDBACK_BEGIN + ASYNC_PIPELINE_COMPILATION_FEEDBACK_END + TIMESTAMPFREQ + TIMESTAMPISSUE + TIMESTAMPGET + TIMECLOCKCALIBRATION + FLUSH_STATES + D3D_FLUSH + COMPILE_PIPELINE + GET_SECONDARY_BACKBUFFER + GET_VENDOR + OVERRIDE_MAX_ANISOTROPY_LEVEL + MAKE_TEXTURE + GET_TEXTURE_HANDLE + BEGIN_EXTERNAL_ACCESS + END_EXTERNAL_ACCESS + SET_VS_DEBUG_INFO + SET_PS_DEBUG_INFO + BEGIN_MRT_CLEAR_SEQUENCE + END_MRT_CLEAR_SEQUENCE + GET_SHADER_CACHE_UUID + AFTERMATH_MARKER + START_CAPTURE_FRAME + IS_HDR_AVAILABLE + IS_HDR_ENABLED + INT10_HDR_BUFFER + HDR_OUTPUT_MODE + GET_LUMINANCE + MEM_STAT + REGISTER_SHADER_DUMP + GET_SHADER + PIX_GPU_BEGIN_CAPTURE + PIX_GPU_END_CAPTURE + PIX_GPU_CAPTURE_NEXT_FRAMES + PIX_GPU_CAPTURE_AFTER_LONG_FRAMES + GET_FRAMERATE_LIMITING_FACTOR + LOAD_PIPELINE_CACHE + SAVE_PIPELINE_CACHE + GET_DLSS + GET_REFLEX + GET_XESS_STATE + IS_XESS_QUALITY_AVAILABLE_AT_RESOLUTION + GET_XESS_RESOLUTION + GET_XESS_VERSION + EXECUTE_DLSS + EXECUTE_DLSS_G + EXECUTE_XESS + SET_XESS_VELOCITY_SCALE + EXECUTE_FSR + EXECUTE_FSR2 + GET_FSR2_STATE + GET_FSR2_RESOLUTION + EXECUTE_PSSR + GET_METALFX_UPSCALE_STATE + EXECUTE_METALFX_UPSCALE + GET_TIMINGS + GET_RAYTRACE_ACCELERATION_STRUCTURES_MEMORY_USAGE + DEBUG_MESSAGE + GET_MONITORS + GET_MONITOR_INFO + GET_RESOLUTIONS_FROM_MONITOR + GET_VIDEO_MEMORY_BUDGET + GET_RENDERING_COMMAND_QUEUE + GET_INSTANCE + GET_PHYSICAL_DEVICE + GET_QUEUE_FAMILY_INDEX + GET_QUEUE_INDEX + PROCESS_APP_INACTIVE_UPDATE + PRE_ROTATE_PASS + REGISTER_FRAME_COMPLETION_EVENT + REGISTER_ONE_TIME_FRAME_EXECUTION_EVENT_CALLBACKS + REPORT_RESOURCE_STATE_TRANSITIONS + REGISTER_DEVICE_RESET_EVENT_HANDLER + UNREGISTER_DEVICE_RESET_EVENT_HANDLER + PREPARE_TEXTURES_FOR_VR_CONSUMPTION + SET_APP_INFO + SEND_GPU_CRASH_DUMP + PROCESS_PENDING_RESOURCE_UPDATED + GET_PS5_PSSR_STATUS + SET_FREQ_LEVEL + ENABLE_IMMEDIATE_FLUSH + DISABLE_IMMEDIATE_FLUSH + GET_WORKER_CPU_CORE + SET_PS5_FSR_VIEW + SET_HDR + DEBUG_BREAK + ADD_DEBUG_BREAK_STRING_SEARCH + REMOVE_DEBUG_BREAK_STRING_SEARCH + IS_DEFRAG_REQUESTED + PROCESS_PENDING_DEFRAG_REQUESTS + COMPILE_PIPELINE_SET + GET_BUFFER_GPU_ADDRESS + ENABLE_WORKER_LOW_LATENCY_MODE + LOGERR_ON_SYNC + SET_DRIVER_NETWORD_MANAGER + GET_CONSOLE_HFR_STATUS + GET_CONSOLE_HFR_SUPPORTED + GET_RESOURCE_STATISTICS + DELAY_SYNC + CONTINUE_SYNC + CHANGE_QUEUE + USER + @1 + DRV3D_CPU_FREQ_TYPE_QPC + DRV3D_CPU_FREQ_TYPE_REF + DRV3D_CPU_FREQ_NSEC + DRV3D_CPU_FREQ_TYPE_PROFILE + DRV3D_CPU_FREQ_TYPE_UNKNOWN + + dag_consts.h + VSDOP_MASK + VSDOP_STREAM + VSDOP_INPUT + VSDT_MASK + VSDR_MASK + VSDS_MASK + VSDS_PER_INSTANCE_DATA + GET_VSDREG + MAKE_VSDREG + GET_VSDSTREAM + MAKE_VSDSTREAM + VSD_SKIPFLG + GET_VSDSKIP + VSD_END + VSTREAMSRC_NORMAL_DATA + VSTREAMSRC_INDEXED_DATA + VSTREAMSRC_INSTANCE_DATA + ShaderStage + STAGE_CS + STAGE_PS + STAGE_VS + STAGE_MAX + STAGE_RAYTRACE + STAGE_CS_ASYNC_STATE + STAGE_MAX_EXT + GpuPipeline + GRAPHICS + ASYNC_COMPUTE + TRANSFER + @40 + MAXSAMPLERS + MAXSTREAMS + MAXSAMPLERS_VS + MAX_SLI_AFRS + @41 + VDECLUSAGE_POS + VDECLUSAGE_BLENDW + VDECLUSAGE_BLENDIND + VDECLUSAGE_NORM + VDECLUSAGE_PSIZE + VDECLUSAGE_TC + VDECLUSAGE_TANG + VDECLUSAGE_BINORM + VDECLUSAGE_TESSFACTOR + VDECLUSAGE_TPOS + VDECLUSAGE_COLOR + VDECLUSAGE_FOG + VDECLUSAGE_DEPTH + VDECLUSAGE_SAMPLE + @42 + SBCF_USAGE_SHADER_BINDING_TABLE + SBCF_USAGE_ACCELLERATION_STRUCTURE_BUILD_SCRATCH_SPACE + SBCF_DYNAMIC + SBCF_ZEROMEM + SBCF_INDEX32 + SBCF_FRAMEMEM + SBCF_USAGE_READ_BACK + SBCF_ALIGN16 + SBCF_CPU_ACCESS_MASK + SBCF_CPU_ACCESS_WRITE + SBCF_CPU_ACCESS_READ + SBCF_BIND_MASK + SBCF_BIND_VERTEX + SBCF_BIND_INDEX + SBCF_BIND_CONSTANT + SBCF_BIND_SHADER_RES + SBCF_BIND_UNORDERED + SBCF_MISC_MASK + SBCF_MISC_DRAWINDIRECT + SBCF_MISC_ALLOW_RAW + SBCF_MISC_STRUCTURED + SBCF_MISC_ESRAM_ONLY + SBCF_CB_PERSISTENT + SBCF_CB_ONE_FRAME + SBCF_UA_SR_BYTE_ADDRESS + SBCF_UA_SR_STRUCTURED + SBCF_UA_BYTE_ADDRESS + SBCF_UA_STRUCTURED + SBCF_UA_BYTE_ADDRESS_READBACK + SBCF_UA_STRUCTURED_READBACK + SBCF_UA_INDIRECT + SBCF_INDIRECT + SBCF_STAGING_BUFFER + @43 + WRAP_COORD0 + WRAP_COORD1 + WRAP_COORD2 + WRAP_COORD3 + @44 + VCDEST_NONE + VCDEST_AMB + VCDEST_DIFF + VCDEST_AMB_DIFF + VCDEST_EMIS + VCDEST_SPEC + @45 + WRITEMASK_RED0 + WRITEMASK_GREEN0 + WRITEMASK_BLUE0 + WRITEMASK_ALPHA0 + WRITEMASK_RED1 + WRITEMASK_RED2 + WRITEMASK_RED3 + WRITEMASK_RED4 + WRITEMASK_RED5 + WRITEMASK_RED6 + WRITEMASK_RED7 + WRITEMASK_GREEN1 + WRITEMASK_GREEN2 + WRITEMASK_GREEN3 + WRITEMASK_GREEN4 + WRITEMASK_GREEN5 + WRITEMASK_GREEN6 + WRITEMASK_GREEN7 + WRITEMASK_BLUE1 + WRITEMASK_BLUE2 + WRITEMASK_BLUE3 + WRITEMASK_BLUE4 + WRITEMASK_BLUE5 + WRITEMASK_BLUE6 + WRITEMASK_BLUE7 + WRITEMASK_ALPHA1 + WRITEMASK_ALPHA2 + WRITEMASK_ALPHA3 + WRITEMASK_ALPHA4 + WRITEMASK_ALPHA5 + WRITEMASK_ALPHA6 + WRITEMASK_ALPHA7 + WRITEMASK_RED + WRITEMASK_GREEN + WRITEMASK_BLUE + WRITEMASK_ALPHA + WRITEMASK_RGB + WRITEMASK_ALL + WRITEMASK_DEFAULT + XessState + UNSUPPORTED_DEVICE + UNSUPPORTED_DRIVER + INIT_ERROR_UNKNOWN + DISABLED + SUPPORTED + READY + Fsr2State + NOT_CHECKED + INIT_ERROR + SUPPORTED + READY + MtlfxUpscaleState + UNSUPPORTED + READY + HdrOutputMode + SDR_ONLY + HDR10_AND_SDR + HDR10_ONLY + HDR_ONLY + CSPreloaded + No + Yes + DepthResolveMode + DEPTH_RESOLVE_MODE_NONE + DEPTH_RESOLVE_MODE_SAMPLE_ZERO + DEPTH_RESOLVE_MODE_AVERAGE + DEPTH_RESOLVE_MODE_MIN + DEPTH_RESOLVE_MODE_MAX + @46 + DRV3D_FRAMERATE_LIMITED_BY_NOTHING + DRV3D_FRAMERATE_LIMITED_BY_REPLAY_WAIT + DRV3D_FRAMERATE_LIMITED_BY_REPLAY_UNDERFEED + DRV3D_FRAMERATE_LIMITED_BY_GPU_UTILIZATION + VariableRateShadingCombiner + VRS_PASSTHROUGH + VRS_OVERRIDE + VRS_MIN + VRS_MAX + VRS_SUM + ResourceBarrier + RB_RW_RENDER_TARGET + RB_RW_UAV + RB_RW_COPY_DEST + RB_RW_BLIT_DEST + RB_RO_SRV + RB_RO_CONSTANT_BUFFER + RB_RO_VERTEX_BUFFER + RB_RO_INDEX_BUFFER + RB_RO_INDIRECT_BUFFER + RB_RO_VARIABLE_RATE_SHADING_TEXTURE + RB_RO_COPY_SOURCE + RB_RO_BLIT_SOURCE + RB_RO_RAYTRACE_ACCELERATION_BUILD_SOURCE + RB_FLAG_RELEASE_PIPELINE_OWNERSHIP + RB_FLAG_ACQUIRE_PIPELINE_OWNERSHIP + RB_FLAG_SPLIT_BARRIER_BEGIN + RB_FLAG_SPLIT_BARRIER_END + RB_STAGE_VERTEX + RB_STAGE_PIXEL + RB_STAGE_COMPUTE + RB_STAGE_RAYTRACE + RB_FLUSH_UAV + RB_FLAG_DONT_PRESERVE_CONTENT + RB_SOURCE_STAGE_VERTEX + RB_SOURCE_STAGE_PIXEL + RB_SOURCE_STAGE_COMPUTE + RB_SOURCE_STAGE_RAYTRACE + RB_ALIAS_FROM + RB_ALIAS_TO + RB_RO_SHADER_BINDING_TABLE + RB_FLUSH_RAYTRACE_ACCELERATION_BUILD_SCRATCH_USE + RB_ALIAS_TO_AND_DISCARD + RB_ALIAS_ALL + RB_SOURCE_STAGE_ALL_GRAPHICS + RB_SOURCE_STAGE_ALL_SHADERS + RB_RW_DEPTH_STENCIL_TARGET + RB_RO_CONSTANT_DEPTH_STENCIL_TARGET + RB_RO_GENERIC_READ_BUFFER + RB_RO_GENERIC_READ_TEXTURE + RB_STAGE_ALL_SHADERS + RB_STAGE_ALL_GRAPHICS + RB_NONE + RenderPassTargetAction + RP_TA_NONE + RP_TA_LOAD_READ + RP_TA_LOAD_CLEAR + RP_TA_LOAD_NO_CARE + RP_TA_LOAD_MASK + RP_TA_SUBPASS_READ + RP_TA_SUBPASS_RESOLVE + RP_TA_SUBPASS_WRITE + RP_TA_SUBPASS_KEEP + RP_TA_SUBPASS_MASK + RP_TA_STORE_WRITE + RP_TA_STORE_NONE + RP_TA_STORE_NO_CARE + RP_TA_STORE_MASK + RenderPassExtraIndexes + RP_INDEX_NORMAL + RP_SUBPASS_EXTERNAL_END + RP_SLOT_DEPTH_STENCIL + VPROG + FSHADER + VDECL + PROGRAM + PALID + VPRTYPE + FSHTYPE + VSDTYPE + GPUFENCEHANDLE + DeviceDriverCapabilities + DeviceDriverIssues + DeviceDriverShaderModelVersion + BAD_VPROG + BAD_FSHADER + BAD_VDECL + BAD_PROGRAM + BAD_PALID + BAD_GPUFENCEHANDLE + RT_TRANSFORM_SIZE + operator| + operator& + operator^ + operator| + + dag_consts_base.h + VSD_STREAM + VSD_STREAM_PER_VERTEX_DATA + VSD_STREAM_PER_INSTANCE_DATA + VSD_REG + VSD_SKIP + VSDT_FLOAT1 + VSDT_FLOAT2 + VSDT_FLOAT3 + VSDT_FLOAT4 + VSDT_E3DCOLOR + VSDT_UBYTE4 + VSDT_SHORT2 + VSDT_SHORT4 + VSDT_SHORT2N + VSDT_SHORT4N + VSDT_USHORT2N + VSDT_USHORT4N + VSDT_UDEC3 + VSDT_DEC3N + VSDT_HALF2 + VSDT_HALF4 + VSDT_INT1 + VSDT_INT2 + VSDT_INT3 + VSDT_INT4 + VSDT_UINT1 + VSDT_UINT2 + VSDT_UINT3 + VSDT_UINT4 + VSDR_POS + VSDR_BLENDW + VSDR_BLENDIND + VSDR_NORM + VSDR_PSIZE + VSDR_DIFF + VSDR_SPEC + VSDR_TEXC0 + VSDR_TEXC1 + VSDR_TEXC2 + VSDR_TEXC3 + VSDR_TEXC4 + VSDR_TEXC5 + VSDR_TEXC6 + VSDR_TEXC7 + VSDR_POS2 + VSDR_NORM2 + VSDR_TEXC15 + VSDR_TEXC8 + VSDR_TEXC9 + VSDR_TEXC10 + VSDR_TEXC11 + VSDR_TEXC12 + VSDR_TEXC13 + VSDR_TEXC14 + @48 + VBLOCK_READONLY + VBLOCK_WRITEONLY + VBLOCK_NOSYSLOCK + VBLOCK_DISCARD + VBLOCK_NOOVERWRITE + @49 + PRIM_POINTLIST + PRIM_LINELIST + PRIM_LINESTRIP + PRIM_TRILIST + PRIM_TRISTRIP + PRIM_TRIFAN + PRIM_4_CONTROL_POINTS + PRIM_COUNT + @50 + TM_WORLD + TM_VIEW + TM_PROJ + TM_LOCAL2VIEW + TM_VIEW2LOCAL + TM_GLOBAL + TM__NUM + @51 + CLEAR_TARGET + CLEAR_ZBUFFER + CLEAR_STENCIL + CLEAR_DISCARD_TARGET + CLEAR_DISCARD_ZBUFFER + CLEAR_DISCARD_STENCIL + CLEAR_DISCARD + BLEND_FACTOR + BLEND_ZERO + BLEND_ONE + BLEND_SRCCOLOR + BLEND_INVSRCCOLOR + BLEND_SRCALPHA + BLEND_INVSRCALPHA + BLEND_DESTALPHA + BLEND_INVDESTALPHA + BLEND_DESTCOLOR + BLEND_INVDESTCOLOR + BLEND_SRCALPHASAT + BLEND_BOTHINVSRCALPHA + BLEND_BLENDFACTOR + BLEND_INVBLENDFACTOR + BLENDOP + BLENDOP_ADD + BLENDOP_SUBTRACT + BLENDOP_REVSUBTRACT + BLENDOP_MIN + BLENDOP_MAX + CMPF + CMPF_NEVER + CMPF_LESS + CMPF_EQUAL + CMPF_LESSEQUAL + CMPF_GREATER + CMPF_NOTEQUAL + CMPF_GREATEREQUAL + CMPF_ALWAYS + CULL_TYPE + CULL_NONE + CULL_CW + CULL_CCW + @52 + STNCLOP_KEEP + STNCLOP_ZERO + STNCLOP_REPLACE + STNCLOP_INCRSAT + STNCLOP_DECRSAT + STNCLOP_INVERT + STNCLOP_INCR + STNCLOP_DECR + @53 + TEXADDR_WRAP + TEXADDR_MIRROR + TEXADDR_CLAMP + TEXADDR_BORDER + TEXADDR_MIRRORONCE + @54 + TEXFILTER_DEFAULT + TEXFILTER_POINT + TEXFILTER_LINEAR + TEXFILTER_BEST + TEXFILTER_COMPARE + TEXFILTER_NONE + MAX_SURVEY_INDEX + + dag_d3dResource.h + @2 + RES3D_TEX + RES3D_CUBETEX + RES3D_VOLTEX + RES3D_ARRTEX + RES3D_CUBEARRTEX + RES3D_SBUF + destroy_d3dres + del_d3dres + + dag_decl.h + SCOPE_VIEW_PROJ_MATRIX + SCOPE_VIEWPORT + SCOPE_RENDER_TARGET + DRAW_INDIRECT_NUM_ARGS + DRAW_INDEXED_INDIRECT_NUM_ARGS + DISPATCH_INDIRECT_NUM_ARGS + INDIRECT_BUFFER_ELEMENT_SIZE + DRAW_INDIRECT_BUFFER_SIZE + DRAW_INDEXED_INDIRECT_BUFFER_SIZE + DISPATCH_INDIRECT_BUFFER_SIZE + INPUT_VERTEX_STREAM_COUNT + STATE_GUARD_IMPL + STATE_GUARD + STATE_GUARD_NULLPTR + STATE_GUARD_0 + @17 + D3D_VENDOR_NONE + D3D_VENDOR_MESA + D3D_VENDOR_IMGTEC + D3D_VENDOR_AMD + D3D_VENDOR_NVIDIA + D3D_VENDOR_INTEL + D3D_VENDOR_APPLE + D3D_VENDOR_SHIM_DRIVER + D3D_VENDOR_ARM + D3D_VENDOR_QUALCOMM + D3D_VENDOR_SAMSUNG + D3D_VENDOR_HUAWEI + D3D_VENDOR_COUNT + D3D_VENDOR_ATI + MtlfxColorMode + PERCEPTUAL + LINEAR + HDR + d3d_get_render_target + d3d_set_render_target + d3d_get_view_proj + d3d_set_view_proj + d3d_get_view + d3d_set_view + d3d_get_vendor + d3d_get_vendor_name + + dag_dispatch.h + + dag_dispatchMesh.h + + dag_draw.h + + dag_driver.h + D3D_HAS_QUADS + d3derr + d3d_err + main_wnd_f + dagor_d3d_force_driver_reset + d3derr_in_device_reset + + dag_driverCode.h + + dag_driverNetManager.h + + dag_drv3d_multi.h + + dag_hangHandler.h + + dag_heap.h + FIELD_MATCHES + ResourceActivationAction + REWRITE_AS_COPY_DESTINATION + REWRITE_AS_UAV + REWRITE_AS_RTV_DSV + CLEAR_F_AS_UAV + CLEAR_I_AS_UAV + CLEAR_AS_RTV_DSV + DISCARD_AS_UAV + DISCARD_AS_RTV_DSV + ResourceHeapCreateFlag + RHCF_NONE + RHCF_REQUIRES_DEDICATED_HEAP + ResourceHeapCreateFlags + + dag_info.h + APISupport + FULL_SUPPORT + OUTDATED_DRIVER + BLACKLISTED_DRIVER + NO_DEVICE_FOUND + + dag_interface_table.h + Matrix44 + ResourceHeapCreateFlags + Texture + d3di + + dag_lock.h + + dag_matricesAndPerspective.h + Matrix44 + + dag_platform.h + + dag_platform_pc.h + __pad0__ + + dag_platform_ps.h + + dag_query.h + + dag_renderPass.h + + dag_renderStateId.h + + dag_renderStates.h + + dag_renderTarget.h + DepthAccess + RW + SampledRO + Texture + + dag_res.h + + dag_resetDevice.h + REGISTER_D3D_BEFORE_RESET_FUNC + REGISTER_D3D_AFTER_RESET_FUNC + ext_drv3d_device_lost_handler + dagor_d3d_force_driver_reset + dagor_d3d_force_driver_mode_reset + dagor_d3d_notify_fullscreen_state_restored + set_3d_device_reset_callback + set_3d_device_lost_callback + check_and_restore_3d_device + before_reset_3d_device + after_reset_3d_device + change_driver_reset_request + zero_reset_3d_device_counter + set_window_size_has_been_changed_programmatically + is_window_size_has_been_changed_programmatically + on_window_resized_change_reset_request + is_window_resizing_by_mouse + set_driver_reset_pending_on_exit_sizing + get_d3d_reset_counter + get_d3d_full_reset_counter + + dag_resId.h + TEXTUREID + BAD_D3DRESID + BAD_TEXTUREID + + dag_resource.h + make_clear_value + make_clear_value + make_clear_value + make_clear_value + + dag_resourceChecker.h + + dag_resUpdateBuffer.h + + dag_rwResource.h + + dag_sampler.h + EQU + CMP + FOR_EACH_FIELD + @47 + TEXMIPMAP_DEFAULT + TEXMIPMAP_NONE + TEXMIPMAP_POINT + TEXMIPMAP_LINEAR + + dag_samplerHandle.h + + dag_shader.h + + dag_shaderConstants.h + + dag_shaderLibrary.h + + dag_shaderLibraryObject.h + ShaderLibrary + InvalidShaderLibrary + + dag_shaderModelVersion.h + operator""_sm + + dag_tex3d.h + ChannelDType + NONE + UNORM + SNORM + UFLOAT + SFLOAT + UINT + SINT + @37 + TEXLOCK_DISCARD + TEXLOCK_RAWDATA + TEXLOCK_NO_DIRTY_UPDATE + TEXLOCK_NOSYSLOCK + TEXLOCK_READ + TEXLOCK_WRITE + TEXLOCK_READWRITE + TEXLOCK_RWMASK + TEXLOCK_NOOVERWRITE + TEXLOCK_DELSYSMEMCOPY + TEXLOCK_SYSTEXLOCK + TEXLOCK_UPDATEFROMSYSTEX + TEXLOCK_DONOTUPDATEON9EXBYDEFAULT + TEXLOCK_COPY_STAGING + TEXLOCK_DEFAULT + @38 + TEXLF_CALCMIPMAPS + @39 + CUBEFACE_POSX + CUBEFACE_NEGX + CUBEFACE_POSY + CUBEFACE_NEGY + CUBEFACE_POSZ + CUBEFACE_NEGZ + TexLoadRes + ERR + OK + ERR_RUB + Texture + CubeTexture + VolTexture + ArrayTexture + on_tex_slice_loaded_cb_t + d3d_load_ddsx_tex_contents_impl + d3d_load_ddsx_to_slice + is_alpha_texformat + is_bc_texformat + auto_mip_levels_count + auto_mip_levels_count + auto_mip_levels_count + apply_gen_tex_props + parse_tex_format + get_tex_format_desc + get_tex_format_name + get_tex_channel_value + set_tex_channel_value + channel_bits_to_float + float_to_channel_bits + d3d_load_ddsx_tex_contents + convert_image_line + + dag_texFlags.h + @0 + TEXCF_RGB + TEXCF_RTARGET + TEXCF_TYPEMASK + TEXCF_BEST + TEXCF_ABEST + TEXCF_UNORDERED + TEXCF_VARIABLE_RATE + TEXCF_UPDATE_DESTINATION + TEXCF_SYSTEXCOPY + TEXCF_DYNAMIC + TEXCF_READABLE + TEXCF_READONLY + TEXCF_WRITEONLY + TEXCF_LOADONCE + TEXCF_MAYBELOST + TEXCF_STREAMING + TEXCF_SYSMEM + TEXCF_SAMPLECOUNT_2 + TEXCF_SAMPLECOUNT_4 + TEXCF_SAMPLECOUNT_8 + TEXCF_SAMPLECOUNT_MAX + TEXCF_SAMPLECOUNT_MASK + TEXCF_SAMPLECOUNT_OFFSET + TEXCF_CPU_CACHED_MEMORY + TEXCF_LINEAR_LAYOUT + TEXCF_ESRAM_ONLY + TEXCF_MOVABLE_ESRAM + TEXCF_TC_COMPATIBLE + TEXCF_RT_COMPRESSED + TEXCF_SIMULTANEOUS_MULTI_QUEUE_USE + TEXCF_SRGBWRITE + TEXCF_SRGBREAD + TEXCF_GENERATEMIPS + TEXCF_CLEAR_ON_CREATE + TEXCF_TILED_RESOURCE + TEXCF_TRANSIENT + TEXFMT_DEFAULT + TEXFMT_A8R8G8B8 + TEXFMT_A2R10G10B10 + TEXFMT_A2B10G10R10 + TEXFMT_A16B16G16R16 + TEXFMT_A16B16G16R16F + TEXFMT_A32B32G32R32F + TEXFMT_G16R16 + TEXFMT_G16R16F + TEXFMT_G32R32F + TEXFMT_R16F + TEXFMT_R32F + TEXFMT_DXT1 + TEXFMT_DXT3 + TEXFMT_DXT5 + TEXFMT_R32G32UI + TEXFMT_L16 + TEXFMT_A8 + TEXFMT_R8 + TEXFMT_L8 + TEXFMT_A1R5G5B5 + TEXFMT_A4R4G4B4 + TEXFMT_R5G6B5 + TEXFMT_A8L8 + TEXFMT_A16B16G16R16S + TEXFMT_A16B16G16R16UI + TEXFMT_A32B32G32R32UI + TEXFMT_ATI1N + TEXFMT_ATI2N + TEXFMT_R8G8B8A8 + TEXFMT_R32UI + TEXFMT_R32SI + TEXFMT_R11G11B10F + TEXFMT_R9G9B9E5 + TEXFMT_R8G8 + TEXFMT_R8G8S + TEXFMT_BC6H + TEXFMT_BC7 + TEXFMT_R8UI + TEXFMT_R16UI + TEXFMT_DEPTH24 + TEXFMT_DEPTH16 + TEXFMT_DEPTH32 + TEXFMT_DEPTH32_S8 + TEXFMT_ASTC4 + TEXFMT_ASTC8 + TEXFMT_ASTC12 + TEXFMT_ETC2_RG + TEXFMT_ETC2_RGBA + TEXFMT_PSSR_TARGET + TEXFMT_FIRST_DEPTH + TEXFMT_LAST_DEPTH + TEXFMT_MASK + get_sample_count + make_sample_count_flag + + dag_texture.h + + dag_tiledResource.h + + dag_variableRateShading.h + + dag_vertexIndexBuffer.h + Ibuffer + Vbuffer + + dag_viewScissor.h + + HeapD3D + get_resource_allocation_properties + create_resource_heap + destroy_resource_heap + place_buffer_in_resource_heap + place_texture_in_resource_heap + get_resource_heap_group_properties + activate_buffer + activate_texture + deactivate_buffer + deactivate_texture + + RenderPassConsts + RenderPassTargetAction + RP_TA_NONE + RP_TA_LOAD_READ + RP_TA_LOAD_CLEAR + RP_TA_LOAD_NO_CARE + RP_TA_LOAD_MASK + RP_TA_SUBPASS_READ + RP_TA_SUBPASS_RESOLVE + RP_TA_SUBPASS_WRITE + RP_TA_SUBPASS_KEEP + RP_TA_SUBPASS_MASK + RP_TA_STORE_WRITE + RP_TA_STORE_NONE + RP_TA_STORE_NO_CARE + RP_TA_STORE_MASK + RenderPassExtraIndexes + RP_INDEX_NORMAL + RP_SUBPASS_EXTERNAL_END + RP_SLOT_DEPTH_STENCIL + operator| + + RenderPassStructs + + RenderPassD3D + create_render_pass + delete_render_pass + begin_render_pass + next_subpass + end_render_pass + allow_render_pass_target_load + + todo + + bug + + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv/3d + + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude + + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/drv + + /home/runner/work/DagorEngine/DagorEngine/prog + + diff --git a/breathe/doxygen/d3dAPI/xml/index.xsd b/breathe/doxygen/d3dAPI/xml/index.xsd new file mode 100644 index 000000000..edb1d347d --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/index.xsd @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/namespace_json.xml b/breathe/doxygen/d3dAPI/xml/namespace_json.xml new file mode 100644 index 000000000..0cec73c6d --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/namespace_json.xml @@ -0,0 +1,11 @@ + + + + Json + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/namespaced3d.xml b/breathe/doxygen/d3dAPI/xml/namespaced3d.xml new file mode 100644 index 000000000..e1a6656c5 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/namespaced3d.xml @@ -0,0 +1,11430 @@ + + + + d3d + d3d::AutoPipelineAsyncCompile + d3d::AutoPipelineAsyncCompileFeedback + d3d::GpuAutoLock + d3d::LoadingAutoLock + d3d::GPUWorkloadSplit + d3d::BorderColor + d3d::SamplerInfo + d3d::buffers + d3d::drivercode + d3d::ps + d3d::shadermodel + + + + @35 + + USAGE_TEXTURE + = 0x01 + + + + + + + USAGE_DEPTH + = 0x02 + + + + + + + USAGE_RTARGET + = 0x04 + + + + + + + USAGE_AUTOGENMIPS + = 0x08 + + + + + + + USAGE_FILTER + = 0x10 + + + + + + + USAGE_BLEND + = 0x20 + + + + + + + USAGE_VERTEXTEXTURE + = 0x40 + + + + + + + USAGE_SRGBREAD + = 0x80 + + + + + + + USAGE_SRGBWRITE + = 0x100 + + + + + + + USAGE_SAMPLECMP + = 0x200 + + + + + + + USAGE_PIXREADWRITE + = 0x400 + + + + + + + USAGE_TILED + = 0x800 + + + + + + + USAGE_UNORDERED + = 0x1000 + + + + + + + USAGE_UNORDERED_LOAD + = 0x2000 + +Indicates the format supports unordered loads. + + + + + + + + + + + + + + + @36 + + CAPFMT_X8R8G8B8 + + + + + + + CAPFMT_R8G8B8 + + + + + + + CAPFMT_R5G6B5 + + + + + + + CAPFMT_X1R5G5B5 + + + + + + + + + + + + + + + uint64_t + SamplerHandle + + Invalid + = 0x0 + + + + + + + + + + + + + + + uint32_t + MipMapMode + + Default + = TEXMIPMAP_DEFAULT + +[DEPRECATED] driver default + + + + + + Disabled + = TEXMIPMAP_NONE + +[DEPRECATED] no mipmapping + + + + + + Point + = TEXMIPMAP_POINT + +point mipmapping + + + + + + Linear + = TEXMIPMAP_LINEAR + +linear mipmapping + + + + + +MipMapMode enum class. + + + + + + + + + uint32_t + FilterMode + + Default + = TEXFILTER_DEFAULT + +[DEPRECATED] driver default + + + + + + Disabled + = TEXFILTER_NONE + +[DEPRECATED] + + + + + + Point + = TEXFILTER_POINT + +point sampling + + + + + + Linear + = TEXFILTER_LINEAR + +linear sampling + + + + + + Best + = TEXFILTER_BEST + +[DEPRECATED] anisotropic and similar, if available + + + + + + Compare + = TEXFILTER_COMPARE + +point comparasion for using in pcf + + + + + +FilterMode enum class. + + + + + + + + + uint32_t + AddressMode + + Wrap + = TEXADDR_WRAP + +Repeats the texture when texture coordinates are outside [0, 1]. + + + + + + Mirror + = TEXADDR_MIRROR + +Mirrors the texture when texture coordinates are outside [0, 1]. + + + + + + Clamp + = TEXADDR_CLAMP + +Clamps texture coordinates to [0, 1]. + + + + + + Border + = TEXADDR_BORDER + +Uses the border color when texture coordinates are outside [0, 1]. + + + + + + MirrorOnce + = TEXADDR_MIRRORONCE + + + +Similar to Mirror and Clamp. Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value. The most common usage is for volume textures, where support for the full MirrorOnce texture-addressing mode is not necessary, but the data is symmetrical around the one axis. + + + +AddressMode enum class. + + + + + + + + + + + D3dEventQuery + typedef D3dEventQuery d3d::EventQuery + + EventQuery + +Opaque type, a pointer to which represents an event query. + + + + + + + + + + + constexpr shadermodel::VersionConstant< 0, 0 > + constexpr shadermodel::VersionConstant<0, 0> d3d::smNone + + smNone + +Shader model constant that represents no shader model. + + + + + + + + + constexpr shadermodel::VersionConstant< 4, 0 > + constexpr shadermodel::VersionConstant<4, 0> d3d::sm40 + + sm40 + +Version constant of the 4.0 shader model. + + + + + + + + + constexpr shadermodel::VersionConstant< 4, 1 > + constexpr shadermodel::VersionConstant<4, 1> d3d::sm41 + + sm41 + +Version constant of the 4.1 shader model. + + + + + + + + + constexpr shadermodel::VersionConstant< 5, 0 > + constexpr shadermodel::VersionConstant<5, 0> d3d::sm50 + + sm50 + +Version constant of the 5.0 shader model. + + + + + + + + + constexpr shadermodel::VersionConstant< 6, 0 > + constexpr shadermodel::VersionConstant<6, 0> d3d::sm60 + + sm60 + +Version constant of the 6.0 shader model. + + + + + + + + + constexpr shadermodel::VersionConstant< 6, 6 > + constexpr shadermodel::VersionConstant<6, 6> d3d::sm66 + + sm66 + +Version constant of the 6.6 shader model. + + + + + + + + + constexpr shadermodel::AnyVersion + constexpr shadermodel::AnyVersion d3d::smAny + + smAny + +Version constant that will match true to any shader model version. + + + + + + + + + constexpr auto + constexpr auto d3d::smMax + + smMax + = max(shadermodel::AllVersionsList{}) + +Latest supported shader model version of the list defined by shadermodel::AllVersionsList. + + + + + + + + + constexpr auto + constexpr auto d3d::smMin + + smMin + = min(shadermodel::AllVersionsList{}) + +Earliest supported shader model version of the list defined by shadermodel::AllVersionsList. + + + + + + + + + constexpr shadermodel::VersionRange< shadermodel::AllVersionsList > + constexpr shadermodel::VersionRange<shadermodel::AllVersionsList> d3d::smAll + + smAll + + + +This value is a version range over all listed versions, to extend the list, alter the type d3d::shadermodel::AllVersionsList. This value supports begin / end and can be used as a range for range based for loops. + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::xboxOne + + xboxOne + +Matches to true when the current platform is Xbox One and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::scarlett + + scarlett + +Matches to true when the current platform is Xbox Series X / S and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::iOS + + iOS + +Matches to true when the current platform is iOS and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::tvOS + + tvOS + +Matches to true when the current platform is tvOS and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::nintendoSwitch + + nintendoSwitch + +Matches to true when the current platform is Nintendo Switch and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::android + + android + +Matches to true when the current platform is Android and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::macOSX + + macOSX + +Matches to true when the current platform is macOS and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::linux + + linux + +Matches to true when the current platform is Linux and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::windows + + windows + +Matches to true when the current platform is Windows and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::dx11 + + dx11 + +Matches to true when the current driver is DirectX 11 and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::dx12 + + dx12 + +Matches to true when the current driver is DirectX 12 and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::vulkan + + vulkan + +Matches to true when the current driver is Vulkan and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::ps4 + + ps4 + +Matches to true when the current platform / driver is PlayStation 4 and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::ps5 + + ps5 + +Matches to true when the current platform / driver is PlayStation 5 and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::metal + + metal + +Matches to true when the current driver is Metal and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::null + + null + +Matches to true when the current driver is null and otherwise false. + + + + + + + + + constexpr drivercode::matcher::Unsupported + constexpr drivercode::matcher::Unsupported d3d::stub + + stub + +Matches to true when the current driver is stub and otherwise false. + + + + + + + + + constexpr auto + constexpr auto d3d::anyXbox + + anyXbox + = xboxOne || scarlett + +Matches true when either Xbox One or Xbox Series X / S matches true, otherwise false. + + + + + + + + + constexpr auto + constexpr auto d3d::anyPS + + anyPS + = ps4 || ps5 + +Matches true when either PlayStation 4 or PlayStation 5 matches true, otherwise false. + + + + + + + + + constexpr auto + constexpr auto d3d::anyPC + + anyPC + = macOSX || linux || windows + +Matches true when either macOS, Linux or Windows matches true, otherwise false. + + + + + + + + + constexpr d3d::drivercode::matcher::Undefined + constexpr d3d::drivercode::matcher::Undefined d3d::undefined + + undefined + + + +Matches true when no driver could be matched, otherwise false. On platforms with a fixed driver, this will always match false. + + + + + + + + + constexpr drivercode::matcher::Any + constexpr drivercode::matcher::Any d3d::any + + any + +Matches always true, has special meaning for some uses, like map. + + + + + + + + + constexpr auto + constexpr auto d3d::apple + + apple + = iOS || tvOS || macOSX + +Matches true when either iOS, tvOS or macOS matches true, otherwise false. + + + + + + + + + constexpr drivercode::matcher::Const< true > + constexpr drivercode::matcher::Const<true> d3d::bit32 + + bit32 + +Matches true when the build of the project targets a 32 bit architecture. + + + + + + + + + constexpr drivercode::matcher::Const< false > + constexpr drivercode::matcher::Const<false> d3d::bit64 + + bit64 + +Matches true when the build of the project targets a 64 bit architecture. + + + + + + + + + constexpr int + constexpr int d3d::RENDER_TO_WHOLE_ARRAY + + RENDER_TO_WHOLE_ARRAY + = 1023 + + + + + + + + + + const SamplerHandle + const SamplerHandle d3d::INVALID_SAMPLER_HANDLE + + INVALID_SAMPLER_HANDLE + = SamplerHandle::Invalid + + + + + + + + + + + + void + void d3d::map_tile_to_resource + (BaseTexture *tex, ResourceHeap *heap, const TileMapping *mapping, size_t mapping_count) + map_tile_to_resource + + BaseTexture * + tex + + + ResourceHeap * + heap + + + const TileMapping * + mapping + + + size_t + mapping_count + + +Maps a memory area of the heap to the specified xyz location of the texture. + + +Use heap == nullptr to remove the link between a tile and the mapped heap portion. + + +tex + + +The texture to map. + + + + +heap + + +The heap to map. + + + + +mapping + + +The mapping to apply. + + + + +mapping_count + + +The number of mappings in the mapping array. + + + + + + + + + + + TextureTilingInfo + TextureTilingInfo d3d::get_texture_tiling_info + (BaseTexture *tex, size_t subresource) + get_texture_tiling_info + + BaseTexture * + tex + + + size_t + subresource + + +Retrieves the tiling information of a texture. + + + + +tex + + +The texture to query. + + + + +subresource + + +The index of the subresource. + + + +The tiling information of the texture. + + + + + + + + + EventQuery * + EventQuery* d3d::create_event_query + () + create_event_query + +Creates a new event query. + + +A pointer to the created event query, or nullptr if not supported or failed (device reset e.g.). + + + + + + + + + void + void d3d::release_event_query + (EventQuery *query) + release_event_query + + EventQuery * + query + + +Releases the specified event query. + + + + +query + + +The event query to release. + + + + + + + + + + + bool + bool d3d::issue_event_query + (EventQuery *query) + issue_event_query + + EventQuery * + query + + +Issues the specified event query. + + + + +query + + +The event query to issue. + + + +True if the query was successfully issued, false otherwise. + + + + + + + + + bool + bool d3d::get_event_query_status + (EventQuery *query, bool force_flush) + get_event_query_status + + EventQuery * + query + + + bool + force_flush + + +Gets the status of the specified event query. + + + + +query + + +The event query to check. + + + + +force_flush + + +Whether to force a flush before checking the status. + + + +False if the query is issued but not yet signaled, true otherwise (signaled, not issued, or bad query). + + + + + + + + + Sbuffer * + Sbuffer* d3d::create_vb + (int size_bytes, int flags, const char *name="") + create_vb + + int + size_bytes + + + int + flags + + + const char * + name + "" + + +Creates a vertex buffer. + + +This function creates a vertex buffer with the specified size and flags. +TodoMake the name parameter mandatory. + + + +size_bytes + + +The size of the vertex buffer in bytes. + + + + +flags + + +The creation flags. + + + + +name + + +The name of the vertex buffer (temporarily optional). + + + +A pointer to the created vertex buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::create_ib + (int size_bytes, int flags, const char *stat_name="ib") + create_ib + + int + size_bytes + + + int + flags + + + const char * + stat_name + "ib" + + +Creates an index buffer. + + +This function creates an index buffer with the specified size and flags. +TodoMake the name parameter mandatory. + + + +size_bytes + + +The size of the index buffer in bytes. + + + + +flags + + +The creation flags. + + + + +stat_name + + +The name of the index buffer (temporarily optional). + + + +A pointer to the created index buffer. + + + + + + + + + bool + bool d3d::setvsrc_ex + (int stream, Sbuffer *vb, int offset, int stride_bytes) + setvsrc_ex + + int + stream + + + Sbuffer * + vb + + + int + offset + + + int + stride_bytes + + +Sets the vertex buffer as a stream source. + + +This function sets the vertex buffer as a stream source for the specified stream. + + +stream + + +The stream index. + + + + +vb + + +A pointer to the vertex buffer. + + + + +offset + + +The offset in bytes from the start of the vertex buffer. + + + + +stride_bytes + + +The stride in bytes between vertices. + + + +True if the vertex stream source was set successfully, false otherwise. + + + + + + + + + bool + bool d3d::setvsrc + (int stream, Sbuffer *vb, int stride_bytes) + setvsrc + + int + stream + + + Sbuffer * + vb + + + int + stride_bytes + + +Sets the vertex buffer as a stream source. + + +This function sets the vertex buffer as a stream source for the specified stream. + + +stream + + +The stream index. + + + + +vb + + +A pointer to the vertex buffer. + + + + +stride_bytes + + +The stride in bytes between vertices. + + + +True if the vertex stream source was set successfully, false otherwise. + + + + + + + + + bool + bool d3d::setind + (Sbuffer *ib) + setind + + Sbuffer * + ib + + +Sets the index buffer. + + +This function sets the index buffer for rendering. + + +ib + + +A pointer to the index buffer. + + + +True if the indices were set successfully, false otherwise. + + + + + + + + + VDECL + VDECL d3d::create_vdecl + (VSDTYPE *vsd) + create_vdecl + + VSDTYPE * + vsd + + +Creates a DX8-style vertex declaration. + + +This function creates a DX8-style vertex declaration based on the specified vertex shader declaration. +TodoDo we really need to support DX8-style vertex declarations? Maybe it's time to look for a more modern solution. + + + +vsd + + +The vertex shader declaration. + + + +The created vertex declaration, or BAD_VDECL on error. + + + + + + + + + void + void d3d::delete_vdecl + (VDECL vdecl) + delete_vdecl + + VDECL + vdecl + + +Deletes a vertex declaration. + + +This function deletes a vertex declaration. + + +vdecl + + +The vertex declaration to delete. + + + + + + + + + + + bool + bool d3d::setvdecl + (VDECL vdecl) + setvdecl + + VDECL + vdecl + + +Sets the current vertex declaration. + + +This function sets the current vertex declaration for rendering. + + +vdecl + + +The vertex declaration to set. + + + +True if the vertex declaration was set successfully, false otherwise. + + + + + + + + + bool + bool d3d::set_const + (unsigned stage, unsigned reg_base, const void *data, unsigned num_regs) + set_const + + unsigned + stage + + + unsigned + reg_base + + + const void * + data + + + unsigned + num_regs + + +Sets shader constants for the specified stage. + + + + +stage + + +The shader stage (STAGE_VS, STAGE_PS, STAGE_CS). + + + + +reg_base + + +The base register index. + + + + +data + + +Pointer to the data to be set. The size must be a multiple of sizeof(float4). + + + + +num_regs + + +The number of registers (float4) to be set. + + + +True if the constants were set successfully, false otherwise. + +These constants will be ignored, if a constant buffer is explicitly bound to slot 0. + + + + + + + + + bool + bool d3d::set_vs_const + (unsigned reg_base, const void *data, unsigned num_regs) + set_vs_const + + unsigned + reg_base + + + const void * + data + + + unsigned + num_regs + + +Sets vertex shader constants. + + + + +reg_base + + +The base register index. + + + + +data + + +Pointer to the data to be set. The size must be a multiple of sizeof(float4). + + + + +num_regs + + +The number of registers (float4) to be set. + + + +True if the constants were set successfully, false otherwise. + +These constants will be ignored, if a constant buffer is explicitly bound to slot 0. + + + + + + + + + bool + bool d3d::set_ps_const + (unsigned reg_base, const void *data, unsigned num_regs) + set_ps_const + + unsigned + reg_base + + + const void * + data + + + unsigned + num_regs + + +Sets pixel shader constants. + + + + +reg_base + + +The base register index. + + + + +data + + +Pointer to the data to be set. The size must be a multiple of sizeof(float4). + + + + +num_regs + + +The number of registers (float4) to be set. + + + +True if the constants were set successfully, false otherwise. + +These constants will be ignored, if a constant buffer is explicitly bound to slot 0. + + + + + + + + + bool + bool d3d::set_cs_const + (unsigned reg_base, const void *data, unsigned num_regs) + set_cs_const + + unsigned + reg_base + + + const void * + data + + + unsigned + num_regs + + +Sets compute shader constants. + + + + +reg_base + + +The base register index. + + + + +data + + +Pointer to the data to be set. The size must be a multiple of sizeof(float4). + + + + +num_regs + + +The number of registers (float4) to be set. + + + +True if the constants were set successfully, false otherwise. + +These constants will be ignored, if a constant buffer is explicitly bound to slot 0. + + + + + + + + + bool + bool d3d::set_vs_const1 + (unsigned reg, float v0, float v1, float v2, float v3) + set_vs_const1 + + unsigned + reg + + + float + v0 + + + float + v1 + + + float + v2 + + + float + v3 + + +Sets a single vertex shader constant register. + + + + +reg + + +The register index. + + + + +v0 + + +The value for the first component. + + + + +v1 + + +The value for the second component. + + + + +v2 + + +The value for the third component. + + + + +v3 + + +The value for the fourth component. + + + +True if the constant was set successfully, false otherwise. + +This constant will be ignored, if a constant buffer is explicitly bound to slot 0. + + + + + + + + + bool + bool d3d::set_ps_const1 + (unsigned reg, float v0, float v1, float v2, float v3) + set_ps_const1 + + unsigned + reg + + + float + v0 + + + float + v1 + + + float + v2 + + + float + v3 + + +Sets a single pixel shader constant register. + + + + +reg + + +The register index. + + + + +v0 + + +The value for the first component. + + + + +v1 + + +The value for the second component. + + + + +v2 + + +The value for the third component. + + + + +v3 + + +The value for the fourth component. + + + +True if the constant was set successfully, false otherwise. + +This constant will be ignored, if a constant buffer is explicitly bound to slot 0. + + + + + + + + + bool + bool d3d::set_immediate_const + (unsigned stage, const uint32_t *data, unsigned num_words) + set_immediate_const + + unsigned + stage + + + const uint32_t * + data + + + unsigned + num_words + + +Sets immediate constants for the specified stage. + + +Immediate constants are supposed to be very cheap to set dwords. It is guaranteed to support up to 4 dwords on each stage. Use as little as possible, ideally one or two (or none). On XB1(PS4), it is implemented as user regs (C|P|V)SSetShaderUserData. On DX11, it is implemented as constant buffers. On VK/DX12, it should be implemented as descriptor/push constants buffers. Calling with data = nullptr || num_words == 0 is benign and currently works as "stop using immediate" (probably have to be replaced with shader system). + + +stage + + +The shader stage (STAGE_VS, STAGE_PS, STAGE_CS). + + + + +data + + +Pointer to the data to be set. + + + + +num_words + + +The number of words to be set. + + + +True if the constants were set successfully, false otherwise. + + + + + + + + + bool + bool d3d::set_const_buffer + (unsigned stage, unsigned slot, const float *data, unsigned num_regs) + set_const_buffer + + unsigned + stage + + + unsigned + slot + + + const float * + data + + + unsigned + num_regs + + +Sets a constant buffer for the specified stage. PS4 specific. + + +Constant buffers are valid until driver acquire call or end of frame. To unbind, use set_const_buffer(stage, 0, nullptr). + + +stage + + +The shader stage (STAGE_VS, STAGE_PS, STAGE_CS). + + + + +slot + + +The buffer slot. + + + + +data + + +Pointer to the data to be set. The size must be a multiple of sizeof(float4). + + + + +num_regs + + +The number of registers (float4) to be set. + + + +True if the constant buffer was set successfully, false otherwise. + +When slot is 0, and data is not nullptr, it will also override any constants set via set_const and related calls. + + + + + + + + + bool + bool d3d::set_const_buffer + (unsigned stage, unsigned slot, Sbuffer *buffer, uint32_t consts_offset=0, uint32_t consts_size=0) + set_const_buffer + + unsigned + stage + + + unsigned + slot + + + Sbuffer * + buffer + + + uint32_t + consts_offset + 0 + + + uint32_t + consts_size + 0 + + +Sets a constant buffer for the specified stage using a buffer object. + + +Constant buffers are valid until driver acquire call or end of frame. To unbind, use set_const_buffer(stage, 0, nullptr). + + +stage + + +The shader stage (STAGE_VS, STAGE_PS, STAGE_CS). + + + + +slot + + +The buffer slot. + + + + +buffer + + +Pointer to the buffer object. Must be created with d3d::buffers::create_persistent_cb or d3d::buffers::create_one_frame_cb. + + + + +consts_offset + + +The offset of the constants in the buffer. (Not used) + + + + +consts_size + + +The size of the constants in the buffer. (Not used) + + + +Todoconsts_offset and consts_size are not used. Remove them? +True if the constant buffer was set successfully, false otherwise. + + + + + + + + + int + int d3d::set_vs_constbuffer_size + (int required_size) + set_vs_constbuffer_size + + int + required_size + + +Sets the size of the vertex shader constant buffer that can be filled with set_const call. + + + + +required_size + + +The required size of the constant buffer. If 0, the default size is set. + + + +The actual size of the constant buffer. + + + + + + + + + int + int d3d::set_cs_constbuffer_size + (int required_size) + set_cs_constbuffer_size + + int + required_size + + +Sets the size of the compute shader constant buffer that can be filled with set_const call. + + + + +required_size + + +The required size of the constant buffer. If 0, the default size is set. + + + +The actual size of the constant buffer. + + + + + + + + + bool + bool d3d::set_cb0_data + (unsigned stage, const float *data, unsigned num_regs) + set_cb0_data + + unsigned + stage + + + const float * + data + + + unsigned + num_regs + + +Sets a constant buffer at slot 0 for the specified stage. Uses the fastest method available on the platform. + + +Constant buffers are valid until driver acquire call or end of frame. To unbind, use release_cb0_data(stage). + + +stage + + +The shader stage (STAGE_VS, STAGE_PS, STAGE_CS). + + + + +data + + +Pointer to the data to be set. The size must be a multiple of sizeof(float4). + + + + +num_regs + + +The number of registers (float4) to be set. + + + +True if the constants were set successfully, false otherwise. + + + + + + + + + void + void d3d::release_cb0_data + (unsigned stage) + release_cb0_data + + unsigned + stage + + +Releases the constant buffer at slot 0, which should have been previously set by set_cb0_data. + + + + +stage + + +The shader stage (STAGE_VS, STAGE_PS, STAGE_CS). + + + + + + + + + + + int + int d3d::driver_command + (Drv3dCommand command, void *par1=nullptr, void *par2=nullptr, void *par3=nullptr) + driver_command + + Drv3dCommand + command + + + void * + par1 + nullptr + + + void * + par2 + nullptr + + + void * + par3 + nullptr + + +send specific command to driver + + + + + + + + + Sbuffer * + Sbuffer* d3d::create_sbuffer + (int struct_size, int elements, unsigned flags, unsigned texfmt, const char *name) + create_sbuffer + + int + struct_size + + + int + elements + + + unsigned + flags + + + unsigned + texfmt + + + const char * + name + + +Creates a buffer with the specified parameters. + + +The buffer can be used for various purposes, such as constant buffers, structured buffers, byte address buffers, and more. It is an uber method, and not all combinations of parameters are valid. Use d3d::buffers namespace for more specific buffer creation methods. + + +struct_size + + +The size of each structure in the buffer. + + + + +elements + + +The number of elements in the buffer. + + + + +flags + + +Additional flags for the buffer. + + + + +texfmt + + +The texture format for tBuffers. + + + + +name + + +The name of the buffer. + + + +A pointer to the created buffer. + + + + + + + + + bool + bool d3d::set_buffer + (unsigned shader_stage, unsigned slot, Sbuffer *buffer) + set_buffer + + unsigned + shader_stage + + + unsigned + slot + + + Sbuffer * + buffer + + +Sets an Sbuffer for a specific shader stage and slot. + + + + +shader_stage + + +The shader stage to set the buffer for. One of STAGE_ values. + + + + +slot + + +The slot to bind the buffer to. + + + + +buffer + + +A pointer to the Sbuffer to set. + + + +True if the buffer was successfully set, false otherwise. + + + + + + + + + bool + bool d3d::set_rwbuffer + (unsigned shader_stage, unsigned slot, Sbuffer *buffer) + set_rwbuffer + + unsigned + shader_stage + + + unsigned + slot + + + Sbuffer * + buffer + + +Sets a read-write Sbuffer for a specific shader stage and slot. + + + + +shader_stage + + +The shader stage to set the buffer for. One of STAGE_ values. + + + + +slot + + +The slot to bind the buffer to. + + + + +buffer + + +A pointer to the Sbuffer to set. + + + +True if the buffer was successfully set, false otherwise. + + + + + + + + + void + void d3d::reserve_res_entries + (bool strict_max, int max_tex, int max_vs, int max_ps, int max_vdecl, int max_vb, int max_ib, int max_stblk) + reserve_res_entries + + bool + strict_max + + + int + max_tex + + + int + max_vs + + + int + max_ps + + + int + max_vdecl + + + int + max_vb + + + int + max_ib + + + int + max_stblk + + +reserves resource entries using max count values, optionally disabling exceeding count limit + + + + + + + + + void + void d3d::get_max_used_res_entries + (int &max_tex, int &max_vs, int &max_ps, int &max_vdecl, int &max_vb, int &max_ib, int &max_stblk) + get_max_used_res_entries + + int & + max_tex + + + int & + max_vs + + + int & + max_ps + + + int & + max_vdecl + + + int & + max_vb + + + int & + max_ib + + + int & + max_stblk + + +returns maximum resource entries count values + + + + + + + + + void + void d3d::get_cur_used_res_entries + (int &max_tex, int &max_vs, int &max_ps, int &max_vdecl, int &max_vb, int &max_ib, int &max_stblk) + get_cur_used_res_entries + + int & + max_tex + + + int & + max_vs + + + int & + max_ps + + + int & + max_vdecl + + + int & + max_vb + + + int & + max_ib + + + int & + max_stblk + + +returns current resource entries count values + + + + + + + + + ShaderLibrary + ShaderLibrary d3d::create_shader_library + (const ShaderLibraryCreateInfo &slci) + create_shader_library + + const ShaderLibraryCreateInfo & + slci + + + + +Creates a new shader library. The creation of a shader library may be a time consuming process (several hundred milliseconds) as device drivers compile the generic shader IL into device specific machine code, this function will block until this process is completed. Returns either a new ShaderLibrary object or InvalidShaderLibrary to indicate there was and error. In case of an error, driver should log the cause for the error into the error log. In case of a device reset, the shader library becomes unusable and has to be destroyed and recreated. + + + + + + + void + void d3d::destroy_shader_library + (ShaderLibrary library) + destroy_shader_library + + ShaderLibrary + library + + + + +Destroys a shader library. A shader library can be destroyed when other object reference shaders of the shader library. + + + + + + + uint32_t + uint32_t d3d::register_bindless_sampler + (BaseTexture *texture) + register_bindless_sampler + + BaseTexture * + texture + + +Registers the sampler portion of the given texture into the global bindless sampler table. + + +Textures with identical samplers may yield identical return values. Default sampler (mip linear, filter linear, address wrap, anisotropic = 1, mip bias = 0, transparent black border) is available at zero slot by default. + + +texture + + +Pointer to the BaseTexture object. + + + +Index in the global sampler table representing this sampler. + + + + + + + + + uint32_t + uint32_t d3d::register_bindless_sampler + (SamplerHandle sampler) + register_bindless_sampler + + SamplerHandle + sampler + + +Registers a sampler into the global bindless sampler table. + + +Multiple register calls with the same sampler may yield identical return values. Default sampler (mip linear, filter linear, address wrap, anisotropic = 1, mip bias = 0, transparent black border) is available at zero slot by default. + + +sampler + + +Sampler that should be added. + + + +Index in the global sampler table representing this sampler. + + + + + + + + + uint32_t + uint32_t d3d::allocate_bindless_resource_range + (uint32_t resource_type, uint32_t count) + allocate_bindless_resource_range + + uint32_t + resource_type + + + uint32_t + count + + +Allocates a persistent bindless slot range of the given 'resource_type' resource type. + + + + +resource_type + + +The type of resource to allocate the slot range for. Must be one of RES3D_ enum values. + + + + +count + + +The number of slots to allocate. Must be larger than 0. + + + +The first slot index into the bindless heap of the requested range. + + + + + + + + + uint32_t + uint32_t d3d::resize_bindless_resource_range + (uint32_t resource_type, uint32_t index, uint32_t current_count, uint32_t new_count) + resize_bindless_resource_range + + uint32_t + resource_type + + + uint32_t + index + + + uint32_t + current_count + + + uint32_t + new_count + + +Resizes a previously allocated bindless slot range. + + +It can shrink and enlarge a slot range. The contents of all slots of the old range are migrated to the new range, so only new entries have to be updated. + + +resource_type + + +The type of resource to resize the slot range for. Must be one of RES3D_ enum values. + + + + +index + + +The index of the slot range to resize. Must be in a previously allocated bindless range, or any value if 'current_count' is 0. + + + + +current_count + + +The current count of slots in the range. Must be within a previously allocated bindless slot range or 0, when 0 then it behaves like 'allocate_bindless_resource_range'. + + + + +new_count + + +The new count of slots in the range. Can be larger or smaller than 'current_count', shrinks or enlarges the slot range accordingly. + + + +The first slot of the new range. + + + + + + + + + void + void d3d::free_bindless_resource_range + (uint32_t resource_type, uint32_t index, uint32_t count) + free_bindless_resource_range + + uint32_t + resource_type + + + uint32_t + index + + + uint32_t + count + + +Frees a previously allocated slot range. + + +This can also be used to shrink ranges, similarly to 'resize_bindless_resource_range'. + + +resource_type + + +The type of resource to free the slot range for. Must be one of RES3D_ enum values. + + + + +index + + +The index of the slot range to free. Must be in a previously allocated bindless range, or any value if 'count' is 0. + + + + +count + + +The number of slots to free. Must not exceed the previously allocated bindless slot range. Can be 0 which will be a no-op. + + + + + + + + + + + void + void d3d::update_bindless_resource + (uint32_t index, D3dResource *res) + update_bindless_resource + + uint32_t + index + + + D3dResource * + res + + +Updates a given bindless slot with the reference to 'res'. + + +The slot has to be allocated previously with the corresponding allocation methods with 'resource_type' matching the restype of 'res'. + + +index + + +The index of the bindless slot to update. Must be in a previously allocated bindless range. + + + + +res + + +Pointer to the D3dResource object. + + + + + + + + + + + void + void d3d::update_bindless_resources_to_null + (uint32_t resource_type, uint32_t index, uint32_t count) + update_bindless_resources_to_null + + uint32_t + resource_type + + + uint32_t + index + + + uint32_t + count + + +Updates one or more bindless slots with a "null" resource of the given type. + + +Shader access to those slots will read all zeros and writes will be discarded. + + +resource_type + + +The type of resource to update with null. Must be one of RES3D_ enum values. + + + + +index + + +The index of the bindless slot to update. Must be in a previously allocated bindless range. + + + + +count + + +The number of slots to update. Must not exceed the previously allocated bindless slot range. + + + + + + + + + + + const char * + const char* d3d::as_string + (d3d::shadermodel::Version v) + as_string + + d3d::shadermodel::Version + v + + + + +Returns the "<major>.<minor>" string representation of a Version value that is part of d3d::smAny. v Version for which string it should be returned. A valid constant string for versions included in d3d::smAny. + + + + + + + + + const char * + const char* d3d::as_string + (d3d::shadermodel::VersionWithName v) + as_string + + d3d::shadermodel::VersionWithName + v + + + + +Returns the "<major>.<minor>" string representation of a VersionWithName value. v Version for which string it should be returned. versionName member of v. + + + + + + + + + const char * + const char* d3d::as_ps_string + (d3d::shadermodel::Version v) + as_ps_string + + d3d::shadermodel::Version + v + + + + +Returns the "ps<major><minor>" string representation of a Version value that is part of d3d::smAny. v Version for which string it should be returned. A valid constant string for versions included in d3d::smAny. + + + + + + + + + const char * + const char* d3d::as_ps_string + (d3d::shadermodel::VersionWithName v) + as_ps_string + + d3d::shadermodel::VersionWithName + v + + + + +Returns the "ps<major><minor>" string representation of a VersionWithName value. v Version for which string it should be returned. psName member of v. + + + + + + + + + ResourceAllocationProperties + ResourceAllocationProperties d3d::get_resource_allocation_properties + (const ResourceDescription &desc) + get_resource_allocation_properties + + const ResourceDescription & + desc + + +Retrieves the resource allocation properties for a given resource description. + + + + +desc + + +The resource description. Resource descriptions that would describe a resource with one or more of its dimensions being 0 will result in an error. + + + +The resource allocation properties. On error sizeInBytes field of the returned value will be 0. + + + + + + + + + ResourceHeap * + ResourceHeap* d3d::create_resource_heap + (ResourceHeapGroup *heap_group, size_t size, ResourceHeapCreateFlags flags) + create_resource_heap + + ResourceHeapGroup * + heap_group + + + size_t + size + + + ResourceHeapCreateFlags + flags + + +Creates a resource heap with the specified size and flags. + + + + +heap_group + + +The resource heap group. + + + + +size + + +The size of the resource heap in bytes. A value of 0 is invalid and results in undefined behavior. + + + + +flags + + +The flags for creating the resource heap. + + + +A pointer to the created resource heap. May be nullptr on error, like out of memory or invalid inputs. + + + + + + + + + void + void d3d::destroy_resource_heap + (ResourceHeap *heap) + destroy_resource_heap + + ResourceHeap * + heap + + +Destroys a resource heap. + + + + +heap + + +The resource heap to destroy. + + + + + + + + + + + Sbuffer * + Sbuffer* d3d::place_buffer_in_resource_heap + (ResourceHeap *heap, const ResourceDescription &desc, size_t offset, const ResourceAllocationProperties &alloc_info, const char *name) + place_buffer_in_resource_heap + + ResourceHeap * + heap + + + const ResourceDescription & + desc + + + size_t + offset + + + const ResourceAllocationProperties & + alloc_info + + + const char * + name + + +Places a buffer in a resource heap at the specified offset. + + +The heap group of heap has to match the heap group of alloc_info that was returned by get_resource_allocation_properties. + + +heap + + +The resource heap. + + + + +desc + + +The resource description. + + + + +offset + + +The offset in the resource heap in bytes. + + + + +alloc_info + + +The resource allocation properties. + + + + +name + + +The name of the buffer. + + + +A pointer to the placed buffer. May be nullptr on error, like invalid inputs. + + + + + + + + + BaseTexture * + BaseTexture* d3d::place_texture_in_resource_heap + (ResourceHeap *heap, const ResourceDescription &desc, size_t offset, const ResourceAllocationProperties &alloc_info, const char *name) + place_texture_in_resource_heap + + ResourceHeap * + heap + + + const ResourceDescription & + desc + + + size_t + offset + + + const ResourceAllocationProperties & + alloc_info + + + const char * + name + + +Places a texture in a resource heap at the specified offset. + + +The heap group of heap has to match the heap group of alloc_info that was returned by get_resource_allocation_properties. + + +heap + + +The resource heap. + + + + +desc + + +The resource description. + + + + +offset + + +The offset in the resource heap in bytes. + + + + +alloc_info + + +The resource allocation properties. + + + + +name + + +The name of the texture. + + + +A pointer to the placed texture. May be nullptr on error, like invalid inputs. + + + + + + + + + ResourceHeapGroupProperties + ResourceHeapGroupProperties d3d::get_resource_heap_group_properties + (ResourceHeapGroup *heap_group) + get_resource_heap_group_properties + + ResourceHeapGroup * + heap_group + + +Retrieves the resource heap group properties for a given resource heap group. + + +Different groups may return identical values, this does not mean that the heap group is identical or can be substituted for each another. Heap groups represent purpose bound memory that may have device specific properties, that limit the use of a heap group for certain resource types. + + + +heap_group + + +The resource heap group. + + + +The resource heap group properties. + + + + + + + + + void + void d3d::activate_buffer + (Sbuffer *buf, ResourceActivationAction action, const ResourceClearValue &value={}, GpuPipeline gpu_pipeline=GpuPipeline::GRAPHICS) + activate_buffer + + Sbuffer * + buf + + + ResourceActivationAction + action + + + const ResourceClearValue & + value + {} + + + GpuPipeline + gpu_pipeline + GpuPipeline::GRAPHICS + + +Activates a buffer with the specified action and optional clear value. + + +Only activated placed buffer could be safely used. Using the buffer before being activated results in undefined behavior. + + +buf + + +The buffer to activate. + + + + +action + + +The activation action. + + + + +value + + +The clear value (optional). + + + + +gpu_pipeline + + +The GPU pipeline to use (optional). + + + +gpu_pipeline parameter doesn't work currently. + + + + + + + + + void + void d3d::activate_texture + (BaseTexture *tex, ResourceActivationAction action, const ResourceClearValue &value={}, GpuPipeline gpu_pipeline=GpuPipeline::GRAPHICS) + activate_texture + + BaseTexture * + tex + + + ResourceActivationAction + action + + + const ResourceClearValue & + value + {} + + + GpuPipeline + gpu_pipeline + GpuPipeline::GRAPHICS + + +Activates a texture with the specified action and optional clear value. + + +Only activated placed textures could be safely used. Using the texture before being activated results in undefined behavior. + + +tex + + +The texture to activate. + + + + +action + + +The activation action. + + + + +value + + +The clear value (optional). + + + + +gpu_pipeline + + +The GPU pipeline to use (optional). + + + +gpu_pipeline parameter doesn't work currently. + + + + + + + + + void + void d3d::deactivate_buffer + (Sbuffer *buf, GpuPipeline gpu_pipeline=GpuPipeline::GRAPHICS) + deactivate_buffer + + Sbuffer * + buf + + + GpuPipeline + gpu_pipeline + GpuPipeline::GRAPHICS + + +Deactivates a buffer with the specified GPU pipeline. + + +The method call is necessary to have a correct state of the resources on a heap. Using the buffer after being deactivated results in undefined behavior. + + +buf + + +The placed buffer to deactivate. + + + + +gpu_pipeline + + +The GPU pipeline to use (optional). + + + +gpu_pipeline parameter doesn't work currently. + + + + + + + + + void + void d3d::deactivate_texture + (BaseTexture *tex, GpuPipeline gpu_pipeline=GpuPipeline::GRAPHICS) + deactivate_texture + + BaseTexture * + tex + + + GpuPipeline + gpu_pipeline + GpuPipeline::GRAPHICS + + +Deactivates a texture with the specified GPU pipeline. + + +The method call is necessary to have a correct state of the resources on a heap. Using the texture after being deactivated results in undefined behavior. + + +tex + + +The placed texture to deactivate. + + + + +gpu_pipeline + + +The GPU pipeline to use (optional). + + + +gpu_pipeline parameter doesn't work currently. + + + + + + + + + bool + bool d3d::copy_from_current_render_target + (BaseTexture *to_tex) + copy_from_current_render_target + + BaseTexture * + to_tex + + +Copy the current render target to a texture. It is useful to get a backbuffer content on such drivers as Metal. + + + + +to_tex + + +Texture to copy the current render target to. + + + +true if the operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::clear_rt + (const RenderTarget &rt, const ResourceClearValue &clear_val={}) + clear_rt + + const RenderTarget & + rt + + + const ResourceClearValue & + clear_val + {} + + +Clear the render target. Perform full clear on the RT according to its' creation flag. + + + + +rt + + +Render target to clear. + + + + +clear_val + + +Clear value. + + + +true if the operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::set_render_target + () + set_render_target + +Set the default render target (backbuffer) as a single current render target. + + +true if the operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::set_depth + (BaseTexture *tex, DepthAccess access) + set_depth + + BaseTexture * + tex + + + DepthAccess + access + + +Set the depth texture target. + + + + +tex + + +Texture to set as depth target. NULL means NO depth. + + + + +access + + +Access mode for the depth attachment. + + + +true if the operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::set_depth + (BaseTexture *tex, int layer, DepthAccess access) + set_depth + + BaseTexture * + tex + + + int + layer + + + DepthAccess + access + + +Set the depth texture target. + + + + +tex + + +Texture to set as depth target. NULL means NO depth. + + + + +layer + + +Layer of the tex to set as depth target. + + + + +access + + +Access mode for the depth attachment. + + + +true if the operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::set_render_target + (int rt_index, BaseTexture *, int fc, uint8_t level) + set_render_target + + int + rt_index + + + BaseTexture * + + + int + fc + + + uint8_t + level + + +Sets the render target for rendering. + + +if texture is depth texture format, it is the same as call set_depth() DON'T USE THIS BEHAVIOR!!! + +DeprecatedUse set_render_target(RenderTarget depth, DepthAccess depth_access, dag::ConstSpan<RenderTarget> colors) instead. + + + +rt_index + + +The index of the render target. The maximum number of render targets is defined by Driver3dRenderTarget::MAX_SIMRT. + + + + +texture + + +A pointer to the BaseTexture object representing the render target. + + + + +fc + + +The face of the texture (for cube textures and texture arrays). If face is RENDER_TO_WHOLE_ARRAY, then the whole Texture Array/Volume Tex will be set as render target. This is to be used with geom shader (and Metal allows with vertex shader). + + + + +level + + +The level of the render target. + + + +True if the render target was set successfully, false otherwise. + + + + + + + + + bool + bool d3d::set_render_target + (int rt_index, BaseTexture *, uint8_t level) + set_render_target + + int + rt_index + + + BaseTexture * + + + uint8_t + level + + +Sets the render target for rendering. + + +if texture is depth texture format, it is the same as call set_depth() DON'T USE THIS BEHAVIOR!!! + +DeprecatedUse set_render_target(RenderTarget depth, DepthAccess depth_access, dag::ConstSpan<RenderTarget> colors) instead. + + + +rt_index + + +The index of the render target. The maximum number of render targets is defined by Driver3dRenderTarget::MAX_SIMRT. + + + + +texture + + +A pointer to the BaseTexture object representing the render target. + + + + +level + + +The level of the render target. + + + +True if the render target was set successfully, false otherwise. + + + + + + + + + bool + bool d3d::set_render_target + (BaseTexture *t, uint8_t level) + set_render_target + + BaseTexture * + t + + + uint8_t + level + + +Sets the render target for rendering. All other render targets will be set to nullptr. + + +if texture is depth texture format, it is the same as call set_depth() DON'T USE THIS BEHAVIOR!!! + +DeprecatedUse set_render_target(RenderTarget depth, DepthAccess depth_access, dag::ConstSpan<RenderTarget> colors) instead. + + + +texture + + +A pointer to the BaseTexture object representing the render target. + + + + +level + + +The level of the render target. + + + +True if the render target was set successfully, false otherwise. + + + + + + + + + bool + bool d3d::set_render_target + (BaseTexture *t, int fc, uint8_t level) + set_render_target + + BaseTexture * + t + + + int + fc + + + uint8_t + level + + +Sets the render target for rendering. All other render targets will be set to nullptr. + + +if texture is depth texture format, it is the same as call set_depth() DON'T USE THIS BEHAVIOR!!! + +DeprecatedUse set_render_target(RenderTarget depth, DepthAccess depth_access, dag::ConstSpan<RenderTarget> colors) instead. + + + +t + + +A pointer to the BaseTexture object representing the render target. + + + + +fc + + +The face of the texture (for cube textures and texture arrays). If face is RENDER_TO_WHOLE_ARRAY, then the whole Texture Array/Volume Tex will be set as render target. This is to be used with geom shader (and Metal allows with vertex shader). + + + + +level + + +The level of the render target. + + + +True if the render target was set successfully, false otherwise. + + + + + + + + + void + void d3d::set_render_target + (RenderTarget depth, DepthAccess depth_access, dag::ConstSpan< RenderTarget > colors) + set_render_target + + RenderTarget + depth + + + DepthAccess + depth_access + + + dag::ConstSpan< RenderTarget > + colors + + +Sets the render target for rendering. All other render targets will be set to nullptr. + + + + +depth + + +The depth render target. + + + + +depth_access + + +The access mode for the depth attachment. + + + + +colors + + +The color render targets. + + + +True if the render target was set successfully, false otherwise. + + + + + + + + + void + void d3d::set_render_target + (RenderTarget depth, DepthAccess depth_access, const std::initializer_list< RenderTarget > colors) + set_render_target + + RenderTarget + depth + + + DepthAccess + depth_access + + + const std::initializer_list< RenderTarget > + colors + + +Sets the render target for rendering. All other render targets will be set to nullptr. + + + + +depth + + +The depth render target. + + + + +depth_access + + +The access mode for the depth attachment. + + + + +colors + + +The color render targets. + + + +True if the render target was set successfully, false otherwise. + + + + + + + + + void + void d3d::get_render_target + (Driver3dRenderTarget &out_rt) + get_render_target + + Driver3dRenderTarget & + out_rt + + +Get the render target object. + + +DeprecatedDon't use it since the method relies on a global state. + + + +out_rt + + +The render target object to fill. + + + + + + + + + + + bool + bool d3d::set_render_target + (const Driver3dRenderTarget &rt) + set_render_target + + const Driver3dRenderTarget & + rt + + +Set the render target object. + + + + +rt + + +The render target object to set. Usually, it is obtained by get_render_target(Driver3dRenderTarget &out_rt). + + + +true if the operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::get_target_size + (int &w, int &h) + get_target_size + + int & + w + + + int & + h + + +Get the size of the render target. + + +DeprecatedIf you need to use the method, it seems that you are doing something wrong. + + + +w + + +The width of the render target. + + + + +h + + +The height of the render target. + + + +true if the operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::get_render_target_size + (int &w, int &h, BaseTexture *rt_tex, uint8_t level=0) + get_render_target_size + + int & + w + + + int & + h + + + BaseTexture * + rt_tex + + + uint8_t + level + 0 + + +Get the size of the render target texture. + + +DeprecatedIf you need to use the method, it seems that you are doing something wrong. + + + +w + + +The width of the render target texture. + + + + +h + + +The height of the render target texture. + + + + +rt_tex + + +The render target texture. If nullptr, the size of the backbuffer will be written to w and h. + + + + +level + + +The level of the render target texture. + + + +true if the operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::clearview + (int what, E3DCOLOR c, float z, uint32_t stencil) + clearview + + int + what + + + E3DCOLOR + c + + + float + z + + + uint32_t + stencil + + +clear all view + + +Clear the view. What is view will be explained in the params. + + +what + + +The view to clear. It can be one of the CLEAR_*** enum. It will clears either color, depth, or stencil buffer. + + + + +c + + +The color to clear the view with. + + + + +z + + +The depth to clear the view with. + + + + +stencil + + +The stencil to clear the view with. + + + +true if the operation was successful, false otherwise. + + + + + + + + + void + void d3d::get_screen_size + (int &w, int &h) + get_screen_size + + int & + w + + + int & + h + + +Get the size of the screen (backbuffer). + + +The size of the screen can be different from the size of the framebuffer. + + + +w + + +The width of the screen. + + + + +h + + +The height of the screen. + + + + + + + + + + + Texture * + Texture* d3d::get_backbuffer_tex + () + get_backbuffer_tex + +Get the backbuffer texture. + + +Backbuffer is only valid while the GPU is acquired, and can be recreated in between. +The backbuffer texture. + + + + + + + + + Texture * + Texture* d3d::get_secondary_backbuffer_tex + () + get_secondary_backbuffer_tex + +Get the secondary backbuffer texture. + + +Secondary backbuffer is only valid while the GPU is acquired, and can be recreated in between. It exists only for Xbox. Mostly used as a backbuffer with a higher resolution to draw UI. +The secondary backbuffer texture. + + + + + + + + + bool + bool d3d::dispatch + (uint32_t thread_group_x, uint32_t thread_group_y, uint32_t thread_group_z, GpuPipeline gpu_pipeline=GpuPipeline::GRAPHICS) + dispatch + + uint32_t + thread_group_x + + + uint32_t + thread_group_y + + + uint32_t + thread_group_z + + + GpuPipeline + gpu_pipeline + GpuPipeline::GRAPHICS + + +Dispatches a compute shader with the specified thread group dimensions. + + + + +thread_group_x + + +The number of thread groups in the X dimension. + + + + +thread_group_y + + +The number of thread groups in the Y dimension. + + + + +thread_group_z + + +The number of thread groups in the Z dimension. + + + + +gpu_pipeline + + +The GPU pipeline to use for dispatching (default: GpuPipeline::GRAPHICS). + + + +gpu_pipeline argument doesn't work currently. + +True if the dispatch was successful, false otherwise. + + + + + + + + + bool + bool d3d::dispatch_indirect + (Sbuffer *args, uint32_t byte_offset=0, GpuPipeline gpu_pipeline=GpuPipeline::GRAPHICS) + dispatch_indirect + + Sbuffer * + args + + + uint32_t + byte_offset + 0 + + + GpuPipeline + gpu_pipeline + GpuPipeline::GRAPHICS + + +Dispatches a compute shader indirectly using the specified argument buffer. + + + + +args + + +The argument buffer containing the dispatch parameters. The buffer must be created with the d3d::buffers::create_indirect or d3d::buffers::create_ua_indirect methods and Indirect::Dispatch argument. The buffer should contain the following data: uint32_t thread_group_x, uint32_t thread_group_y, uint32_t thread_group_z. + + + + +byte_offset + + +The byte offset within the argument buffer (default: 0). + + + + +gpu_pipeline + + +The GPU pipeline to use for dispatching (default: GpuPipeline::GRAPHICS). + + + +gpu_pipeline argument doesn't work currently. + +True if the dispatch was successful, false otherwise. + + + + + + + + + ResUpdateBuffer * + ResUpdateBuffer* d3d::allocate_update_buffer_for_tex_region + (BaseTexture *dest_base_texture, unsigned dest_mip, unsigned dest_slice, unsigned offset_x, unsigned offset_y, unsigned offset_z, unsigned width, unsigned height, unsigned depth) + allocate_update_buffer_for_tex_region + + BaseTexture * + dest_base_texture + + + unsigned + dest_mip + + + unsigned + dest_slice + + + unsigned + offset_x + + + unsigned + offset_y + + + unsigned + offset_z + + + unsigned + width + + + unsigned + height + + + unsigned + depth + + +Allocates a update buffer to update the subregion described by offset_x, offset_y, offset_z, width, height and depth. + + + +dest_base_texture can not be nullptr. +dest_mip must be a valid mipmap level for dest_base_texture +dest_slice must be a valid array index / cube face for dest_base_texture when it is a array, cube or cube array texture, otherwise has to be 0 +offset_x must be within the width of dest_base_texture of miplevel dest_mip and aligned to the texture format block size +offset_y must be within the height of dest_base_texture of miplevel dest_mip and aligned to the texture format block size +offset_z must be within the depth of dest_base_texture of miplevel dest_mip when the texture is a vol tex, otherwise has to be 0 +width plus offset_x must be within the width of dest_base_texture of miplevel dest_mip and aligned to the texture format block size +height plus offset_y must be within the height of dest_base_texture of miplevel dest_mip and aligned to the texture format block size +depth plus offset_z must be within the depth of dest_base_texture of miplevel dest_mip when the texture is a vol tex, otherwise has to be 1 + + +May return nullptr if either inputs violate the rules above, the driver can currently not provide the memory required or the driver is unable to perform the needed copy operation on update. + + + + + + + ResUpdateBuffer * + ResUpdateBuffer* d3d::allocate_update_buffer_for_tex + (BaseTexture *dest_tex, int dest_mip, int dest_slice) + allocate_update_buffer_for_tex + + BaseTexture * + dest_tex + + + int + dest_mip + + + int + dest_slice + + +Allocates update buffer in system memory to be filled directly and then dispatched to apply_tex_update_buffer. + + +This method can fail if too much allocations happens in N-frame period. Caller should retry after rendering frame on screen if this happens. + + + +dest_tex + + +destination texture + + + + +dest_mip + + +destination mip level + + + + +dest_slice + + +destination slice + + + +pointer to update buffer or nullptr if allocation failed + + + + + + + + + void + void d3d::release_update_buffer + (ResUpdateBuffer *&rub) + release_update_buffer + + ResUpdateBuffer *& + rub + + +Releases update buffer (clears pointer afterwards); skips any update, just releases data. + + + + +rub + + +update buffer to release + + + + + + + + + + + char * + char* d3d::get_update_buffer_addr_for_write + (ResUpdateBuffer *rub) + get_update_buffer_addr_for_write + + ResUpdateBuffer * + rub + + +Returns data address to fill update data. + + + + +rub + + +update buffer + + + +pointer to memory that should be filled with data + + + + + + + + + size_t + size_t d3d::get_update_buffer_size + (ResUpdateBuffer *rub) + get_update_buffer_size + + ResUpdateBuffer * + rub + + +Returns size of update buffer. + + + + +rub + + +update buffer + + + +size of update buffer in bytes + + + + + + + + + size_t + size_t d3d::get_update_buffer_pitch + (ResUpdateBuffer *rub) + get_update_buffer_pitch + + ResUpdateBuffer * + rub + + +Returns pitch of update buffer (if applicable) + + + + +rub + + +update buffer + + + +pitch of update buffer + + + + + + + + + size_t + size_t d3d::get_update_buffer_slice_pitch + (ResUpdateBuffer *rub) + get_update_buffer_slice_pitch + + ResUpdateBuffer * + rub + + +Returns the pitch of one 2d image slice for volumetric textures. + + + + +rub + + +update buffer + + + +pitch of of a slice in the update buffer + + + + + + + + + bool + bool d3d::update_texture_and_release_update_buffer + (ResUpdateBuffer *&src_rub) + update_texture_and_release_update_buffer + + ResUpdateBuffer *& + src_rub + + +applies update to target d3dres and releases update buffer (clears pointer afterwards) + + + + +src_rub + + +update buffer to apply + + + +true if update was successful, false if update failed + + + + + + + + + bool + bool d3d::draw_base + (int type, int start, int numprim, uint32_t num_instances, uint32_t start_instance) + draw_base + + int + type + + + int + start + + + int + numprim + + + uint32_t + num_instances + + + uint32_t + start_instance + + +Draw primitives. + + + + +type + + +The type of primitives to draw. One of PRIM_XXX enum. + + + + +start + + +The starting index of the primitives. + + + + +numprim + + +The number of primitives to draw. + + + + +num_instances + + +The number of instances to draw. + + + + +start_instance + + +The starting instance index. + + + +True if the draw operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::draw + (int type, int start, int numprim) + draw + + int + type + + + int + start + + + int + numprim + + +Draw primitives with a single instance. + + + + +type + + +The type of primitives to draw. One of PRIM_XXX enum. + + + + +start + + +The starting index of the primitives. + + + + +numprim + + +The number of primitives to draw. + + + +True if the draw operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::draw_instanced + (int type, int start, int numprim, uint32_t num_instances, uint32_t start_instance=0) + draw_instanced + + int + type + + + int + start + + + int + numprim + + + uint32_t + num_instances + + + uint32_t + start_instance + 0 + + +Draw primitives with multiple instances. + + + + +type + + +The type of primitives to draw. One of PRIM_XXX enum. + + + + +start + + +The starting index of the primitives. + + + + +numprim + + +The number of primitives to draw. + + + + +num_instances + + +The number of instances to draw. + + + + +start_instance + + +The starting instance index. + + + +True if the draw operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::drawind_base + (int type, int startind, int numprim, int base_vertex, uint32_t num_instances, uint32_t start_instance) + drawind_base + + int + type + + + int + startind + + + int + numprim + + + int + base_vertex + + + uint32_t + num_instances + + + uint32_t + start_instance + + +Draw indexed primitives. + + + + +type + + +The type of primitives to draw. One of PRIM_XXX enum. + + + + +startind + + +The starting index of the primitives. + + + + +numprim + + +The number of primitives to draw. + + + + +base_vertex + + +The base vertex index. + + + + +num_instances + + +The number of instances to draw. + + + + +start_instance + + +The starting instance index. + + + +True if the draw operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::drawind_instanced + (int type, int startind, int numprim, int base_vertex, uint32_t num_instances, uint32_t start_instance=0) + drawind_instanced + + int + type + + + int + startind + + + int + numprim + + + int + base_vertex + + + uint32_t + num_instances + + + uint32_t + start_instance + 0 + + +Draw indexed primitives with multiple instances. + + + + +type + + +The type of primitives to draw. One of PRIM_XXX enum. + + + + +startind + + +The starting index of the primitives. + + + + +numprim + + +The number of primitives to draw. + + + + +base_vertex + + +The base vertex index. + + + + +num_instances + + +The number of instances to draw. + + + + +start_instance + + +The starting instance index. + + + +True if the draw operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::drawind + (int type, int startind, int numprim, int base_vertex) + drawind + + int + type + + + int + startind + + + int + numprim + + + int + base_vertex + + +Draw indexed primitives with a single instance. + + + + +type + + +The type of primitives to draw. One of PRIM_XXX enum. + + + + +startind + + +The starting index of the primitives. + + + + +numprim + + +The number of primitives to draw. + + + + +base_vertex + + +The base vertex index. + + + +True if the draw operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::draw_up + (int type, int numprim, const void *ptr, int stride_bytes) + draw_up + + int + type + + + int + numprim + + + const void * + ptr + + + int + stride_bytes + + +Draw primitives from a user pointer (rather slow). + + +DeprecatedRemove this method. It uncontrollably allocates memory in driver. + + + +type + + +The type of primitives to draw. One of PRIM_XXX enum. + + + + +numprim + + +The number of primitives to draw. + + + + +ptr + + +The pointer to the vertex data. + + + + +stride_bytes + + +The stride between vertices in bytes. + + + +True if the draw operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::drawind_up + (int type, int minvert, int numvert, int numprim, const uint16_t *ind, const void *ptr, int stride_bytes) + drawind_up + + int + type + + + int + minvert + + + int + numvert + + + int + numprim + + + const uint16_t * + ind + + + const void * + ptr + + + int + stride_bytes + + +Draw indexed primitives from a user pointer (rather slow). + + +DeprecatedRemove this method. It uncontrollably allocates memory in driver. + + + +type + + +The type of primitives to draw. One of PRIM_XXX enum. + + + + +minvert + + +The minimum vertex index. + + + + +numvert + + +The number of vertices. + + + + +numprim + + +The number of primitives to draw. + + + + +ind + + +The pointer to the index data. + + + + +ptr + + +The pointer to the vertex data. + + + + +stride_bytes + + +The stride between vertices in bytes. + + + +True if the draw operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::draw_indirect + (int type, Sbuffer *args, uint32_t byte_offset=0) + draw_indirect + + int + type + + + Sbuffer * + args + + + uint32_t + byte_offset + 0 + + +Draw primitives using indirect parameters. + + + + +type + + +The type of primitives to draw. One of PRIM_XXX enum. + + + + +args + + +The buffer containing the draw parameters. The buffer must contain DrawIndirectArgs structure. + + + + +byte_offset + + +The byte offset into the buffer. + + + +True if the draw operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::draw_indexed_indirect + (int type, Sbuffer *args, uint32_t byte_offset=0) + draw_indexed_indirect + + int + type + + + Sbuffer * + args + + + uint32_t + byte_offset + 0 + + +Draw indexed primitives using indirect parameters. + + + + +type + + +The type of primitives to draw. One of PRIM_XXX enum. + + + + +args + + +The buffer containing the draw parameters. The buffer must contain DrawIndexedIndirectArgs structure. + + + + +byte_offset + + +The byte offset into the buffer. + + + +True if the draw operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::multi_draw_indirect + (int prim_type, Sbuffer *args, uint32_t draw_count, uint32_t stride_bytes, uint32_t byte_offset=0) + multi_draw_indirect + + int + prim_type + + + Sbuffer * + args + + + uint32_t + draw_count + + + uint32_t + stride_bytes + + + uint32_t + byte_offset + 0 + + +Draw multiple instances of primitives using indirect parameters. + + + + +prim_type + + +The type of primitives to draw. One of PRIM_XXX enum. + + + + +args + + +The buffer containing the draw parameters. The buffer must contain DrawIndirectArgs structures. + + + + +draw_count + + +The number of draw calls. + + + + +stride_bytes + + +The stride between draw parameters in bytes. + + + + +byte_offset + + +The byte offset into the buffer. + + + +True if the draw operation was successful, false otherwise. + + + + + + + + + bool + bool d3d::multi_draw_indexed_indirect + (int prim_type, Sbuffer *args, uint32_t draw_count, uint32_t stride_bytes, uint32_t byte_offset=0) + multi_draw_indexed_indirect + + int + prim_type + + + Sbuffer * + args + + + uint32_t + draw_count + + + uint32_t + stride_bytes + + + uint32_t + byte_offset + 0 + + +Draw multiple instances of indexed primitives using indirect parameters. + + + + +prim_type + + +The type of primitives to draw. One of PRIM_XXX enum. + + + + +args + + +The buffer containing the draw parameters. The buffer must contain DrawIndexedIndirectArgs structures. + + + + +draw_count + + +The number of draw calls. + + + + +stride_bytes + + +The stride between draw parameters in bytes. + + + + +byte_offset + + +The byte offset into the buffer. + + + +True if the draw operation was successful, false otherwise. + + + + + + + + + void + void d3d::update_window_mode + () + update_window_mode + + + + + + + + + + bool + bool d3d::init_driver + () + init_driver + +initalizes 3d device driver + + + + + + + + + bool + bool d3d::is_inited + () + is_inited + +returns true when d3d API is inited + + + + + + + + + bool + bool d3d::init_video + (void *hinst, main_wnd_f *, const char *wcname, int ncmdshow, void *&mainwnd, void *renderwnd, void *hicon, const char *title, Driver3dInitCallback *cb) + init_video + + void * + hinst + + + main_wnd_f * + + + const char * + wcname + + + int + ncmdshow + + + void *& + mainwnd + + + void * + renderwnd + + + void * + hicon + + + const char * + title + + + Driver3dInitCallback * + cb + + + + +start up, read cfg, create window, init 3d hard&soft, ... if renderwnd!=NULL, mainwnd and renderwnd are used for rendering (when possible) on error, returns false on sucess, return true + + + + + + + void + void d3d::release_driver + () + release_driver + +shutdown driver and release all resources + + + + + + + + + bool + bool d3d::fill_interface_table + (D3dInterfaceTable &d3dit) + fill_interface_table + + D3dInterfaceTable & + d3dit + + +fills function-pointers table for d3d API, or returns false if unsupported + + + + + + + + + void + void d3d::prepare_for_destroy + () + prepare_for_destroy + +notify driver before window destruction + + + + + + + + + void + void d3d::window_destroyed + (void *hwnd) + window_destroyed + + void * + hwnd + + +notify driver on window destruction + + + + + + + + + BeforeWindowDestroyedCookie * + BeforeWindowDestroyedCookie* d3d::register_before_window_destroyed_callback + (eastl::function< void()> callback) + register_before_window_destroyed_callback + + eastl::function< void()> + callback + + + + + + + + + + + void + void d3d::unregister_before_window_destroyed_callback + (BeforeWindowDestroyedCookie *cookie) + unregister_before_window_destroyed_callback + + BeforeWindowDestroyedCookie * + cookie + + + + + + + + + + + bool + bool d3d::device_lost + (bool *can_reset_now) + device_lost + + bool * + can_reset_now + + + + +returns true when device is lost; when it is safe to reset device can_reset_now is set with 1 returns false when device is ok + + + + + + + bool + bool d3d::reset_device + () + reset_device + +performs device reset; returns true if succeded + + + + + + + + + bool + bool d3d::update_screen + (bool app_active=true) + update_screen + + bool + app_active + true + + + + +flip video pages or copy to screen app_active==false is hint to the driver returns false on error + + + + + + + void + void d3d::wait_for_async_present + (bool force=false) + wait_for_async_present + + bool + force + false + + +If the update_screen(bool) works asynchronously then under certain conditions it will block the execution until the previously called update_screen(bool) is finished. + + + + +force + + +Even if the internal conditions don't require the wait, the execution will wait for the present to finish + + + + + + + + + + + void + void d3d::gpu_latency_wait + () + gpu_latency_wait + +It blocks the execution until the GPU finishes on going render task for delaying the input sampling and using the most recent user inputs for rendering the next frame. + + + + + + + + + GPUFENCEHANDLE + GPUFENCEHANDLE d3d::insert_fence + (GpuPipeline gpu_pipeline) + insert_fence + + GpuPipeline + gpu_pipeline + + + + + + + + + + + void + void d3d::insert_wait_on_fence + (GPUFENCEHANDLE &fence, GpuPipeline gpu_pipeline) + insert_wait_on_fence + + GPUFENCEHANDLE & + fence + + + GpuPipeline + gpu_pipeline + + + + + + + + + + + bool + bool d3d::set_srgb_backbuffer_write + (bool) + set_srgb_backbuffer_write + + bool + + + + + + + + + + + bool + bool d3d::setgamma + (float) + setgamma + + float + + + + + + + + + + + float + float d3d::get_screen_aspect_ratio + () + get_screen_aspect_ratio + + + + + + + + + + void + void d3d::change_screen_aspect_ratio + (float ar) + change_screen_aspect_ratio + + float + ar + + + + + + + + + + + void * + void* d3d::fast_capture_screen + (int &w, int &h, int &stride_bytes, int &format) + fast_capture_screen + + int & + w + + + int & + h + + + int & + stride_bytes + + + int & + format + + + + +capture screen to buffer.fast, but not guaranteed many captures can be followed by only one end_fast_capture_screen() + + + + + + + void + void d3d::end_fast_capture_screen + () + end_fast_capture_screen + + + + + + + + + + TexPixel32 * + TexPixel32* d3d::capture_screen + (int &w, int &h, int &stride_bytes) + capture_screen + + int & + w + + + int & + h + + + int & + stride_bytes + + + + +capture screen to TexPixel32 buffer slow, and not 100% guaranted returns NULL on error + + + + + + + void + void d3d::release_capture_buffer + () + release_capture_buffer + +release buffer used to capture screen + + + + + + + + + int + int d3d::create_predicate + () + create_predicate + + + +conditional rendering. conditional rendering is used to skip rendering of triangles completelyon GPU. the only commands, that would be ignored, if survey fails are DIPs (all commands and states will still be executed), so it is better to use reports to completely skip object rendering max index is defined per platform surveying. + + + + + + + void + void d3d::free_predicate + (int id) + free_predicate + + int + id + + + + + + + + + + + bool + bool d3d::begin_survey + (int id) + begin_survey + + int + id + + + + + + + + + + + void + void d3d::end_survey + (int id) + end_survey + + int + id + + + + + + + + + + + void + void d3d::begin_conditional_render + (int id) + begin_conditional_render + + int + id + + + + + + + + + + + void + void d3d::end_conditional_render + (int id) + end_conditional_render + + int + id + + + + + + + + + + + void + void d3d::beginEvent + (const char *) + beginEvent + + const char * + + + + + + + + + + + void + void d3d::endEvent + () + endEvent + + + + + + + + + + bool + bool d3d::get_vrr_supported + () + get_vrr_supported + + + + + + + + + + bool + bool d3d::get_vsync_enabled + () + get_vsync_enabled + +returns current state of VSYNC + + + + + + + + + bool + bool d3d::enable_vsync + (bool enable) + enable_vsync + + bool + enable + + +enables or disables strong VSYNC (flips only on VBLANK); returns true on success + + + + + + + + + void + void d3d::resource_barrier + (ResourceBarrierDesc desc, GpuPipeline gpu_pipeline=GpuPipeline::GRAPHICS) + resource_barrier + + ResourceBarrierDesc + desc + + + GpuPipeline + gpu_pipeline + GpuPipeline::GRAPHICS + + + + + + + + + + + void + void d3d::resummarize_htile + (BaseTexture *) + resummarize_htile + + BaseTexture * + + + + + + + + + + + void + void d3d::set_esram_layout + (const wchar_t *) + set_esram_layout + + const wchar_t * + + + + + + + + + + + void + void d3d::unset_esram_layout + () + unset_esram_layout + + + + + + + + + + void + void d3d::reset_esram_layout + () + reset_esram_layout + + + + + + + + + + void + void d3d::prefetch_movable_textures + () + prefetch_movable_textures + + + + + + + + + + void + void d3d::writeback_movable_textures + () + writeback_movable_textures + + + + + + + + + + bool + bool d3d::settm + (int which, const Matrix44 *tm) + settm + + int + which + + + const Matrix44 * + tm + + +Set the transformation matrix for the specified index. + + + + +which + + +The index of the transformation matrix. One of TM_XXX enum. + + + + +tm + + +Pointer to a Matrix44 object. + + + +True if the transformation matrix is set successfully, false otherwise. + + + + + + + + + bool + bool d3d::settm + (int which, const TMatrix &tm) + settm + + int + which + + + const TMatrix & + tm + + +Set the transformation matrix for the specified index. + + + + +which + + +The index of the transformation matrix. One of TM_XXX enum. + + + + +tm + + +Reference to a TMatrix object. + + + +True if the transformation matrix is set successfully, false otherwise. + + + + + + + + + void + void d3d::settm + (int which, const mat44f &tm) + settm + + int + which + + + const mat44f & + tm + + +Set the transformation matrix for the specified index. + + + + +which + + +The index of the transformation matrix. One of TM_XXX enum. + + + + +tm + + +The output mat44f object. + + + +True if the transformation matrix is set successfully, false otherwise. + + + + + + + + + bool + bool d3d::gettm + (int which, Matrix44 *out_tm) + gettm + + int + which + + + Matrix44 * + out_tm + + +Get the transformation matrix for the specified index. + + +Deprecated + + +which + + +The index of the transformation matrix. One of TM_XXX enum. + + + + +out_tm + + +Pointer to a Matrix44 object to store the result. + + + +True if the transformation matrix is retrieved successfully, false otherwise. + + + + + + + + + bool + bool d3d::gettm + (int which, TMatrix &out_tm) + gettm + + int + which + + + TMatrix & + out_tm + + +Get the transformation matrix for the specified index. + + +Deprecated + + +which + + +The index of the transformation matrix. One of TM_XXX enum. + + + + +out_tm + + +Reference to a TMatrix object to store the result. + + + +True if the transformation matrix is retrieved successfully, false otherwise. + + + + + + + + + void + void d3d::gettm + (int which, mat44f &out_tm) + gettm + + int + which + + + mat44f & + out_tm + + +Get the transformation matrix for the specified index. + + +Deprecated + + +which + + +The index of the transformation matrix. One of TM_XXX enum. + + + + +out_tm + + +The output mat44f object. + + + + + + + + + + + const mat44f & + const mat44f& d3d::gettm_cref + (int which) + gettm_cref + + int + which + + +Get the constant reference to the transformation matrix for the specified index. + + +Deprecated + + +which + + +The index of the transformation matrix. One of TM_XXX enum. + + + +The constant reference to the transformation matrix. + + + + + + + + + void + void d3d::getm2vtm + (TMatrix &out_m2v) + getm2vtm + + TMatrix & + out_m2v + + +Get the model to view matrix. + + +Deprecated + + +out_m2v + + +Reference to a TMatrix object to store the result. + + + + + + + + + + + void + void d3d::getglobtm + (Matrix44 &out) + getglobtm + + Matrix44 & + out + + +Get the current globtm matrix. + + +Deprecated + + +out + + +Reference to a Matrix44 object to store the result. + + + + + + + + + + + void + void d3d::setglobtm + (Matrix44 &globtm) + setglobtm + + Matrix44 & + globtm + + +Set the custom globtm matrix. + + + + +globtm + + +Reference to a Matrix44 object representing the custom globtm matrix. + + + + + + + + + + + void + void d3d::getglobtm + (mat44f &out) + getglobtm + + mat44f & + out + + +Get the current globtm matrix. + + +Deprecated + + +out + + +Reference to a mat44f object to store the result. + + + + + + + + + + + void + void d3d::setglobtm + (const mat44f &globtm) + setglobtm + + const mat44f & + globtm + + +Set the custom globtm matrix. + + + + +globtm + + +Reference to a mat44f object representing the custom globtm matrix. + + + + + + + + + + + bool + bool d3d::setpersp + (const Driver3dPerspective &p, TMatrix4 *proj_tm=nullptr) + setpersp + + const Driver3dPerspective & + p + + + TMatrix4 * + proj_tm + nullptr + + +Calculate and set the perspective matrix. + + + + +p + + +The Driver3dPerspective object representing the perspective parameters. + + + + +proj_tm + + +Pointer to a TMatrix4 object to store the perspective matrix. Optional. + + + +True if the perspective matrix is calculated and set successfully, false otherwise. + + + + + + + + + bool + bool d3d::getpersp + (Driver3dPerspective &p) + getpersp + + Driver3dPerspective & + p + + +Get the last values set by setpersp(). + + +Deprecated + + +p + + +Reference to a Driver3dPerspective object to store the result. + + + +True if the last values are retrieved successfully, false otherwise. + + + + + + + + + bool + bool d3d::validatepersp + (const Driver3dPerspective &p) + validatepersp + + const Driver3dPerspective & + p + + +Check if the given perspective parameters are valid. + + + + +p + + +The Driver3dPerspective object representing the perspective parameters. + + + +True if the perspective parameters are valid, false otherwise. + + + + + + + + + bool + bool d3d::calcproj + (const Driver3dPerspective &p, mat44f &proj_tm) + calcproj + + const Driver3dPerspective & + p + + + mat44f & + proj_tm + + +Calculate the perspective matrix without setting it. + + + + +p + + +The Driver3dPerspective object representing the perspective parameters. + + + + +proj_tm + + +Reference to a mat44f object to store the perspective matrix. + + + +True if the perspective matrix is calculated successfully, false otherwise. + + + + + + + + + bool + bool d3d::calcproj + (const Driver3dPerspective &p, TMatrix4 &proj_tm) + calcproj + + const Driver3dPerspective & + p + + + TMatrix4 & + proj_tm + + +Calculate the perspective matrix without setting it. + + + + +p + + +The Driver3dPerspective object representing the perspective parameters. + + + + +proj_tm + + +Reference to a TMatrix4 object to store the perspective matrix. + + + +True if the perspective matrix is calculated successfully, false otherwise. + + + + + + + + + void + void d3d::calcglobtm + (const mat44f &view_tm, const mat44f &proj_tm, mat44f &result) + calcglobtm + + const mat44f & + view_tm + + + const mat44f & + proj_tm + + + mat44f & + result + + +Calculate the globtm matrix without setting it. + + + + +view_tm + + +The view matrix. + + + + +proj_tm + + +The perspective matrix. + + + + +result + + +Reference to a mat44f object to store the result. + + + + + + + + + + + void + void d3d::calcglobtm + (const mat44f &view_tm, const Driver3dPerspective &persp, mat44f &result) + calcglobtm + + const mat44f & + view_tm + + + const Driver3dPerspective & + persp + + + mat44f & + result + + +Calculate the globtm matrix without setting it. + + + + +view_tm + + +The view matrix. + + + + +persp + + +The Driver3dPerspective object representing the perspective parameters. + + + + +result + + +Reference to a mat44f object to store the result. + + + + + + + + + + + void + void d3d::calcglobtm + (const TMatrix &view_tm, const TMatrix4 &proj_tm, TMatrix4 &result) + calcglobtm + + const TMatrix & + view_tm + + + const TMatrix4 & + proj_tm + + + TMatrix4 & + result + + +Calculate the globtm matrix without setting it. + + + + +view_tm + + +The view matrix. + + + + +proj_tm + + +The perspective matrix. + + + + +result + + +Reference to a TMatrix4 object to store the result. + + + + + + + + + + + void + void d3d::calcglobtm + (const TMatrix &view_tm, const Driver3dPerspective &persp, TMatrix4 &result) + calcglobtm + + const TMatrix & + view_tm + + + const Driver3dPerspective & + persp + + + TMatrix4 & + result + + +Calculate the globtm matrix without setting it. + + + + +view_tm + + +The view matrix. + + + + +persp + + +The Driver3dPerspective object representing the perspective parameters. + + + + +result + + +Reference to a TMatrix4 object to store the result. + + + + + + + + + + + bool + bool d3d::setscissor + (int x, int y, int w, int h) + setscissor + + int + x + + + int + y + + + int + w + + + int + h + + +Set scissor for the current render target. Part of the render target that is outside the scissor rectangle is not rendered. + + + + +x + + +- left corner of the scissor rectangle + + + + +y + + +- top corner of the scissor rectangle + + + + +w + + +- width of the scissor rectangle + + + + +h + + +- height of the scissor rectangle + + + +true if the scissor rectangle was set successfully + + + + + + + + + bool + bool d3d::setscissors + (dag::ConstSpan< ScissorRect > scissorRects) + setscissors + + dag::ConstSpan< ScissorRect > + scissorRects + + +Set scissor for the current set of render targets. Part of the render target that is outside the scissor rectangle is not rendered. + + + + +scissorRects + + +- array of scissor rectangles. Should be the same size as the number of render targets. + + + +true if the scissor rectangles were set successfully + + + + + + + + + bool + bool d3d::setview + (int x, int y, int w, int h, float minz, float maxz) + setview + + int + x + + + int + y + + + int + w + + + int + h + + + float + minz + + + float + maxz + + +Set view for the current render target. Part of the render target that is outside the view rectangle is not rendered. + + + + +x + + +- left corner of the view rectangle + + + + +y + + +- top corner of the view rectangle + + + + +w + + +- width of the view rectangle + + + + +h + + +- height of the view rectangle + + + + +minz + + +- minimum depth value of the view rectangle + + + + +maxz + + +- maximum depth value of the view rectangle + + + +true if the view rectangle was set successfully + + + + + + + + + bool + bool d3d::setviews + (dag::ConstSpan< Viewport > viewports) + setviews + + dag::ConstSpan< Viewport > + viewports + + +Set view for the current set of render targets. Part of the render target that is outside the view rectangle is not rendered. + + + + +viewports + + +- array of view rectangles. Should be the same size as the number of render targets. + + + +true if the view rectangles were set successfully + + + + + + + + + bool + bool d3d::getview + (int &x, int &y, int &w, int &h, float &minz, float &maxz) + getview + + int & + x + + + int & + y + + + int & + w + + + int & + h + + + float & + minz + + + float & + maxz + + +Get view for the current render target. + + +DeprecatedDon't use it since this method relies on the global state. + + + +x + + +- left corner of the view rectangle + + + + +y + + +- top corner of the view rectangle + + + + +w + + +- width of the view rectangle + + + + +h + + +- height of the view rectangle + + + + +minz + + +- minimum depth value of the view rectangle + + + + +maxz + + +- maximum depth value of the view rectangle + + + +true if the view rectangle was retrieved successfully + + + + + + + + + void + void d3d::set_variable_rate_shading + (unsigned rate_x, unsigned rate_y, VariableRateShadingCombiner vertex_combiner=VariableRateShadingCombiner::VRS_PASSTHROUGH, VariableRateShadingCombiner pixel_combiner=VariableRateShadingCombiner::VRS_PASSTHROUGH) + set_variable_rate_shading + + unsigned + rate_x + + + unsigned + rate_y + + + VariableRateShadingCombiner + vertex_combiner + VariableRateShadingCombiner::VRS_PASSTHROUGH + + + VariableRateShadingCombiner + pixel_combiner + VariableRateShadingCombiner::VRS_PASSTHROUGH + + +Sets variable rate shading setup for next draw calls. + + +Rates (rate_x, rate_y) of 1 by 4 or 4 by 1 are invalid. + +Depth/Stencil values are always computed at full rate and so shaders that modify depth value output may interfere with the pixel_combiner. + + + +rate_x +rate_y + + +Constant rates for the next draw calls, those are supported by all VRS capable devices. Valid values for both are 1, 2 and with the corresponding feature cap 4. + + + + +vertex_combiner + + +The mode in which the constant rate of rate_x and rate_y is combined with a possible vertex/geometry shader rate output. For shader outputs see SV_ShadingRate, note that the provoking vertex or the per primitive value is used. + + + + +pixel_combiner + + +The mode in which the result of 'vertex_combiner' is combined with the rate of the sampling rate texture set by set_variable_rate_shading_texture. + + + + + + + + + + + void + void d3d::set_variable_rate_shading_texture + (BaseTexture *rate_texture=nullptr) + set_variable_rate_shading_texture + + BaseTexture * + rate_texture + nullptr + + +Sets the variable rate shading texture for the next draw calls. + + + + +rate_texture + + +The texture to use as a shading rate source. + + + +Note that when you start to modify the used texture, you should reset the used shading rate texture to null to ensure that on next use as a shading rate source, the texture is in a state the device can use. It is invalid to call this when DeviceDriverCapabilities::hasVariableRateShadingTexture feature is not supported. + + + + + + + + + void + void d3d::dispatch_mesh + (uint32_t thread_group_x, uint32_t thread_group_y, uint32_t thread_group_z) + dispatch_mesh + + uint32_t + thread_group_x + + + uint32_t + thread_group_y + + + uint32_t + thread_group_z + + +Dispatches a mesh shader with the specified thread group dimensions. + + +Max value for each direction is 64k, product of all dimensions can not exceed 2^22 + + +thread_group_x + + +The number of thread groups in the X direction. + + + + +thread_group_y + + +The number of thread groups in the Y direction. + + + + +thread_group_z + + +The number of thread groups in the Z direction. + + + + + + + + + + + void + void d3d::dispatch_mesh_indirect + (Sbuffer *args, uint32_t dispatch_count, uint32_t stride_bytes, uint32_t byte_offset=0) + dispatch_mesh_indirect + + Sbuffer * + args + + + uint32_t + dispatch_count + + + uint32_t + stride_bytes + + + uint32_t + byte_offset + 0 + + +Dispatches a mesh shader indirectly using the provided arguments. + + + + +args + + +The buffer containing the dispatch arguments. Buffer should contain structures of the following layout: struct DispatchArgs { uint32_t thread_group_x; uint32_t thread_group_y; uint32_t thread_group_z; }; + + + + +dispatch_count + + +The number of dispatches to execute. + + + + +stride_bytes + + +The stride between dispatch arguments in bytes. + + + + +byte_offset + + +The byte offset into the buffer where the dispatch arguments start (default = 0). + + + + + + + + + + + void + void d3d::dispatch_mesh_indirect_count + (Sbuffer *args, uint32_t args_stride_bytes, uint32_t args_byte_offset, Sbuffer *count, uint32_t count_byte_offset, uint32_t max_count) + dispatch_mesh_indirect_count + + Sbuffer * + args + + + uint32_t + args_stride_bytes + + + uint32_t + args_byte_offset + + + Sbuffer * + count + + + uint32_t + count_byte_offset + + + uint32_t + max_count + + +Dispatches a mesh shader indirectly using the provided arguments and a count buffer. + + +Variant of dispatch_mesh_indirect where 'dispatch_count' is read by the GPU from 'count' buffer at 'count_offset' (as uint32_t), this value can not exceed 'max_count'. + + +args + + +The buffer containing the dispatch arguments. + + + + +args_stride_bytes + + +The stride between dispatch arguments in bytes. + + + + +args_byte_offset + + +The byte offset into the buffer where the dispatch arguments start. + + + + +count + + +The buffer containing the dispatch count. + + + + +count_byte_offset + + +The byte offset into the count buffer where the dispatch count starts. + + + + +max_count + + +The maximum value that the dispatch count can have. + + + + + + + + + + + bool + bool d3d::start_capture + (const char *name, const char *savepath) + start_capture + + const char * + name + + + const char * + savepath + + +Starts the capture process. All previous outstanding commands will be flushed. + + + + +name + + +The name of the capture. This might show up in the capture tool or be used in the filename depending on platform and the capture tool used. nullptr is not allowed. + + + + +savepath + + +The path where the captured file will be saved. Not all capture tools respect this. nullptr means default path is used. + + + +true on success, false otherwise. + + + + + + + + + void + void d3d::stop_capture + () + stop_capture + +Stops the ongoing capture process. + + +This function halts any active capture operation that is currently in progress. Commands made since the last call to start_capture() will be flushed. + + + + + + + int + int d3d::guess_gpu_vendor + (String *out_gpu_desc=NULL, uint32_t *out_drv_ver=NULL, DagorDateTime *out_drv_date=NULL, uint32_t *device_id=nullptr) + guess_gpu_vendor + + String * + out_gpu_desc + NULL + + + uint32_t * + out_drv_ver + NULL + + + DagorDateTime * + out_drv_date + NULL + + + uint32_t * + device_id + nullptr + + +Guesses and returns the GPU vendor ID. + + + + +out_gpu_desc + + +Pointer to store the GPU description + + + + +out_drv_ver + + +Pointer to store the driver version + + + + +out_drv_date + + +Pointer to store the driver date + + + + +device_id + + +Pointer to store the device ID + + + +The GPU vendor ID for enum D3D_VENDOR_... + + + + + + + + + DagorDateTime + DagorDateTime d3d::get_gpu_driver_date + (int vendor) + get_gpu_driver_date + + int + vendor + + +Gets the driver date for the GPU vendor. + + + + +vendor + + +The GPU vendor ID + + + +The driver date for the GPU vendor + + + + + + + + + unsigned + unsigned d3d::get_dedicated_gpu_memory_size_kb + () + get_dedicated_gpu_memory_size_kb + +Determines and returns the size of the dedicated GPU memory in KB. + + +The size of the dedicated GPU memory in KB + + + + + + + + + unsigned + unsigned d3d::get_free_dedicated_gpu_memory_size_kb + () + get_free_dedicated_gpu_memory_size_kb + +Determines and returns the size of the free dedicated GPU memory in KB. + + +The size of the free dedicated GPU memory in KB + + + + + + + + + void + void d3d::get_current_gpu_memory_kb + (uint32_t *dedicated_total, uint32_t *dedicated_free) + get_current_gpu_memory_kb + + uint32_t * + dedicated_total + + + uint32_t * + dedicated_free + + +Gets the current GPU memory during the game (supports only Nvidia GPUs). + + + + +dedicated_total + + +Pointer to store the total dedicated GPU memory + + + + +dedicated_free + + +Pointer to store the free dedicated GPU memory + + + + + + + + + + + bool + bool d3d::get_gpu_freq + (String &out_freq) + get_gpu_freq + + String & + out_freq + + +Gets the GPU frequency. + + + + +out_freq + + +String to store the GPU frequency + + + +True if the GPU frequency was successfully retrieved, false otherwise + +This function works only for Nvidia GPUs + + + + + + + + + int + int d3d::get_gpu_temperature + () + get_gpu_temperature + +Gets the GPU temperature. + + +The GPU temperature + +This function works only for Nvidia GPUs + + + + + + + + + void + void d3d::get_video_vendor_str + (String &out_str) + get_video_vendor_str + + String & + out_str + + +Gets the video vendor string. + + + + +out_str + + +String to store the video vendor string + + + + + + + + + + + float + float d3d::get_display_scale + () + get_display_scale + +Gets the display scale. + + +The display scale + + + + + + + + + void + void d3d::disable_sli + () + disable_sli + +Disables SLI settings for the profile. + + +TodoRemove. We don't support SLI anymore + + + + + + + + const char * + const char* d3d::get_driver_name + () + get_driver_name + +Gets the driver name. + + +The driver name + + + + + + + + + DriverCode + DriverCode d3d::get_driver_code + () + get_driver_code + +Gets the driver code. + + +The driver code + + + + + + + + + bool + static bool d3d::is_stub_driver + () + is_stub_driver + +Checks if the d3d-stub driver is used. + + +True if the d3d-stub driver is used, false otherwise + + + + + + + + + const char * + const char* d3d::get_device_driver_version + () + get_device_driver_version + +Gets the device driver version. + + +The device driver version + +Work only for Vulkan. On other platforms returns "1.0" + + + + + + + + + const char * + const char* d3d::get_device_name + () + get_device_name + +Gets the device name. + + +The device name + + + + + + + + + const char * + const char* d3d::get_last_error + () + get_last_error + +Gets the last error message. + + +The last error message + + + + + + + + + uint32_t + uint32_t d3d::get_last_error_code + () + get_last_error_code + +Gets the last error code. + + +The last error code + + + + + + + + + void * + void* d3d::get_device + () + get_device + +Gets the raw pointer to the device interface (implementation and platform specific). + + +The raw pointer to the device interface + + + + + + + + + void * + void* d3d::get_context + () + get_context + +Gets the raw pointer to the device context (implementation and platform specific). + + +The raw pointer to the device context + + + + + + + + + const Driver3dDesc & + const Driver3dDesc& d3d::get_driver_desc + () + get_driver_desc + +Gets the driver description. + + +The driver description + + + + + + + + + bool + bool d3d::is_in_device_reset_now + () + is_in_device_reset_now + +Checks if the device is in device reset or being reset. + + +True if the device is in device reset or being reset, false otherwise + + + + + + + + + bool + bool d3d::is_window_occluded + () + is_window_occluded + +Checks if the game rendering window is completely occluded. + + +True if the game rendering window is completely occluded, false otherwise + + + + + + + + + bool + bool d3d::should_use_compute_for_image_processing + (std::initializer_list< unsigned > formats) + should_use_compute_for_image_processing + + std::initializer_list< unsigned > + formats + + +Checks if compute commands should be preferred for image processing. + + + + +formats + + +The list of image formats + + + +True if compute commands should be preferred, false otherwise + +Implemented only for DX11 + + + + + + + + + SamplerHandle + SamplerHandle d3d::request_sampler + (const SamplerInfo &sampler_info) + request_sampler + + const SamplerInfo & + sampler_info + + +Request a sampler handle with the given sampler info. + + +Creates a sampler, when necessary. Identical infos should yield identical handles. This call is thread-safe and does not require external synchronization. + +sampler_info + + +The information needed to create the sampler + + + +SamplerHandle The handle to the sampler + + + + + + + + + void + void d3d::set_sampler + (unsigned shader_stage, unsigned slot, SamplerHandle sampler) + set_sampler + + unsigned + shader_stage + + + unsigned + slot + + + SamplerHandle + sampler + + +Binds given sampler to the slot. + + +This call is not thread-safe, requires global gpu lock to be held + + +shader_stage + + +The shader stage to bind the sampler to. One of STAGE_XXX enum. + + + + +slot + + +The slot to bind the sampler to + + + + +sampler + + +The handle to the sampler to be bound + + + + + + + + + + + bool + bool d3d::check_texformat + (int cflg) + check_texformat + + int + cflg + + +Check whether the specified texture format is available. + + + + +cflg + + +The texture format to check. + + + +Returns false if a texture of the specified format cannot be created, otherwise returns true. + + + + + + + + + int + int d3d::get_max_sample_count + (int cflg) + get_max_sample_count + + int + cflg + + +Get the maximum sample count for the given texture format. + + + + +cflg + + +The texture format. + + + +The maximum sample count for the given texture format. + + + + + + + + + unsigned + unsigned d3d::get_texformat_usage + (int cflg, int restype=RES3D_TEX) + get_texformat_usage + + int + cflg + + + int + restype + RES3D_TEX + + +Get the texture format usage for the given texture format. + + + + +cflg + + +The texture format. + + + + +restype + + +The resource type (default value is RES3D_TEX). + + + +The texture format usage. One of the USAGE_XXX flags. + +TodoUse enum class as a returned type. + + + + + + + + bool + bool d3d::issame_texformat + (int cflg1, int cflg2) + issame_texformat + + int + cflg1 + + + int + cflg2 + + +Check whether two texture creation flags result in the same format. + + + + +cflg1 + + +The first texture creation flag. + + + + +cflg2 + + +The second texture creation flag. + + + +Returns true if the two texture creation flags result in the same format, otherwise returns false. + + + + + + + + + bool + bool d3d::check_cubetexformat + (int cflg) + check_cubetexformat + + int + cflg + + +Check whether the specified cube texture format is available. + + + + +cflg + + +The cube texture format to check. + + + +Returns false if a cube texture of the specified format cannot be created, otherwise returns true. + + + + + + + + + bool + bool d3d::check_voltexformat + (int cflg) + check_voltexformat + + int + cflg + + +Check whether the specified volume texture format is available. + + + + +cflg + + +The volume texture format to check. + + + +Returns false if a volume texture of the specified format cannot be created, otherwise returns true. + + + + + + + + + BaseTexture * + BaseTexture* d3d::create_tex + (TexImage32 *img, int w, int h, int flg, int levels, const char *stat_name=nullptr) + create_tex + + TexImage32 * + img + + + int + w + + + int + h + + + int + flg + + + int + levels + + + const char * + stat_name + nullptr + + +Create a texture. + + + + +img + + +32-bit image data. nullptr if there are no image data. + + + + +w + + +The width of the texture. + + + + +h + + +The height of the texture. + + + + +flg + + +The texture creation flags. + + + + +levels + + +The maximum number of mipmap levels. + + + + +stat_name + + +The name of the texture for statistics purposes (optional). + + + +A pointer to the created texture, or nullptr on error. + + + + + + + + + BaseTexture * + BaseTexture* d3d::create_ddsx_tex + (IGenLoad &crd, int flg, int quality_id, int levels=0, const char *stat_name=nullptr) + create_ddsx_tex + + IGenLoad & + crd + + + int + flg + + + int + quality_id + + + int + levels + 0 + + + const char * + stat_name + nullptr + + +Create a texture from a DDSx stream. + + + + +crd + + +The DDSx stream. + + + + +flg + + +The texture creation flags. + + + + +quality_id + + +The quality index. + + + + +levels + + +The number of loaded mipmaps (0=all, >0=only first 'levels' mipmaps). + + + + +stat_name + + +The name of the texture for statistics purposes (optional). + + + +A pointer to the created texture, or nullptr on error. + + + + + + + + + BaseTexture * + BaseTexture* d3d::alloc_ddsx_tex + (const ddsx::Header &hdr, int flg, int quality_id, int levels=0, const char *stat_name=nullptr, int stub_tex_idx=-1) + alloc_ddsx_tex + + const ddsx::Header & + hdr + + + int + flg + + + int + quality_id + + + int + levels + 0 + + + const char * + stat_name + nullptr + + + int + stub_tex_idx + -1 + + +Allocate a texture object using a DDSx header (not texture contents loaded at this time). + + + + +hdr + + +The DDSx header. + + + + +flg + + +The texture creation flags. + + + + +quality_id + + +The quality index. + + + + +levels + + +The maximum number of mipmap levels. + + + + +stat_name + + +The name of the texture for statistics purposes (optional). + + + + +stub_tex_idx + + +The index of the stub texture (default value is -1). + + + +A pointer to the allocated texture, or nullptr on error. + + + + + + + + + TexLoadRes + TexLoadRes d3d::load_ddsx_tex_contents + (BaseTexture *t, const ddsx::Header &hdr, IGenLoad &crd, int q_id) + load_ddsx_tex_contents + + BaseTexture * + t + + + const ddsx::Header & + hdr + + + IGenLoad & + crd + + + int + q_id + + +Load the texture content from a DDSx stream using a DDSx header for a previously allocated texture. + + + + +t + + +The previously allocated texture. + + + + +hdr + + +The DDSx header. + + + + +crd + + +The DDSx stream. + + + + +q_id + + +The quality index. + + + +Returns true if the texture content was successfully loaded, otherwise returns false. + + + + + + + + + BaseTexture * + BaseTexture* d3d::create_cubetex + (int size, int flg, int levels, const char *stat_name=nullptr) + create_cubetex + + int + size + + + int + flg + + + int + levels + + + const char * + stat_name + nullptr + + +Create a cubic texture. + + + + +size + + +The size of the texture. (6 faces size x size) + + + + +flg + + +The texture creation flags. + + + + +levels + + +The maximum number of mipmap levels. + + + + +stat_name + + +The name of the texture for statistics purposes (optional). + + + +A pointer to the created texture, or nullptr on error. + + + + + + + + + BaseTexture * + BaseTexture* d3d::create_voltex + (int w, int h, int d, int flg, int levels, const char *stat_name=nullptr) + create_voltex + + int + w + + + int + h + + + int + d + + + int + flg + + + int + levels + + + const char * + stat_name + nullptr + + +Create a volume texture. + + + + +w + + +The width of the texture. + + + + +h + + +The height of the texture. + + + + +d + + +The depth of the texture. + + + + +flg + + +The texture creation flags. + + + + +levels + + +The maximum number of mipmap levels. + + + + +stat_name + + +The name of the texture for statistics purposes (optional). + + + +A pointer to the created texture, or nullptr on error. + + + + + + + + + BaseTexture * + BaseTexture* d3d::create_array_tex + (int w, int h, int d, int flg, int levels, const char *stat_name) + create_array_tex + + int + w + + + int + h + + + int + d + + + int + flg + + + int + levels + + + const char * + stat_name + + +Create a texture2d array. + + + + +w + + +The width of the texture. + + + + +h + + +The height of the texture. + + + + +d + + +Amount of textures in the array. + + + + +flg + + +The texture creation flags. + + + + +levels + + +The maximum number of mipmap levels. + + + + +stat_name + + +The name of the texture for statistics purposes. + + + +A pointer to the created texture, or nullptr on error. + + + + + + + + + BaseTexture * + BaseTexture* d3d::create_cube_array_tex + (int side, int d, int flg, int levels, const char *stat_name) + create_cube_array_tex + + int + side + + + int + d + + + int + flg + + + int + levels + + + const char * + stat_name + + +Create a cube array tex object. + + + + +side + + +The size of the texture. (6 faces size x size) + + + + +d + + +Amount of textures in the array. + + + + +flg + + +The texture creation flags. + + + + +levels + + +The maximum number of mipmap levels. + + + + +stat_name + + +The name of the texture for statistics purposes. + + + +A pointer to the created texture, or nullptr on error. + + + + + + + + + BaseTexture * + BaseTexture* d3d::alias_tex + (BaseTexture *baseTexture, TexImage32 *img, int w, int h, int flg, int levels, const char *stat_name=nullptr) + alias_tex + + BaseTexture * + baseTexture + + + TexImage32 * + img + + + int + w + + + int + h + + + int + flg + + + int + levels + + + const char * + stat_name + nullptr + + +Create a texture alias, a texture using the same memory as another texture but with a different format. + + + + +baseTexture + + +The base texture to alias. + + + + +img + + +32-bit image data. + + + + +w + + +The width of the texture. + + + + +h + + +The height of the texture. + + + + +flg + + +The texture creation flags. + + + + +levels + + +The maximum number of mipmap levels. + + + + +stat_name + + +The name of the texture for statistics purposes (optional). + + + +A pointer to the created texture alias, or nullptr on error. + + + + + + + + + BaseTexture * + BaseTexture* d3d::alias_cubetex + (BaseTexture *baseTexture, int size, int flg, int levels, const char *stat_name=nullptr) + alias_cubetex + + BaseTexture * + baseTexture + + + int + size + + + int + flg + + + int + levels + + + const char * + stat_name + nullptr + + +Create a cube texture alias, a texture using the same memory as another cube texture but with a different format. + + + + +baseTexture + + +The base cube texture to alias. + + + + +size + + +The size of the texture. + + + + +flg + + +The texture creation flags. + + + + +levels + + +The maximum number of mipmap levels. + + + + +stat_name + + +The name of the texture for statistics purposes (optional). + + + +A pointer to the created cube texture alias, or nullptr on error. + + + + + + + + + BaseTexture * + BaseTexture* d3d::alias_voltex + (BaseTexture *baseTexture, int w, int h, int d, int flg, int levels, const char *stat_name=nullptr) + alias_voltex + + BaseTexture * + baseTexture + + + int + w + + + int + h + + + int + d + + + int + flg + + + int + levels + + + const char * + stat_name + nullptr + + +Create a volume texture alias, a texture using the same memory as another volume texture but with a different format. + + + + +baseTexture + + +The base volume texture to alias. + + + + +w + + +The width of the texture. + + + + +h + + +The height of the texture. + + + + +d + + +The depth of the texture. + + + + +flg + + +The texture creation flags. + + + + +levels + + +The maximum number of mipmap levels. + + + + +stat_name + + +The name of the texture for statistics purposes (optional). + + + +A pointer to the created volume texture alias, or nullptr on error. + + + + + + + + + BaseTexture * + BaseTexture* d3d::alias_array_tex + (BaseTexture *baseTexture, int w, int h, int d, int flg, int levels, const char *stat_name) + alias_array_tex + + BaseTexture * + baseTexture + + + int + w + + + int + h + + + int + d + + + int + flg + + + int + levels + + + const char * + stat_name + + +Create a texture2d array alias, a texture using the same memory as another texture2d array but with a different format. + + + + +baseTexture + + +The base texture2d array to alias. + + + + +w + + +The width of the texture. + + + + +h + + +The height of the texture. + + + + +d + + +Amount of textures in the array. + + + + +flg + + +The texture creation flags. + + + + +levels + + +The maximum number of mipmap levels. + + + + +stat_name + + +The name of the texture for statistics purposes (optional). + + + +A pointer to the created texture2d array alias, or nullptr on error. + + + + + + + + + BaseTexture * + BaseTexture* d3d::alias_cube_array_tex + (BaseTexture *baseTexture, int side, int d, int flg, int levels, const char *stat_name) + alias_cube_array_tex + + BaseTexture * + baseTexture + + + int + side + + + int + d + + + int + flg + + + int + levels + + + const char * + stat_name + + +Create a cube array texture alias, a texture using the same memory as another cube array texture but with a different format. + + + + +baseTexture + + +The base cube array texture to alias. + + + + +side + + +The side of the cube texture. + + + + +d + + +Amount of textures in the array. + + + + +flg + + +The texture creation flags. + + + + +levels + + +The maximum number of mipmap levels. + + + + +stat_name + + +The name of the texture for statistics purposes (optional). + + + +A pointer to the created cube array texture alias, or nullptr on error. + + + + + + + + + bool + bool d3d::stretch_rect + (BaseTexture *src, BaseTexture *dst, RectInt *rsrc=nullptr, RectInt *rdst=nullptr) + stretch_rect + + BaseTexture * + src + + + BaseTexture * + dst + + + RectInt * + rsrc + nullptr + + + RectInt * + rdst + nullptr + + +Stretch a rectangle from the source texture to the destination texture. + + +Under the hood it is a call of CopySubresourceRegion if source and destination textures are the same type and their texel could be mapped one to one. Otherwise it is an execution of a shader that does the stretching. + + +src + + +The source texture. + + + + +dst + + +The destination texture. + + + + +rsrc + + +The source rectangle (optional). + + + + +rdst + + +The destination rectangle (optional). + + + +Returns true if the stretch operation was successful, otherwise returns false. + + + + + + + + + void + void d3d::get_texture_statistics + (uint32_t *num_textures, uint64_t *total_mem, String *out_dump) + get_texture_statistics + + uint32_t * + num_textures + + + uint64_t * + total_mem + + + String * + out_dump + + +Get the texture statistics. + + + + +num_textures + + +Pointer to store the number of textures. + + + + +total_mem + + +Pointer to store the total memory used by textures. + + + + +out_dump + + +Pointer to store the texture statistics dump. + + + + + + + + + + + bool + bool d3d::set_tex + (unsigned shader_stage, unsigned slot, BaseTexture *tex, bool use_sampler=true) + set_tex + + unsigned + shader_stage + + + unsigned + slot + + + BaseTexture * + tex + + + bool + use_sampler + true + + +Set a texture for a shader stage and slot. + + + + +shader_stage + + +The shader stage. One of the STAGE_XXX flags. + + + + +slot + + +The slot. + + + + +tex + + +The texture to set. + + + + +use_sampler + + +Whether to use the sampler (default value is true). + + + +Returns true if the texture was successfully set, otherwise returns false. + + + + + + + + + bool + bool d3d::settex + (int slot, BaseTexture *tex) + settex + + int + slot + + + BaseTexture * + tex + + +Set a texture for a pixel shader slot. + + + + +slot + + +The slot. + + + + +tex + + +The texture to set. + + + +Returns true if the texture was successfully set, otherwise returns false. + + + + + + + + + bool + bool d3d::settex_vs + (int slot, BaseTexture *tex) + settex_vs + + int + slot + + + BaseTexture * + tex + + +Set a texture for a vertex shader slot. + + + + +slot + + +The slot. + + + + +tex + + +The texture to set. + + + +Returns true if the texture was successfully set, otherwise returns false. + + + + + + + + + bool + bool d3d::set_rwtex + (uint32_t shader_stage, uint32_t slot, BaseTexture *tex, uint32_t face, uint32_t mip_level, bool as_uint=false) + set_rwtex + + uint32_t + shader_stage + + + uint32_t + slot + + + BaseTexture * + tex + + + uint32_t + face + + + uint32_t + mip_level + + + bool + as_uint + false + + +Set the read/write (UAV) texture to slot. + + + + +shader_stage + + +shader stage (VS, PS, CS) + + + + +slot + + +slot index + + + + +tex + + +texture to set as UAV resoruce + + + + +face + + +face index for cubemaps, 3D textures and texture arrays + + + + +mip_level + + +mip level + + + + +as_uint + + +if true then texture will be viewed as uint in UAV. The texture type should be 32-bit format. https://msdn.microsoft.com/en-us/library/windows/desktop/ff728749(v=vs.85).aspx + + + +true if success, false otherwise + + + + + + + + + bool + bool d3d::clear_rwtexi + (BaseTexture *tex, const uint32_t val[4], uint32_t face, uint32_t mip_level) + clear_rwtexi + + BaseTexture * + tex + + + const uint32_t + val + [4] + + + uint32_t + face + + + uint32_t + mip_level + + +Clear UAV texture with integer values. + + + + +tex + + +texture to clear + + + + +val + + +clear value + + + + +face + + +face index for cubemaps, 3D textures and texture arrays + + + + +mip_level + + +mip level + + + +true if success, false otherwise + + + + + + + + + bool + bool d3d::clear_rwtexf + (BaseTexture *tex, const float val[4], uint32_t face, uint32_t mip_level) + clear_rwtexf + + BaseTexture * + tex + + + const float + val + [4] + + + uint32_t + face + + + uint32_t + mip_level + + +Clear UAV texture with float values. + + + + +tex + + +texture to clear + + + + +val + + +clear value + + + + +face + + +face index for cubemaps, 3D textures and texture arrays + + + + +mip_level + + +mip level + + + +true if success, false otherwise + + + + + + + + + bool + bool d3d::clear_rwbufi + (Sbuffer *buf, const uint32_t val[4]) + clear_rwbufi + + Sbuffer * + buf + + + const uint32_t + val + [4] + + +Clear UAV buffer with integer values. + + +4 components are required by DirectX API, so the buffer will be cleared with the same 4 dwords pattern. + + +buf + + +buffer to clear + + + + +val + + +clear value + + + +true if success, false otherwise + + + + + + + + + bool + bool d3d::clear_rwbuff + (Sbuffer *buf, const float val[4]) + clear_rwbuff + + Sbuffer * + buf + + + const float + val + [4] + + +Clear UAV buffer with float values. + + +4 components are required by DirectX API, so the buffer will be cleared with the same 4 dwords pattern. + + +buf + + +buffer to clear + + + + +val + + +clear value + + + +true if success, false otherwise + + + + + + + + + VDECL + VDECL d3d::get_program_vdecl + (PROGRAM) + get_program_vdecl + + PROGRAM + + + + + + + + + + + bool + bool d3d::set_vertex_shader + (VPROG ps) + set_vertex_shader + + VPROG + ps + + + + + + + + + + + bool + bool d3d::set_pixel_shader + (FSHADER ps) + set_pixel_shader + + FSHADER + ps + + + + + + + + + + + VPROG + VPROG d3d::create_vertex_shader_asm + (const char *asm_text) + create_vertex_shader_asm + + const char * + asm_text + + + + + + + + + + + VPROG + VPROG d3d::create_vertex_shader_dagor + (const VPRTYPE *p, int n) + create_vertex_shader_dagor + + const VPRTYPE * + p + + + int + n + + + + + + + + + + + FSHADER + FSHADER d3d::create_pixel_shader_asm + (const char *asm_text) + create_pixel_shader_asm + + const char * + asm_text + + + + + + + + + + + FSHADER + FSHADER d3d::create_pixel_shader_dagor + (const FSHTYPE *p, int n) + create_pixel_shader_dagor + + const FSHTYPE * + p + + + int + n + + + + + + + + + + + void + void d3d::get_video_modes_list + (Tab< String > &list) + get_video_modes_list + + Tab< String > & + list + + +retrieve list of available display modes + + + + + + + + + RenderPass * + RenderPass* d3d::create_render_pass + (const RenderPassDesc &rp_desc) + create_render_pass + + const RenderPassDesc & + rp_desc + + +Creates render pass object. + + +Render pass objects are intended to be created once (and ahead of time), used many times No external sync required + +Do not run per frame/realtime! + +Avoid using at time sensitive places! + +Will assert-fail if rp_desc.bindCount is 0 + + + +rp_desc + + +Description of render pass to be created + + + +Pointer to opaque RenderPass object, may be nullptr if description is invalid + + + + + + + + + void + void d3d::delete_render_pass + (RenderPass *rp) + delete_render_pass + + RenderPass * + rp + + +Deletes render pass object. + + +Sync with usage is required (must not delete object that is in use in current CPU frame) + +All usage to object becomes invalid right after method call + + + +rp + + +Object to be deleted + + + + + + + + + + + void + void d3d::begin_render_pass + (RenderPass *rp, const RenderPassArea area, const RenderPassTarget *targets) + begin_render_pass + + RenderPass * + rp + + + const RenderPassArea + area + + + const RenderPassTarget * + targets + + +Begins render pass rendering. + + +After this command, viewport is reset to area supplied and subpass 0, described in render pass object, is started Must be external synced (GPU lock required) + +When inside pass, all other GPU execution methods aside of Draw* are prohibited! + +Avoid writes/reads outside area, it is UB in general + +Will assert-fail if other render pass is already in process + +Backbuffer can't be used as target + + + +rp + + +Render pass resource to begin with + + + + +area + + +Rendering area restriction + + + + +targets + + +Array of targets that will be used in rendering + + + + + + + + + + + void + void d3d::next_subpass + () + next_subpass + +Advances to next subpass. + + +Increases subpass number and executes necessary synchronization as well as binding, described for this subpass +Viewport is reset to render area on every call Must be external synced (GPU lock required) + +Will assert-fail if there is no subpass to advance to + +Will assert-fail if called outside of render pass + + + + + + + + + void + void d3d::end_render_pass + () + end_render_pass + +Ends render pass. + + +Processes store&sync operations described in render pass +After this call, any non Draw operations are allowed and render targets are reset to backbuffer Must be external synced (GPU lock required) + +Will assert-fail if subpass is not final + +Will assert-fail if called outside of render pass + + + + + + + + + void + void d3d::allow_render_pass_target_load + () + allow_render_pass_target_load + + + +When renderpass splits validation is enabled in Vulkan this command tells that we actually want to load previous contents of attached color targets or depth to render on top of it. Otherwise loading previous contents treated as renderpass split and the validation fails (we want to avoid RP splits cause of performance impact on TBDR). If it's known that the render target will be just fully redrawn (like in most postfx), it's better to use d3d::clearview(CLEAR_DISCARD, ...) instead of this command. + + + + + + + PROGRAM + PROGRAM d3d::create_program + (VPROG vprog, FSHADER fsh, VDECL vdecl, unsigned *strides=nullptr, unsigned streams=0) + create_program + + VPROG + vprog + + + FSHADER + fsh + + + VDECL + vdecl + + + unsigned * + strides + nullptr + + + unsigned + streams + 0 + + +Creates a program with a vertex shader, fragment shader, and vertex declaration. + + + + +vprog + + +The vertex shader program. + + + + +fsh + + +The fragment shader program. + + + + +vdecl + + +The vertex declaration. + + + + +strides + + +The stride values for each vertex stream (optional, default is 0). + + + + +streams + + +The number of vertex streams (optional, default is 0). + + + +The created program. + +If strides and streams are not set, they will be obtained from the vertex declaration. The program should be deleted externally using delete_program(). + + + + + + + PROGRAM + PROGRAM d3d::create_program + (const uint32_t *vpr_native, const uint32_t *fsh_native, VDECL vdecl, unsigned *strides=nullptr, unsigned streams=0) + create_program + + const uint32_t * + vpr_native + + + const uint32_t * + fsh_native + + + VDECL + vdecl + + + unsigned * + strides + nullptr + + + unsigned + streams + 0 + + +Creates a program with native vertex shader and fragment shader code. + + + + +vpr_native + + +The native code for the vertex shader. + + + + +fsh_native + + +The native code for the fragment shader. + + + + +vdecl + + +The vertex declaration. + + + + +strides + + +The stride values for each vertex stream (optional, default is 0). + + + + +streams + + +The number of vertex streams (optional, default is 0). + + + +The created program. + +If strides and streams are not set, they will be obtained from the vertex declaration. + + + + + + + PROGRAM + PROGRAM d3d::create_program_cs + (const uint32_t *cs_native, CSPreloaded preloaded) + create_program_cs + + const uint32_t * + cs_native + + + CSPreloaded + preloaded + + +Creates a compute shader program with native code. + + + + +cs_native + + +The native code for the compute shader. + + + + +preloaded + + +The preloaded data for the compute shader. + + + +The created program. + + + + + + + + + bool + bool d3d::set_program + (PROGRAM program) + set_program + + PROGRAM + program + + +Sets the program as the current program, including the pixel shader, vertex shader, and vertex declaration. + + + + +program + + +The program to set. + + + +True if the program was set successfully, false otherwise. + + + + + + + + + void + void d3d::delete_program + (PROGRAM program) + delete_program + + PROGRAM + program + + +Deletes a program, including the vertex shader and fragment shader. + + + + +program + + +The program to delete. + + + +The vertex declaration should be deleted independently. + + + + + + + + + VPROG + VPROG d3d::create_vertex_shader + (const uint32_t *native_code) + create_vertex_shader + + const uint32_t * + native_code + + +Creates a vertex shader with native code. + + + + +native_code + + +The native code for the vertex shader. + + + +The created vertex shader. + + + + + + + + + void + void d3d::delete_vertex_shader + (VPROG vs) + delete_vertex_shader + + VPROG + vs + + +Deletes a vertex shader. + + + + +vs + + +The vertex shader to delete. + + + + + + + + + + + FSHADER + FSHADER d3d::create_pixel_shader + (const uint32_t *native_code) + create_pixel_shader + + const uint32_t * + native_code + + +Creates a pixel shader with native code. + + + + +native_code + + +The native code for the pixel shader. + + + +The created pixel shader. + + + + + + + + + void + void d3d::delete_pixel_shader + (FSHADER ps) + delete_pixel_shader + + FSHADER + ps + + +Deletes a pixel shader. + + + + +ps + + +The pixel shader to delete. + + + + + + + + + + + PROGRAM + PROGRAM d3d::get_debug_program + () + get_debug_program + +Gets the debug program. + + +This program's bytecode is written in the source code of the driver, so the program is always available (if a driver supports this API). The debug program is used to draw debug stuff (vertex colored primitives). +The debug program. + + + + + + + + + bool + bool d3d::set_blend_factor + (E3DCOLOR color) + set_blend_factor + + E3DCOLOR + color + + +Set the blend factor object. + + + + +color + + +blend factor to set + + + +true if successful, false otherwise + + + + + + + + + bool + bool d3d::setstencil + (uint32_t ref) + setstencil + + uint32_t + ref + + +Set the stencil reference value. + + + + +ref + + +reference value to set + + + +true if successful, false otherwise + + + + + + + + + bool + bool d3d::setwire + (bool in) + setwire + + bool + in + + +Set the wireframe mode. Works only in dev build. + + + + +in + + +true to enable wireframe mode, false to disable + + + +true if successful, false otherwise + + + + + + + + + bool + bool d3d::set_depth_bounds + (float zmin, float zmax) + set_depth_bounds + + float + zmin + + + float + zmax + + +Set the depth bounds. + + + + +zmin + + +minimum depth value + + + + +zmax + + +maximum depth value + + + +true if successful, false otherwise + + + + + + + + + shaders::DriverRenderStateId + shaders::DriverRenderStateId d3d::create_render_state + (const shaders::RenderState &state) + create_render_state + + const shaders::RenderState & + state + + +Create a render state object in driver. + + + + +state + + +parameters of the render state object to create + + + +shaders::DriverRenderStateId id of the created render state object + + + + + + + + + bool + bool d3d::set_render_state + (shaders::DriverRenderStateId state_id) + set_render_state + + shaders::DriverRenderStateId + state_id + + +Set the render state object in driver. + + + + +state_id + + +id of the render state object to set + + + +true if successful, false otherwise + + + + + + + + + void + void d3d::clear_render_states + () + clear_render_states + +Remove all render state objects allocated in driver. + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1buffers.xml b/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1buffers.xml new file mode 100644 index 000000000..5d8b67ea4 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1buffers.xml @@ -0,0 +1,1198 @@ + + + + d3d::buffers + + + uint32_t + Init + + No + +We don't know anything about buffer content on creation. + + + + + + Zero + +A resource guaranteed to be zeroed on the first usage. + + + + + +Enumeration for buffer initialization options. Not all buffer types currently support it. + + + + + + + + + uint32_t + Indirect + + Dispatch + + + + + + + Draw + + + + + + + DrawIndexed + + + + + + +The Indirect enum represents different GPU indirect buffer types. + + + + + + + + + + + constexpr uint32_t + constexpr uint32_t d3d::buffers::CBUFFER_REGISTER_SIZE + + CBUFFER_REGISTER_SIZE + = 16 + +The size of the cbuffer register. It should have a size divisible by sizeof(float4), because the cbuffer is a set of float4 registers. + + + + + + + + + constexpr uint32_t + constexpr uint32_t d3d::buffers::BYTE_ADDRESS_ELEMENT_SIZE + + BYTE_ADDRESS_ELEMENT_SIZE + = sizeof(uint32_t) + +The size of an element of a byte address buffer. + + + + + + + + + + + + + typename T + + + uint32_t + uint32_t d3d::buffers::cb_array_reg_count + (uint32_t array_size) + cb_array_reg_count + + uint32_t + array_size + + +Calculate the number of register (in const buffer term) count for a given array size of type T. Structure must be aligned as float4 to not have problems with alignment in cbuffer. + + + + +T + + +The type of the array elements. + + + + + +array_size + + +The size of the array. + + + +The registers count. + + + + + + + + + + + typename T + + + uint32_t + uint32_t d3d::buffers::cb_struct_reg_count + () + cb_struct_reg_count + +Calculate the number of register (in const buffer term) count for a single instance of a type T. Structure must be aligned as float4 to not have problems with alignment in cbuffer. + + + + +T + + +The type of the structure. + + + +The registers count. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_persistent_cb + (uint32_t registers_count, const char *name) + create_persistent_cb + + uint32_t + registers_count + + + const char * + name + + +Create a persistent constant buffer. + + +Such buffers could be updated from time to time. It is recommended to use cb_array_reg_count and cb_struct_reg_count methods to calculate registers_count. +This buffer will not be restored after device reset! + + + +registers_count + + +The number of registers in the buffer. Must be not bigger than 4096. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + +Created persistent constant buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_one_frame_cb + (uint32_t registers_count, const char *name) + create_one_frame_cb + + uint32_t + registers_count + + + const char * + name + + +Create an one frame constant buffer. + + +Such buffers must be updated every frame (you can skip update if the buffer is not used this frame). Because of that we don't care about its content on device reset. It is recommended to use cb_array_reg_count and cb_struct_reg_count methods to calculate registers_count. + + +registers_count + + +The number of registers. Must be not bigger than 4096. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + + +buffer_init + + +The initialization option for the buffer. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_ua_sr_byte_address + (uint32_t size_in_dwords, const char *name, Init buffer_init=Init::No) + create_ua_sr_byte_address + + uint32_t + size_in_dwords + + + const char * + name + + + Init + buffer_init + Init::No + + +Create a byte address buffer, which can be used thorugh an unordered access view or through a shader resource view in shaders. In a shader you can declare the buffer using (RW)ByteAddressBuffer. Such a buffer is always 16-byte aligned. + + +TodoUse registers instead of dwords for size because of alignment. + + +size_in_dwords + + +The size of the buffer in dwords. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + + +buffer_init + + +The initialization option for the buffer. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_ua_sr_structured + (uint32_t structure_size, uint32_t elements_count, const char *name, Init buffer_init=Init::No) + create_ua_sr_structured + + uint32_t + structure_size + + + uint32_t + elements_count + + + const char * + name + + + Init + buffer_init + Init::No + + +Create a structured buffer, which can be used thorugh an unordered access view or through a shader resource view in shaders. In a shader you can declare the buffer using (RW)StructuredBuffer<StructureType>. StructureType is a kind of template parameter here. + + + + +structure_size + + +The size of the structure of the buffer elements. Usually it is a sizeof(StructureType). + + + + +elements_count + + +The number of elements in the buffer. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + + +buffer_init + + +The initialization option for the buffer. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_ua_byte_address + (uint32_t size_in_dwords, const char *name) + create_ua_byte_address + + uint32_t + size_in_dwords + + + const char * + name + + +Create a byte address buffer, which can be used thorugh an unordered access view in shaders. In a shader you can declare the buffer using RWByteAddressBuffer. Such a buffer is always 16-byte aligned. + + +TodoUse registers instead of dwords for size because of alignment. + + +size_in_dwords + + +The size of the buffer in dwords. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_ua_structured + (uint32_t structure_size, uint32_t elements_count, const char *name) + create_ua_structured + + uint32_t + structure_size + + + uint32_t + elements_count + + + const char * + name + + +Create a structured buffer, which can be used thorugh an unordered access view in shaders. In a shader you can declare the buffer using RWStructuredBuffer<StructureType>. StructureType is a kind of template parameter here. + + + + +structure_size + + +The size of the structure of the buffer elements. Usually it is a sizeof(StructureType). + + + + +elements_count + + +The number of elements in the buffer. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_ua_byte_address_readback + (uint32_t size_in_dwords, const char *name, Init buffer_init=Init::No) + create_ua_byte_address_readback + + uint32_t + size_in_dwords + + + const char * + name + + + Init + buffer_init + Init::No + + +The same as create_ua_byte_address but its content can be read on CPU. Such a buffer is always 16-byte aligned. + + +TodoUse registers instead of dwords for size because of alignment. + + +size_in_dwords + + +The size of the buffer in dwords. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + + +buffer_init + + +The initialization option for the buffer. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_ua_structured_readback + (uint32_t structure_size, uint32_t elements_count, const char *name, Init buffer_init=Init::No) + create_ua_structured_readback + + uint32_t + structure_size + + + uint32_t + elements_count + + + const char * + name + + + Init + buffer_init + Init::No + + +The same as create_ua_structured but its content can be read on CPU. + + + + +structure_size + + +The size of the structure of the buffer elements. Usually it is a sizeof(StructureType). + + + + +elements_count + + +The number of elements in the buffer. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + + +buffer_init + + +The initialization option for the buffer. + + + +A pointer to the created buffer. + + + + + + + + + uint32_t + uint32_t d3d::buffers::dword_count_per_call + (Indirect indirect_type) + dword_count_per_call + + Indirect + indirect_type + + +Returns the amount of dwords per indirect command parameters based on the given indirect buffer type. + + + + +indirect_type + + +The type of indirect operation (Dispatch, Draw, or DrawIndexed). + + + +The amount of dwords per indirect command parameters. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_ua_indirect + (Indirect indirect_type, uint32_t records_count, const char *name) + create_ua_indirect + + Indirect + indirect_type + + + uint32_t + records_count + + + const char * + name + + +Creates an indirect buffer filled by the GPU. + + + + +indirect_type + + +The type of the indirect commands stored in the buffer. + + + + +records_count + + +The number of indirect records in the buffer. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_indirect + (Indirect indirect_type, uint32_t records_count, const char *name) + create_indirect + + Indirect + indirect_type + + + uint32_t + records_count + + + const char * + name + + +Creates an indirect buffer filled by the CPU. + + + + +indirect_type + + +The type of the indirect commands stored in the buffer. + + + + +records_count + + +The number of indirect records in the buffer. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_staging + (uint32_t size_in_bytes, const char *name) + create_staging + + uint32_t + size_in_bytes + + + const char * + name + + +Creates a buffer for data transfer from CPU to GPU. + + + + +size_in_bytes + + +The size of the buffer in bytes. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_persistent_sr_tbuf + (uint32_t elements_count, uint32_t format, const char *name, Init buffer_init=Init::No) + create_persistent_sr_tbuf + + uint32_t + elements_count + + + uint32_t + format + + + const char * + name + + + Init + buffer_init + Init::No + + +Create a t-buffer, which can be used through a shader resource view in shaders. In a shader you can declare the buffer using Buffer<BufferFormat>. BufferFormat is a kind of template parameter here. + + +The buffer type can be used only for the code which will be used for DX10 compatible hardware. + +The total size of the buffer is sizeof(format) * elements_count. +It is a persistent buffer, so you can update it with VBLOCK_WRITEONLY flag. Locked part of the buffer content will be overwritten. + + +elements_count + + +The number of elements in the buffer. + + + + +format + + +The format of each element in the buffer. It must be a valid texture format. Not all texture formats are allowed. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + + +buffer_init + + +The initialization option for the buffer. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_persistent_sr_byte_address + (uint32_t size_in_dwords, const char *name, Init buffer_init=Init::No) + create_persistent_sr_byte_address + + uint32_t + size_in_dwords + + + const char * + name + + + Init + buffer_init + Init::No + + +Create a byte address buffer, which can be used through a shader resource view in shaders. In a shader you can declare the buffer using ByteAddressBuffer. + + +It is a persistent buffer, so you can update it with VBLOCK_WRITEONLY flag. Locked part of the buffer content will be overwritten. + + +size_in_dwords + + +The size of the buffer in dwords. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + + +buffer_init + + +The initialization option for the buffer. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_persistent_sr_structured + (uint32_t structure_size, uint32_t elements_count, const char *name, Init buffer_init=Init::No) + create_persistent_sr_structured + + uint32_t + structure_size + + + uint32_t + elements_count + + + const char * + name + + + Init + buffer_init + Init::No + + +Create a structured buffer, which can be used through a shader resource view in shaders. In a shader you can declare the buffer using StructuredBuffer<StructureType>. StructureType is a kind of template parameter here. + + +It is a persistent buffer, so you can update it with VBLOCK_WRITEONLY flag. Locked part of the buffer content will be overwritten. +Declare StructureType in *.hlsli file and include it both in C++ and shader code. + + +structure_size + + +The size of the structure of the buffer elements. Usually it is a sizeof(StructureType). + + + + +elements_count + + +The number of elements in the buffer. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + + +buffer_init + + +The initialization option for the buffer. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_one_frame_sr_tbuf + (uint32_t elements_count, uint32_t format, const char *name) + create_one_frame_sr_tbuf + + uint32_t + elements_count + + + uint32_t + format + + + const char * + name + + +Create a t-buffer, which can be used through a shader resource view in shaders. In a shader you can declare the buffer using Buffer<BufferFormat>. BufferFormat is a kind of template parameter here. + + +The buffer type can be used only for the code which will be used for DX10 compatible hardware. + +The total size of the buffer is sizeof(format) * elements_count. To use the buffer, lock it with VBLOCK_DISCARD flag (and with VBLOCK_NOOVERWRITE during the frame) and fill it on CPU. On the next frame data in the buffer could be invalid, so don't read from it until you fill it with lock again. + + +elements_count + + +The number of elements in the buffer. + + + + +format + + +The format of each element in the buffer. It must be a valid texture format. Not all texture formats are allowed. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_one_frame_sr_byte_address + (uint32_t size_in_dwords, const char *name) + create_one_frame_sr_byte_address + + uint32_t + size_in_dwords + + + const char * + name + + +Create a byte address buffer, which can be used through a shader resource view in shaders. In a shader you can declare the buffer using ByteAddressBuffer. + + +To use the buffer, lock it with VBLOCK_DISCARD flag (and with VBLOCK_NOOVERWRITE during the frame) and fill it on CPU. On the next frame data in the buffer could be invalid, so don't read from it until you fill it with lock again. + + +size_in_dwords + + +The size of the buffer in dwords. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_one_frame_sr_structured + (uint32_t structure_size, uint32_t elements_count, const char *name) + create_one_frame_sr_structured + + uint32_t + structure_size + + + uint32_t + elements_count + + + const char * + name + + +Create a structured buffer, which can be used through a shader resource view in shaders. In a shader you can declare the buffer using StructuredBuffer<StructureType>. StructureType is a kind of template parameter here. + + +To use the buffer, lock it with VBLOCK_DISCARD flag (and with VBLOCK_NOOVERWRITE during the frame) and fill it on CPU. On the next frame data in the buffer could be invalid, so don't read from it until you fill it with lock again. +Declare StructureType in *.hlsli file and include it both in C++ and shader code. + + +structure_size + + +The size of the structure of the buffer elements. Usually it is a sizeof(StructureType). + + + + +elements_count + + +The number of elements in the buffer. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + +A pointer to the created buffer. + + + + + + + + + Sbuffer * + Sbuffer* d3d::buffers::create_raytrace_scratch_buffer + (uint32_t size_in_bytes, const char *name) + create_raytrace_scratch_buffer + + uint32_t + size_in_bytes + + + const char * + name + + +Creates a buffer to be used as scratch space for bottom acceleration structure builds and updates. This buffer is used as input for ::raytrace::BottomAccelerationStructureBuildInfo::scratchSpaceBuffer which is used by d3d::build_bottom_acceleration_structure. + + +This buffer is not meant to be accessed in any other way than to be used as a this scratch buffer, as it is used as temporary storage for the on GPU build and update process of bottom acceleration structure and its contents is highly device and device driver specific and can't be used for anything else anyway. +Sizes needed are provided by the d3d::create_raytrace_bottom_acceleration_structure function. + + +size_in_bytes + + +The size in bytes of the scratch buffer. + + + + +name + + +The name of the buffer, used for debugging purposes, like showing in in statistcs, and frame debuggers like PIX. + + + +A pointer to the created buffer. Returns nullptr on failure. Possible failures are device lost state or out of memory. + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1drivercode.xml b/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1drivercode.xml new file mode 100644 index 000000000..e4d28cd26 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1drivercode.xml @@ -0,0 +1,12 @@ + + + + d3d::drivercode + d3d::drivercode::matcher + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1drivercode_1_1matcher.xml b/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1drivercode_1_1matcher.xml new file mode 100644 index 000000000..78c0dd9f4 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1drivercode_1_1matcher.xml @@ -0,0 +1,652 @@ + + + + d3d::drivercode::matcher + d3d::drivercode::matcher::EnableIf + d3d::drivercode::matcher::EnableIf< true, T > + d3d::drivercode::matcher::SameAs + d3d::drivercode::matcher::SameAs< T, T > + d3d::drivercode::matcher::BinaryOp + d3d::drivercode::matcher::OpAnd + d3d::drivercode::matcher::OpOr + d3d::drivercode::matcher::Inverted + d3d::drivercode::matcher::ID + d3d::drivercode::matcher::Const + d3d::drivercode::matcher::ConstID + d3d::drivercode::matcher::Any + d3d::drivercode::matcher::Unsupported + d3d::drivercode::matcher::Map + d3d::drivercode::matcher::FirstMatch + d3d::drivercode::matcher::AllMatch + d3d::drivercode::matcher::Undefined + + + decltype(!(d3d::dx11||d3d::dx12||d3d::vulkan||d3d::ps4||d3d::ps5||d3d::metal||d3d::null||d3d::stub)) + using d3d::drivercode::matcher::NotAnyDriver = typedef decltype(!(d3d::dx11 || d3d::dx12 || d3d::vulkan || d3d::ps4 || d3d::ps5 || d3d::metal || d3d::null || d3d::stub)) + + NotAnyDriver + +Helper type for doxygen, do not use! + + + + + + + + + + + constexpr int + constexpr int d3d::drivercode::matcher::make_foucc + (int value) + make_foucc + + int + value + + + + +Helper to generate the IDs correctly so they can be used as four character codes. This helper is needed as _MAKE4C macro may not be available here. + +value + + +4 character code as integer. \retruns Platform specific encoded 4 character code as integer. + + + + + + + + + + + + + typename T + + + typename T1 + + + constexpr auto + constexpr auto d3d::drivercode::matcher::operator&& + (const Inverted< T > &l, const T1 &r) + operator&& + + const Inverted< T > & + l + + + const T1 & + r + + + + +Logical and operator, allows combining multiple matchers. + +l + + +First matcher to be combined. + + + + +r + + +Second matcher to be combined. + + + +A new BinaryOp type of this type and T1 with an operator OpAnd. + + + + + + + + + + + typename T + + + typename T1 + + + constexpr auto + constexpr auto d3d::drivercode::matcher::operator|| + (const Inverted< T > &l, const T1 &r) + operator|| + + const Inverted< T > & + l + + + const T1 & + r + + + + +Logical or operator, allows combining multiple matchers. + +l + + +First matcher to be combined. + + + + +r + + +Second matcher to be combined. + + + +A new BinaryOp type of this type and T1 with an operator OpOr. + + + + + + + + + + + typename T0 + + + typename T1 + + + typename Operator + + + typename TO + + + constexpr auto + constexpr auto d3d::drivercode::matcher::operator&& + (const BinaryOp< T0, T1, Operator > &l, const TO &r) + operator&& + + const BinaryOp< T0, T1, Operator > & + l + + + const TO & + r + + + + +Logical and operator, allows combining multiple matchers. + +l + + +First matcher to be combined. + + + + +r + + +Second matcher to be combined. + + + +A new BinaryOp type of this type and T1 with an operator OpAnd. + + + + + + + + + + + typename T0 + + + typename T1 + + + typename Operator + + + typename TO + + + constexpr auto + constexpr auto d3d::drivercode::matcher::operator|| + (const BinaryOp< T0, T1, Operator > &l, const TO &r) + operator|| + + const BinaryOp< T0, T1, Operator > & + l + + + const TO & + r + + + + +Logical or operator, allows combining multiple matchers. + +l + + +First matcher to be combined. + + + + +r + + +Second matcher to be combined. + + + +A new BinaryOp type of this type and T1 with an operator OpOr. + + + + + + + + + + + int + Ident + Ident + + + typename T1 + + + constexpr auto + constexpr auto d3d::drivercode::matcher::operator&& + (const ID< Ident > &l, const T1 &r) + operator&& + + const ID< Ident > & + l + + + const T1 & + r + + + + +Logical and operator, allows combining multiple matchers. + +T1 + + +is the type of the second operand. + + + +A new BinaryOp type of this type and T1 with an operator OpAnd. + + + + + + + + + + + int + Ident + Ident + + + typename T1 + + + constexpr auto + constexpr auto d3d::drivercode::matcher::operator|| + (const ID< Ident > &l, const T1 &r) + operator|| + + const ID< Ident > & + l + + + const T1 & + r + + + + +Logical or operator, allows combining multiple matchers. + +T1 + + +is the type of the second operand. + + + +A new BinaryOp type of this type and T1 with an operator OpOr. + + + + + + + + + + + typename T1 + + + constexpr const T1 & + constexpr const T1& d3d::drivercode::matcher::operator&& + (const Const< true > &l, const T1 &r) + operator&& + + const Const< true > & + l + + + const T1 & + r + + + + +Logical and operator, allows combining multiple matchers. + +l + + +First matcher to be combined. + + + + +r + + +Second matcher to be combined. + + + +The matercher of r, as logical and with constant true can be short circuited to just evaluating the second parameter. + + + + + + + + + + + typename T1 + + + constexpr const Const< true > & + constexpr const Const<true>& d3d::drivercode::matcher::operator|| + (const Const< true > &l, const T1 &r) + operator|| + + const Const< true > & + l + + + const T1 & + r + + + + +Logical or operator, allows combining multiple matchers. + +l + + +First matcher to be combined. + + + + +r + + +Second matcher to be combined. + + + +A true matcher, as logical or with a constant true can be short circuited to just the constant true. + + + + + + + + + + + typename T1 + + + constexpr const Const< false > & + constexpr const Const<false>& d3d::drivercode::matcher::operator&& + (const Const< false > &l, const T1 &r) + operator&& + + const Const< false > & + l + + + const T1 & + r + + + + +Logical and operator, allows combining multiple matchers. + +l + + +First matcher to be combined. + + + + +r + + +Second matcher to be combined. + + + +A constant false matcher, as logical and with a constant false can be short circuited to just the constant false. + + + + + + + + + + + typename T1 + + + constexpr const T1 & + constexpr const T1& d3d::drivercode::matcher::operator|| + (const Const< false > &l, const T1 &r) + operator|| + + const Const< false > & + l + + + const T1 & + r + + + + +Logical or operator, allows combining multiple matchers. + +l + + +First matcher to be combined. + + + + +r + + +Second matcher to be combined. + + + +The matercher of r, as logical or with constant false can be short circuited to just evaluating the second parameter. + + + + + + + + + + + typename T1 + + + constexpr const T1 & + constexpr const T1& d3d::drivercode::matcher::operator&& + (Any, T1)=delete + operator&& + + Any + + + T1 + + +Disallow operations with any, any should only be used on its own. + + + + + + + + + + + typename T1 + + + constexpr Any + constexpr Any d3d::drivercode::matcher::operator|| + (Any, T1)=delete + operator|| + + Any + + + T1 + + +Disallow operations with any, any should only be used on its own. + + + + + + + + + + + typename T1 + + + constexpr const T1 & + constexpr const T1& d3d::drivercode::matcher::operator&& + (T1, Any)=delete + operator&& + + T1 + + + Any + + +Disallow operations with any, any should only be used on its own. + + + + + + + + + + + typename T1 + + + constexpr Any + constexpr Any d3d::drivercode::matcher::operator|| + (T1, Any)=delete + operator|| + + T1 + + + Any + + +Disallow operations with any, any should only be used on its own. + + + + + + + + + + + +This namespace holds the matcher types and operations. + + + + diff --git a/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1ps.xml b/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1ps.xml new file mode 100644 index 000000000..011212e7e --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1ps.xml @@ -0,0 +1,207 @@ + + + + d3d::ps + + + Texture * + Texture* d3d::ps::create_raw_tex + () + create_raw_tex + + + + + + + + + + void + void d3d::ps::update_raw_tex + (Texture *tex, void *gnm_texture, void *gnm_sampler=NULL) + update_raw_tex + + Texture * + tex + + + void * + gnm_texture + + + void * + gnm_sampler + NULL + + + + + + + + + + + void * + void* d3d::ps::alloc_mem_block + (bool onion, uint32_t size, uint32_t alignment) + alloc_mem_block + + bool + onion + + + uint32_t + size + + + uint32_t + alignment + + + + + + + + + + + void + void d3d::ps::free_mem_block + (void *addr) + free_mem_block + + void * + addr + + + + + + + + + + + bool + bool d3d::ps::record_frame + (int control) + record_frame + + int + control + + +record frame to /hostapp/captured (only for specially compiled driver) + + + + + + + + + void + void d3d::ps::debug_point + (int id=0) + debug_point + + int + id + 0 + + + + + + + + + + + void + void d3d::ps::set_verbose_mode + (bool ena) + set_verbose_mode + + bool + ena + + + + + + + + + + + void + void d3d::ps::submit_and_stall + (bool locked_state) + submit_and_stall + + bool + locked_state + + + + + + + + + + + void + void d3d::ps::submit_background + () + submit_background + + + + + + + + + + void + void d3d::ps::freeze_frame + () + freeze_frame + + + + + + + + + + void * + void* d3d::ps::get_raw_texture_descriptor + (Texture *tex) + get_raw_texture_descriptor + + Texture * + tex + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1shadermodel.xml b/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1shadermodel.xml new file mode 100644 index 000000000..5d756ef91 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1shadermodel.xml @@ -0,0 +1,1421 @@ + + + + d3d::shadermodel + d3d::shadermodel::AnyVersion + d3d::shadermodel::Version + d3d::shadermodel::VersionWithName + d3d::shadermodel::VersionConstant + d3d::shadermodel::VersionList + d3d::shadermodel::VersionRangeIterator + d3d::shadermodel::VersionRange + d3d::shadermodel::VersionRange< VersionList< Versions... > > + d3d::shadermodel::matcher + + + VersionList< decltype(sm40), decltype(sm41), decltype(sm50), decltype(sm60), decltype(sm66)> + using d3d::shadermodel::AllVersionsList = typedef VersionList<decltype(sm40), decltype(sm41), decltype(sm50), decltype(sm60), decltype(sm66)> + + AllVersionsList + + + +This type list consists of all supported shader model versions. Listing has to be from earliest to latest, otherwise dependent algorithms may not work properly. + + + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator== + (const Version &l, const Version &r) + operator== + + const Version & + l + + + const Version & + r + + + + +Compares two version numbers and returns true when the first one equal to the second one. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l equal to r. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator!= + (const Version &l, const Version &r) + operator!= + + const Version & + l + + + const Version & + r + + + + +Compares two version numbers and returns true when the first one not equal to the second one. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l not equal to r. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator< + (const Version &l, const Version &r) + operator< + + const Version & + l + + + const Version & + r + + + + +Compares two version numbers and returns true when the first less than the second one. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l less than r. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator> + (const Version &l, const Version &r) + operator> + + const Version & + l + + + const Version & + r + + + + +Compares two version numbers and returns true when the first one greater the second one. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l greater than r. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator<= + (const Version &l, const Version &r) + operator<= + + const Version & + l + + + const Version & + r + + + + +Compares two version numbers and returns true when the first one less or equal to the second one. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l less or equal to r. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator>= + (const Version &l, const Version &r) + operator>= + + const Version & + l + + + const Version & + r + + + + +Compares two version numbers and returns true when the first greater or equal the second one. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l greater or equal to r. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator== + (const AnyVersion &l, const Version &r) + operator== + + const AnyVersion & + l + + + const Version & + r + + + + +Compares a version to any version. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator== + (const Version &l, const AnyVersion &r) + operator== + + const Version & + l + + + const AnyVersion & + r + + + + +Compares a version to any version. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +true. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator!= + (const AnyVersion &l, const Version &r) + operator!= + + const AnyVersion & + l + + + const Version & + r + + + + +Compares a version to any version. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +False. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator!= + (const Version &l, const AnyVersion &r) + operator!= + + const Version & + l + + + const AnyVersion & + r + + + + +Compares a version to any version. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +False. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator> + (const AnyVersion &l, const Version &r) + operator> + + const AnyVersion & + l + + + const Version & + r + + + + +Compares a version to any version. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator> + (const Version &l, const AnyVersion &r) + operator> + + const Version & + l + + + const AnyVersion & + r + + + + +Compares a version to any version. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +False. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator< + (const AnyVersion &l, const Version &r) + operator< + + const AnyVersion & + l + + + const Version & + r + + + + +Compares a version to any version. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +False. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator< + (const Version &l, const AnyVersion &r) + operator< + + const Version & + l + + + const AnyVersion & + r + + + + +Compares a version to any version. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator>= + (const AnyVersion &l, const Version &r) + operator>= + + const AnyVersion & + l + + + const Version & + r + + + + +Compares a version to any version. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l is larger or equal to r. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator>= + (const Version &l, const AnyVersion &r) + operator>= + + const Version & + l + + + const AnyVersion & + r + + + + +Compares a version to any version. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l is larger or equal to r. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator<= + (const AnyVersion &l, const Version &r) + operator<= + + const AnyVersion & + l + + + const Version & + r + + + + +Compares a version to any version. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l is less or equal to r. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::operator<= + (const Version &l, const AnyVersion &r) + operator<= + + const Version & + l + + + const AnyVersion & + r + + + + +Compares a version to any version. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l is less or equal to r. + + + + + + + + + + + unsigned int + mj1 + mj1 + + + unsigned int + mi1 + mi1 + + + unsigned int + mj2 + mj2 + + + unsigned int + mi2 + mi2 + + + constexpr bool + constexpr bool d3d::shadermodel::operator== + (const VersionConstant< mj1, mi1 > &l, const VersionConstant< mj2, mi2 > &r) + operator== + + const VersionConstant< mj1, mi1 > & + l + + + const VersionConstant< mj2, mi2 > & + r + + + + +Compares two constant version numbers and returns true when the first one equal to the second one. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l equal to r. + + + + + + + + + + + unsigned int + mj1 + mj1 + + + unsigned int + mi1 + mi1 + + + unsigned int + mj2 + mj2 + + + unsigned int + mi2 + mi2 + + + constexpr bool + constexpr bool d3d::shadermodel::operator!= + (const VersionConstant< mj1, mi1 > &l, const VersionConstant< mj2, mi2 > &r) + operator!= + + const VersionConstant< mj1, mi1 > & + l + + + const VersionConstant< mj2, mi2 > & + r + + + + +Compares two constant version numbers and returns true when the first one not equal to the second one. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l not equal to r. + + + + + + + + + + + unsigned int + mj1 + mj1 + + + unsigned int + mi1 + mi1 + + + unsigned int + mj2 + mj2 + + + unsigned int + mi2 + mi2 + + + constexpr bool + constexpr bool d3d::shadermodel::operator< + (const VersionConstant< mj1, mi1 > &l, const VersionConstant< mj2, mi2 > &r) + operator< + + const VersionConstant< mj1, mi1 > & + l + + + const VersionConstant< mj2, mi2 > & + r + + + + +Compares two constant version numbers and returns true when the first one is smaller than the second one. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l is smaller than r. + + + + + + + + + + + unsigned int + mj1 + mj1 + + + unsigned int + mi1 + mi1 + + + unsigned int + mj2 + mj2 + + + unsigned int + mi2 + mi2 + + + constexpr bool + constexpr bool d3d::shadermodel::operator> + (const VersionConstant< mj1, mi1 > &l, const VersionConstant< mj2, mi2 > &r) + operator> + + const VersionConstant< mj1, mi1 > & + l + + + const VersionConstant< mj2, mi2 > & + r + + + + +Compares two constant version numbers and returns true when the first one is larger than the second one. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l is larger than r. + + + + + + + + + + + unsigned int + mj1 + mj1 + + + unsigned int + mi1 + mi1 + + + unsigned int + mj2 + mj2 + + + unsigned int + mi2 + mi2 + + + constexpr bool + constexpr bool d3d::shadermodel::operator<= + (const VersionConstant< mj1, mi1 > &l, const VersionConstant< mj2, mi2 > &r) + operator<= + + const VersionConstant< mj1, mi1 > & + l + + + const VersionConstant< mj2, mi2 > & + r + + + + +Compares two constant version numbers and returns true when the first one is less or equal to the second one. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l is less or equal to r. + + + + + + + + + + + unsigned int + mj1 + mj1 + + + unsigned int + mi1 + mi1 + + + unsigned int + mj2 + mj2 + + + unsigned int + mi2 + mi2 + + + constexpr bool + constexpr bool d3d::shadermodel::operator>= + (const VersionConstant< mj1, mi1 > &l, const VersionConstant< mj2, mi2 > &r) + operator>= + + const VersionConstant< mj1, mi1 > & + l + + + const VersionConstant< mj2, mi2 > & + r + + + + +Compares two constant version numbers and returns true when the first one is larger or equal to the second one. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +True when \l is larger or equal to r. + + + + + + + + + + + typename A + + + typename B + + + constexpr auto + constexpr auto d3d::shadermodel::max + (VersionList< A, B >) + max + + VersionList< A, B > + + + + +Finds the latest version in the given version list. + +l + + +Version list to extract the latest version from. + + + +The earlier version of A or B. + + + + + + + + + + + typename A + + + typename B + + + typename C + + + typename... + Versions + Versions + + + constexpr auto + constexpr auto d3d::shadermodel::max + (VersionList< A, B, C, Versions... >) + max + + VersionList< A, B, C, Versions... > + + + + +Finds the latest version in the given version list. + +l + + +Version list to extract the latest version from. + + + +The latest version (and its exact type) in the given list. + + + + + + + + + + + typename A + + + typename B + + + constexpr auto + constexpr auto d3d::shadermodel::min + (VersionList< A, B > l) + min + + VersionList< A, B > + l + + + + +Finds the earliest version in the given version list. + +l + + +Version list to extract the earliest version from. + + + +The earlier version of A or B. + + + + + + + + + + + typename A + + + typename B + + + typename C + + + typename... + Versions + Versions + + + constexpr auto + constexpr auto d3d::shadermodel::min + (VersionList< A, B, C, Versions... > l) + min + + VersionList< A, B, C, Versions... > + l + + + + +Finds the earliest version in the given version list. + +l + + +Version list to extract the earliest version from. + + + +The earliest version (and its exact type) in the given list. + + + + + + + + + + + typename VC + + + typename... + Vs + Vs + + + unsigned int + unsigned int d3d::shadermodel::index_of + (VersionList< Vs... > l, VC current) + index_of + + VersionList< Vs... > + l + + + VC + current + + + + +Finds the index of the version of current in the version list l. + +l + + +Version list to search the index for. + + + + +current + + +Version to search of in l. + + + +Index into l representing current, if none can found it will return the size of the version list. + + + + + + + + + + + typename R + + + typename... + Vs + Vs + + + R + R d3d::shadermodel::at + (VersionList< Vs... > l, int index) + at + + VersionList< Vs... > + l + + + int + index + + + + +Returns the R representation of the type in l at the index index. + +l + + +Version list type to index into. + + + + +index + + +Index into l. + + + +When index is in range of the version list, then it will return the R representation of that type at that index, otherwise t will return the default value of R. + + + + + + + + + +This namespace hold all shader model version related types and utilities. + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1shadermodel_1_1matcher.xml b/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1shadermodel_1_1matcher.xml new file mode 100644 index 000000000..e2000a23b --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/namespaced3d_1_1shadermodel_1_1matcher.xml @@ -0,0 +1,15 @@ + + + + d3d::shadermodel::matcher + d3d::shadermodel::matcher::EqualCompare + d3d::shadermodel::matcher::BasicMap + d3d::shadermodel::matcher::Map + +This namespace holds all match / mapping utility functionality. + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/namespaced3dhang.xml b/breathe/doxygen/d3dAPI/xml/namespaced3dhang.xml new file mode 100644 index 000000000..8ccbf24ee --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/namespaced3dhang.xml @@ -0,0 +1,79 @@ + + + + d3dhang + + + void(*)() + using d3dhang::GPUHanger = typedef void (*)() + + GPUHanger + + + + + + + + + + + + void + void d3dhang::register_gpu_hanger + (GPUHanger newHanger) + register_gpu_hanger + + GPUHanger + newHanger + + + + + + + + + + + void + void d3dhang::hang_gpu_on + (const char *event) + hang_gpu_on + + const char * + event + + + + + + + + + + + void + void d3dhang::hang_if_requested + (const char *event) + hang_if_requested + + const char * + event + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/namespaceddsx.xml b/breathe/doxygen/d3dAPI/xml/namespaceddsx.xml new file mode 100644 index 000000000..509323e40 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/namespaceddsx.xml @@ -0,0 +1,11 @@ + + + + ddsx + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/namespaceeastl.xml b/breathe/doxygen/d3dAPI/xml/namespaceeastl.xml new file mode 100644 index 000000000..76150c492 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/namespaceeastl.xml @@ -0,0 +1,12 @@ + + + + eastl + eastl::hash< ResourceDescription > + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/namespaceshaders.xml b/breathe/doxygen/d3dAPI/xml/namespaceshaders.xml new file mode 100644 index 000000000..8f2ae733f --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/namespaceshaders.xml @@ -0,0 +1,50 @@ + + + + shaders + shaders::DriverRenderStateIdDummy + shaders::RenderStateBits + shaders::RenderState + + + uint32_t + RenderStateId + + Invalid + = 0 + + + + + + + + + + + + + + + + + GenerationRefId< 8, DriverRenderStateIdDummy > + using shaders::DriverRenderStateId = typedef GenerationRefId<8, DriverRenderStateIdDummy> + + DriverRenderStateId + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_array_cube_texture_resource_description.xml b/breathe/doxygen/d3dAPI/xml/struct_array_cube_texture_resource_description.xml new file mode 100644 index 000000000..269919ed4 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_array_cube_texture_resource_description.xml @@ -0,0 +1,93 @@ + + + + ArrayCubeTextureResourceDescription + CubeTextureResourceDescription + dag_heap.h + + + uint32_t + uint32_t ArrayCubeTextureResourceDescription::cubes + + cubes + +The number of cubes in the array cube texture. + + + + + + + + + +Array cube texture resource description that contains fields specific to array cube textures. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + clearValue + + + + + + + + + + + + + + + + + + + + + + ArrayCubeTextureResourceDescriptionactivation + ArrayCubeTextureResourceDescriptioncFlags + ArrayCubeTextureResourceDescriptionclearValue + ArrayCubeTextureResourceDescriptioncubes + ArrayCubeTextureResourceDescriptionextent + ArrayCubeTextureResourceDescriptionmipLevels + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_array_texture_resource_description.xml b/breathe/doxygen/d3dAPI/xml/struct_array_texture_resource_description.xml new file mode 100644 index 000000000..ab21734e8 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_array_texture_resource_description.xml @@ -0,0 +1,94 @@ + + + + ArrayTextureResourceDescription + TextureResourceDescription + dag_heap.h + + + uint32_t + uint32_t ArrayTextureResourceDescription::arrayLayers + + arrayLayers + +The number of array layers. + + + + + + + + + +Array texture resource description that contains fields specific to array textures. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + clearValue + + + + + + + + + + + + + + + + + + + + + + ArrayTextureResourceDescriptionactivation + ArrayTextureResourceDescriptionarrayLayers + ArrayTextureResourceDescriptioncFlags + ArrayTextureResourceDescriptionclearValue + ArrayTextureResourceDescriptionheight + ArrayTextureResourceDescriptionmipLevels + ArrayTextureResourceDescriptionwidth + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_base_texture_1_1_i_reload_data.xml b/breathe/doxygen/d3dAPI/xml/struct_base_texture_1_1_i_reload_data.xml new file mode 100644 index 000000000..d3609732f --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_base_texture_1_1_i_reload_data.xml @@ -0,0 +1,61 @@ + + + + BaseTexture::IReloadData + + + + virtual BaseTexture::IReloadData::~IReloadData + () + ~IReloadData + + + + + + + + + + void + virtual void BaseTexture::IReloadData::reloadD3dRes + (BaseTexture *t)=0 + reloadD3dRes + + BaseTexture * + t + + + + + + + + + + + void + virtual void BaseTexture::IReloadData::destroySelf + ()=0 + destroySelf + + + + + + + + + + + + + + + + BaseTexture::IReloadDatadestroySelf + BaseTexture::IReloadDatareloadD3dRes + BaseTexture::IReloadData~IReloadData + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_basic_resource_description.xml b/breathe/doxygen/d3dAPI/xml/struct_basic_resource_description.xml new file mode 100644 index 000000000..ddbb78e6e --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_basic_resource_description.xml @@ -0,0 +1,125 @@ + + + + BasicResourceDescription + BasicTextureResourceDescription + BufferResourceDescription + dag_heap.h + + + uint32_t + uint32_t BasicResourceDescription::cFlags + + cFlags + +The resource creation flags. + + + + + + + + + ResourceActivationAction + ResourceActivationAction BasicResourceDescription::activation + + activation + +The resource activation action. + + + + + + + + + ResourceClearValue + ResourceClearValue BasicResourceDescription::clearValue + + clearValue + +The clear value. + + + + + + + + + +Basic resource description that contains common fields for all GPU resource types. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + clearValue + + + + + + + + + + BasicResourceDescriptionactivation + BasicResourceDescriptioncFlags + BasicResourceDescriptionclearValue + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_basic_texture_resource_description.xml b/breathe/doxygen/d3dAPI/xml/struct_basic_texture_resource_description.xml new file mode 100644 index 000000000..f17fa171a --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_basic_texture_resource_description.xml @@ -0,0 +1,99 @@ + + + + BasicTextureResourceDescription + BasicResourceDescription + CubeTextureResourceDescription + TextureResourceDescription + dag_heap.h + + + uint32_t + uint32_t BasicTextureResourceDescription::mipLevels + + mipLevels + +The number of mip levels. + + + + + + + + + +Basic texture resource description that contains fields common to all texture resources. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + clearValue + + + + + + + + + + BasicTextureResourceDescriptionactivation + BasicTextureResourceDescriptioncFlags + BasicTextureResourceDescriptionclearValue + BasicTextureResourceDescriptionmipLevels + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_buffer_resource_description.xml b/breathe/doxygen/d3dAPI/xml/struct_buffer_resource_description.xml new file mode 100644 index 000000000..abdbb42e4 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_buffer_resource_description.xml @@ -0,0 +1,97 @@ + + + + BufferResourceDescription + BasicResourceDescription + dag_heap.h + + + uint32_t + uint32_t BufferResourceDescription::elementSizeInBytes + + elementSizeInBytes + +The size of a single element in bytes. + + + + + + + + + uint32_t + uint32_t BufferResourceDescription::elementCount + + elementCount + +The number of elements in the buffer. + + + + + + + + + uint32_t + uint32_t BufferResourceDescription::viewFormat + + viewFormat + +The view format of the buffer. + + + + + + + + + +Buffer resource description that contains fields specific to buffer resources. + + + + + + + + + + + + + + + + + + + + + clearValue + + + + + + + + + + + + + + + + BufferResourceDescriptionactivation + BufferResourceDescriptioncFlags + BufferResourceDescriptionclearValue + BufferResourceDescriptionelementCount + BufferResourceDescriptionelementSizeInBytes + BufferResourceDescriptionviewFormat + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_compile_pipeline_set.xml b/breathe/doxygen/d3dAPI/xml/struct_compile_pipeline_set.xml new file mode 100644 index 000000000..4473d9632 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_compile_pipeline_set.xml @@ -0,0 +1,212 @@ + + + + CompilePipelineSet + dag_commands.h + + + const char * + const char* CompilePipelineSet::defaultFormat + + defaultFormat + +V1 and V2 value. When not specified, the driver assumes its driver specific format (if supported) and otherwise engine. + + + + + + + + + const DataBlock * + const DataBlock* CompilePipelineSet::featureSet + + featureSet + +V1 and V2 block. A block with a set of feature sets referenced by pipelines in the pipeline sets to indicate required features. + + + + + + + + + const DataBlock * + const DataBlock* CompilePipelineSet::inputLayoutSet + + inputLayoutSet + +V1 and V2 block. A block with a set of blocks describing input layouts. + + + + + + + + + const DataBlock * + const DataBlock* CompilePipelineSet::renderStateSet + + renderStateSet + + + +V1 and V2 block. A block with a set of blocks describing render states. The driver will ignore render states that are incompatible with the system. + + + + + + + const DataBlock * + const DataBlock* CompilePipelineSet::outputFormatSet + + outputFormatSet + + + +V1 and V2 block. A block with a set of blocks describing output format states. The driver will ignore output format states that are incompatible wit the system. + + + + + + + const DataBlock * + const DataBlock* CompilePipelineSet::graphicsPipelineSet + + graphicsPipelineSet + + + +V1 block. A block with a set of blocks describing graphics pipelines. The driver will ignore pipelines using unsupported input layouts, render states or output formats. + + + + + + + const DataBlock * + const DataBlock* CompilePipelineSet::meshPipelineSet + + meshPipelineSet + + + +V1 block. A block with a set of blocks describing mesh pipelines. The driver will ignore pipelines using unsupported render states or output formats. + + + + + + + const DataBlock * + const DataBlock* CompilePipelineSet::computePipelineSet + + computePipelineSet + +V1 block. A block with a set of blocks describing compute pipelines. + + + + + + + + + const DataBlock * + const DataBlock* CompilePipelineSet::signature + + signature + +V2 block, this block stores shader class signatures, this ensures we try not to load incompatible shader class uses. + + + + + + + + + const DataBlock * + const DataBlock* CompilePipelineSet::computeSet + + computeSet + +V2 block, new compute use set, uses shader class names and codes. + + + + + + + + + const DataBlock * + const DataBlock* CompilePipelineSet::graphicsSet + + graphicsSet + +V2 block, new graphics use set, uses shader class names and codes. + + + + + + + + + const DataBlock * + const DataBlock* CompilePipelineSet::graphicsNullPixelOverrideSet + + graphicsNullPixelOverrideSet + + + +V2 block, new graphics use set, uses shader class names and codes. This set has pipelines where the paired pixel shader is replaced by the null pixel shader. + + + + + + + const DataBlock * + const DataBlock* CompilePipelineSet::graphicsPixelOverrideSet + + graphicsPixelOverrideSet + + + +V2 block, new graphics use set, uses shader class names and codes. This set has pipelines where the paired pixel shader uses a differen shader class name and codes than the vertex shader. + + + + + + + +All values are optional, but graphics and mesh pipelines can not be created without output and render state sets. + + + + + + CompilePipelineSetcomputePipelineSet + CompilePipelineSetcomputeSet + CompilePipelineSetdefaultFormat + CompilePipelineSetfeatureSet + CompilePipelineSetgraphicsNullPixelOverrideSet + CompilePipelineSetgraphicsPipelineSet + CompilePipelineSetgraphicsPixelOverrideSet + CompilePipelineSetgraphicsSet + CompilePipelineSetinputLayoutSet + CompilePipelineSetmeshPipelineSet + CompilePipelineSetoutputFormatSet + CompilePipelineSetrenderStateSet + CompilePipelineSetsignature + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_cube_texture_resource_description.xml b/breathe/doxygen/d3dAPI/xml/struct_cube_texture_resource_description.xml new file mode 100644 index 000000000..606aaf196 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_cube_texture_resource_description.xml @@ -0,0 +1,87 @@ + + + + CubeTextureResourceDescription + BasicTextureResourceDescription + ArrayCubeTextureResourceDescription + dag_heap.h + + + uint32_t + uint32_t CubeTextureResourceDescription::extent + + extent + +The extent of the cube texture. + + + + + + + + + +Cube texture resource description that contains fields specific to cube textures. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + clearValue + + + + + + + + + + + + + + + + CubeTextureResourceDescriptionactivation + CubeTextureResourceDescriptioncFlags + CubeTextureResourceDescriptionclearValue + CubeTextureResourceDescriptionextent + CubeTextureResourceDescriptionmipLevels + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_d3d_interface_table.xml b/breathe/doxygen/d3dAPI/xml/struct_d3d_interface_table.xml new file mode 100644 index 000000000..6d22c430b --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_d3d_interface_table.xml @@ -0,0 +1,3838 @@ + + + + D3dInterfaceTable + + + const char *(* + const char*(* D3dInterfaceTable::get_driver_name) () + )() + get_driver_name + + + + + + + + + + const char *(* + const char*(* D3dInterfaceTable::get_device_driver_version) () + )() + get_device_driver_version + + + + + + + + + + const char *(* + const char*(* D3dInterfaceTable::get_device_name) () + )() + get_device_name + + + + + + + + + + const char *(* + const char*(* D3dInterfaceTable::get_last_error) () + )() + get_last_error + + + + + + + + + + uint32_t(* + uint32_t(* D3dInterfaceTable::get_last_error_code) () + )() + get_last_error_code + + + + + + + + + + void *(* + void*(* D3dInterfaceTable::get_device) () + )() + get_device + + + + + + + + + + const Driver3dDesc &(* + const Driver3dDesc&(* D3dInterfaceTable::get_driver_desc) () + )() + get_driver_desc + + + + + + + + + + int(* + int(* D3dInterfaceTable::driver_command) (Drv3dCommand command, void *par1, void *par2, void *par3) + )(Drv3dCommand command, void *par1, void *par2, void *par3) + driver_command + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::device_lost) (bool *can_reset_now) + )(bool *can_reset_now) + device_lost + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::reset_device) () + )() + reset_device + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::is_in_device_reset_now) () + )() + is_in_device_reset_now + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::is_window_occluded) () + )() + is_window_occluded + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::should_use_compute_for_image_processing) (std::initializer_list< unsigned > formats) + )(std::initializer_list< unsigned > formats) + should_use_compute_for_image_processing + + + + + + + + + + unsigned(* + unsigned(* D3dInterfaceTable::get_texformat_usage) (int cflg, int restype) + )(int cflg, int restype) + get_texformat_usage + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::check_texformat) (int cflg) + )(int cflg) + check_texformat + + + + + + + + + + int(* + int(* D3dInterfaceTable::get_max_sample_count) (int cflg) + )(int cflg) + get_max_sample_count + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::issame_texformat) (int cflg1, int cflg2) + )(int cflg1, int cflg2) + issame_texformat + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::check_cubetexformat) (int cflg) + )(int cflg) + check_cubetexformat + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::check_voltexformat) (int cflg) + )(int cflg) + check_voltexformat + + + + + + + + + + BaseTexture *(* + BaseTexture*(* D3dInterfaceTable::create_tex_0) (TexImage32 *img, int w, int h, int flg, int levels, const char *stat_name) + )(TexImage32 *img, int w, int h, int flg, int levels, const char *stat_name) + create_tex_0 + + + + + + + + + + BaseTexture *(* + BaseTexture*(* D3dInterfaceTable::create_cubetex_0) (int size, int flg, int levels, const char *stat_name) + )(int size, int flg, int levels, const char *stat_name) + create_cubetex_0 + + + + + + + + + + BaseTexture *(* + BaseTexture*(* D3dInterfaceTable::create_voltex) (int w, int h, int d, int flg, int levels, const char *stat_name) + )(int w, int h, int d, int flg, int levels, const char *stat_name) + create_voltex + + + + + + + + + + BaseTexture *(* + BaseTexture*(* D3dInterfaceTable::create_array_tex) (int w, int h, int d, int flg, int levels, const char *stat_name) + )(int w, int h, int d, int flg, int levels, const char *stat_name) + create_array_tex + + + + + + + + + + BaseTexture *(* + BaseTexture*(* D3dInterfaceTable::create_cube_array_tex) (int side, int d, int flg, int levels, const char *stat_name) + )(int side, int d, int flg, int levels, const char *stat_name) + create_cube_array_tex + + + + + + + + + + BaseTexture *(* + BaseTexture*(* D3dInterfaceTable::create_ddsx_tex) (IGenLoad &crd, int flg, int q, int lev, const char *stat_name) + )(IGenLoad &crd, int flg, int q, int lev, const char *stat_name) + create_ddsx_tex + + + + + + + + + + BaseTexture *(* + BaseTexture*(* D3dInterfaceTable::alloc_ddsx_tex) (const ddsx::Header &hdr, int flg, int q, int lev, const char *stat_name, int stub_tex_idx) + )(const ddsx::Header &hdr, int flg, int q, int lev, const char *stat_name, int stub_tex_idx) + alloc_ddsx_tex + + + + + + + + + + BaseTexture *(* + BaseTexture*(* D3dInterfaceTable::alias_tex_0) (BaseTexture *baseTexture, TexImage32 *img, int w, int h, int flg, int levels, const char *stat_name) + )(BaseTexture *baseTexture, TexImage32 *img, int w, int h, int flg, int levels, const char *stat_name) + alias_tex_0 + + + + + + + + + + BaseTexture *(* + BaseTexture*(* D3dInterfaceTable::alias_cubetex_0) (BaseTexture *baseTexture, int size, int flg, int levels, const char *stat_name) + )(BaseTexture *baseTexture, int size, int flg, int levels, const char *stat_name) + alias_cubetex_0 + + + + + + + + + + BaseTexture *(* + BaseTexture*(* D3dInterfaceTable::alias_voltex_0) (BaseTexture *baseTexture, int w, int h, int d, int flg, int levels, const char *stat_name) + )(BaseTexture *baseTexture, int w, int h, int d, int flg, int levels, const char *stat_name) + alias_voltex_0 + + + + + + + + + + BaseTexture *(* + BaseTexture*(* D3dInterfaceTable::alias_array_tex_0) (BaseTexture *baseTexture, int w, int h, int d, int flg, int levels, const char *stat_name) + )(BaseTexture *baseTexture, int w, int h, int d, int flg, int levels, const char *stat_name) + alias_array_tex_0 + + + + + + + + + + BaseTexture *(* + BaseTexture*(* D3dInterfaceTable::alias_cube_array_tex_0) (BaseTexture *baseTexture, int side, int d, int flg, int levels, const char *stat_name) + )(BaseTexture *baseTexture, int side, int d, int flg, int levels, const char *stat_name) + alias_cube_array_tex_0 + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::stretch_rect_0) (BaseTexture *src, BaseTexture *dst, RectInt *rsrc, RectInt *rdst) + )(BaseTexture *src, BaseTexture *dst, RectInt *rsrc, RectInt *rdst) + stretch_rect_0 + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::copy_from_current_render_target) (BaseTexture *to_tex) + )(BaseTexture *to_tex) + copy_from_current_render_target + + + + + + + + + + void(* + void(* D3dInterfaceTable::get_texture_statistics) (uint32_t *num_textures, uint64_t *total_mem, String *out_dump) + )(uint32_t *num_textures, uint64_t *total_mem, String *out_dump) + get_texture_statistics + + + + + + + + + + d3d::SamplerHandle(* + d3d::SamplerHandle(* D3dInterfaceTable::request_sampler) (const d3d::SamplerInfo &sampler_info) + )(const d3d::SamplerInfo &sampler_info) + request_sampler + + + + + + + + + + void(* + void(* D3dInterfaceTable::set_sampler) (unsigned shader_stage, unsigned slot, d3d::SamplerHandle sampler) + )(unsigned shader_stage, unsigned slot, d3d::SamplerHandle sampler) + set_sampler + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::settex) (int stage, BaseTexture *) + )(int stage, BaseTexture *) + settex + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::settex_vs) (int stage, BaseTexture *) + )(int stage, BaseTexture *) + settex_vs + + + + + + + + + + PROGRAM(* + PROGRAM(* D3dInterfaceTable::create_program_0) (VPROG, FSHADER, VDECL, unsigned *, unsigned) + )(VPROG, FSHADER, VDECL, unsigned *, unsigned) + create_program_0 + + + + + + + + + + PROGRAM(* + PROGRAM(* D3dInterfaceTable::create_program_1) (const uint32_t *, const uint32_t *, VDECL, unsigned *, unsigned) + )(const uint32_t *, const uint32_t *, VDECL, unsigned *, unsigned) + create_program_1 + + + + + + + + + + PROGRAM(* + PROGRAM(* D3dInterfaceTable::create_program_cs) (const uint32_t *cs_native, CSPreloaded preloaded) + )(const uint32_t *cs_native, CSPreloaded preloaded) + create_program_cs + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_program) (PROGRAM) + )(PROGRAM) + set_program + + + + + + + + + + void(* + void(* D3dInterfaceTable::delete_program) (PROGRAM) + )(PROGRAM) + delete_program + + + + + + + + + + VPROG(* + VPROG(* D3dInterfaceTable::create_vertex_shader) (const uint32_t *native_code) + )(const uint32_t *native_code) + create_vertex_shader + + + + + + + + + + VPROG(* + VPROG(* D3dInterfaceTable::create_vertex_shader_dagor) (const VPRTYPE *tokens, int len) + )(const VPRTYPE *tokens, int len) + create_vertex_shader_dagor + + + + + + + + + + VPROG(* + VPROG(* D3dInterfaceTable::create_vertex_shader_asm) (const char *asm_text) + )(const char *asm_text) + create_vertex_shader_asm + + + + + + + + + + VPROG(* + VPROG(* D3dInterfaceTable::create_vertex_shader_hlsl) (const char *hlsl_text) + )(const char *hlsl_text) + create_vertex_shader_hlsl + + + + + + + + + + void(* + void(* D3dInterfaceTable::delete_vertex_shader) (VPROG vs) + )(VPROG vs) + delete_vertex_shader + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_vertex_shader) (VPROG ps) + )(VPROG ps) + set_vertex_shader + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_const) (unsigned stage, unsigned reg_base, const void *data, unsigned num_regs) + )(unsigned stage, unsigned reg_base, const void *data, unsigned num_regs) + set_const + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_immediate_const) (unsigned stage, const uint32_t *data, unsigned num_words) + )(unsigned stage, const uint32_t *data, unsigned num_words) + set_immediate_const + + + + + + + + + + FSHADER(* + FSHADER(* D3dInterfaceTable::create_pixel_shader) (const uint32_t *native_code) + )(const uint32_t *native_code) + create_pixel_shader + + + + + + + + + + FSHADER(* + FSHADER(* D3dInterfaceTable::create_pixel_shader_dagor) (const FSHTYPE *tokens, int len) + )(const FSHTYPE *tokens, int len) + create_pixel_shader_dagor + + + + + + + + + + FSHADER(* + FSHADER(* D3dInterfaceTable::create_pixel_shader_asm) (const char *asm_text) + )(const char *asm_text) + create_pixel_shader_asm + + + + + + + + + + FSHADER(* + FSHADER(* D3dInterfaceTable::create_pixel_shader_hlsl) (const char *hlsl_text) + )(const char *hlsl_text) + create_pixel_shader_hlsl + + + + + + + + + + void(* + void(* D3dInterfaceTable::delete_pixel_shader) (FSHADER ps) + )(FSHADER ps) + delete_pixel_shader + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_pixel_shader) (FSHADER ps) + )(FSHADER ps) + set_pixel_shader + + + + + + + + + + int(* + int(* D3dInterfaceTable::set_vs_constbuffer_size) (int required_size) + )(int required_size) + set_vs_constbuffer_size + + + + + + + + + + int(* + int(* D3dInterfaceTable::set_cs_constbuffer_size) (int required_size) + )(int required_size) + set_cs_constbuffer_size + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_const_buffer) (unsigned stage, unsigned slot, Sbuffer *buffer, uint32_t consts_offset, uint32_t consts_size) + )(unsigned stage, unsigned slot, Sbuffer *buffer, uint32_t consts_offset, uint32_t consts_size) + set_const_buffer + + + + + + + + + + uint32_t(* + uint32_t(* D3dInterfaceTable::register_bindless_sampler_0) (BaseTexture *texture) + )(BaseTexture *texture) + register_bindless_sampler_0 + + + + + + + + + + uint32_t(* + uint32_t(* D3dInterfaceTable::register_bindless_sampler_1) (d3d::SamplerHandle sampler) + )(d3d::SamplerHandle sampler) + register_bindless_sampler_1 + + + + + + + + + + uint32_t(* + uint32_t(* D3dInterfaceTable::allocate_bindless_resource_range) (uint32_t resource_type, uint32_t count) + )(uint32_t resource_type, uint32_t count) + allocate_bindless_resource_range + + + + + + + + + + uint32_t(* + uint32_t(* D3dInterfaceTable::resize_bindless_resource_range) (uint32_t resource_type, uint32_t index, uint32_t current_count, uint32_t new_count) + )(uint32_t resource_type, uint32_t index, uint32_t current_count, uint32_t new_count) + resize_bindless_resource_range + + + + + + + + + + void(* + void(* D3dInterfaceTable::free_bindless_resource_range) (uint32_t resource_type, uint32_t index, uint32_t count) + )(uint32_t resource_type, uint32_t index, uint32_t count) + free_bindless_resource_range + + + + + + + + + + void(* + void(* D3dInterfaceTable::update_bindless_resource) (uint32_t index, D3dResource *res) + )(uint32_t index, D3dResource *res) + update_bindless_resource + + + + + + + + + + void(* + void(* D3dInterfaceTable::update_bindless_resources_to_null) (uint32_t resource_type, uint32_t index, uint32_t count) + )(uint32_t resource_type, uint32_t index, uint32_t count) + update_bindless_resources_to_null + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_tex) (unsigned shader_stage, unsigned slot, BaseTexture *tex, bool use_sampler) + )(unsigned shader_stage, unsigned slot, BaseTexture *tex, bool use_sampler) + set_tex + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_rwtex) (unsigned shader_stage, unsigned slot, BaseTexture *tex, uint32_t, uint32_t, bool) + )(unsigned shader_stage, unsigned slot, BaseTexture *tex, uint32_t, uint32_t, bool) + set_rwtex + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::clear_rwtexi) (BaseTexture *tex, const unsigned val[4], uint32_t, uint32_t) + )(BaseTexture *tex, const unsigned val[4], uint32_t, uint32_t) + clear_rwtexi + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::clear_rwtexf) (BaseTexture *tex, const float val[4], uint32_t, uint32_t) + )(BaseTexture *tex, const float val[4], uint32_t, uint32_t) + clear_rwtexf + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::clear_rwbufi) (Sbuffer *tex, const unsigned val[4]) + )(Sbuffer *tex, const unsigned val[4]) + clear_rwbufi + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::clear_rwbuff) (Sbuffer *tex, const float val[4]) + )(Sbuffer *tex, const float val[4]) + clear_rwbuff + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::clear_rt) (const RenderTarget &rt, const ResourceClearValue &clear_val) + )(const RenderTarget &rt, const ResourceClearValue &clear_val) + clear_rt + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_buffer) (unsigned shader_stage, unsigned slot, Sbuffer *buffer) + )(unsigned shader_stage, unsigned slot, Sbuffer *buffer) + set_buffer + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_rwbuffer) (unsigned shader_stage, unsigned slot, Sbuffer *buffer) + )(unsigned shader_stage, unsigned slot, Sbuffer *buffer) + set_rwbuffer + + + + + + + + + + Sbuffer *(* + Sbuffer*(* D3dInterfaceTable::create_vb_0) (int size_bytes, int flags, const char *name) + )(int size_bytes, int flags, const char *name) + create_vb_0 + + + + + + + + + + Sbuffer *(* + Sbuffer*(* D3dInterfaceTable::create_ib) (int size_bytes, int flags, const char *stat_name) + )(int size_bytes, int flags, const char *stat_name) + create_ib + + + + + + + + + + Sbuffer *(* + Sbuffer*(* D3dInterfaceTable::create_sbuffer) (int struct_size, int elements, unsigned flags, unsigned texfmt, const char *) + )(int struct_size, int elements, unsigned flags, unsigned texfmt, const char *) + create_sbuffer + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_depth_0) (BaseTexture *, DepthAccess) + )(BaseTexture *, DepthAccess) + set_depth_0 + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_depth_1) (BaseTexture *tex, int layer, DepthAccess) + )(BaseTexture *tex, int layer, DepthAccess) + set_depth_1 + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_render_target_0) () + )() + set_render_target_0 + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_render_target_1) (int rt_index, BaseTexture *, uint8_t level) + )(int rt_index, BaseTexture *, uint8_t level) + set_render_target_1 + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_render_target_2) (int rt_index, BaseTexture *, int fc, uint8_t level) + )(int rt_index, BaseTexture *, int fc, uint8_t level) + set_render_target_2 + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_render_target_3) (const Driver3dRenderTarget &rt) + )(const Driver3dRenderTarget &rt) + set_render_target_3 + + + + + + + + + + void(* + void(* D3dInterfaceTable::get_render_target) (Driver3dRenderTarget &out_rt) + )(Driver3dRenderTarget &out_rt) + get_render_target + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::get_target_size) (int &w, int &h) + )(int &w, int &h) + get_target_size + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::get_render_target_size) (int &w, int &h, BaseTexture *rt_tex, uint8_t level) + )(int &w, int &h, BaseTexture *rt_tex, uint8_t level) + get_render_target_size + + + + + + + + + + void(* + void(* D3dInterfaceTable::set_variable_rate_shading) (unsigned rate_x, unsigned rate_y, VariableRateShadingCombiner vertex_combiner, VariableRateShadingCombiner pixel_combiner) + )(unsigned rate_x, unsigned rate_y, VariableRateShadingCombiner vertex_combiner, VariableRateShadingCombiner pixel_combiner) + set_variable_rate_shading + + + + + + + + + + void(* + void(* D3dInterfaceTable::set_variable_rate_shading_texture) (BaseTexture *rate_texture) + )(BaseTexture *rate_texture) + set_variable_rate_shading_texture + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::settm_0) (int which, const Matrix44 *tm) + )(int which, const Matrix44 *tm) + settm_0 + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::settm_1) (int which, const TMatrix &tm) + )(int which, const TMatrix &tm) + settm_1 + + + + + + + + + + void(* + void(* D3dInterfaceTable::settm_2) (int which, const mat44f &tm) + )(int which, const mat44f &tm) + settm_2 + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::gettm_0) (int which, Matrix44 *out_tm) + )(int which, Matrix44 *out_tm) + gettm_0 + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::gettm_1) (int which, TMatrix &out_tm) + )(int which, TMatrix &out_tm) + gettm_1 + + + + + + + + + + void(* + void(* D3dInterfaceTable::gettm_2) (int which, mat44f &out_tm) + )(int which, mat44f &out_tm) + gettm_2 + + + + + + + + + + const mat44f &(* + const mat44f&(* D3dInterfaceTable::gettm_cref) (int which) + )(int which) + gettm_cref + + + + + + + + + + void(* + void(* D3dInterfaceTable::getm2vtm) (TMatrix &out_m2v) + )(TMatrix &out_m2v) + getm2vtm + + + + + + + + + + void(* + void(* D3dInterfaceTable::setglobtm) (Matrix44 &m) + )(Matrix44 &m) + setglobtm + + + + + + + + + + void(* + void(* D3dInterfaceTable::getglobtm) (Matrix44 &) + )(Matrix44 &) + getglobtm + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::setpersp) (const Driver3dPerspective &, TMatrix4 *) + )(const Driver3dPerspective &, TMatrix4 *) + setpersp + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::getpersp) (Driver3dPerspective &) + )(Driver3dPerspective &) + getpersp + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::validatepersp) (const Driver3dPerspective &) + )(const Driver3dPerspective &) + validatepersp + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::calcproj_0) (const Driver3dPerspective &, TMatrix4 &) + )(const Driver3dPerspective &, TMatrix4 &) + calcproj_0 + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::calcproj_1) (const Driver3dPerspective &, mat44f &) + )(const Driver3dPerspective &, mat44f &) + calcproj_1 + + + + + + + + + + void(* + void(* D3dInterfaceTable::calcglobtm_0) (const mat44f &, const mat44f &, mat44f &) + )(const mat44f &, const mat44f &, mat44f &) + calcglobtm_0 + + + + + + + + + + void(* + void(* D3dInterfaceTable::calcglobtm_1) (const mat44f &, const Driver3dPerspective &, mat44f &) + )(const mat44f &, const Driver3dPerspective &, mat44f &) + calcglobtm_1 + + + + + + + + + + void(* + void(* D3dInterfaceTable::calcglobtm_2) (const TMatrix &, const TMatrix4 &, TMatrix4 &) + )(const TMatrix &, const TMatrix4 &, TMatrix4 &) + calcglobtm_2 + + + + + + + + + + void(* + void(* D3dInterfaceTable::calcglobtm_3) (const TMatrix &, const Driver3dPerspective &, TMatrix4 &) + )(const TMatrix &, const Driver3dPerspective &, TMatrix4 &) + calcglobtm_3 + + + + + + + + + + void(* + void(* D3dInterfaceTable::getglobtm_vec) (mat44f &) + )(mat44f &) + getglobtm_vec + + + + + + + + + + void(* + void(* D3dInterfaceTable::setglobtm_vec) (const mat44f &) + )(const mat44f &) + setglobtm_vec + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::setscissor) (int x, int y, int w, int h) + )(int x, int y, int w, int h) + setscissor + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::setscissors) (dag::ConstSpan< ScissorRect > scissorRects) + )(dag::ConstSpan< ScissorRect > scissorRects) + setscissors + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::setview) (int x, int y, int w, int h, float minz, float maxz) + )(int x, int y, int w, int h, float minz, float maxz) + setview + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::setviews) (dag::ConstSpan< Viewport > viewports) + )(dag::ConstSpan< Viewport > viewports) + setviews + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::getview) (int &x, int &y, int &w, int &h, float &minz, float &maxz) + )(int &x, int &y, int &w, int &h, float &minz, float &maxz) + getview + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::clearview) (int what, E3DCOLOR, float z, uint32_t stencil) + )(int what, E3DCOLOR, float z, uint32_t stencil) + clearview + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::update_screen) (bool app_active) + )(bool app_active) + update_screen + + + + + + + + + + void(* + void(* D3dInterfaceTable::wait_for_async_present) (bool force) + )(bool force) + wait_for_async_present + + + + + + + + + + void(* + void(* D3dInterfaceTable::gpu_latency_wait) () + )() + gpu_latency_wait + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::setvsrc_ex) (int stream, Sbuffer *vb, int ofs, int stride_bytes) + )(int stream, Sbuffer *vb, int ofs, int stride_bytes) + setvsrc_ex + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::setind) (Sbuffer *ib) + )(Sbuffer *ib) + setind + + + + + + + + + + VDECL(* + VDECL(* D3dInterfaceTable::create_vdecl) (VSDTYPE *vsd) + )(VSDTYPE *vsd) + create_vdecl + + + + + + + + + + void(* + void(* D3dInterfaceTable::delete_vdecl) (VDECL vdecl) + )(VDECL vdecl) + delete_vdecl + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::setvdecl) (VDECL vdecl) + )(VDECL vdecl) + setvdecl + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::draw_base) (int type, int start, int numprim, uint32_t num_instances, uint32_t start_instance) + )(int type, int start, int numprim, uint32_t num_instances, uint32_t start_instance) + draw_base + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::drawind_base) (int type, int startind, int numprim, int base_vertex, uint32_t num_instances, uint32_t start_instance) + )(int type, int startind, int numprim, int base_vertex, uint32_t num_instances, uint32_t start_instance) + drawind_base + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::draw_up) (int type, int numprim, const void *ptr, int stride_bytes) + )(int type, int numprim, const void *ptr, int stride_bytes) + draw_up + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::drawind_up) (int type, int minvert, int numvert, int numprim, const uint16_t *ind, const void *ptr, int stride_bytes) + )(int type, int minvert, int numvert, int numprim, const uint16_t *ind, const void *ptr, int stride_bytes) + drawind_up + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::draw_indirect) (int type, Sbuffer *buffer, uint32_t offset) + )(int type, Sbuffer *buffer, uint32_t offset) + draw_indirect + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::draw_indexed_indirect) (int type, Sbuffer *buffer, uint32_t offset) + )(int type, Sbuffer *buffer, uint32_t offset) + draw_indexed_indirect + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::multi_draw_indirect) (int prim_type, Sbuffer *args, uint32_t draw_count, uint32_t stride_bytes, uint32_t byte_offset) + )(int prim_type, Sbuffer *args, uint32_t draw_count, uint32_t stride_bytes, uint32_t byte_offset) + multi_draw_indirect + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::multi_draw_indexed_indirect) (int prim_type, Sbuffer *args, uint32_t draw_count, uint32_t stride_bytes, uint32_t byte_offset) + )(int prim_type, Sbuffer *args, uint32_t draw_count, uint32_t stride_bytes, uint32_t byte_offset) + multi_draw_indexed_indirect + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::dispatch) (uint32_t thread_group_x, uint32_t thread_group_y, uint32_t thread_group_z, GpuPipeline gpu_pipeline) + )(uint32_t thread_group_x, uint32_t thread_group_y, uint32_t thread_group_z, GpuPipeline gpu_pipeline) + dispatch + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::dispatch_indirect) (Sbuffer *buffer, uint32_t offset, GpuPipeline gpu_pipeline) + )(Sbuffer *buffer, uint32_t offset, GpuPipeline gpu_pipeline) + dispatch_indirect + + + + + + + + + + void(* + void(* D3dInterfaceTable::dispatch_mesh) (uint32_t thread_group_x, uint32_t thread_group_y, uint32_t thread_group_z) + )(uint32_t thread_group_x, uint32_t thread_group_y, uint32_t thread_group_z) + dispatch_mesh + + + + + + + + + + void(* + void(* D3dInterfaceTable::dispatch_mesh_indirect) (Sbuffer *args, uint32_t dispatch_count, uint32_t stride_bytes, uint32_t byte_offset) + )(Sbuffer *args, uint32_t dispatch_count, uint32_t stride_bytes, uint32_t byte_offset) + dispatch_mesh_indirect + + + + + + + + + + void(* + void(* D3dInterfaceTable::dispatch_mesh_indirect_count) (Sbuffer *args, uint32_t args_stride_bytes, uint32_t args_byte_offset, Sbuffer *count, uint32_t count_byte_offset, uint32_t max_count) + )(Sbuffer *args, uint32_t args_stride_bytes, uint32_t args_byte_offset, Sbuffer *count, uint32_t count_byte_offset, uint32_t max_count) + dispatch_mesh_indirect_count + + + + + + + + + + GPUFENCEHANDLE(* + GPUFENCEHANDLE(* D3dInterfaceTable::insert_fence) (GpuPipeline gpu_pipeline) + )(GpuPipeline gpu_pipeline) + insert_fence + + + + + + + + + + void(* + void(* D3dInterfaceTable::insert_wait_on_fence) (GPUFENCEHANDLE &fence, GpuPipeline gpu_pipeline) + )(GPUFENCEHANDLE &fence, GpuPipeline gpu_pipeline) + insert_wait_on_fence + + + + + + + + + + shaders::DriverRenderStateId(* + shaders::DriverRenderStateId(* D3dInterfaceTable::create_render_state) (const shaders::RenderState &) + )(const shaders::RenderState &) + create_render_state + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_render_state) (shaders::DriverRenderStateId) + )(shaders::DriverRenderStateId) + set_render_state + + + + + + + + + + void(* + void(* D3dInterfaceTable::clear_render_states) () + )() + clear_render_states + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_blend_factor) (E3DCOLOR color) + )(E3DCOLOR color) + set_blend_factor + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::setstencil) (uint32_t ref) + )(uint32_t ref) + setstencil + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::setwire) (bool in) + )(bool in) + setwire + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_srgb_backbuffer_write) (bool on) + )(bool on) + set_srgb_backbuffer_write + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::setgamma) (float power) + )(float power) + setgamma + + + + + + + + + + float(* + float(* D3dInterfaceTable::get_screen_aspect_ratio) () + )() + get_screen_aspect_ratio + + + + + + + + + + void(* + void(* D3dInterfaceTable::change_screen_aspect_ratio) (float ar) + )(float ar) + change_screen_aspect_ratio + + + + + + + + + + void *(* + void*(* D3dInterfaceTable::fast_capture_screen) (int &w, int &h, int &stride_bytes, int &format) + )(int &w, int &h, int &stride_bytes, int &format) + fast_capture_screen + + + + + + + + + + void(* + void(* D3dInterfaceTable::end_fast_capture_screen) () + )() + end_fast_capture_screen + + + + + + + + + + TexPixel32 *(* + TexPixel32*(* D3dInterfaceTable::capture_screen) (int &w, int &h, int &stride_bytes) + )(int &w, int &h, int &stride_bytes) + capture_screen + + + + + + + + + + void(* + void(* D3dInterfaceTable::release_capture_buffer) () + )() + release_capture_buffer + + + + + + + + + + void(* + void(* D3dInterfaceTable::get_screen_size) (int &w, int &h) + )(int &w, int &h) + get_screen_size + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_depth_bounds) (float zmn, float zmx) + )(float zmn, float zmx) + set_depth_bounds + + + + + + + + + + int(* + int(* D3dInterfaceTable::create_predicate) () + )() + create_predicate + + + + + + + + + + void(* + void(* D3dInterfaceTable::free_predicate) (int id) + )(int id) + free_predicate + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::begin_survey) (int index) + )(int index) + begin_survey + + + + + + + + + + void(* + void(* D3dInterfaceTable::end_survey) (int index) + )(int index) + end_survey + + + + + + + + + + void(* + void(* D3dInterfaceTable::begin_conditional_render) (int index) + )(int index) + begin_conditional_render + + + + + + + + + + void(* + void(* D3dInterfaceTable::end_conditional_render) (int id) + )(int id) + end_conditional_render + + + + + + + + + + VDECL(* + VDECL(* D3dInterfaceTable::get_program_vdecl) (PROGRAM p) + )(PROGRAM p) + get_program_vdecl + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::get_vrr_supported) () + )() + get_vrr_supported + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::get_vsync_enabled) () + )() + get_vsync_enabled + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::enable_vsync) (bool enable) + )(bool enable) + enable_vsync + + + + + + + + + + d3d::EventQuery *(* + d3d::EventQuery*(* D3dInterfaceTable::create_event_query) () + )() + create_event_query + + + + + + + + + + void(* + void(* D3dInterfaceTable::release_event_query) (d3d::EventQuery *q) + )(d3d::EventQuery *q) + release_event_query + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::issue_event_query) (d3d::EventQuery *q) + )(d3d::EventQuery *q) + issue_event_query + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::get_event_query_status) (d3d::EventQuery *q, bool force_flush) + )(d3d::EventQuery *q, bool force_flush) + get_event_query_status + + + + + + + + + + void(* + void(* D3dInterfaceTable::set_present_wnd) (void *hwnd) + )(void *hwnd) + set_present_wnd + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::set_capture_full_frame_buffer) (bool ison) + )(bool ison) + set_capture_full_frame_buffer + + + + + + + + + + unsigned(* + unsigned(* D3dInterfaceTable::get_texture_format) (BaseTexture *tex) + )(BaseTexture *tex) + get_texture_format + + + + + + + + + + const char *(* + const char*(* D3dInterfaceTable::get_texture_format_str) (BaseTexture *tex) + )(BaseTexture *tex) + get_texture_format_str + + + + + + + + + + void(* + void(* D3dInterfaceTable::get_video_modes_list) (Tab< String > &list) + )(Tab< String > &list) + get_video_modes_list + + + + + + + + + + PROGRAM(* + PROGRAM(* D3dInterfaceTable::get_debug_program) () + )() + get_debug_program + + + + + + + + + + void(* + void(* D3dInterfaceTable::beginEvent) (const char *s) + )(const char *s) + beginEvent + + + + + + + + + + void(* + void(* D3dInterfaceTable::endEvent) () + )() + endEvent + + + + + + + + + + Texture *(* + Texture*(* D3dInterfaceTable::get_backbuffer_tex) () + )() + get_backbuffer_tex + + + + + + + + + + Texture *(* + Texture*(* D3dInterfaceTable::get_secondary_backbuffer_tex) () + )() + get_secondary_backbuffer_tex + + + + + + + + + + void(* + void(* D3dInterfaceTable::resource_barrier) (ResourceBarrierDesc desc, GpuPipeline gpu_pipeline) + )(ResourceBarrierDesc desc, GpuPipeline gpu_pipeline) + resource_barrier + + + + + + + + + + d3d::RenderPass *(* + d3d::RenderPass*(* D3dInterfaceTable::create_render_pass) (const RenderPassDesc &rp_desc) + )(const RenderPassDesc &rp_desc) + create_render_pass + + + + + + + + + + void(* + void(* D3dInterfaceTable::delete_render_pass) (d3d::RenderPass *rp) + )(d3d::RenderPass *rp) + delete_render_pass + + + + + + + + + + void(* + void(* D3dInterfaceTable::begin_render_pass) (d3d::RenderPass *rp, const RenderPassArea area, const RenderPassTarget *targets) + )(d3d::RenderPass *rp, const RenderPassArea area, const RenderPassTarget *targets) + begin_render_pass + + + + + + + + + + void(* + void(* D3dInterfaceTable::next_subpass) () + )() + next_subpass + + + + + + + + + + void(* + void(* D3dInterfaceTable::end_render_pass) () + )() + end_render_pass + + + + + + + + + + void(* + void(* D3dInterfaceTable::allow_render_pass_target_load) () + )() + allow_render_pass_target_load + + + + + + + + + + ResourceAllocationProperties(* + ResourceAllocationProperties(* D3dInterfaceTable::get_resource_allocation_properties) (const ResourceDescription &desc) + )(const ResourceDescription &desc) + get_resource_allocation_properties + + + + + + + + + + ResourceHeap *(* + ResourceHeap*(* D3dInterfaceTable::create_resource_heap) (ResourceHeapGroup *heap_group, size_t size, ResourceHeapCreateFlags flags) + )(ResourceHeapGroup *heap_group, size_t size, ResourceHeapCreateFlags flags) + create_resource_heap + + + + + + + + + + void(* + void(* D3dInterfaceTable::destroy_resource_heap) (ResourceHeap *heap) + )(ResourceHeap *heap) + destroy_resource_heap + + + + + + + + + + Sbuffer *(* + Sbuffer*(* D3dInterfaceTable::place_buffer_in_resource_heap) (ResourceHeap *heap, const ResourceDescription &desc, size_t offset, const ResourceAllocationProperties &alloc_info, const char *name) + )(ResourceHeap *heap, const ResourceDescription &desc, size_t offset, const ResourceAllocationProperties &alloc_info, const char *name) + place_buffer_in_resource_heap + + + + + + + + + + BaseTexture *(* + BaseTexture*(* D3dInterfaceTable::place_texture_in_resource_heap) (ResourceHeap *heap, const ResourceDescription &desc, size_t offset, const ResourceAllocationProperties &alloc_info, const char *name) + )(ResourceHeap *heap, const ResourceDescription &desc, size_t offset, const ResourceAllocationProperties &alloc_info, const char *name) + place_texture_in_resource_heap + + + + + + + + + + ResourceHeapGroupProperties(* + ResourceHeapGroupProperties(* D3dInterfaceTable::get_resource_heap_group_properties) (ResourceHeapGroup *heap_group) + )(ResourceHeapGroup *heap_group) + get_resource_heap_group_properties + + + + + + + + + + void(* + void(* D3dInterfaceTable::map_tile_to_resource) (BaseTexture *tex, ResourceHeap *heap, const TileMapping *mapping, size_t mapping_count) + )(BaseTexture *tex, ResourceHeap *heap, const TileMapping *mapping, size_t mapping_count) + map_tile_to_resource + + + + + + + + + + TextureTilingInfo(* + TextureTilingInfo(* D3dInterfaceTable::get_texture_tiling_info) (BaseTexture *tex, size_t subresource) + )(BaseTexture *tex, size_t subresource) + get_texture_tiling_info + + + + + + + + + + void(* + void(* D3dInterfaceTable::activate_buffer) (Sbuffer *buf, ResourceActivationAction action, const ResourceClearValue &value, GpuPipeline gpu_pipeline) + )(Sbuffer *buf, ResourceActivationAction action, const ResourceClearValue &value, GpuPipeline gpu_pipeline) + activate_buffer + + + + + + + + + + void(* + void(* D3dInterfaceTable::activate_texture) (BaseTexture *tex, ResourceActivationAction action, const ResourceClearValue &value, GpuPipeline gpu_pipeline) + )(BaseTexture *tex, ResourceActivationAction action, const ResourceClearValue &value, GpuPipeline gpu_pipeline) + activate_texture + + + + + + + + + + void(* + void(* D3dInterfaceTable::deactivate_buffer) (Sbuffer *buf, GpuPipeline gpu_pipeline) + )(Sbuffer *buf, GpuPipeline gpu_pipeline) + deactivate_buffer + + + + + + + + + + void(* + void(* D3dInterfaceTable::deactivate_texture) (BaseTexture *tex, GpuPipeline gpu_pipeline) + )(BaseTexture *tex, GpuPipeline gpu_pipeline) + deactivate_texture + + + + + + + + + + d3d::ResUpdateBuffer *(* + d3d::ResUpdateBuffer*(* D3dInterfaceTable::allocate_update_buffer_for_tex_region) (BaseTexture *dest_base_texture, unsigned dest_mip, unsigned dest_slice, unsigned offset_x, unsigned offset_y, unsigned offset_z, unsigned width, unsigned height, unsigned depth) + )(BaseTexture *dest_base_texture, unsigned dest_mip, unsigned dest_slice, unsigned offset_x, unsigned offset_y, unsigned offset_z, unsigned width, unsigned height, unsigned depth) + allocate_update_buffer_for_tex_region + + + + + + + + + + d3d::ResUpdateBuffer *(* + d3d::ResUpdateBuffer*(* D3dInterfaceTable::allocate_update_buffer_for_tex) (BaseTexture *dest_tex, int dest_mip, int dest_slice) + )(BaseTexture *dest_tex, int dest_mip, int dest_slice) + allocate_update_buffer_for_tex + + + + + + + + + + void(* + void(* D3dInterfaceTable::release_update_buffer) (d3d::ResUpdateBuffer *&rub) + )(d3d::ResUpdateBuffer *&rub) + release_update_buffer + + + + + + + + + + char *(* + char*(* D3dInterfaceTable::get_update_buffer_addr_for_write) (d3d::ResUpdateBuffer *rub) + )(d3d::ResUpdateBuffer *rub) + get_update_buffer_addr_for_write + + + + + + + + + + size_t(* + size_t(* D3dInterfaceTable::get_update_buffer_size) (d3d::ResUpdateBuffer *rub) + )(d3d::ResUpdateBuffer *rub) + get_update_buffer_size + + + + + + + + + + size_t(* + size_t(* D3dInterfaceTable::get_update_buffer_pitch) (d3d::ResUpdateBuffer *rub) + )(d3d::ResUpdateBuffer *rub) + get_update_buffer_pitch + + + + + + + + + + size_t(* + size_t(* D3dInterfaceTable::get_update_buffer_slice_pitch) (d3d::ResUpdateBuffer *rub) + )(d3d::ResUpdateBuffer *rub) + get_update_buffer_slice_pitch + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::update_texture_and_release_update_buffer) (d3d::ResUpdateBuffer *&src_rub) + )(d3d::ResUpdateBuffer *&src_rub) + update_texture_and_release_update_buffer + + + + + + + + + + void *(* + void*(* D3dInterfaceTable::get_native_surface) (BaseTexture *tex) + )(BaseTexture *tex) + get_native_surface + + + + + + + + + + bool(* + bool(* D3dInterfaceTable::start_capture) (const char *name, const char *savepath) + )(const char *name, const char *savepath) + start_capture + + + + + + + + + + void(* + void(* D3dInterfaceTable::stop_capture) () + )() + stop_capture + + + + + + + + + + ShaderLibrary(* + ShaderLibrary(* D3dInterfaceTable::create_shader_library) (const ShaderLibraryCreateInfo &slci) + )(const ShaderLibraryCreateInfo &slci) + create_shader_library + + + + + + + + + + void(* + void(* D3dInterfaceTable::destroy_shader_library) (ShaderLibrary library) + )(ShaderLibrary library) + destroy_shader_library + + + + + + + + + + DriverCode + DriverCode D3dInterfaceTable::driverCode + + driverCode + + + + + + + + + + const char * + const char* D3dInterfaceTable::driverName + + driverName + + + + + + + + + + const char * + const char* D3dInterfaceTable::driverVer + + driverVer + + + + + + + + + + const char * + const char* D3dInterfaceTable::deviceName + + deviceName + + + + + + + + + + Driver3dDesc + Driver3dDesc D3dInterfaceTable::drvDesc + + drvDesc + + + + + + + + + + + + uint32_t + uint32_t D3dInterfaceTable::register_bindless_sampler + (BaseTexture *texture) + register_bindless_sampler + + BaseTexture * + texture + + + + + + + + + + + uint32_t + uint32_t D3dInterfaceTable::register_bindless_sampler + (d3d::SamplerHandle sampler) + register_bindless_sampler + + d3d::SamplerHandle + sampler + + + + + + + + + + + Sbuffer * + Sbuffer* D3dInterfaceTable::create_vb + (int size_bytes, int flags, const char *name="") + create_vb + + int + size_bytes + + + int + flags + + + const char * + name + "" + + + + + + + + + + + BaseTexture * + BaseTexture* D3dInterfaceTable::create_tex + (TexImage32 *img, int w, int h, int flg, int levels, const char *stat_name=NULL) + create_tex + + TexImage32 * + img + + + int + w + + + int + h + + + int + flg + + + int + levels + + + const char * + stat_name + NULL + + + + + + + + + + + bool + bool D3dInterfaceTable::stretch_rect + (BaseTexture *src, BaseTexture *dst, RectInt *rsrc=NULL, RectInt *rdst=NULL) + stretch_rect + + BaseTexture * + src + + + BaseTexture * + dst + + + RectInt * + rsrc + NULL + + + RectInt * + rdst + NULL + + + + + + + + + + + bool + bool D3dInterfaceTable::setvsrc + (int stream, Sbuffer *vb, int stride_bytes) + setvsrc + + int + stream + + + Sbuffer * + vb + + + int + stride_bytes + + + + + + + + + + + BaseTexture * + BaseTexture* D3dInterfaceTable::create_cubetex + (int size, int flg, int levels, const char *stat_name=NULL) + create_cubetex + + int + size + + + int + flg + + + int + levels + + + const char * + stat_name + NULL + + + + + + + + + + + BaseTexture * + BaseTexture* D3dInterfaceTable::alias_tex + (BaseTexture *baseTexture, TexImage32 *img, int w, int h, int flg, int levels, const char *stat_name=NULL) + alias_tex + + BaseTexture * + baseTexture + + + TexImage32 * + img + + + int + w + + + int + h + + + int + flg + + + int + levels + + + const char * + stat_name + NULL + + + + + + + + + + + BaseTexture * + BaseTexture* D3dInterfaceTable::alias_cubetex + (BaseTexture *baseTexture, int size, int flg, int levels, const char *stat_name=NULL) + alias_cubetex + + BaseTexture * + baseTexture + + + int + size + + + int + flg + + + int + levels + + + const char * + stat_name + NULL + + + + + + + + + + + BaseTexture * + BaseTexture* D3dInterfaceTable::alias_voltex + (BaseTexture *baseTexture, int w, int h, int d, int flg, int levels, const char *stat_name=NULL) + alias_voltex + + BaseTexture * + baseTexture + + + int + w + + + int + h + + + int + d + + + int + flg + + + int + levels + + + const char * + stat_name + NULL + + + + + + + + + + + BaseTexture * + BaseTexture* D3dInterfaceTable::alias_array_tex + (BaseTexture *baseTexture, int w, int h, int d, int flg, int levels, const char *stat_name) + alias_array_tex + + BaseTexture * + baseTexture + + + int + w + + + int + h + + + int + d + + + int + flg + + + int + levels + + + const char * + stat_name + + + + + + + + + + + BaseTexture * + BaseTexture* D3dInterfaceTable::alias_cube_array_tex + (BaseTexture *baseTexture, int side, int d, int flg, int levels, const char *stat_name) + alias_cube_array_tex + + BaseTexture * + baseTexture + + + int + side + + + int + d + + + int + flg + + + int + levels + + + const char * + stat_name + + + + + + + + + + + bool + bool D3dInterfaceTable::set_render_target + () + set_render_target + + + + + + + + + + bool + bool D3dInterfaceTable::set_render_target + (int ri, BaseTexture *tex, int fc, int level) + set_render_target + + int + ri + + + BaseTexture * + tex + + + int + fc + + + int + level + + + + + + + + + + + bool + bool D3dInterfaceTable::set_render_target + (int rt_index, BaseTexture *tex, int level) + set_render_target + + int + rt_index + + + BaseTexture * + tex + + + int + level + + + + + + + + + + + bool + bool D3dInterfaceTable::set_render_target + (const Driver3dRenderTarget &rt) + set_render_target + + const Driver3dRenderTarget & + rt + + + + + + + + + + + bool + bool D3dInterfaceTable::set_depth + (BaseTexture *tex, DepthAccess access) + set_depth + + BaseTexture * + tex + + + DepthAccess + access + + + + + + + + + + + bool + bool D3dInterfaceTable::set_depth + (BaseTexture *tex, int layer, DepthAccess access) + set_depth + + BaseTexture * + tex + + + int + layer + + + DepthAccess + access + + + + + + + + + + + bool + bool D3dInterfaceTable::settm + (int which, const Matrix44 *tm) + settm + + int + which + + + const Matrix44 * + tm + + + + + + + + + + + bool + bool D3dInterfaceTable::settm + (int which, const TMatrix &tm) + settm + + int + which + + + const TMatrix & + tm + + + + + + + + + + + void + void D3dInterfaceTable::settm + (int which, const mat44f &tm) + settm + + int + which + + + const mat44f & + tm + + + + + + + + + + + bool + bool D3dInterfaceTable::gettm + (int which, Matrix44 *out_tm) + gettm + + int + which + + + Matrix44 * + out_tm + + + + + + + + + + + bool + bool D3dInterfaceTable::gettm + (int which, TMatrix &out_tm) + gettm + + int + which + + + TMatrix & + out_tm + + + + + + + + + + + void + void D3dInterfaceTable::gettm + (int which, mat44f &out_tm) + gettm + + int + which + + + mat44f & + out_tm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + shaderModel + + + raytrace + + + issues + + + caps + + + + + + + get_resource_heap_group_properties + + + get_resource_allocation_properties + + + create_ib + create_sbuffer + create_vb_0 + place_buffer_in_resource_heap + + + drvDesc + get_driver_desc + + + driverCode + + + get_texture_tiling_info + + + alias_array_tex_0 + alias_cube_array_tex_0 + alias_cubetex_0 + alias_tex_0 + alias_voltex_0 + alloc_ddsx_tex + create_array_tex + create_cube_array_tex + create_cubetex_0 + create_ddsx_tex + ... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D3dInterfaceTableactivate_buffer + D3dInterfaceTableactivate_texture + D3dInterfaceTablealias_array_tex + D3dInterfaceTablealias_array_tex_0 + D3dInterfaceTablealias_cube_array_tex + D3dInterfaceTablealias_cube_array_tex_0 + D3dInterfaceTablealias_cubetex + D3dInterfaceTablealias_cubetex_0 + D3dInterfaceTablealias_tex + D3dInterfaceTablealias_tex_0 + D3dInterfaceTablealias_voltex + D3dInterfaceTablealias_voltex_0 + D3dInterfaceTablealloc_ddsx_tex + D3dInterfaceTableallocate_bindless_resource_range + D3dInterfaceTableallocate_update_buffer_for_tex + D3dInterfaceTableallocate_update_buffer_for_tex_region + D3dInterfaceTableallow_render_pass_target_load + D3dInterfaceTablebegin_conditional_render + D3dInterfaceTablebegin_render_pass + D3dInterfaceTablebegin_survey + D3dInterfaceTablebeginEvent + D3dInterfaceTablecalcglobtm_0 + D3dInterfaceTablecalcglobtm_1 + D3dInterfaceTablecalcglobtm_2 + D3dInterfaceTablecalcglobtm_3 + D3dInterfaceTablecalcproj_0 + D3dInterfaceTablecalcproj_1 + D3dInterfaceTablecapture_screen + D3dInterfaceTablechange_screen_aspect_ratio + D3dInterfaceTablecheck_cubetexformat + D3dInterfaceTablecheck_texformat + D3dInterfaceTablecheck_voltexformat + D3dInterfaceTableclear_render_states + D3dInterfaceTableclear_rt + D3dInterfaceTableclear_rwbuff + D3dInterfaceTableclear_rwbufi + D3dInterfaceTableclear_rwtexf + D3dInterfaceTableclear_rwtexi + D3dInterfaceTableclearview + D3dInterfaceTablecopy_from_current_render_target + D3dInterfaceTablecreate_array_tex + D3dInterfaceTablecreate_cube_array_tex + D3dInterfaceTablecreate_cubetex + D3dInterfaceTablecreate_cubetex_0 + D3dInterfaceTablecreate_ddsx_tex + D3dInterfaceTablecreate_event_query + D3dInterfaceTablecreate_ib + D3dInterfaceTablecreate_pixel_shader + D3dInterfaceTablecreate_pixel_shader_asm + D3dInterfaceTablecreate_pixel_shader_dagor + D3dInterfaceTablecreate_pixel_shader_hlsl + D3dInterfaceTablecreate_predicate + D3dInterfaceTablecreate_program_0 + D3dInterfaceTablecreate_program_1 + D3dInterfaceTablecreate_program_cs + D3dInterfaceTablecreate_render_pass + D3dInterfaceTablecreate_render_state + D3dInterfaceTablecreate_resource_heap + D3dInterfaceTablecreate_sbuffer + D3dInterfaceTablecreate_shader_library + D3dInterfaceTablecreate_tex + D3dInterfaceTablecreate_tex_0 + D3dInterfaceTablecreate_vb + D3dInterfaceTablecreate_vb_0 + D3dInterfaceTablecreate_vdecl + D3dInterfaceTablecreate_vertex_shader + D3dInterfaceTablecreate_vertex_shader_asm + D3dInterfaceTablecreate_vertex_shader_dagor + D3dInterfaceTablecreate_vertex_shader_hlsl + D3dInterfaceTablecreate_voltex + D3dInterfaceTabledeactivate_buffer + D3dInterfaceTabledeactivate_texture + D3dInterfaceTabledelete_pixel_shader + D3dInterfaceTabledelete_program + D3dInterfaceTabledelete_render_pass + D3dInterfaceTabledelete_vdecl + D3dInterfaceTabledelete_vertex_shader + D3dInterfaceTabledestroy_resource_heap + D3dInterfaceTabledestroy_shader_library + D3dInterfaceTabledevice_lost + D3dInterfaceTabledeviceName + D3dInterfaceTabledispatch + D3dInterfaceTabledispatch_indirect + D3dInterfaceTabledispatch_mesh + D3dInterfaceTabledispatch_mesh_indirect + D3dInterfaceTabledispatch_mesh_indirect_count + D3dInterfaceTabledraw_base + D3dInterfaceTabledraw_indexed_indirect + D3dInterfaceTabledraw_indirect + D3dInterfaceTabledraw_up + D3dInterfaceTabledrawind_base + D3dInterfaceTabledrawind_up + D3dInterfaceTabledriver_command + D3dInterfaceTabledriverCode + D3dInterfaceTabledriverName + D3dInterfaceTabledriverVer + D3dInterfaceTabledrvDesc + D3dInterfaceTableenable_vsync + D3dInterfaceTableend_conditional_render + D3dInterfaceTableend_fast_capture_screen + D3dInterfaceTableend_render_pass + D3dInterfaceTableend_survey + D3dInterfaceTableendEvent + D3dInterfaceTablefast_capture_screen + D3dInterfaceTablefree_bindless_resource_range + D3dInterfaceTablefree_predicate + D3dInterfaceTableget_backbuffer_tex + D3dInterfaceTableget_debug_program + D3dInterfaceTableget_device + D3dInterfaceTableget_device_driver_version + D3dInterfaceTableget_device_name + D3dInterfaceTableget_driver_desc + D3dInterfaceTableget_driver_name + D3dInterfaceTableget_event_query_status + D3dInterfaceTableget_last_error + D3dInterfaceTableget_last_error_code + D3dInterfaceTableget_max_sample_count + D3dInterfaceTableget_native_surface + D3dInterfaceTableget_program_vdecl + D3dInterfaceTableget_render_target + D3dInterfaceTableget_render_target_size + D3dInterfaceTableget_resource_allocation_properties + D3dInterfaceTableget_resource_heap_group_properties + D3dInterfaceTableget_screen_aspect_ratio + D3dInterfaceTableget_screen_size + D3dInterfaceTableget_secondary_backbuffer_tex + D3dInterfaceTableget_target_size + D3dInterfaceTableget_texformat_usage + D3dInterfaceTableget_texture_format + D3dInterfaceTableget_texture_format_str + D3dInterfaceTableget_texture_statistics + D3dInterfaceTableget_texture_tiling_info + D3dInterfaceTableget_update_buffer_addr_for_write + D3dInterfaceTableget_update_buffer_pitch + D3dInterfaceTableget_update_buffer_size + D3dInterfaceTableget_update_buffer_slice_pitch + D3dInterfaceTableget_video_modes_list + D3dInterfaceTableget_vrr_supported + D3dInterfaceTableget_vsync_enabled + D3dInterfaceTablegetglobtm + D3dInterfaceTablegetglobtm_vec + D3dInterfaceTablegetm2vtm + D3dInterfaceTablegetpersp + D3dInterfaceTablegettm + D3dInterfaceTablegettm + D3dInterfaceTablegettm + D3dInterfaceTablegettm_0 + D3dInterfaceTablegettm_1 + D3dInterfaceTablegettm_2 + D3dInterfaceTablegettm_cref + D3dInterfaceTablegetview + D3dInterfaceTablegpu_latency_wait + D3dInterfaceTableinsert_fence + D3dInterfaceTableinsert_wait_on_fence + D3dInterfaceTableis_in_device_reset_now + D3dInterfaceTableis_window_occluded + D3dInterfaceTableissame_texformat + D3dInterfaceTableissue_event_query + D3dInterfaceTablemap_tile_to_resource + D3dInterfaceTablemulti_draw_indexed_indirect + D3dInterfaceTablemulti_draw_indirect + D3dInterfaceTablenext_subpass + D3dInterfaceTableplace_buffer_in_resource_heap + D3dInterfaceTableplace_texture_in_resource_heap + D3dInterfaceTableregister_bindless_sampler + D3dInterfaceTableregister_bindless_sampler + D3dInterfaceTableregister_bindless_sampler_0 + D3dInterfaceTableregister_bindless_sampler_1 + D3dInterfaceTablerelease_capture_buffer + D3dInterfaceTablerelease_event_query + D3dInterfaceTablerelease_update_buffer + D3dInterfaceTablerequest_sampler + D3dInterfaceTablereset_device + D3dInterfaceTableresize_bindless_resource_range + D3dInterfaceTableresource_barrier + D3dInterfaceTableset_blend_factor + D3dInterfaceTableset_buffer + D3dInterfaceTableset_capture_full_frame_buffer + D3dInterfaceTableset_const + D3dInterfaceTableset_const_buffer + D3dInterfaceTableset_cs_constbuffer_size + D3dInterfaceTableset_depth + D3dInterfaceTableset_depth + D3dInterfaceTableset_depth_0 + D3dInterfaceTableset_depth_1 + D3dInterfaceTableset_depth_bounds + D3dInterfaceTableset_immediate_const + D3dInterfaceTableset_pixel_shader + D3dInterfaceTableset_present_wnd + D3dInterfaceTableset_program + D3dInterfaceTableset_render_state + D3dInterfaceTableset_render_target + D3dInterfaceTableset_render_target + D3dInterfaceTableset_render_target + D3dInterfaceTableset_render_target + D3dInterfaceTableset_render_target_0 + D3dInterfaceTableset_render_target_1 + D3dInterfaceTableset_render_target_2 + D3dInterfaceTableset_render_target_3 + D3dInterfaceTableset_rwbuffer + D3dInterfaceTableset_rwtex + D3dInterfaceTableset_sampler + D3dInterfaceTableset_srgb_backbuffer_write + D3dInterfaceTableset_tex + D3dInterfaceTableset_variable_rate_shading + D3dInterfaceTableset_variable_rate_shading_texture + D3dInterfaceTableset_vertex_shader + D3dInterfaceTableset_vs_constbuffer_size + D3dInterfaceTablesetgamma + D3dInterfaceTablesetglobtm + D3dInterfaceTablesetglobtm_vec + D3dInterfaceTablesetind + D3dInterfaceTablesetpersp + D3dInterfaceTablesetscissor + D3dInterfaceTablesetscissors + D3dInterfaceTablesetstencil + D3dInterfaceTablesettex + D3dInterfaceTablesettex_vs + D3dInterfaceTablesettm + D3dInterfaceTablesettm + D3dInterfaceTablesettm + D3dInterfaceTablesettm_0 + D3dInterfaceTablesettm_1 + D3dInterfaceTablesettm_2 + D3dInterfaceTablesetvdecl + D3dInterfaceTablesetview + D3dInterfaceTablesetviews + D3dInterfaceTablesetvsrc + D3dInterfaceTablesetvsrc_ex + D3dInterfaceTablesetwire + D3dInterfaceTableshould_use_compute_for_image_processing + D3dInterfaceTablestart_capture + D3dInterfaceTablestop_capture + D3dInterfaceTablestretch_rect + D3dInterfaceTablestretch_rect_0 + D3dInterfaceTableupdate_bindless_resource + D3dInterfaceTableupdate_bindless_resources_to_null + D3dInterfaceTableupdate_screen + D3dInterfaceTableupdate_texture_and_release_update_buffer + D3dInterfaceTablevalidatepersp + D3dInterfaceTablewait_for_async_present + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_d3d_reset_queue.xml b/breathe/doxygen/d3dAPI/xml/struct_d3d_reset_queue.xml new file mode 100644 index 000000000..f2d68b400 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_d3d_reset_queue.xml @@ -0,0 +1,205 @@ + + + + D3dResetQueue + + + void(* + typedef void(* D3dResetQueue::reset_func) (bool full_reset) + )(bool full_reset) + reset_func + + + + + + + + + + + + const D3dResetQueue * + const D3dResetQueue* D3dResetQueue::next + + next + = nullptr + + + + + + + + + + reset_func + reset_func D3dResetQueue::func + + func + = nullptr + + + + + + + + + + const char * + const char* D3dResetQueue::name + + name + = nullptr + + + + + + + + + + + + D3dResetQueue * + D3dResetQueue* D3dResetQueue::tailBeforeReset + + tailBeforeReset + + + + + + + + + + D3dResetQueue * + D3dResetQueue * D3dResetQueue::tailAfterReset + + tailAfterReset + + + + + + + + + + + + + D3dResetQueue::D3dResetQueue + (const char *n, reset_func f, bool add_to_after_reset) + D3dResetQueue + + const char * + n + + + reset_func + f + + + bool + add_to_after_reset + + + + + + + + + + + + + void + static void D3dResetQueue::perform_reset_queue + (const D3dResetQueue *q, bool full_reset) + perform_reset_queue + + const D3dResetQueue * + q + + + bool + full_reset + + + + + + + + + + + void + static void D3dResetQueue::perform_before_reset + (bool full_reset) + perform_before_reset + + bool + full_reset + + + + + + + + + + + void + static void D3dResetQueue::perform_after_reset + (bool full_reset) + perform_after_reset + + bool + full_reset + + + + + + + + + + + + + + + + + + + + next + tailAfterReset + tailBeforeReset + + + + + + D3dResetQueueD3dResetQueue + D3dResetQueuefunc + D3dResetQueuename + D3dResetQueuenext + D3dResetQueueperform_after_reset + D3dResetQueueperform_before_reset + D3dResetQueueperform_reset_queue + D3dResetQueuereset_func + D3dResetQueuetailAfterReset + D3dResetQueuetailBeforeReset + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_debug_converter.xml b/breathe/doxygen/d3dAPI/xml/struct_debug_converter.xml new file mode 100644 index 000000000..8d5ad43cc --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_debug_converter.xml @@ -0,0 +1,18 @@ + + + + DebugConverter + + + typename T + + + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_debug_converter_3_01_d3_d_r_e_s_i_d_01_4.xml b/breathe/doxygen/d3dAPI/xml/struct_debug_converter_3_01_d3_d_r_e_s_i_d_01_4.xml new file mode 100644 index 000000000..8f11799cb --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_debug_converter_3_01_d3_d_r_e_s_i_d_01_4.xml @@ -0,0 +1,35 @@ + + + + DebugConverter< D3DRESID > + + + + + unsigned + static unsigned DebugConverter< D3DRESID >::getDebugType + (const D3DRESID &v) + getDebugType + + const D3DRESID & + v + + + + + + + + + + + + + + + + + DebugConverter< D3DRESID >getDebugType + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_debug_converter_3_01d3d_1_1shadermodel_1_1_version_01_4.xml b/breathe/doxygen/d3dAPI/xml/struct_debug_converter_3_01d3d_1_1shadermodel_1_1_version_01_4.xml new file mode 100644 index 000000000..568bf74a0 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_debug_converter_3_01d3d_1_1shadermodel_1_1_version_01_4.xml @@ -0,0 +1,35 @@ + + + + DebugConverter< d3d::shadermodel::Version > + + + + + unsigned int + static unsigned int DebugConverter< d3d::shadermodel::Version >::getDebugType + (const d3d::shadermodel::Version &version) + getDebugType + + const d3d::shadermodel::Version & + version + + + + + + + + + + + + + + + + + DebugConverter< d3d::shadermodel::Version >getDebugType + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_debug_converter_3_01d3d_1_1shadermodel_1_1_version_constant_3_01_major_00_01_minor_01_4_01_4.xml b/breathe/doxygen/d3dAPI/xml/struct_debug_converter_3_01d3d_1_1shadermodel_1_1_version_constant_3_01_major_00_01_minor_01_4_01_4.xml new file mode 100644 index 000000000..2f9fa1afd --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_debug_converter_3_01d3d_1_1shadermodel_1_1_version_constant_3_01_major_00_01_minor_01_4_01_4.xml @@ -0,0 +1,45 @@ + + + + DebugConverter< d3d::shadermodel::VersionConstant< Major, Minor > > + + + unsigned + Major + Major + + + unsigned + Minor + Minor + + + + + unsigned int + static unsigned int DebugConverter< d3d::shadermodel::VersionConstant< Major, Minor > >::getDebugType + (const d3d::shadermodel::VersionConstant< Major, Minor > &version) + getDebugType + + const d3d::shadermodel::VersionConstant< Major, Minor > & + version + + + + + + + + + + + + + + + + + DebugConverter< d3d::shadermodel::VersionConstant< Major, Minor > >getDebugType + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_debug_converter_3_01d3d_1_1shadermodel_1_1_version_with_name_01_4.xml b/breathe/doxygen/d3dAPI/xml/struct_debug_converter_3_01d3d_1_1shadermodel_1_1_version_with_name_01_4.xml new file mode 100644 index 000000000..aff0a09cb --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_debug_converter_3_01d3d_1_1shadermodel_1_1_version_with_name_01_4.xml @@ -0,0 +1,35 @@ + + + + DebugConverter< d3d::shadermodel::VersionWithName > + + + + + const char * + static const char* DebugConverter< d3d::shadermodel::VersionWithName >::getDebugType + (const d3d::shadermodel::VersionWithName &version) + getDebugType + + const d3d::shadermodel::VersionWithName & + version + + + + + + + + + + + + + + + + + DebugConverter< d3d::shadermodel::VersionWithName >getDebugType + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_android.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_android.xml new file mode 100644 index 000000000..c12baaf80 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_android.xml @@ -0,0 +1,876 @@ + + + + DeviceDriverCapabilitiesAndroid + DeviceDriverCapabilitiesBase + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasDepthReadOnly + + hasDepthReadOnly + = true + +Constant true. + + +Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource. DeviceDriverCapabilitiesBase::hasDepthReadOnly + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasStructuredBuffers + + hasStructuredBuffers + = true + +Constant true. + + +Indicates that the device driver supports structured buffer types. DeviceDriverCapabilitiesBase::hasStructuredBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasNoOverwriteOnShaderResourceBuffers + + hasNoOverwriteOnShaderResourceBuffers + = true + +Constant true. + + +Indicates that the device driver supports locking of structured buffers with the no-overwrite method. DeviceDriverCapabilitiesBase::hasNoOverwriteOnShaderResourceBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasForcedSamplerCount + + hasForcedSamplerCount + = false + +Constant false. + + +Indicates that the device driver supports forced multi-sample count during raster phase. DeviceDriverCapabilitiesBase::hasForcedSamplerCount + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasVolMipMap + + hasVolMipMap + = true + +Constant true. + + +Indicates that the device driver supports mipmaps for vol (eg 3D) textures. DeviceDriverCapabilitiesBase::hasVolMipMap + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasAsyncCompute + + hasAsyncCompute + = false + +Constant false. + + +Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable. DeviceDriverCapabilitiesBase::hasAsyncCompute + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasOcclusionQuery + + hasOcclusionQuery + = false + +Constant true. + + +Indicates that the device driver supports occlusion queries. DeviceDriverCapabilitiesBase::hasOcclusionQuery + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasConstBufferOffset + + hasConstBufferOffset + = false + +Constant false. + + +Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer. DeviceDriverCapabilitiesBase::hasConstBufferOffset + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasAsyncCopy + + hasAsyncCopy + = true + +Constant true. + + +Indicates that the device driver supports asynchronously issued copy operations. DeviceDriverCapabilitiesBase::hasAsyncCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasReadMultisampledDepth + + hasReadMultisampledDepth + = true + +Constant true. + + +Indicates that the device driver supports reading from multi-sampled depth stencil targets. DeviceDriverCapabilitiesBase::hasReadMultisampledDepth + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasGather4 + + hasGather4 + = true + +Constant true. + + +Indicates that the device driver supports gather intrinsic in shaders. DeviceDriverCapabilitiesBase::hasGather4 + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasAlphaCoverage + + hasAlphaCoverage + = true + +Constant true. + + +Indicates that the device driver supports the alpha to coverage raster feature. DeviceDriverCapabilitiesBase::hasAlphaCoverage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasNVApi + + hasNVApi + = false + +Constant false. + + +Indicates that the device driver has detected that the Nvidia driver API is available for the render device. DeviceDriverCapabilitiesBase::hasNVApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasATIApi + + hasATIApi + = false + +Constant false. + + +Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device. DeviceDriverCapabilitiesBase::hasATIApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasVariableRateShading + + hasVariableRateShading + = false + +Constant false. + + +Indicates that the device driver supports basic per draw shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShading + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasVariableRateShadingTexture + + hasVariableRateShadingTexture + = false + +Constant false. + + +Indicates that the device driver supports shading rate textures as a source of shading rate information. DeviceDriverCapabilitiesBase::hasVariableRateShadingTexture + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasVariableRateShadingShaderOutput + + hasVariableRateShadingShaderOutput + = false + +Constant false. + + +Indicates that the device driver supports shader generated shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShadingShaderOutput + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasVariableRateShadingCombiners + + hasVariableRateShadingCombiners + = false + +Constant false. + + +Indicates that the device driver supports combiners for variable rate shading to select the final shading rate. DeviceDriverCapabilitiesBase::hasVariableRateShadingCombiners + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasVariableRateShadingBy4 + + hasVariableRateShadingBy4 + = false + +Constant false. + + +Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction. DeviceDriverCapabilitiesBase::hasVariableRateShadingBy4 + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasAliasedTextures + + hasAliasedTextures + = false + +Constant false. + + +Indicates that the device driver supports creation of aliased textures. DeviceDriverCapabilitiesBase::hasAliasedTextures + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasBufferOverlapCopy + + hasBufferOverlapCopy + = false + +Constant false. + + +Indicates that the device driver supports overlapping buffer copies. DeviceDriverCapabilitiesBase::hasBufferOverlapCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasBufferOverlapRegionsCopy + + hasBufferOverlapRegionsCopy + = false + +Constant false. + + +Indicates that the device driver uses region based copies when overlapping copies are executed. DeviceDriverCapabilitiesBase::hasBufferOverlapRegionsCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasResourceCopyConversion + + hasResourceCopyConversion + = true + +Constant true. + + +Indicates that the device driver supports copy of textures of different but compatible formats. DeviceDriverCapabilitiesBase::hasResourceCopyConversion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasShader64BitIntegerResources + + hasShader64BitIntegerResources + = false + +Constant false. + + +Indicates that the device driver supports 64 bit integers shader resource types. DeviceDriverCapabilitiesBase::hasShader64BitIntegerResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasNativeRenderPassSubPasses + + hasNativeRenderPassSubPasses + = true + +Constant true. + + +Indicates that the device driver is not emulating render sup-passes. DeviceDriverCapabilitiesBase::hasNativeRenderPassSubPasses + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasTiled2DResources + + hasTiled2DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 2D textures. DeviceDriverCapabilitiesBase::hasTiled2DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasTiled3DResources + + hasTiled3DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 3D textures;. DeviceDriverCapabilitiesBase::hasTiled3DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasTiledSafeResourcesAccess + + hasTiledSafeResourcesAccess + = false + +Constant false. + + +Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored. DeviceDriverCapabilitiesBase::hasTiledSafeResourcesAccess + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasTiledMemoryAliasing + + hasTiledMemoryAliasing + = false + +Constant false. + + +Indicates that the device driver supports memory aliasing of multiple tiles. DeviceDriverCapabilitiesBase::hasTiledMemoryAliasing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasDLSS + + hasDLSS + = false + +Constant false. + + +Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling. DeviceDriverCapabilitiesBase::hasDLSS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasXESS + + hasXESS + = false + +Constant false. + + +Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling. DeviceDriverCapabilitiesBase::hasXESS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasDrawID + + hasDrawID + = true + +Constant true. + + +Indicates that the device driver supports draw id in shaders. DeviceDriverCapabilitiesBase::hasDrawID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasMeshShader + + hasMeshShader + = false + +Constant false. + + +Indicates that the device driver supports the mesh shader pipeline. DeviceDriverCapabilitiesBase::hasMeshShader + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasBasicViewInstancing + + hasBasicViewInstancing + = false + +Constant false. + + +Indicates that the device driver supports basic view instancing. DeviceDriverCapabilitiesBase::hasBasicViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasOptimizedViewInstancing + + hasOptimizedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has some optimizations for view instanced rendering. DeviceDriverCapabilitiesBase::hasOptimizedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasAcceleratedViewInstancing + + hasAcceleratedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has hardware acceleration to natively support view instanced rendering. DeviceDriverCapabilitiesBase::hasAcceleratedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasStereoExpansion + + hasStereoExpansion + = false + +Constant false. + + +Indicates that the device driver supports stereo render expansion. DeviceDriverCapabilitiesBase::hasStereoExpansion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasIndirectSupport + + hasIndirectSupport + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support indirect calls. DeviceDriverCapabilitiesBase::hasIndirectSupport + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasCompareSampler + + hasCompareSampler + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support comparison samplers. DeviceDriverCapabilitiesBase::hasCompareSampler + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasUAVOnEveryStage + + hasUAVOnEveryStage + = true + +Constant true. + + +Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders. DeviceDriverCapabilitiesBase::hasUAVOnEveryStage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::hasBaseVertexSupport + + hasBaseVertexSupport + = true + +Constant true. + + +Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex. DeviceDriverCapabilitiesBase::hasBaseVertexSupport + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesAndroid::castingFullyTypedFormatsSupported + + castingFullyTypedFormatsSupported + = false + +Constant false. + + +Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12) DeviceDriverCapabilitiesBase::castingFullyTypedFormatsSupported + + + + + + + + + +Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for Android. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverCapabilitiesAndroidcastingFullyTypedFormatsSupported + DeviceDriverCapabilitiesAndroidhasAcceleratedViewInstancing + DeviceDriverCapabilitiesAndroidhasAliasedTextures + DeviceDriverCapabilitiesAndroidhasAlphaCoverage + DeviceDriverCapabilitiesAndroidhasAnisotropicFilter + DeviceDriverCapabilitiesAndroidhasAsyncCompute + DeviceDriverCapabilitiesAndroidhasAsyncCopy + DeviceDriverCapabilitiesAndroidhasATIApi + DeviceDriverCapabilitiesAndroidhasBaseVertexSupport + DeviceDriverCapabilitiesAndroidhasBasicViewInstancing + DeviceDriverCapabilitiesAndroidhasBindless + DeviceDriverCapabilitiesAndroidhasBufferOverlapCopy + DeviceDriverCapabilitiesAndroidhasBufferOverlapRegionsCopy + DeviceDriverCapabilitiesAndroidhasCompareSampler + DeviceDriverCapabilitiesAndroidhasConditionalRender + DeviceDriverCapabilitiesAndroidhasConservativeRassterization + DeviceDriverCapabilitiesAndroidhasConstBufferOffset + DeviceDriverCapabilitiesAndroidhasDepthBoundsTest + DeviceDriverCapabilitiesAndroidhasDepthReadOnly + DeviceDriverCapabilitiesAndroidhasDLSS + DeviceDriverCapabilitiesAndroidhasDrawID + DeviceDriverCapabilitiesAndroidhasForcedSamplerCount + DeviceDriverCapabilitiesAndroidhasGather4 + DeviceDriverCapabilitiesAndroidhasGeometryIndexInRayAccelerationStructure + DeviceDriverCapabilitiesAndroidhasIndirectRayDispatch + DeviceDriverCapabilitiesAndroidhasIndirectSupport + DeviceDriverCapabilitiesAndroidhasInstanceID + DeviceDriverCapabilitiesAndroidhasLazyMemory + DeviceDriverCapabilitiesAndroidhasMeshShader + DeviceDriverCapabilitiesAndroidhasNativeRayTracePipelineExpansion + DeviceDriverCapabilitiesAndroidhasNativeRenderPassSubPasses + DeviceDriverCapabilitiesAndroidhasNoOverwriteOnShaderResourceBuffers + DeviceDriverCapabilitiesAndroidhasNVApi + DeviceDriverCapabilitiesAndroidhasOcclusionQuery + DeviceDriverCapabilitiesAndroidhasOptimizedViewInstancing + DeviceDriverCapabilitiesAndroidhasQuadTessellation + DeviceDriverCapabilitiesAndroidhasRayAccelerationStructure + DeviceDriverCapabilitiesAndroidhasRayDispatch + DeviceDriverCapabilitiesAndroidhasRayQuery + DeviceDriverCapabilitiesAndroidhasReadMultisampledDepth + DeviceDriverCapabilitiesAndroidhasRenderPassDepthResolve + DeviceDriverCapabilitiesAndroidhasResourceCopyConversion + DeviceDriverCapabilitiesAndroidhasResourceHeaps + DeviceDriverCapabilitiesAndroidhasShader64BitIntegerResources + DeviceDriverCapabilitiesAndroidhasShaderFloat16Support + DeviceDriverCapabilitiesAndroidhasSkipPrimitiveTypeInRayTracingShaders + DeviceDriverCapabilitiesAndroidhasStereoExpansion + DeviceDriverCapabilitiesAndroidhasStructuredBuffers + DeviceDriverCapabilitiesAndroidhasTileBasedArchitecture + DeviceDriverCapabilitiesAndroidhasTiled2DResources + DeviceDriverCapabilitiesAndroidhasTiled3DResources + DeviceDriverCapabilitiesAndroidhasTiledMemoryAliasing + DeviceDriverCapabilitiesAndroidhasTiledSafeResourcesAccess + DeviceDriverCapabilitiesAndroidhasUAVOnEveryStage + DeviceDriverCapabilitiesAndroidhasUAVOnlyForcedSampleCount + DeviceDriverCapabilitiesAndroidhasVariableRateShading + DeviceDriverCapabilitiesAndroidhasVariableRateShadingBy4 + DeviceDriverCapabilitiesAndroidhasVariableRateShadingCombiners + DeviceDriverCapabilitiesAndroidhasVariableRateShadingShaderOutput + DeviceDriverCapabilitiesAndroidhasVariableRateShadingTexture + DeviceDriverCapabilitiesAndroidhasVolMipMap + DeviceDriverCapabilitiesAndroidhasWaveOps + DeviceDriverCapabilitiesAndroidhasWellSupportedIndirect + DeviceDriverCapabilitiesAndroidhasXESS + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_base.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_base.xml new file mode 100644 index 000000000..d8d8faa82 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_base.xml @@ -0,0 +1,4481 @@ + + + + DeviceDriverCapabilitiesBase + DeviceDriverCapabilitiesAndroid + DeviceDriverCapabilitiesIOS + DeviceDriverCapabilitiesLinux + DeviceDriverCapabilitiesMacOSX + DeviceDriverCapabilitiesNintendoSwitch + DeviceDriverCapabilitiesPS4 + DeviceDriverCapabilitiesTVOS + DeviceDriverCapabilitiesWindows + DeviceDriverCapabilitiesXboxOne + dag_consts.h + + + bool + bool DeviceDriverCapabilitiesBase::hasAnisotropicFilter + + hasAnisotropicFilter + 1 + +Indicates that the device driver supports anisotropic filtering of textures. + + +Devices without support will silently treat any value for anisotropic filtering as 1.0. +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant true. + + +tvOS +Constant true. + + +Nintendo Switch +Constant true. + + +Android +Runtime determined. + + +macOS +Constant true. + + +Linux +Constant true. + + +Windows +Constant true. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasDepthReadOnly + + hasDepthReadOnly + 1 + +Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Constant false. + + +Linux +Constant true. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasStructuredBuffers + + hasStructuredBuffers + 1 + +Indicates that the device driver supports structured buffer types. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant true. + + +tvOS +Constant true. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Constant true. + + +Linux +Constant true. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasNoOverwriteOnShaderResourceBuffers + + hasNoOverwriteOnShaderResourceBuffers + 1 + +Indicates that the device driver supports locking of structured buffers with the no-overwrite method. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant true. + + +tvOS +Constant true. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Constant true. + + +Linux +Constant true. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasForcedSamplerCount + + hasForcedSamplerCount + 1 + +Indicates that the device driver supports forced multi-sample count during raster phase. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasVolMipMap + + hasVolMipMap + 1 + +Indicates that the device driver supports mipmaps for vol (eg 3D) textures. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant true. + + +tvOS +Constant true. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Constant true. + + +Linux +Constant true. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasAsyncCompute + + hasAsyncCompute + 1 + +Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Runtime determined. + + +PlayStation 5 +Runtime determined. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasOcclusionQuery + + hasOcclusionQuery + 1 + +Indicates that the device driver supports occlusion queries. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant true. + + +tvOS +Constant true. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Constant true. + + +Linux +Constant true. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasConstBufferOffset + + hasConstBufferOffset + 1 + +Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+Some drivers without support could support this feature, but do not implement it yet. + +
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasDepthBoundsTest + + hasDepthBoundsTest + 1 + +Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant true. + + +Android +Runtime determined. + + +macOS +Constant false. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasConditionalRender + + hasConditionalRender + 1 + +Indicates that the device driver supports conditional rendering. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Runtime determined. + + +Android +Runtime determined. + + +macOS +Constant false. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasResourceCopyConversion + + hasResourceCopyConversion + 1 + +Indicates that the device driver supports copy of textures of different but compatible formats. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant true. + + +tvOS +Constant true. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Constant true. + + +Linux +Constant true. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasAsyncCopy + + hasAsyncCopy + 1 + +Indicates that the device driver supports asynchronously issued copy operations. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Constant true. + + +Linux +Constant true. + + +Windows +Constant true. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasReadMultisampledDepth + + hasReadMultisampledDepth + 1 + +Indicates that the device driver supports reading from multi-sampled depth stencil targets. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant true. + + +tvOS +Constant true. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Constant true. + + +Linux +Constant true. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasInstanceID + + hasInstanceID + 1 + +Indicates that the device driver supports instance id system variable in shaders. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant true. + + +tvOS +Constant true. + + +Nintendo Switch +Constant true. + + +Android +Runtime determined. + + +macOS +Constant true. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasConservativeRassterization + + hasConservativeRassterization + 1 + +Indicates that the device driver supports conservative rastering. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Runtime determined. + + +macOS +Constant false. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasQuadTessellation + + hasQuadTessellation + 1 + +Indicates that the device driver supports quad tessellation. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Runtime determined. + + +macOS +Constant false. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasGather4 + + hasGather4 + 1 + +Indicates that the device driver supports gather intrinsic in shaders. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant true. + + +tvOS +Constant true. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Constant true. + + +Linux +Constant true. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasAlphaCoverage + + hasAlphaCoverage + 1 + +Indicates that the device driver supports the alpha to coverage raster feature. + + +TodoCandidate for removal if situation for PS4/5 is clarified, there it seems to be not implemented. +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant true. + + +tvOS +Constant true. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Constant true. + + +Linux +Constant true. + + +Windows +Constant true. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasWellSupportedIndirect + + hasWellSupportedIndirect + 1 + +Indicates that the device driver supports indirect drawing. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant true. + + +Android +Runtime determined. + + +macOS +Constant false. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasBindless + + hasBindless + 1 + +Indicates that the device driver supports the bindless API and resource access in shaders. + + +TodoMay need to split into multiple caps as some drivers do not support buffers. +BugNintendo Switch is experimental support and so is not a constant cap yet. + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Runtime determined. + + +Android +Runtime determined. + + +macOS +Runtime determined. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasNVApi + + hasNVApi + 1 + +Indicates that the device driver has detected that the Nvidia driver API is available for the render device. + + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasATIApi + + hasATIApi + 1 + +Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device. + + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasVariableRateShading + + hasVariableRateShading + 1 + +Indicates that the device driver supports basic per draw shading rates. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasVariableRateShadingTexture + + hasVariableRateShadingTexture + 1 + +Indicates that the device driver supports shading rate textures as a source of shading rate information. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasVariableRateShadingShaderOutput + + hasVariableRateShadingShaderOutput + 1 + +Indicates that the device driver supports shader generated shading rates. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasVariableRateShadingCombiners + + hasVariableRateShadingCombiners + 1 + +Indicates that the device driver supports combiners for variable rate shading to select the final shading rate. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasVariableRateShadingBy4 + + hasVariableRateShadingBy4 + 1 + +Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasAliasedTextures + + hasAliasedTextures + 1 + +Indicates that the device driver supports creation of aliased textures. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasResourceHeaps + + hasResourceHeaps + 1 + +Indicates that the device driver supports the resource heap API. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Indicates that the device driver supports the resource heap API. + + +PlayStation 5 +Indicates that the device driver supports the resource heap API. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Runtime determined. + + +macOS +Constant false. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasBufferOverlapCopy + + hasBufferOverlapCopy + 1 + +Indicates that the device driver supports overlapping buffer copies. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasBufferOverlapRegionsCopy + + hasBufferOverlapRegionsCopy + 1 + +Indicates that the device driver uses region based copies when overlapping copies are executed. + + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasUAVOnlyForcedSampleCount + + hasUAVOnlyForcedSampleCount + 1 + +Indicates that the device driver supports forced multisample count without render targets and only outputting to UAVs. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant true. + + +Android +Runtime determined. + + +macOS +Runtime determined. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+BugThere is no way of querying the number of samples that are supported. So the Vulkan driver, for example, assumes 1, 2, 4 and 8 samples to be required. +
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasShader64BitIntegerResources + + hasShader64BitIntegerResources + 1 + +Indicates that the device driver supports 64 bit integers shader resource types. + + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasNativeRenderPassSubPasses + + hasNativeRenderPassSubPasses + 1 + +Indicates that the device driver is not emulating render sup-passes. + + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Constant false. + + +Linux +Constant true. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasTiled2DResources + + hasTiled2DResources + 1 + +Indicates that the device driver supports tiled 2D textures. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasTiled3DResources + + hasTiled3DResources + 1 + +Indicates that the device driver supports tiled 3D textures;. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasTiledSafeResourcesAccess + + hasTiledSafeResourcesAccess + 1 + +Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasTiledMemoryAliasing + + hasTiledMemoryAliasing + 1 + +Indicates that the device driver supports memory aliasing of multiple tiles. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasDLSS + + hasDLSS + 1 + +Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling. + + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasXESS + + hasXESS + 1 + +Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling. + + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasDrawID + + hasDrawID + 1 + +Indicates that the device driver supports draw id in shaders. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Runtime determined. + + +Linux +Constant true. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasMeshShader + + hasMeshShader + 1 + +Indicates that the device driver supports the mesh shader pipeline. + + +The mesh shader pipeline is a one or two shader stage that replaces the vertex shader based pre raster portion of the graphics pipeline. Mesh shaders are compute shaders that generate vertices and indices which form primitives like triangles or lines. +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasBasicViewInstancing + + hasBasicViewInstancing + 1 + +Indicates that the device driver supports basic view instancing. + + +View instancing may be implemented with replicating render commands for each view. +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasOptimizedViewInstancing + + hasOptimizedViewInstancing + 1 + +Indicates that the device driver has some optimizations for view instanced rendering. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasAcceleratedViewInstancing + + hasAcceleratedViewInstancing + 1 + +Indicates that the device driver has hardware acceleration to natively support view instanced rendering. + + + +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasRenderPassDepthResolve + + hasRenderPassDepthResolve + 1 + +Indicates that the device driver can resolve multi-sampled depth stencil render targets in a render pass. + + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Runtime determined. + + +tvOS +Runtime determined. + + +Nintendo Switch +Runtime determined. + + +Android +Runtime determined. + + +macOS +Runtime determined. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasStereoExpansion + + hasStereoExpansion + 1 + +Indicates that the device driver supports stereo render expansion. + + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant true. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Constant false. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Constant false. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasTileBasedArchitecture + + hasTileBasedArchitecture + 1 + +Indicates that the device driver architecture is known to be a tile renderer. + + +Tile renderers bin raster work into tiles and execute rastering and pixel shaders tile by tile to reduce bandwidth to off chip memory (RAM). Certain optimizations favor regular rasterers over tiled rasterers and vice versa. +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant true. + + +tvOS +Constant true. + + +Nintendo Switch +Constant false. + + +Android +Runtime determined. + + +macOS +Constant false. + + +Linux +Indicates that the device driver architecture is known to be a tile renderer. + + +Windows +Indicates that the device driver architecture is known to be a tile renderer. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasLazyMemory + + hasLazyMemory + 1 + +Indicates that the device driver supports lazily allocated memory. + + +Supported on most TBDR GPUs, allocates memory by on-chip tile/framebuffer memory for transient render targets. +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Runtime determined. + + +macOS +Constant false. + + +Linux +Constant false. + + +Windows +Constant false. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasIndirectSupport + + hasIndirectSupport + 1 + +Indicates that the device driver set when hw doesn't support indirect calls. + + +This is at least true on some of the older iOS hardware (A8) which can't do either drawIndirect nor dispatchIndirect +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Runtime determined. + + +tvOS +Runtime determined. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Constant true. + + +Linux +Constant true. + + +Windows +Constant true. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasCompareSampler + + hasCompareSampler + 1 + +Indicates that the device driver set when hw doesn't support comparison samplers. + + +This is at least true on some of the older iOS hardware (A8) which can only do constexp inline samplers and we don't wanna open this can of worm +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Runtime determined. + + +tvOS +Runtime determined. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Constant true. + + +Linux +Constant true. + + +Windows +Constant true. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasShaderFloat16Support + + hasShaderFloat16Support + 1 + +Indicates that the device driver supports 16-bit floating-point types in shaders for arithmetic operations. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +DeviceDriverCapabilitiesXboxOne::"hasShaderFloat16Support" "Xbox One" + + + +DeviceDriverCapabilitiesXboxOne::"hasShaderFloat16Support" "Xbox Series X / S" + + + +DeviceDriverCapabilitiesPS4::"hasShaderFloat16Support" "PlayStation 4" + + + +DeviceDriverCapabilitiesPS4::"hasShaderFloat16Support" "PlayStation 5" + + + +DeviceDriverCapabilitiesIOS::"hasShaderFloat16Support" "iOS" + + + +DeviceDriverCapabilitiesTVOS::"hasShaderFloat16Support" "tvOS" + + + +Nintendo Switch +Runtime determined. + + +Android +Runtime determined. + + +DeviceDriverCapabilitiesMacOSX::"hasShaderFloat16Support" "macOS" + + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasUAVOnEveryStage + + hasUAVOnEveryStage + 1 + +Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +DeviceDriverCapabilitiesXboxOne::"hasUAVOnEveryStage" "Xbox One" + + + +DeviceDriverCapabilitiesXboxOne::"hasUAVOnEveryStage" "Xbox Series X / S" + + + +DeviceDriverCapabilitiesPS4::"hasUAVOnEveryStage" "PlayStation 4" + + + +DeviceDriverCapabilitiesPS4::"hasUAVOnEveryStage" "PlayStation 5" + + + +DeviceDriverCapabilitiesIOS::"hasUAVOnEveryStage" "iOS" + + + +DeviceDriverCapabilitiesTVOS::"hasUAVOnEveryStage" "tvOS" + + + +DeviceDriverCapabilitiesNintendoSwitch::"hasUAVOnEveryStage" "Nintendo Switch" + + + +DeviceDriverCapabilitiesAndroid::"hasUAVOnEveryStage" "Android" + + + +DeviceDriverCapabilitiesMacOSX::"hasUAVOnEveryStage" "macOS" + + + +DeviceDriverCapabilitiesLinux::"hasUAVOnEveryStage" "Linux" + + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasRayAccelerationStructure + + hasRayAccelerationStructure + 1 + +Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support. + + +tvOS +Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support. + + +Nintendo Switch +Constant false. + + +Android +Runtime determined. + + +macOS +Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasRayQuery + + hasRayQuery + 1 + +Indicates that the device driver supports ray queries ("inline ray tracing") in any shader stage. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Runtime determined. + + +tvOS +Runtime determined. + + +Nintendo Switch +Constant false. + + +Android +Runtime determined. + + +macOS +Runtime determined. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasRayDispatch + + hasRayDispatch + 1 + +Indicates that the device driver supports ray dispatch with its own ray tracing shader stage. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Constant false. + + +tvOS +Constant false. + + +Nintendo Switch +Constant false. + + +Android +Runtime determined. + + +macOS +Constant false. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasIndirectRayDispatch + + hasIndirectRayDispatch + 1 + +Indicates that the device driver supports indirect dispatch for dispatch rays. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Runtime determined. + + +tvOS +Runtime determined. + + +Nintendo Switch +Constant false. + + +Android +Runtime determined. + + +macOS +Runtime determined. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasGeometryIndexInRayAccelerationStructure + + hasGeometryIndexInRayAccelerationStructure + 1 + +Indicates that the device driver supports geometry index information in acceleration structures in ray tracing / ray query shaders. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Runtime determined. + + +tvOS +Runtime determined. + + +Nintendo Switch +Constant false. + + +Android +Runtime determined. + + +macOS +Runtime determined. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasSkipPrimitiveTypeInRayTracingShaders + + hasSkipPrimitiveTypeInRayTracingShaders + 1 + +Indicates that the device driver supports masking flags in shaders to ignore triangle or procedural geometry during traversal. + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Runtime determined. + + +tvOS +Runtime determined. + + +Nintendo Switch +Constant false. + + +Android +Runtime determined. + + +macOS +Runtime determined. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasBaseVertexSupport + + hasBaseVertexSupport + 1 + +Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex. + + +This feature is not supported by older iOS hardware (such as A8 chips) +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Runtime determined. + + +tvOS +Runtime determined. + + +Nintendo Switch +Constant true. + + +Android +Constant true. + + +macOS +Runtime determined. + + +Linux +Constant true. + + +Windows +Constant true. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::castingFullyTypedFormatsSupported + + castingFullyTypedFormatsSupported + 1 + +Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12) + + +Some drivers without support could support this feature, but do not implement it yet. + + +Platform +Value + + +Xbox One +Constant false. + + +Xbox Series X / S +Constant false. + + +PlayStation 4 +Constant false. + + +PlayStation 5 +Constant false. + + +iOS +Runtime determined. + + +tvOS +Runtime determined. + + +Nintendo Switch +Constant false. + + +Android +Runtime determined. + + +macOS +Runtime determined. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+
+
+
+
+ + + +
+ + bool + bool DeviceDriverCapabilitiesBase::hasNativeRayTracePipelineExpansion + + hasNativeRayTracePipelineExpansion + 1 + + + + + + + + + + bool + bool DeviceDriverCapabilitiesBase::hasWaveOps + + hasWaveOps + 1 + +Indicates that the device driver supports wave ops. + + + +"xbone", "scarlett", "ps4", "ps5", "ios", "tvos", "nswitch", "android", "mac", "linux", "win32" should be one of the following +Platform +Value + + +Xbox One +Constant true. + + +Xbox Series X / S +Constant true. + + +PlayStation 4 +Constant true. + + +PlayStation 5 +Constant true. + + +iOS +Constant true. + + +tvOS +Constant true. + + +Nintendo Switch +Runtime determined. + + +Android +Runtime determined. + + +macOS +Constant true. + + +Linux +Runtime determined. + + +Windows +Runtime determined. + +
+supports waveOps
+
+
+
+
+
+ + + +
+
+ + + +A boolean bitfield that describes which optional features that are available with the used device / driver combination. See derived types for platform specific constant overrides. + +To add new capability indicators, you need to follow those steps: +Add the new cap indicator boolean bit to the end of this structure. +For platforms where this cap is always be available or not available, add a static constexpr boolean with the same name with the platform specific derived structures. This will hide the boolean bitfield for the target platform and the constant will be used instead. +Add the documentation to all the platform specific constant overrides. Use existing documentation as a basis. Here are the basics: +Use \briefconstcap{"const value", DeviceDriverCapabilitiesBase::"cap name"} to generate the basic description for the overriding value. +"const value" should be replaced with the constant value of this override. +"cap name" should be the name of the cap. + + +Use \NYI to indicate that the driver could support this feature, but do not implemented it yet. + + +Add documentation to the cap indicator boolean bit of this struct. +Use \capbrief "brief cap description" to generate the brief description of this cap. This alias will start the brief with the standard introducing phrase "Indicates that the device driver". +Use \platformtable{"cap name","xbone","scarlett","ps4","ps5","ios","tvos","nswitch","android","mac","linux","win32"} to generate the platform value table. +"cap name" should be the name of the cap. +"xbone", "scarlett", "ps4", "ps5", "ios", "tvos", "nswitch", "android", "mac", "linux", "win32" should be one of the following values: +c for constant, the actual value is pulled from the description generated by \briefconstcap for the cosponsoring platform. +a for alias, this works only for "scarlett" and "ps5", for others this is the same as c. It uses the value of "xbone" and "ps4", for "scarlett" and "ps5" respectively. This is needed when a const value is specified for "xbone" or "ps4" platform and inherited by the "scarlett" or "ps5" platform, to correctly display the inherited value. +r for runtime determined. This is for platforms where there is no constant override and it is determined by the active driver of the platform. + + +Ensure that there are no spaces around the platform specific values (c, a or r), otherwise the alias expansion will result in broken statements and documentation. + + +Use \someNYI to indicate that there are drivers that could support this feature, but do not implement it yet. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverCapabilitiesBasecastingFullyTypedFormatsSupported + DeviceDriverCapabilitiesBasehasAcceleratedViewInstancing + DeviceDriverCapabilitiesBasehasAliasedTextures + DeviceDriverCapabilitiesBasehasAlphaCoverage + DeviceDriverCapabilitiesBasehasAnisotropicFilter + DeviceDriverCapabilitiesBasehasAsyncCompute + DeviceDriverCapabilitiesBasehasAsyncCopy + DeviceDriverCapabilitiesBasehasATIApi + DeviceDriverCapabilitiesBasehasBaseVertexSupport + DeviceDriverCapabilitiesBasehasBasicViewInstancing + DeviceDriverCapabilitiesBasehasBindless + DeviceDriverCapabilitiesBasehasBufferOverlapCopy + DeviceDriverCapabilitiesBasehasBufferOverlapRegionsCopy + DeviceDriverCapabilitiesBasehasCompareSampler + DeviceDriverCapabilitiesBasehasConditionalRender + DeviceDriverCapabilitiesBasehasConservativeRassterization + DeviceDriverCapabilitiesBasehasConstBufferOffset + DeviceDriverCapabilitiesBasehasDepthBoundsTest + DeviceDriverCapabilitiesBasehasDepthReadOnly + DeviceDriverCapabilitiesBasehasDLSS + DeviceDriverCapabilitiesBasehasDrawID + DeviceDriverCapabilitiesBasehasForcedSamplerCount + DeviceDriverCapabilitiesBasehasGather4 + DeviceDriverCapabilitiesBasehasGeometryIndexInRayAccelerationStructure + DeviceDriverCapabilitiesBasehasIndirectRayDispatch + DeviceDriverCapabilitiesBasehasIndirectSupport + DeviceDriverCapabilitiesBasehasInstanceID + DeviceDriverCapabilitiesBasehasLazyMemory + DeviceDriverCapabilitiesBasehasMeshShader + DeviceDriverCapabilitiesBasehasNativeRayTracePipelineExpansion + DeviceDriverCapabilitiesBasehasNativeRenderPassSubPasses + DeviceDriverCapabilitiesBasehasNoOverwriteOnShaderResourceBuffers + DeviceDriverCapabilitiesBasehasNVApi + DeviceDriverCapabilitiesBasehasOcclusionQuery + DeviceDriverCapabilitiesBasehasOptimizedViewInstancing + DeviceDriverCapabilitiesBasehasQuadTessellation + DeviceDriverCapabilitiesBasehasRayAccelerationStructure + DeviceDriverCapabilitiesBasehasRayDispatch + DeviceDriverCapabilitiesBasehasRayQuery + DeviceDriverCapabilitiesBasehasReadMultisampledDepth + DeviceDriverCapabilitiesBasehasRenderPassDepthResolve + DeviceDriverCapabilitiesBasehasResourceCopyConversion + DeviceDriverCapabilitiesBasehasResourceHeaps + DeviceDriverCapabilitiesBasehasShader64BitIntegerResources + DeviceDriverCapabilitiesBasehasShaderFloat16Support + DeviceDriverCapabilitiesBasehasSkipPrimitiveTypeInRayTracingShaders + DeviceDriverCapabilitiesBasehasStereoExpansion + DeviceDriverCapabilitiesBasehasStructuredBuffers + DeviceDriverCapabilitiesBasehasTileBasedArchitecture + DeviceDriverCapabilitiesBasehasTiled2DResources + DeviceDriverCapabilitiesBasehasTiled3DResources + DeviceDriverCapabilitiesBasehasTiledMemoryAliasing + DeviceDriverCapabilitiesBasehasTiledSafeResourcesAccess + DeviceDriverCapabilitiesBasehasUAVOnEveryStage + DeviceDriverCapabilitiesBasehasUAVOnlyForcedSampleCount + DeviceDriverCapabilitiesBasehasVariableRateShading + DeviceDriverCapabilitiesBasehasVariableRateShadingBy4 + DeviceDriverCapabilitiesBasehasVariableRateShadingCombiners + DeviceDriverCapabilitiesBasehasVariableRateShadingShaderOutput + DeviceDriverCapabilitiesBasehasVariableRateShadingTexture + DeviceDriverCapabilitiesBasehasVolMipMap + DeviceDriverCapabilitiesBasehasWaveOps + DeviceDriverCapabilitiesBasehasWellSupportedIndirect + DeviceDriverCapabilitiesBasehasXESS + +
+
diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_i_o_s.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_i_o_s.xml new file mode 100644 index 000000000..d83e388c0 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_i_o_s.xml @@ -0,0 +1,1104 @@ + + + + DeviceDriverCapabilitiesIOS + DeviceDriverCapabilitiesBase + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasAnisotropicFilter + + hasAnisotropicFilter + = true + +Constant true. + + +Indicates that the device driver supports anisotropic filtering of textures. DeviceDriverCapabilitiesBase::hasAnisotropicFilter + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasDepthReadOnly + + hasDepthReadOnly + = false + +Constant false. + + +Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource. DeviceDriverCapabilitiesBase::hasDepthReadOnly + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasStructuredBuffers + + hasStructuredBuffers + = true + +Constant true. + + +Indicates that the device driver supports structured buffer types. DeviceDriverCapabilitiesBase::hasStructuredBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasNoOverwriteOnShaderResourceBuffers + + hasNoOverwriteOnShaderResourceBuffers + = true + +Constant true. + + +Indicates that the device driver supports locking of structured buffers with the no-overwrite method. DeviceDriverCapabilitiesBase::hasNoOverwriteOnShaderResourceBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasForcedSamplerCount + + hasForcedSamplerCount + = false + +Constant false. + + +Indicates that the device driver supports forced multi-sample count during raster phase. DeviceDriverCapabilitiesBase::hasForcedSamplerCount + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasVolMipMap + + hasVolMipMap + = true + +Constant true. + + +Indicates that the device driver supports mipmaps for vol (eg 3D) textures. DeviceDriverCapabilitiesBase::hasVolMipMap + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasAsyncCompute + + hasAsyncCompute + = false + +Constant false. + + +Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable. DeviceDriverCapabilitiesBase::hasAsyncCompute + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasOcclusionQuery + + hasOcclusionQuery + = true + +Constant true. + + +Indicates that the device driver supports occlusion queries. DeviceDriverCapabilitiesBase::hasOcclusionQuery + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasConstBufferOffset + + hasConstBufferOffset + = false + +Constant false. + + +Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer. DeviceDriverCapabilitiesBase::hasConstBufferOffset + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasDepthBoundsTest + + hasDepthBoundsTest + = false + +Constant false. + + +Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing. DeviceDriverCapabilitiesBase::hasDepthBoundsTest + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasConditionalRender + + hasConditionalRender + = false + +Constant false. + + +Indicates that the device driver supports conditional rendering. DeviceDriverCapabilitiesBase::hasConditionalRender + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasResourceCopyConversion + + hasResourceCopyConversion + = true + +Constant true. + + +Indicates that the device driver supports copy of textures of different but compatible formats. DeviceDriverCapabilitiesBase::hasResourceCopyConversion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasAsyncCopy + + hasAsyncCopy + = false + +Constant false. + + +Indicates that the device driver supports asynchronously issued copy operations. DeviceDriverCapabilitiesBase::hasAsyncCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasReadMultisampledDepth + + hasReadMultisampledDepth + = true + +Constant true. + + +Indicates that the device driver supports reading from multi-sampled depth stencil targets. DeviceDriverCapabilitiesBase::hasReadMultisampledDepth + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasInstanceID + + hasInstanceID + = true + +Constant true. + + +Indicates that the device driver supports instance id system variable in shaders. DeviceDriverCapabilitiesBase::hasInstanceID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasConservativeRassterization + + hasConservativeRassterization + = false + +Constant false. + + +Indicates that the device driver supports conservative rastering. DeviceDriverCapabilitiesBase::hasConservativeRassterization + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasQuadTessellation + + hasQuadTessellation + = false + +Constant false. + + +Indicates that the device driver supports quad tessellation. DeviceDriverCapabilitiesBase::hasQuadTessellation + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasGather4 + + hasGather4 + = true + +Constant true. + + +Indicates that the device driver supports gather intrinsic in shaders. DeviceDriverCapabilitiesBase::hasGather4 + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasAlphaCoverage + + hasAlphaCoverage + = true + +Constant true. + + +Indicates that the device driver supports the alpha to coverage raster feature. DeviceDriverCapabilitiesBase::hasAlphaCoverage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasWellSupportedIndirect + + hasWellSupportedIndirect + = false + +Constant false. + + +Indicates that the device driver supports indirect drawing. DeviceDriverCapabilitiesBase::hasWellSupportedIndirect + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasBindless + + hasBindless + = false + +Constant false. + + +Indicates that the device driver supports the bindless API and resource access in shaders. DeviceDriverCapabilitiesBase::hasBindless + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasNVApi + + hasNVApi + = false + +Constant false. + + +Indicates that the device driver has detected that the Nvidia driver API is available for the render device. DeviceDriverCapabilitiesBase::hasNVApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasATIApi + + hasATIApi + = false + +Constant false. + + +Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device. DeviceDriverCapabilitiesBase::hasATIApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasVariableRateShading + + hasVariableRateShading + = false + +Constant false. + + +Indicates that the device driver supports basic per draw shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShading + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasVariableRateShadingTexture + + hasVariableRateShadingTexture + = false + +Constant false. + + +Indicates that the device driver supports shading rate textures as a source of shading rate information. DeviceDriverCapabilitiesBase::hasVariableRateShadingTexture + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasVariableRateShadingShaderOutput + + hasVariableRateShadingShaderOutput + = false + +Constant false. + + +Indicates that the device driver supports shader generated shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShadingShaderOutput + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasVariableRateShadingCombiners + + hasVariableRateShadingCombiners + = false + +Constant false. + + +Indicates that the device driver supports combiners for variable rate shading to select the final shading rate. DeviceDriverCapabilitiesBase::hasVariableRateShadingCombiners + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasVariableRateShadingBy4 + + hasVariableRateShadingBy4 + = false + +Constant false. + + +Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction. DeviceDriverCapabilitiesBase::hasVariableRateShadingBy4 + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasAliasedTextures + + hasAliasedTextures + = false + +Constant false. + + +Indicates that the device driver supports creation of aliased textures. DeviceDriverCapabilitiesBase::hasAliasedTextures + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasResourceHeaps + + hasResourceHeaps + = false + +Constant false. + + +Indicates that the device driver supports the resource heap API. DeviceDriverCapabilitiesBase::hasResourceHeaps + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasBufferOverlapCopy + + hasBufferOverlapCopy + = false + +Constant false. + + +Indicates that the device driver supports overlapping buffer copies. DeviceDriverCapabilitiesBase::hasBufferOverlapCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasBufferOverlapRegionsCopy + + hasBufferOverlapRegionsCopy + = false + +Constant false. + + +Indicates that the device driver uses region based copies when overlapping copies are executed. DeviceDriverCapabilitiesBase::hasBufferOverlapRegionsCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasUAVOnlyForcedSampleCount + + hasUAVOnlyForcedSampleCount + = false + +Constant false. + + +Indicates that the device driver supports forced multisample count without render targets and only outputting to UAVs. DeviceDriverCapabilitiesBase::hasUAVOnlyForcedSampleCount + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasShader64BitIntegerResources + + hasShader64BitIntegerResources + = false + +Constant false. + + +Indicates that the device driver supports 64 bit integers shader resource types. DeviceDriverCapabilitiesBase::hasShader64BitIntegerResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasNativeRenderPassSubPasses + + hasNativeRenderPassSubPasses + = true + +Constant false. + + +Indicates that the device driver is not emulating render sup-passes. DeviceDriverCapabilitiesBase::hasNativeRenderPassSubPasses + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasTiled2DResources + + hasTiled2DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 2D textures. DeviceDriverCapabilitiesBase::hasTiled2DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasTiled3DResources + + hasTiled3DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 3D textures;. DeviceDriverCapabilitiesBase::hasTiled3DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasTiledSafeResourcesAccess + + hasTiledSafeResourcesAccess + = false + +Constant false. + + +Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored. DeviceDriverCapabilitiesBase::hasTiledSafeResourcesAccess + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasTiledMemoryAliasing + + hasTiledMemoryAliasing + = false + +Constant false. + + +Indicates that the device driver supports memory aliasing of multiple tiles. DeviceDriverCapabilitiesBase::hasTiledMemoryAliasing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasDLSS + + hasDLSS + = false + +Constant false. + + +Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling. DeviceDriverCapabilitiesBase::hasDLSS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasXESS + + hasXESS + = false + +Constant false. + + +Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling. DeviceDriverCapabilitiesBase::hasXESS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasDrawID + + hasDrawID + = false + +Constant false. + + +Indicates that the device driver supports draw id in shaders. DeviceDriverCapabilitiesBase::hasDrawID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasMeshShader + + hasMeshShader + = false + +Constant false. + + +Indicates that the device driver supports the mesh shader pipeline. DeviceDriverCapabilitiesBase::hasMeshShader + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasBasicViewInstancing + + hasBasicViewInstancing + = false + +Constant false. + + +Indicates that the device driver supports basic view instancing. DeviceDriverCapabilitiesBase::hasBasicViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasOptimizedViewInstancing + + hasOptimizedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has some optimizations for view instanced rendering. DeviceDriverCapabilitiesBase::hasOptimizedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasAcceleratedViewInstancing + + hasAcceleratedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has hardware acceleration to natively support view instanced rendering. DeviceDriverCapabilitiesBase::hasAcceleratedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasStereoExpansion + + hasStereoExpansion + = false + +Constant false. + + +Indicates that the device driver supports stereo render expansion. DeviceDriverCapabilitiesBase::hasStereoExpansion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasTileBasedArchitecture + + hasTileBasedArchitecture + = true + +Constant true. + + +Indicates that the device driver architecture is known to be a tile renderer. DeviceDriverCapabilitiesBase::hasTileBasedArchitecture + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasLazyMemory + + hasLazyMemory + = false + +Constant false. + + +Indicates that the device driver supports lazily allocated memory. DeviceDriverCapabilitiesBase::hasLazyMemory + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasShaderFloat16Support + + hasShaderFloat16Support + = true + +Constant true. + + +Indicates that the device driver supports 16-bit floating-point types in shaders for arithmetic operations. DeviceDriverCapabilitiesBase::hasShaderFloat16Support + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasUAVOnEveryStage + + hasUAVOnEveryStage + = true + +Constant true. + + +Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders. DeviceDriverCapabilitiesBase::hasUAVOnEveryStage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasRayDispatch + + hasRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports ray dispatch with its own ray tracing shader stage. DeviceDriverCapabilitiesBase::hasRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasIndirectRayDispatch + + hasIndirectRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports indirect dispatch for dispatch rays. DeviceDriverCapabilitiesBase::hasIndirectRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::castingFullyTypedFormatsSupported + + castingFullyTypedFormatsSupported + = false + +Constant false. + + +Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12) DeviceDriverCapabilitiesBase::castingFullyTypedFormatsSupported + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesIOS::hasWaveOps + + hasWaveOps + = true + +Constant true. + + +Indicates that the device driver supports wave ops. DeviceDriverCapabilitiesBase::hasWaveOps + + + + + + + + + +Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for iOS. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverCapabilitiesIOScastingFullyTypedFormatsSupported + DeviceDriverCapabilitiesIOShasAcceleratedViewInstancing + DeviceDriverCapabilitiesIOShasAliasedTextures + DeviceDriverCapabilitiesIOShasAlphaCoverage + DeviceDriverCapabilitiesIOShasAnisotropicFilter + DeviceDriverCapabilitiesIOShasAsyncCompute + DeviceDriverCapabilitiesIOShasAsyncCopy + DeviceDriverCapabilitiesIOShasATIApi + DeviceDriverCapabilitiesIOShasBaseVertexSupport + DeviceDriverCapabilitiesIOShasBasicViewInstancing + DeviceDriverCapabilitiesIOShasBindless + DeviceDriverCapabilitiesIOShasBufferOverlapCopy + DeviceDriverCapabilitiesIOShasBufferOverlapRegionsCopy + DeviceDriverCapabilitiesIOShasCompareSampler + DeviceDriverCapabilitiesIOShasConditionalRender + DeviceDriverCapabilitiesIOShasConservativeRassterization + DeviceDriverCapabilitiesIOShasConstBufferOffset + DeviceDriverCapabilitiesIOShasDepthBoundsTest + DeviceDriverCapabilitiesIOShasDepthReadOnly + DeviceDriverCapabilitiesIOShasDLSS + DeviceDriverCapabilitiesIOShasDrawID + DeviceDriverCapabilitiesIOShasForcedSamplerCount + DeviceDriverCapabilitiesIOShasGather4 + DeviceDriverCapabilitiesIOShasGeometryIndexInRayAccelerationStructure + DeviceDriverCapabilitiesIOShasIndirectRayDispatch + DeviceDriverCapabilitiesIOShasIndirectSupport + DeviceDriverCapabilitiesIOShasInstanceID + DeviceDriverCapabilitiesIOShasLazyMemory + DeviceDriverCapabilitiesIOShasMeshShader + DeviceDriverCapabilitiesIOShasNativeRayTracePipelineExpansion + DeviceDriverCapabilitiesIOShasNativeRenderPassSubPasses + DeviceDriverCapabilitiesIOShasNoOverwriteOnShaderResourceBuffers + DeviceDriverCapabilitiesIOShasNVApi + DeviceDriverCapabilitiesIOShasOcclusionQuery + DeviceDriverCapabilitiesIOShasOptimizedViewInstancing + DeviceDriverCapabilitiesIOShasQuadTessellation + DeviceDriverCapabilitiesIOShasRayAccelerationStructure + DeviceDriverCapabilitiesIOShasRayDispatch + DeviceDriverCapabilitiesIOShasRayQuery + DeviceDriverCapabilitiesIOShasReadMultisampledDepth + DeviceDriverCapabilitiesIOShasRenderPassDepthResolve + DeviceDriverCapabilitiesIOShasResourceCopyConversion + DeviceDriverCapabilitiesIOShasResourceHeaps + DeviceDriverCapabilitiesIOShasShader64BitIntegerResources + DeviceDriverCapabilitiesIOShasShaderFloat16Support + DeviceDriverCapabilitiesIOShasSkipPrimitiveTypeInRayTracingShaders + DeviceDriverCapabilitiesIOShasStereoExpansion + DeviceDriverCapabilitiesIOShasStructuredBuffers + DeviceDriverCapabilitiesIOShasTileBasedArchitecture + DeviceDriverCapabilitiesIOShasTiled2DResources + DeviceDriverCapabilitiesIOShasTiled3DResources + DeviceDriverCapabilitiesIOShasTiledMemoryAliasing + DeviceDriverCapabilitiesIOShasTiledSafeResourcesAccess + DeviceDriverCapabilitiesIOShasUAVOnEveryStage + DeviceDriverCapabilitiesIOShasUAVOnlyForcedSampleCount + DeviceDriverCapabilitiesIOShasVariableRateShading + DeviceDriverCapabilitiesIOShasVariableRateShadingBy4 + DeviceDriverCapabilitiesIOShasVariableRateShadingCombiners + DeviceDriverCapabilitiesIOShasVariableRateShadingShaderOutput + DeviceDriverCapabilitiesIOShasVariableRateShadingTexture + DeviceDriverCapabilitiesIOShasVolMipMap + DeviceDriverCapabilitiesIOShasWaveOps + DeviceDriverCapabilitiesIOShasWellSupportedIndirect + DeviceDriverCapabilitiesIOShasXESS + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_linux.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_linux.xml new file mode 100644 index 000000000..917704f5e --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_linux.xml @@ -0,0 +1,912 @@ + + + + DeviceDriverCapabilitiesLinux + DeviceDriverCapabilitiesBase + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasAnisotropicFilter + + hasAnisotropicFilter + = true + +Constant true. + + +Indicates that the device driver supports anisotropic filtering of textures. DeviceDriverCapabilitiesBase::hasAnisotropicFilter + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasDepthReadOnly + + hasDepthReadOnly + = true + +Constant true. + + +Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource. DeviceDriverCapabilitiesBase::hasDepthReadOnly + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasStructuredBuffers + + hasStructuredBuffers + = true + +Constant true. + + +Indicates that the device driver supports structured buffer types. DeviceDriverCapabilitiesBase::hasStructuredBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasNoOverwriteOnShaderResourceBuffers + + hasNoOverwriteOnShaderResourceBuffers + = true + +Constant true. + + +Indicates that the device driver supports locking of structured buffers with the no-overwrite method. DeviceDriverCapabilitiesBase::hasNoOverwriteOnShaderResourceBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasForcedSamplerCount + + hasForcedSamplerCount + = false + +Constant false. + + +Indicates that the device driver supports forced multi-sample count during raster phase. DeviceDriverCapabilitiesBase::hasForcedSamplerCount + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasVolMipMap + + hasVolMipMap + = true + +Constant true. + + +Indicates that the device driver supports mipmaps for vol (eg 3D) textures. DeviceDriverCapabilitiesBase::hasVolMipMap + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasReadMultisampledDepth + + hasReadMultisampledDepth + = true + +Constant true. + + +Indicates that the device driver supports reading from multi-sampled depth stencil targets. DeviceDriverCapabilitiesBase::hasReadMultisampledDepth + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasGather4 + + hasGather4 + = true + +Constant true. + + +Indicates that the device driver supports gather intrinsic in shaders. DeviceDriverCapabilitiesBase::hasGather4 + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasAlphaCoverage + + hasAlphaCoverage + = true + +Constant true. + + +Indicates that the device driver supports the alpha to coverage raster feature. DeviceDriverCapabilitiesBase::hasAlphaCoverage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasShader64BitIntegerResources + + hasShader64BitIntegerResources + = false + +Constant false. + + +Indicates that the device driver supports 64 bit integers shader resource types. DeviceDriverCapabilitiesBase::hasShader64BitIntegerResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasNativeRenderPassSubPasses + + hasNativeRenderPassSubPasses + = true + +Constant true. + + +Indicates that the device driver is not emulating render sup-passes. DeviceDriverCapabilitiesBase::hasNativeRenderPassSubPasses + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasTiled2DResources + + hasTiled2DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 2D textures. DeviceDriverCapabilitiesBase::hasTiled2DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasTiled3DResources + + hasTiled3DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 3D textures;. DeviceDriverCapabilitiesBase::hasTiled3DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasTiledSafeResourcesAccess + + hasTiledSafeResourcesAccess + = false + +Constant false. + + +Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored. DeviceDriverCapabilitiesBase::hasTiledSafeResourcesAccess + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasTiledMemoryAliasing + + hasTiledMemoryAliasing + = false + +Constant false. + + +Indicates that the device driver supports memory aliasing of multiple tiles. DeviceDriverCapabilitiesBase::hasTiledMemoryAliasing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasDLSS + + hasDLSS + = false + +Constant false. + + +Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling. DeviceDriverCapabilitiesBase::hasDLSS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasXESS + + hasXESS + = false + +Constant false. + + +Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling. DeviceDriverCapabilitiesBase::hasXESS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasDrawID + + hasDrawID + = true + +Constant true. + + +Indicates that the device driver supports draw id in shaders. DeviceDriverCapabilitiesBase::hasDrawID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasMeshShader + + hasMeshShader + = false + +Constant false. + + +Indicates that the device driver supports the mesh shader pipeline. DeviceDriverCapabilitiesBase::hasMeshShader + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasBasicViewInstancing + + hasBasicViewInstancing + = false + +Constant false. + + +Indicates that the device driver supports basic view instancing. DeviceDriverCapabilitiesBase::hasBasicViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasOptimizedViewInstancing + + hasOptimizedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has some optimizations for view instanced rendering. DeviceDriverCapabilitiesBase::hasOptimizedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasAcceleratedViewInstancing + + hasAcceleratedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has hardware acceleration to natively support view instanced rendering. DeviceDriverCapabilitiesBase::hasAcceleratedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasAsyncCompute + + hasAsyncCompute + = false + +Constant false. + + +Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable. DeviceDriverCapabilitiesBase::hasAsyncCompute + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasOcclusionQuery + + hasOcclusionQuery + = false + +Constant true. + + +Indicates that the device driver supports occlusion queries. DeviceDriverCapabilitiesBase::hasOcclusionQuery + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasNVApi + + hasNVApi + = false + +Constant false. + + +Indicates that the device driver has detected that the Nvidia driver API is available for the render device. DeviceDriverCapabilitiesBase::hasNVApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasATIApi + + hasATIApi + = false + +Constant false. + + +Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device. DeviceDriverCapabilitiesBase::hasATIApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasVariableRateShading + + hasVariableRateShading + = false + +Constant false. + + +Indicates that the device driver supports basic per draw shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShading + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasVariableRateShadingTexture + + hasVariableRateShadingTexture + = false + +Constant false. + + +Indicates that the device driver supports shading rate textures as a source of shading rate information. DeviceDriverCapabilitiesBase::hasVariableRateShadingTexture + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasVariableRateShadingShaderOutput + + hasVariableRateShadingShaderOutput + = false + +Constant false. + + +Indicates that the device driver supports shader generated shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShadingShaderOutput + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasVariableRateShadingCombiners + + hasVariableRateShadingCombiners + = false + +Constant false. + + +Indicates that the device driver supports combiners for variable rate shading to select the final shading rate. DeviceDriverCapabilitiesBase::hasVariableRateShadingCombiners + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasVariableRateShadingBy4 + + hasVariableRateShadingBy4 + = false + +Constant false. + + +Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction. DeviceDriverCapabilitiesBase::hasVariableRateShadingBy4 + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasAliasedTextures + + hasAliasedTextures + = false + +Constant false. + + +Indicates that the device driver supports creation of aliased textures. DeviceDriverCapabilitiesBase::hasAliasedTextures + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasBufferOverlapCopy + + hasBufferOverlapCopy + = false + +Constant false. + + +Indicates that the device driver supports overlapping buffer copies. DeviceDriverCapabilitiesBase::hasBufferOverlapCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasBufferOverlapRegionsCopy + + hasBufferOverlapRegionsCopy + = false + +Constant false. + + +Indicates that the device driver uses region based copies when overlapping copies are executed. DeviceDriverCapabilitiesBase::hasBufferOverlapRegionsCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasConstBufferOffset + + hasConstBufferOffset + = false + +Constant false. + + +Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer. DeviceDriverCapabilitiesBase::hasConstBufferOffset + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasAsyncCopy + + hasAsyncCopy + = true + +Constant true. + + +Indicates that the device driver supports asynchronously issued copy operations. DeviceDriverCapabilitiesBase::hasAsyncCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasResourceCopyConversion + + hasResourceCopyConversion + = true + +Constant true. + + +Indicates that the device driver supports copy of textures of different but compatible formats. DeviceDriverCapabilitiesBase::hasResourceCopyConversion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasStereoExpansion + + hasStereoExpansion + = false + +Constant false. + + +Indicates that the device driver supports stereo render expansion. DeviceDriverCapabilitiesBase::hasStereoExpansion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasLazyMemory + + hasLazyMemory + = false + +Constant false. + + +Indicates that the device driver supports lazily allocated memory. DeviceDriverCapabilitiesBase::hasLazyMemory + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasIndirectSupport + + hasIndirectSupport + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support indirect calls. DeviceDriverCapabilitiesBase::hasIndirectSupport + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasCompareSampler + + hasCompareSampler + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support comparison samplers. DeviceDriverCapabilitiesBase::hasCompareSampler + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasUAVOnEveryStage + + hasUAVOnEveryStage + = true + +Constant true. + + +Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders. DeviceDriverCapabilitiesBase::hasUAVOnEveryStage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::hasBaseVertexSupport + + hasBaseVertexSupport + = true + +Constant true. + + +Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex. DeviceDriverCapabilitiesBase::hasBaseVertexSupport + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesLinux::castingFullyTypedFormatsSupported + + castingFullyTypedFormatsSupported + = false + +Constant false. + + +Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12) DeviceDriverCapabilitiesBase::castingFullyTypedFormatsSupported + + + + + + + + + +Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for Linux. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverCapabilitiesLinuxcastingFullyTypedFormatsSupported + DeviceDriverCapabilitiesLinuxhasAcceleratedViewInstancing + DeviceDriverCapabilitiesLinuxhasAliasedTextures + DeviceDriverCapabilitiesLinuxhasAlphaCoverage + DeviceDriverCapabilitiesLinuxhasAnisotropicFilter + DeviceDriverCapabilitiesLinuxhasAsyncCompute + DeviceDriverCapabilitiesLinuxhasAsyncCopy + DeviceDriverCapabilitiesLinuxhasATIApi + DeviceDriverCapabilitiesLinuxhasBaseVertexSupport + DeviceDriverCapabilitiesLinuxhasBasicViewInstancing + DeviceDriverCapabilitiesLinuxhasBindless + DeviceDriverCapabilitiesLinuxhasBufferOverlapCopy + DeviceDriverCapabilitiesLinuxhasBufferOverlapRegionsCopy + DeviceDriverCapabilitiesLinuxhasCompareSampler + DeviceDriverCapabilitiesLinuxhasConditionalRender + DeviceDriverCapabilitiesLinuxhasConservativeRassterization + DeviceDriverCapabilitiesLinuxhasConstBufferOffset + DeviceDriverCapabilitiesLinuxhasDepthBoundsTest + DeviceDriverCapabilitiesLinuxhasDepthReadOnly + DeviceDriverCapabilitiesLinuxhasDLSS + DeviceDriverCapabilitiesLinuxhasDrawID + DeviceDriverCapabilitiesLinuxhasForcedSamplerCount + DeviceDriverCapabilitiesLinuxhasGather4 + DeviceDriverCapabilitiesLinuxhasGeometryIndexInRayAccelerationStructure + DeviceDriverCapabilitiesLinuxhasIndirectRayDispatch + DeviceDriverCapabilitiesLinuxhasIndirectSupport + DeviceDriverCapabilitiesLinuxhasInstanceID + DeviceDriverCapabilitiesLinuxhasLazyMemory + DeviceDriverCapabilitiesLinuxhasMeshShader + DeviceDriverCapabilitiesLinuxhasNativeRayTracePipelineExpansion + DeviceDriverCapabilitiesLinuxhasNativeRenderPassSubPasses + DeviceDriverCapabilitiesLinuxhasNoOverwriteOnShaderResourceBuffers + DeviceDriverCapabilitiesLinuxhasNVApi + DeviceDriverCapabilitiesLinuxhasOcclusionQuery + DeviceDriverCapabilitiesLinuxhasOptimizedViewInstancing + DeviceDriverCapabilitiesLinuxhasQuadTessellation + DeviceDriverCapabilitiesLinuxhasRayAccelerationStructure + DeviceDriverCapabilitiesLinuxhasRayDispatch + DeviceDriverCapabilitiesLinuxhasRayQuery + DeviceDriverCapabilitiesLinuxhasReadMultisampledDepth + DeviceDriverCapabilitiesLinuxhasRenderPassDepthResolve + DeviceDriverCapabilitiesLinuxhasResourceCopyConversion + DeviceDriverCapabilitiesLinuxhasResourceHeaps + DeviceDriverCapabilitiesLinuxhasShader64BitIntegerResources + DeviceDriverCapabilitiesLinuxhasShaderFloat16Support + DeviceDriverCapabilitiesLinuxhasSkipPrimitiveTypeInRayTracingShaders + DeviceDriverCapabilitiesLinuxhasStereoExpansion + DeviceDriverCapabilitiesLinuxhasStructuredBuffers + DeviceDriverCapabilitiesLinuxhasTileBasedArchitecture + DeviceDriverCapabilitiesLinuxhasTiled2DResources + DeviceDriverCapabilitiesLinuxhasTiled3DResources + DeviceDriverCapabilitiesLinuxhasTiledMemoryAliasing + DeviceDriverCapabilitiesLinuxhasTiledSafeResourcesAccess + DeviceDriverCapabilitiesLinuxhasUAVOnEveryStage + DeviceDriverCapabilitiesLinuxhasUAVOnlyForcedSampleCount + DeviceDriverCapabilitiesLinuxhasVariableRateShading + DeviceDriverCapabilitiesLinuxhasVariableRateShadingBy4 + DeviceDriverCapabilitiesLinuxhasVariableRateShadingCombiners + DeviceDriverCapabilitiesLinuxhasVariableRateShadingShaderOutput + DeviceDriverCapabilitiesLinuxhasVariableRateShadingTexture + DeviceDriverCapabilitiesLinuxhasVolMipMap + DeviceDriverCapabilitiesLinuxhasWaveOps + DeviceDriverCapabilitiesLinuxhasWellSupportedIndirect + DeviceDriverCapabilitiesLinuxhasXESS + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_mac_o_s_x.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_mac_o_s_x.xml new file mode 100644 index 000000000..dcd8cc2c3 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_mac_o_s_x.xml @@ -0,0 +1,1086 @@ + + + + DeviceDriverCapabilitiesMacOSX + DeviceDriverCapabilitiesBase + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasAnisotropicFilter + + hasAnisotropicFilter + = true + +Constant true. + + +Indicates that the device driver supports anisotropic filtering of textures. DeviceDriverCapabilitiesBase::hasAnisotropicFilter + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasDepthReadOnly + + hasDepthReadOnly + = false + +Constant false. + + +Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource. DeviceDriverCapabilitiesBase::hasDepthReadOnly + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasStructuredBuffers + + hasStructuredBuffers + = true + +Constant true. + + +Indicates that the device driver supports structured buffer types. DeviceDriverCapabilitiesBase::hasStructuredBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasNoOverwriteOnShaderResourceBuffers + + hasNoOverwriteOnShaderResourceBuffers + = true + +Constant true. + + +Indicates that the device driver supports locking of structured buffers with the no-overwrite method. DeviceDriverCapabilitiesBase::hasNoOverwriteOnShaderResourceBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasForcedSamplerCount + + hasForcedSamplerCount + = false + +Constant false. + + +Indicates that the device driver supports forced multi-sample count during raster phase. DeviceDriverCapabilitiesBase::hasForcedSamplerCount + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasVolMipMap + + hasVolMipMap + = true + +Constant true. + + +Indicates that the device driver supports mipmaps for vol (eg 3D) textures. DeviceDriverCapabilitiesBase::hasVolMipMap + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasAsyncCompute + + hasAsyncCompute + = false + +Constant false. + + +Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable. DeviceDriverCapabilitiesBase::hasAsyncCompute + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasOcclusionQuery + + hasOcclusionQuery + = true + +Constant true. + + +Indicates that the device driver supports occlusion queries. DeviceDriverCapabilitiesBase::hasOcclusionQuery + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasConstBufferOffset + + hasConstBufferOffset + = false + +Constant false. + + +Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer. DeviceDriverCapabilitiesBase::hasConstBufferOffset + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasAsyncCopy + + hasAsyncCopy + = true + +Constant true. + + +Indicates that the device driver supports asynchronously issued copy operations. DeviceDriverCapabilitiesBase::hasAsyncCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasDepthBoundsTest + + hasDepthBoundsTest + = false + +Constant false. + + +Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing. DeviceDriverCapabilitiesBase::hasDepthBoundsTest + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasReadMultisampledDepth + + hasReadMultisampledDepth + = true + +Constant true. + + +Indicates that the device driver supports reading from multi-sampled depth stencil targets. DeviceDriverCapabilitiesBase::hasReadMultisampledDepth + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasInstanceID + + hasInstanceID + = true + +Constant true. + + +Indicates that the device driver supports instance id system variable in shaders. DeviceDriverCapabilitiesBase::hasInstanceID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasConservativeRassterization + + hasConservativeRassterization + = false + +Constant false. + + +Indicates that the device driver supports conservative rastering. DeviceDriverCapabilitiesBase::hasConservativeRassterization + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasQuadTessellation + + hasQuadTessellation + = false + +Constant false. + + +Indicates that the device driver supports quad tessellation. DeviceDriverCapabilitiesBase::hasQuadTessellation + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasGather4 + + hasGather4 + = true + +Constant true. + + +Indicates that the device driver supports gather intrinsic in shaders. DeviceDriverCapabilitiesBase::hasGather4 + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasAlphaCoverage + + hasAlphaCoverage + = true + +Constant true. + + +Indicates that the device driver supports the alpha to coverage raster feature. DeviceDriverCapabilitiesBase::hasAlphaCoverage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasWellSupportedIndirect + + hasWellSupportedIndirect + = false + +Constant false. + + +Indicates that the device driver supports indirect drawing. DeviceDriverCapabilitiesBase::hasWellSupportedIndirect + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasNVApi + + hasNVApi + = false + +Constant false. + + +Indicates that the device driver has detected that the Nvidia driver API is available for the render device. DeviceDriverCapabilitiesBase::hasNVApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasATIApi + + hasATIApi + = false + +Constant false. + + +Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device. DeviceDriverCapabilitiesBase::hasATIApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasVariableRateShading + + hasVariableRateShading + = false + +Constant false. + + +Indicates that the device driver supports basic per draw shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShading + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasVariableRateShadingTexture + + hasVariableRateShadingTexture + = false + +Constant false. + + +Indicates that the device driver supports shading rate textures as a source of shading rate information. DeviceDriverCapabilitiesBase::hasVariableRateShadingTexture + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasVariableRateShadingShaderOutput + + hasVariableRateShadingShaderOutput + = false + +Constant false. + + +Indicates that the device driver supports shader generated shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShadingShaderOutput + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasVariableRateShadingCombiners + + hasVariableRateShadingCombiners + = false + +Constant false. + + +Indicates that the device driver supports combiners for variable rate shading to select the final shading rate. DeviceDriverCapabilitiesBase::hasVariableRateShadingCombiners + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasVariableRateShadingBy4 + + hasVariableRateShadingBy4 + = false + +Constant false. + + +Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction. DeviceDriverCapabilitiesBase::hasVariableRateShadingBy4 + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasAliasedTextures + + hasAliasedTextures + = false + +Constant false. + + +Indicates that the device driver supports creation of aliased textures. DeviceDriverCapabilitiesBase::hasAliasedTextures + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasResourceHeaps + + hasResourceHeaps + = false + +Constant false. + + +Indicates that the device driver supports the resource heap API. DeviceDriverCapabilitiesBase::hasResourceHeaps + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasBufferOverlapCopy + + hasBufferOverlapCopy + = false + +Constant false. + + +Indicates that the device driver supports overlapping buffer copies. DeviceDriverCapabilitiesBase::hasBufferOverlapCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasBufferOverlapRegionsCopy + + hasBufferOverlapRegionsCopy + = false + +Constant false. + + +Indicates that the device driver uses region based copies when overlapping copies are executed. DeviceDriverCapabilitiesBase::hasBufferOverlapRegionsCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasConditionalRender + + hasConditionalRender + = false + +Constant false. + + +Indicates that the device driver supports conditional rendering. DeviceDriverCapabilitiesBase::hasConditionalRender + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasResourceCopyConversion + + hasResourceCopyConversion + = true + +Constant true. + + +Indicates that the device driver supports copy of textures of different but compatible formats. DeviceDriverCapabilitiesBase::hasResourceCopyConversion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasShader64BitIntegerResources + + hasShader64BitIntegerResources + = false + +Constant false. + + +Indicates that the device driver supports 64 bit integers shader resource types. DeviceDriverCapabilitiesBase::hasShader64BitIntegerResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasNativeRenderPassSubPasses + + hasNativeRenderPassSubPasses + = true + +Constant false. + + +Indicates that the device driver is not emulating render sup-passes. DeviceDriverCapabilitiesBase::hasNativeRenderPassSubPasses + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasTiled2DResources + + hasTiled2DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 2D textures. DeviceDriverCapabilitiesBase::hasTiled2DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasTiled3DResources + + hasTiled3DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 3D textures;. DeviceDriverCapabilitiesBase::hasTiled3DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasTiledSafeResourcesAccess + + hasTiledSafeResourcesAccess + = false + +Constant false. + + +Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored. DeviceDriverCapabilitiesBase::hasTiledSafeResourcesAccess + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasTiledMemoryAliasing + + hasTiledMemoryAliasing + = false + +Constant false. + + +Indicates that the device driver supports memory aliasing of multiple tiles. DeviceDriverCapabilitiesBase::hasTiledMemoryAliasing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasDLSS + + hasDLSS + = false + +Constant false. + + +Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling. DeviceDriverCapabilitiesBase::hasDLSS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasXESS + + hasXESS + = false + +Constant false. + + +Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling. DeviceDriverCapabilitiesBase::hasXESS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasMeshShader + + hasMeshShader + = false + +Constant false. + + +Indicates that the device driver supports the mesh shader pipeline. DeviceDriverCapabilitiesBase::hasMeshShader + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasBasicViewInstancing + + hasBasicViewInstancing + = false + +Constant false. + + +Indicates that the device driver supports basic view instancing. DeviceDriverCapabilitiesBase::hasBasicViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasOptimizedViewInstancing + + hasOptimizedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has some optimizations for view instanced rendering. DeviceDriverCapabilitiesBase::hasOptimizedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasAcceleratedViewInstancing + + hasAcceleratedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has hardware acceleration to natively support view instanced rendering. DeviceDriverCapabilitiesBase::hasAcceleratedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasStereoExpansion + + hasStereoExpansion + = false + +Constant false. + + +Indicates that the device driver supports stereo render expansion. DeviceDriverCapabilitiesBase::hasStereoExpansion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasTileBasedArchitecture + + hasTileBasedArchitecture + = false + +Constant false. + + +Indicates that the device driver architecture is known to be a tile renderer. DeviceDriverCapabilitiesBase::hasTileBasedArchitecture + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasLazyMemory + + hasLazyMemory + = false + +Constant false. + + +Indicates that the device driver supports lazily allocated memory. DeviceDriverCapabilitiesBase::hasLazyMemory + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasIndirectSupport + + hasIndirectSupport + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support indirect calls. DeviceDriverCapabilitiesBase::hasIndirectSupport + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasCompareSampler + + hasCompareSampler + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support comparison samplers. DeviceDriverCapabilitiesBase::hasCompareSampler + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasShaderFloat16Support + + hasShaderFloat16Support + = false + +Constant false. + + +Indicates that the device driver supports 16-bit floating-point types in shaders for arithmetic operations. DeviceDriverCapabilitiesBase::hasShaderFloat16Support + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasUAVOnEveryStage + + hasUAVOnEveryStage + = true + +Constant true. + + +Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders. DeviceDriverCapabilitiesBase::hasUAVOnEveryStage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasRayDispatch + + hasRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports ray dispatch with its own ray tracing shader stage. DeviceDriverCapabilitiesBase::hasRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasIndirectRayDispatch + + hasIndirectRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports indirect dispatch for dispatch rays. DeviceDriverCapabilitiesBase::hasIndirectRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::castingFullyTypedFormatsSupported + + castingFullyTypedFormatsSupported + = false + +Constant false. + + +Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12) DeviceDriverCapabilitiesBase::castingFullyTypedFormatsSupported + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesMacOSX::hasWaveOps + + hasWaveOps + = true + +Constant true. + + +Indicates that the device driver supports wave ops. DeviceDriverCapabilitiesBase::hasWaveOps + + + + + + + + + +Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for macOS. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverCapabilitiesMacOSXcastingFullyTypedFormatsSupported + DeviceDriverCapabilitiesMacOSXhasAcceleratedViewInstancing + DeviceDriverCapabilitiesMacOSXhasAliasedTextures + DeviceDriverCapabilitiesMacOSXhasAlphaCoverage + DeviceDriverCapabilitiesMacOSXhasAnisotropicFilter + DeviceDriverCapabilitiesMacOSXhasAsyncCompute + DeviceDriverCapabilitiesMacOSXhasAsyncCopy + DeviceDriverCapabilitiesMacOSXhasATIApi + DeviceDriverCapabilitiesMacOSXhasBaseVertexSupport + DeviceDriverCapabilitiesMacOSXhasBasicViewInstancing + DeviceDriverCapabilitiesMacOSXhasBindless + DeviceDriverCapabilitiesMacOSXhasBufferOverlapCopy + DeviceDriverCapabilitiesMacOSXhasBufferOverlapRegionsCopy + DeviceDriverCapabilitiesMacOSXhasCompareSampler + DeviceDriverCapabilitiesMacOSXhasConditionalRender + DeviceDriverCapabilitiesMacOSXhasConservativeRassterization + DeviceDriverCapabilitiesMacOSXhasConstBufferOffset + DeviceDriverCapabilitiesMacOSXhasDepthBoundsTest + DeviceDriverCapabilitiesMacOSXhasDepthReadOnly + DeviceDriverCapabilitiesMacOSXhasDLSS + DeviceDriverCapabilitiesMacOSXhasDrawID + DeviceDriverCapabilitiesMacOSXhasForcedSamplerCount + DeviceDriverCapabilitiesMacOSXhasGather4 + DeviceDriverCapabilitiesMacOSXhasGeometryIndexInRayAccelerationStructure + DeviceDriverCapabilitiesMacOSXhasIndirectRayDispatch + DeviceDriverCapabilitiesMacOSXhasIndirectSupport + DeviceDriverCapabilitiesMacOSXhasInstanceID + DeviceDriverCapabilitiesMacOSXhasLazyMemory + DeviceDriverCapabilitiesMacOSXhasMeshShader + DeviceDriverCapabilitiesMacOSXhasNativeRayTracePipelineExpansion + DeviceDriverCapabilitiesMacOSXhasNativeRenderPassSubPasses + DeviceDriverCapabilitiesMacOSXhasNoOverwriteOnShaderResourceBuffers + DeviceDriverCapabilitiesMacOSXhasNVApi + DeviceDriverCapabilitiesMacOSXhasOcclusionQuery + DeviceDriverCapabilitiesMacOSXhasOptimizedViewInstancing + DeviceDriverCapabilitiesMacOSXhasQuadTessellation + DeviceDriverCapabilitiesMacOSXhasRayAccelerationStructure + DeviceDriverCapabilitiesMacOSXhasRayDispatch + DeviceDriverCapabilitiesMacOSXhasRayQuery + DeviceDriverCapabilitiesMacOSXhasReadMultisampledDepth + DeviceDriverCapabilitiesMacOSXhasRenderPassDepthResolve + DeviceDriverCapabilitiesMacOSXhasResourceCopyConversion + DeviceDriverCapabilitiesMacOSXhasResourceHeaps + DeviceDriverCapabilitiesMacOSXhasShader64BitIntegerResources + DeviceDriverCapabilitiesMacOSXhasShaderFloat16Support + DeviceDriverCapabilitiesMacOSXhasSkipPrimitiveTypeInRayTracingShaders + DeviceDriverCapabilitiesMacOSXhasStereoExpansion + DeviceDriverCapabilitiesMacOSXhasStructuredBuffers + DeviceDriverCapabilitiesMacOSXhasTileBasedArchitecture + DeviceDriverCapabilitiesMacOSXhasTiled2DResources + DeviceDriverCapabilitiesMacOSXhasTiled3DResources + DeviceDriverCapabilitiesMacOSXhasTiledMemoryAliasing + DeviceDriverCapabilitiesMacOSXhasTiledSafeResourcesAccess + DeviceDriverCapabilitiesMacOSXhasUAVOnEveryStage + DeviceDriverCapabilitiesMacOSXhasUAVOnlyForcedSampleCount + DeviceDriverCapabilitiesMacOSXhasVariableRateShading + DeviceDriverCapabilitiesMacOSXhasVariableRateShadingBy4 + DeviceDriverCapabilitiesMacOSXhasVariableRateShadingCombiners + DeviceDriverCapabilitiesMacOSXhasVariableRateShadingShaderOutput + DeviceDriverCapabilitiesMacOSXhasVariableRateShadingTexture + DeviceDriverCapabilitiesMacOSXhasVolMipMap + DeviceDriverCapabilitiesMacOSXhasWaveOps + DeviceDriverCapabilitiesMacOSXhasWellSupportedIndirect + DeviceDriverCapabilitiesMacOSXhasXESS + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_nintendo_switch.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_nintendo_switch.xml new file mode 100644 index 000000000..4751768a5 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_nintendo_switch.xml @@ -0,0 +1,1176 @@ + + + + DeviceDriverCapabilitiesNintendoSwitch + DeviceDriverCapabilitiesBase + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasAnisotropicFilter + + hasAnisotropicFilter + = true + +Constant true. + + +Indicates that the device driver supports anisotropic filtering of textures. DeviceDriverCapabilitiesBase::hasAnisotropicFilter + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasDepthReadOnly + + hasDepthReadOnly + = true + +Constant true. + + +Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource. DeviceDriverCapabilitiesBase::hasDepthReadOnly + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasStructuredBuffers + + hasStructuredBuffers + = true + +Constant true. + + +Indicates that the device driver supports structured buffer types. DeviceDriverCapabilitiesBase::hasStructuredBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasNoOverwriteOnShaderResourceBuffers + + hasNoOverwriteOnShaderResourceBuffers + = true + +Constant true. + + +Indicates that the device driver supports locking of structured buffers with the no-overwrite method. DeviceDriverCapabilitiesBase::hasNoOverwriteOnShaderResourceBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasForcedSamplerCount + + hasForcedSamplerCount + = false + +Constant false. + + +Indicates that the device driver supports forced multi-sample count during raster phase. DeviceDriverCapabilitiesBase::hasForcedSamplerCount + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasVolMipMap + + hasVolMipMap + = true + +Constant true. + + +Indicates that the device driver supports mipmaps for vol (eg 3D) textures. DeviceDriverCapabilitiesBase::hasVolMipMap + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasAsyncCompute + + hasAsyncCompute + = false + +Constant false. + + +Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable. DeviceDriverCapabilitiesBase::hasAsyncCompute + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasOcclusionQuery + + hasOcclusionQuery + = false + +Constant true. + + +Indicates that the device driver supports occlusion queries. DeviceDriverCapabilitiesBase::hasOcclusionQuery + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasConstBufferOffset + + hasConstBufferOffset + = false + +Constant false. + + +Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer. DeviceDriverCapabilitiesBase::hasConstBufferOffset + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasDepthBoundsTest + + hasDepthBoundsTest + = true + +Constant true. + + +Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing. DeviceDriverCapabilitiesBase::hasDepthBoundsTest + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasResourceCopyConversion + + hasResourceCopyConversion + = true + +Constant true. + + +Indicates that the device driver supports copy of textures of different but compatible formats. DeviceDriverCapabilitiesBase::hasResourceCopyConversion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasAsyncCopy + + hasAsyncCopy + = true + +Constant true. + + +Indicates that the device driver supports asynchronously issued copy operations. DeviceDriverCapabilitiesBase::hasAsyncCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasReadMultisampledDepth + + hasReadMultisampledDepth + = true + +Constant true. + + +Indicates that the device driver supports reading from multi-sampled depth stencil targets. DeviceDriverCapabilitiesBase::hasReadMultisampledDepth + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasInstanceID + + hasInstanceID + = true + +Constant true. + + +Indicates that the device driver supports instance id system variable in shaders. DeviceDriverCapabilitiesBase::hasInstanceID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasConservativeRassterization + + hasConservativeRassterization + = false + +Constant false. + + +Indicates that the device driver supports conservative rastering. DeviceDriverCapabilitiesBase::hasConservativeRassterization + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasQuadTessellation + + hasQuadTessellation + = false + +Constant false. + + +Indicates that the device driver supports quad tessellation. DeviceDriverCapabilitiesBase::hasQuadTessellation + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasGather4 + + hasGather4 + = true + +Constant true. + + +Indicates that the device driver supports gather intrinsic in shaders. DeviceDriverCapabilitiesBase::hasGather4 + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasAlphaCoverage + + hasAlphaCoverage + = true + +Constant true. + + +Indicates that the device driver supports the alpha to coverage raster feature. DeviceDriverCapabilitiesBase::hasAlphaCoverage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasWellSupportedIndirect + + hasWellSupportedIndirect + = true + +Constant true. + + +Indicates that the device driver supports indirect drawing. DeviceDriverCapabilitiesBase::hasWellSupportedIndirect + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasNVApi + + hasNVApi + = false + +Constant false. + + +Indicates that the device driver has detected that the Nvidia driver API is available for the render device. DeviceDriverCapabilitiesBase::hasNVApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasATIApi + + hasATIApi + = false + +Constant false. + + +Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device. DeviceDriverCapabilitiesBase::hasATIApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasVariableRateShading + + hasVariableRateShading + = false + +Constant false. + + +Indicates that the device driver supports basic per draw shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShading + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasVariableRateShadingTexture + + hasVariableRateShadingTexture + = false + +Constant false. + + +Indicates that the device driver supports shading rate textures as a source of shading rate information. DeviceDriverCapabilitiesBase::hasVariableRateShadingTexture + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasVariableRateShadingShaderOutput + + hasVariableRateShadingShaderOutput + = false + +Constant false. + + +Indicates that the device driver supports shader generated shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShadingShaderOutput + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasVariableRateShadingCombiners + + hasVariableRateShadingCombiners + = false + +Constant false. + + +Indicates that the device driver supports combiners for variable rate shading to select the final shading rate. DeviceDriverCapabilitiesBase::hasVariableRateShadingCombiners + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasVariableRateShadingBy4 + + hasVariableRateShadingBy4 + = false + +Constant false. + + +Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction. DeviceDriverCapabilitiesBase::hasVariableRateShadingBy4 + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasAliasedTextures + + hasAliasedTextures + = false + +Constant false. + + +Indicates that the device driver supports creation of aliased textures. DeviceDriverCapabilitiesBase::hasAliasedTextures + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasResourceHeaps + + hasResourceHeaps + = true + +Constant false. + + +Indicates that the device driver supports the resource heap API. DeviceDriverCapabilitiesBase::hasResourceHeaps + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasBufferOverlapCopy + + hasBufferOverlapCopy + = false + +Constant false. + + +Indicates that the device driver supports overlapping buffer copies. DeviceDriverCapabilitiesBase::hasBufferOverlapCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasBufferOverlapRegionsCopy + + hasBufferOverlapRegionsCopy + = false + +Constant false. + + +Indicates that the device driver uses region based copies when overlapping copies are executed. DeviceDriverCapabilitiesBase::hasBufferOverlapRegionsCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasUAVOnlyForcedSampleCount + + hasUAVOnlyForcedSampleCount + = true + +Constant true. + + +Indicates that the device driver supports forced multisample count without render targets and only outputting to UAVs. DeviceDriverCapabilitiesBase::hasUAVOnlyForcedSampleCount + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasShader64BitIntegerResources + + hasShader64BitIntegerResources + = false + +Constant false. + + +Indicates that the device driver supports 64 bit integers shader resource types. DeviceDriverCapabilitiesBase::hasShader64BitIntegerResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasNativeRenderPassSubPasses + + hasNativeRenderPassSubPasses + = true + +Constant true. + + +Indicates that the device driver is not emulating render sup-passes. DeviceDriverCapabilitiesBase::hasNativeRenderPassSubPasses + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasTiled2DResources + + hasTiled2DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 2D textures. DeviceDriverCapabilitiesBase::hasTiled2DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasTiled3DResources + + hasTiled3DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 3D textures;. DeviceDriverCapabilitiesBase::hasTiled3DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasTiledSafeResourcesAccess + + hasTiledSafeResourcesAccess + = false + +Constant false. + + +Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored. DeviceDriverCapabilitiesBase::hasTiledSafeResourcesAccess + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasTiledMemoryAliasing + + hasTiledMemoryAliasing + = false + +Constant false. + + +Indicates that the device driver supports memory aliasing of multiple tiles. DeviceDriverCapabilitiesBase::hasTiledMemoryAliasing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasDLSS + + hasDLSS + = false + +Constant false. + + +Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling. DeviceDriverCapabilitiesBase::hasDLSS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasXESS + + hasXESS + = false + +Constant false. + + +Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling. DeviceDriverCapabilitiesBase::hasXESS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasDrawID + + hasDrawID + = true + +Constant true. + + +Indicates that the device driver supports draw id in shaders. DeviceDriverCapabilitiesBase::hasDrawID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasMeshShader + + hasMeshShader + = false + +Constant false. + + +Indicates that the device driver supports the mesh shader pipeline. DeviceDriverCapabilitiesBase::hasMeshShader + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasBasicViewInstancing + + hasBasicViewInstancing + = false + +Constant false. + + +Indicates that the device driver supports basic view instancing. DeviceDriverCapabilitiesBase::hasBasicViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasOptimizedViewInstancing + + hasOptimizedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has some optimizations for view instanced rendering. DeviceDriverCapabilitiesBase::hasOptimizedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasAcceleratedViewInstancing + + hasAcceleratedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has hardware acceleration to natively support view instanced rendering. DeviceDriverCapabilitiesBase::hasAcceleratedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasStereoExpansion + + hasStereoExpansion + = false + +Constant false. + + +Indicates that the device driver supports stereo render expansion. DeviceDriverCapabilitiesBase::hasStereoExpansion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasTileBasedArchitecture + + hasTileBasedArchitecture + = false + +Constant false. + + +Indicates that the device driver architecture is known to be a tile renderer. DeviceDriverCapabilitiesBase::hasTileBasedArchitecture + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasLazyMemory + + hasLazyMemory + = false + +Constant false. + + +Indicates that the device driver supports lazily allocated memory. DeviceDriverCapabilitiesBase::hasLazyMemory + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasIndirectSupport + + hasIndirectSupport + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support indirect calls. DeviceDriverCapabilitiesBase::hasIndirectSupport + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasCompareSampler + + hasCompareSampler + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support comparison samplers. DeviceDriverCapabilitiesBase::hasCompareSampler + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasUAVOnEveryStage + + hasUAVOnEveryStage + = true + +Constant true. + + +Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders. DeviceDriverCapabilitiesBase::hasUAVOnEveryStage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasRayAccelerationStructure + + hasRayAccelerationStructure + = false + +Constant false. + + +Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support. DeviceDriverCapabilitiesBase::hasRayAccelerationStructure + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasRayQuery + + hasRayQuery + = false + +Constant false. + + +Indicates that the device driver supports ray queries ("inline ray tracing") in any shader stage. DeviceDriverCapabilitiesBase::hasRayQuery + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasRayDispatch + + hasRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports ray dispatch with its own ray tracing shader stage. DeviceDriverCapabilitiesBase::hasRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasIndirectRayDispatch + + hasIndirectRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports indirect dispatch for dispatch rays. DeviceDriverCapabilitiesBase::hasIndirectRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasGeometryIndexInRayAccelerationStructure + + hasGeometryIndexInRayAccelerationStructure + = false + +Constant false. + + +Indicates that the device driver supports geometry index information in acceleration structures in ray tracing / ray query shaders. DeviceDriverCapabilitiesBase::hasGeometryIndexInRayAccelerationStructure + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasSkipPrimitiveTypeInRayTracingShaders + + hasSkipPrimitiveTypeInRayTracingShaders + = false + +Constant false. + + +Indicates that the device driver supports masking flags in shaders to ignore triangle or procedural geometry during traversal. DeviceDriverCapabilitiesBase::hasSkipPrimitiveTypeInRayTracingShaders + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasBaseVertexSupport + + hasBaseVertexSupport + = true + +Constant true. + + +Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex. DeviceDriverCapabilitiesBase::hasBaseVertexSupport + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::castingFullyTypedFormatsSupported + + castingFullyTypedFormatsSupported + = false + +Constant false. + + +Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12) DeviceDriverCapabilitiesBase::castingFullyTypedFormatsSupported + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesNintendoSwitch::hasNativeRayTracePipelineExpansion + + hasNativeRayTracePipelineExpansion + = false + +Constant false. + + +DeviceDriverCapabilitiesBase::hasNativeRayTracePipelineExpansion + + + + + + + + + +Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for Nintendo Switch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverCapabilitiesNintendoSwitchcastingFullyTypedFormatsSupported + DeviceDriverCapabilitiesNintendoSwitchhasAcceleratedViewInstancing + DeviceDriverCapabilitiesNintendoSwitchhasAliasedTextures + DeviceDriverCapabilitiesNintendoSwitchhasAlphaCoverage + DeviceDriverCapabilitiesNintendoSwitchhasAnisotropicFilter + DeviceDriverCapabilitiesNintendoSwitchhasAsyncCompute + DeviceDriverCapabilitiesNintendoSwitchhasAsyncCopy + DeviceDriverCapabilitiesNintendoSwitchhasATIApi + DeviceDriverCapabilitiesNintendoSwitchhasBaseVertexSupport + DeviceDriverCapabilitiesNintendoSwitchhasBasicViewInstancing + DeviceDriverCapabilitiesNintendoSwitchhasBindless + DeviceDriverCapabilitiesNintendoSwitchhasBufferOverlapCopy + DeviceDriverCapabilitiesNintendoSwitchhasBufferOverlapRegionsCopy + DeviceDriverCapabilitiesNintendoSwitchhasCompareSampler + DeviceDriverCapabilitiesNintendoSwitchhasConditionalRender + DeviceDriverCapabilitiesNintendoSwitchhasConservativeRassterization + DeviceDriverCapabilitiesNintendoSwitchhasConstBufferOffset + DeviceDriverCapabilitiesNintendoSwitchhasDepthBoundsTest + DeviceDriverCapabilitiesNintendoSwitchhasDepthReadOnly + DeviceDriverCapabilitiesNintendoSwitchhasDLSS + DeviceDriverCapabilitiesNintendoSwitchhasDrawID + DeviceDriverCapabilitiesNintendoSwitchhasForcedSamplerCount + DeviceDriverCapabilitiesNintendoSwitchhasGather4 + DeviceDriverCapabilitiesNintendoSwitchhasGeometryIndexInRayAccelerationStructure + DeviceDriverCapabilitiesNintendoSwitchhasIndirectRayDispatch + DeviceDriverCapabilitiesNintendoSwitchhasIndirectSupport + DeviceDriverCapabilitiesNintendoSwitchhasInstanceID + DeviceDriverCapabilitiesNintendoSwitchhasLazyMemory + DeviceDriverCapabilitiesNintendoSwitchhasMeshShader + DeviceDriverCapabilitiesNintendoSwitchhasNativeRayTracePipelineExpansion + DeviceDriverCapabilitiesNintendoSwitchhasNativeRenderPassSubPasses + DeviceDriverCapabilitiesNintendoSwitchhasNoOverwriteOnShaderResourceBuffers + DeviceDriverCapabilitiesNintendoSwitchhasNVApi + DeviceDriverCapabilitiesNintendoSwitchhasOcclusionQuery + DeviceDriverCapabilitiesNintendoSwitchhasOptimizedViewInstancing + DeviceDriverCapabilitiesNintendoSwitchhasQuadTessellation + DeviceDriverCapabilitiesNintendoSwitchhasRayAccelerationStructure + DeviceDriverCapabilitiesNintendoSwitchhasRayDispatch + DeviceDriverCapabilitiesNintendoSwitchhasRayQuery + DeviceDriverCapabilitiesNintendoSwitchhasReadMultisampledDepth + DeviceDriverCapabilitiesNintendoSwitchhasRenderPassDepthResolve + DeviceDriverCapabilitiesNintendoSwitchhasResourceCopyConversion + DeviceDriverCapabilitiesNintendoSwitchhasResourceHeaps + DeviceDriverCapabilitiesNintendoSwitchhasShader64BitIntegerResources + DeviceDriverCapabilitiesNintendoSwitchhasShaderFloat16Support + DeviceDriverCapabilitiesNintendoSwitchhasSkipPrimitiveTypeInRayTracingShaders + DeviceDriverCapabilitiesNintendoSwitchhasStereoExpansion + DeviceDriverCapabilitiesNintendoSwitchhasStructuredBuffers + DeviceDriverCapabilitiesNintendoSwitchhasTileBasedArchitecture + DeviceDriverCapabilitiesNintendoSwitchhasTiled2DResources + DeviceDriverCapabilitiesNintendoSwitchhasTiled3DResources + DeviceDriverCapabilitiesNintendoSwitchhasTiledMemoryAliasing + DeviceDriverCapabilitiesNintendoSwitchhasTiledSafeResourcesAccess + DeviceDriverCapabilitiesNintendoSwitchhasUAVOnEveryStage + DeviceDriverCapabilitiesNintendoSwitchhasUAVOnlyForcedSampleCount + DeviceDriverCapabilitiesNintendoSwitchhasVariableRateShading + DeviceDriverCapabilitiesNintendoSwitchhasVariableRateShadingBy4 + DeviceDriverCapabilitiesNintendoSwitchhasVariableRateShadingCombiners + DeviceDriverCapabilitiesNintendoSwitchhasVariableRateShadingShaderOutput + DeviceDriverCapabilitiesNintendoSwitchhasVariableRateShadingTexture + DeviceDriverCapabilitiesNintendoSwitchhasVolMipMap + DeviceDriverCapabilitiesNintendoSwitchhasWaveOps + DeviceDriverCapabilitiesNintendoSwitchhasWellSupportedIndirect + DeviceDriverCapabilitiesNintendoSwitchhasXESS + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_p_s4.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_p_s4.xml new file mode 100644 index 000000000..0b146c96c --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_p_s4.xml @@ -0,0 +1,1234 @@ + + + + DeviceDriverCapabilitiesPS4 + DeviceDriverCapabilitiesBase + DeviceDriverCapabilitiesPS5 + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasAnisotropicFilter + + hasAnisotropicFilter + = true + +Constant true. + + +Indicates that the device driver supports anisotropic filtering of textures. DeviceDriverCapabilitiesBase::hasAnisotropicFilter + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasDepthReadOnly + + hasDepthReadOnly + = true + +Constant true. + + +Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource. DeviceDriverCapabilitiesBase::hasDepthReadOnly + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasStructuredBuffers + + hasStructuredBuffers + = true + +Constant true. + + +Indicates that the device driver supports structured buffer types. DeviceDriverCapabilitiesBase::hasStructuredBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasNoOverwriteOnShaderResourceBuffers + + hasNoOverwriteOnShaderResourceBuffers + = true + +Constant true. + + +Indicates that the device driver supports locking of structured buffers with the no-overwrite method. DeviceDriverCapabilitiesBase::hasNoOverwriteOnShaderResourceBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasForcedSamplerCount + + hasForcedSamplerCount + = false + +Constant false. + + +Indicates that the device driver supports forced multi-sample count during raster phase. DeviceDriverCapabilitiesBase::hasForcedSamplerCount + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasVolMipMap + + hasVolMipMap + = true + +Constant true. + + +Indicates that the device driver supports mipmaps for vol (eg 3D) textures. DeviceDriverCapabilitiesBase::hasVolMipMap + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasOcclusionQuery + + hasOcclusionQuery + = true + +Constant true. + + +Indicates that the device driver supports occlusion queries. DeviceDriverCapabilitiesBase::hasOcclusionQuery + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasConstBufferOffset + + hasConstBufferOffset + = false + +Constant false. + + +Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer. DeviceDriverCapabilitiesBase::hasConstBufferOffset + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasDepthBoundsTest + + hasDepthBoundsTest + = true + +Constant true. + + +Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing. DeviceDriverCapabilitiesBase::hasDepthBoundsTest + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasConditionalRender + + hasConditionalRender + = true + +Constant true. + + +Indicates that the device driver supports conditional rendering. DeviceDriverCapabilitiesBase::hasConditionalRender + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasResourceCopyConversion + + hasResourceCopyConversion + = true + +Constant true. + + +Indicates that the device driver supports copy of textures of different but compatible formats. DeviceDriverCapabilitiesBase::hasResourceCopyConversion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasAsyncCopy + + hasAsyncCopy + = true + +Constant true. + + +Indicates that the device driver supports asynchronously issued copy operations. DeviceDriverCapabilitiesBase::hasAsyncCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasReadMultisampledDepth + + hasReadMultisampledDepth + = false + +Constant false. + + +Indicates that the device driver supports reading from multi-sampled depth stencil targets. DeviceDriverCapabilitiesBase::hasReadMultisampledDepth + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasInstanceID + + hasInstanceID + = true + +Constant true. + + +Indicates that the device driver supports instance id system variable in shaders. DeviceDriverCapabilitiesBase::hasInstanceID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasConservativeRassterization + + hasConservativeRassterization + = false + +Constant false. + + +Indicates that the device driver supports conservative rastering. DeviceDriverCapabilitiesBase::hasConservativeRassterization + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasQuadTessellation + + hasQuadTessellation + = true + +Constant true. + + +Indicates that the device driver supports quad tessellation. DeviceDriverCapabilitiesBase::hasQuadTessellation + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasGather4 + + hasGather4 + = false + +Constant false. + + +Indicates that the device driver supports gather intrinsic in shaders. DeviceDriverCapabilitiesBase::hasGather4 + +TodoClarify why no support is advertised. + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasAlphaCoverage + + hasAlphaCoverage + = false + +Constant false. + + +Indicates that the device driver supports the alpha to coverage raster feature. DeviceDriverCapabilitiesBase::hasAlphaCoverage + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasWellSupportedIndirect + + hasWellSupportedIndirect + = true + +Constant true. + + +Indicates that the device driver supports indirect drawing. DeviceDriverCapabilitiesBase::hasWellSupportedIndirect + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasBindless + + hasBindless + = true + +Constant true. + + +Indicates that the device driver supports the bindless API and resource access in shaders. DeviceDriverCapabilitiesBase::hasBindless + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasNVApi + + hasNVApi + = false + +Constant false. + + +Indicates that the device driver has detected that the Nvidia driver API is available for the render device. DeviceDriverCapabilitiesBase::hasNVApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasATIApi + + hasATIApi + = false + +Constant false. + + +Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device. DeviceDriverCapabilitiesBase::hasATIApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasVariableRateShading + + hasVariableRateShading + = false + +Constant false. + + +Indicates that the device driver supports basic per draw shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShading + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasVariableRateShadingTexture + + hasVariableRateShadingTexture + = false + +Constant false. + + +Indicates that the device driver supports shading rate textures as a source of shading rate information. DeviceDriverCapabilitiesBase::hasVariableRateShadingTexture + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasVariableRateShadingShaderOutput + + hasVariableRateShadingShaderOutput + = false + +Constant false. + + +Indicates that the device driver supports shader generated shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShadingShaderOutput + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasVariableRateShadingCombiners + + hasVariableRateShadingCombiners + = false + +Constant false. + + +Indicates that the device driver supports combiners for variable rate shading to select the final shading rate. DeviceDriverCapabilitiesBase::hasVariableRateShadingCombiners + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasVariableRateShadingBy4 + + hasVariableRateShadingBy4 + = false + +Constant false. + + +Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction. DeviceDriverCapabilitiesBase::hasVariableRateShadingBy4 + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasAliasedTextures + + hasAliasedTextures + = true + +Constant true. + + +Indicates that the device driver supports creation of aliased textures. DeviceDriverCapabilitiesBase::hasAliasedTextures + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasBufferOverlapCopy + + hasBufferOverlapCopy + = false + +Constant false. + + +Indicates that the device driver supports overlapping buffer copies. DeviceDriverCapabilitiesBase::hasBufferOverlapCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasBufferOverlapRegionsCopy + + hasBufferOverlapRegionsCopy + = false + +Constant false. + + +Indicates that the device driver uses region based copies when overlapping copies are executed. DeviceDriverCapabilitiesBase::hasBufferOverlapRegionsCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasUAVOnlyForcedSampleCount + + hasUAVOnlyForcedSampleCount + = true + +Constant true. + + +Indicates that the device driver supports forced multisample count without render targets and only outputting to UAVs. DeviceDriverCapabilitiesBase::hasUAVOnlyForcedSampleCount + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasShader64BitIntegerResources + + hasShader64BitIntegerResources + = false + +Constant false. + + +Indicates that the device driver supports 64 bit integers shader resource types. DeviceDriverCapabilitiesBase::hasShader64BitIntegerResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasNativeRenderPassSubPasses + + hasNativeRenderPassSubPasses + = false + +Constant false. + + +Indicates that the device driver is not emulating render sup-passes. DeviceDriverCapabilitiesBase::hasNativeRenderPassSubPasses + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasTiled2DResources + + hasTiled2DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 2D textures. DeviceDriverCapabilitiesBase::hasTiled2DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasTiled3DResources + + hasTiled3DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 3D textures;. DeviceDriverCapabilitiesBase::hasTiled3DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasTiledSafeResourcesAccess + + hasTiledSafeResourcesAccess + = false + +Constant false. + + +Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored. DeviceDriverCapabilitiesBase::hasTiledSafeResourcesAccess + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasTiledMemoryAliasing + + hasTiledMemoryAliasing + = false + +Constant false. + + +Indicates that the device driver supports memory aliasing of multiple tiles. DeviceDriverCapabilitiesBase::hasTiledMemoryAliasing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasDLSS + + hasDLSS + = false + +Constant false. + + +Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling. DeviceDriverCapabilitiesBase::hasDLSS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasXESS + + hasXESS + = false + +Constant false. + + +Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling. DeviceDriverCapabilitiesBase::hasXESS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasDrawID + + hasDrawID + = true + +Constant true. + + +Indicates that the device driver supports draw id in shaders. DeviceDriverCapabilitiesBase::hasDrawID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasMeshShader + + hasMeshShader + = false + +Constant false. + + +Indicates that the device driver supports the mesh shader pipeline. DeviceDriverCapabilitiesBase::hasMeshShader + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasBasicViewInstancing + + hasBasicViewInstancing + = false + +Constant false. + + +Indicates that the device driver supports basic view instancing. DeviceDriverCapabilitiesBase::hasBasicViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasOptimizedViewInstancing + + hasOptimizedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has some optimizations for view instanced rendering. DeviceDriverCapabilitiesBase::hasOptimizedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasAcceleratedViewInstancing + + hasAcceleratedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has hardware acceleration to natively support view instanced rendering. DeviceDriverCapabilitiesBase::hasAcceleratedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasRenderPassDepthResolve + + hasRenderPassDepthResolve + = false + +Constant false. + + +Indicates that the device driver can resolve multi-sampled depth stencil render targets in a render pass. DeviceDriverCapabilitiesBase::hasRenderPassDepthResolve + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasStereoExpansion + + hasStereoExpansion + = false + +Constant false. + + +Indicates that the device driver supports stereo render expansion. DeviceDriverCapabilitiesBase::hasStereoExpansion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasTileBasedArchitecture + + hasTileBasedArchitecture + = false + +Constant false. + + +Indicates that the device driver architecture is known to be a tile renderer. DeviceDriverCapabilitiesBase::hasTileBasedArchitecture + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasLazyMemory + + hasLazyMemory + = false + +Constant false. + + +Indicates that the device driver supports lazily allocated memory. DeviceDriverCapabilitiesBase::hasLazyMemory + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasIndirectSupport + + hasIndirectSupport + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support indirect calls. DeviceDriverCapabilitiesBase::hasIndirectSupport + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasCompareSampler + + hasCompareSampler + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support comparison samplers. DeviceDriverCapabilitiesBase::hasCompareSampler + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasShaderFloat16Support + + hasShaderFloat16Support + = false + +Constant false. + + +Indicates that the device driver supports 16-bit floating-point types in shaders for arithmetic operations. DeviceDriverCapabilitiesBase::hasShaderFloat16Support + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasUAVOnEveryStage + + hasUAVOnEveryStage + = true + +Constant true. + + +Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders. DeviceDriverCapabilitiesBase::hasUAVOnEveryStage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasRayAccelerationStructure + + hasRayAccelerationStructure + = false + +Constant false. + + +Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support. DeviceDriverCapabilitiesBase::hasRayAccelerationStructure + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasRayQuery + + hasRayQuery + = false + +Constant false. + + +Indicates that the device driver supports ray queries ("inline ray tracing") in any shader stage. DeviceDriverCapabilitiesBase::hasRayQuery + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasRayDispatch + + hasRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports ray dispatch with its own ray tracing shader stage. DeviceDriverCapabilitiesBase::hasRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasIndirectRayDispatch + + hasIndirectRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports indirect dispatch for dispatch rays. DeviceDriverCapabilitiesBase::hasIndirectRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasGeometryIndexInRayAccelerationStructure + + hasGeometryIndexInRayAccelerationStructure + = false + +Constant false. + + +Indicates that the device driver supports geometry index information in acceleration structures in ray tracing / ray query shaders. DeviceDriverCapabilitiesBase::hasGeometryIndexInRayAccelerationStructure + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasSkipPrimitiveTypeInRayTracingShaders + + hasSkipPrimitiveTypeInRayTracingShaders + = false + +Constant false. + + +Indicates that the device driver supports masking flags in shaders to ignore triangle or procedural geometry during traversal. DeviceDriverCapabilitiesBase::hasSkipPrimitiveTypeInRayTracingShaders + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasBaseVertexSupport + + hasBaseVertexSupport + = true + +Constant true. + + +Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex. DeviceDriverCapabilitiesBase::hasBaseVertexSupport + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::castingFullyTypedFormatsSupported + + castingFullyTypedFormatsSupported + = false + +Constant false. + + +Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12) DeviceDriverCapabilitiesBase::castingFullyTypedFormatsSupported + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasNativeRayTracePipelineExpansion + + hasNativeRayTracePipelineExpansion + = false + +Constant false. + + +DeviceDriverCapabilitiesBase::hasNativeRayTracePipelineExpansion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS4::hasWaveOps + + hasWaveOps + = true + +Constant true. + + +Indicates that the device driver supports wave ops. DeviceDriverCapabilitiesBase::hasWaveOps + + + + + + + + + +Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for PlayStation 4. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverCapabilitiesPS4castingFullyTypedFormatsSupported + DeviceDriverCapabilitiesPS4hasAcceleratedViewInstancing + DeviceDriverCapabilitiesPS4hasAliasedTextures + DeviceDriverCapabilitiesPS4hasAlphaCoverage + DeviceDriverCapabilitiesPS4hasAnisotropicFilter + DeviceDriverCapabilitiesPS4hasAsyncCompute + DeviceDriverCapabilitiesPS4hasAsyncCopy + DeviceDriverCapabilitiesPS4hasATIApi + DeviceDriverCapabilitiesPS4hasBaseVertexSupport + DeviceDriverCapabilitiesPS4hasBasicViewInstancing + DeviceDriverCapabilitiesPS4hasBindless + DeviceDriverCapabilitiesPS4hasBufferOverlapCopy + DeviceDriverCapabilitiesPS4hasBufferOverlapRegionsCopy + DeviceDriverCapabilitiesPS4hasCompareSampler + DeviceDriverCapabilitiesPS4hasConditionalRender + DeviceDriverCapabilitiesPS4hasConservativeRassterization + DeviceDriverCapabilitiesPS4hasConstBufferOffset + DeviceDriverCapabilitiesPS4hasDepthBoundsTest + DeviceDriverCapabilitiesPS4hasDepthReadOnly + DeviceDriverCapabilitiesPS4hasDLSS + DeviceDriverCapabilitiesPS4hasDrawID + DeviceDriverCapabilitiesPS4hasForcedSamplerCount + DeviceDriverCapabilitiesPS4hasGather4 + DeviceDriverCapabilitiesPS4hasGeometryIndexInRayAccelerationStructure + DeviceDriverCapabilitiesPS4hasIndirectRayDispatch + DeviceDriverCapabilitiesPS4hasIndirectSupport + DeviceDriverCapabilitiesPS4hasInstanceID + DeviceDriverCapabilitiesPS4hasLazyMemory + DeviceDriverCapabilitiesPS4hasMeshShader + DeviceDriverCapabilitiesPS4hasNativeRayTracePipelineExpansion + DeviceDriverCapabilitiesPS4hasNativeRenderPassSubPasses + DeviceDriverCapabilitiesPS4hasNoOverwriteOnShaderResourceBuffers + DeviceDriverCapabilitiesPS4hasNVApi + DeviceDriverCapabilitiesPS4hasOcclusionQuery + DeviceDriverCapabilitiesPS4hasOptimizedViewInstancing + DeviceDriverCapabilitiesPS4hasQuadTessellation + DeviceDriverCapabilitiesPS4hasRayAccelerationStructure + DeviceDriverCapabilitiesPS4hasRayDispatch + DeviceDriverCapabilitiesPS4hasRayQuery + DeviceDriverCapabilitiesPS4hasReadMultisampledDepth + DeviceDriverCapabilitiesPS4hasRenderPassDepthResolve + DeviceDriverCapabilitiesPS4hasResourceCopyConversion + DeviceDriverCapabilitiesPS4hasResourceHeaps + DeviceDriverCapabilitiesPS4hasShader64BitIntegerResources + DeviceDriverCapabilitiesPS4hasShaderFloat16Support + DeviceDriverCapabilitiesPS4hasSkipPrimitiveTypeInRayTracingShaders + DeviceDriverCapabilitiesPS4hasStereoExpansion + DeviceDriverCapabilitiesPS4hasStructuredBuffers + DeviceDriverCapabilitiesPS4hasTileBasedArchitecture + DeviceDriverCapabilitiesPS4hasTiled2DResources + DeviceDriverCapabilitiesPS4hasTiled3DResources + DeviceDriverCapabilitiesPS4hasTiledMemoryAliasing + DeviceDriverCapabilitiesPS4hasTiledSafeResourcesAccess + DeviceDriverCapabilitiesPS4hasUAVOnEveryStage + DeviceDriverCapabilitiesPS4hasUAVOnlyForcedSampleCount + DeviceDriverCapabilitiesPS4hasVariableRateShading + DeviceDriverCapabilitiesPS4hasVariableRateShadingBy4 + DeviceDriverCapabilitiesPS4hasVariableRateShadingCombiners + DeviceDriverCapabilitiesPS4hasVariableRateShadingShaderOutput + DeviceDriverCapabilitiesPS4hasVariableRateShadingTexture + DeviceDriverCapabilitiesPS4hasVolMipMap + DeviceDriverCapabilitiesPS4hasWaveOps + DeviceDriverCapabilitiesPS4hasWellSupportedIndirect + DeviceDriverCapabilitiesPS4hasXESS + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_p_s5.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_p_s5.xml new file mode 100644 index 000000000..d9556bf8c --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_p_s5.xml @@ -0,0 +1,247 @@ + + + + DeviceDriverCapabilitiesPS5 + DeviceDriverCapabilitiesPS4 + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS5::hasStereoExpansion + + hasStereoExpansion + = true + +Constant true. + + +Indicates that the device driver supports stereo render expansion. DeviceDriverCapabilitiesBase::hasStereoExpansion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS5::hasRayAccelerationStructure + + hasRayAccelerationStructure + = true + +Constant false. + + +Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support. DeviceDriverCapabilitiesBase::hasRayAccelerationStructure + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS5::hasRayQuery + + hasRayQuery + = true + +Constant false. + + +Indicates that the device driver supports ray queries ("inline ray tracing") in any shader stage. DeviceDriverCapabilitiesBase::hasRayQuery + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS5::hasRayDispatch + + hasRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports ray dispatch with its own ray tracing shader stage. DeviceDriverCapabilitiesBase::hasRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS5::hasIndirectRayDispatch + + hasIndirectRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports indirect dispatch for dispatch rays. DeviceDriverCapabilitiesBase::hasIndirectRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS5::hasGeometryIndexInRayAccelerationStructure + + hasGeometryIndexInRayAccelerationStructure + = false + +Constant false. + + +Indicates that the device driver supports geometry index information in acceleration structures in ray tracing / ray query shaders. DeviceDriverCapabilitiesBase::hasGeometryIndexInRayAccelerationStructure + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesPS5::hasSkipPrimitiveTypeInRayTracingShaders + + hasSkipPrimitiveTypeInRayTracingShaders + = false + +Constant false. + + +Indicates that the device driver supports masking flags in shaders to ignore triangle or procedural geometry during traversal. DeviceDriverCapabilitiesBase::hasSkipPrimitiveTypeInRayTracingShaders + + + + + + + + + +Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for PlayStation 5. + + +Uses PlayStation 4 optimized values and overrides only differences. DeviceDriverCapabilitiesPS4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverCapabilitiesPS5castingFullyTypedFormatsSupported + DeviceDriverCapabilitiesPS5hasAcceleratedViewInstancing + DeviceDriverCapabilitiesPS5hasAliasedTextures + DeviceDriverCapabilitiesPS5hasAlphaCoverage + DeviceDriverCapabilitiesPS5hasAnisotropicFilter + DeviceDriverCapabilitiesPS5hasAsyncCompute + DeviceDriverCapabilitiesPS5hasAsyncCopy + DeviceDriverCapabilitiesPS5hasATIApi + DeviceDriverCapabilitiesPS5hasBaseVertexSupport + DeviceDriverCapabilitiesPS5hasBasicViewInstancing + DeviceDriverCapabilitiesPS5hasBindless + DeviceDriverCapabilitiesPS5hasBufferOverlapCopy + DeviceDriverCapabilitiesPS5hasBufferOverlapRegionsCopy + DeviceDriverCapabilitiesPS5hasCompareSampler + DeviceDriverCapabilitiesPS5hasConditionalRender + DeviceDriverCapabilitiesPS5hasConservativeRassterization + DeviceDriverCapabilitiesPS5hasConstBufferOffset + DeviceDriverCapabilitiesPS5hasDepthBoundsTest + DeviceDriverCapabilitiesPS5hasDepthReadOnly + DeviceDriverCapabilitiesPS5hasDLSS + DeviceDriverCapabilitiesPS5hasDrawID + DeviceDriverCapabilitiesPS5hasForcedSamplerCount + DeviceDriverCapabilitiesPS5hasGather4 + DeviceDriverCapabilitiesPS5hasGeometryIndexInRayAccelerationStructure + DeviceDriverCapabilitiesPS5hasIndirectRayDispatch + DeviceDriverCapabilitiesPS5hasIndirectSupport + DeviceDriverCapabilitiesPS5hasInstanceID + DeviceDriverCapabilitiesPS5hasLazyMemory + DeviceDriverCapabilitiesPS5hasMeshShader + DeviceDriverCapabilitiesPS5hasNativeRayTracePipelineExpansion + DeviceDriverCapabilitiesPS5hasNativeRenderPassSubPasses + DeviceDriverCapabilitiesPS5hasNoOverwriteOnShaderResourceBuffers + DeviceDriverCapabilitiesPS5hasNVApi + DeviceDriverCapabilitiesPS5hasOcclusionQuery + DeviceDriverCapabilitiesPS5hasOptimizedViewInstancing + DeviceDriverCapabilitiesPS5hasQuadTessellation + DeviceDriverCapabilitiesPS5hasRayAccelerationStructure + DeviceDriverCapabilitiesPS5hasRayDispatch + DeviceDriverCapabilitiesPS5hasRayQuery + DeviceDriverCapabilitiesPS5hasReadMultisampledDepth + DeviceDriverCapabilitiesPS5hasRenderPassDepthResolve + DeviceDriverCapabilitiesPS5hasResourceCopyConversion + DeviceDriverCapabilitiesPS5hasResourceHeaps + DeviceDriverCapabilitiesPS5hasShader64BitIntegerResources + DeviceDriverCapabilitiesPS5hasShaderFloat16Support + DeviceDriverCapabilitiesPS5hasSkipPrimitiveTypeInRayTracingShaders + DeviceDriverCapabilitiesPS5hasStereoExpansion + DeviceDriverCapabilitiesPS5hasStructuredBuffers + DeviceDriverCapabilitiesPS5hasTileBasedArchitecture + DeviceDriverCapabilitiesPS5hasTiled2DResources + DeviceDriverCapabilitiesPS5hasTiled3DResources + DeviceDriverCapabilitiesPS5hasTiledMemoryAliasing + DeviceDriverCapabilitiesPS5hasTiledSafeResourcesAccess + DeviceDriverCapabilitiesPS5hasUAVOnEveryStage + DeviceDriverCapabilitiesPS5hasUAVOnlyForcedSampleCount + DeviceDriverCapabilitiesPS5hasVariableRateShading + DeviceDriverCapabilitiesPS5hasVariableRateShadingBy4 + DeviceDriverCapabilitiesPS5hasVariableRateShadingCombiners + DeviceDriverCapabilitiesPS5hasVariableRateShadingShaderOutput + DeviceDriverCapabilitiesPS5hasVariableRateShadingTexture + DeviceDriverCapabilitiesPS5hasVolMipMap + DeviceDriverCapabilitiesPS5hasWaveOps + DeviceDriverCapabilitiesPS5hasWellSupportedIndirect + DeviceDriverCapabilitiesPS5hasXESS + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_scarlett.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_scarlett.xml new file mode 100644 index 000000000..2aed3f63d --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_scarlett.xml @@ -0,0 +1,415 @@ + + + + DeviceDriverCapabilitiesScarlett + DeviceDriverCapabilitiesXboxOne + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasConservativeRassterization + + hasConservativeRassterization + = true + +Constant true. + + +Indicates that the device driver supports conservative rastering. DeviceDriverCapabilitiesBase::hasConservativeRassterization + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasVariableRateShading + + hasVariableRateShading + = true + +Constant true. + + +Indicates that the device driver supports basic per draw shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShading + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasVariableRateShadingTexture + + hasVariableRateShadingTexture + = true + +Constant true. + + +Indicates that the device driver supports shading rate textures as a source of shading rate information. DeviceDriverCapabilitiesBase::hasVariableRateShadingTexture + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasVariableRateShadingShaderOutput + + hasVariableRateShadingShaderOutput + = true + +Constant true. + + +Indicates that the device driver supports shader generated shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShadingShaderOutput + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasVariableRateShadingCombiners + + hasVariableRateShadingCombiners + = true + +Constant true. + + +Indicates that the device driver supports combiners for variable rate shading to select the final shading rate. DeviceDriverCapabilitiesBase::hasVariableRateShadingCombiners + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasShader64BitIntegerResources + + hasShader64BitIntegerResources + = true + +Constant true. + + +Indicates that the device driver supports 64 bit integers shader resource types. DeviceDriverCapabilitiesBase::hasShader64BitIntegerResources + +Documentation states that HLSL 6.6 64 bit atomics are not supported directly, but HLSL xbox extensions that offer 64 bit atomics are. So they may need different instructions to support the same operations. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasMeshShader + + hasMeshShader + = true + +Constant true. + + +Indicates that the device driver supports the mesh shader pipeline. DeviceDriverCapabilitiesBase::hasMeshShader + +Documentation is contradicting it self about proper support of indirect dispatch with pipelines that use amplification shaders. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasRayAccelerationStructure + + hasRayAccelerationStructure + = true + +Constant true. + + +Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support. DeviceDriverCapabilitiesBase::hasRayAccelerationStructure + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasRayQuery + + hasRayQuery + = true + +Constant true. + + +Indicates that the device driver supports ray queries ("inline ray tracing") in any shader stage. DeviceDriverCapabilitiesBase::hasRayQuery + +This is not directly supported, there is a software implementation available, see GDK documentation for details. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasRayDispatch + + hasRayDispatch + = true + +Constant true. + + +Indicates that the device driver supports ray dispatch with its own ray tracing shader stage. DeviceDriverCapabilitiesBase::hasRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasIndirectRayDispatch + + hasIndirectRayDispatch + = true + +Constant true. + + +Indicates that the device driver supports indirect dispatch for dispatch rays. DeviceDriverCapabilitiesBase::hasIndirectRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasGeometryIndexInRayAccelerationStructure + + hasGeometryIndexInRayAccelerationStructure + = true + +Constant true. + + +Indicates that the device driver supports geometry index information in acceleration structures in ray tracing / ray query shaders. DeviceDriverCapabilitiesBase::hasGeometryIndexInRayAccelerationStructure + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasSkipPrimitiveTypeInRayTracingShaders + + hasSkipPrimitiveTypeInRayTracingShaders + = true + +Constant true. + + +Indicates that the device driver supports masking flags in shaders to ignore triangle or procedural geometry during traversal. DeviceDriverCapabilitiesBase::hasSkipPrimitiveTypeInRayTracingShaders + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasBaseVertexSupport + + hasBaseVertexSupport + = true + +Constant true. + + +Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex. DeviceDriverCapabilitiesBase::hasBaseVertexSupport + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::castingFullyTypedFormatsSupported + + castingFullyTypedFormatsSupported + = false + +Constant false. + + +Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12) DeviceDriverCapabilitiesBase::castingFullyTypedFormatsSupported + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesScarlett::hasNativeRayTracePipelineExpansion + + hasNativeRayTracePipelineExpansion + = true + +Constant true. + + +DeviceDriverCapabilitiesBase::hasNativeRayTracePipelineExpansion + + + + + + + + + +Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for Xbox Series X / S. + + +Uses Xbox One optimized values and overrides only differences. DeviceDriverCapabilitiesXboxOne + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverCapabilitiesScarlettcastingFullyTypedFormatsSupported + DeviceDriverCapabilitiesScarletthasAcceleratedViewInstancing + DeviceDriverCapabilitiesScarletthasAliasedTextures + DeviceDriverCapabilitiesScarletthasAlphaCoverage + DeviceDriverCapabilitiesScarletthasAnisotropicFilter + DeviceDriverCapabilitiesScarletthasAsyncCompute + DeviceDriverCapabilitiesScarletthasAsyncCopy + DeviceDriverCapabilitiesScarletthasATIApi + DeviceDriverCapabilitiesScarletthasBaseVertexSupport + DeviceDriverCapabilitiesScarletthasBasicViewInstancing + DeviceDriverCapabilitiesScarletthasBindless + DeviceDriverCapabilitiesScarletthasBufferOverlapCopy + DeviceDriverCapabilitiesScarletthasBufferOverlapRegionsCopy + DeviceDriverCapabilitiesScarletthasCompareSampler + DeviceDriverCapabilitiesScarletthasConditionalRender + DeviceDriverCapabilitiesScarletthasConservativeRassterization + DeviceDriverCapabilitiesScarletthasConstBufferOffset + DeviceDriverCapabilitiesScarletthasDepthBoundsTest + DeviceDriverCapabilitiesScarletthasDepthReadOnly + DeviceDriverCapabilitiesScarletthasDLSS + DeviceDriverCapabilitiesScarletthasDrawID + DeviceDriverCapabilitiesScarletthasForcedSamplerCount + DeviceDriverCapabilitiesScarletthasGather4 + DeviceDriverCapabilitiesScarletthasGeometryIndexInRayAccelerationStructure + DeviceDriverCapabilitiesScarletthasIndirectRayDispatch + DeviceDriverCapabilitiesScarletthasIndirectSupport + DeviceDriverCapabilitiesScarletthasInstanceID + DeviceDriverCapabilitiesScarletthasLazyMemory + DeviceDriverCapabilitiesScarletthasMeshShader + DeviceDriverCapabilitiesScarletthasNativeRayTracePipelineExpansion + DeviceDriverCapabilitiesScarletthasNativeRenderPassSubPasses + DeviceDriverCapabilitiesScarletthasNoOverwriteOnShaderResourceBuffers + DeviceDriverCapabilitiesScarletthasNVApi + DeviceDriverCapabilitiesScarletthasOcclusionQuery + DeviceDriverCapabilitiesScarletthasOptimizedViewInstancing + DeviceDriverCapabilitiesScarletthasQuadTessellation + DeviceDriverCapabilitiesScarletthasRayAccelerationStructure + DeviceDriverCapabilitiesScarletthasRayDispatch + DeviceDriverCapabilitiesScarletthasRayQuery + DeviceDriverCapabilitiesScarletthasReadMultisampledDepth + DeviceDriverCapabilitiesScarletthasRenderPassDepthResolve + DeviceDriverCapabilitiesScarletthasResourceCopyConversion + DeviceDriverCapabilitiesScarletthasResourceHeaps + DeviceDriverCapabilitiesScarletthasShader64BitIntegerResources + DeviceDriverCapabilitiesScarletthasShaderFloat16Support + DeviceDriverCapabilitiesScarletthasSkipPrimitiveTypeInRayTracingShaders + DeviceDriverCapabilitiesScarletthasStereoExpansion + DeviceDriverCapabilitiesScarletthasStructuredBuffers + DeviceDriverCapabilitiesScarletthasTileBasedArchitecture + DeviceDriverCapabilitiesScarletthasTiled2DResources + DeviceDriverCapabilitiesScarletthasTiled3DResources + DeviceDriverCapabilitiesScarletthasTiledMemoryAliasing + DeviceDriverCapabilitiesScarletthasTiledSafeResourcesAccess + DeviceDriverCapabilitiesScarletthasUAVOnEveryStage + DeviceDriverCapabilitiesScarletthasUAVOnlyForcedSampleCount + DeviceDriverCapabilitiesScarletthasVariableRateShading + DeviceDriverCapabilitiesScarletthasVariableRateShadingBy4 + DeviceDriverCapabilitiesScarletthasVariableRateShadingCombiners + DeviceDriverCapabilitiesScarletthasVariableRateShadingShaderOutput + DeviceDriverCapabilitiesScarletthasVariableRateShadingTexture + DeviceDriverCapabilitiesScarletthasVolMipMap + DeviceDriverCapabilitiesScarletthasWaveOps + DeviceDriverCapabilitiesScarletthasWellSupportedIndirect + DeviceDriverCapabilitiesScarletthasXESS + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_t_v_o_s.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_t_v_o_s.xml new file mode 100644 index 000000000..cbb240376 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_t_v_o_s.xml @@ -0,0 +1,1102 @@ + + + + DeviceDriverCapabilitiesTVOS + DeviceDriverCapabilitiesBase + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasAnisotropicFilter + + hasAnisotropicFilter + = true + +Constant true. + + +Indicates that the device driver supports anisotropic filtering of textures. DeviceDriverCapabilitiesBase::hasAnisotropicFilter + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasDepthReadOnly + + hasDepthReadOnly + = false + +Constant false. + + +Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource. DeviceDriverCapabilitiesBase::hasDepthReadOnly + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasStructuredBuffers + + hasStructuredBuffers + = true + +Constant true. + + +Indicates that the device driver supports structured buffer types. DeviceDriverCapabilitiesBase::hasStructuredBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasNoOverwriteOnShaderResourceBuffers + + hasNoOverwriteOnShaderResourceBuffers + = true + +Constant true. + + +Indicates that the device driver supports locking of structured buffers with the no-overwrite method. DeviceDriverCapabilitiesBase::hasNoOverwriteOnShaderResourceBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasForcedSamplerCount + + hasForcedSamplerCount + = false + +Constant false. + + +Indicates that the device driver supports forced multi-sample count during raster phase. DeviceDriverCapabilitiesBase::hasForcedSamplerCount + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasVolMipMap + + hasVolMipMap + = true + +Constant true. + + +Indicates that the device driver supports mipmaps for vol (eg 3D) textures. DeviceDriverCapabilitiesBase::hasVolMipMap + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasAsyncCompute + + hasAsyncCompute + = false + +Constant false. + + +Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable. DeviceDriverCapabilitiesBase::hasAsyncCompute + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasOcclusionQuery + + hasOcclusionQuery + = true + +Constant true. + + +Indicates that the device driver supports occlusion queries. DeviceDriverCapabilitiesBase::hasOcclusionQuery + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasConstBufferOffset + + hasConstBufferOffset + = false + +Constant false. + + +Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer. DeviceDriverCapabilitiesBase::hasConstBufferOffset + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasDepthBoundsTest + + hasDepthBoundsTest + = false + +Constant false. + + +Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing. DeviceDriverCapabilitiesBase::hasDepthBoundsTest + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasConditionalRender + + hasConditionalRender + = false + +Constant false. + + +Indicates that the device driver supports conditional rendering. DeviceDriverCapabilitiesBase::hasConditionalRender + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasResourceCopyConversion + + hasResourceCopyConversion + = true + +Constant true. + + +Indicates that the device driver supports copy of textures of different but compatible formats. DeviceDriverCapabilitiesBase::hasResourceCopyConversion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasAsyncCopy + + hasAsyncCopy + = false + +Constant false. + + +Indicates that the device driver supports asynchronously issued copy operations. DeviceDriverCapabilitiesBase::hasAsyncCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasReadMultisampledDepth + + hasReadMultisampledDepth + = true + +Constant true. + + +Indicates that the device driver supports reading from multi-sampled depth stencil targets. DeviceDriverCapabilitiesBase::hasReadMultisampledDepth + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasInstanceID + + hasInstanceID + = true + +Constant true. + + +Indicates that the device driver supports instance id system variable in shaders. DeviceDriverCapabilitiesBase::hasInstanceID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasConservativeRassterization + + hasConservativeRassterization + = false + +Constant false. + + +Indicates that the device driver supports conservative rastering. DeviceDriverCapabilitiesBase::hasConservativeRassterization + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasQuadTessellation + + hasQuadTessellation + = false + +Constant false. + + +Indicates that the device driver supports quad tessellation. DeviceDriverCapabilitiesBase::hasQuadTessellation + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasGather4 + + hasGather4 + = true + +Constant true. + + +Indicates that the device driver supports gather intrinsic in shaders. DeviceDriverCapabilitiesBase::hasGather4 + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasAlphaCoverage + + hasAlphaCoverage + = true + +Constant true. + + +Indicates that the device driver supports the alpha to coverage raster feature. DeviceDriverCapabilitiesBase::hasAlphaCoverage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasWellSupportedIndirect + + hasWellSupportedIndirect + = false + +Constant false. + + +Indicates that the device driver supports indirect drawing. DeviceDriverCapabilitiesBase::hasWellSupportedIndirect + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasBindless + + hasBindless + = false + +Constant false. + + +Indicates that the device driver supports the bindless API and resource access in shaders. DeviceDriverCapabilitiesBase::hasBindless + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasNVApi + + hasNVApi + = false + +Constant false. + + +Indicates that the device driver has detected that the Nvidia driver API is available for the render device. DeviceDriverCapabilitiesBase::hasNVApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasATIApi + + hasATIApi + = false + +Constant false. + + +Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device. DeviceDriverCapabilitiesBase::hasATIApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasVariableRateShading + + hasVariableRateShading + = false + +Constant false. + + +Indicates that the device driver supports basic per draw shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShading + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasVariableRateShadingTexture + + hasVariableRateShadingTexture + = false + +Constant false. + + +Indicates that the device driver supports shading rate textures as a source of shading rate information. DeviceDriverCapabilitiesBase::hasVariableRateShadingTexture + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasVariableRateShadingShaderOutput + + hasVariableRateShadingShaderOutput + = false + +Constant false. + + +Indicates that the device driver supports shader generated shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShadingShaderOutput + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasVariableRateShadingCombiners + + hasVariableRateShadingCombiners + = false + +Constant false. + + +Indicates that the device driver supports combiners for variable rate shading to select the final shading rate. DeviceDriverCapabilitiesBase::hasVariableRateShadingCombiners + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasVariableRateShadingBy4 + + hasVariableRateShadingBy4 + = false + +Constant false. + + +Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction. DeviceDriverCapabilitiesBase::hasVariableRateShadingBy4 + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasAliasedTextures + + hasAliasedTextures + = false + +Constant false. + + +Indicates that the device driver supports creation of aliased textures. DeviceDriverCapabilitiesBase::hasAliasedTextures + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasResourceHeaps + + hasResourceHeaps + = false + +Constant false. + + +Indicates that the device driver supports the resource heap API. DeviceDriverCapabilitiesBase::hasResourceHeaps + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasBufferOverlapCopy + + hasBufferOverlapCopy + = false + +Constant false. + + +Indicates that the device driver supports overlapping buffer copies. DeviceDriverCapabilitiesBase::hasBufferOverlapCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasBufferOverlapRegionsCopy + + hasBufferOverlapRegionsCopy + = false + +Constant false. + + +Indicates that the device driver uses region based copies when overlapping copies are executed. DeviceDriverCapabilitiesBase::hasBufferOverlapRegionsCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasUAVOnlyForcedSampleCount + + hasUAVOnlyForcedSampleCount + = false + +Constant false. + + +Indicates that the device driver supports forced multisample count without render targets and only outputting to UAVs. DeviceDriverCapabilitiesBase::hasUAVOnlyForcedSampleCount + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasShader64BitIntegerResources + + hasShader64BitIntegerResources + = false + +Constant false. + + +Indicates that the device driver supports 64 bit integers shader resource types. DeviceDriverCapabilitiesBase::hasShader64BitIntegerResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasNativeRenderPassSubPasses + + hasNativeRenderPassSubPasses + = true + +Constant false. + + +Indicates that the device driver is not emulating render sup-passes. DeviceDriverCapabilitiesBase::hasNativeRenderPassSubPasses + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasTiled2DResources + + hasTiled2DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 2D textures. DeviceDriverCapabilitiesBase::hasTiled2DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasTiled3DResources + + hasTiled3DResources + = false + +Constant false. + + +Indicates that the device driver supports tiled 3D textures;. DeviceDriverCapabilitiesBase::hasTiled3DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasTiledSafeResourcesAccess + + hasTiledSafeResourcesAccess + = false + +Constant false. + + +Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored. DeviceDriverCapabilitiesBase::hasTiledSafeResourcesAccess + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasTiledMemoryAliasing + + hasTiledMemoryAliasing + = false + +Constant false. + + +Indicates that the device driver supports memory aliasing of multiple tiles. DeviceDriverCapabilitiesBase::hasTiledMemoryAliasing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasDLSS + + hasDLSS + = false + +Constant false. + + +Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling. DeviceDriverCapabilitiesBase::hasDLSS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasXESS + + hasXESS + = false + +Constant false. + + +Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling. DeviceDriverCapabilitiesBase::hasXESS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasDrawID + + hasDrawID + = false + +Constant false. + + +Indicates that the device driver supports draw id in shaders. DeviceDriverCapabilitiesBase::hasDrawID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasMeshShader + + hasMeshShader + = false + +Constant false. + + +Indicates that the device driver supports the mesh shader pipeline. DeviceDriverCapabilitiesBase::hasMeshShader + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasBasicViewInstancing + + hasBasicViewInstancing + = false + +Constant false. + + +Indicates that the device driver supports basic view instancing. DeviceDriverCapabilitiesBase::hasBasicViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasOptimizedViewInstancing + + hasOptimizedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has some optimizations for view instanced rendering. DeviceDriverCapabilitiesBase::hasOptimizedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasAcceleratedViewInstancing + + hasAcceleratedViewInstancing + = false + +Constant false. + + +Indicates that the device driver has hardware acceleration to natively support view instanced rendering. DeviceDriverCapabilitiesBase::hasAcceleratedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasStereoExpansion + + hasStereoExpansion + = false + +Constant false. + + +Indicates that the device driver supports stereo render expansion. DeviceDriverCapabilitiesBase::hasStereoExpansion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasTileBasedArchitecture + + hasTileBasedArchitecture + = true + +Constant true. + + +Indicates that the device driver architecture is known to be a tile renderer. DeviceDriverCapabilitiesBase::hasTileBasedArchitecture + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasLazyMemory + + hasLazyMemory + = false + +Constant false. + + +Indicates that the device driver supports lazily allocated memory. DeviceDriverCapabilitiesBase::hasLazyMemory + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasShaderFloat16Support + + hasShaderFloat16Support + = true + +Constant true. + + +Indicates that the device driver supports 16-bit floating-point types in shaders for arithmetic operations. DeviceDriverCapabilitiesBase::hasShaderFloat16Support + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasUAVOnEveryStage + + hasUAVOnEveryStage + = true + +Constant true. + + +Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders. DeviceDriverCapabilitiesBase::hasUAVOnEveryStage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasRayDispatch + + hasRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports ray dispatch with its own ray tracing shader stage. DeviceDriverCapabilitiesBase::hasRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasIndirectRayDispatch + + hasIndirectRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports indirect dispatch for dispatch rays. DeviceDriverCapabilitiesBase::hasIndirectRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::castingFullyTypedFormatsSupported + + castingFullyTypedFormatsSupported + = false + +Constant false. + + +Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12) DeviceDriverCapabilitiesBase::castingFullyTypedFormatsSupported + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesTVOS::hasWaveOps + + hasWaveOps + = true + +Constant true. + + +Indicates that the device driver supports wave ops. DeviceDriverCapabilitiesBase::hasWaveOps + + + + + + + + + +Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for tvOS. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverCapabilitiesTVOScastingFullyTypedFormatsSupported + DeviceDriverCapabilitiesTVOShasAcceleratedViewInstancing + DeviceDriverCapabilitiesTVOShasAliasedTextures + DeviceDriverCapabilitiesTVOShasAlphaCoverage + DeviceDriverCapabilitiesTVOShasAnisotropicFilter + DeviceDriverCapabilitiesTVOShasAsyncCompute + DeviceDriverCapabilitiesTVOShasAsyncCopy + DeviceDriverCapabilitiesTVOShasATIApi + DeviceDriverCapabilitiesTVOShasBaseVertexSupport + DeviceDriverCapabilitiesTVOShasBasicViewInstancing + DeviceDriverCapabilitiesTVOShasBindless + DeviceDriverCapabilitiesTVOShasBufferOverlapCopy + DeviceDriverCapabilitiesTVOShasBufferOverlapRegionsCopy + DeviceDriverCapabilitiesTVOShasCompareSampler + DeviceDriverCapabilitiesTVOShasConditionalRender + DeviceDriverCapabilitiesTVOShasConservativeRassterization + DeviceDriverCapabilitiesTVOShasConstBufferOffset + DeviceDriverCapabilitiesTVOShasDepthBoundsTest + DeviceDriverCapabilitiesTVOShasDepthReadOnly + DeviceDriverCapabilitiesTVOShasDLSS + DeviceDriverCapabilitiesTVOShasDrawID + DeviceDriverCapabilitiesTVOShasForcedSamplerCount + DeviceDriverCapabilitiesTVOShasGather4 + DeviceDriverCapabilitiesTVOShasGeometryIndexInRayAccelerationStructure + DeviceDriverCapabilitiesTVOShasIndirectRayDispatch + DeviceDriverCapabilitiesTVOShasIndirectSupport + DeviceDriverCapabilitiesTVOShasInstanceID + DeviceDriverCapabilitiesTVOShasLazyMemory + DeviceDriverCapabilitiesTVOShasMeshShader + DeviceDriverCapabilitiesTVOShasNativeRayTracePipelineExpansion + DeviceDriverCapabilitiesTVOShasNativeRenderPassSubPasses + DeviceDriverCapabilitiesTVOShasNoOverwriteOnShaderResourceBuffers + DeviceDriverCapabilitiesTVOShasNVApi + DeviceDriverCapabilitiesTVOShasOcclusionQuery + DeviceDriverCapabilitiesTVOShasOptimizedViewInstancing + DeviceDriverCapabilitiesTVOShasQuadTessellation + DeviceDriverCapabilitiesTVOShasRayAccelerationStructure + DeviceDriverCapabilitiesTVOShasRayDispatch + DeviceDriverCapabilitiesTVOShasRayQuery + DeviceDriverCapabilitiesTVOShasReadMultisampledDepth + DeviceDriverCapabilitiesTVOShasRenderPassDepthResolve + DeviceDriverCapabilitiesTVOShasResourceCopyConversion + DeviceDriverCapabilitiesTVOShasResourceHeaps + DeviceDriverCapabilitiesTVOShasShader64BitIntegerResources + DeviceDriverCapabilitiesTVOShasShaderFloat16Support + DeviceDriverCapabilitiesTVOShasSkipPrimitiveTypeInRayTracingShaders + DeviceDriverCapabilitiesTVOShasStereoExpansion + DeviceDriverCapabilitiesTVOShasStructuredBuffers + DeviceDriverCapabilitiesTVOShasTileBasedArchitecture + DeviceDriverCapabilitiesTVOShasTiled2DResources + DeviceDriverCapabilitiesTVOShasTiled3DResources + DeviceDriverCapabilitiesTVOShasTiledMemoryAliasing + DeviceDriverCapabilitiesTVOShasTiledSafeResourcesAccess + DeviceDriverCapabilitiesTVOShasUAVOnEveryStage + DeviceDriverCapabilitiesTVOShasUAVOnlyForcedSampleCount + DeviceDriverCapabilitiesTVOShasVariableRateShading + DeviceDriverCapabilitiesTVOShasVariableRateShadingBy4 + DeviceDriverCapabilitiesTVOShasVariableRateShadingCombiners + DeviceDriverCapabilitiesTVOShasVariableRateShadingShaderOutput + DeviceDriverCapabilitiesTVOShasVariableRateShadingTexture + DeviceDriverCapabilitiesTVOShasVolMipMap + DeviceDriverCapabilitiesTVOShasWaveOps + DeviceDriverCapabilitiesTVOShasWellSupportedIndirect + DeviceDriverCapabilitiesTVOShasXESS + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_windows.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_windows.xml new file mode 100644 index 000000000..6a4cba187 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_windows.xml @@ -0,0 +1,250 @@ + + + + DeviceDriverCapabilitiesWindows + DeviceDriverCapabilitiesBase + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesWindows::hasAnisotropicFilter + + hasAnisotropicFilter + = true + +Constant true. + + +Indicates that the device driver supports anisotropic filtering of textures. DeviceDriverCapabilitiesBase::hasAnisotropicFilter + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesWindows::hasAlphaCoverage + + hasAlphaCoverage + = true + +Constant true. + + +Indicates that the device driver supports the alpha to coverage raster feature. DeviceDriverCapabilitiesBase::hasAlphaCoverage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesWindows::hasAsyncCopy + + hasAsyncCopy + = true + +Constant true. + + +Indicates that the device driver supports asynchronously issued copy operations. DeviceDriverCapabilitiesBase::hasAsyncCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesWindows::hasStereoExpansion + + hasStereoExpansion + = false + +Constant false. + + +Indicates that the device driver supports stereo render expansion. DeviceDriverCapabilitiesBase::hasStereoExpansion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesWindows::hasLazyMemory + + hasLazyMemory + = false + +Constant false. + + +Indicates that the device driver supports lazily allocated memory. DeviceDriverCapabilitiesBase::hasLazyMemory + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesWindows::hasIndirectSupport + + hasIndirectSupport + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support indirect calls. DeviceDriverCapabilitiesBase::hasIndirectSupport + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesWindows::hasCompareSampler + + hasCompareSampler + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support comparison samplers. DeviceDriverCapabilitiesBase::hasCompareSampler + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesWindows::hasBaseVertexSupport + + hasBaseVertexSupport + = true + +Constant true. + + +Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex. DeviceDriverCapabilitiesBase::hasBaseVertexSupport + + + + + + + + + +Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for Windows. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverCapabilitiesWindowscastingFullyTypedFormatsSupported + DeviceDriverCapabilitiesWindowshasAcceleratedViewInstancing + DeviceDriverCapabilitiesWindowshasAliasedTextures + DeviceDriverCapabilitiesWindowshasAlphaCoverage + DeviceDriverCapabilitiesWindowshasAnisotropicFilter + DeviceDriverCapabilitiesWindowshasAsyncCompute + DeviceDriverCapabilitiesWindowshasAsyncCopy + DeviceDriverCapabilitiesWindowshasATIApi + DeviceDriverCapabilitiesWindowshasBaseVertexSupport + DeviceDriverCapabilitiesWindowshasBasicViewInstancing + DeviceDriverCapabilitiesWindowshasBindless + DeviceDriverCapabilitiesWindowshasBufferOverlapCopy + DeviceDriverCapabilitiesWindowshasBufferOverlapRegionsCopy + DeviceDriverCapabilitiesWindowshasCompareSampler + DeviceDriverCapabilitiesWindowshasConditionalRender + DeviceDriverCapabilitiesWindowshasConservativeRassterization + DeviceDriverCapabilitiesWindowshasConstBufferOffset + DeviceDriverCapabilitiesWindowshasDepthBoundsTest + DeviceDriverCapabilitiesWindowshasDepthReadOnly + DeviceDriverCapabilitiesWindowshasDLSS + DeviceDriverCapabilitiesWindowshasDrawID + DeviceDriverCapabilitiesWindowshasForcedSamplerCount + DeviceDriverCapabilitiesWindowshasGather4 + DeviceDriverCapabilitiesWindowshasGeometryIndexInRayAccelerationStructure + DeviceDriverCapabilitiesWindowshasIndirectRayDispatch + DeviceDriverCapabilitiesWindowshasIndirectSupport + DeviceDriverCapabilitiesWindowshasInstanceID + DeviceDriverCapabilitiesWindowshasLazyMemory + DeviceDriverCapabilitiesWindowshasMeshShader + DeviceDriverCapabilitiesWindowshasNativeRayTracePipelineExpansion + DeviceDriverCapabilitiesWindowshasNativeRenderPassSubPasses + DeviceDriverCapabilitiesWindowshasNoOverwriteOnShaderResourceBuffers + DeviceDriverCapabilitiesWindowshasNVApi + DeviceDriverCapabilitiesWindowshasOcclusionQuery + DeviceDriverCapabilitiesWindowshasOptimizedViewInstancing + DeviceDriverCapabilitiesWindowshasQuadTessellation + DeviceDriverCapabilitiesWindowshasRayAccelerationStructure + DeviceDriverCapabilitiesWindowshasRayDispatch + DeviceDriverCapabilitiesWindowshasRayQuery + DeviceDriverCapabilitiesWindowshasReadMultisampledDepth + DeviceDriverCapabilitiesWindowshasRenderPassDepthResolve + DeviceDriverCapabilitiesWindowshasResourceCopyConversion + DeviceDriverCapabilitiesWindowshasResourceHeaps + DeviceDriverCapabilitiesWindowshasShader64BitIntegerResources + DeviceDriverCapabilitiesWindowshasShaderFloat16Support + DeviceDriverCapabilitiesWindowshasSkipPrimitiveTypeInRayTracingShaders + DeviceDriverCapabilitiesWindowshasStereoExpansion + DeviceDriverCapabilitiesWindowshasStructuredBuffers + DeviceDriverCapabilitiesWindowshasTileBasedArchitecture + DeviceDriverCapabilitiesWindowshasTiled2DResources + DeviceDriverCapabilitiesWindowshasTiled3DResources + DeviceDriverCapabilitiesWindowshasTiledMemoryAliasing + DeviceDriverCapabilitiesWindowshasTiledSafeResourcesAccess + DeviceDriverCapabilitiesWindowshasUAVOnEveryStage + DeviceDriverCapabilitiesWindowshasUAVOnlyForcedSampleCount + DeviceDriverCapabilitiesWindowshasVariableRateShading + DeviceDriverCapabilitiesWindowshasVariableRateShadingBy4 + DeviceDriverCapabilitiesWindowshasVariableRateShadingCombiners + DeviceDriverCapabilitiesWindowshasVariableRateShadingShaderOutput + DeviceDriverCapabilitiesWindowshasVariableRateShadingTexture + DeviceDriverCapabilitiesWindowshasVolMipMap + DeviceDriverCapabilitiesWindowshasWaveOps + DeviceDriverCapabilitiesWindowshasWellSupportedIndirect + DeviceDriverCapabilitiesWindowshasXESS + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_xbox_one.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_xbox_one.xml new file mode 100644 index 000000000..39c26c17c --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_capabilities_xbox_one.xml @@ -0,0 +1,1267 @@ + + + + DeviceDriverCapabilitiesXboxOne + DeviceDriverCapabilitiesBase + DeviceDriverCapabilitiesScarlett + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasAnisotropicFilter + + hasAnisotropicFilter + = true + +Constant true. + + +Indicates that the device driver supports anisotropic filtering of textures. DeviceDriverCapabilitiesBase::hasAnisotropicFilter + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasDepthReadOnly + + hasDepthReadOnly + = true + +Constant true. + + +Indicates that the device driver supports constant depth stencil targets that allow simultaneous sampling as a shader resource. DeviceDriverCapabilitiesBase::hasDepthReadOnly + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasStructuredBuffers + + hasStructuredBuffers + = true + +Constant true. + + +Indicates that the device driver supports structured buffer types. DeviceDriverCapabilitiesBase::hasStructuredBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasNoOverwriteOnShaderResourceBuffers + + hasNoOverwriteOnShaderResourceBuffers + = true + +Constant true. + + +Indicates that the device driver supports locking of structured buffers with the no-overwrite method. DeviceDriverCapabilitiesBase::hasNoOverwriteOnShaderResourceBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasForcedSamplerCount + + hasForcedSamplerCount + = true + +Constant true. + + +Indicates that the device driver supports forced multi-sample count during raster phase. DeviceDriverCapabilitiesBase::hasForcedSamplerCount + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasVolMipMap + + hasVolMipMap + = true + +Constant true. + + +Indicates that the device driver supports mipmaps for vol (eg 3D) textures. DeviceDriverCapabilitiesBase::hasVolMipMap + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasAsyncCompute + + hasAsyncCompute + = false + +Constant false. + + +Indicates that the device driver supports GpuPipeline::ASYNC_COMPUTE as selected pipeline when applicable. DeviceDriverCapabilitiesBase::hasAsyncCompute + +This feature can be supported, but is not yet implemented. + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasOcclusionQuery + + hasOcclusionQuery + = true + +Constant true. + + +Indicates that the device driver supports occlusion queries. DeviceDriverCapabilitiesBase::hasOcclusionQuery + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasConstBufferOffset + + hasConstBufferOffset + = true + +Constant true. + + +Indicates that the device driver supports values other than 0 for consts_offset of d3d::set_const_buffer. DeviceDriverCapabilitiesBase::hasConstBufferOffset + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasDepthBoundsTest + + hasDepthBoundsTest + = true + +Constant true. + + +Indicates that the device driver supports depth bounds testing. See d3d::set_depth_bounds for details of depth bounds testing. DeviceDriverCapabilitiesBase::hasDepthBoundsTest + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasConditionalRender + + hasConditionalRender + = true + +Constant true. + + +Indicates that the device driver supports conditional rendering. DeviceDriverCapabilitiesBase::hasConditionalRender + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasResourceCopyConversion + + hasResourceCopyConversion + = true + +Constant true. + + +Indicates that the device driver supports copy of textures of different but compatible formats. DeviceDriverCapabilitiesBase::hasResourceCopyConversion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasAsyncCopy + + hasAsyncCopy + = true + +Constant true. + + +Indicates that the device driver supports asynchronously issued copy operations. DeviceDriverCapabilitiesBase::hasAsyncCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasReadMultisampledDepth + + hasReadMultisampledDepth + = true + +Constant true. + + +Indicates that the device driver supports reading from multi-sampled depth stencil targets. DeviceDriverCapabilitiesBase::hasReadMultisampledDepth + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasInstanceID + + hasInstanceID + = true + +Constant true. + + +Indicates that the device driver supports instance id system variable in shaders. DeviceDriverCapabilitiesBase::hasInstanceID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasConservativeRassterization + + hasConservativeRassterization + = false + +Constant false. + + +Indicates that the device driver supports conservative rastering. DeviceDriverCapabilitiesBase::hasConservativeRassterization + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasQuadTessellation + + hasQuadTessellation + = true + +Constant true. + + +Indicates that the device driver supports quad tessellation. DeviceDriverCapabilitiesBase::hasQuadTessellation + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasGather4 + + hasGather4 + = true + +Constant true. + + +Indicates that the device driver supports gather intrinsic in shaders. DeviceDriverCapabilitiesBase::hasGather4 + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasAlphaCoverage + + hasAlphaCoverage + = true + +Constant true. + + +Indicates that the device driver supports the alpha to coverage raster feature. DeviceDriverCapabilitiesBase::hasAlphaCoverage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasWellSupportedIndirect + + hasWellSupportedIndirect + = true + +Constant true. + + +Indicates that the device driver supports indirect drawing. DeviceDriverCapabilitiesBase::hasWellSupportedIndirect + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasBindless + + hasBindless + = true + +Constant true. + + +Indicates that the device driver supports the bindless API and resource access in shaders. DeviceDriverCapabilitiesBase::hasBindless + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasNVApi + + hasNVApi + = false + +Constant false. + + +Indicates that the device driver has detected that the Nvidia driver API is available for the render device. DeviceDriverCapabilitiesBase::hasNVApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasATIApi + + hasATIApi + = false + +Constant false. + + +Indicates that the device driver has detected that the AMD / ATI driver API is available for the render device. DeviceDriverCapabilitiesBase::hasATIApi + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasVariableRateShading + + hasVariableRateShading + = false + +Constant false. + + +Indicates that the device driver supports basic per draw shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShading + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasVariableRateShadingTexture + + hasVariableRateShadingTexture + = false + +Constant false. + + +Indicates that the device driver supports shading rate textures as a source of shading rate information. DeviceDriverCapabilitiesBase::hasVariableRateShadingTexture + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasVariableRateShadingShaderOutput + + hasVariableRateShadingShaderOutput + = false + +Constant false. + + +Indicates that the device driver supports shader generated shading rates. DeviceDriverCapabilitiesBase::hasVariableRateShadingShaderOutput + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasVariableRateShadingCombiners + + hasVariableRateShadingCombiners + = false + +Constant false. + + +Indicates that the device driver supports combiners for variable rate shading to select the final shading rate. DeviceDriverCapabilitiesBase::hasVariableRateShadingCombiners + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasVariableRateShadingBy4 + + hasVariableRateShadingBy4 + = false + +Constant false. + + +Indicates that the device driver supports variable rate shading blocks with sizes of 4 in X and Y direction. DeviceDriverCapabilitiesBase::hasVariableRateShadingBy4 + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasAliasedTextures + + hasAliasedTextures + = true + +Constant true. + + +Indicates that the device driver supports creation of aliased textures. DeviceDriverCapabilitiesBase::hasAliasedTextures + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasResourceHeaps + + hasResourceHeaps + = true + +Constant true. + + +Indicates that the device driver supports the resource heap API. DeviceDriverCapabilitiesBase::hasResourceHeaps + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasBufferOverlapCopy + + hasBufferOverlapCopy + = true + +Constant true. + + +Indicates that the device driver supports overlapping buffer copies. DeviceDriverCapabilitiesBase::hasBufferOverlapCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasBufferOverlapRegionsCopy + + hasBufferOverlapRegionsCopy + = false + +Constant false. + + +Indicates that the device driver uses region based copies when overlapping copies are executed. DeviceDriverCapabilitiesBase::hasBufferOverlapRegionsCopy + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasUAVOnlyForcedSampleCount + + hasUAVOnlyForcedSampleCount + = true + +Constant true. + + +Indicates that the device driver supports forced multisample count without render targets and only outputting to UAVs. DeviceDriverCapabilitiesBase::hasUAVOnlyForcedSampleCount + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasShader64BitIntegerResources + + hasShader64BitIntegerResources + = false + +Constant false. + + +Indicates that the device driver supports 64 bit integers shader resource types. DeviceDriverCapabilitiesBase::hasShader64BitIntegerResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasNativeRenderPassSubPasses + + hasNativeRenderPassSubPasses + = false + +Constant false. + + +Indicates that the device driver is not emulating render sup-passes. DeviceDriverCapabilitiesBase::hasNativeRenderPassSubPasses + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasTiled2DResources + + hasTiled2DResources + = true + +Constant true. + + +Indicates that the device driver supports tiled 2D textures. DeviceDriverCapabilitiesBase::hasTiled2DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasTiled3DResources + + hasTiled3DResources + = true + +Constant true. + + +Indicates that the device driver supports tiled 3D textures;. DeviceDriverCapabilitiesBase::hasTiled3DResources + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasTiledSafeResourcesAccess + + hasTiledSafeResourcesAccess + = true + +Constant true. + + +Indicates that the device driver supports safe read and write access for not mapped tiles of tiled resources. Such reads return 0 and writes are ignored. DeviceDriverCapabilitiesBase::hasTiledSafeResourcesAccess + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasTiledMemoryAliasing + + hasTiledMemoryAliasing + = true + +Constant true. + + +Indicates that the device driver supports memory aliasing of multiple tiles. DeviceDriverCapabilitiesBase::hasTiledMemoryAliasing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasDLSS + + hasDLSS + = false + +Constant false. + + +Indicates that the device driver supports Nvidia DLSS. DLSS stand for Deep Learning Super Sampling. DeviceDriverCapabilitiesBase::hasDLSS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasXESS + + hasXESS + = false + +Constant false. + + +Indicates that the device driver supports Intel XESS. XESS stands for Xe Super Sampling. DeviceDriverCapabilitiesBase::hasXESS + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasDrawID + + hasDrawID + = true + +Constant true. + + +Indicates that the device driver supports draw id in shaders. DeviceDriverCapabilitiesBase::hasDrawID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasMeshShader + + hasMeshShader + = false + +Constant false. + + +Indicates that the device driver supports the mesh shader pipeline. DeviceDriverCapabilitiesBase::hasMeshShader + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasBasicViewInstancing + + hasBasicViewInstancing + = true + +Constant true. + + +Indicates that the device driver supports basic view instancing. DeviceDriverCapabilitiesBase::hasBasicViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasOptimizedViewInstancing + + hasOptimizedViewInstancing + = true + +Constant true. + + +Indicates that the device driver has some optimizations for view instanced rendering. DeviceDriverCapabilitiesBase::hasOptimizedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasAcceleratedViewInstancing + + hasAcceleratedViewInstancing + = true + +Constant true. + + +Indicates that the device driver has hardware acceleration to natively support view instanced rendering. DeviceDriverCapabilitiesBase::hasAcceleratedViewInstancing + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasRenderPassDepthResolve + + hasRenderPassDepthResolve + = false + +Constant false. + + +Indicates that the device driver can resolve multi-sampled depth stencil render targets in a render pass. DeviceDriverCapabilitiesBase::hasRenderPassDepthResolve + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasStereoExpansion + + hasStereoExpansion + = false + +Constant false. + + +Indicates that the device driver supports stereo render expansion. DeviceDriverCapabilitiesBase::hasStereoExpansion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasTileBasedArchitecture + + hasTileBasedArchitecture + = false + +Constant false. + + +Indicates that the device driver architecture is known to be a tile renderer. DeviceDriverCapabilitiesBase::hasTileBasedArchitecture + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasLazyMemory + + hasLazyMemory + = false + +Constant false. + + +Indicates that the device driver supports lazily allocated memory. DeviceDriverCapabilitiesBase::hasLazyMemory + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasIndirectSupport + + hasIndirectSupport + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support indirect calls. DeviceDriverCapabilitiesBase::hasIndirectSupport + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasCompareSampler + + hasCompareSampler + = true + +Constant true. + + +Indicates that the device driver set when hw doesn't support comparison samplers. DeviceDriverCapabilitiesBase::hasCompareSampler + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasShaderFloat16Support + + hasShaderFloat16Support + = true + +Constant false. + + +Indicates that the device driver supports 16-bit floating-point types in shaders for arithmetic operations. DeviceDriverCapabilitiesBase::hasShaderFloat16Support + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasUAVOnEveryStage + + hasUAVOnEveryStage + = true + +Constant true. + + +Indicates that the device driver supports UAV access in every shader stage, without this cap UAV is only available in pixel and compute shaders. DeviceDriverCapabilitiesBase::hasUAVOnEveryStage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasRayAccelerationStructure + + hasRayAccelerationStructure + = false + +Constant false. + + +Indicates that the device driver supports acceleration structures for ray tracing / ray queries, will be true if hasRayAccelerationStructure, hasRayQuery and / or hasRayDispatch is supported. The vertex format of VSDT_FLOAT3 is guaranteed, for additional formats d3d::raytrace::check_vertex_format_support_for_acceleration_structure_build needs to be used to check for support. DeviceDriverCapabilitiesBase::hasRayAccelerationStructure + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasRayQuery + + hasRayQuery + = false + +Constant false. + + +Indicates that the device driver supports ray queries ("inline ray tracing") in any shader stage. DeviceDriverCapabilitiesBase::hasRayQuery + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasRayDispatch + + hasRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports ray dispatch with its own ray tracing shader stage. DeviceDriverCapabilitiesBase::hasRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasIndirectRayDispatch + + hasIndirectRayDispatch + = false + +Constant false. + + +Indicates that the device driver supports indirect dispatch for dispatch rays. DeviceDriverCapabilitiesBase::hasIndirectRayDispatch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasGeometryIndexInRayAccelerationStructure + + hasGeometryIndexInRayAccelerationStructure + = false + +Constant false. + + +Indicates that the device driver supports geometry index information in acceleration structures in ray tracing / ray query shaders. DeviceDriverCapabilitiesBase::hasGeometryIndexInRayAccelerationStructure + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasSkipPrimitiveTypeInRayTracingShaders + + hasSkipPrimitiveTypeInRayTracingShaders + = false + +Constant false. + + +Indicates that the device driver supports masking flags in shaders to ignore triangle or procedural geometry during traversal. DeviceDriverCapabilitiesBase::hasSkipPrimitiveTypeInRayTracingShaders + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasBaseVertexSupport + + hasBaseVertexSupport + = true + +Constant true. + + +Indicates that the device driver is false when HW does not support draw cals with non-zero baseVertex. DeviceDriverCapabilitiesBase::hasBaseVertexSupport + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::castingFullyTypedFormatsSupported + + castingFullyTypedFormatsSupported + = false + +Constant false. + + +Indicates that the device driver castingFullyTypedFormatsSupported supports casting (aliasing) fully typed formats between each other (same as op3.CastingFullyTypedFormatSupported in DX12) DeviceDriverCapabilitiesBase::castingFullyTypedFormatsSupported + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasNativeRayTracePipelineExpansion + + hasNativeRayTracePipelineExpansion + = false + +Constant false. + + +DeviceDriverCapabilitiesBase::hasNativeRayTracePipelineExpansion + + + + + + + + + constexpr bool + constexpr bool DeviceDriverCapabilitiesXboxOne::hasWaveOps + + hasWaveOps + = true + +Constant true. + + +Indicates that the device driver supports wave ops. DeviceDriverCapabilitiesBase::hasWaveOps + + + + + + + + + +Optimized capabilities structure, hiding bitfield entries with static const values of known platform features for Xbox One. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverCapabilitiesXboxOnecastingFullyTypedFormatsSupported + DeviceDriverCapabilitiesXboxOnehasAcceleratedViewInstancing + DeviceDriverCapabilitiesXboxOnehasAliasedTextures + DeviceDriverCapabilitiesXboxOnehasAlphaCoverage + DeviceDriverCapabilitiesXboxOnehasAnisotropicFilter + DeviceDriverCapabilitiesXboxOnehasAsyncCompute + DeviceDriverCapabilitiesXboxOnehasAsyncCopy + DeviceDriverCapabilitiesXboxOnehasATIApi + DeviceDriverCapabilitiesXboxOnehasBaseVertexSupport + DeviceDriverCapabilitiesXboxOnehasBasicViewInstancing + DeviceDriverCapabilitiesXboxOnehasBindless + DeviceDriverCapabilitiesXboxOnehasBufferOverlapCopy + DeviceDriverCapabilitiesXboxOnehasBufferOverlapRegionsCopy + DeviceDriverCapabilitiesXboxOnehasCompareSampler + DeviceDriverCapabilitiesXboxOnehasConditionalRender + DeviceDriverCapabilitiesXboxOnehasConservativeRassterization + DeviceDriverCapabilitiesXboxOnehasConstBufferOffset + DeviceDriverCapabilitiesXboxOnehasDepthBoundsTest + DeviceDriverCapabilitiesXboxOnehasDepthReadOnly + DeviceDriverCapabilitiesXboxOnehasDLSS + DeviceDriverCapabilitiesXboxOnehasDrawID + DeviceDriverCapabilitiesXboxOnehasForcedSamplerCount + DeviceDriverCapabilitiesXboxOnehasGather4 + DeviceDriverCapabilitiesXboxOnehasGeometryIndexInRayAccelerationStructure + DeviceDriverCapabilitiesXboxOnehasIndirectRayDispatch + DeviceDriverCapabilitiesXboxOnehasIndirectSupport + DeviceDriverCapabilitiesXboxOnehasInstanceID + DeviceDriverCapabilitiesXboxOnehasLazyMemory + DeviceDriverCapabilitiesXboxOnehasMeshShader + DeviceDriverCapabilitiesXboxOnehasNativeRayTracePipelineExpansion + DeviceDriverCapabilitiesXboxOnehasNativeRenderPassSubPasses + DeviceDriverCapabilitiesXboxOnehasNoOverwriteOnShaderResourceBuffers + DeviceDriverCapabilitiesXboxOnehasNVApi + DeviceDriverCapabilitiesXboxOnehasOcclusionQuery + DeviceDriverCapabilitiesXboxOnehasOptimizedViewInstancing + DeviceDriverCapabilitiesXboxOnehasQuadTessellation + DeviceDriverCapabilitiesXboxOnehasRayAccelerationStructure + DeviceDriverCapabilitiesXboxOnehasRayDispatch + DeviceDriverCapabilitiesXboxOnehasRayQuery + DeviceDriverCapabilitiesXboxOnehasReadMultisampledDepth + DeviceDriverCapabilitiesXboxOnehasRenderPassDepthResolve + DeviceDriverCapabilitiesXboxOnehasResourceCopyConversion + DeviceDriverCapabilitiesXboxOnehasResourceHeaps + DeviceDriverCapabilitiesXboxOnehasShader64BitIntegerResources + DeviceDriverCapabilitiesXboxOnehasShaderFloat16Support + DeviceDriverCapabilitiesXboxOnehasSkipPrimitiveTypeInRayTracingShaders + DeviceDriverCapabilitiesXboxOnehasStereoExpansion + DeviceDriverCapabilitiesXboxOnehasStructuredBuffers + DeviceDriverCapabilitiesXboxOnehasTileBasedArchitecture + DeviceDriverCapabilitiesXboxOnehasTiled2DResources + DeviceDriverCapabilitiesXboxOnehasTiled3DResources + DeviceDriverCapabilitiesXboxOnehasTiledMemoryAliasing + DeviceDriverCapabilitiesXboxOnehasTiledSafeResourcesAccess + DeviceDriverCapabilitiesXboxOnehasUAVOnEveryStage + DeviceDriverCapabilitiesXboxOnehasUAVOnlyForcedSampleCount + DeviceDriverCapabilitiesXboxOnehasVariableRateShading + DeviceDriverCapabilitiesXboxOnehasVariableRateShadingBy4 + DeviceDriverCapabilitiesXboxOnehasVariableRateShadingCombiners + DeviceDriverCapabilitiesXboxOnehasVariableRateShadingShaderOutput + DeviceDriverCapabilitiesXboxOnehasVariableRateShadingTexture + DeviceDriverCapabilitiesXboxOnehasVolMipMap + DeviceDriverCapabilitiesXboxOnehasWaveOps + DeviceDriverCapabilitiesXboxOnehasWellSupportedIndirect + DeviceDriverCapabilitiesXboxOnehasXESS + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_issues_android.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_issues_android.xml new file mode 100644 index 000000000..3f22f68b7 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_issues_android.xml @@ -0,0 +1,75 @@ + + + + DeviceDriverIssuesAndroid + DeviceDriverIssuesBase + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverIssuesAndroid::hasClearColorBug + + hasClearColorBug + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Android. + + +DeviceDriverIssuesBase::hasClearColorBug + + + + + + + + + +Issues structure specific for Android. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverIssuesAndroidhasBrokenBaseInstanceID + DeviceDriverIssuesAndroidhasBrokenComputeFormattedOutput + DeviceDriverIssuesAndroidhasBrokenMTRecreateImage + DeviceDriverIssuesAndroidhasBrokenShadersAfterAppSwitch + DeviceDriverIssuesAndroidhasBrokenSRGBConverionWithMRT + DeviceDriverIssuesAndroidhasBrokenSubpasses + DeviceDriverIssuesAndroidhasClearColorBug + DeviceDriverIssuesAndroidhasComputeCanNotWrite3DTex + DeviceDriverIssuesAndroidhasComputeTimeLimited + DeviceDriverIssuesAndroidhasIgnoreDeviceLost + DeviceDriverIssuesAndroidhasMultisampledAndInstancingHang + DeviceDriverIssuesAndroidhasPollDeviceFences + DeviceDriverIssuesAndroidhasRenderPassClearDataRace + DeviceDriverIssuesAndroidhasSmallSampledBuffers + DeviceDriverIssuesAndroidhasStrictRenderPassesOnly + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_issues_base.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_issues_base.xml new file mode 100644 index 000000000..141cbc5bc --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_issues_base.xml @@ -0,0 +1,426 @@ + + + + DeviceDriverIssuesBase + DeviceDriverIssuesAndroid + DeviceDriverIssuesWindows + dag_consts.h + + + bool + bool DeviceDriverIssuesBase::hasComputeTimeLimited + + hasComputeTimeLimited + 1 + + + +Some devices have issues with long running compute stages and may cause a TDR (Timeout Detection and Recovery) to reset the device. Known on the following devices: +Qualcomm Adreno +ARM Mali + + + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasComputeTimeLimited +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasComputeCanNotWrite3DTex + + hasComputeCanNotWrite3DTex + 1 + + + +Some device have issues with writing to 3D textures in the compute stage. Known on the following devices: +Qualcomm Adreno + + + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasComputeCanNotWrite3DTex +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasStrictRenderPassesOnly + + hasStrictRenderPassesOnly + 1 + + + +Some device drivers have issues with unused render pass attachments and my crash during pipeline creation. Known on the following devices: +Qualcomm Adreno + + + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasStrictRenderPassesOnly +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasSmallSampledBuffers + + hasSmallSampledBuffers + 1 + + + +Some device driver have a very limited size for sampled buffers. This indicates that device driver only works reliably with buffers not exceeding the 64KiByte size limit. Some mobile device are actually limited and also fall in this category, even when this is expected behavior. Known to be a bug on the following devices, as they report larger supported sizes, but fail to work with those limits: +Qualcomm Adreno +ARM Mali + + + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasSmallSampledBuffers +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasRenderPassClearDataRace + + hasRenderPassClearDataRace + 1 + + + +Some devices have issues in render passes properly scheduling clears before render, which may result in random flickering. Known on the following devices: +Qualcomm Adreno with certain driver versions + + + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasRenderPassClearDataRace +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasBrokenBaseInstanceID + + hasBrokenBaseInstanceID + 1 + + + +Some device drivers have broken base instance ids in shaders. Known on the following devices: +ARM Mali with certain driver versions + + + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasBrokenBaseInstanceID +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasMultisampledAndInstancingHang + + hasMultisampledAndInstancingHang + 1 + + + +Some device drivers may hang during instanced rendering with multisampled rastering. Known for certain device driver combinations. + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasMultisampledAndInstancingHang +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasIgnoreDeviceLost + + hasIgnoreDeviceLost + 1 + + + +Some device drivers spam device lost error codes while the device still remains functional normally. Known for certain device driver combinations. + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasIgnoreDeviceLost +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasPollDeviceFences + + hasPollDeviceFences + 1 + + + +Some device drivers may randomly fail with a device reset on fence waits, the driver falls back to polling the state of fences instead. Known for certain device driver combinations. + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasPollDeviceFences +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasBrokenShadersAfterAppSwitch + + hasBrokenShadersAfterAppSwitch + 1 + + + +Some device drivers may not render some long shaders after switching from the application and back. Known for certain device driver combinations. + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasBrokenShadersAfterAppSwitch +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasBrokenSRGBConverionWithMRT + + hasBrokenSRGBConverionWithMRT + 1 + + + +Some device drivers have issues with sRGB conversion for render targets in the MRT setup. Known for certain device driver combinations. + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasBrokenSRGBConverionWithMRT +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasBrokenComputeFormattedOutput + + hasBrokenComputeFormattedOutput + 1 + + + +Some device drivers have issues with format conversion while outputting to image with format other than fp32. Known for certain device driver combinations. + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasBrokenComputeFormattedOutput +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasClearColorBug + + hasClearColorBug + 1 + + + +AMD Radeon hangs with DEVICE_LOST on clearview of R8G8 target with a color other than the basic B/W combinations Known for certain device driver combinations. + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Android. DeviceDriverIssuesNoIssues::hasClearColorBug +Runtime defined on Windows. DeviceDriverIssuesWindows + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasBrokenMTRecreateImage + + hasBrokenMTRecreateImage + 1 + + + +Image creation during texture reload seems to crash on some devies. Reports exist for Mali G710 and G610. Known for certain device driver combinations. + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasBrokenMTRecreateImage +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + bool + bool DeviceDriverIssuesBase::hasBrokenSubpasses + + hasBrokenSubpasses + 1 + + + +Some device drivers have some issues with subpasses. Known on the following devices: +Qualcomm Adreno with certain driver versions + + + + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. DeviceDriverIssuesNoIssues::hasBrokenSubpasses +Runtime defined on Android. DeviceDriverIssuesAndroid + + + + + + + + + + + + + +A boolean bitfield that describes which known issues the used device / driver combination has. + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverIssuesBasehasBrokenBaseInstanceID + DeviceDriverIssuesBasehasBrokenComputeFormattedOutput + DeviceDriverIssuesBasehasBrokenMTRecreateImage + DeviceDriverIssuesBasehasBrokenShadersAfterAppSwitch + DeviceDriverIssuesBasehasBrokenSRGBConverionWithMRT + DeviceDriverIssuesBasehasBrokenSubpasses + DeviceDriverIssuesBasehasClearColorBug + DeviceDriverIssuesBasehasComputeCanNotWrite3DTex + DeviceDriverIssuesBasehasComputeTimeLimited + DeviceDriverIssuesBasehasIgnoreDeviceLost + DeviceDriverIssuesBasehasMultisampledAndInstancingHang + DeviceDriverIssuesBasehasPollDeviceFences + DeviceDriverIssuesBasehasRenderPassClearDataRace + DeviceDriverIssuesBasehasSmallSampledBuffers + DeviceDriverIssuesBasehasStrictRenderPassesOnly + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_issues_no_issues.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_issues_no_issues.xml new file mode 100644 index 000000000..78a20bacf --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_issues_no_issues.xml @@ -0,0 +1,87 @@ + + + + DeviceDriverIssuesNoIssues + DeviceDriverIssuesWindows + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverIssuesNoIssues::hasClearColorBug + + hasClearColorBug + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Android. + + +DeviceDriverIssuesBase::hasClearColorBug + + + + + + + + + +Optimized issues structure for all platforms that are known to suffer from none of those. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverIssuesNoIssueshasBrokenBaseInstanceID + DeviceDriverIssuesNoIssueshasBrokenComputeFormattedOutput + DeviceDriverIssuesNoIssueshasBrokenMTRecreateImage + DeviceDriverIssuesNoIssueshasBrokenShadersAfterAppSwitch + DeviceDriverIssuesNoIssueshasBrokenSRGBConverionWithMRT + DeviceDriverIssuesNoIssueshasBrokenSubpasses + DeviceDriverIssuesNoIssueshasClearColorBug + DeviceDriverIssuesNoIssueshasComputeCanNotWrite3DTex + DeviceDriverIssuesNoIssueshasComputeTimeLimited + DeviceDriverIssuesNoIssueshasIgnoreDeviceLost + DeviceDriverIssuesNoIssueshasMultisampledAndInstancingHang + DeviceDriverIssuesNoIssueshasPollDeviceFences + DeviceDriverIssuesNoIssueshasRenderPassClearDataRace + DeviceDriverIssuesNoIssueshasSmallSampledBuffers + DeviceDriverIssuesNoIssueshasStrictRenderPassesOnly + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_issues_windows.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_issues_windows.xml new file mode 100644 index 000000000..02094abe4 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_issues_windows.xml @@ -0,0 +1,316 @@ + + + + DeviceDriverIssuesWindows + DeviceDriverIssuesBase + DeviceDriverIssuesNoIssues + dag_consts.h + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasComputeTimeLimited + + hasComputeTimeLimited + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasComputeTimeLimited + + + + + + + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasComputeCanNotWrite3DTex + + hasComputeCanNotWrite3DTex + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasComputeCanNotWrite3DTex + + + + + + + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasStrictRenderPassesOnly + + hasStrictRenderPassesOnly + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasStrictRenderPassesOnly + + + + + + + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasSmallSampledBuffers + + hasSmallSampledBuffers + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasSmallSampledBuffers + + + + + + + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasRenderPassClearDataRace + + hasRenderPassClearDataRace + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasRenderPassClearDataRace + + + + + + + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasBrokenBaseInstanceID + + hasBrokenBaseInstanceID + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasBrokenBaseInstanceID + + + + + + + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasMultisampledAndInstancingHang + + hasMultisampledAndInstancingHang + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasMultisampledAndInstancingHang + + + + + + + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasIgnoreDeviceLost + + hasIgnoreDeviceLost + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasIgnoreDeviceLost + + + + + + + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasPollDeviceFences + + hasPollDeviceFences + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasPollDeviceFences + + + + + + + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasBrokenShadersAfterAppSwitch + + hasBrokenShadersAfterAppSwitch + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasBrokenShadersAfterAppSwitch + + + + + + + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasBrokenSRGBConverionWithMRT + + hasBrokenSRGBConverionWithMRT + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasBrokenSRGBConverionWithMRT + + + + + + + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasBrokenComputeFormattedOutput + + hasBrokenComputeFormattedOutput + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasBrokenComputeFormattedOutput + + + + + + + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasBrokenMTRecreateImage + + hasBrokenMTRecreateImage + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasBrokenMTRecreateImage + + + + + + + + + constexpr bool + constexpr bool DeviceDriverIssuesWindows::hasBrokenSubpasses + + hasBrokenSubpasses + = false + +Is constant true on Xbox One, Xbox Series X / S, PlayStation 4, PlayStation 5, iOS, tvOS, Nintendo Switch, macOS, Linux and Windows. + + +DeviceDriverIssuesBase::hasBrokenSubpasses + + + + + + + + + +Issues structure specific for Windows. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeviceDriverIssuesWindowshasBrokenBaseInstanceID + DeviceDriverIssuesWindowshasBrokenComputeFormattedOutput + DeviceDriverIssuesWindowshasBrokenMTRecreateImage + DeviceDriverIssuesWindowshasBrokenShadersAfterAppSwitch + DeviceDriverIssuesWindowshasBrokenSRGBConverionWithMRT + DeviceDriverIssuesWindowshasBrokenSubpasses + DeviceDriverIssuesWindowshasClearColorBug + DeviceDriverIssuesWindowshasComputeCanNotWrite3DTex + DeviceDriverIssuesWindowshasComputeTimeLimited + DeviceDriverIssuesWindowshasIgnoreDeviceLost + DeviceDriverIssuesWindowshasMultisampledAndInstancingHang + DeviceDriverIssuesWindowshasPollDeviceFences + DeviceDriverIssuesWindowshasRenderPassClearDataRace + DeviceDriverIssuesWindowshasSmallSampledBuffers + DeviceDriverIssuesWindowshasStrictRenderPassesOnly + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_driver_raytrace_properties.xml b/breathe/doxygen/d3dAPI/xml/struct_device_driver_raytrace_properties.xml new file mode 100644 index 000000000..1dcb1859b --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_driver_raytrace_properties.xml @@ -0,0 +1,64 @@ + + + + DeviceDriverRaytraceProperties + dag_consts.h + + + unsigned + unsigned DeviceDriverRaytraceProperties::topAccelerationStructureInstanceElementSize + + topAccelerationStructureInstanceElementSize + = 0 + + + + + + + + + + unsigned + unsigned DeviceDriverRaytraceProperties::accelerationStructureBuildScratchBufferOffsetAlignment + + accelerationStructureBuildScratchBufferOffsetAlignment + = 0 + +Offsets for scratch buffers for acceleration structures builds have to be aligned to this value. + + + + + + + + + unsigned + unsigned DeviceDriverRaytraceProperties::maxRecursionDepth + + maxRecursionDepth + = 0 + + + +Describes how many "recursions" ray dispatching supports. This describes how many rays can be cast without returning. A value of 1 would mean that only the ray gen shader can shoot the initial ray and no other shader invoked by the rays miss or hit shader. A value of 2 means that the ray gen shader shoots the first ray and the invoked hit or miss shader may also shoot one ray. + + + + + + + + + +Holds the device and driver specific ray tracing related properties. NOTE some platforms may override these with fixed values. + + + + DeviceDriverRaytracePropertiesaccelerationStructureBuildScratchBufferOffsetAlignment + DeviceDriverRaytracePropertiesmaxRecursionDepth + DeviceDriverRaytracePropertiestopAccelerationStructureInstanceElementSize + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_device_reset_event_handler.xml b/breathe/doxygen/d3dAPI/xml/struct_device_reset_event_handler.xml new file mode 100644 index 000000000..e5f84adf0 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_device_reset_event_handler.xml @@ -0,0 +1,57 @@ + + + + DeviceResetEventHandler + + + + virtual DeviceResetEventHandler::~DeviceResetEventHandler + ()=default + ~DeviceResetEventHandler + + + + + + + + + + void + virtual void DeviceResetEventHandler::preRecovery + ()=0 + preRecovery + + + + + + + + + + void + virtual void DeviceResetEventHandler::recovery + ()=0 + recovery + + + + + + + + + + + + + + + + DeviceResetEventHandlerpreRecovery + DeviceResetEventHandlerrecovery + DeviceResetEventHandler~DeviceResetEventHandler + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_draw_indexed_indirect_args.xml b/breathe/doxygen/d3dAPI/xml/struct_draw_indexed_indirect_args.xml new file mode 100644 index 000000000..5ead4cc9f --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_draw_indexed_indirect_args.xml @@ -0,0 +1,85 @@ + + + + DrawIndexedIndirectArgs + + + uint32_t + uint32_t DrawIndexedIndirectArgs::indexCountPerInstance + + indexCountPerInstance + + + + + + + + + + uint32_t + uint32_t DrawIndexedIndirectArgs::instanceCount + + instanceCount + + + + + + + + + + uint32_t + uint32_t DrawIndexedIndirectArgs::startIndexLocation + + startIndexLocation + + + + + + + + + + int32_t + int32_t DrawIndexedIndirectArgs::baseVertexLocation + + baseVertexLocation + + + + + + + + + + uint32_t + uint32_t DrawIndexedIndirectArgs::startInstanceLocation + + startInstanceLocation + + + + + + + + + + + + + + + + DrawIndexedIndirectArgsbaseVertexLocation + DrawIndexedIndirectArgsindexCountPerInstance + DrawIndexedIndirectArgsinstanceCount + DrawIndexedIndirectArgsstartIndexLocation + DrawIndexedIndirectArgsstartInstanceLocation + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_draw_indirect_args.xml b/breathe/doxygen/d3dAPI/xml/struct_draw_indirect_args.xml new file mode 100644 index 000000000..a3bcd123e --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_draw_indirect_args.xml @@ -0,0 +1,71 @@ + + + + DrawIndirectArgs + + + uint32_t + uint32_t DrawIndirectArgs::vertexCountPerInstance + + vertexCountPerInstance + + + + + + + + + + uint32_t + uint32_t DrawIndirectArgs::instanceCount + + instanceCount + + + + + + + + + + uint32_t + uint32_t DrawIndirectArgs::startVertexLocation + + startVertexLocation + + + + + + + + + + uint32_t + uint32_t DrawIndirectArgs::startInstanceLocation + + startInstanceLocation + + + + + + + + + + + + + + + + DrawIndirectArgsinstanceCount + DrawIndirectArgsstartInstanceLocation + DrawIndirectArgsstartVertexLocation + DrawIndirectArgsvertexCountPerInstance + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_driver3d_desc.xml b/breathe/doxygen/d3dAPI/xml/struct_driver3d_desc.xml new file mode 100644 index 000000000..124579efa --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_driver3d_desc.xml @@ -0,0 +1,555 @@ + + + + Driver3dDesc + + + int + int Driver3dDesc::zcmpfunc + + zcmpfunc + + + + + + + + + + int + int Driver3dDesc::acmpfunc + + acmpfunc + + + + + + + + + + int + int Driver3dDesc::sblend + + sblend + + + + + + + + + + int + int Driver3dDesc::dblend + + dblend + + + + + + + + + + int + int Driver3dDesc::mintexw + + mintexw + + + + + + + + + + int + int Driver3dDesc::mintexh + + mintexh + + + + + + + + + + int + int Driver3dDesc::maxtexw + + maxtexw + + + + + + + + + + int + int Driver3dDesc::maxtexh + + maxtexh + + + + + + + + + + int + int Driver3dDesc::mincubesize + + mincubesize + + + + + + + + + + int + int Driver3dDesc::maxcubesize + + maxcubesize + + + + + + + + + + int + int Driver3dDesc::minvolsize + + minvolsize + + + + + + + + + + int + int Driver3dDesc::maxvolsize + + maxvolsize + + + + + + + + + + int + int Driver3dDesc::maxtexaspect + + maxtexaspect + +1 means texture should be square, 0 means no limit + + + + + + + + + int + int Driver3dDesc::maxtexcoord + + maxtexcoord + + + + + + + + + + int + int Driver3dDesc::maxsimtex + + maxsimtex + + + + + + + + + + int + int Driver3dDesc::maxvertexsamplers + + maxvertexsamplers + + + + + + + + + + int + int Driver3dDesc::maxclipplanes + + maxclipplanes + + + + + + + + + + int + int Driver3dDesc::maxstreams + + maxstreams + + + + + + + + + + int + int Driver3dDesc::maxstreamstr + + maxstreamstr + + + + + + + + + + int + int Driver3dDesc::maxvpconsts + + maxvpconsts + + + + + + + + + + int + int Driver3dDesc::maxprims + + maxprims + + + + + + + + + + int + int Driver3dDesc::maxvertind + + maxvertind + + + + + + + + + + float + float Driver3dDesc::upixofs + + upixofs + + + +pixel-size UV offsets that align texture pixels to frame buffer pixels; usually .5 for DX, and 0 for OGL + + + + + + + float + float Driver3dDesc::vpixofs + + vpixofs + + + + + + + + + + int + int Driver3dDesc::maxSimRT + + maxSimRT + +Maximum number of simultaneous render targets, will be at least 1. + + + + + + + + + bool + bool Driver3dDesc::is20ArbitrarySwizzleAvailable + + is20ArbitrarySwizzleAvailable + + + + + + + + + + int + int Driver3dDesc::minWarpSize + + minWarpSize + + + + + + + + + + int + int Driver3dDesc::maxWarpSize + + maxWarpSize + + + + + + + + + + unsigned + unsigned Driver3dDesc::variableRateTextureTileSizeX + + variableRateTextureTileSizeX + + + + + + + + + + unsigned + unsigned Driver3dDesc::variableRateTextureTileSizeY + + variableRateTextureTileSizeY + + + + + + + + + + unsigned + unsigned Driver3dDesc::depthResolveModes + + depthResolveModes + = DepthResolveMode::DEPTH_RESOLVE_MODE_NONE + + + + + + + + + + DeviceDriverCapabilities + DeviceDriverCapabilities Driver3dDesc::caps + + caps + + + + + + + + + + DeviceDriverIssues + DeviceDriverIssues Driver3dDesc::issues + + issues + + + + + + + + + + DeviceDriverShaderModelVersion + DeviceDriverShaderModelVersion Driver3dDesc::shaderModel + + shaderModel + + + + + + + + + + DeviceDriverRaytraceProperties + DeviceDriverRaytraceProperties Driver3dDesc::raytrace + + raytrace + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + shaderModel + + + raytrace + + + issues + + + caps + + + + + + + + + + + + + + + + + + + + Driver3dDescacmpfunc + Driver3dDesccaps + Driver3dDescdblend + Driver3dDescdepthResolveModes + Driver3dDescis20ArbitrarySwizzleAvailable + Driver3dDescissues + Driver3dDescmaxclipplanes + Driver3dDescmaxcubesize + Driver3dDescmaxprims + Driver3dDescmaxSimRT + Driver3dDescmaxsimtex + Driver3dDescmaxstreams + Driver3dDescmaxstreamstr + Driver3dDescmaxtexaspect + Driver3dDescmaxtexcoord + Driver3dDescmaxtexh + Driver3dDescmaxtexw + Driver3dDescmaxvertexsamplers + Driver3dDescmaxvertind + Driver3dDescmaxvolsize + Driver3dDescmaxvpconsts + Driver3dDescmaxWarpSize + Driver3dDescmincubesize + Driver3dDescmintexh + Driver3dDescmintexw + Driver3dDescminvolsize + Driver3dDescminWarpSize + Driver3dDescraytrace + Driver3dDescsblend + Driver3dDescshaderModel + Driver3dDescupixofs + Driver3dDescvariableRateTextureTileSizeX + Driver3dDescvariableRateTextureTileSizeY + Driver3dDescvpixofs + Driver3dDesczcmpfunc + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_driver3d_init_callback_1_1_render_size.xml b/breathe/doxygen/d3dAPI/xml/struct_driver3d_init_callback_1_1_render_size.xml new file mode 100644 index 000000000..378a5ae90 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_driver3d_init_callback_1_1_render_size.xml @@ -0,0 +1,47 @@ + + + + Driver3dInitCallback::RenderSize + dag_info.h + + + int + int Driver3dInitCallback::RenderSize::width + + width + +The width of the render area. + + + + + + + + + int + int Driver3dInitCallback::RenderSize::height + + height + +The height of the render area. + + + + + + + + + +Struct representing the size of the render area. + + + + + + Driver3dInitCallback::RenderSizeheight + Driver3dInitCallback::RenderSizewidth + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_driver3d_init_callback_1_1_version_range.xml b/breathe/doxygen/d3dAPI/xml/struct_driver3d_init_callback_1_1_version_range.xml new file mode 100644 index 000000000..341a666df --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_driver3d_init_callback_1_1_version_range.xml @@ -0,0 +1,47 @@ + + + + Driver3dInitCallback::VersionRange + dag_info.h + + + uint64_t + uint64_t Driver3dInitCallback::VersionRange::minVersion + + minVersion + +The minimum driver version. + + + + + + + + + uint64_t + uint64_t Driver3dInitCallback::VersionRange::maxVersion + + maxVersion + +The maximum driver version. + + + + + + + + + +Struct representing a range of driver versions. + + + + + + Driver3dInitCallback::VersionRangemaxVersion + Driver3dInitCallback::VersionRangeminVersion + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_driver3d_perspective.xml b/breathe/doxygen/d3dAPI/xml/struct_driver3d_perspective.xml new file mode 100644 index 000000000..ab7311b13 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_driver3d_perspective.xml @@ -0,0 +1,155 @@ + + + + Driver3dPerspective + + + float + float Driver3dPerspective::wk + + wk + + + + + + + + + + float + float Driver3dPerspective::hk + + hk + + + + + + + + + + float + float Driver3dPerspective::zn + + zn + + + + + + + + + + float + float Driver3dPerspective::zf + + zf + + + + + + + + + + float + float Driver3dPerspective::ox + + ox + + + + + + + + + + float + float Driver3dPerspective::oy + + oy + + + + + + + + + + + + + Driver3dPerspective::Driver3dPerspective + () + Driver3dPerspective + + + + + + + + + + + Driver3dPerspective::Driver3dPerspective + (float wk_, float hk_, float zn_, float zf_, float ox_=0.f, float oy_=0.f) + Driver3dPerspective + + float + wk_ + + + float + hk_ + + + float + zn_ + + + float + zf_ + + + float + ox_ + 0.f + + + float + oy_ + 0.f + + + + + + + + + + + + + + + + + Driver3dPerspectiveDriver3dPerspective + Driver3dPerspectiveDriver3dPerspective + Driver3dPerspectivehk + Driver3dPerspectiveox + Driver3dPerspectiveoy + Driver3dPerspectivewk + Driver3dPerspectivezf + Driver3dPerspectivezn + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_driver3d_render_target.xml b/breathe/doxygen/d3dAPI/xml/struct_driver3d_render_target.xml new file mode 100644 index 000000000..7d792a8e3 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_driver3d_render_target.xml @@ -0,0 +1,562 @@ + + + + Driver3dRenderTarget + Driver3dRenderTarget::RTState + + + + @18 + + COLOR0 + = 1 << 0 + + + + + + + COLOR1 + = COLOR0 << 1 + + + + + + + COLOR2 + = COLOR1 << 1 + + + + + + + COLOR3 + = COLOR2 << 1 + + + + + + + COLOR4 + = COLOR3 << 1 + + + + + + + COLOR5 + = COLOR4 << 1 + + + + + + + COLOR6 + = COLOR5 << 1 + + + + + + + COLOR7 + = COLOR6 << 1 + + + + + + + COLOR_MASK + = (1 << MAX_SIMRT) - 1 + + + + + + + DEPTH + = 1 << MAX_SIMRT + + + + + + + DEPTH_READONLY + = DEPTH << 1 + + + + + + + TOTAL_MASK + = COLOR_MASK | DEPTH + + + + + + + + + + + + + + + + + constexpr int + constexpr int Driver3dRenderTarget::MAX_SIMRT + + MAX_SIMRT + = 8 + + + + + + + + + + + + RTState + RTState Driver3dRenderTarget::color[MAX_SIMRT] + [MAX_SIMRT] + color + + + + + + + + + + RTState + RTState Driver3dRenderTarget::depth + + depth + + + + + + + + + + uint32_t + uint32_t Driver3dRenderTarget::used + + used + = 0 + + + + + + + + + + + + void + void Driver3dRenderTarget::reset + () + reset + + + + + + + + + + void + void Driver3dRenderTarget::setColor + (int index, BaseTexture *t, int lev, int f_l) + setColor + + int + index + + + BaseTexture * + t + + + int + lev + + + int + f_l + + + + + + + + + + + void + void Driver3dRenderTarget::setBackbufColor + () + setBackbufColor + + + + + + + + + + void + void Driver3dRenderTarget::removeColor + (int index) + removeColor + + int + index + + + + + + + + + + + void + void Driver3dRenderTarget::setDepth + (BaseTexture *t, bool ro=false) + setDepth + + BaseTexture * + t + + + bool + ro + false + + + + + + + + + + + void + void Driver3dRenderTarget::setDepth + (BaseTexture *t, int layer, bool ro=false) + setDepth + + BaseTexture * + t + + + int + layer + + + bool + ro + false + + + + + + + + + + + void + void Driver3dRenderTarget::removeDepth + () + removeDepth + + + + + + + + + + + + const RTState & + const RTState& Driver3dRenderTarget::getColor + (int index) const + getColor + + int + index + + + + + + + + + + + const RTState & + const RTState& Driver3dRenderTarget::getDepth + () const + getDepth + + + + + + + + + + bool + bool Driver3dRenderTarget::isBackBufferColor + () const + isBackBufferColor + + + + + + + + + + bool + bool Driver3dRenderTarget::isColorUsed + (int index) const + isColorUsed + + int + index + + + + + + + + + + + bool + bool Driver3dRenderTarget::isDepthUsed + () const + isDepthUsed + + + + + + + + + + bool + bool Driver3dRenderTarget::isColorUsed + () const + isColorUsed + + + + + + + + + + void + void Driver3dRenderTarget::setDepthReadOnly + () + setDepthReadOnly + + + + + + + + + + void + void Driver3dRenderTarget::setDepthRW + () + setDepthRW + + + + + + + + + + bool + bool Driver3dRenderTarget::isDepthReadOnly + () const + isDepthReadOnly + + + + + + + + + + + Driver3dRenderTarget::Driver3dRenderTarget + () + Driver3dRenderTarget + + + + + + + + + + + + bool + bool operator== + (const Driver3dRenderTarget &l, const Driver3dRenderTarget &r) + operator== + + const Driver3dRenderTarget & + l + + + const Driver3dRenderTarget & + r + + + + + + + + + + + bool + bool operator!= + (const Driver3dRenderTarget &l, const Driver3dRenderTarget &r) + operator!= + + const Driver3dRenderTarget & + l + + + const Driver3dRenderTarget & + r + + + + + + + + + + + + + + + + + + + + tex + + + + + + + + + + + + + + + + + color + depth + + + + + + Driver3dRenderTargetcolor + Driver3dRenderTargetCOLOR0 + Driver3dRenderTargetCOLOR1 + Driver3dRenderTargetCOLOR2 + Driver3dRenderTargetCOLOR3 + Driver3dRenderTargetCOLOR4 + Driver3dRenderTargetCOLOR5 + Driver3dRenderTargetCOLOR6 + Driver3dRenderTargetCOLOR7 + Driver3dRenderTargetCOLOR_MASK + Driver3dRenderTargetdepth + Driver3dRenderTargetDEPTH + Driver3dRenderTargetDEPTH_READONLY + Driver3dRenderTargetDriver3dRenderTarget + Driver3dRenderTargetgetColor + Driver3dRenderTargetgetDepth + Driver3dRenderTargetisBackBufferColor + Driver3dRenderTargetisColorUsed + Driver3dRenderTargetisColorUsed + Driver3dRenderTargetisDepthReadOnly + Driver3dRenderTargetisDepthUsed + Driver3dRenderTargetMAX_SIMRT + Driver3dRenderTargetoperator!= + Driver3dRenderTargetoperator== + Driver3dRenderTargetremoveColor + Driver3dRenderTargetremoveDepth + Driver3dRenderTargetreset + Driver3dRenderTargetsetBackbufColor + Driver3dRenderTargetsetColor + Driver3dRenderTargetsetDepth + Driver3dRenderTargetsetDepth + Driver3dRenderTargetsetDepthReadOnly + Driver3dRenderTargetsetDepthRW + Driver3dRenderTargetTOTAL_MASK + Driver3dRenderTargetused + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_driver3d_render_target_1_1_r_t_state.xml b/breathe/doxygen/d3dAPI/xml/struct_driver3d_render_target_1_1_r_t_state.xml new file mode 100644 index 000000000..e181a3ee6 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_driver3d_render_target_1_1_r_t_state.xml @@ -0,0 +1,177 @@ + + + + Driver3dRenderTarget::RTState + + + BaseTexture * + BaseTexture* Driver3dRenderTarget::RTState::tex + + tex + + + + + + + + + + unsigned char + unsigned char Driver3dRenderTarget::RTState::level + + level + + + + + + + + + + unsigned short + unsigned short Driver3dRenderTarget::RTState::face + + face + + + + + + + + + + unsigned short + unsigned short Driver3dRenderTarget::RTState::layer + + layer + + + + + + + + + + union Driver3dRenderTarget::RTState::@19 + union Driver3dRenderTarget::RTState::@19 Driver3dRenderTarget::RTState::@20 + + @20 + + + + + + + + + + + + void + void Driver3dRenderTarget::RTState::set + (BaseTexture *t, int lev, int f_l) + set + + BaseTexture * + t + + + int + lev + + + int + f_l + + + + + + + + + + + + + bool + bool operator== + (const RTState &l, const RTState &r) + operator== + + const RTState & + l + + + const RTState & + r + + + + + + + + + + + bool + bool operator!= + (const RTState &l, const RTState &r) + operator!= + + const RTState & + l + + + const RTState & + r + + + + + + + + + + + + + + + + + + + + tex + + + + + + + + + + + + + + + + Driver3dRenderTarget::RTStateface + Driver3dRenderTarget::RTStatelayer + Driver3dRenderTarget::RTStatelevel + Driver3dRenderTarget::RTStateoperator!= + Driver3dRenderTarget::RTStateoperator== + Driver3dRenderTarget::RTStateset + Driver3dRenderTarget::RTStatetex + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_drv3d_make_texture_params.xml b/breathe/doxygen/d3dAPI/xml/struct_drv3d_make_texture_params.xml new file mode 100644 index 000000000..d0b529066 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_drv3d_make_texture_params.xml @@ -0,0 +1,127 @@ + + + + Drv3dMakeTextureParams + + + void * + void* Drv3dMakeTextureParams::tex + + tex + + + + + + + + + + const char * + const char* Drv3dMakeTextureParams::name + + name + + + + + + + + + + int + int Drv3dMakeTextureParams::flg + + flg + + + + + + + + + + int + int Drv3dMakeTextureParams::w + + w + + + + + + + + + + int + int Drv3dMakeTextureParams::h + + h + + + + + + + + + + int + int Drv3dMakeTextureParams::layers + + layers + + + + + + + + + + int + int Drv3dMakeTextureParams::mips + + mips + + + + + + + + + + ResourceBarrier + ResourceBarrier Drv3dMakeTextureParams::currentState + + currentState + + + + + + + + + + + + + + + + Drv3dMakeTextureParamscurrentState + Drv3dMakeTextureParamsflg + Drv3dMakeTextureParamsh + Drv3dMakeTextureParamslayers + Drv3dMakeTextureParamsmips + Drv3dMakeTextureParamsname + Drv3dMakeTextureParamstex + Drv3dMakeTextureParamsw + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_drv3d_timings.xml b/breathe/doxygen/d3dAPI/xml/struct_drv3d_timings.xml new file mode 100644 index 000000000..d3122021e --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_drv3d_timings.xml @@ -0,0 +1,127 @@ + + + + Drv3dTimings + + + long long + long long Drv3dTimings::frontendUpdateScreenInterval + + frontendUpdateScreenInterval + + + + + + + + + + long long + long long Drv3dTimings::frontendToBackendUpdateScreenLatency + + frontendToBackendUpdateScreenLatency + + + + + + + + + + long long + long long Drv3dTimings::frontendBackendWaitDuration + + frontendBackendWaitDuration + + + + + + + + + + long long + long long Drv3dTimings::backendFrontendWaitDuration + + backendFrontendWaitDuration + + + + + + + + + + long long + long long Drv3dTimings::gpuWaitDuration + + gpuWaitDuration + + + + + + + + + + long long + long long Drv3dTimings::presentDuration + + presentDuration + + + + + + + + + + long long + long long Drv3dTimings::backbufferAcquireDuration + + backbufferAcquireDuration + + + + + + + + + + long long + long long Drv3dTimings::frontendWaitForSwapchainDuration + + frontendWaitForSwapchainDuration + + + + + + + + + + + + + + + + Drv3dTimingsbackbufferAcquireDuration + Drv3dTimingsbackendFrontendWaitDuration + Drv3dTimingsfrontendBackendWaitDuration + Drv3dTimingsfrontendToBackendUpdateScreenLatency + Drv3dTimingsfrontendUpdateScreenInterval + Drv3dTimingsfrontendWaitForSwapchainDuration + Drv3dTimingsgpuWaitDuration + Drv3dTimingspresentDuration + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_frame_events.xml b/breathe/doxygen/d3dAPI/xml/struct_frame_events.xml new file mode 100644 index 000000000..2e90377c2 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_frame_events.xml @@ -0,0 +1,57 @@ + + + + FrameEvents + + + + virtual FrameEvents::~FrameEvents + ()=default + ~FrameEvents + + + + + + + + + + void + virtual void FrameEvents::beginFrameEvent + ()=0 + beginFrameEvent + + + + + + + + + + void + virtual void FrameEvents::endFrameEvent + ()=0 + endFrameEvent + + + + + + + + + + + + + + + + FrameEventsbeginFrameEvent + FrameEventsendFrameEvent + FrameEvents~FrameEvents + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_fsr2_params.xml b/breathe/doxygen/d3dAPI/xml/struct_fsr2_params.xml new file mode 100644 index 000000000..10f46f982 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_fsr2_params.xml @@ -0,0 +1,247 @@ + + + + Fsr2Params + + + BaseTexture * + BaseTexture* Fsr2Params::color + + color + + + + + + + + + + BaseTexture * + BaseTexture* Fsr2Params::depth + + depth + + + + + + + + + + BaseTexture * + BaseTexture* Fsr2Params::motionVectors + + motionVectors + + + + + + + + + + BaseTexture * + BaseTexture* Fsr2Params::output + + output + + + + + + + + + + float + float Fsr2Params::frameTimeDelta + + frameTimeDelta + + + + + + + + + + float + float Fsr2Params::sharpness + + sharpness + + + + + + + + + + float + float Fsr2Params::jitterOffsetX + + jitterOffsetX + + + + + + + + + + float + float Fsr2Params::jitterOffsetY + + jitterOffsetY + + + + + + + + + + float + float Fsr2Params::motionVectorScaleX + + motionVectorScaleX + + + + + + + + + + float + float Fsr2Params::motionVectorScaleY + + motionVectorScaleY + + + + + + + + + + float + float Fsr2Params::cameraNear + + cameraNear + + + + + + + + + + float + float Fsr2Params::cameraFar + + cameraFar + + + + + + + + + + float + float Fsr2Params::cameraFovAngleVertical + + cameraFovAngleVertical + + + + + + + + + + uint32_t + uint32_t Fsr2Params::renderSizeX + + renderSizeX + + + + + + + + + + uint32_t + uint32_t Fsr2Params::renderSizeY + + renderSizeY + + + + + + + + + + + + + + + + + + + + + + + color + depth + motionVectors + output + + + + + + + + + + + + Fsr2ParamscameraFar + Fsr2ParamscameraFovAngleVertical + Fsr2ParamscameraNear + Fsr2Paramscolor + Fsr2Paramsdepth + Fsr2ParamsframeTimeDelta + Fsr2ParamsjitterOffsetX + Fsr2ParamsjitterOffsetY + Fsr2ParamsmotionVectors + Fsr2ParamsmotionVectorScaleX + Fsr2ParamsmotionVectorScaleY + Fsr2Paramsoutput + Fsr2ParamsrenderSizeX + Fsr2ParamsrenderSizeY + Fsr2Paramssharpness + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_i_drv3_d_device_lost_c_b.xml b/breathe/doxygen/d3dAPI/xml/struct_i_drv3_d_device_lost_c_b.xml new file mode 100644 index 000000000..c66daf20c --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_i_drv3_d_device_lost_c_b.xml @@ -0,0 +1,29 @@ + + + + IDrv3DDeviceLostCB + + + void + virtual void IDrv3DDeviceLostCB::onDeviceLost + ()=0 + onDeviceLost + + + + + + + + + + + + + + + + IDrv3DDeviceLostCBonDeviceLost + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_i_drv3_d_reset_c_b.xml b/breathe/doxygen/d3dAPI/xml/struct_i_drv3_d_reset_c_b.xml new file mode 100644 index 000000000..177e0df1c --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_i_drv3_d_reset_c_b.xml @@ -0,0 +1,93 @@ + + + + IDrv3DResetCB + + + void + virtual void IDrv3DResetCB::beforeReset + (bool full_reset)=0 + beforeReset + + bool + full_reset + + + + + + + + + + + void + virtual void IDrv3DResetCB::afterReset + (bool full_reset)=0 + afterReset + + bool + full_reset + + + + + + + + + + + void + virtual void IDrv3DResetCB::resetCounter + () + resetCounter + + + + + + + + + + void + virtual void IDrv3DResetCB::windowResized + () + windowResized + + + + + + + + + + void + virtual void IDrv3DResetCB::fullscreenStateRestored + () + fullscreenStateRestored + + + + + + + + + + + + + + + + IDrv3DResetCBafterReset + IDrv3DResetCBbeforeReset + IDrv3DResetCBfullscreenStateRestored + IDrv3DResetCBresetCounter + IDrv3DResetCBwindowResized + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_mtl_fx_upscale_params.xml b/breathe/doxygen/d3dAPI/xml/struct_mtl_fx_upscale_params.xml new file mode 100644 index 000000000..a569c1509 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_mtl_fx_upscale_params.xml @@ -0,0 +1,77 @@ + + + + MtlFxUpscaleParams + + + BaseTexture * + BaseTexture* MtlFxUpscaleParams::color + + color + + + + + + + + + + BaseTexture * + BaseTexture* MtlFxUpscaleParams::output + + output + + + + + + + + + + MtlfxColorMode + MtlfxColorMode MtlFxUpscaleParams::colorMode + + colorMode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + color + output + + + + + + MtlFxUpscaleParamscolor + MtlFxUpscaleParamscolorMode + MtlFxUpscaleParamsoutput + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_render_pass_area.xml b/breathe/doxygen/d3dAPI/xml/struct_render_pass_area.xml new file mode 100644 index 000000000..3396b5f46 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_render_pass_area.xml @@ -0,0 +1,101 @@ + + + + RenderPassArea + dag_renderPass.h + + + uint32_t + uint32_t RenderPassArea::left + + left + + + + + + + + + + uint32_t + uint32_t RenderPassArea::top + + top + + + + + + + + + + uint32_t + uint32_t RenderPassArea::width + + width + + + + + + + + + + uint32_t + uint32_t RenderPassArea::height + + height + + + + + + + + + + float + float RenderPassArea::minZ + + minZ + + + + + + + + + + float + float RenderPassArea::maxZ + + maxZ + + + + + + + + + + +Area of render target where rendering will happen inside render pass. + + + + + + RenderPassAreaheight + RenderPassArealeft + RenderPassAreamaxZ + RenderPassAreaminZ + RenderPassAreatop + RenderPassAreawidth + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_render_pass_bind.xml b/breathe/doxygen/d3dAPI/xml/struct_render_pass_bind.xml new file mode 100644 index 000000000..0abff8fa8 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_render_pass_bind.xml @@ -0,0 +1,93 @@ + + + + RenderPassBind + dag_renderPass.h + + + int32_t + int32_t RenderPassBind::target + + target + +Index of render target in render targets array that will be used for this bind. + + + + + + + + + int32_t + int32_t RenderPassBind::subpass + + subpass + +Index of subpass where bind happens. + + + + + + + + + int32_t + int32_t RenderPassBind::slot + + slot + +Index of slot where target will be used. + + + + + + + + + RenderPassTargetAction + RenderPassTargetAction RenderPassBind::action + + action + +defines what will happen with target used in binding + + + + + + + + + ResourceBarrier + ResourceBarrier RenderPassBind::dependencyBarrier + + dependencyBarrier + +optional user barrier for generic(emulated) implementation + + + + + + + + + +Description of render target bind inside render pass. + + +Fully defines operation that will happen with target at defined subpass slot + + + + RenderPassBindaction + RenderPassBinddependencyBarrier + RenderPassBindslot + RenderPassBindsubpass + RenderPassBindtarget + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_render_pass_desc.xml b/breathe/doxygen/d3dAPI/xml/struct_render_pass_desc.xml new file mode 100644 index 000000000..cb2c6cbab --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_render_pass_desc.xml @@ -0,0 +1,141 @@ + + + + RenderPassDesc + dag_renderPass.h + + + const char * + const char* RenderPassDesc::debugName + + debugName + +Name that is visible only in developer builds and inside graphics tools, if possible. + + + + + + + + + uint32_t + uint32_t RenderPassDesc::targetCount + + targetCount + +Total amount of targets inside render pass. + + + + + + + + + uint32_t + uint32_t RenderPassDesc::bindCount + + bindCount + +Total amount of bindings for render pass. + + + + + + + + + const RenderPassTargetDesc * + const RenderPassTargetDesc* RenderPassDesc::targetsDesc + + targetsDesc + +Array of targetCount elements, supplying early description of render target. + + + + + + + + + const RenderPassBind * + const RenderPassBind* RenderPassDesc::binds + + binds + +Array of bindCount elements, describing all subpasses. + + + + + + + + + uint32_t + uint32_t RenderPassDesc::subpassBindingOffset + + subpassBindingOffset + +Texture binding offset for shader subpass reads used on APIs without native render passes. + + +Generic(emulated) implementation will use registers starting from this offset, to bind input attachments. This must be properly handled inside shader code for generic implementation to work properly! + + + + + + + +Render pass resource description, used to create RenderPass object. + + + + + + + + + + + + + templateResource + + + + + + + + + + + + + + + + + binds + + + targetsDesc + + + + + + RenderPassDescbindCount + RenderPassDescbinds + RenderPassDescdebugName + RenderPassDescsubpassBindingOffset + RenderPassDesctargetCount + RenderPassDesctargetsDesc + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_render_pass_target.xml b/breathe/doxygen/d3dAPI/xml/struct_render_pass_target.xml new file mode 100644 index 000000000..6f78b1e36 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_render_pass_target.xml @@ -0,0 +1,80 @@ + + + + RenderPassTarget + dag_renderPass.h + + + RenderTarget + RenderTarget RenderPassTarget::resource + + resource + +Actual render target subresource reference. + + + + + + + + + ResourceClearValue + ResourceClearValue RenderPassTarget::clearValue + + clearValue + +Clear value that is used on clear action. + + + + + + + + + +Description of target that is used inside render pass. + + + + + + + + + + + + + + + + + + + resource + + + clearValue + + + + + + + tex + + + + + + + + + + RenderPassTargetclearValue + RenderPassTargetresource + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_render_pass_target_desc.xml b/breathe/doxygen/d3dAPI/xml/struct_render_pass_target_desc.xml new file mode 100644 index 000000000..13c42adf1 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_render_pass_target_desc.xml @@ -0,0 +1,82 @@ + + + + RenderPassTargetDesc + dag_renderPass.h + + + BaseTexture * + BaseTexture* RenderPassTargetDesc::templateResource + + templateResource + +Resource from which information is extracted, can be nullptr. + + + + + + + + + unsigned + unsigned RenderPassTargetDesc::texcf + + texcf + +Raw texture create flags, used if template resource is not provided. + + + + + + + + + bool + bool RenderPassTargetDesc::aliased + + aliased + +Must be set if template resource is empty and target will use memory aliased inside render pass. + + + + + + + + + +Early description of render target. + + +Gives necessary info at render pass creation so render pass is compatible with targets of same type later on + + + + + + + + + + + templateResource + + + + + + + + + + + + RenderPassTargetDescaliased + RenderPassTargetDesctemplateResource + RenderPassTargetDesctexcf + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_render_target.xml b/breathe/doxygen/d3dAPI/xml/struct_render_target.xml new file mode 100644 index 000000000..0a5387f55 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_render_target.xml @@ -0,0 +1,81 @@ + + + + RenderTarget + dag_renderTarget.h + + + BaseTexture * + BaseTexture* RenderTarget::tex + + tex + +Texture to set as render target. + + + + + + + + + uint32_t + uint32_t RenderTarget::mip_level + + mip_level + +Mip level to set as render target. + + + + + + + + + uint32_t + uint32_t RenderTarget::layer + + layer + +Layer to set as render target. + + + + + + + + + +Represents a render target to set it into slot. + + + + + + + + + + + + + + + + + + + tex + + + + + + RenderTargetlayer + RenderTargetmip_level + RenderTargettex + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_resource_allocation_properties.xml b/breathe/doxygen/d3dAPI/xml/struct_resource_allocation_properties.xml new file mode 100644 index 000000000..aed9de8cd --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_resource_allocation_properties.xml @@ -0,0 +1,62 @@ + + + + ResourceAllocationProperties + dag_heap.h + + + size_t + size_t ResourceAllocationProperties::sizeInBytes + + sizeInBytes + +The size of the resource allocation in bytes. + + + + + + + + + size_t + size_t ResourceAllocationProperties::offsetAlignment + + offsetAlignment + +The alignment of the offset in bytes. + + + + + + + + + ResourceHeapGroup * + ResourceHeapGroup* ResourceAllocationProperties::heapGroup + + heapGroup + +The resource heap group. + + + + + + + + + +Properties of a resource allocation. + + + + + + ResourceAllocationPropertiesheapGroup + ResourceAllocationPropertiesoffsetAlignment + ResourceAllocationPropertiessizeInBytes + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_resource_checker.xml b/breathe/doxygen/d3dAPI/xml/struct_resource_checker.xml new file mode 100644 index 000000000..7a07b6b7c --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_resource_checker.xml @@ -0,0 +1,88 @@ + + + + ResourceChecker + Sbuffer + + + void + static void ResourceChecker::init + () + init + + + + + + + + + + void + static void ResourceChecker::report + () + report + + + + + + + + + + + + void + void ResourceChecker::checkLockParams + (uint32_t offset, uint32_t size, int flags, int bufFlags) + checkLockParams + + uint32_t + offset + + + uint32_t + size + + + int + flags + + + int + bufFlags + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ResourceCheckercheckLockParams + ResourceCheckerinit + ResourceCheckerreport + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_resource_description.xml b/breathe/doxygen/d3dAPI/xml/struct_resource_description.xml new file mode 100644 index 000000000..93df0823e --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_resource_description.xml @@ -0,0 +1,572 @@ + + + + ResourceDescription + dag_heap.h + + + size_t + using ResourceDescription::HashT = size_t + + HashT + +The type of the hash value. + + + + + + + + + + + uint32_t + uint32_t ResourceDescription::resType + + resType + +The type of the resource. One of the RES3D_* constants. + + + + + + + + + BasicResourceDescription + BasicResourceDescription ResourceDescription::asBasicRes + + asBasicRes + +The basic resource description. + + + + + + + + + BufferResourceDescription + BufferResourceDescription ResourceDescription::asBufferRes + + asBufferRes + +The buffer resource description. + + + + + + + + + BasicTextureResourceDescription + BasicTextureResourceDescription ResourceDescription::asBasicTexRes + + asBasicTexRes + +The basic texture resource description. + + + + + + + + + TextureResourceDescription + TextureResourceDescription ResourceDescription::asTexRes + + asTexRes + +The 2D texture resource description. + + + + + + + + + VolTextureResourceDescription + VolTextureResourceDescription ResourceDescription::asVolTexRes + + asVolTexRes + +The volume texture resource description. + + + + + + + + + ArrayTextureResourceDescription + ArrayTextureResourceDescription ResourceDescription::asArrayTexRes + + asArrayTexRes + +The array texture resource description. + + + + + + + + + CubeTextureResourceDescription + CubeTextureResourceDescription ResourceDescription::asCubeTexRes + + asCubeTexRes + +The cube texture resource description. + + + + + + + + + ArrayCubeTextureResourceDescription + ArrayCubeTextureResourceDescription ResourceDescription::asArrayCubeTexRes + + asArrayCubeTexRes + +The array cube texture resource description. + + + + + + + + + union ResourceDescription::@21 + union ResourceDescription::@21 ResourceDescription::@22 + + @22 + + + + + + + + + + + + + ResourceDescription::ResourceDescription + ()=default + ResourceDescription + +Default constructor. + + + + + + + + + + ResourceDescription::ResourceDescription + (const ResourceDescription &)=default + ResourceDescription + + const ResourceDescription & + + +Copy constructor. + + + + + + + + + ResourceDescription & + ResourceDescription& ResourceDescription::operator= + (const ResourceDescription &)=default + operator= + + const ResourceDescription & + + +Copy assignment operator. + + + + + + + + + + ResourceDescription::ResourceDescription + (const BufferResourceDescription &buf) + ResourceDescription + + const BufferResourceDescription & + buf + + +Constructor for buffer resources. + + + + + + + + + + ResourceDescription::ResourceDescription + (const TextureResourceDescription &tex) + ResourceDescription + + const TextureResourceDescription & + tex + + +Constructor for 2D textures. + + + + + + + + + + ResourceDescription::ResourceDescription + (const VolTextureResourceDescription &tex) + ResourceDescription + + const VolTextureResourceDescription & + tex + + +Constructor for volume textures. + + + + + + + + + + ResourceDescription::ResourceDescription + (const ArrayTextureResourceDescription &tex) + ResourceDescription + + const ArrayTextureResourceDescription & + tex + + +Constructor for array textures. + + + + + + + + + + ResourceDescription::ResourceDescription + (const CubeTextureResourceDescription &tex) + ResourceDescription + + const CubeTextureResourceDescription & + tex + + +Constructor for cube textures. + + + + + + + + + + ResourceDescription::ResourceDescription + (const ArrayCubeTextureResourceDescription &tex) + ResourceDescription + + const ArrayCubeTextureResourceDescription & + tex + + +Constructor for array cube textures. + + + + + + + + + bool + bool ResourceDescription::operator== + (const ResourceDescription &r) const + operator== + + const ResourceDescription & + r + + +Equality operator for resource descriptions. + + +The operator compares all necessary fields of the resource descriptions for equality. + + +r + + +The resource description to compare with. + + + +True if the resource descriptions are equal, false otherwise. + + + + + + + + + HashT + HashT ResourceDescription::hash + () const + hash + +Computes the hash value of the resource description. + + +The hash value of the resource description. + + + + + + + + + + + HashT + HashT ResourceDescription::hashPack + () const + hashPack + +Hashes an empty tuple of values. + + +HashT the hash value of the tuple. + + + + + + + + + + + typename T + + + typename... + Ts + Ts + + + HashT + HashT ResourceDescription::hashPack + (const T &first, const Ts &...other) const + hashPack + + const T & + first + + + const Ts &... + other + + +Hashes a tuple of values. + + + + +T + + +type of the first value. + + + + +Ts + + +types of the other values. + + + + + +first + + +the first value. + + + + +other + + +the other values. + + + +HashT the hash value of the tuple. + + + + + + + + + +A common type for a resource description that can be used to describe any type of GPU resource. + + + + + + + + + asArrayTexRes + + + asBufferRes + + + asCubeTexRes + + + asVolTexRes + + + asArrayCubeTexRes + + + asBasicRes + + + asTexRes + + + asBasicTexRes + + + + + + + + + + + + + clearValue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ResourceDescriptionasArrayCubeTexRes + ResourceDescriptionasArrayTexRes + ResourceDescriptionasBasicRes + ResourceDescriptionasBasicTexRes + ResourceDescriptionasBufferRes + ResourceDescriptionasCubeTexRes + ResourceDescriptionasTexRes + ResourceDescriptionasVolTexRes + ResourceDescriptionhash + ResourceDescriptionhashPack + ResourceDescriptionhashPack + ResourceDescriptionHashT + ResourceDescriptionoperator= + ResourceDescriptionoperator== + ResourceDescriptionResourceDescription + ResourceDescriptionResourceDescription + ResourceDescriptionResourceDescription + ResourceDescriptionResourceDescription + ResourceDescriptionResourceDescription + ResourceDescriptionResourceDescription + ResourceDescriptionResourceDescription + ResourceDescriptionResourceDescription + ResourceDescriptionresType + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_resource_heap_group_properties.xml b/breathe/doxygen/d3dAPI/xml/struct_resource_heap_group_properties.xml new file mode 100644 index 000000000..90f7e129c --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_resource_heap_group_properties.xml @@ -0,0 +1,142 @@ + + + + ResourceHeapGroupProperties + dag_heap.h + + + uint32_t + uint32_t ResourceHeapGroupProperties::flags + + flags + +Flags of the resource heap group represented as a single dword. + + + + + + + + + bool + bool ResourceHeapGroupProperties::isCPUVisible + + isCPUVisible + 1 + + + +If true, the CPU can access this memory directly. On consoles this is usually true for all heap groups, on PC only for system memory heap groups. + + + + + + + bool + bool ResourceHeapGroupProperties::isGPULocal + + isGPULocal + 1 + + + +If true, the GPU can access this memory directly without going over a bus like PCIE. On consoles this is usually true for all heap groups, on PC only for memory dedicated to the GPU. + + + + + + + bool + bool ResourceHeapGroupProperties::isOnChip + + isOnChip + 1 + +Special on chip memory, like ESRAM of the XB1. + + + + + + + + + union ResourceHeapGroupProperties::@23 + union ResourceHeapGroupProperties::@23 ResourceHeapGroupProperties::@24 + + @24 + + + + + + + + + + uint64_t + uint64_t ResourceHeapGroupProperties::maxResourceSize + + maxResourceSize + +The maximum size of a resource that can be placed into a heap of this group. + + + + + + + + + uint64_t + uint64_t ResourceHeapGroupProperties::maxHeapSize + + maxHeapSize + + + +the maximum size of a individual heap, this is usually limited by the amount that is installed in the system. Drivers may impose other limitations. + + + + + + + uint64_t + uint64_t ResourceHeapGroupProperties::optimalMaxHeapSize + + optimalMaxHeapSize + + + +This is a hint for the user to try to aim for this heap size for best performance. Larger heaps until maxHeapSize are still possible, but larger heaps than optimalMaxHeapSize may yield worse performance, as the runtime may has to use sub-optimal memory sources to satisfy the allocation request. A value of 0 indicates that there is no optimal size and any size is expected to perform similarly. +For example on DX12 on Windows the optimal size is 64 MiBytes, suggested by MS representatives, as windows may not be able to provide heaps in the requested memory source. + + + + + + + +Properties of a resource heap group. A heap group is a type of memory with specific properties. + + +Heap groups can not be substitutes for different groups with equal properties, as some devices have different memory types with the same public properties, but with purpose bound properties that are identified by a heap group. For example, older NVIDIA hardware can not put render target and non render target textures into the same memory region, they have to be specific for render targets and non render targets, this is exposed as different heap groups, but they have the same public properties, as they are all reside on GPU local memory. + + + + + + ResourceHeapGroupPropertiesflags + ResourceHeapGroupPropertiesisCPUVisible + ResourceHeapGroupPropertiesisGPULocal + ResourceHeapGroupPropertiesisOnChip + ResourceHeapGroupPropertiesmaxHeapSize + ResourceHeapGroupPropertiesmaxResourceSize + ResourceHeapGroupPropertiesoptimalMaxHeapSize + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_sbuffer_1_1_i_reload_data.xml b/breathe/doxygen/d3dAPI/xml/struct_sbuffer_1_1_i_reload_data.xml new file mode 100644 index 000000000..6ec88f618 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_sbuffer_1_1_i_reload_data.xml @@ -0,0 +1,75 @@ + + + + Sbuffer::IReloadData + dag_buffers.h + + + + virtual Sbuffer::IReloadData::~IReloadData + () + ~IReloadData + + + + + + + + + + void + virtual void Sbuffer::IReloadData::reloadD3dRes + (Sbuffer *sb)=0 + reloadD3dRes + + Sbuffer * + sb + + +Reloads content of the buffer. + + + + +sb + + +The buffer to fill. + + + + + + + + + + + void + virtual void Sbuffer::IReloadData::destroySelf + ()=0 + destroySelf + +Destroys the callback object. Will be called on a buffer destruction. + + + + + + + + + +Interface for a callback that is called when the buffer is restored after device reset. + + + + + + Sbuffer::IReloadDatadestroySelf + Sbuffer::IReloadDatareloadD3dRes + Sbuffer::IReloadData~IReloadData + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_scissor_rect.xml b/breathe/doxygen/d3dAPI/xml/struct_scissor_rect.xml new file mode 100644 index 000000000..081a82cad --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_scissor_rect.xml @@ -0,0 +1,84 @@ + + + + ScissorRect + Viewport + + + int + int ScissorRect::x + + x + + + + + + + + + + int + int ScissorRect::y + + y + + + + + + + + + + int + int ScissorRect::w + + w + + + + + + + + + + int + int ScissorRect::h + + h + + + + + + + + + + + + + + + + + + + + + + + + + + + + ScissorRecth + ScissorRectw + ScissorRectx + ScissorRecty + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_scope_render_target.xml b/breathe/doxygen/d3dAPI/xml/struct_scope_render_target.xml new file mode 100644 index 000000000..6126fbed0 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_scope_render_target.xml @@ -0,0 +1,93 @@ + + + + ScopeRenderTarget + + + Driver3dRenderTarget + Driver3dRenderTarget ScopeRenderTarget::prevRT + + prevRT + + + + + + + + + + + + + ScopeRenderTarget::ScopeRenderTarget + () + ScopeRenderTarget + + + + + + + + + + + ScopeRenderTarget::~ScopeRenderTarget + () + ~ScopeRenderTarget + + + + + + + + + + + + + + + + + + + prevRT + + + + + + + tex + + + + + + + + + + + + + + + + + color + depth + + + + + + ScopeRenderTargetprevRT + ScopeRenderTargetScopeRenderTarget + ScopeRenderTarget~ScopeRenderTarget + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_scope_view_proj_matrix.xml b/breathe/doxygen/d3dAPI/xml/struct_scope_view_proj_matrix.xml new file mode 100644 index 000000000..077bf7b30 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_scope_view_proj_matrix.xml @@ -0,0 +1,81 @@ + + + + ScopeViewProjMatrix + ViewProjMatrixContainer + + + + ScopeViewProjMatrix::ScopeViewProjMatrix + () + ScopeViewProjMatrix + + + + + + + + + + + ScopeViewProjMatrix::~ScopeViewProjMatrix + () + ~ScopeViewProjMatrix + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + p + + + + + + + + + + + + ScopeViewProjMatrixgetProjTm + ScopeViewProjMatrixgetViewTm + ScopeViewProjMatrixp + ScopeViewProjMatrixp_ok + ScopeViewProjMatrixsavedProj + ScopeViewProjMatrixsavedView + ScopeViewProjMatrixScopeViewProjMatrix + ScopeViewProjMatrix~ScopeViewProjMatrix + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_scope_viewport.xml b/breathe/doxygen/d3dAPI/xml/struct_scope_viewport.xml new file mode 100644 index 000000000..a54153515 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_scope_viewport.xml @@ -0,0 +1,129 @@ + + + + ScopeViewport + + + int + int ScopeViewport::viewX + + viewX + + + + + + + + + + int + int ScopeViewport::viewY + + viewY + + + + + + + + + + int + int ScopeViewport::viewW + + viewW + + + + + + + + + + int + int ScopeViewport::viewH + + viewH + + + + + + + + + + float + float ScopeViewport::viewN + + viewN + + + + + + + + + + float + float ScopeViewport::viewF + + viewF + + + + + + + + + + + + + ScopeViewport::ScopeViewport + () + ScopeViewport + + + + + + + + + + + ScopeViewport::~ScopeViewport + () + ~ScopeViewport + + + + + + + + + + + + + + + + ScopeViewportScopeViewport + ScopeViewportviewF + ScopeViewportviewH + ScopeViewportviewN + ScopeViewportviewW + ScopeViewportviewX + ScopeViewportviewY + ScopeViewport~ScopeViewport + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_shader_in_library_reference.xml b/breathe/doxygen/d3dAPI/xml/struct_shader_in_library_reference.xml new file mode 100644 index 000000000..229687d3f --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_shader_in_library_reference.xml @@ -0,0 +1,47 @@ + + + + ShaderInLibraryReference + dag_shaderLibraryObject.h + + + ShaderLibrary + ShaderLibrary ShaderInLibraryReference::library + + library + +Source library. + + + + + + + + + uint32_t + uint32_t ShaderInLibraryReference::index + + index + +Index into the library that references the shader. + + + + + + + + + + + +This references a shader in a shader library. A valid reference is when 'library' is not InvalidShaderLibrary and is a handle to a alive library object and 'index' is a index is a valid index into the shader library, where the value is less than the number of shaders stored in that shader library referenced with the 'library' member. A value of InvalidShaderLibrary of the member library indicates a 'null reference' (null pointer). Any other combination of values that are not a valid reference or a 'null reference' will result in undefined behavior. Drivers may be able to validate any or none of the inputs. + + + + ShaderInLibraryReferenceindex + ShaderInLibraryReferencelibrary + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_shader_library_create_info.xml b/breathe/doxygen/d3dAPI/xml/struct_shader_library_create_info.xml new file mode 100644 index 000000000..198df5cde --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_shader_library_create_info.xml @@ -0,0 +1,79 @@ + + + + ShaderLibraryCreateInfo + dag_shaderLibraryObject.h + + + const char * + const char* ShaderLibraryCreateInfo::debugName + + debugName + = nullptr + + + +Optional debug name, drivers may use this to enhance debug information. This may be null. + + + + + + + dag::ConstSpan< const char * > + dag::ConstSpan<const char *> ShaderLibraryCreateInfo::nameTable + + nameTable + + + +Drivers may need to translate indices into names back and forth. This has to match the exported shaders of the library defined by driverBinary. + + + + + + + dag::ConstSpan< const uint8_t > + dag::ConstSpan<const uint8_t> ShaderLibraryCreateInfo::driverBinary + + driverBinary + + + +Pointer to driver specific binary of a shader library. Can not be an empty span and stored data must be a valid binary for the current d3d driver. + + + + + + + bool + bool ShaderLibraryCreateInfo::mayBeUsedByExpandablePipeline + + mayBeUsedByExpandablePipeline + = false + + + +If this library may be used to create a pipeline that is expandable, then this has to be set to true otherwise the create of pipelines that supposed to be expandable and use the library created without this setting may fail. + + + + + + + + + +Create info structure that contains all the data to create a new shader library that can provide shaders to create pipeline objects. + + + + ShaderLibraryCreateInfodebugName + ShaderLibraryCreateInfodriverBinary + ShaderLibraryCreateInfomayBeUsedByExpandablePipeline + ShaderLibraryCreateInfonameTable + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_shader_warm_up_info.xml b/breathe/doxygen/d3dAPI/xml/struct_shader_warm_up_info.xml new file mode 100644 index 000000000..904d20d23 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_shader_warm_up_info.xml @@ -0,0 +1,416 @@ + + + + ShaderWarmUpInfo + + + int32_t + int32_t ShaderWarmUpInfo::shaderProgram + + shaderProgram + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::colorFormats[Driver3dRenderTarget::MAX_SIMRT] + [Driver3dRenderTarget::MAX_SIMRT] + colorFormats + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::depthStencilFormat + + depthStencilFormat + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::validColorTargetAndDepthStencilMask + + validColorTargetAndDepthStencilMask + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::colorWriteMask + + colorWriteMask + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::vertexInputStreamStrides[4] + [4] + vertexInputStreamStrides + + + + + + + + + + uint8_t + uint8_t ShaderWarmUpInfo::primitiveTopologyMask + + primitiveTopologyMask + + + + + + + + + + uint8_t + uint8_t ShaderWarmUpInfo::cullMode + + cullMode + + + + + + + + + + uint8_t + uint8_t ShaderWarmUpInfo::depthTestFunction + + depthTestFunction + + + + + + + + + + uint8_t + uint8_t ShaderWarmUpInfo::stencilTestFunction + + stencilTestFunction + + + + + + + + + + uint8_t + uint8_t ShaderWarmUpInfo::stencilOnStencilFail + + stencilOnStencilFail + + + + + + + + + + uint8_t + uint8_t ShaderWarmUpInfo::stencilOnDepthFail + + stencilOnDepthFail + + + + + + + + + + uint8_t + uint8_t ShaderWarmUpInfo::stencilOnAllPass + + stencilOnAllPass + + + + + + + + + + uint8_t + uint8_t ShaderWarmUpInfo::blendOpRGB + + blendOpRGB + + + + + + + + + + uint8_t + uint8_t ShaderWarmUpInfo::blendOpAlpha + + blendOpAlpha + + + + + + + + + + uint8_t + uint8_t ShaderWarmUpInfo::blendSrcFactorRGB + + blendSrcFactorRGB + + + + + + + + + + uint8_t + uint8_t ShaderWarmUpInfo::blendSrcFactorAlpha + + blendSrcFactorAlpha + + + + + + + + + + uint8_t + uint8_t ShaderWarmUpInfo::blendDstFactorRGB + + blendDstFactorRGB + + + + + + + + + + uint8_t + uint8_t ShaderWarmUpInfo::blendDstFactorAlpha + + blendDstFactorAlpha + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::polyLineEnable + + polyLineEnable + 1 + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::flipCullEnable + + flipCullEnable + 1 + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::depthTestEnable + + depthTestEnable + 1 + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::depthWriteEnable + + depthWriteEnable + 1 + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::depthBoundsEnable + + depthBoundsEnable + 1 + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::depthClipEnable + + depthClipEnable + 1 + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::stencilTestEnable + + stencilTestEnable + 1 + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::blendEnable + + blendEnable + 1 + + + + + + + + + + uint32_t + uint32_t ShaderWarmUpInfo::separateBlendEnable + + separateBlendEnable + 1 + + + + + + + + + + + + + + + + ShaderWarmUpInfoblendDstFactorAlpha + ShaderWarmUpInfoblendDstFactorRGB + ShaderWarmUpInfoblendEnable + ShaderWarmUpInfoblendOpAlpha + ShaderWarmUpInfoblendOpRGB + ShaderWarmUpInfoblendSrcFactorAlpha + ShaderWarmUpInfoblendSrcFactorRGB + ShaderWarmUpInfocolorFormats + ShaderWarmUpInfocolorWriteMask + ShaderWarmUpInfocullMode + ShaderWarmUpInfodepthBoundsEnable + ShaderWarmUpInfodepthClipEnable + ShaderWarmUpInfodepthStencilFormat + ShaderWarmUpInfodepthTestEnable + ShaderWarmUpInfodepthTestFunction + ShaderWarmUpInfodepthWriteEnable + ShaderWarmUpInfoflipCullEnable + ShaderWarmUpInfopolyLineEnable + ShaderWarmUpInfoprimitiveTopologyMask + ShaderWarmUpInfoseparateBlendEnable + ShaderWarmUpInfoshaderProgram + ShaderWarmUpInfostencilOnAllPass + ShaderWarmUpInfostencilOnDepthFail + ShaderWarmUpInfostencilOnStencilFail + ShaderWarmUpInfostencilTestEnable + ShaderWarmUpInfostencilTestFunction + ShaderWarmUpInfovalidColorTargetAndDepthStencilMask + ShaderWarmUpInfovertexInputStreamStrides + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_texture_channel_format_desc.xml b/breathe/doxygen/d3dAPI/xml/struct_texture_channel_format_desc.xml new file mode 100644 index 000000000..d96031d3f --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_texture_channel_format_desc.xml @@ -0,0 +1,85 @@ + + + + TextureChannelFormatDesc + + + int8_t + int8_t TextureChannelFormatDesc::bits + + bits + + + + + + + + + + int8_t + int8_t TextureChannelFormatDesc::offset + + offset + + + + + + + + + + bool + bool TextureChannelFormatDesc::isFloatPoint + + isFloatPoint + + + + + + + + + + bool + bool TextureChannelFormatDesc::isSigned + + isSigned + + + + + + + + + + bool + bool TextureChannelFormatDesc::isNormalized + + isNormalized + + + + + + + + + + + + + + + + TextureChannelFormatDescbits + TextureChannelFormatDescisFloatPoint + TextureChannelFormatDescisNormalized + TextureChannelFormatDescisSigned + TextureChannelFormatDescoffset + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_texture_format_desc.xml b/breathe/doxygen/d3dAPI/xml/struct_texture_format_desc.xml new file mode 100644 index 000000000..3c7caf9cd --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_texture_format_desc.xml @@ -0,0 +1,273 @@ + + + + TextureFormatDesc + + + uint32_t + uint32_t TextureFormatDesc::dagorTextureFormat + + dagorTextureFormat + + + + + + + + + + uint16_t + uint16_t TextureFormatDesc::bytesPerElement + + bytesPerElement + + + + + + + + + + bool + bool TextureFormatDesc::isBlockFormat + + isBlockFormat + + + + + + + + + + uint8_t + uint8_t TextureFormatDesc::elementWidth + + elementWidth + + + + + + + + + + uint8_t + uint8_t TextureFormatDesc::elementHeight + + elementHeight + + + + + + + + + + ChannelDType + ChannelDType TextureFormatDesc::mainChannelsType + + mainChannelsType + + + + + + + + + + ChannelDType + ChannelDType TextureFormatDesc::stencilChannelType + + stencilChannelType + + + + + + + + + + TextureChannelFormatDesc + TextureChannelFormatDesc TextureFormatDesc::r + + r + + + + + + + + + + TextureChannelFormatDesc + TextureChannelFormatDesc TextureFormatDesc::g + + g + + + + + + + + + + TextureChannelFormatDesc + TextureChannelFormatDesc TextureFormatDesc::b + + b + + + + + + + + + + TextureChannelFormatDesc + TextureChannelFormatDesc TextureFormatDesc::a + + a + + + + + + + + + + TextureChannelFormatDesc + TextureChannelFormatDesc TextureFormatDesc::depth + + depth + + + + + + + + + + TextureChannelFormatDesc + TextureChannelFormatDesc TextureFormatDesc::stencil + + stencil + + + + + + + + + + + + bool + bool TextureFormatDesc::hasAlpha + () const + hasAlpha + + + + + + + + + + bool + bool TextureFormatDesc::isDepth + () const + isDepth + + + + + + + + + + int + int TextureFormatDesc::rgbaChannelsCount + () const + rgbaChannelsCount + + + + + + + + + + int + int TextureFormatDesc::channelsCount + () const + channelsCount + + + + + + + + + + + + + + + + + + + a + b + depth + g + r + stencil + + + + + + + + + + TextureFormatDesca + TextureFormatDescb + TextureFormatDescbytesPerElement + TextureFormatDescchannelsCount + TextureFormatDescdagorTextureFormat + TextureFormatDescdepth + TextureFormatDescelementHeight + TextureFormatDescelementWidth + TextureFormatDescg + TextureFormatDeschasAlpha + TextureFormatDescisBlockFormat + TextureFormatDescisDepth + TextureFormatDescmainChannelsType + TextureFormatDescr + TextureFormatDescrgbaChannelsCount + TextureFormatDescstencil + TextureFormatDescstencilChannelType + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_texture_info.xml b/breathe/doxygen/d3dAPI/xml/struct_texture_info.xml new file mode 100644 index 000000000..2152e8bc0 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_texture_info.xml @@ -0,0 +1,123 @@ + + + + TextureInfo + + + unsigned short + unsigned short TextureInfo::w + + w + = 1 + +width, height, depth (for VOLTEX), array slices (slice count for ARRTEX or 6 for CUBETEX) + + + + + + + + + unsigned short + unsigned short TextureInfo::h + + h + = 1 + + + + + + + + + + unsigned short + unsigned short TextureInfo::d + + d + = 1 + + + + + + + + + + unsigned short + unsigned short TextureInfo::a + + a + = 1 + + + + + + + + + + unsigned short + unsigned short TextureInfo::mipLevels + + mipLevels + = 0 + +all mips and res type + + + + + + + + + unsigned short + unsigned short TextureInfo::resType + + resType + = 0 + + + + + + + + + + unsigned + unsigned TextureInfo::cflg + + cflg + = 0 + +texture creation flags + + + + + + + + + + + + + + + TextureInfoa + TextureInfocflg + TextureInfod + TextureInfoh + TextureInfomipLevels + TextureInforesType + TextureInfow + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_texture_resource_description.xml b/breathe/doxygen/d3dAPI/xml/struct_texture_resource_description.xml new file mode 100644 index 000000000..32a161de5 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_texture_resource_description.xml @@ -0,0 +1,109 @@ + + + + TextureResourceDescription + BasicTextureResourceDescription + ArrayTextureResourceDescription + VolTextureResourceDescription + dag_heap.h + + + uint32_t + uint32_t TextureResourceDescription::width + + width + +The width of the texture. + + + + + + + + + uint32_t + uint32_t TextureResourceDescription::height + + height + +The height of the texture. + + + + + + + + + +Texture resource description that contains fields specific to 2D textures. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + clearValue + + + + + + + + + + + + + + + + TextureResourceDescriptionactivation + TextureResourceDescriptioncFlags + TextureResourceDescriptionclearValue + TextureResourceDescriptionheight + TextureResourceDescriptionmipLevels + TextureResourceDescriptionwidth + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_texture_tiling_info.xml b/breathe/doxygen/d3dAPI/xml/struct_texture_tiling_info.xml new file mode 100644 index 000000000..560cbc3dc --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_texture_tiling_info.xml @@ -0,0 +1,213 @@ + + + + TextureTilingInfo + dag_tiledResource.h + + + size_t + size_t TextureTilingInfo::totalNumberOfTiles + + totalNumberOfTiles + +Total number of tiles in the resource. + + + + + + + + + size_t + size_t TextureTilingInfo::numUnpackedMips + + numUnpackedMips + +Number of unpacked mips in the resource. + + + + + + + + + size_t + size_t TextureTilingInfo::numPackedMips + + numPackedMips + +Number of packed mips in the resource. + + + + + + + + + size_t + size_t TextureTilingInfo::numTilesNeededForPackedMips + + numTilesNeededForPackedMips + +Number of tiles needed to store the packed mips. + + + + + + + + + size_t + size_t TextureTilingInfo::firstPackedTileIndex + + firstPackedTileIndex + +Index of the first tile storing packed mips. + + + + + + + + + size_t + size_t TextureTilingInfo::tileWidthInPixels + + tileWidthInPixels + +Width of each tile in pixels. + + + + + + + + + size_t + size_t TextureTilingInfo::tileHeightInPixels + + tileHeightInPixels + +Height of each tile in pixels. + + + + + + + + + size_t + size_t TextureTilingInfo::tileDepthInPixels + + tileDepthInPixels + +Depth of each tile in pixels. + + + + + + + + + size_t + size_t TextureTilingInfo::tileMemorySize + + tileMemorySize + +Size of each tile in bytes. + + + + + + + + + size_t + size_t TextureTilingInfo::subresourceWidthInTiles + + subresourceWidthInTiles + +Width of the subresource in tiles. + + + + + + + + + size_t + size_t TextureTilingInfo::subresourceHeightInTiles + + subresourceHeightInTiles + +Height of the subresource in tiles. + + + + + + + + + size_t + size_t TextureTilingInfo::subresourceDepthInTiles + + subresourceDepthInTiles + +Depth of the subresource in tiles. + + + + + + + + + size_t + size_t TextureTilingInfo::subresourceStartTileIndex + + subresourceStartTileIndex + +Index of the first tile of the subresource. + + + + + + + + + +Structure representing the properties of a tiled resource. + + +NOTE: even if numPackedMips is zero, numTilesNeededForPackedMips may be greater than zero, which is a special case, and numTilesNeededForPackedMips tiles still need to be assigned at numUnpackedMips. + + + + TextureTilingInfofirstPackedTileIndex + TextureTilingInfonumPackedMips + TextureTilingInfonumTilesNeededForPackedMips + TextureTilingInfonumUnpackedMips + TextureTilingInfosubresourceDepthInTiles + TextureTilingInfosubresourceHeightInTiles + TextureTilingInfosubresourceStartTileIndex + TextureTilingInfosubresourceWidthInTiles + TextureTilingInfotileDepthInPixels + TextureTilingInfotileHeightInPixels + TextureTilingInfotileMemorySize + TextureTilingInfotileWidthInPixels + TextureTilingInfototalNumberOfTiles + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_tile_mapping.xml b/breathe/doxygen/d3dAPI/xml/struct_tile_mapping.xml new file mode 100644 index 000000000..198db5071 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_tile_mapping.xml @@ -0,0 +1,112 @@ + + + + TileMapping + dag_tiledResource.h + + + size_t + size_t TileMapping::texX + + texX + +The tile coordinates in tiles, not pixels! + + + + + + + + + size_t + size_t TileMapping::texY + + texY + +The tile coordinates in tiles, not pixels! + + + + + + + + + size_t + size_t TileMapping::texZ + + texZ + +The tile coordinates in tiles, not pixels! + + + + + + + + + size_t + size_t TileMapping::texSubresource + + texSubresource + +The index of the subresource. + + + + + + + + + size_t + size_t TileMapping::heapTileIndex + + heapTileIndex + +The index of the tile in the heap. Not bytes, but tile index! + + + + + + + + + size_t + size_t TileMapping::heapTileSpan + + heapTileSpan + + + +The number of tiles to map. Zero is invalid, and if it is not one, an array of tiles will be mapped, to the specified location. Example usage for this is packed mip tails. +Map to subresource TextureTilingInfo::numUnpackedMips at 0, 0, 0. +Use a span of TextureTilingInfo::numTilesNeededForPackedMips so the whole mip tail can be mapped at once. +From TileMapping::heapTileIndex the given number of tiles will be mapped to the packed mip tail. + + + + + + + + + +Describes a mapping between a tile in a texture and a memory area in a heap. + + + + + + TileMappingheapTileIndex + TileMappingheapTileSpan + TileMappingtexSubresource + TileMappingtexX + TileMappingtexY + TileMappingtexZ + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_view_proj_matrix_container.xml b/breathe/doxygen/d3dAPI/xml/struct_view_proj_matrix_container.xml new file mode 100644 index 000000000..20257c5e2 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_view_proj_matrix_container.xml @@ -0,0 +1,130 @@ + + + + ViewProjMatrixContainer + ScopeViewProjMatrix + + + TMatrix + TMatrix ViewProjMatrixContainer::savedView + + savedView + = TMatrix::IDENT + + + + + + + + + + TMatrix4 + TMatrix4 ViewProjMatrixContainer::savedProj + + savedProj + = TMatrix4::IDENT + + + + + + + + + + Driver3dPerspective + Driver3dPerspective ViewProjMatrixContainer::p + + p + + + + + + + + + + bool + bool ViewProjMatrixContainer::p_ok + + p_ok + = false + + + + + + + + + + + + const TMatrix & + const TMatrix& ViewProjMatrixContainer::getViewTm + () const + getViewTm + + + + + + + + + + const TMatrix4 & + const TMatrix4& ViewProjMatrixContainer::getProjTm + () const + getProjTm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + p + + + + + + ViewProjMatrixContainergetProjTm + ViewProjMatrixContainergetViewTm + ViewProjMatrixContainerp + ViewProjMatrixContainerp_ok + ViewProjMatrixContainersavedProj + ViewProjMatrixContainersavedView + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_viewport.xml b/breathe/doxygen/d3dAPI/xml/struct_viewport.xml new file mode 100644 index 000000000..ba15b5f1b --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_viewport.xml @@ -0,0 +1,89 @@ + + + + Viewport + ScissorRect + + + float + float Viewport::minz + + minz + + + + + + + + + + float + float Viewport::maxz + + maxz + + + + + + + + + + + + constexpr uint32_t + constexpr uint32_t Viewport::MAX_VIEWPORT_COUNT + + MAX_VIEWPORT_COUNT + = 16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Viewporth + ViewportMAX_VIEWPORT_COUNT + Viewportmaxz + Viewportminz + Viewportw + Viewportx + Viewporty + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_vol_texture_resource_description.xml b/breathe/doxygen/d3dAPI/xml/struct_vol_texture_resource_description.xml new file mode 100644 index 000000000..91b47e22f --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_vol_texture_resource_description.xml @@ -0,0 +1,94 @@ + + + + VolTextureResourceDescription + TextureResourceDescription + dag_heap.h + + + uint32_t + uint32_t VolTextureResourceDescription::depth + + depth + +The depth of the volume texture. + + + + + + + + + +Volume texture resource description that contains fields specific to volume textures. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + clearValue + + + + + + + + + + + + + + + + + + + + + + VolTextureResourceDescriptionactivation + VolTextureResourceDescriptioncFlags + VolTextureResourceDescriptionclearValue + VolTextureResourceDescriptiondepth + VolTextureResourceDescriptionheight + VolTextureResourceDescriptionmipLevels + VolTextureResourceDescriptionwidth + + + diff --git a/breathe/doxygen/d3dAPI/xml/struct_xess_params.xml b/breathe/doxygen/d3dAPI/xml/struct_xess_params.xml new file mode 100644 index 000000000..a7bf835ce --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/struct_xess_params.xml @@ -0,0 +1,177 @@ + + + + XessParams + + + BaseTexture * + BaseTexture* XessParams::inColor + + inColor + + + + + + + + + + BaseTexture * + BaseTexture* XessParams::inDepth + + inDepth + + + + + + + + + + BaseTexture * + BaseTexture* XessParams::inMotionVectors + + inMotionVectors + + + + + + + + + + float + float XessParams::inJitterOffsetX + + inJitterOffsetX + + + + + + + + + + float + float XessParams::inJitterOffsetY + + inJitterOffsetY + + + + + + + + + + float + float XessParams::inInputWidth + + inInputWidth + + + + + + + + + + float + float XessParams::inInputHeight + + inInputHeight + + + + + + + + + + int + int XessParams::inColorDepthOffsetX + + inColorDepthOffsetX + + + + + + + + + + int + int XessParams::inColorDepthOffsetY + + inColorDepthOffsetY + + + + + + + + + + BaseTexture * + BaseTexture* XessParams::outColor + + outColor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + inColor + inDepth + inMotionVectors + outColor + + + + + + XessParamsinColor + XessParamsinColorDepthOffsetX + XessParamsinColorDepthOffsetY + XessParamsinDepth + XessParamsinInputHeight + XessParamsinInputWidth + XessParamsinJitterOffsetX + XessParamsinJitterOffsetY + XessParamsinMotionVectors + XessParamsoutColor + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1_auto_pipeline_async_compile.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1_auto_pipeline_async_compile.xml new file mode 100644 index 000000000..e3ccc800f --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1_auto_pipeline_async_compile.xml @@ -0,0 +1,53 @@ + + + + d3d::AutoPipelineAsyncCompile + dag_async_pipeline.h + + + bool + allow_compute_pipelines + allow_compute_pipelines + true + + + + + + d3d::AutoPipelineAsyncCompile< allow_compute_pipelines >::AutoPipelineAsyncCompile + () + AutoPipelineAsyncCompile + + + + + + + + + + + d3d::AutoPipelineAsyncCompile< allow_compute_pipelines >::~AutoPipelineAsyncCompile + () + ~AutoPipelineAsyncCompile + + + + + + + + + + +Enables async pipeline compilation in its scope when allow_compute_pipelines is false, only graphics pipelines are async compiled (compute compiled as is) + + + + + + d3d::AutoPipelineAsyncCompileAutoPipelineAsyncCompile + d3d::AutoPipelineAsyncCompile~AutoPipelineAsyncCompile + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1_border_color.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1_border_color.xml new file mode 100644 index 000000000..dccc22870 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1_border_color.xml @@ -0,0 +1,135 @@ + + + + d3d::BorderColor + dag_sampler.h + + + UnderlyingT + Color + + TransparentBlack + = 0x00000000 + +Transparent black color. + + + + + + OpaqueBlack + = 0xFF000000 + +Opaque black color. + + + + + + OpaqueWhite + = 0xFFFFFFFF + +Opaque white color. + + + + + + + + + + + + + + uint32_t + using d3d::BorderColor::UnderlyingT = uint32_t + + UnderlyingT + + + + + + + + + + + + enum d3d::BorderColor::Color + enum d3d::BorderColor::Color d3d::BorderColor::color + + color + + + + + + + + + + + + + d3d::BorderColor::BorderColor + (Color color=Color::TransparentBlack) + BorderColor + + Color + color + Color::TransparentBlack + + + + + + + + + + + + d3d::BorderColor::operator E3DCOLOR + () const + operator E3DCOLOR + + + + + + + + + + + d3d::BorderColor::operator UnderlyingT + () const + operator UnderlyingT + + + + + + + + + + +BorderColor struct. + + + + + + d3d::BorderColorBorderColor + d3d::BorderColorColor + d3d::BorderColorcolor + d3d::BorderColoroperator E3DCOLOR + d3d::BorderColoroperator UnderlyingT + d3d::BorderColorUnderlyingT + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1_g_p_u_workload_split.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1_g_p_u_workload_split.xml new file mode 100644 index 000000000..fc7797251 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1_g_p_u_workload_split.xml @@ -0,0 +1,102 @@ + + + + d3d::GPUWorkloadSplit + dag_lock.h + + + bool + bool d3d::GPUWorkloadSplit::needSplitAtEnd + + needSplitAtEnd + + + +Flag indicating whether a split is needed at the end. + + + + + + + + + + d3d::GPUWorkloadSplit::GPUWorkloadSplit + (bool do_split, bool split_at_end, const char *marker) + GPUWorkloadSplit + + bool + do_split + + + bool + split_at_end + + + const char * + marker + + +Constructs a GPUWorkloadSplit object. + + + + +do_split + + +Flag indicating whether to split the GPU workload. + + + + +split_at_end + + +Flag indicating whether to split at the end. + + + + +marker + + +A marker used for splitting the workload. + + + + + + + + + + + + d3d::GPUWorkloadSplit::~GPUWorkloadSplit + () + ~GPUWorkloadSplit + +Destructs the GPUWorkloadSplit object. If a split is needed at the end, it performs the split. + + + + + + + + + +The GPUWorkloadSplit struct is used for scoped conditional GPU workload splitting. It allows splitting the GPU workload based on certain conditions. + + + + + + d3d::GPUWorkloadSplitGPUWorkloadSplit + d3d::GPUWorkloadSplitneedSplitAtEnd + d3d::GPUWorkloadSplit~GPUWorkloadSplit + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1_gpu_auto_lock.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1_gpu_auto_lock.xml new file mode 100644 index 000000000..efba0edd3 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1_gpu_auto_lock.xml @@ -0,0 +1,45 @@ + + + + d3d::GpuAutoLock + dag_lock.h + + + + d3d::GpuAutoLock::GpuAutoLock + () + GpuAutoLock + + + + + + + + + + + d3d::GpuAutoLock::~GpuAutoLock + () + ~GpuAutoLock + + + + + + + + + + +The GpuAutoLock struct is a lock that automatically acquires and releases a GPU lock. It is used to protect critical sections of code that interact with the GPU. + + + + + + d3d::GpuAutoLockGpuAutoLock + d3d::GpuAutoLock~GpuAutoLock + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1_loading_auto_lock.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1_loading_auto_lock.xml new file mode 100644 index 000000000..487d33469 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1_loading_auto_lock.xml @@ -0,0 +1,45 @@ + + + + d3d::LoadingAutoLock + dag_lock.h + + + + d3d::LoadingAutoLock::LoadingAutoLock + () + LoadingAutoLock + + + + + + + + + + + d3d::LoadingAutoLock::~LoadingAutoLock + () + ~LoadingAutoLock + + + + + + + + + + +The LoadingAutoLock struct is a non-exclusive lock that protects a thread from GPU reset. It is used to ensure that the GPU is not reset while a thread is performing loading operations. + + + + + + d3d::LoadingAutoLockLoadingAutoLock + d3d::LoadingAutoLock~LoadingAutoLock + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1_sampler_info.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1_sampler_info.xml new file mode 100644 index 000000000..22a9b7df9 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1_sampler_info.xml @@ -0,0 +1,214 @@ + + + + d3d::SamplerInfo + dag_sampler.h + + + MipMapMode + MipMapMode d3d::SamplerInfo::mip_map_mode + + mip_map_mode + = MipMapMode::Default + +MipMapMode. + + + + + + + + + FilterMode + FilterMode d3d::SamplerInfo::filter_mode + + filter_mode + = FilterMode::Default + +FilterMode. + + + + + + + + + AddressMode + AddressMode d3d::SamplerInfo::address_mode_u + + address_mode_u + = AddressMode::Wrap + +AddressMode for U coordinate. + + + + + + + + + AddressMode + AddressMode d3d::SamplerInfo::address_mode_v + + address_mode_v + = AddressMode::Wrap + +AddressMode for V coordinate. + + + + + + + + + AddressMode + AddressMode d3d::SamplerInfo::address_mode_w + + address_mode_w + = AddressMode::Wrap + +AddressMode for W coordinate. + + + + + + + + + BorderColor + BorderColor d3d::SamplerInfo::border_color + + border_color + +Border color. + + + + + + + + + float + float d3d::SamplerInfo::anisotropic_max + + anisotropic_max + = 1.f + +Max anisotropic value. Only positive power of two values <= 16 are valid. + + + + + + + + + float + float d3d::SamplerInfo::mip_map_bias + + mip_map_bias + = 0.f + +MipMap bias. + + + + + + + + + + + bool + bool d3d::SamplerInfo::operator== + (const SamplerInfo &rhs) const + operator== + + const SamplerInfo & + rhs + + + + + + + + + + + bool + bool d3d::SamplerInfo::operator!= + (const SamplerInfo &rhs) const + operator!= + + const SamplerInfo & + rhs + + + + + + + + + + + bool + bool d3d::SamplerInfo::operator< + (const SamplerInfo &rhs) const + operator< + + const SamplerInfo & + rhs + + + + + + + + + + + +SamplerInfo struct. + + +This struct contains the information needed to create a sampler + + + + + + + border_color + + + + + + + + + + d3d::SamplerInfoaddress_mode_u + d3d::SamplerInfoaddress_mode_v + d3d::SamplerInfoaddress_mode_w + d3d::SamplerInfoanisotropic_max + d3d::SamplerInfoborder_color + d3d::SamplerInfofilter_mode + d3d::SamplerInfomip_map_bias + d3d::SamplerInfomip_map_mode + d3d::SamplerInfooperator!= + d3d::SamplerInfooperator< + d3d::SamplerInfooperator== + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_any.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_any.xml new file mode 100644 index 000000000..f0adddeac --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_any.xml @@ -0,0 +1,59 @@ + + + + d3d::drivercode::matcher::Any + d3d::drivercode::matcher::Const< true > + dag_driverCode.h + + + constexpr Inverted< Any > + constexpr Inverted<Any> d3d::drivercode::matcher::Any::operator! + () const =delete + operator! + +Disallow operations with any, any should only be used on its own. + + + + + + + + + +The any matcher behaves like a constant true matcher, matching always to true. + + +Any has some special meaning in some context (like map), where it result in different type / code-gen. + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d::drivercode::matcher::Anyis + d3d::drivercode::matcher::Anyoperator! + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_binary_op.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_binary_op.xml new file mode 100644 index 000000000..0badb5e64 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_binary_op.xml @@ -0,0 +1,174 @@ + + + + d3d::drivercode::matcher::BinaryOp + dag_driverCode.h + + + typename T0 + + + typename T1 + + + typename Operator + + + + + BinaryOp< T0, T1, Operator > + using d3d::drivercode::matcher::BinaryOp< T0, T1, Operator >::ThisType = BinaryOp<T0, T1, Operator> + + ThisType + +Shorthand for this type. + + + + + + + + + + + T0 + T0 d3d::drivercode::matcher::BinaryOp< T0, T1, Operator >::first + + first + +State of the first matcher. + + + + + + + + + T1 + T1 d3d::drivercode::matcher::BinaryOp< T0, T1, Operator >::second + + second + +State of the second matcher. + + + + + + + + + + + constexpr bool + constexpr bool d3d::drivercode::matcher::BinaryOp< T0, T1, Operator >::is + (int value) + is + + int + value + + + + +Executes matchers for both T1 and T2 and combines the result with the operator Operator. + +value + + +Is the driver code value that should be matched by the matchers. + + + +Combined result of the matchers T1 and T2, combined by Operator. + + + + + + + + + constexpr Inverted< ThisType > + constexpr Inverted<ThisType> d3d::drivercode::matcher::BinaryOp< T0, T1, Operator >::operator! + () const + operator! + + + +Creates the inverted matcher of this matcher. Inverted matcher of this matcher. + + + + + + + + + + + +Combines two matchers with a binary operator. + +T0 + + +Type of the first matcher. + + + + +T1 + + +Type of the second matcher. + + + + +Operator + + +The binary operator that should combine the two matchers. + + + +Combines two matchers with a binary operation. + +T0 + + +Type of the first operand. + + + + +T1 + + +Type of the second operand. + + + + +Operator + + +Type of the binary operator. + + + + + + + + d3d::drivercode::matcher::BinaryOpfirst + d3d::drivercode::matcher::BinaryOpis + d3d::drivercode::matcher::BinaryOpoperator! + d3d::drivercode::matcher::BinaryOpsecond + d3d::drivercode::matcher::BinaryOpThisType + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_const.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_const.xml new file mode 100644 index 000000000..fff647838 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_const.xml @@ -0,0 +1,85 @@ + + + + d3d::drivercode::matcher::Const + d3d::drivercode::matcher::ConstID< Ident, Constant > + dag_driverCode.h + + + bool + Constant + Constant + + + + + constexpr bool + static constexpr bool d3d::drivercode::matcher::Const< Constant >::is + (int) + is + + int + + + + +Matches always Constant. Always Constant. + + + + + + + + + + + constexpr Const<!Constant > + constexpr Const<!Constant> d3d::drivercode::matcher::Const< Constant >::operator! + () const + operator! + + + +Creates the inverted matcher of this matcher, will always yield the opposite of Constant. Inverted matcher of this matcher. + + + + + + + + + + + +A constant matcher, which will always yield the value of Constant. + +Constant + + +The value the matcher should yield during matching. + + + + + + + + + + + + + + + + + + + + d3d::drivercode::matcher::Constis + d3d::drivercode::matcher::Constoperator! + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_const_i_d.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_const_i_d.xml new file mode 100644 index 000000000..570af617c --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_const_i_d.xml @@ -0,0 +1,123 @@ + + + + d3d::drivercode::matcher::ConstID + d3d::drivercode::matcher::Const< Constant > + dag_driverCode.h + + + int + Ident + Ident + + + bool + Constant + Constant + + + + + ConstID< Ident, Constant > + using d3d::drivercode::matcher::ConstID< Ident, Constant >::ThisType = ConstID<Ident, Constant> + + ThisType + + + + + + + + + + + + constexpr int + constexpr int d3d::drivercode::matcher::ConstID< Ident, Constant >::value + + value + = make_foucc(Ident) + +The value of Ident. This value is used by DriverCode::make to initialize the driver code state. + + + + + + + + + + + constexpr Const<!Constant > + constexpr Const<!Constant> d3d::drivercode::matcher::ConstID< Ident, Constant >::operator! + () const + operator! + + + +Creates the inverted matcher of this matcher, will always yield false. A const false matcher. + + + + + + + + + + + +A matcher with a matching id, but matching will always yield the value of Constant. + +Ident + + +The ID the matcher is associated with. + + + + +Constant + + +The value the matcher should yield during matching. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d::drivercode::matcher::ConstIDis + d3d::drivercode::matcher::ConstIDoperator! + d3d::drivercode::matcher::ConstIDThisType + d3d::drivercode::matcher::ConstIDvalue + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_enable_if.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_enable_if.xml new file mode 100644 index 000000000..c3794a409 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_enable_if.xml @@ -0,0 +1,24 @@ + + + + d3d::drivercode::matcher::EnableIf + + + bool + B + B + + + typename T + void + + + + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_enable_if_3_01true_00_01_t_01_4.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_enable_if_3_01true_00_01_t_01_4.xml new file mode 100644 index 000000000..d678d68b7 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_enable_if_3_01true_00_01_t_01_4.xml @@ -0,0 +1,34 @@ + + + + d3d::drivercode::matcher::EnableIf< true, T > + + + typename T + + + + + T + using d3d::drivercode::matcher::EnableIf< true, T >::Type = T + + Type + + + + + + + + + + + + + + + + d3d::drivercode::matcher::EnableIf< true, T >Type + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_i_d.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_i_d.xml new file mode 100644 index 000000000..e34e5c422 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_i_d.xml @@ -0,0 +1,117 @@ + + + + d3d::drivercode::matcher::ID + dag_driverCode.h + + + int + Ident + Ident + + + + + ID< Ident > + using d3d::drivercode::matcher::ID< Ident >::ThisType = ID<Ident> + + ThisType + +Shorthand for this type. + + + + + + + + + + + constexpr int + constexpr int d3d::drivercode::matcher::ID< Ident >::value + + value + = make_foucc(Ident) + +The value of Ident. This value is used by DriverCode::make to initialize the driver code state. + + + + + + + + + + + constexpr bool + static constexpr bool d3d::drivercode::matcher::ID< Ident >::is + (int cmp) + is + + int + cmp + + + + +Matches true when the driver code values is equal to Ident + +cmp + + +Is the driver code state that should be compared to Ident. + + + +Returns true when the driver code state is equal to Ident. + + + + + + + + + + + constexpr Inverted< ThisType > + constexpr Inverted<ThisType> d3d::drivercode::matcher::ID< Ident >::operator! + () const + operator! + + + +Creates the inverted matcher of this matcher. Inverted matcher of this matcher. + + + + + + + + + + + +Matcher that matches a given ID. This matcher can be used by DriverCode::make. + +The + + +ID value the matcher should match to true. + + + + + + + + d3d::drivercode::matcher::IDis + d3d::drivercode::matcher::IDoperator! + d3d::drivercode::matcher::IDThisType + d3d::drivercode::matcher::IDvalue + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_inverted.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_inverted.xml new file mode 100644 index 000000000..df3fe3130 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_inverted.xml @@ -0,0 +1,110 @@ + + + + d3d::drivercode::matcher::Inverted + dag_driverCode.h + + + typename T + + + + + Inverted< T > + using d3d::drivercode::matcher::Inverted< T >::ThisType = Inverted<T> + + ThisType + +Shorthand for this type. + + + + + + + + + + + T + T d3d::drivercode::matcher::Inverted< T >::base + + base + +State of the base type. + + + + + + + + + + + constexpr bool + constexpr bool d3d::drivercode::matcher::Inverted< T >::is + (int value) + is + + int + value + + + + +Invers the result of the matcher T. + +value + + +Is the driver code value that should be matched by the matcher. + + + +The inverted result of the matcher of type T. + + + + + + + + + constexpr T + constexpr T d3d::drivercode::matcher::Inverted< T >::operator! + () const + operator! + +Creates the inverted matcher of this, which is just T. + + + + + + + + + + + +This matcher inverts the input matcher of template parameter T. + +T + + +is the matcher type that should be inverted. + + + + + + + + d3d::drivercode::matcher::Invertedbase + d3d::drivercode::matcher::Invertedis + d3d::drivercode::matcher::Invertedoperator! + d3d::drivercode::matcher::InvertedThisType + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_op_and.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_op_and.xml new file mode 100644 index 000000000..c4811caa4 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_op_and.xml @@ -0,0 +1,59 @@ + + + + d3d::drivercode::matcher::OpAnd + dag_driverCode.h + + + constexpr bool + static constexpr bool d3d::drivercode::matcher::OpAnd::invoke + (bool a, bool b) + invoke + + bool + a + + + bool + b + + + + +Combines two matcher results with a logical and. + +a + + +Result of the first matcher. + + + + +b + + +Result of the second matcher. + + + +The logical and of both and . + + + + + + + + + +A binary operator that implements the logical and operator to combine the result of two matchers. + + + + + + d3d::drivercode::matcher::OpAndinvoke + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_op_or.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_op_or.xml new file mode 100644 index 000000000..cf6d705b0 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_op_or.xml @@ -0,0 +1,59 @@ + + + + d3d::drivercode::matcher::OpOr + dag_driverCode.h + + + constexpr bool + static constexpr bool d3d::drivercode::matcher::OpOr::invoke + (bool a, bool b) + invoke + + bool + a + + + bool + b + + + + +Combines two matcher results with a logical or. + +a + + +Result of the first matcher. + + + + +b + + +Result of the second matcher. + + + +The logical or of both and . + + + + + + + + + +A binary operator that implements the logical or operator to combine the result of two matchers. + + + + + + d3d::drivercode::matcher::OpOrinvoke + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_same_as.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_same_as.xml new file mode 100644 index 000000000..b7babcc5f --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_same_as.xml @@ -0,0 +1,38 @@ + + + + d3d::drivercode::matcher::SameAs + + + typename A + + + typename B + + + + + constexpr bool + constexpr bool d3d::drivercode::matcher::SameAs< A, B >::value + + value + = false + + + + + + + + + + + + + + + + d3d::drivercode::matcher::SameAsvalue + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_same_as_3_01_t_00_01_t_01_4.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_same_as_3_01_t_00_01_t_01_4.xml new file mode 100644 index 000000000..17b1fed5f --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_same_as_3_01_t_00_01_t_01_4.xml @@ -0,0 +1,35 @@ + + + + d3d::drivercode::matcher::SameAs< T, T > + + + typename T + + + + + constexpr bool + constexpr bool d3d::drivercode::matcher::SameAs< T, T >::value + + value + = true + + + + + + + + + + + + + + + + d3d::drivercode::matcher::SameAs< T, T >value + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_undefined.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_undefined.xml new file mode 100644 index 000000000..e049dae28 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_undefined.xml @@ -0,0 +1,57 @@ + + + + d3d::drivercode::matcher::Undefined + NotAnyDriver + dag_driverCode.h + + + constexpr int + constexpr int d3d::drivercode::matcher::Undefined::value + + value + = ~0L + +Value of undefined driver state, matchers that are not constant matchers have to match false to this value. + + + + + + + + + +The undefined matcher is special, compared to other composed matchers. + + +This matcher matches against all known drivers, and when none of those matchers evaluate to true, it will return true, otherwise to false. The difference to a normal inverted matcher of all known drivers, is that it has a value that can be used for initialization of the driver code state value. + + + + + + + + + + + + + + + + + + + + + + + + + + d3d::drivercode::matcher::Undefinedvalue + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_unsupported.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_unsupported.xml new file mode 100644 index 000000000..c726a88e7 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1drivercode_1_1matcher_1_1_unsupported.xml @@ -0,0 +1,33 @@ + + + + d3d::drivercode::matcher::Unsupported + dag_driverCode.h + + + + d3d::drivercode::matcher::Unsupported::Unsupported + ()=delete + Unsupported + +No one should be able to instance this type, it is supposed to fail the build. + + + + + + + + + +This matcher type is just to result in compilation errors on not yet supported platforms and help doxygen. + + +So when the compiler is yelling at you about this type, then you may want to add a new set of matchers for that _TARGET_* you want to build. Use a existing target as a template and alter they types of the matchers to model the behavior of that target. + + + + d3d::drivercode::matcher::UnsupportedUnsupported + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_any_version.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_any_version.xml new file mode 100644 index 000000000..d3627c55b --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_any_version.xml @@ -0,0 +1,15 @@ + + + + d3d::shadermodel::AnyVersion + dag_shaderModelVersion.h + +This version type compares always true to any other shader model version. + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version.xml new file mode 100644 index 000000000..8915212c4 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version.xml @@ -0,0 +1,250 @@ + + + + d3d::shadermodel::Version + d3d::shadermodel::VersionWithName + dag_shaderModelVersion.h + + + unsigned int + unsigned int d3d::shadermodel::Version::major + + major + 16 + +Major version of the shader model version. + + + + + + + + + unsigned int + unsigned int d3d::shadermodel::Version::minor + + minor + 16 + +Minor version of the shader model version. + + + + + + + + + + + constexpr + constexpr d3d::shadermodel::Version::Version + () + Version + +Default constructor, sets version values to 0. + + + + + + + + + constexpr + constexpr d3d::shadermodel::Version::Version + (unsigned int ma, unsigned int mi) + Version + + unsigned int + ma + + + unsigned int + mi + + + + +Initializes the version with the given values. \ma Major version that should be stored. \mi Minor version that should be stored. + + + + + + + constexpr + constexpr d3d::shadermodel::Version::Version + (const AnyVersion &v) + Version + + const AnyVersion & + v + + +Constructor that stores a representation of AnyVersion, which sets major and minor version the max possible value. + + + + + + + + + + + typename T + + + matcher::Map< T, Version > + matcher::Map<T, Version> d3d::shadermodel::Version::map + (const Version &version, T &&value) const + map + + const Version & + version + + + T && + value + + + + +Begins a map from versions over this version to a value. + +version + + +The matcher of the first value matcher pair. + + + + +value + + +The value that should be stored when version should match. + + + +Map to map versions to values. + + + + + + + + + + + unsigned int + N + N + + + matcher::Map< const char *, Version > + matcher::Map<const char *, Version> d3d::shadermodel::Version::map + (const Version &version, const char(&str)[N]) const + map + + const Version & + version + + + const char(&) + str + [N] + + + + +Begins a map from versions over this version to a value. + +version + + +The matcher of the first value matcher pair. + + + + +value + + +The value that should be stored when version should match. + + + +Map to map versions to values. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::Version::supports + (Version other) const + supports + + Version + other + + + + +Checks if the given version is supported by this version. + +other + + +Version to check this version against. + + + +Is true when this version is equal or later than other. + + + + + + + + + + + +Represents a shader model version. To add new supported shader models, you need to define a constant of the shader model and add this constant to the shader model list. See definition / uses of sm50 as example. It is also important to keep the order of versions in the list of AllVersionsList, otherwise other algorithms may fail to work properly. + + + + + + + + + + + + + + + + + + d3d::shadermodel::Versionmajor + d3d::shadermodel::Versionmap + d3d::shadermodel::Versionmap + d3d::shadermodel::Versionminor + d3d::shadermodel::Versionsupports + d3d::shadermodel::VersionVersion + d3d::shadermodel::VersionVersion + d3d::shadermodel::VersionVersion + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_constant.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_constant.xml new file mode 100644 index 000000000..16c56c5d1 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_constant.xml @@ -0,0 +1,269 @@ + + + + d3d::shadermodel::VersionConstant + dag_shaderModelVersion.h + + + unsigned int + MajorVersion + MajorVersion + + + unsigned int + MinorVersion + MinorVersion + + + + + constexpr unsigned int + constexpr unsigned int d3d::shadermodel::VersionConstant< MajorVersion, MinorVersion >::major + + major + = MajorVersion + +Major version member / constant to make access uniform to #Version. + + + + + + + + + constexpr unsigned int + constexpr unsigned int d3d::shadermodel::VersionConstant< MajorVersion, MinorVersion >::minor + + minor + = MinorVersion + +Minor version member / constant to make access uniform to #Version. + + + + + + + + + constexpr char + constexpr char d3d::shadermodel::VersionConstant< MajorVersion, MinorVersion >::as_string[4] + [4] + as_string + = {'0' + MajorVersion, '.', '0' + MinorVersion, '\0'} + +String representation of this version in <major>.<minor> format. + + + + + + + + + constexpr char + constexpr char d3d::shadermodel::VersionConstant< MajorVersion, MinorVersion >::as_ps_string[5] + [5] + as_ps_string + = {'p', 's', '0' + MajorVersion, '0' + MinorVersion, '\0'} + +String representation of this version in ps<major><minor> format. + + + + + + + + + + + constexpr + constexpr d3d::shadermodel::VersionConstant< MajorVersion, MinorVersion >::operator Version + () const + operator Version + +Conversion operator to convert to #Version. + + + + + + + + + + d3d::shadermodel::VersionConstant< MajorVersion, MinorVersion >::operator VersionWithName + () const + operator VersionWithName + +Conversion operator to convert to #VersionWithName. + + + + + + + + + + + typename T + + + matcher::Map< T, Version > + matcher::Map<T, Version> d3d::shadermodel::VersionConstant< MajorVersion, MinorVersion >::map + (const Version &version, T &&value) const + map + + const Version & + version + + + T && + value + + + + +Begins a map from versions over this version to a value. + +version + + +The matcher of the first value matcher pair. + + + + +value + + +The value that should be stored when version should match. + + + +Map to map versions to values. + + + + + + + + + + + unsigned int + N + N + + + matcher::Map< const char *, Version > + matcher::Map<const char *, Version> d3d::shadermodel::VersionConstant< MajorVersion, MinorVersion >::map + (const Version &version, const char(&str)[N]) const + map + + const Version & + version + + + const char(&) + str + [N] + + + + +Begins a map from versions over this version to a value. + +version + + +The matcher of the first value matcher pair. + + + + +value + + +The value that should be stored when version should match. + + + +Map to map versions to values. + + + + + + + + + constexpr bool + constexpr bool d3d::shadermodel::VersionConstant< MajorVersion, MinorVersion >::supports + (Version other) const + supports + + Version + other + + + + +Checks if the given version is supported by this version. + +other + + +Version to check this version against. + + + +Is true when this version is equal or later than other. + + + + + + + + + + + +A shader model version type. + +MajorVersion + + +Major version of this constant. + + + + +MinorVersion + + +Minor version of this constant. + + + + + + + + d3d::shadermodel::VersionConstantas_ps_string + d3d::shadermodel::VersionConstantas_string + d3d::shadermodel::VersionConstantmajor + d3d::shadermodel::VersionConstantmap + d3d::shadermodel::VersionConstantmap + d3d::shadermodel::VersionConstantminor + d3d::shadermodel::VersionConstantoperator Version + d3d::shadermodel::VersionConstantoperator VersionWithName + d3d::shadermodel::VersionConstantsupports + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_list.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_list.xml new file mode 100644 index 000000000..4e0abfc29 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_list.xml @@ -0,0 +1,49 @@ + + + + d3d::shadermodel::VersionList + dag_shaderModelVersion.h + + + typename... + Versions + Versions + + + + + constexpr auto + constexpr auto d3d::shadermodel::VersionList< Versions >::size + + size + = sizeof...(Versions) + +Number of elements in the Versions list. + + + + + + + + + + + +A list type of a set of versions. + +List + + +of versions. + + + + + + + + d3d::shadermodel::VersionListsize + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_range.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_range.xml new file mode 100644 index 000000000..1249ee95d --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_range.xml @@ -0,0 +1,19 @@ + + + + d3d::shadermodel::VersionRange + + + typename List + + + +Represents a range of shader model versions that can be iterated over. + + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_range_3_01_version_list_3_01_versions_8_8_8_01_4_01_4.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_range_3_01_version_list_3_01_versions_8_8_8_01_4_01_4.xml new file mode 100644 index 000000000..5e42d1997 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_range_3_01_version_list_3_01_versions_8_8_8_01_4_01_4.xml @@ -0,0 +1,150 @@ + + + + d3d::shadermodel::VersionRange< VersionList< Versions... > > + dag_shaderModelVersion.h + + + typename... + Versions + Versions + + + + + VersionList< Versions... > + using d3d::shadermodel::VersionRange< VersionList< Versions... > >::ListOfVersions = VersionList<Versions...> + + ListOfVersions + +Helper type to cut down repeat code. + + + + + + + + + VersionRangeIterator< VersionWithName, VersionList< Versions... > > + using d3d::shadermodel::VersionRange< VersionList< Versions... > >::Iterator = VersionRangeIterator<VersionWithName, VersionList<Versions...> > + + Iterator + +Iterator type of this range. + + + + + + + + + + + Iterator + Iterator d3d::shadermodel::VersionRange< VersionList< Versions... > >::begin + () const + begin + + + +Returns the beginning of the version range, as in the most recent version. Iterator representing the most recent version of this range. + + + + + + + + + Iterator + Iterator d3d::shadermodel::VersionRange< VersionList< Versions... > >::cbegin + () const + cbegin + + + +Returns the beginning of the version range, as in the most recent version. Iterator representing the most recent version of this range. + + + + + + + + + Iterator + Iterator d3d::shadermodel::VersionRange< VersionList< Versions... > >::end + () const + end + + + +Returns a iterator past the last (oldest) version of this range. Iterator past the last (oldest) version of this range. + + + + + + + + + Iterator + Iterator d3d::shadermodel::VersionRange< VersionList< Versions... > >::cend + () const + cend + + + +Returns a iterator past the last (oldest) version of this range. Iterator past the last (oldest) version of this range. + + + + + + + + + auto + auto d3d::shadermodel::VersionRange< VersionList< Versions... > >::size + () const + size + + + +Returns the number of versions in this range. Number of versions of this range. + + + + + + + + + + + +Represents a range of shader model versions that can be iterated over. + +Versions + + +The list of versions to iterate over. + + + + + + + + d3d::shadermodel::VersionRange< VersionList< Versions... > >begin + d3d::shadermodel::VersionRange< VersionList< Versions... > >cbegin + d3d::shadermodel::VersionRange< VersionList< Versions... > >cend + d3d::shadermodel::VersionRange< VersionList< Versions... > >end + d3d::shadermodel::VersionRange< VersionList< Versions... > >Iterator + d3d::shadermodel::VersionRange< VersionList< Versions... > >ListOfVersions + d3d::shadermodel::VersionRange< VersionList< Versions... > >size + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_with_name.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_with_name.xml new file mode 100644 index 000000000..25d5bd08a --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1_version_with_name.xml @@ -0,0 +1,80 @@ + + + + d3d::shadermodel::VersionWithName + d3d::shadermodel::Version + dag_shaderModelVersion.h + + + const char * + const char* d3d::shadermodel::VersionWithName::versionName + + versionName + +Version name string in the <major>.<minor> format. + + + + + + + + + const char * + const char* d3d::shadermodel::VersionWithName::psName + + psName + +Version ps name string in the ps<major><minor> format. + + + + + + + + + +Represents a shader model version with paired version name string and ps name string. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d3d::shadermodel::VersionWithNamemajor + d3d::shadermodel::VersionWithNamemap + d3d::shadermodel::VersionWithNamemap + d3d::shadermodel::VersionWithNameminor + d3d::shadermodel::VersionWithNamepsName + d3d::shadermodel::VersionWithNamesupports + d3d::shadermodel::VersionWithNameVersion + d3d::shadermodel::VersionWithNameVersion + d3d::shadermodel::VersionWithNameVersion + d3d::shadermodel::VersionWithNameversionName + + + diff --git a/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1matcher_1_1_equal_compare.xml b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1matcher_1_1_equal_compare.xml new file mode 100644 index 000000000..1e8f26480 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structd3d_1_1shadermodel_1_1matcher_1_1_equal_compare.xml @@ -0,0 +1,78 @@ + + + + d3d::shadermodel::matcher::EqualCompare + dag_shaderModelVersion.h + + + typename T + + + + + + + typename OT + + + bool + static bool d3d::shadermodel::matcher::EqualCompare< T >::compare + (const T &l, const OT &r) + compare + + const T & + l + + + const OT & + r + + + + +Compares l and r and returns true when they are equal. + +l + + +First value to compare. + + + + +r + + +Second value to compare. + + + +Result of l == r. + + + + + + + + + + + +Simple equal comparison compare type. + +T + + +Type of the compared type. + + + + + + + + d3d::shadermodel::matcher::EqualComparecompare + + + diff --git a/breathe/doxygen/d3dAPI/xml/structshaders_1_1_render_state.xml b/breathe/doxygen/d3dAPI/xml/structshaders_1_1_render_state.xml new file mode 100644 index 000000000..fd4b7473d --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structshaders_1_1_render_state.xml @@ -0,0 +1,159 @@ + + + + shaders::RenderState + shaders::RenderStateBits + dag_renderStates.h + shaders::RenderState::BlendFactors + shaders::RenderState::BlendParams + + + constexpr uint32_t + constexpr uint32_t shaders::RenderState::NumIndependentBlendParameters + + NumIndependentBlendParameters + = 4 + + + + + + + + + + + + BlendParams + BlendParams shaders::RenderState::blendParams[NumIndependentBlendParameters] + [NumIndependentBlendParameters] + blendParams + + + + + + + + + + + + + shaders::RenderState::RenderState + () + RenderState + + + + + + + + + + bool + bool shaders::RenderState::operator== + (const RenderState &s) const + operator== + + const RenderState & + s + + + + + + + + + + + bool + bool shaders::RenderState::operator!= + (const RenderState &s) const + operator!= + + const RenderState & + s + + + + + + + + + + + +Extended render state with blending params. + + + + + + + + + + + + + + + + + + + + + + + + + + + blendParams + + + + + + + ablendFactors + sepablendFactors + + + + + + + + + + shaders::RenderStatealphaToCoverage + shaders::RenderStateblendParams + shaders::RenderStatecolorWr + shaders::RenderStateconservativeRaster + shaders::RenderStatecull + shaders::RenderStatedepthBoundsEnable + shaders::RenderStateforcedSampleCount + shaders::RenderStateindependentBlendEnabled + shaders::RenderStateNumIndependentBlendParameters + shaders::RenderStateoperator!= + shaders::RenderStateoperator== + shaders::RenderStateRenderState + shaders::RenderStatescissorEnabled + shaders::RenderStateslopeZBias + shaders::RenderStatestencil + shaders::RenderStatestencilRef + shaders::RenderStateviewInstanceCount + shaders::RenderStatezBias + shaders::RenderStatezClip + shaders::RenderStatezFunc + shaders::RenderStateztest + shaders::RenderStatezwrite + + + diff --git a/breathe/doxygen/d3dAPI/xml/structshaders_1_1_render_state_1_1_blend_factors.xml b/breathe/doxygen/d3dAPI/xml/structshaders_1_1_render_state_1_1_blend_factors.xml new file mode 100644 index 000000000..2223f4521 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structshaders_1_1_render_state_1_1_blend_factors.xml @@ -0,0 +1,49 @@ + + + + shaders::RenderState::BlendFactors + dag_renderStates.h + + + uint8_t + uint8_t shaders::RenderState::BlendFactors::src + + src + 4 + +Configures source alpha #BLEND_FACTOR. + + + + + + + + + uint8_t + uint8_t shaders::RenderState::BlendFactors::dst + + dst + 4 + +Configures destination alpha #BLEND_FACTOR. + + + + + + + + + +Description of blending factors. + + + + + + shaders::RenderState::BlendFactorsdst + shaders::RenderState::BlendFactorssrc + + + diff --git a/breathe/doxygen/d3dAPI/xml/structshaders_1_1_render_state_1_1_blend_params.xml b/breathe/doxygen/d3dAPI/xml/structshaders_1_1_render_state_1_1_blend_params.xml new file mode 100644 index 000000000..4061e5e6d --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structshaders_1_1_render_state_1_1_blend_params.xml @@ -0,0 +1,125 @@ + + + + shaders::RenderState::BlendParams + dag_renderStates.h + + + BlendFactors + BlendFactors shaders::RenderState::BlendParams::ablendFactors + + ablendFactors + +Configures alpha blend factor. + + + + + + + + + BlendFactors + BlendFactors shaders::RenderState::BlendParams::sepablendFactors + + sepablendFactors + +Configures separate alpha blend factor. + + + + + + + + + uint8_t + uint8_t shaders::RenderState::BlendParams::blendOp + + blendOp + 3 + +Specifies #BLENDOP operation for alpha blending. + + + + + + + + + uint8_t + uint8_t shaders::RenderState::BlendParams::sepablendOp + + sepablendOp + 3 + +Specifies #BLENDOP operation for separate alpha blending. + + + + + + + + + uint8_t + uint8_t shaders::RenderState::BlendParams::ablend + + ablend + 1 + +Enables alpha blending. + + + + + + + + + uint8_t + uint8_t shaders::RenderState::BlendParams::sepablend + + sepablend + 1 + +Enables separate alpha blending. + + + + + + + + + +Description of blending parameters. + + + + + + + + + + + + + ablendFactors + sepablendFactors + + + + + + shaders::RenderState::BlendParamsablend + shaders::RenderState::BlendParamsablendFactors + shaders::RenderState::BlendParamsblendOp + shaders::RenderState::BlendParamssepablend + shaders::RenderState::BlendParamssepablendFactors + shaders::RenderState::BlendParamssepablendOp + + + diff --git a/breathe/doxygen/d3dAPI/xml/structshaders_1_1_render_state_bits.xml b/breathe/doxygen/d3dAPI/xml/structshaders_1_1_render_state_bits.xml new file mode 100644 index 000000000..594fb8ade --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/structshaders_1_1_render_state_bits.xml @@ -0,0 +1,311 @@ + + + + shaders::RenderStateBits + shaders::RenderState + dag_renderStates.h + + + uint32_t + uint32_t shaders::RenderStateBits::zwrite + + zwrite + 1 + +Enable depth write. + + + + + + + + + uint32_t + uint32_t shaders::RenderStateBits::ztest + + ztest + 1 + +Enable depth test. + + + + + + + + + uint32_t + uint32_t shaders::RenderStateBits::zFunc + + zFunc + 4 + +Relationship operation #CMPF used for depth test (less, greater, equal and etc.). + + + + + + + + + uint32_t + uint32_t shaders::RenderStateBits::stencilRef + + stencilRef + 8 + +Reference value to perform against when doing a stencil test. + + + + + + + + + uint32_t + uint32_t shaders::RenderStateBits::cull + + cull + 2 + +Specifies triangle face culling #CULL_TYPE. + + + + + + + + + uint32_t + uint32_t shaders::RenderStateBits::depthBoundsEnable + + depthBoundsEnable + 1 + + + +Enable depth-bounds testing. Samples outside the range are discarded. + + + + + + + uint32_t + uint32_t shaders::RenderStateBits::forcedSampleCount + + forcedSampleCount + 4 + +The sample count that is forced while UAV rendering or rasterizing. + + +Requires caps.hasForcedSamplerCount (DX 11.1). + +Depth test must be disabled. + + + + + + + + + uint32_t + uint32_t shaders::RenderStateBits::conservativeRaster + + conservativeRaster + 1 + +Identifies whether conservative rasterization is on or off. + + +Requires caps.hasConservativeRassterization (DX 11.3). + +Only triangle topology is allowed (DX 12). + + + + + + + + + uint32_t + uint32_t shaders::RenderStateBits::zClip + + zClip + 1 + +Enable depth clipping based on distance. + + + + + + + + + uint32_t + uint32_t shaders::RenderStateBits::scissorEnabled + + scissorEnabled + 1 + +Enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled. + + + + + + + + + uint32_t + uint32_t shaders::RenderStateBits::independentBlendEnabled + + independentBlendEnabled + 1 + +Enable independent blending in simultaneous render targets. + + + + + + + + + uint32_t + uint32_t shaders::RenderStateBits::alphaToCoverage + + alphaToCoverage + 1 + +Specifies whether to use alpha-to-coverage. + + + + + + + + + uint32_t + uint32_t shaders::RenderStateBits::viewInstanceCount + + viewInstanceCount + 2 + +Specifies the number of used views. + + + + + + + + + uint32_t + uint32_t shaders::RenderStateBits::colorWr + + colorWr + = 0xFFFFFFFF + +Specifies mask which is used for color write. + + + + + + + + + float + float shaders::RenderStateBits::zBias + + zBias + = 0 + +Specifies depth value added to a given pixel. + + + + + + + + + float + float shaders::RenderStateBits::slopeZBias + + slopeZBias + = 0 + +Specifies scalar on a given pixel's slope. + + + + + + + + + StencilState + StencilState shaders::RenderStateBits::stencil + + stencil + +Specifies stencil state. + + + + + + + + + +Description of render state. + + + + + + + + + + + + + + + + + + shaders::RenderStateBitsalphaToCoverage + shaders::RenderStateBitscolorWr + shaders::RenderStateBitsconservativeRaster + shaders::RenderStateBitscull + shaders::RenderStateBitsdepthBoundsEnable + shaders::RenderStateBitsforcedSampleCount + shaders::RenderStateBitsindependentBlendEnabled + shaders::RenderStateBitsscissorEnabled + shaders::RenderStateBitsslopeZBias + shaders::RenderStateBitsstencil + shaders::RenderStateBitsstencilRef + shaders::RenderStateBitsviewInstanceCount + shaders::RenderStateBitszBias + shaders::RenderStateBitszClip + shaders::RenderStateBitszFunc + shaders::RenderStateBitsztest + shaders::RenderStateBitszwrite + + + diff --git a/breathe/doxygen/d3dAPI/xml/todo.xml b/breathe/doxygen/d3dAPI/xml/todo.xml new file mode 100644 index 000000000..3143fde79 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/todo.xml @@ -0,0 +1,42 @@ + + + + todo + Todo List + + + + +Member d3d::buffers::create_ua_byte_address (uint32_t size_in_dwords, const char *name) +Use registers instead of dwords for size because of alignment. + +Member d3d::buffers::create_ua_byte_address_readback (uint32_t size_in_dwords, const char *name, Init buffer_init=Init::No) +Use registers instead of dwords for size because of alignment. + +Member d3d::buffers::create_ua_sr_byte_address (uint32_t size_in_dwords, const char *name, Init buffer_init=Init::No) +Use registers instead of dwords for size because of alignment. + +Member DeviceDriverCapabilitiesBase::hasAlphaCoverage +Candidate for removal if situation for PS4/5 is clarified, there it seems to be not implemented. + +Member DeviceDriverCapabilitiesBase::hasBindless +May need to split into multiple caps as some drivers do not support buffers. + +Member DeviceDriverCapabilitiesPS4::hasGather4 +Clarify why no support is advertised. + +Member Driver3dInitCallback::compareDesc (Driver3dDesc &A, Driver3dDesc &B) const =0 +This fucntion is not used anywhere. Remove it? + +Member Driver3dInitCallback::validateDesc (Driver3dDesc &desc) const =0 +This fucntion is not used anywhere. Remove it? + +Member Sbuffer::restype () const override final +make RES3D_ a enum class. + + + + + + + diff --git a/breathe/doxygen/d3dAPI/xml/union_resource_clear_value.xml b/breathe/doxygen/d3dAPI/xml/union_resource_clear_value.xml new file mode 100644 index 000000000..209a01012 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/union_resource_clear_value.xml @@ -0,0 +1,137 @@ + + + + ResourceClearValue + + + uint32_t + uint32_t ResourceClearValue::asUint[4] + [4] + asUint + + + + + + + + + + struct ResourceClearValue::@27 + struct ResourceClearValue::@27 ResourceClearValue::@28 + + @28 + + + + + + + + + + int32_t + int32_t ResourceClearValue::asInt[4] + [4] + asInt + + + + + + + + + + struct ResourceClearValue::@29 + struct ResourceClearValue::@29 ResourceClearValue::@30 + + @30 + + + + + + + + + + float + float ResourceClearValue::asFloat[4] + [4] + asFloat + + + + + + + + + + struct ResourceClearValue::@31 + struct ResourceClearValue::@31 ResourceClearValue::@32 + + @32 + + + + + + + + + + float + float ResourceClearValue::asDepth + + asDepth + + + + + + + + + + uint8_t + uint8_t ResourceClearValue::asStencil + + asStencil + + + + + + + + + + struct ResourceClearValue::@33 + struct ResourceClearValue::@33 ResourceClearValue::@34 + + @34 + + + + + + + + + + + + + + + + ResourceClearValueasDepth + ResourceClearValueasFloat + ResourceClearValueasInt + ResourceClearValueasStencil + ResourceClearValueasUint + + + diff --git a/breathe/doxygen/d3dAPI/xml/xml.xsd b/breathe/doxygen/d3dAPI/xml/xml.xsd new file mode 100644 index 000000000..9f80fe158 --- /dev/null +++ b/breathe/doxygen/d3dAPI/xml/xml.xsd @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dHelpers.cfg b/breathe/doxygen/d3dHelpers.cfg new file mode 100644 index 000000000..272753f74 --- /dev/null +++ b/breathe/doxygen/d3dHelpers.cfg @@ -0,0 +1,96 @@ +PROJECT_NAME = "d3dHelpers" +OUTPUT_DIRECTORY = d3dHelpers +GENERATE_LATEX = NO +GENERATE_MAN = NO +GENERATE_RTF = NO +CASE_SENSE_NAMES = NO +INPUT = /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/3d/dag_multidrawContext.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/3d/dag_resMgr.h /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/3d/dag_texMgr.h +ENABLE_PREPROCESSING = YES +QUIET = YES +JAVADOC_AUTOBRIEF = YES +JAVADOC_AUTOBRIEF = NO +GENERATE_HTML = NO +GENERATE_XML = YES +ALIASES = rst="\verbatim embed:rst" +ALIASES += endrst="\endverbatim" +ALIASES += inlinerst="\verbatim embed:rst:inline" +ENABLE_PREPROCESSING=YES +MACRO_EXPANSION=YES +PREDEFINED=DOXYGEN declare_new(x)= __restrict= __forceinline= +ALIASES += constcap{1}="\copybrief \1 \ref \1" +ALIASES += basecap{1}="\details \copybrief \1 \see \1" +ALIASES += runtimecap{2}="Runtime defined on \2. \ref \1" +ALIASES += microsoft="Microsoft" +ALIASES += win32="Windows" +ALIASES += windows="\win32" +ALIASES += xbone="Xbox One" +ALIASES += xboxone="\xbone" +ALIASES += scarlett="Xbox Series X / S" +ALIASES += xbox="\xbone and \scarlett" +ALIASES += sony="Sony" +ALIASES += ps4="PlayStation 4" +ALIASES += ps5="PlayStation 5" +ALIASES += ps="\ps4 and \ps5" +ALIASES += nintendo="Nintendo" +ALIASES += nswitch="\nintendo Switch" +ALIASES += apple="Apple" +ALIASES += ios="iOS" +ALIASES += mac="macOS" +ALIASES += tvos="tvOS" +ALIASES += google="Google" +ALIASES += android="Android" +ALIASES += linux="Linux" +ALIASES += nvidia="Nvidia" +ALIASES += AMD="AMD" +ALIASES += amd="\AMD" +ALIASES += ATI="AMD / ATI" +ALIASES += ati="\ATI" +ALIASES += intel="Intel" +ALIASES += ARM="ARM" +ALIASES += arm="\ARM" +ALIASES += mali="\arm Mali" +ALIASES += imgtec="imgTec" +ALIASES += powervrr="\imgtec Power VR Rogue" +ALIASES += qcomm="Qualcomm" +ALIASES += adreno="\qcomm Adreno" +ALIASES += mesa="Mesa 3D" +ALIASES += dx11="DirectX 11" +ALIASES += dx12="DirectX 12" +ALIASES += khronos="Khronos" +ALIASES += vk="Vulkan" +ALIASES += metal="Metal" +ALIASES += llvmpipe="\mesa LLVM pipe" +ALIASES += capbrief="\brief Indicates that the device driver" +ALIASES += briefconstcap{2}="\brief Constant \1\basecap{\2}" +ALIASES += NYI="\remarks This feature can be supported, but is not yet implemented." +ALIASES += someNYI="\remarks Some drivers without support could support this feature, but do not implement it yet." +ALIASES += constissue{1}="\copybrief \1 \ref \1" +ALIASES += baseissue{1}="\details \copybrief \1 \see \1" +ALIASES += briefconstissue{3}="\brief Is constant \1 on \2 \baseissue{\3}" +ALIASES += runtimeissue{2}="Runtime defined on \2. \ref \1" +ALIASES += caprefc{3}="\ref \3::\2 \"\1\"" +ALIASES += caprefa{3}="\ref \3::\2 \"\1\"" +ALIASES += caprefr{3}="\ref \3 \"\1\"" +ALIASES += caprefc{4}="\ref \3::\2 \"\1\"" +ALIASES += caprefa{4}="\ref \4::\2 \"\1\"" +ALIASES += caprefr{4}="\ref \3 \"\1\"" +ALIASES += capvaluec{2}="\copybrief \2::\1" +ALIASES += capvaluea{2}="\copybrief \2::\1" +ALIASES += capvaluer{2}="Runtime determined." +ALIASES += capvaluec{3}="\copybrief \2::\1" +ALIASES += capvaluea{3}="\copybrief \3::\1" +ALIASES += capvaluer{3}="Runtime determined." +ALIASES += platformtable{12}="\note ^^\ +
PlatformValue^^\ +
\capref\2{\xbone,\1,DeviceDriverCapabilitiesXboxOne} \capvalue\2{\1,DeviceDriverCapabilitiesXboxOne} ^^\ +
\capref\3{\scarlett,\1,DeviceDriverCapabilitiesScarlett,DeviceDriverCapabilitiesXboxOne} \capvalue\3{\1,DeviceDriverCapabilitiesScarlett,DeviceDriverCapabilitiesXboxOne} ^^\ +
\capref\4{\ps4,\1,DeviceDriverCapabilitiesPS4} \capvalue\4{\1,DeviceDriverCapabilitiesPS4} ^^\ +
\capref\5{\ps5,\1,DeviceDriverCapabilitiesPS5,DeviceDriverCapabilitiesPS4} \capvalue\5{\1,DeviceDriverCapabilitiesPS5,DeviceDriverCapabilitiesPS4} ^^\ +
\capref\6{\ios,\1,DeviceDriverCapabilitiesIOS} \capvalue\6{\1,DeviceDriverCapabilitiesIOS} ^^\ +
\capref\7{\tvos,\1,DeviceDriverCapabilitiesTVOS} \capvalue\7{\1,DeviceDriverCapabilitiesTVOS} ^^\ +
\capref\8{\nswitch,\1,DeviceDriverCapabilitiesNintendoSwitch} \capvalue\8{\1,DeviceDriverCapabilitiesNintendoSwitch} ^^\ +
\capref\9{\android,\1,DeviceDriverCapabilitiesAndroid} \capvalue\9{\1,DeviceDriverCapabilitiesAndroid} ^^\ +
\capref\10{\mac,\1,DeviceDriverCapabilitiesMacOSX} \capvalue\10{\1,DeviceDriverCapabilitiesMacOSX} ^^\ +
\capref\11{\linux,\1,DeviceDriverCapabilitiesLinux} \capvalue\11{\1,DeviceDriverCapabilitiesLinux} ^^\ +
\capref\12{\win32,\1,DeviceDriverCapabilitiesWindows} \capvalue\12{\1,DeviceDriverCapabilitiesWindows} ^^\ +
" \ No newline at end of file diff --git a/breathe/doxygen/d3dHelpers/xml/class_multidraw_context.xml b/breathe/doxygen/d3dHelpers/xml/class_multidraw_context.xml new file mode 100644 index 000000000..a921b9cfc --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/class_multidraw_context.xml @@ -0,0 +1,301 @@ + + + + MultidrawContext + dag_multidrawContext.h + MultidrawContext::MultidrawRenderExecutor + + + typename PerDrawDataT + + + + + eastl::string + eastl::string MultidrawContext< PerDrawDataT >::name + + name + +Name for context that is used as a buffer name and as a prefix for helper buffers. + + + + + + + + + RingDynamicSB + RingDynamicSB MultidrawContext< PerDrawDataT >::multidrawArguments + + multidrawArguments + +Buffer for draw calls arguments. + + + + + + + + + UniqueBufHolder + UniqueBufHolder MultidrawContext< PerDrawDataT >::perDrawArgsBuffer + + perDrawArgsBuffer + +Buffer for per draw parameters. + + + + + + + + + uint32_t + uint32_t MultidrawContext< PerDrawDataT >::allocatedDrawcallsInBuffer + + allocatedDrawcallsInBuffer + = 0 + +Number of draw calls that can be stored in buffer. + + + + + + + + + uint32_t + uint32_t MultidrawContext< PerDrawDataT >::actualStart + + actualStart + = 0 + +Offset in buffer for next draw call. + + + + + + + + + + + eastl::string + eastl::string MultidrawContext< PerDrawDataT >::getPerDrawArgsBufferName + () const + getPerDrawArgsBufferName + +Returns name for per draw parameters buffer. + + + + + + + + + + + constexpr bool + static constexpr bool MultidrawContext< PerDrawDataT >::needPerDrawParamsBuffer + () + needPerDrawParamsBuffer + +Checks if per draw parameter could be stored instead of draw id. In this case we don't need per draw parameters buffer. + + + + + + + + + + + + MultidrawContext< PerDrawDataT >::MultidrawContext + (const char *name) + MultidrawContext + + const char * + name + + +Default constructor. + + + + +name + + +must be unique for each context. + + + + + + + + + + + + MultidrawContext< PerDrawDataT >::MultidrawContext + (MultidrawContext &&)=default + MultidrawContext + + MultidrawContext && + + +Default move constructor. + + + + + + + + + MultidrawContext & + MultidrawContext& MultidrawContext< PerDrawDataT >::operator= + (MultidrawContext &&)=default + operator= + + MultidrawContext && + + +Default move assignment operator. + + + + + + + + + + MultidrawContext< PerDrawDataT >::MultidrawContext + (MultidrawContext &)=delete + MultidrawContext + + MultidrawContext & + + +Removed copy constructor since we use unique buffer holders. + + + + + + + + + MultidrawContext & + MultidrawContext& MultidrawContext< PerDrawDataT >::operator= + (MultidrawContext &)=delete + operator= + + MultidrawContext & + + +Removed copy assignment operator since we use unique buffer holders. + + + + + + + + + + + typename T + + + MultidrawRenderExecutor + MultidrawRenderExecutor MultidrawContext< PerDrawDataT >::fillBuffers + (uint32_t drawcalls_count, const T &set_cb) + fillBuffers + + uint32_t + drawcalls_count + + + const T & + set_cb + + +Fills multidraw buffers. + + + + +drawcalls_count + + +number of draw calls. + + + + +set_cb + + +function that sets draw call parameters. + + + +executor that could be used to render draw calls. + +This method iterates over locked buffers content and calls params_setter for each draw call to fill only allowed parameters of drawcall. If the buffers are too small, it recreates them. + + + + + + + void + void MultidrawContext< PerDrawDataT >::close + () + close + +Closes buffers. + + + + + + + + + + + +Multidraw Context +This class incapsulates logic of filling multidraw buffers. It implements draw call id/per draw parameters passing for different platforms and manages buffers required for it. + + + + MultidrawContextactualStart + MultidrawContextallocatedDrawcallsInBuffer + MultidrawContextclose + MultidrawContextfillBuffers + MultidrawContextgetPerDrawArgsBufferName + MultidrawContextmultidrawArguments + MultidrawContextMultidrawContext + MultidrawContextMultidrawContext + MultidrawContextMultidrawContext + MultidrawContextname + MultidrawContextneedPerDrawParamsBuffer + MultidrawContextoperator= + MultidrawContextoperator= + MultidrawContextperDrawArgsBuffer + + + diff --git a/breathe/doxygen/d3dHelpers/xml/class_multidraw_context_1_1_multidraw_render_executor.xml b/breathe/doxygen/d3dHelpers/xml/class_multidraw_context_1_1_multidraw_render_executor.xml new file mode 100644 index 000000000..79ec2ae5b --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/class_multidraw_context_1_1_multidraw_render_executor.xml @@ -0,0 +1,221 @@ + + + + MultidrawContext::MultidrawRenderExecutor + dag_multidrawContext.h + + + class + friend class MultidrawContext + + MultidrawContext + + MultidrawContext + + + + + + + + + + + + + const MultidrawContext * + const MultidrawContext* MultidrawContext< PerDrawDataT >::MultidrawRenderExecutor::context + + context + +Pointer to a context that is used for rendering. + + + + + + + + + + + + MultidrawContext< PerDrawDataT >::MultidrawRenderExecutor::MultidrawRenderExecutor + ()=delete + MultidrawRenderExecutor + +Default constructors and operator= are deleted. + + + + + + + + + + MultidrawContext< PerDrawDataT >::MultidrawRenderExecutor::MultidrawRenderExecutor + (MultidrawRenderExecutor &&)=delete + MultidrawRenderExecutor + + MultidrawRenderExecutor && + + + + + + + + + + + MultidrawRenderExecutor & + MultidrawRenderExecutor& MultidrawContext< PerDrawDataT >::MultidrawRenderExecutor::operator= + (MultidrawRenderExecutor &&)=delete + operator= + + MultidrawRenderExecutor && + + + + + + + + + + + + MultidrawContext< PerDrawDataT >::MultidrawRenderExecutor::MultidrawRenderExecutor + (MultidrawRenderExecutor &)=delete + MultidrawRenderExecutor + + MultidrawRenderExecutor & + + + + + + + + + + + MultidrawRenderExecutor & + MultidrawRenderExecutor& MultidrawContext< PerDrawDataT >::MultidrawRenderExecutor::operator= + (MultidrawRenderExecutor &)=delete + operator= + + MultidrawRenderExecutor & + + + + + + + + + + + + + + MultidrawContext< PerDrawDataT >::MultidrawRenderExecutor::MultidrawRenderExecutor + (const MultidrawContext *context) + MultidrawRenderExecutor + + const MultidrawContext * + context + + +Constructor. + + + + +context + + +reference to a context that is used for rendering. If context is a nullptr, render method does nothing. + + + + + + + + + + + void + void MultidrawContext< PerDrawDataT >::MultidrawRenderExecutor::render + (uint32_t primitive_type, uint32_t first_drawcall, uint32_t drawcalls_count) const + render + + uint32_t + primitive_type + + + uint32_t + first_drawcall + + + uint32_t + drawcalls_count + + +Renders draw calls. + + + + +primitive_type + + +type of primitive. + + + + +first_drawcall + + +index of first draw call in the buffer. + + + + +drawcalls_count + + +number of draw calls to execute. + + + +This method renders draw calls using multidraw indirect buffers. + + + + + + + +Executor for multidraw calls. + + +This class is used to pass multidraw buffers to a draw call. It could be constructed only by MultidrawContext. It is used to hide multidraw buffers from a user. + + + + MultidrawContext::MultidrawRenderExecutorcontext + MultidrawContext::MultidrawRenderExecutorMultidrawContext + MultidrawContext::MultidrawRenderExecutorMultidrawRenderExecutor + MultidrawContext::MultidrawRenderExecutorMultidrawRenderExecutor + MultidrawContext::MultidrawRenderExecutorMultidrawRenderExecutor + MultidrawContext::MultidrawRenderExecutorMultidrawRenderExecutor + MultidrawContext::MultidrawRenderExecutoroperator= + MultidrawContext::MultidrawRenderExecutoroperator= + MultidrawContext::MultidrawRenderExecutorrender + + + diff --git a/breathe/doxygen/d3dHelpers/xml/class_texture_factory.xml b/breathe/doxygen/d3dHelpers/xml/class_texture_factory.xml new file mode 100644 index 000000000..26bea0cb9 --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/class_texture_factory.xml @@ -0,0 +1,337 @@ + + + + TextureFactory + dag_texMgr.h + + + + TextureFactory::TextureFactory + ()=default + TextureFactory + + + + + + + + + + + TextureFactory::TextureFactory + (TextureFactory &&)=default + TextureFactory + + TextureFactory && + + + + + + + + + + + TextureFactory & + TextureFactory& TextureFactory::operator= + (TextureFactory &&)=default + operator= + + TextureFactory && + + + + + + + + + + + + virtual TextureFactory::~TextureFactory + () + ~TextureFactory + + + + + + + + + + BaseTexture * + virtual BaseTexture* TextureFactory::createTexture + (TEXTUREID id)=0 + createTexture + + TEXTUREID + id + + +Create texture a with the specified ID. + + +Make sure to store the result to release it in releaseTexture() + + + +id + + +ID of the texture to create + + + + + + + + + + + void + virtual void TextureFactory::releaseTexture + (BaseTexture *texture, TEXTUREID id)=0 + releaseTexture + + BaseTexture * + texture + + + TEXTUREID + id + + +Release a texture that was created using createTexture. + + + + +texture + + +Texture to release + + + + +id + + +ID of the texture to release + + + + + + + + + + + void + virtual void TextureFactory::texFactoryActiveChanged + (bool) + texFactoryActiveChanged + + bool + + +A callback that is called on install/uninstall. + + + + + + + + + bool + virtual bool TextureFactory::scheduleTexLoading + (TEXTUREID, TexQL) + scheduleTexLoading + + TEXTUREID + + + TexQL + + +Schedules loading of specified texture (if applicable) + + +Thread-safe + + + +id + + +ID of the texture to load + + + + +req_ql + + +Required quality level + + + +true when loading scheduled successfully + + + + + + + + + bool + virtual bool TextureFactory::getTextureDDSx + (TEXTUREID, Tab< char > &) + getTextureDDSx + + TEXTUREID + + + Tab< char > & + + +Loads and returns contents of texture as DDSx data. + + +This function is synchronous and should be used with caution + + + +id + + +ID of the texture to load + + + + +out_ddsx + + +Output buffer for DDSx data + + + +true when texture was loaded successfully + + + + + + + + + void + virtual void TextureFactory::onUnregisterTexture + (TEXTUREID) + onUnregisterTexture + + TEXTUREID + + +Callback for notification of texture being unregistered from the manager. + + + + +id + + +ID of the texture that was unregistered + + + + + + + + + + + bool + virtual bool TextureFactory::isPersistentTexName + (const char *) + isPersistentTexName + + const char * + + +Determines whether the string nm has static lifetime and can be referenced at any time without copying. + + + + +nm + + +String to check + + + +true if the string is persistent + + + + + + + + + + + void + static void TextureFactory::onTexFactoryDeleted + (TextureFactory *f) + onTexFactoryDeleted + + TextureFactory * + f + + +When a texture factory instance is destroyed at runtime, this function must be called to notify the manager about it. + + +This should not be called from factories which are static singletons or are destroyed after the manager was already de-initialized. + + + + + + + + + +Texture factory provides custom creation mechanism. + + + + + + TextureFactorycreateTexture + TextureFactorygetTextureDDSx + TextureFactoryisPersistentTexName + TextureFactoryonTexFactoryDeleted + TextureFactoryonUnregisterTexture + TextureFactoryoperator= + TextureFactoryreleaseTexture + TextureFactoryscheduleTexLoading + TextureFactorytexFactoryActiveChanged + TextureFactoryTextureFactory + TextureFactoryTextureFactory + TextureFactory~TextureFactory + + + diff --git a/breathe/doxygen/d3dHelpers/xml/combine.xslt b/breathe/doxygen/d3dHelpers/xml/combine.xslt new file mode 100644 index 000000000..3bfa82c1e --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/combine.xslt @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dHelpers/xml/compound.xsd b/breathe/doxygen/d3dHelpers/xml/compound.xsd new file mode 100644 index 000000000..6a8a83463 --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/compound.xsd @@ -0,0 +1,1215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dHelpers/xml/dag__multidraw_context_8h.xml b/breathe/doxygen/d3dHelpers/xml/dag__multidraw_context_8h.xml new file mode 100644 index 000000000..77e7a96f9 --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/dag__multidraw_context_8h.xml @@ -0,0 +1,252 @@ + + + + dag_multidrawContext.h + EASTL/fixed_function.h + EASTL/optional.h + EASTL/string.h + EASTL/variant.h + 3d/dag_resPtr.h + 3d/dag_ringDynBuf.h + drv/3d/dag_draw.h + 3d/dag_multidrawInfo.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MultidrawContext + MultidrawContext::MultidrawRenderExecutor + + + USE_STAGING_MULTIDRAW_BUF + _TARGET_XBOXONE + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<EASTL/fixed_function.h> +#include<EASTL/optional.h> +#include<EASTL/string.h> +#include<EASTL/variant.h> + +#include<3d/dag_resPtr.h> +#include<3d/dag_ringDynBuf.h> +#include<drv/3d/dag_draw.h> +#include<3d/dag_multidrawInfo.h> + + +//ThisisworkaroundforOOMonxboxhttps://youtrack.gaijin.team/issue/EEX-4827 +#defineUSE_STAGING_MULTIDRAW_BUF_TARGET_XBOXONE + +template<typenamePerDrawDataT> +classMultidrawContext +{ +eastl::stringname; +#ifUSE_STAGING_MULTIDRAW_BUF +UniqueBufmultidrawArguments; +RingDynamicSBmultidrawArgsStagingBuffer; +#else +RingDynamicSBmultidrawArguments; +#endif +UniqueBufHolderperDrawArgsBuffer; +uint32_tallocatedDrawcallsInBuffer=0; + +uint32_tactualStart=0; + +eastl::stringgetPerDrawArgsBufferName()const{returnname+"_perDrawArgsBuffer";} + +#ifUSE_STAGING_MULTIDRAW_BUF +eastl::stringgetMultidrawStagingBufferName()const{returnname+"_staging";} +#endif + +staticconstexprboolneedPerDrawParamsBuffer(){returnsizeof(PerDrawDataT)!=sizeof(uint32_t);} + +public: +MultidrawContext(constchar*name):name(name){} +MultidrawContext(MultidrawContext&&)=default; +MultidrawContext&operator=(MultidrawContext&&)=default; +MultidrawContext(MultidrawContext&)=delete; +MultidrawContext&operator=(MultidrawContext&)=delete; + +classMultidrawRenderExecutor +{ +friendclassMultidrawContext; +constMultidrawContext*context; +MultidrawRenderExecutor()=delete; +MultidrawRenderExecutor(MultidrawRenderExecutor&&)=delete; +MultidrawRenderExecutor&operator=(MultidrawRenderExecutor&&)=delete; +MultidrawRenderExecutor(MultidrawRenderExecutor&)=delete; +MultidrawRenderExecutor&operator=(MultidrawRenderExecutor&)=delete; + +public: +MultidrawRenderExecutor(constMultidrawContext*context):context(context){} +voidrender(uint32_tprimitive_type,uint32_tfirst_drawcall,uint32_tdrawcalls_count)const +{ +if(!context) +return; +#ifUSE_STAGING_MULTIDRAW_BUF +d3d::multi_draw_indexed_indirect(primitive_type,context->multidrawArguments.getBuf(),drawcalls_count, +MultiDrawInfo::bytesCountPerDrawcall,first_drawcall*MultiDrawInfo::bytesCountPerDrawcall); +#else +d3d::multi_draw_indexed_indirect(primitive_type,context->multidrawArguments.getRenderBuf(),drawcalls_count, +MultiDrawInfo::bytesCountPerDrawcall,(first_drawcall+context->actualStart)*MultiDrawInfo::bytesCountPerDrawcall); +#endif +} +}; + +template<typenameT> +MultidrawRenderExecutorfillBuffers(uint32_tdrawcalls_count,constT&set_cb) +{ +CONSTEXPR_EXT_MULTIDRAWboolextMultiDraw=MultiDrawInfo::usesExtendedMultiDrawStruct(); + +#ifUSE_STAGING_MULTIDRAW_BUF +RingDynamicSB&multidrawArgsBuf=multidrawArgsStagingBuffer; +#else +RingDynamicSB&multidrawArgsBuf=multidrawArguments; +#endif +if(allocatedDrawcallsInBuffer<drawcalls_count||!multidrawArgsBuf.getRenderBuf()) +{ +constuint32_tCHUNK_SIZE=2048; +allocatedDrawcallsInBuffer=(drawcalls_count+CHUNK_SIZE-1)/CHUNK_SIZE*CHUNK_SIZE; +#ifUSE_STAGING_MULTIDRAW_BUF +multidrawArguments.close(); +multidrawArguments=dag::create_sbuffer(sizeof(uint32_t), +MultiDrawInfo::bytesCountPerDrawcall*allocatedDrawcallsInBuffer/sizeof(uint32_t),SBCF_INDIRECT,0,name.c_str()); +multidrawArgsStagingBuffer.close(); +multidrawArgsStagingBuffer.init(allocatedDrawcallsInBuffer,MultiDrawInfo::bytesCountPerDrawcall,sizeof(uint32_t),SBCF_DYNAMIC, +0,getMultidrawStagingBufferName().c_str()); +#else +multidrawArguments.close(); +multidrawArguments.init(allocatedDrawcallsInBuffer,MultiDrawInfo::bytesCountPerDrawcall,sizeof(uint32_t), +SBCF_INDIRECT|SBCF_DYNAMIC,0,name.c_str()); +#endif +if(needPerDrawParamsBuffer()) +{ +perDrawArgsBuffer.close(); +perDrawArgsBuffer=dag::create_sbuffer(sizeof(PerDrawDataT),allocatedDrawcallsInBuffer, +SBCF_MISC_STRUCTURED|SBCF_BIND_SHADER_RES|SBCF_DYNAMIC,0,getPerDrawArgsBufferName().c_str()); +} +} + +eastl::variant<eastl::monostate,LockedBuffer<DrawIndexedIndirectArgs>,LockedBuffer<ExtendedDrawIndexedIndirectArgs>> +multidrawArgs; +boolbufferLocked=true; +ifCONSTEXPR_EXT_MULTIDRAW(extMultiDraw) +{ +multidrawArgs=multidrawArgsBuf.lockBufferAs<ExtendedDrawIndexedIndirectArgs>(drawcalls_count,actualStart); +bufferLocked=(bool)eastl::get<2>(multidrawArgs); +} +else +{ +multidrawArgs=multidrawArgsBuf.lockBufferAs<DrawIndexedIndirectArgs>(drawcalls_count,actualStart); +bufferLocked=(bool)eastl::get<1>(multidrawArgs); +} +if(!bufferLocked) +{ +logerr("Buffer%sdatawasn'tupdated.",multidrawArgsBuf.getRenderBuf()->getBufName()); +returnMultidrawRenderExecutor(nullptr); +} + +eastl::optional<LockedBuffer<PerDrawDataT>>perDrawArgs; +ifconstexpr(needPerDrawParamsBuffer()) +{ +perDrawArgs.emplace(lock_sbuffer<PerDrawDataT>(perDrawArgsBuffer.getBuf(),0,drawcalls_count,VBLOCK_DISCARD)); +if(!perDrawArgs) +{ +logerr("Buffer%sdatawasn'tupdated.",perDrawArgsBuffer.getBuf()->getBufName()); +returnMultidrawRenderExecutor(nullptr); +} +} +for(uint32_ti=0;i<drawcalls_count;++i) +{ +auto&dc=extMultiDraw?eastl::get<2>(multidrawArgs)[i].args:eastl::get<1>(multidrawArgs)[i]; +dc.startInstanceLocation=0; +uint32_t&drawcallId=extMultiDraw?eastl::get<2>(multidrawArgs)[i].drawcallId:dc.startInstanceLocation; +PerDrawDataT&perDrawData=needPerDrawParamsBuffer()?perDrawArgs.value()[i]:reinterpret_cast<PerDrawDataT&>(drawcallId); +set_cb(i,dc.indexCountPerInstance,dc.instanceCount,dc.startIndexLocation,dc.baseVertexLocation,perDrawData); +ifconstexpr(needPerDrawParamsBuffer()) +drawcallId=i; +} + +#ifUSE_STAGING_MULTIDRAW_BUF +extMultiDraw?eastl::get<2>(multidrawArgs).close():eastl::get<1>(multidrawArgs).close(); +multidrawArgsStagingBuffer.getRenderBuf()->copyTo(multidrawArguments.getBuf(),0, +actualStart*MultiDrawInfo::bytesCountPerDrawcall,drawcalls_count*MultiDrawInfo::bytesCountPerDrawcall); +#endif + +returnMultidrawRenderExecutor(this); +} +voidclose() +{ +multidrawArguments.close(); +#ifUSE_STAGING_MULTIDRAW_BUF +multidrawArgsStagingBuffer.close(); +#endif +perDrawArgsBuffer.close(); +allocatedDrawcallsInBuffer=0; +} +}; + +#undefCONSTEXPR_EXT_MULTIDRAW + + + + diff --git a/breathe/doxygen/d3dHelpers/xml/dag__res_mgr_8h.xml b/breathe/doxygen/d3dHelpers/xml/dag__res_mgr_8h.xml new file mode 100644 index 000000000..d6192e1fa --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/dag__res_mgr_8h.xml @@ -0,0 +1,1177 @@ + + + + dag_resMgr.h + drv/3d/dag_d3dResource.h + drv/3d/dag_resId.h + osApiWrappers/dag_atomic.h + util/dag_stdint.h + startup/dag_globalSettings.h + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/3d/dag_texMgr.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Helper wrappers
+ See iterate_all_managed_d3dres(). Use as follows: +for(D3DRESIDid=first_managed_d3dres();id!=BAD_D3DRESID;id=next_managed_d3dres(id)) + +Get the first managed resource ID for iteration + +min_rc + + +Minimum reference count filter + + + +First managed resource ID with refCount >= min_rc + + + + + D3DRESID + D3DRESID first_managed_d3dres + (int min_rc=0) + first_managed_d3dres + + int + min_rc + 0 + + + + + + + + + + + D3DRESID + D3DRESID next_managed_d3dres + (D3DRESID prev_id, int min_rc=0) + next_managed_d3dres + + D3DRESID + prev_id + + + int + min_rc + 0 + + +Get the next managed resource ID for iteration. + + + + +prev_id + + +ID of the previous resource + + + + +min_rc + + +Minimum reference count filter + + + +Next managed resource ID after prev_id with refCount >= min_rc + + + + + + + +
+ + + unsigned + TexQL + + TQL_stub + = 0xFu + +stub (shared 1x1 placeholder) + + + + + + TQL_thumb + = 0u + +thumbnail quality (upto 64x64, total mem size <= 4K) + + + + + + TQL_base + +base quality (low split) + + + + + + TQL_high + +full quality (HQ) + + + + + + TQL_uhq + +ultra high quality + + + + + + TQL__COUNT + +enum item count + + + + + + TQL__FIRST + = 0 + + + + + + + TQL__LAST + = TQL__COUNT - 1 + + + + + + +Quality levels for textures (QL) + + + + + + + + + + + D3DRESID + D3DRESID register_managed_res + (const char *name, D3dResource *res) + register_managed_res + + const char * + name + + + D3dResource * + res + + +Registers external D3D resource with the specified name as managed and returns the D3DRESID for it. + + +Specified resource becomes owned by the manager, no factory is assigned to it. RefCount is set to 1 and when it eventually reaches 0, the resource is automatically destroyed and the name is evicted. Use release_managed_res() or release_managed_res_verified() to del ref and finally destroy. Resource name is case-insensitive and must be unique. + + + +name + + +the name to register the resource under + + + + +res + + +the resource to register + + + +the D3DRESID for the registered resource + + + + + + + + + bool + bool is_managed_res_factory_set + (D3DRESID id) + is_managed_res_factory_set + + D3DRESID + id + + +Checks whether creation/release factory is set for D3DRESID. + + +E.g. for an ID that was acquired from register_managed_res(), it will return false. + +id + + +the D3DRESID to check + + + +true if a factory was specified for the D3DRESID + + + + + + + + + D3dResource * + D3dResource* acquire_managed_res + (D3DRESID id) + acquire_managed_res + + D3DRESID + id + + +Acquires resource object and increments resource reference count. + + +If resource was not referenced yet, it is created. If it is unavailable (bad ID), nullptr is returned. Logically paired with release_managed_res(). When factory fails to create texture, missing texture handling may be applied. + + + +id + + +the managed ID to acquire + + + +the acquired resource object or nullptr if the ID is invalid + + + + + + + + + void + void release_managed_res + (D3DRESID id) + release_managed_res + + D3DRESID + id + + +Releases resource object and decrements resource reference count. + + +When reference count reaches 0, resource may be released. Logically paired with acquire_managed_res() + +id + + +the managed ID to release + + + + + + + + + + + void + void release_managed_res_verified + (D3DRESID &id, D3dResource *check_res) + release_managed_res_verified + + D3DRESID & + id + + + D3dResource * + check_res + + +Releases resource object and decrements resource reference count, but additionally checks that the managed resource is the same as check_res. + + +When reference count reaches 0, resource may be released. Logically paired with acquire_managed_res() On resource destruction (when name is unregistered) id is set to BAD_D3DRESID + +id + + +the managed ID to release + + + + +check_res + + +the resource to check against + + + + + + + + + + + BaseTexture * + BaseTexture* acquire_managed_tex + (D3DRESID id) + acquire_managed_tex + + D3DRESID + id + + +Acquires resource object and increments resource reference count. + + +If resource was not referenced yet, it is created. If it is unavailable (bad ID), nullptr is returned. Logically paired with release_managed_res(). When factory fails to create texture, missing texture handling may be applied. + + + +id + + +the managed ID to acquire + + + +the acquired resource object or nullptr if the ID is invalid + + + + + + + + + void + static void release_managed_tex + (D3DRESID id) + release_managed_tex + + D3DRESID + id + + +Releases resource object and decrements resource reference count. + + +When reference count reaches 0, resource may be released. Logically paired with acquire_managed_res() + +id + + +the managed ID to release + + + + + + + + + + + + + class T + + + void + static void release_managed_tex_verified + (D3DRESID &id, T &tex) + release_managed_tex_verified + + D3DRESID & + id + + + T & + tex + + +Releases resource object and decrements resource reference count, but additionally checks that the managed resource is the same as check_res. + + +When reference count reaches 0, resource may be released. Logically paired with acquire_managed_res() On resource destruction (when name is unregistered) id is set to BAD_D3DRESID + +id + + +the managed ID to release + + + + +check_res + + +the resource to check against + + + + + + + + + + + Sbuffer * + Sbuffer* acquire_managed_buf + (D3DRESID id) + acquire_managed_buf + + D3DRESID + id + + +Acquires resource object and increments resource reference count. + + +If resource was not referenced yet, it is created. If it is unavailable (bad ID), nullptr is returned. Logically paired with release_managed_res(). When factory fails to create texture, missing texture handling may be applied. + + + +id + + +the managed ID to acquire + + + +the acquired resource object or nullptr if the ID is invalid + + + + + + + + + void + static void release_managed_buf + (D3DRESID id) + release_managed_buf + + D3DRESID + id + + +Releases resource object and decrements resource reference count. + + +When reference count reaches 0, resource may be released. Logically paired with acquire_managed_res() + +id + + +the managed ID to release + + + + + + + + + + + + + class T + + + void + static void release_managed_buf_verified + (D3DRESID &id, T &buf) + release_managed_buf_verified + + D3DRESID & + id + + + T & + buf + + +Releases resource object and decrements resource reference count, but additionally checks that the managed resource is the same as check_res. + + +When reference count reaches 0, resource may be released. Logically paired with acquire_managed_res() On resource destruction (when name is unregistered) id is set to BAD_D3DRESID + +id + + +the managed ID to release + + + + +check_res + + +the resource to check against + + + + + + + + + + + const char * + const char* get_managed_res_name + (D3DRESID id) + get_managed_res_name + + D3DRESID + id + + +Gets the name for a managed resource by ID, or nullptr if ID is invalid. + + + + +id + + +the D3DRESID to get the name for + + + +the name of the managed resource with ID id or nullptr + + + + + + + + + D3DRESID + D3DRESID get_managed_res_id + (const char *res_name) + get_managed_res_id + + const char * + res_name + + +Gets managed resource ID by its name, or BAD_D3DRESID if name is invalid. + + + + +res_name + + +the name of the resource to get the ID for + + + +the managed resource ID that corresponds to res_name or BAD_D3DRESID if the name is invalid + + + + + + + + + int + int get_managed_res_refcount + (D3DRESID id) + get_managed_res_refcount + + D3DRESID + id + + +Gets the reference count for a managed resource by ID. + + + + +id + + +the ID to get the reference count for + + + +the reference count for the D3DRESID resource or a negative value if the resource is missing + + + + + + + + + unsigned + unsigned get_managed_res_lfu + (D3DRESID id) + get_managed_res_lfu + + D3DRESID + id + + +Gets the last-frame-used (LFU) counter for a managed ID. + + + + +id + + +the ID to get the LFU counter for + + + +the last-frame-used counter for the D3DRESID resource or 0 if the resource is missing/unregistered + + + + + + + + + TexQL + TexQL get_managed_res_cur_tql + (D3DRESID id) + get_managed_res_cur_tql + + D3DRESID + id + + +Gets the current quality level (TQL_*) for a managed ID. + + + + +id + + +the ID to get the quality level for + + + +the current quality level for the D3DRESID resource or TQL_stub if the resource is missing/unregistered + + + + + + + + + TexQL + TexQL get_managed_res_max_tql + (D3DRESID id) + get_managed_res_max_tql + + D3DRESID + id + + +Gets the maximum available quality level (TQL_*) for a managed ID. + + + + +id + + +the D3DRESID to get the quality level for + + + +the current quality level for the D3DRESID resource or TQL_stub if the resource is missing/unregistered + + + + + + + + + unsigned + unsigned get_managed_res_maxreq_lev + (D3DRESID id) + get_managed_res_maxreq_lev + + D3DRESID + id + + +Gets the maximum requested level for a managed ID, i.e. log2(tex.dimension). Do not confuse it with QL! + + + + +id + + +the D3DRESID to get the loaded level for + + + +the current loaded level for id or 0 if the resource is missing/unregistered + + + + + + + + + unsigned + unsigned get_managed_res_loaded_lev + (D3DRESID id) + get_managed_res_loaded_lev + + D3DRESID + id + + +Gets the current loaded level for a managed ID, i.e. log2(tex.dimension). Do not confuse it with QL! + + + + +id + + +the D3DRESID to get the loaded level for + + + +the current loaded level for id or 0 if the resource is missing/unregistered + + + + + + + + + void + void enable_res_mgr_mt + (bool enable, int max_res_entry_count) + enable_res_mgr_mt + + bool + enable + + + int + max_res_entry_count + + +Enables or disables multithreading support for resource manager and preallocates internal structures to handle upto max_res_entry_count resource entries without reallocations. + + +enable_res_mgr_mt(false, -1) will disable multithreading support and shrink entries array to used size + +enable + + +whether to enable multithreading support + + + + +max_res_entry_count + + +the maximum number of resource entries to preallocate or -1 to shrink to fit + + + + + + + + + + + D3DRESID + D3DRESID iterate_all_managed_d3dres + (D3DRESID after_rid, int min_ref_count) + iterate_all_managed_d3dres + + D3DRESID + after_rid + + + int + min_ref_count + + +Utility for iterating all managed resources. + + +Managed resources form a linked list, so for an arbitrary ID, this function returns the "next" ID in the list. Hence one is supposed to call this function in a loop until it returns BAD_D3DRESID. + +after_rid + + +ID of the texture to get the next texture for. Use BAD_D3DRESID to start iteration. + + + + +min_ref_count + + +Minimum reference count filter + + + +Some ID that follows after_rid and has refCount >= min_ref_count OR BAD_RESID if the iteration is done. + + + + + + + + + +Automatic resource manager for D3D resources. + + +Glossary: +level - feature of texture size, computed as log2(max(tex.dimensions)) = log2(max(tex.w, tex.h, tex.d)): +level=1 means smallest possing size (2x2x2) and is commonly used to denote smallest quality; +level=15 means maximum possible size (up to 32767x32768, but current GPUs don't handle such res); +level=2..15 means some non-stub quality. Variables for holding level usually have suffix Lev or _lev + + +QL - quality level (or TQL - texture quality level), do not confuse it with 'level'. Some predefined quality preset of texture (stub, thumbnail, base, high, ultrahigh, etc.) Enumerated later with TexQL enum (TQL_*). Variables for holding quality level usually have suffix QL or _ql. +LFU - last frame used, ordinary rendered frame counter (generally from game start) where texture was referenced last time +levDesc - levels descriptor that maps QL to real levels (e.g. TQL_thumb -> level=6, TQL_base -> level=9) + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_d3dResource.h> +#include<drv/3d/dag_resId.h> +#include<osApiWrappers/dag_atomic.h> +#include<util/dag_stdint.h> +#include<startup/dag_globalSettings.h> + + + +enumTexQL:unsigned +{ +TQL_stub=0xFu, +TQL_thumb=0u, +TQL_base, +TQL_high, +TQL_uhq, + +TQL__COUNT, +TQL__FIRST=0, +TQL__LAST=TQL__COUNT-1 +}; + +structD3dResManagerData +{ +static__forceinlineboolisValidIndex(unsignedidx) +{ +if(idx<unsigned(interlocked_relaxed_load(indexCount))) +returntrue; +returnidx<unsigned(interlocked_acquire_load(indexCount)); +} +static__forceinlineboolisValidIDFast(D3DRESIDid){returnid!=BAD_D3DRESID&&isValidIndex(id.index());} + +static__forceinlineboolisValidID(D3DRESIDid,void(*report_bad_gen)(D3DRESID)=&report_bad_generation_used) +{ +if(isValidIDFast(id)) +{ +if(getCurGeneration(id.index())==id.generation()) +returntrue; +if(report_bad_gen) +report_bad_gen(id); +returnfalse; +} +returnfalse; +} + +static__forceinlineintgetRefCount(D3DRESIDid) +{ +unsignedidx=id.index(); +if(isValidIDFast(id)&&getCurGeneration(idx)==id.generation()) +returninterlocked_acquire_load(refCount[idx]); +returnINVALID_REFCOUNT; +} + +static__forceinlineD3dResource*getD3dRes(D3DRESIDid) +{ +returngetRefCount(id)>0?interlocked_acquire_load_ptr(asVolatile(d3dRes[id.index()])):nullptr; +} +static__forceinlineBaseTexture*getBaseTex(D3DRESIDid){return(BaseTexture*)getD3dRes(id);} +template<intTYPE> +static__forceinlineBaseTexture*getD3dTex(D3DRESIDid) +{ +D3dResource*r=getD3dRes(id); +return(r&&r->restype()==TYPE)?(BaseTexture*)r:nullptr; +} + +static__forceinlineunsignedgetResLFU(D3DRESIDid) +{ +returnisValidID(id,nullptr)?(unsigned)interlocked_acquire_load(lastFrameUsed[id.index()]):0u; +} + +static__forceinlineTexQLgetResCurQL(D3DRESIDid){returnisValidID(id,nullptr)?resQS[id.index()].getCurQL():TQL_stub;} +static__forceinlineTexQLgetResMaxQL(D3DRESIDid){returnisValidID(id,nullptr)?resQS[id.index()].getMaxQL():TQL_stub;} + +static__forceinlineuint8_tgetResLoadedLev(D3DRESIDid){returnisValidID(id,nullptr)?resQS[id.index()].getLdLev():0;} +static__forceinlineuint8_tgetResMaxReqLev(D3DRESIDid){returnisValidID(id,nullptr)?resQS[id.index()].getMaxReqLev():0;} + +static__forceinlineunsignedgetCurGeneration(intidx){returninterlocked_acquire_load(generation[idx]);} + +static__forceinlinevoidmarkResLFU(D3DRESIDid,unsignedreq_lev=15) +{ +if(isValidID(id,nullptr)/*getRefCount(id)>0*/) +{ +unsignedidx=id.index(); +unsignedf=dagor_frame_no(); +if(interlocked_relaxed_load(lastFrameUsed[idx])<f)//relaxedloadhereisenoughformonotonicallyincreasedframecounter +{ +interlocked_release_store(lastFrameUsed[idx],f); +updateResReqLev(id,idx,req_lev); +} +elseif(resQS[idx].getMaxReqLev()<req_lev) +updateResReqLev(id,idx,req_lev); +} +} + +staticuint8_tgetLevDesc(intidx,TexQLql){return(levDesc[idx]>>(ql*4))&0xF;} + +protected: +staticconstexprintINVALID_REFCOUNT=-1073741824;//0xC0000000tobenegativeandsufficientlyfarfrom0tobothsides + +structReqQState +{ +uint8_tmaxReqLev;//<maxrequested-level +uint8_tldLev__rdLev;//<loaded-level;leveltobeloaded(!=0->readinginprogress) +uint8_tqLev__maxLev;//<maxlevelfortexquality;currentmaxlevel +uint8_tcurQL__maxQL;//<currentQL;maxQL + +public: +uint8_tgetMaxReqLev()const{returninterlocked_relaxed_load(maxReqLev);}//relaxedisenough +voidsetMaxReqLev(uint8_tl){interlocked_release_store(maxReqLev,l);} + +uint8_tgetLdLev()const{returninterlocked_acquire_load(ldLev__rdLev)>>4;} +uint8_tgetRdLev()const{returninterlocked_acquire_load(ldLev__rdLev)&0xF;} +boolisReading()const{returngetRdLev()!=0;} +voidsetRdLev(uint8_tl){returninterlocked_release_store(ldLev__rdLev,(getLdLev()<<4)|(l&0xF));} +voidsetLdLev(uint8_tl){returninterlocked_release_store(ldLev__rdLev,(l<<4)|0);} + +uint8_tgetQLev()const{returninterlocked_relaxed_load(qLev__maxLev)>>4;} +uint8_tgetMaxLev()const{returninterlocked_acquire_load(qLev__maxLev)&0xF;} +uint8_tclampLev(uint8_tl)const +{ +uint8_tqlev=getQLev(); +returnl<qlev?l:qlev; +} +voidsetQLev(uint8_tl) +{ +l&=0xF; +interlocked_release_store(qLev__maxLev,l|(l<<4)); +} +voidsetMaxLev(uint8_tl) +{ +uint8_tql=getQLev(); +interlocked_release_store(qLev__maxLev,(ql<<4)|(l<ql?l:ql)); +} + +TexQLgetCurQL()const{returnTexQL(interlocked_acquire_load(curQL__maxQL)>>4);} +TexQLgetMaxQL()const{returnTexQL(interlocked_relaxed_load(curQL__maxQL)&0xF);} +boolisEqualCurAndMaxQL()const +{ +uint8_tcm=interlocked_relaxed_load(curQL__maxQL); +return(cm>>4)==(cm&0xF); +} +boolisCurQLGreater(TexQLql)const +{ +TexQLcur=getCurQL(); +returncur!=TQL_stub&&cur>ql; +} +voidsetMaxQL(TexQLmax_ql,uint8_tcur_ql){interlocked_release_store(curQL__maxQL,((cur_ql&0xF)<<4)|(max_ql&0xF));} +voidsetCurQL(TexQLql){setMaxQL(getMaxQL(),ql);} +}; + +staticintindexCount,maxTotalIndexCount; +staticuint16_t*__restrictgeneration; +staticint*__restrictrefCount; +staticD3dResource*__restrict*__restrictd3dRes; +staticint32_t*__restrictlastFrameUsed; +staticReqQState*__restrictresQS; +staticuint16_t*__restrictlevDesc; + +template<typenameT> +staticinlineT*volatile&asVolatile(T*__restrict&p) +{ +return(T*volatile&)p; +} +staticvoidreport_bad_generation_used(D3DRESIDid); +staticvoidrequire_tex_load(D3DRESIDid); +static__forceinlinevoidupdateResReqLev(D3DRESIDid,unsignedidx,unsignedreqLev) +{ +resQS[idx].setMaxReqLev(reqLev);//eventuallyconsistent +if(resQS[idx].getRdLev()||resQS[idx].isEqualCurAndMaxQL()) +return; +reqLev=resQS[idx].clampLev(reqLev); +if(resQS[idx].getLdLev()<reqLev) +require_tex_load(id); +} +}; + +D3DRESIDregister_managed_res(constchar*name,D3dResource*res); + +boolis_managed_res_factory_set(D3DRESIDid); + +D3dResource*acquire_managed_res(D3DRESIDid); + +voidrelease_managed_res(D3DRESIDid); + +voidrelease_managed_res_verified(D3DRESID&id,D3dResource*check_res); + +BaseTexture*acquire_managed_tex(D3DRESIDid); +staticinlinevoidrelease_managed_tex(D3DRESIDid){release_managed_res(id);} +template<classT> +staticinlinevoidrelease_managed_tex_verified(D3DRESID&id,T&tex) +{ +release_managed_res_verified(id,static_cast<D3dResource*>(tex)); +tex=nullptr; +} + +Sbuffer*acquire_managed_buf(D3DRESIDid); +staticinlinevoidrelease_managed_buf(D3DRESIDid){release_managed_res(id);} +template<classT> +staticinlinevoidrelease_managed_buf_verified(D3DRESID&id,T&buf) +{ +release_managed_res_verified(id,static_cast<D3dResource*>(buf)); +buf=nullptr; +} + +constchar*get_managed_res_name(D3DRESIDid); + +D3DRESIDget_managed_res_id(constchar*res_name); + + +inlineintget_managed_res_refcount(D3DRESIDid){returnD3dResManagerData::getRefCount(id);} + +inlineunsignedget_managed_res_lfu(D3DRESIDid){returnD3dResManagerData::getResLFU(id);} + +inlineTexQLget_managed_res_cur_tql(D3DRESIDid){returnD3dResManagerData::getResCurQL(id);} + +inlineTexQLget_managed_res_max_tql(D3DRESIDid){returnD3dResManagerData::getResMaxQL(id);} + +inlineunsignedget_managed_res_maxreq_lev(D3DRESIDid){returnD3dResManagerData::getResMaxReqLev(id);} + +inlineunsignedget_managed_res_loaded_lev(D3DRESIDid){returnD3dResManagerData::getResLoadedLev(id);} + +voidenable_res_mgr_mt(boolenable,intmax_res_entry_count); + + +D3DRESIDiterate_all_managed_d3dres(D3DRESIDafter_rid,intmin_ref_count); + +inlineD3DRESIDfirst_managed_d3dres(intmin_rc=0){returniterate_all_managed_d3dres(BAD_D3DRESID,min_rc);} + +inlineD3DRESIDnext_managed_d3dres(D3DRESIDprev_id,intmin_rc=0){returniterate_all_managed_d3dres(prev_id,min_rc);} + + +
+
diff --git a/breathe/doxygen/d3dHelpers/xml/dag__tex_mgr_8h.xml b/breathe/doxygen/d3dHelpers/xml/dag__tex_mgr_8h.xml new file mode 100644 index 000000000..5a6d3f3fa --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/dag__tex_mgr_8h.xml @@ -0,0 +1,1731 @@ + + + + dag_texMgr.h + util/dag_texMetaData.h + drv/3d/dag_samplerHandle.h + drv/3d/dag_sampler.h + 3d/dag_resMgr.h + generic/dag_tabFwd.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextureFactory + LODBiasRule + +
Helper wrappers
+ See iterate_all_managed_textures(). Use as follows: +for(TEXTUREIDid=first_managed_texture();id!=BAD_TEXTUREID;id=next_managed_texture(id)) + +Get the first managed texture ID for iteration + +min_rc + + +Minimum reference count filter + + + +First managed texture ID with refCount >= min_rc + + + + + TEXTUREID + TEXTUREID first_managed_texture + (int min_rc=0) + first_managed_texture + + int + min_rc + 0 + + + + + + + + + + + TEXTUREID + TEXTUREID next_managed_texture + (TEXTUREID prev_id, int min_rc=0) + next_managed_texture + + TEXTUREID + prev_id + + + int + min_rc + 0 + + +Get the next managed texture ID for iteration. + + + + +prev_id + + +ID of the previous texture + + + + +min_rc + + +Minimum reference count filter + + + +Next managed texture ID after prev_id with refCount >= min_rc + + + + + + + +
+ + + int + int dgs_tex_quality + + dgs_tex_quality + +Read-only access to the current texture quality level. + + +This is READ-ONLY, do not modify this value + + + + + + + + + int + int dgs_tex_anisotropy + + dgs_tex_anisotropy + +Read-only access to the current texture anisotropy. + + +This is READ-ONLY, do not modify this value + + + + + + + + + + + D3DRESID + D3DRESID register_managed_tex + (const char *name, BaseTexture *res) + register_managed_tex + + const char * + name + + + BaseTexture * + res + + +Registers external D3D resource with the specified name as managed and returns the D3DRESID for it. + + +Specified resource becomes owned by the manager, no factory is assigned to it. RefCount is set to 1 and when it eventually reaches 0, the resource is automatically destroyed and the name is evicted. Use release_managed_res() or release_managed_res_verified() to del ref and finally destroy. Resource name is case-insensitive and must be unique. + + + +name + + +the name to register the resource under + + + + +res + + +the resource to register + + + +the D3DRESID for the registered resource + + + + + + + + + bool + static bool is_managed_tex_factory_set + (D3DRESID id) + is_managed_tex_factory_set + + D3DRESID + id + + +Checks whether creation/release factory is set for D3DRESID. + + +E.g. for an ID that was acquired from register_managed_res(), it will return false. + +id + + +the D3DRESID to check + + + +true if a factory was specified for the D3DRESID + + + + + + + + + const char * + static const char* get_managed_texture_name + (D3DRESID id) + get_managed_texture_name + + D3DRESID + id + + +Gets the name for a managed resource by ID, or nullptr if ID is invalid. + + + + +id + + +the D3DRESID to get the name for + + + +the name of the managed resource with ID id or nullptr + + + + + + + + + D3DRESID + static D3DRESID get_managed_texture_id + (const char *res_name) + get_managed_texture_id + + const char * + res_name + + +Gets managed resource ID by its name, or BAD_D3DRESID if name is invalid. + + + + +res_name + + +the name of the resource to get the ID for + + + +the managed resource ID that corresponds to res_name or BAD_D3DRESID if the name is invalid + + + + + + + + + int + static int get_managed_texture_refcount + (D3DRESID id) + get_managed_texture_refcount + + D3DRESID + id + + +Gets the reference count for a managed resource by ID. + + + + +id + + +the ID to get the reference count for + + + +the reference count for the D3DRESID resource or a negative value if the resource is missing + + + + + + + + + void + static void enable_tex_mgr_mt + (bool enable, int max_res_entry_count) + enable_tex_mgr_mt + + bool + enable + + + int + max_res_entry_count + + +Enables or disables multithreading support for resource manager and preallocates internal structures to handle upto max_res_entry_count resource entries without reallocations. + + +enable_res_mgr_mt(false, -1) will disable multithreading support and shrink entries array to used size + +enable + + +whether to enable multithreading support + + + + +max_res_entry_count + + +the maximum number of resource entries to preallocate or -1 to shrink to fit + + + + + + + + + + + TEXTUREID + TEXTUREID add_managed_texture + (const char *name, TextureFactory *factory=nullptr) + add_managed_texture + + const char * + name + + + TextureFactory * + factory + nullptr + + +Adds entry for managed texture name and returns TEXTUREID for it. + + +When entry for 'name' already exists, it just returns TEXTUREID. For new entry 'factory' is set as creator, for existing entry 'factory' must be nullptr. Texture name is case-insensitive and must be unique. + + + +name + + +Name that uniquely identifies the texture + + + + +factory + + +Custom texture creation mechanism, must be nullptr for existing textures + + + +Managed ID of the texture + + + + + + + + + TEXTUREID + TEXTUREID add_managed_array_texture + (const char *name, dag::ConstSpan< const char * > tex_slice_nm) + add_managed_array_texture + + const char * + name + + + dag::ConstSpan< const char * > + tex_slice_nm + + +Adds or updates entry for managed array texture name, stores creation properties and returns TEXTUREID for it. + + +Array texture will be composed of slices with texture names tex_slice_nm. Textures in slices must have the same format and size, and furthermore, some restrictions of DDSx flags apply. + + + +name + + +Name that uniquely identifies the new array texture + + + + +tex_slice_nm + + +Array of texture names to use as slices + + + +Managed ID of the texture + + + + + + + + + TEXTUREID + TEXTUREID update_managed_array_texture + (const char *name, dag::ConstSpan< const char * > tex_slice_nm) + update_managed_array_texture + + const char * + name + + + dag::ConstSpan< const char * > + tex_slice_nm + + +Updates an existing array texture entry with new slices. + + +The number of slices must match the original array texture. + +Simply calls add_managed_texture() under the hood, this function exists purely for readability purposes. + + + +name + + +Name of the array texture to update + + + + +tex_slice_nm + + +Array of new texture names to use as slices + + + +Managed ID of the array texture that was updated + + + + + + + + + unsigned + unsigned reload_managed_array_textures_for_changed_slice + (const char *slice_tex_name) + reload_managed_array_textures_for_changed_slice + + const char * + slice_tex_name + + +Checks all registered array textures and reloads those referencing specified slice. + + + + +slice_tex_name + + +Name of changed texture that can be used as slice in some array texture + + + +Number of reloaded array textures (or 0 if no array texture reference that slice) + + + + + + + + + bool + bool evict_managed_tex_id + (TEXTUREID &id) + evict_managed_tex_id + + TEXTUREID & + id + + +Schedules removal of the managed entry for the specified id and sets id to BAD_TEXTUREID (unconditionally, even if the operation fails or is deferred). + + +When refCount = 0, removal is performed immediately, otherwise it is deferred. Can be used to remove entries created with register_managed_tex(), add_managed_texture(), add_managed_array_texture() + +id + + +ID of the texture to remove + + + +true if the texture was removed immediately, false otherwise, including if the operation was invalid. + + + + + + + + + bool + bool check_managed_texture_loaded + (TEXTUREID id, bool fq_loaded=false) + check_managed_texture_loaded + + TEXTUREID + id + + + bool + fq_loaded + false + + +Checks whether contents of managed texture was loaded. + + + + +id + + +ID of the texture to check + + + + +fq_loaded + + +true to check for full quality, false for any quality + + + +true if the texture is loaded, false otherwise + + + + + + + + + bool + bool check_all_managed_textures_loaded + (dag::ConstSpan< TEXTUREID > id, bool fq_loaded=false, bool ignore_unref_tex=true) + check_all_managed_textures_loaded + + dag::ConstSpan< TEXTUREID > + id + + + bool + fq_loaded + false + + + bool + ignore_unref_tex + true + + +Checks whether contents of all managed textures in list was loaded, analogous to calling check_managed_texture_loaded() multiple times. + + +Skips checks for textures with refcount=0 by default. + + + +id + + +List of texture IDs to check. + + + + +fq_loaded + + +true to check for full quality, false for any quality + + + + +ignore_unref_tex + + +true to skip textures with refcount=0 + + + +true if all textures (excluding those with refcount=0 if ignore_unref_tex is true) are loaded, false otherwise. + + + + + + + + + bool + bool change_managed_texture + (TEXTUREID id, BaseTexture *new_texture, TextureFactory *factory=NULL) + change_managed_texture + + TEXTUREID + id + + + BaseTexture * + new_texture + + + TextureFactory * + factory + NULL + + +Replaces the texture for managed id id. + + + + +id + + +ID of the texture to replace + + + + +new_texture + + +New driver texture to use for this id + + + + +factory + + +Custom texture creation mechanism + + + +true if the texture was replaced successfully, false otherwise + + + + + + + + + void + void discard_unused_managed_texture + (TEXTUREID id) + discard_unused_managed_texture + + TEXTUREID + id + + +Discards unused texture: unloads texture when refCount=0, does nothing otherwise. + + + + +id + + +ID of the texture to discard + + + + + + + + + + + void + void discard_unused_managed_textures + () + discard_unused_managed_textures + +Iterate all managed textures and unload those with refCount=0. + + + + + + + + + void + void mark_managed_tex_lfu + (TEXTUREID id, unsigned req_lev=15) + mark_managed_tex_lfu + + TEXTUREID + id + + + unsigned + req_lev + 15 + + +Set current frame as 'last frame used' for texture. + + + + +id + + +ID of the texture to mark + + + + +req_lev + + +Quality level that was used on this frame + + + + + + + + + + + bool + bool prefetch_managed_texture + (TEXTUREID id) + prefetch_managed_texture + + TEXTUREID + id + + +Request texture content load. + + + + +id + + +ID of the texture to load + + + +true when texture already loaded, false otherwise + + + + + + + + + bool + bool prefetch_managed_textures + (dag::ConstSpan< TEXTUREID > id) + prefetch_managed_textures + + dag::ConstSpan< TEXTUREID > + id + + +Requests texture content load for a list of textures, the same as calling prefetch_managed_texture() multiple times. + + + + +id + + +List of texture IDs to load + + + +true when all textures are already loaded + + + + + + + + + bool + bool prefetch_managed_textures_by_textag + (int textag) + prefetch_managed_textures_by_textag + + int + textag + + +Requests texture content load for list of textures by TEXTAG. + + + + +textag + + +The tag to load textures for + + + +true when all textures with the tag are already loaded + + + + + + + + + void + void mark_managed_textures_important + (dag::ConstSpan< TEXTUREID > id, unsigned add_importance=1, int min_lev_for_dyn_decrease=16) + mark_managed_textures_important + + dag::ConstSpan< TEXTUREID > + id + + + unsigned + add_importance + 1 + + + int + min_lev_for_dyn_decrease + 16 + + +Marks list of textures as important (to force loading content upto requested quality level as soon as possible) + + + + +id + + +List of texture IDs to mark + + + + +add_importance + + +Additional importance to add to the textures + + + + +min_lev_for_dyn_decrease + + +important textures with more levels min can be downgraded 1 mip when dyn decrease used + + + + + + + + + + + void + void reset_managed_textures_streaming_state + () + reset_managed_textures_streaming_state + +Resets streaming state of textures so that they can be reloaded respecting the global tex quality settings changes. + + + + + + + + + void + void set_default_tex_factory + (TextureFactory *tf) + set_default_tex_factory + + TextureFactory * + tf + + +Sets the default texture factory to use for managed textures. + + + + + + + + + TextureFactory * + TextureFactory* get_default_tex_factory + () + get_default_tex_factory + +Gets the default texture factory. + + + + + + + + + TextureFactory * + TextureFactory* get_symbolic_tex_factory + () + get_symbolic_tex_factory + +Gets the symbolic texture factory which always produces nulls for texture creation. + + + + + + + + + TextureFactory * + TextureFactory* get_stub_tex_factory + () + get_stub_tex_factory + +Gets the stub texture factory which always produces stub 1x1 textures. + + + + + + + + + void + void init_managed_textures_streaming_support + (int reload_jobmgr_id=-2) + init_managed_textures_streaming_support + + int + reload_jobmgr_id + -2 + + +Init data and callbacks to support streaming. + + +Settings are taken from dgs_get_settings()->getBlockByName("texStreaming"). reload_jobmgr_id=-2 means auto creation of jobmanager, reload_jobmgr_id=-1 means no jobmanager + + + +rload_jobmgr_id + + +Either -1 or -2, controls whether to create a job manager for texture streaming + + + + + + + + + + + bool + bool is_managed_textures_streaming_active + () + is_managed_textures_streaming_active + +Checks whether texture streaming is inited and active. + + +true if texture streaming is active, false otherwise + + + + + + + + + bool + bool is_managed_textures_streaming_load_on_demand + () + is_managed_textures_streaming_load_on_demand + +Checks whether texture streaming loads textures only when used. + + +true if texture streaming is load-on-demand, false otherwise + + + + + + + + + bool + bool is_managed_texture_incomplete + (TEXTUREID id) + is_managed_texture_incomplete + + TEXTUREID + id + + +Checks whether the specified texture is split BQ/HQ with missing HQ part. + + + + +id + + +ID of the texture to check + + + +true if the texture is missing HQ part, false otherwise + + + + + + + + + void + void load_anisotropy_from_settings + () + load_anisotropy_from_settings + +Re-loads anisotropy config from settings. + + + + + + + + + void + void add_anisotropy_exception + (TEXTUREID id) + add_anisotropy_exception + + TEXTUREID + id + + +Marks that a texture's anisotropy should not be changed automatically. + + + + +id + + +ID of the texture to mark + + + + + + + + + + + void + void reset_anisotropy + (const char *tex_name_filter=nullptr) + reset_anisotropy + + const char * + tex_name_filter + nullptr + + +Resets anisotropy for all textures whose name contains tex_name_filter as a substring. + + + + +tex_name_filter + + +Substring filter to match texture names + + + + + + + + + + + bool + bool prefetch_and_check_managed_texture_loaded + (TEXTUREID id, bool fq_loaded=false) + prefetch_and_check_managed_texture_loaded + + TEXTUREID + id + + + bool + fq_loaded + false + + +Attempts to load the texture for usage on the current frame and simply checks for immediate success. + + + + +id + + +ID of the texture to load and check + + + + +fq_loaded + + +true to check for full quality, false for any quality + + + +true if the texture is loaded, false otherwise + + + + + + + + + bool + bool prefetch_and_check_managed_textures_loaded + (dag::ConstSpan< TEXTUREID > tex_list, bool fq_loaded=false) + prefetch_and_check_managed_textures_loaded + + dag::ConstSpan< TEXTUREID > + tex_list + + + bool + fq_loaded + false + + +Attempts to load multiple textures for usage on the current frame and check for immediate success. + + + + +tex_list + + +List of texture IDs to load and check + + + + +fq_loaded + + +true to check for full quality, false for any quality + + + +true if all textures are loaded, false otherwise + + + + + + + + + void + void prefetch_and_wait_managed_textures_loaded + (dag::ConstSpan< TEXTUREID > tex_list, bool fq_loaded=false) + prefetch_and_wait_managed_textures_loaded + + dag::ConstSpan< TEXTUREID > + tex_list + + + bool + fq_loaded + false + + +Synchronously loads a list of textures, blocking the current thread until all textures are loaded. + + + + +tex_list + + +List of texture IDs to load + + + + +fq_loaded + + +true to wait for full quality, false for any quality + + + + + + + + + + + TEXTUREID + TEXTUREID iterate_all_managed_textures + (TEXTUREID after_tid, int min_ref_count) + iterate_all_managed_textures + + TEXTUREID + after_tid + + + int + min_ref_count + + +Utility for iterating all managed textures. + + +Managed textures form a linked list, so for an arbitrary ID, this function returns the "next" ID in the list. Hence one is supposed to call this function in a loop until it returns BAD_TEXTUREID. + +after_tid + + +ID of the texture to get the next texture for. Use BAD_TEXTUREID to start iteration. + + + + +min_ref_count + + +Minimum reference count filter + + + +Some ID that follows after_tid and has refCount >= min_ref_count OR BAD_TEXTUREID if the iteration is done. + + + + + + + + + TEXTUREID + TEXTUREID get_max_managed_texture_id + () + get_max_managed_texture_id + +Access to the highest valid texture ID for storing properties of managed textures in arrays. + + +Highest valid texture ID + + + + + + + + + bool + bool is_managed_texture_id_valid + (TEXTUREID tid, bool validate_value) + is_managed_texture_id_valid + + TEXTUREID + tid + + + bool + validate_value + + +returns true when tid resembles texture ID and (optionally checked) contains valid value (non-BAD and has proper generation) + + + + + + + + + TextureMetaData + TextureMetaData get_texture_meta_data + (TEXTUREID id) + get_texture_meta_data + + TEXTUREID + id + + +Get texture meta data. + + + + +id + + +ID of the texture to get the meta data for + + + + + + + + + + + d3d::SamplerInfo + d3d::SamplerInfo get_sampler_info + (const TextureMetaData &texture_meta_data, bool force_addr_from_tmd=true) + get_sampler_info + + const TextureMetaData & + texture_meta_data + + + bool + force_addr_from_tmd + true + + +Get a sampler info structure from texture meta data. + + + + + + + + + d3d::SamplerHandle + d3d::SamplerHandle get_texture_separate_sampler + (TEXTUREID id) + get_texture_separate_sampler + + TEXTUREID + id + + +Returns separate sampler for the texture ID. + + + + +id + + +ID of the texture to get the sampler for + + + +Sampler handle for the texture. If no separate sampler is set, returns invalid handle + +Returned sampler must not be destroyed + +The function is not thread-safe, and the caller must ensure that there are no concurrent setters for this texture ID + + + + + + + + + bool + bool set_texture_separate_sampler + (TEXTUREID id, const d3d::SamplerInfo &sampler_info) + set_texture_separate_sampler + + TEXTUREID + id + + + const d3d::SamplerInfo & + sampler_info + + +Sets separate sampler for the texture ID. + + + + +id + + +ID of the texture to set the sampler for + + + + +sampler_info + + +Sampler info for sampler to set + + + +true if the sampler was set successfully, false otherwise + +Calling a function for the same texture ID is not thread-safe + +Calling a function for different texture IDs is thread-safe + + + + + + + + + void + void set_add_lod_bias_batch + (dag::Span< const LODBiasRule > rules) + set_add_lod_bias_batch + + dag::Span< const LODBiasRule > + rules + + +Sets the LOD bias for a batch of substring-bias pairs. + + + + +rules + + +A span of LODBiasRule objects containing substring and LOD bias pairs. + + + + + + + + + + + + + + + +// +//DagorEngine6.5 +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_texMetaData.h> +#include<drv/3d/dag_samplerHandle.h> +#include<drv/3d/dag_sampler.h> +#include<3d/dag_resMgr.h> +#include<generic/dag_tabFwd.h> + +D3DRESIDregister_managed_tex(constchar*name,BaseTexture*res); + + +staticinlineboolis_managed_tex_factory_set(D3DRESIDid){returnis_managed_res_factory_set(id);} +staticinlineconstchar*get_managed_texture_name(D3DRESIDid){returnget_managed_res_name(id);} +staticinlineD3DRESIDget_managed_texture_id(constchar*res_name){returnget_managed_res_id(res_name);} +staticinlineintget_managed_texture_refcount(D3DRESIDid){returnget_managed_res_refcount(id);} +staticinlinevoidenable_tex_mgr_mt(boolenable,intmax_res_entry_count){enable_res_mgr_mt(enable,max_res_entry_count);} + +classTextureFactory +{ +public: +TextureFactory()=default; +TextureFactory(TextureFactory&&)=default; +TextureFactory&operator=(TextureFactory&&)=default; +virtual~TextureFactory(){} + +virtualBaseTexture*createTexture(TEXTUREIDid)=0; + +virtualvoidreleaseTexture(BaseTexture*texture,TEXTUREIDid)=0; + +virtualvoidtexFactoryActiveChanged(bool/*active*/){} + +virtualboolscheduleTexLoading(TEXTUREID/*id*/,TexQL/*req_ql*/){returnfalse;} + +virtualboolgetTextureDDSx(TEXTUREID/*id*/,Tab<char>&/*out_ddsx*/){returnfalse;} + +virtualvoidonUnregisterTexture(TEXTUREID/*id*/){} + +virtualboolisPersistentTexName(constchar*/*nm*/){returnfalse;} + +staticvoidonTexFactoryDeleted(TextureFactory*f); +}; + +TEXTUREIDadd_managed_texture(constchar*name,TextureFactory*factory=nullptr); + +TEXTUREIDadd_managed_array_texture(constchar*name,dag::ConstSpan<constchar*>tex_slice_nm); + +TEXTUREIDupdate_managed_array_texture(constchar*name,dag::ConstSpan<constchar*>tex_slice_nm); + +unsignedreload_managed_array_textures_for_changed_slice(constchar*slice_tex_name); + +boolevict_managed_tex_id(TEXTUREID&id); + +boolcheck_managed_texture_loaded(TEXTUREIDid,boolfq_loaded=false); + +boolcheck_all_managed_textures_loaded(dag::ConstSpan<TEXTUREID>id,boolfq_loaded=false,boolignore_unref_tex=true); + +boolchange_managed_texture(TEXTUREIDid,BaseTexture*new_texture,TextureFactory*factory=NULL); + +voiddiscard_unused_managed_texture(TEXTUREIDid); + +voiddiscard_unused_managed_textures(); + +inlinevoidmark_managed_tex_lfu(TEXTUREIDid,unsignedreq_lev=15){D3dResManagerData::markResLFU(id,req_lev);} + +boolprefetch_managed_texture(TEXTUREIDid); + +boolprefetch_managed_textures(dag::ConstSpan<TEXTUREID>id); + +boolprefetch_managed_textures_by_textag(inttextag); + +voidmark_managed_textures_important(dag::ConstSpan<TEXTUREID>id,unsignedadd_importance=1,intmin_lev_for_dyn_decrease=16); + +voidreset_managed_textures_streaming_state(); + +voidset_default_tex_factory(TextureFactory*tf); +TextureFactory*get_default_tex_factory(); + +TextureFactory*get_symbolic_tex_factory(); + +TextureFactory*get_stub_tex_factory(); + + +voidinit_managed_textures_streaming_support(intreload_jobmgr_id=-2); + +boolis_managed_textures_streaming_active(); +boolis_managed_textures_streaming_load_on_demand(); + +boolis_managed_texture_incomplete(TEXTUREIDid); + +voidload_anisotropy_from_settings(); + +voidadd_anisotropy_exception(TEXTUREIDid); + +voidreset_anisotropy(constchar*tex_name_filter=nullptr); + +inlineboolprefetch_and_check_managed_texture_loaded(TEXTUREIDid,boolfq_loaded=false) +{ +if(check_managed_texture_loaded(id,fq_loaded)) +returntrue; +boolloaded=is_managed_textures_streaming_load_on_demand()?prefetch_managed_texture(id):false; +mark_managed_tex_lfu(id); +return(loaded&&fq_loaded)?check_managed_texture_loaded(id,fq_loaded):loaded; +} + +boolprefetch_and_check_managed_textures_loaded(dag::ConstSpan<TEXTUREID>tex_list,boolfq_loaded=false); + +voidprefetch_and_wait_managed_textures_loaded(dag::ConstSpan<TEXTUREID>tex_list,boolfq_loaded=false); + +TEXTUREIDiterate_all_managed_textures(TEXTUREIDafter_tid,intmin_ref_count); + + +inlineTEXTUREIDfirst_managed_texture(intmin_rc=0){returniterate_all_managed_textures(BAD_TEXTUREID,min_rc);} + +inlineTEXTUREIDnext_managed_texture(TEXTUREIDprev_id,intmin_rc=0){returniterate_all_managed_textures(prev_id,min_rc);} + +TEXTUREIDget_max_managed_texture_id(); + +inlineboolis_managed_texture_id_valid(TEXTUREIDtid,boolvalidate_value) +{ +if(!tid.checkMarkerBit()) +returnfalse; +returnvalidate_value?D3dResManagerData::isValidID(tid,nullptr):true; +} + +externintdgs_tex_quality; + +externintdgs_tex_anisotropy; + +TextureMetaDataget_texture_meta_data(TEXTUREIDid); + +d3d::SamplerInfoget_sampler_info(constTextureMetaData&texture_meta_data,boolforce_addr_from_tmd=true); + +d3d::SamplerHandleget_texture_separate_sampler(TEXTUREIDid); + +boolset_texture_separate_sampler(TEXTUREIDid,constd3d::SamplerInfo&sampler_info); + +structLODBiasRule +{ +constchar*substring; +floatbias; +}; + +voidset_add_lod_bias_batch(dag::Span<constLODBiasRule>rules); + + +
+
diff --git a/breathe/doxygen/d3dHelpers/xml/dir_60c44b399b02e309c83119e434d4c2e5.xml b/breathe/doxygen/d3dHelpers/xml/dir_60c44b399b02e309c83119e434d4c2e5.xml new file mode 100644 index 000000000..7e8ab7686 --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/dir_60c44b399b02e309c83119e434d4c2e5.xml @@ -0,0 +1,12 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/3d + + + + + + + diff --git a/breathe/doxygen/d3dHelpers/xml/dir_be82534ec70bcb66d04676bfee0c9e07.xml b/breathe/doxygen/d3dHelpers/xml/dir_be82534ec70bcb66d04676bfee0c9e07.xml new file mode 100644 index 000000000..74779e741 --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/dir_be82534ec70bcb66d04676bfee0c9e07.xml @@ -0,0 +1,14 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/3d + dag_multidrawContext.h + dag_resMgr.h + dag_texMgr.h + + + + + + + diff --git a/breathe/doxygen/d3dHelpers/xml/dir_dfe6bed94bcf04987b38a6f8493ab81c.xml b/breathe/doxygen/d3dHelpers/xml/dir_dfe6bed94bcf04987b38a6f8493ab81c.xml new file mode 100644 index 000000000..5c2dc9dd2 --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/dir_dfe6bed94bcf04987b38a6f8493ab81c.xml @@ -0,0 +1,12 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude + + + + + + + diff --git a/breathe/doxygen/d3dHelpers/xml/index.xml b/breathe/doxygen/d3dHelpers/xml/index.xml new file mode 100644 index 000000000..df5770a8b --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/index.xml @@ -0,0 +1,141 @@ + + + LODBiasRule + substring + bias + + MultidrawContext + name + multidrawArguments + perDrawArgsBuffer + allocatedDrawcallsInBuffer + actualStart + getPerDrawArgsBufferName + needPerDrawParamsBuffer + MultidrawContext + MultidrawContext + operator= + MultidrawContext + operator= + fillBuffers + close + + MultidrawContext::MultidrawRenderExecutor + MultidrawContext + context + MultidrawRenderExecutor + MultidrawRenderExecutor + operator= + MultidrawRenderExecutor + operator= + MultidrawRenderExecutor + render + + TextureFactory + TextureFactory + TextureFactory + operator= + ~TextureFactory + createTexture + releaseTexture + texFactoryActiveChanged + scheduleTexLoading + getTextureDDSx + onUnregisterTexture + isPersistentTexName + onTexFactoryDeleted + + dag_multidrawContext.h + USE_STAGING_MULTIDRAW_BUF + + dag_resMgr.h + first_managed_d3dres + next_managed_d3dres + TexQL + TQL_stub + TQL_thumb + TQL_base + TQL_high + TQL_uhq + TQL__COUNT + TQL__FIRST + TQL__LAST + register_managed_res + is_managed_res_factory_set + acquire_managed_res + release_managed_res + release_managed_res_verified + acquire_managed_tex + release_managed_tex + release_managed_tex_verified + acquire_managed_buf + release_managed_buf + release_managed_buf_verified + get_managed_res_name + get_managed_res_id + get_managed_res_refcount + get_managed_res_lfu + get_managed_res_cur_tql + get_managed_res_max_tql + get_managed_res_maxreq_lev + get_managed_res_loaded_lev + enable_res_mgr_mt + iterate_all_managed_d3dres + + dag_texMgr.h + first_managed_texture + next_managed_texture + dgs_tex_quality + dgs_tex_anisotropy + register_managed_tex + is_managed_tex_factory_set + get_managed_texture_name + get_managed_texture_id + get_managed_texture_refcount + enable_tex_mgr_mt + add_managed_texture + add_managed_array_texture + update_managed_array_texture + reload_managed_array_textures_for_changed_slice + evict_managed_tex_id + check_managed_texture_loaded + check_all_managed_textures_loaded + change_managed_texture + discard_unused_managed_texture + discard_unused_managed_textures + mark_managed_tex_lfu + prefetch_managed_texture + prefetch_managed_textures + prefetch_managed_textures_by_textag + mark_managed_textures_important + reset_managed_textures_streaming_state + set_default_tex_factory + get_default_tex_factory + get_symbolic_tex_factory + get_stub_tex_factory + init_managed_textures_streaming_support + is_managed_textures_streaming_active + is_managed_textures_streaming_load_on_demand + is_managed_texture_incomplete + load_anisotropy_from_settings + add_anisotropy_exception + reset_anisotropy + prefetch_and_check_managed_texture_loaded + prefetch_and_check_managed_textures_loaded + prefetch_and_wait_managed_textures_loaded + iterate_all_managed_textures + get_max_managed_texture_id + is_managed_texture_id_valid + get_texture_meta_data + get_sampler_info + get_texture_separate_sampler + set_texture_separate_sampler + set_add_lod_bias_batch + + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude/3d + + /home/runner/work/DagorEngine/DagorEngine/prog/dagorInclude + + /home/runner/work/DagorEngine/DagorEngine/prog + + diff --git a/breathe/doxygen/d3dHelpers/xml/index.xsd b/breathe/doxygen/d3dHelpers/xml/index.xsd new file mode 100644 index 000000000..edb1d347d --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/index.xsd @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/d3dHelpers/xml/struct_l_o_d_bias_rule.xml b/breathe/doxygen/d3dHelpers/xml/struct_l_o_d_bias_rule.xml new file mode 100644 index 000000000..98f8e5b3a --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/struct_l_o_d_bias_rule.xml @@ -0,0 +1,43 @@ + + + + LODBiasRule + + + const char * + const char* LODBiasRule::substring + + substring + + + + + + + + + + float + float LODBiasRule::bias + + bias + + + + + + + + + + + + + + + + LODBiasRulebias + LODBiasRulesubstring + + + diff --git a/breathe/doxygen/d3dHelpers/xml/xml.xsd b/breathe/doxygen/d3dHelpers/xml/xml.xsd new file mode 100644 index 000000000..9f80fe158 --- /dev/null +++ b/breathe/doxygen/d3dHelpers/xml/xml.xsd @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/daBFG.cfg b/breathe/doxygen/daBFG.cfg new file mode 100644 index 000000000..34cec337d --- /dev/null +++ b/breathe/doxygen/daBFG.cfg @@ -0,0 +1,96 @@ +PROJECT_NAME = "daBFG" +OUTPUT_DIRECTORY = daBFG +GENERATE_LATEX = NO +GENERATE_MAN = NO +GENERATE_RTF = NO +CASE_SENSE_NAMES = NO +INPUT = /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/virtualResourceHandle.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/sideEffects.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/stateRequest.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/resourceCreation.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/registry.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/externalState.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/stage.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/multiplexing.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/bfg.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/history.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/virtualResourceRequest.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/externalResources.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/usage.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/virtualResourceCreationSemiRequest.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/autoResolutionRequest.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/nameSpaceRequest.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/variableRateShading.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/virtualPassRequest.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/virtualResourceSemiRequest.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/priority.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/nameSpace.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/nodeHandle.h +ENABLE_PREPROCESSING = YES +QUIET = YES +JAVADOC_AUTOBRIEF = YES +JAVADOC_AUTOBRIEF = NO +GENERATE_HTML = NO +GENERATE_XML = YES +ALIASES = rst="\verbatim embed:rst" +ALIASES += endrst="\endverbatim" +ALIASES += inlinerst="\verbatim embed:rst:inline" +ENABLE_PREPROCESSING=YES +MACRO_EXPANSION=YES +PREDEFINED=DOXYGEN declare_new(x)= __restrict= __forceinline= +ALIASES += constcap{1}="\copybrief \1 \ref \1" +ALIASES += basecap{1}="\details \copybrief \1 \see \1" +ALIASES += runtimecap{2}="Runtime defined on \2. \ref \1" +ALIASES += microsoft="Microsoft" +ALIASES += win32="Windows" +ALIASES += windows="\win32" +ALIASES += xbone="Xbox One" +ALIASES += xboxone="\xbone" +ALIASES += scarlett="Xbox Series X / S" +ALIASES += xbox="\xbone and \scarlett" +ALIASES += sony="Sony" +ALIASES += ps4="PlayStation 4" +ALIASES += ps5="PlayStation 5" +ALIASES += ps="\ps4 and \ps5" +ALIASES += nintendo="Nintendo" +ALIASES += nswitch="\nintendo Switch" +ALIASES += apple="Apple" +ALIASES += ios="iOS" +ALIASES += mac="macOS" +ALIASES += tvos="tvOS" +ALIASES += google="Google" +ALIASES += android="Android" +ALIASES += linux="Linux" +ALIASES += nvidia="Nvidia" +ALIASES += AMD="AMD" +ALIASES += amd="\AMD" +ALIASES += ATI="AMD / ATI" +ALIASES += ati="\ATI" +ALIASES += intel="Intel" +ALIASES += ARM="ARM" +ALIASES += arm="\ARM" +ALIASES += mali="\arm Mali" +ALIASES += imgtec="imgTec" +ALIASES += powervrr="\imgtec Power VR Rogue" +ALIASES += qcomm="Qualcomm" +ALIASES += adreno="\qcomm Adreno" +ALIASES += mesa="Mesa 3D" +ALIASES += dx11="DirectX 11" +ALIASES += dx12="DirectX 12" +ALIASES += khronos="Khronos" +ALIASES += vk="Vulkan" +ALIASES += metal="Metal" +ALIASES += llvmpipe="\mesa LLVM pipe" +ALIASES += capbrief="\brief Indicates that the device driver" +ALIASES += briefconstcap{2}="\brief Constant \1\basecap{\2}" +ALIASES += NYI="\remarks This feature can be supported, but is not yet implemented." +ALIASES += someNYI="\remarks Some drivers without support could support this feature, but do not implement it yet." +ALIASES += constissue{1}="\copybrief \1 \ref \1" +ALIASES += baseissue{1}="\details \copybrief \1 \see \1" +ALIASES += briefconstissue{3}="\brief Is constant \1 on \2 \baseissue{\3}" +ALIASES += runtimeissue{2}="Runtime defined on \2. \ref \1" +ALIASES += caprefc{3}="\ref \3::\2 \"\1\"" +ALIASES += caprefa{3}="\ref \3::\2 \"\1\"" +ALIASES += caprefr{3}="\ref \3 \"\1\"" +ALIASES += caprefc{4}="\ref \3::\2 \"\1\"" +ALIASES += caprefa{4}="\ref \4::\2 \"\1\"" +ALIASES += caprefr{4}="\ref \3 \"\1\"" +ALIASES += capvaluec{2}="\copybrief \2::\1" +ALIASES += capvaluea{2}="\copybrief \2::\1" +ALIASES += capvaluer{2}="Runtime determined." +ALIASES += capvaluec{3}="\copybrief \2::\1" +ALIASES += capvaluea{3}="\copybrief \3::\1" +ALIASES += capvaluer{3}="Runtime determined." +ALIASES += platformtable{12}="\note ^^\ +
PlatformValue^^\ +
\capref\2{\xbone,\1,DeviceDriverCapabilitiesXboxOne} \capvalue\2{\1,DeviceDriverCapabilitiesXboxOne} ^^\ +
\capref\3{\scarlett,\1,DeviceDriverCapabilitiesScarlett,DeviceDriverCapabilitiesXboxOne} \capvalue\3{\1,DeviceDriverCapabilitiesScarlett,DeviceDriverCapabilitiesXboxOne} ^^\ +
\capref\4{\ps4,\1,DeviceDriverCapabilitiesPS4} \capvalue\4{\1,DeviceDriverCapabilitiesPS4} ^^\ +
\capref\5{\ps5,\1,DeviceDriverCapabilitiesPS5,DeviceDriverCapabilitiesPS4} \capvalue\5{\1,DeviceDriverCapabilitiesPS5,DeviceDriverCapabilitiesPS4} ^^\ +
\capref\6{\ios,\1,DeviceDriverCapabilitiesIOS} \capvalue\6{\1,DeviceDriverCapabilitiesIOS} ^^\ +
\capref\7{\tvos,\1,DeviceDriverCapabilitiesTVOS} \capvalue\7{\1,DeviceDriverCapabilitiesTVOS} ^^\ +
\capref\8{\nswitch,\1,DeviceDriverCapabilitiesNintendoSwitch} \capvalue\8{\1,DeviceDriverCapabilitiesNintendoSwitch} ^^\ +
\capref\9{\android,\1,DeviceDriverCapabilitiesAndroid} \capvalue\9{\1,DeviceDriverCapabilitiesAndroid} ^^\ +
\capref\10{\mac,\1,DeviceDriverCapabilitiesMacOSX} \capvalue\10{\1,DeviceDriverCapabilitiesMacOSX} ^^\ +
\capref\11{\linux,\1,DeviceDriverCapabilitiesLinux} \capvalue\11{\1,DeviceDriverCapabilitiesLinux} ^^\ +
\capref\12{\win32,\1,DeviceDriverCapabilitiesWindows} \capvalue\12{\1,DeviceDriverCapabilitiesWindows} ^^\ +
" \ No newline at end of file diff --git a/breathe/doxygen/daBFG/xml/auto_resolution_request_8h.xml b/breathe/doxygen/daBFG/xml/auto_resolution_request_8h.xml new file mode 100644 index 000000000..168249b62 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/auto_resolution_request_8h.xml @@ -0,0 +1,105 @@ + + + + autoResolutionRequest.h + render/daBfg/detail/autoResTypeNameId.h + math/integer/dag_IPoint2.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/resourceCreation.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::detail::IPointImpl< 2 > + dabfg::detail::IPointImpl< 3 > + dabfg::AutoResolutionRequest + dabfg + dabfg::detail + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<render/daBfg/detail/autoResTypeNameId.h> + +#include<math/integer/dag_IPoint2.h> + + +namespacedabfg +{ + +structResourceProvider; +namespacedetail +{ +structVirtualResourceRequestBase; + +template<intD> +structIPointImpl; +template<> +structIPointImpl<2> +{ +usingValue=IPoint2; +}; +template<> +structIPointImpl<3> +{ +usingValue=IPoint3; +}; + +}//namespacedetail + +template<intD> +usingIPoint=typenamedetail::IPointImpl<D>::Value; + +template<intD> +classAutoResolutionRequest +{ +friendclassNameSpaceRequest; +friendstructdetail::VirtualResourceRequestBase; + +AutoResolutionRequest(AutoResTypeNameIdid,floatmult,constResourceProvider*p):autoResTypeId{id},multiplier{mult},provider{p} +{} + +public: +IPoint<D>get()const; + +private: +AutoResTypeNameIdautoResTypeId; +floatmultiplier=1.f; +constResourceProvider*provider; +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/bfg_8h.xml b/breathe/doxygen/daBFG/xml/bfg_8h.xml new file mode 100644 index 000000000..e56243244 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/bfg_8h.xml @@ -0,0 +1,361 @@ + + + + bfg.h + EASTL/span.h + EASTL/string_view.h + render/daBfg/nameSpace.h + render/daBfg/nodeHandle.h + render/daBfg/registry.h + render/daBfg/multiplexing.h + render/daBfg/externalState.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<EASTL/span.h> +#include<EASTL/string_view.h> +#include<render/daBfg/nameSpace.h> +#include<render/daBfg/nodeHandle.h> +#include<render/daBfg/registry.h> +#include<render/daBfg/multiplexing.h> +#include<render/daBfg/externalState.h> + + +namespacedabfg +{ + + +NameSpaceroot(); + +voidset_multiplexing_extents(multiplexing::Extentsextents); + +boolrun_nodes(); + +voidstartup(); + +voidshutdown(); + +voidinvalidate_history(); + +voidupdate_external_state(ExternalStatestate); + +voidmark_external_resource_for_validation(constD3dResource*resource); + + +template<classF> +[[nodiscard]]NodeHandleregister_node(constchar*name,constchar*source_location,F&&declaration_callback) +{ +returnroot().registerNode(name,source_location,eastl::forward<F>(declaration_callback)); +} + +template<classT> +inlinevoidset_resolution(constchar*typeName,Tvalue) +{ +dabfg::root().setResolution(typeName,value); +} + +template<classT> +inlinevoidset_dynamic_resolution(constchar*typeName,Tvalue) +{ +dabfg::root().setDynamicResolution(typeName,value); +} + +inlinevoidfill_slot(NamedSlotslot,constchar*res_name){dabfg::root().fillSlot(slot,dabfg::root(),res_name);} + +inlinevoidupdate_externally_consumed_resource_set(eastl::span<constchar*const>res_names) +{ +dabfg::root().updateExternallyConsumedResourceSet(res_names); +} + +inlinevoidupdate_externally_consumed_resource_set(std::initializer_list<constchar*>res_names) +{ +dabfg::root().updateExternallyConsumedResourceSet(res_names); +} + +inlinevoidmark_resource_externally_consumed(constchar*res_name){dabfg::root().markResourceExternallyConsumed(res_name);} + +inlinevoidunmark_resource_externally_consumed(constchar*res_name){dabfg::root().unmarkResourceExternallyConsumed(res_name);} + + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/classdabfg_1_1_auto_resolution_request.xml b/breathe/doxygen/daBFG/xml/classdabfg_1_1_auto_resolution_request.xml new file mode 100644 index 000000000..6c570404c --- /dev/null +++ b/breathe/doxygen/daBFG/xml/classdabfg_1_1_auto_resolution_request.xml @@ -0,0 +1,163 @@ + + + + dabfg::AutoResolutionRequest + autoResolutionRequest.h + + + int + D + D + + + + + class + friend class NameSpaceRequest + + NameSpaceRequest + + NameSpaceRequest + + + + + + + + + + + struct + friend struct detail::VirtualResourceRequestBase + + detail::VirtualResourceRequestBase + + detail::VirtualResourceRequestBase + + + + + + + + + + + + + AutoResTypeNameId + AutoResTypeNameId dabfg::AutoResolutionRequest< D >::autoResTypeId + + autoResTypeId + + + + + + + + + + float + float dabfg::AutoResolutionRequest< D >::multiplier + + multiplier + = 1.f + + + + + + + + + + const ResourceProvider * + const ResourceProvider* dabfg::AutoResolutionRequest< D >::provider + + provider + + + + + + + + + + + + + dabfg::AutoResolutionRequest< D >::AutoResolutionRequest + (AutoResTypeNameId id, float mult, const ResourceProvider *p) + AutoResolutionRequest + + AutoResTypeNameId + id + + + float + mult + + + const ResourceProvider * + p + + + + + + + + + + + + + IPoint< D > + IPoint<D> dabfg::AutoResolutionRequest< D >::get + () const + get + +Returns the current dynamic resolution for this auto-res type. + + +Should only be used for setting the d3d viewport/scissor, NEVER create textures with this resolution, as it might be changing every single frame!!! Also never call this outside of the execution callback for the same reason! + +The current dynamic resolution for this type. + + + + + + + + + +This class represents a daBfg-managed automatic resolution type for a texture. If this resolution is specified for a texture, the actual texture's resolution at runtime will be the dynamic resolution scaled by the multiplier, but the consumed memory will always be equal to the static resolution times the multiplier. See NameSpace::setResolution and NameSpace::setDynamicResolution. Note that objects of this type MAY be captured into the execution callback and used to access the actual resolution on a particular frame, but the resolution should NEVER be accessed in the declaration callback, as the value will be undefined. + + + + +D + + + dimensionality of the resolution, either 2 or 3. + + + + + + + + dabfg::AutoResolutionRequestAutoResolutionRequest + dabfg::AutoResolutionRequestautoResTypeId + dabfg::AutoResolutionRequestdetail::VirtualResourceRequestBase + dabfg::AutoResolutionRequestget + dabfg::AutoResolutionRequestmultiplier + dabfg::AutoResolutionRequestNameSpaceRequest + dabfg::AutoResolutionRequestprovider + + + diff --git a/breathe/doxygen/daBFG/xml/classdabfg_1_1_name_space.xml b/breathe/doxygen/daBFG/xml/classdabfg_1_1_name_space.xml new file mode 100644 index 000000000..60eeb233d --- /dev/null +++ b/breathe/doxygen/daBFG/xml/classdabfg_1_1_name_space.xml @@ -0,0 +1,558 @@ + + + + dabfg::NameSpace + nameSpace.h + + + struct + friend struct eastl::hash< NameSpace > + + eastl::hash< NameSpace > + + eastl::hash< NameSpace > + + + + + + + + + + + NameSpace + NameSpace root + () + root + +Creates a namespace object for the root frame graph namespace. + + +The object representing the root namespace. + + + + + + + + + bool + bool operator== + (const NameSpace &fst, const NameSpace &snd) + operator== + + const NameSpace & + fst + + + const NameSpace & + snd + + + + + + + + + + + bool + bool operator< + (const NameSpace &fst, const NameSpace &snd) + operator< + + const NameSpace & + fst + + + const NameSpace & + snd + + + + + + + + + + + + + NameSpaceNameId + NameSpaceNameId dabfg::NameSpace::nameId + + nameId + + + + + + + + + + + + + dabfg::NameSpace::NameSpace + () + NameSpace + + + + + + + + + + + dabfg::NameSpace::NameSpace + (NameSpaceNameId nid) + NameSpace + + NameSpaceNameId + nid + + + + + + + + + + + auto + auto dabfg::NameSpace::resolveName + (const char *name) const + resolveName + + const char * + name + + + + + + + + + + + + + NameSpace + NameSpace dabfg::NameSpace::operator/ + (const char *child_name) const + operator/ + + const char * + child_name + + +Creates a namespace object for a sub-namespace of this one. + + + + +child_name + + +Name of the sub-namespace. + + + +An object representing the child namespace. + + + + + + + + + + + class F + + + NodeHandle + NodeHandle dabfg::NameSpace::registerNode + (const char *name, const char *source_location, F &&declaration_callback) const + registerNode + + const char * + name + + + const char * + source_location + + + F && + declaration_callback + + +Either registers a new node inside the frame graph, or re-registers an already existing one. + + + + +name + + +The name that uniquely identifies the node in the current name space. If the function is called twice with the same node name and name space, the second call will overwrite the node resulting from the previous one. + + + + +source_location + + +Should always be the DABFG_PP_NODE_SRC macro + + + + +declaration_callback + + +Should be a callback taking a Registry instance by value and returning an execution callback, which in turn may accept a dabfg::multiplexing::Index object (or may accept nothing). Basically, a function with signature Registry -> (Index -> ()). Note: the declaration and execution callbacks might be called an arbitrary number of times, but only while the resulting node is registered. + + + +A handle that represents the lifetime of the new node. The node will be unregistered when the handle is destroyed. Note that it is safe to call this function even without destroying all previous handles up to a couple hundred of times. The intended use case is doing classField = register_node(...) at arbitrary times, without passing these handles anywhere. + + + + + + + + + + + class T + + + void + void dabfg::NameSpace::setResolution + (const char *type_name, T value) + setResolution + + const char * + type_name + + + T + value + + +Updates an auto-resolution of a particular type. Note that this causes a complete resource rescheduling, invalidating all history. It also resets dynamic resolution. + + + + +T + + +point type, either IPoint2 or IPoint3. + + + + + +type_name + + +The name of the auto-res type, looked up in this namespace. + + + + +value + + +The new resolution value. + + + + + + + + + + + + + class T + + + void + void dabfg::NameSpace::setDynamicResolution + (const char *type_name, T value) + setDynamicResolution + + const char * + type_name + + + T + value + + +Updates an auto-resolution of a particular type without causing a resource rescheduling, hence preserving history. + + +This is only available on platforms that support heaps. + + + +P + + + point type, either IPoint2 or IPoint3. + + + + + +type_name + + +The name of the auto-res type, looked up in this namespace. + + + + +value + + +The new dynamic resolution value. Must be smaller than the initial resolution for this type. + + + + + + + + + + + void + void dabfg::NameSpace::fillSlot + (NamedSlot slot, NameSpace res_name_space, const char *res_name) + fillSlot + + NamedSlot + slot + + + NameSpace + res_name_space + + + const char * + res_name + + +Sets a value to a named slot. Named slots are basically links that allow for an indirection when looking up a resource name. As an example, volumetric fog is an intrusive feature that requires a bunch of different rendering nodes to read some kind of a downsampled depth resource for tracing the fog, but this depth might be different depending on the current settings. In this situation, it makes sense to introduce a fog_depth slot and fill it in with different resources, allowing one to avoid settings-dependent ifs in node declarations. + + + + +slot + + +Name of the slot, looked up in this namespace. + + + + +res_name_space + + +Name space to look up res_name in. + + + + +res_name + + +Name of the resource to fill this slot with, looked up in res_name_space. + + + + + + + + + + + void + void dabfg::NameSpace::updateExternallyConsumedResourceSet + (eastl::span< const char *const > res_names) + updateExternallyConsumedResourceSet + + eastl::span< const char *const > + res_names + + +Sets the set of resources which are considered to be somehow externally consumed and hence will never be optimized (pruned) out. + + + + +res_names + + +A list of resource names to assign, looked up in this namespace. + + + + + + + + + + + void + void dabfg::NameSpace::updateExternallyConsumedResourceSet + (std::initializer_list< const char * > res_names) + updateExternallyConsumedResourceSet + + std::initializer_list< const char * > + res_names + + +Sets the set of resources which are considered to be somehow externally consumed and hence will never be optimized (pruned) out. + + + + +res_names + + +A list of resource names to assign, looked up in this namespace. + + + + + + + + + + + void + void dabfg::NameSpace::markResourceExternallyConsumed + (const char *res_name) + markResourceExternallyConsumed + + const char * + res_name + + +Marks a single resource as being externally consumed. See dabfg::updateExternallyConsumedResourceSet(eastl::span<const char *const> res_names) + + + + +res_name + + +Name of the resource to mark, looked up in this namespace. + + + + + + + + + + + void + void dabfg::NameSpace::unmarkResourceExternallyConsumed + (const char *res_name) + unmarkResourceExternallyConsumed + + const char * + res_name + + +Unmarks a single resource as being externally consumed. See dabfg::updateExternallyConsumedResourceSet(eastl::span<const char *const> res_names) + + + + +res_name + + +Name of the resource to unmark, looked up in this namespace. + + + + + + + + + + + + + NameSpace + static NameSpace dabfg::NameSpace::_make_namespace + (dabfg::NameSpaceNameId nid) + _make_namespace + + dabfg::NameSpaceNameId + nid + + + + + + + + + + + +A type representing some namespace in the frame graph. + + + + + + dabfg::NameSpace_make_namespace + dabfg::NameSpaceeastl::hash< NameSpace > + dabfg::NameSpacefillSlot + dabfg::NameSpacemarkResourceExternallyConsumed + dabfg::NameSpacenameId + dabfg::NameSpaceNameSpace + dabfg::NameSpaceNameSpace + dabfg::NameSpaceoperator/ + dabfg::NameSpaceoperator< + dabfg::NameSpaceoperator== + dabfg::NameSpaceregisterNode + dabfg::NameSpaceresolveName + dabfg::NameSpaceroot + dabfg::NameSpacesetDynamicResolution + dabfg::NameSpacesetResolution + dabfg::NameSpaceunmarkResourceExternallyConsumed + dabfg::NameSpaceupdateExternallyConsumedResourceSet + dabfg::NameSpaceupdateExternallyConsumedResourceSet + + + diff --git a/breathe/doxygen/daBFG/xml/classdabfg_1_1_name_space_request.xml b/breathe/doxygen/daBFG/xml/classdabfg_1_1_name_space_request.xml new file mode 100644 index 000000000..8fd5ea8cd --- /dev/null +++ b/breathe/doxygen/daBFG/xml/classdabfg_1_1_name_space_request.xml @@ -0,0 +1,777 @@ + + + + dabfg::NameSpaceRequest + dabfg::Registry + nameSpaceRequest.h + +
Resource requesting methods
+ Every one of these returns a request object that must be used to specify further options for the request. See docs for the relevant request objects for details. All methods present here look up the resource in this namespace. + + + + + VirtualResourceSemiRequest< NewRoRequestPolicy > + VirtualResourceSemiRequest<NewRoRequestPolicy> dabfg::NameSpaceRequest::read + (const char *name) const + read + + const char * + name + + +Reads an existing resource at node execution time. Reads always happen after all modifications and before the renaming. + + + + +name + + +The name of the resource to read. + + + + + + + + + + + VirtualResourceSemiRequest< NewRoRequestPolicy > + VirtualResourceSemiRequest<NewRoRequestPolicy> dabfg::NameSpaceRequest::read + (NamedSlot slot_name) const + read + + NamedSlot + slot_name + + +Reads an existing resource at node execution time, but indirectly, through a "slot", which must be specified with dabfg::fill_slot. Reads always happen after all modifications and before the renaming. + + + + +slot_name + + +The name of the slot to be used for this read. + + + + + + + + + + + VirtualResourceSemiRequest< NewHistRequestPolicy > + VirtualResourceSemiRequest<NewHistRequestPolicy> dabfg::NameSpaceRequest::historyFor + (const char *name) const + historyFor + + const char * + name + + +Reads the history of an existing resource at node execution time. + + + + +name + + +The name of the resource the history of which to read. + + + + + + + + + + + VirtualResourceSemiRequest< NewRwRequestPolicy > + VirtualResourceSemiRequest<NewRwRequestPolicy> dabfg::NameSpaceRequest::modify + (const char *name) const + modify + + const char * + name + + +Modifies an existing resource at node execution time. Modifications always happen after creation and before all reads. + + + + +name + + +The name of the resource to modify. + + + + + + + + + + + VirtualResourceSemiRequest< NewRwRequestPolicy > + VirtualResourceSemiRequest<NewRwRequestPolicy> dabfg::NameSpaceRequest::modify + (NamedSlot slot_name) const + modify + + NamedSlot + slot_name + + +Modifies an existing resource at node execution time, but indirectly, through a "slot", which must be specified with dabfg::fill_slot. Modifications always happen after creation and before all reads. + + + + +slot_name + + +The name of the slot to be used for this modification. + + + + + + + + + + + VirtualResourceSemiRequest< NewRwRequestPolicy > + VirtualResourceSemiRequest<NewRwRequestPolicy> dabfg::NameSpaceRequest::rename + (const char *from, const char *to, History history) const + rename + + const char * + from + + + const char * + to + + + History + history + + +Modifies and renames an existing resource at node execution time. Renaming always happens last among all operations on a resource. The renamed version is considered to be a new virtual resource. + + +Parameters from and to are looked up in different namespaces when calling this function on an arbitrary NameSpaceRequest object! Current node's namespace is used for creating to, while from is looked up in the current request object's namespace! + + + +from + + +Old resource name. Note that this resource may not have history enabled, as renaming it "consumes" it on the current frame, so it is not possible to read it on the next one. It will be looked up relative to this namespace. + + + + +to + + +New resource name, created inside the current node's namespace! + + + + +history + + +Whether the new resource needs history enabled, see create for details about history. + + + + + + + + + +
+ +
Convenience aliases
+ + VirtualTextureRequest< NewRoRequestPolicy > + VirtualTextureRequest<NewRoRequestPolicy> dabfg::NameSpaceRequest::readTexture + (const char *name) const + readTexture + + const char * + name + + +Alias. See read functions for details. + + + + + + + + + VirtualTextureRequest< NewRoRequestPolicy > + VirtualTextureRequest<NewRoRequestPolicy> dabfg::NameSpaceRequest::readTexture + (NamedSlot slot_name) const + readTexture + + NamedSlot + slot_name + + +Alias. See read functions for details. + + + + + + + + + VirtualTextureRequest< NewHistRequestPolicy > + VirtualTextureRequest<NewHistRequestPolicy> dabfg::NameSpaceRequest::readTextureHistory + (const char *name) const + readTextureHistory + + const char * + name + + +Alias. See historyFor function for details. + + + + + + + + + VirtualTextureRequest< NewRwRequestPolicy > + VirtualTextureRequest<NewRwRequestPolicy> dabfg::NameSpaceRequest::modifyTexture + (const char *name) const + modifyTexture + + const char * + name + + +Alias. See modify function for details. + + + + + + + + + VirtualTextureRequest< NewRwRequestPolicy > + VirtualTextureRequest<NewRwRequestPolicy> dabfg::NameSpaceRequest::modifyTexture + (NamedSlot slot_name) const + modifyTexture + + NamedSlot + slot_name + + +Alias. See modify function for details. + + + + + + + + + VirtualTextureRequest< NewRwRequestPolicy > + VirtualTextureRequest<NewRwRequestPolicy> dabfg::NameSpaceRequest::renameTexture + (const char *from, const char *to, History history) const + renameTexture + + const char * + from + + + const char * + to + + + History + history + + +Alias. See rename function for details. + + + + + + + + + + + class T + + + VirtualBlobRequest< T, NewRoRequestPolicy > + VirtualBlobRequest<T, NewRoRequestPolicy> dabfg::NameSpaceRequest::readBlob + (const char *name) const + readBlob + + const char * + name + + +Alias. See read functions for details. + + + + + + + + + + + class T + + + VirtualBlobRequest< T, NewHistRequestPolicy > + VirtualBlobRequest<T, NewHistRequestPolicy> dabfg::NameSpaceRequest::readBlobHistory + (const char *name) const + readBlobHistory + + const char * + name + + +Alias. See historyFor function for details. + + + + + + + + + + + class T + + + VirtualBlobRequest< T, NewRwRequestPolicy > + VirtualBlobRequest<T, NewRwRequestPolicy> dabfg::NameSpaceRequest::modifyBlob + (const char *name) const + modifyBlob + + const char * + name + + +Alias. See modify function for details. + + + + + + + + + + + class T + + + VirtualBlobRequest< T, NewRwRequestPolicy > + VirtualBlobRequest<T, NewRwRequestPolicy> dabfg::NameSpaceRequest::renameBlob + (const char *from, const char *to, History history) const + renameBlob + + const char * + from + + + const char * + to + + + History + history + + +Alias. See rename function for details. + + + + + + + +
+ + + detail::ResourceRequestPolicy + using dabfg::NameSpaceRequest::RRP = detail::ResourceRequestPolicy + + RRP + + + + + + + + + + + + RRP + policy + policy + + + VirtualResourceRequest< BaseTexture, policy > + using dabfg::NameSpaceRequest::VirtualTextureRequest = VirtualResourceRequest<BaseTexture, policy> + + VirtualTextureRequest + + + + + + + + + + + + RRP + policy + policy + + + VirtualResourceRequest< Sbuffer, policy > + using dabfg::NameSpaceRequest::VirtualBufferRequest = VirtualResourceRequest<Sbuffer, policy> + + VirtualBufferRequest + + + + + + + + + + + + class T + + + RRP + policy + policy + + + VirtualResourceRequest< T, policy > + using dabfg::NameSpaceRequest::VirtualBlobRequest = VirtualResourceRequest<T, policy> + + VirtualBlobRequest + + + + + + + + + + + + class + friend class Registry + + Registry + + Registry + + + + + + + + + + + + + constexpr RRP + constexpr RRP dabfg::NameSpaceRequest::NewRwRequestPolicy + + NewRwRequestPolicy + = RRP::None + + + + + + + + + + constexpr RRP + constexpr RRP dabfg::NameSpaceRequest::NewRoRequestPolicy + + NewRoRequestPolicy + = RRP::Readonly + + + + + + + + + + constexpr RRP + constexpr RRP dabfg::NameSpaceRequest::NewHistRequestPolicy + + NewHistRequestPolicy + = RRP::Readonly | RRP::History + + + + + + + + + + + + NameSpaceNameId + NameSpaceNameId dabfg::NameSpaceRequest::nameSpaceId + + nameSpaceId + + + + + + + + + + NodeNameId + NodeNameId dabfg::NameSpaceRequest::nodeId + + nodeId + + + + + + + + + + InternalRegistry * + InternalRegistry* dabfg::NameSpaceRequest::registry + + registry + + + + + + + + + + + + + dabfg::NameSpaceRequest::NameSpaceRequest + (NameSpaceNameId ns, NodeNameId node, InternalRegistry *reg) + NameSpaceRequest + + NameSpaceNameId + ns + + + NodeNameId + node + + + InternalRegistry * + reg + + + + + + + + + + + + + NameSpaceRequest + NameSpaceRequest dabfg::NameSpaceRequest::operator/ + (const char *child_name) const + operator/ + + const char * + child_name + + +Creates a namespace object for a sub-namespace of this one. + + + + +child_name + + +Name of the sub-namespace. + + + +NameSpace Object representing the child namespace. + + + + + + + + + + + int + D + D + + + AutoResolutionRequest< D > + AutoResolutionRequest<D> dabfg::NameSpaceRequest::getResolution + (const char *type_name, float multiplier=1.f) const + getResolution + + const char * + type_name + + + float + multiplier + 1.f + + +Get a request object for the 2D resolution of a particular type inside of this namespace, which can then be used to create textures or be resolved into an actual number at execution time. The resulting resolution will be the product of what was set with NameSpace::setResolution with the multiplier. + + + + +D + + +Dimensionality of the resolution. + + + + + +type_name + + +Auto resolution type name. + + + + +multiplier + + +A multiplier for the resolution type. + + + +AutoResolutionRequest Object representing the auto resolution type. + + + + + + + + + +An object representing a name space within the node declaration callback. It can be used to request objects from the current namespace or its sub-namespaces. + + + + + + + + + + + + + + + + + + dabfg::NameSpaceRequestgetResolution + dabfg::NameSpaceRequesthistoryFor + dabfg::NameSpaceRequestmodify + dabfg::NameSpaceRequestmodify + dabfg::NameSpaceRequestmodifyBlob + dabfg::NameSpaceRequestmodifyTexture + dabfg::NameSpaceRequestmodifyTexture + dabfg::NameSpaceRequestnameSpaceId + dabfg::NameSpaceRequestNameSpaceRequest + dabfg::NameSpaceRequestNewHistRequestPolicy + dabfg::NameSpaceRequestNewRoRequestPolicy + dabfg::NameSpaceRequestNewRwRequestPolicy + dabfg::NameSpaceRequestnodeId + dabfg::NameSpaceRequestoperator/ + dabfg::NameSpaceRequestread + dabfg::NameSpaceRequestread + dabfg::NameSpaceRequestreadBlob + dabfg::NameSpaceRequestreadBlobHistory + dabfg::NameSpaceRequestreadTexture + dabfg::NameSpaceRequestreadTexture + dabfg::NameSpaceRequestreadTextureHistory + dabfg::NameSpaceRequestregistry + dabfg::NameSpaceRequestRegistry + dabfg::NameSpaceRequestrename + dabfg::NameSpaceRequestrenameBlob + dabfg::NameSpaceRequestrenameTexture + dabfg::NameSpaceRequestRRP + dabfg::NameSpaceRequestVirtualBlobRequest + dabfg::NameSpaceRequestVirtualBufferRequest + dabfg::NameSpaceRequestVirtualTextureRequest + +
+
diff --git a/breathe/doxygen/daBFG/xml/classdabfg_1_1_node_handle.xml b/breathe/doxygen/daBFG/xml/classdabfg_1_1_node_handle.xml new file mode 100644 index 000000000..c15f406fa --- /dev/null +++ b/breathe/doxygen/daBFG/xml/classdabfg_1_1_node_handle.xml @@ -0,0 +1,227 @@ + + + + dabfg::NodeHandle + nodeHandle.h + + + class + friend class NameSpace + + NameSpace + + NameSpace + + + + + + + + + + + NodeHandle + NodeHandle register_external_node + (NodeNameId name_id, uint16_t generation) + register_external_node + + NodeNameId + name_id + + + uint16_t + generation + + + + + + + + + + + + + detail::NodeUid + detail::NodeUid dabfg::NodeHandle::uid + + uid + {} + + + + + + + + + + + + + dabfg::NodeHandle::NodeHandle + (detail::NodeUid id) + NodeHandle + + detail::NodeUid + id + + + + + + + + + + + + + + dabfg::NodeHandle::NodeHandle + ()=default + NodeHandle + +Constructs an invalid handle. + + + + + + + + + + dabfg::NodeHandle::NodeHandle + (const NodeHandle &)=delete + NodeHandle + + const NodeHandle & + + + + + + + + + + + NodeHandle & + NodeHandle& dabfg::NodeHandle::operator= + (const NodeHandle &)=delete + operator= + + const NodeHandle & + + + + + + + + + + + + dabfg::NodeHandle::NodeHandle + (NodeHandle &&other) + NodeHandle + + NodeHandle && + other + + +Move constructor. + + + + + + + + + NodeHandle & + NodeHandle& dabfg::NodeHandle::operator= + (NodeHandle &&other) + operator= + + NodeHandle && + other + + +Move assignment operator. + + + + + + + + + + dabfg::NodeHandle::~NodeHandle + () + ~NodeHandle + + + + + + + + + + bool + bool dabfg::NodeHandle::valid + () const + valid + +Returns true if the handle is valid. + + + + + + + + + + dabfg::NodeHandle::operator bool + () const + operator bool + +Returns true if the handle is valid. + + + + + + + + + +Holds ownership over a node's lifetime. As soon as a handle to a node destroyed, the node is unregistered, but only if it was not re-registered since the time that this handle was acquired. + + +Note that this is a move-only type. + + + + dabfg::NodeHandleNameSpace + dabfg::NodeHandleNodeHandle + dabfg::NodeHandleNodeHandle + dabfg::NodeHandleNodeHandle + dabfg::NodeHandleNodeHandle + dabfg::NodeHandleoperator bool + dabfg::NodeHandleoperator= + dabfg::NodeHandleoperator= + dabfg::NodeHandleregister_external_node + dabfg::NodeHandleuid + dabfg::NodeHandlevalid + dabfg::NodeHandle~NodeHandle + + + diff --git a/breathe/doxygen/daBFG/xml/classdabfg_1_1_registry.xml b/breathe/doxygen/daBFG/xml/classdabfg_1_1_registry.xml new file mode 100644 index 000000000..eb23d8ba5 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/classdabfg_1_1_registry.xml @@ -0,0 +1,1158 @@ + + + + dabfg::Registry + dabfg::NameSpaceRequest + registry.h + +
Resource requesting methods
+ Every one of these returns a request object that must be used to specify further options for the request. See docs for the relevant request objects for details. All methods present here look up the resource in the current node's namespace, i.e. registry.currNameSpace(). + +We explicitly prohibit creating resources in any namespace but the current node's one. + + + + + VirtualResourceCreationSemiRequest + VirtualResourceCreationSemiRequest dabfg::Registry::create + (const char *name, History history) + create + + const char * + name + + + History + history + + + + +Creates a new resource at node execution time. The resource will be provided by FG before the node starts executing. + + +name + + +A unique name identifying this resource within the current node's namespace. + + + + +history + + +Specifies the way in which history should be handled for this texture. A history for a virtual resource is a physical resource that contains the data this virtual resource had at the end of the previous frame. See dabfg::History for details. + + + + + + + + + + + + + class F + + + VirtualTextureRequest< NewRwRequestPolicy > + VirtualTextureRequest<NewRwRequestPolicy> dabfg::Registry::registerTexture2d + (const char *name, F &&texture_provider_callback) + registerTexture2d + + const char * + name + + + F && + texture_provider_callback + + +Creates a new texture at node execution time, which will not be FG-provided, but acquired from the callback before the node starts executing and stored somewhere outside. Note that history is not supported for external resources. + + + + +name + + +A unique name identifying this resource within the current node's namespace. + + + + +texture_provider_callback + + +A callback that maps a multiplexing index to a ManagedTexView. It might be called an arbitrary number of times, but only while the current node is registered. + + + + + + + + + + + VirtualTextureRequest< NewRwRequestPolicy > + VirtualTextureRequest<NewRwRequestPolicy> dabfg::Registry::registerBackBuffer + (const char *name) + registerBackBuffer + + const char * + name + + +Marks this node as the back buffer provider and creates a virtual dabfg resource that corresponds to it. + + +The back buffer is not a real resource in dagor, but rather a special value that will be replaced with the actual swapchain image when it's acquired on the driver thread. This makes the back buffer a special case everywhere, it is not possible to read from it, nor is it possible to UAV-write to it. In daBfg, we only to render to it, and only with a single attachment at that, so no MRT and no depth-stencil even. This is a hot discussion topic and might change in the future. + + + +name + + +a unique name identifying the back buffer as a resource within the current node's namespace. + + + + + + + + + + + + + class F + + + VirtualBufferRequest< NewRwRequestPolicy > + VirtualBufferRequest<NewRwRequestPolicy> dabfg::Registry::registerBuffer + (const char *name, F &&buffer_provider_callback) + registerBuffer + + const char * + name + + + F && + buffer_provider_callback + + +Creates a new buffer at node execution time, which will not be FG-provided, but acquired from the callback before the node starts executing and stored somewhere outside. Note that history is not supported for external resources. + + + + +name + + +A unique name identifying this resource within the current node's namespace. + + + + +buffer_provider_callback + + +A callback that maps a multiplexing index to a ManagedBufferView. It might be called an arbitrary number of times, but only while the current node is registered. + + + + + + + + + + + VirtualResourceSemiRequest< NewHistRequestPolicy > + VirtualResourceSemiRequest<NewHistRequestPolicy> dabfg::NameSpaceRequest::historyFor + (const char *name) const + historyFor + + const char * + name + + +Reads the history of an existing resource at node execution time. + + + + +name + + +The name of the resource the history of which to read. + + + + + + + + + + + VirtualResourceSemiRequest< NewRwRequestPolicy > + VirtualResourceSemiRequest<NewRwRequestPolicy> dabfg::NameSpaceRequest::modify + (const char *name) const + modify + + const char * + name + + +Modifies an existing resource at node execution time. Modifications always happen after creation and before all reads. + + + + +name + + +The name of the resource to modify. + + + + + + + + + + + VirtualResourceSemiRequest< NewRwRequestPolicy > + VirtualResourceSemiRequest<NewRwRequestPolicy> dabfg::NameSpaceRequest::modify + (NamedSlot slot_name) const + modify + + NamedSlot + slot_name + + +Modifies an existing resource at node execution time, but indirectly, through a "slot", which must be specified with dabfg::fill_slot. Modifications always happen after creation and before all reads. + + + + +slot_name + + +The name of the slot to be used for this modification. + + + + + + + + + + + VirtualResourceSemiRequest< NewRoRequestPolicy > + VirtualResourceSemiRequest<NewRoRequestPolicy> dabfg::NameSpaceRequest::read + (const char *name) const + read + + const char * + name + + +Reads an existing resource at node execution time. Reads always happen after all modifications and before the renaming. + + + + +name + + +The name of the resource to read. + + + + + + + + + + + VirtualResourceSemiRequest< NewRoRequestPolicy > + VirtualResourceSemiRequest<NewRoRequestPolicy> dabfg::NameSpaceRequest::read + (NamedSlot slot_name) const + read + + NamedSlot + slot_name + + +Reads an existing resource at node execution time, but indirectly, through a "slot", which must be specified with dabfg::fill_slot. Reads always happen after all modifications and before the renaming. + + + + +slot_name + + +The name of the slot to be used for this read. + + + + + + + + + + + VirtualResourceSemiRequest< NewRwRequestPolicy > + VirtualResourceSemiRequest<NewRwRequestPolicy> dabfg::NameSpaceRequest::rename + (const char *from, const char *to, History history) const + rename + + const char * + from + + + const char * + to + + + History + history + + +Modifies and renames an existing resource at node execution time. Renaming always happens last among all operations on a resource. The renamed version is considered to be a new virtual resource. + + +Parameters from and to are looked up in different namespaces when calling this function on an arbitrary NameSpaceRequest object! Current node's namespace is used for creating to, while from is looked up in the current request object's namespace! + + + +from + + +Old resource name. Note that this resource may not have history enabled, as renaming it "consumes" it on the current frame, so it is not possible to read it on the next one. It will be looked up relative to this namespace. + + + + +to + + +New resource name, created inside the current node's namespace! + + + + +history + + +Whether the new resource needs history enabled, see create for details about history. + + + + + + + + + +
+ +
Convenience aliases
+ + VirtualTextureRequest< NewRwRequestPolicy > + VirtualTextureRequest<NewRwRequestPolicy> dabfg::Registry::createTexture2d + (const char *name, History history, Texture2dCreateInfo info) + createTexture2d + + const char * + name + + + History + history + + + Texture2dCreateInfo + info + + +Alias. See create function for details. + + + + + + + + + + + class T + + + VirtualBlobRequest< T, NewRwRequestPolicy > + VirtualBlobRequest<T, NewRwRequestPolicy> dabfg::Registry::createBlob + (const char *name, History history) + createBlob + + const char * + name + + + History + history + + +Alias. See create function for details. + + + + + + + + + + + class T + + + VirtualBlobRequest< T, NewRwRequestPolicy > + VirtualBlobRequest<T, NewRwRequestPolicy> dabfg::NameSpaceRequest::modifyBlob + (const char *name) const + modifyBlob + + const char * + name + + +Alias. See modify function for details. + + + + + + + + + VirtualTextureRequest< NewRwRequestPolicy > + VirtualTextureRequest<NewRwRequestPolicy> dabfg::NameSpaceRequest::modifyTexture + (const char *name) const + modifyTexture + + const char * + name + + +Alias. See modify function for details. + + + + + + + + + VirtualTextureRequest< NewRwRequestPolicy > + VirtualTextureRequest<NewRwRequestPolicy> dabfg::NameSpaceRequest::modifyTexture + (NamedSlot slot_name) const + modifyTexture + + NamedSlot + slot_name + + +Alias. See modify function for details. + + + + + + + + + + + class T + + + VirtualBlobRequest< T, NewRoRequestPolicy > + VirtualBlobRequest<T, NewRoRequestPolicy> dabfg::NameSpaceRequest::readBlob + (const char *name) const + readBlob + + const char * + name + + +Alias. See read functions for details. + + + + + + + + + + + class T + + + VirtualBlobRequest< T, NewHistRequestPolicy > + VirtualBlobRequest<T, NewHistRequestPolicy> dabfg::NameSpaceRequest::readBlobHistory + (const char *name) const + readBlobHistory + + const char * + name + + +Alias. See historyFor function for details. + + + + + + + + + VirtualTextureRequest< NewRoRequestPolicy > + VirtualTextureRequest<NewRoRequestPolicy> dabfg::NameSpaceRequest::readTexture + (const char *name) const + readTexture + + const char * + name + + +Alias. See read functions for details. + + + + + + + + + VirtualTextureRequest< NewRoRequestPolicy > + VirtualTextureRequest<NewRoRequestPolicy> dabfg::NameSpaceRequest::readTexture + (NamedSlot slot_name) const + readTexture + + NamedSlot + slot_name + + +Alias. See read functions for details. + + + + + + + + + VirtualTextureRequest< NewHistRequestPolicy > + VirtualTextureRequest<NewHistRequestPolicy> dabfg::NameSpaceRequest::readTextureHistory + (const char *name) const + readTextureHistory + + const char * + name + + +Alias. See historyFor function for details. + + + + + + + + + + + class T + + + VirtualBlobRequest< T, NewRwRequestPolicy > + VirtualBlobRequest<T, NewRwRequestPolicy> dabfg::NameSpaceRequest::renameBlob + (const char *from, const char *to, History history) const + renameBlob + + const char * + from + + + const char * + to + + + History + history + + +Alias. See rename function for details. + + + + + + + + + VirtualTextureRequest< NewRwRequestPolicy > + VirtualTextureRequest<NewRwRequestPolicy> dabfg::NameSpaceRequest::renameTexture + (const char *from, const char *to, History history) const + renameTexture + + const char * + from + + + const char * + to + + + History + history + + +Alias. See rename function for details. + + + + + + + +
+ + + class + friend class NameSpace + + NameSpace + + NameSpace + + + + + + + + + + + + + + dabfg::Registry::Registry + (NodeNameId node, InternalRegistry *reg) + Registry + + NodeNameId + node + + + InternalRegistry * + reg + + + + + + + + + + + detail::ResUid + detail::ResUid dabfg::Registry::registerTexture2dImpl + (const char *name, dabfg::ExternalResourceProvider &&p) + registerTexture2dImpl + + const char * + name + + + dabfg::ExternalResourceProvider && + p + + + + + + + + + + + detail::ResUid + detail::ResUid dabfg::Registry::registerBufferImpl + (const char *name, dabfg::ExternalResourceProvider &&p) + registerBufferImpl + + const char * + name + + + dabfg::ExternalResourceProvider && + p + + + + + + + + + + + + + Registry + Registry dabfg::Registry::allowAsyncPipelines + () + allowAsyncPipelines + +Allows async pipeline compilation Graphics pipelines will be async compiled with draw call skip when pipeline is not yet ready. + + + + + + + + + Registry + Registry dabfg::Registry::orderMeBefore + (const char *name) + orderMeBefore + + const char * + name + + +Orders the current node before a certain node. This means that the node name will only start executing after the current node has finished. + + +Ordering with nodes from different name spaces is not supported. + + + +name + + +The name of the node to order before, looked up in the current namespace. + + + + + + + + + + + Registry + Registry dabfg::Registry::orderMeBefore + (std::initializer_list< const char * > names) + orderMeBefore + + std::initializer_list< const char * > + names + + +Alias for calling orderMeBefore(const char *name) several times. + + + + +names + + +List of names of the nodes to order before. + + + + + + + + + + + Registry + Registry dabfg::Registry::orderMeAfter + (const char *name) + orderMeAfter + + const char * + name + + +Orders the current node after a certain node. This means that the current node will only start executing after node name has finished. + + +Ordering with nodes from different name spaces is not supported. + + + +name + + +The name of the node to order after, looked up in the current namespace. + + + + + + + + + + + Registry + Registry dabfg::Registry::orderMeAfter + (std::initializer_list< const char * > names) + orderMeAfter + + std::initializer_list< const char * > + names + + +Alias for calling orderMeAfter(const char *name) several times. + + + + +names + + +List of names of the nodes to order after. + + + + + + + + + + + Registry + Registry dabfg::Registry::setPriority + (priority_t prio) + setPriority + + priority_t + prio + + +Sets a priority for this node that will be used to order parallel nodes. Should only be used for optimizations. + + + + +prio + + +The priority to set. + + + + + + + + + + + Registry + Registry dabfg::Registry::multiplex + (multiplexing::Mode mode) + multiplex + + multiplexing::Mode + mode + + +Choses multiplexing mode for this node. Default is multiplexing over all axes (i.e. normal world rendering). + + + + +mode + + +The multiplexing mode to set. + + + + + + + + + + + Registry + Registry dabfg::Registry::executionHas + (SideEffects side_effect) + executionHas + + SideEffects + side_effect + + +Sets the side effect of the node that will control how the framegraph handles execution. + + + + +side_effect + + +The side effect type to set. + + + + + + + + + + + StateRequest + StateRequest dabfg::Registry::requestState + () + requestState + +Requests a certain global state for the execution time of this node. + + +A builder object for specifying concrete states. + + + + + + + + + VirtualPassRequest + VirtualPassRequest dabfg::Registry::requestRenderPass + () + requestRenderPass + +Requests that this node is going to be drawing stuff, which is always done inside a (possibly implicit) render pass. The returned object allows fine-tuning the render pass. + + +A builder object for specifying attachments and other details of the render pass. + + + + + + + + + NameSpaceRequest + NameSpaceRequest dabfg::Registry::currNameSpace + () + currNameSpace + +Returns a request object for this node's name space that can be used to get sub-namespace request objects or request resources. + + +NameSpaceRequest object representing the current name space. + + + + + + + + + NameSpaceRequest + NameSpaceRequest dabfg::Registry::root + () const + root + +Returns a request object for the root name space which can be used to access global resources. + + +NameSpaceRequest object representing the root name space. + + + + + + + + + + + int + D + D + + + AutoResolutionRequest< D > + AutoResolutionRequest<D> dabfg::NameSpaceRequest::getResolution + (const char *type_name, float multiplier=1.f) const + getResolution + + const char * + type_name + D + + + float + multiplier + 1.f + + +Get a request object for the 2D resolution of a particular type inside of this namespace, which can then be used to create textures or be resolved into an actual number at execution time. The resulting resolution will be the product of what was set with NameSpace::setResolution with the multiplier. + + + + +D + + +Dimensionality of the resolution. + + + + + +type_name + + +Auto resolution type name. + + + + +multiplier + + +A multiplier for the resolution type. + + + +AutoResolutionRequest Object representing the auto resolution type. + + + + + + + + + +The main builder object for describing at declaration time what your node intends to do at runtime. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::RegistryallowAsyncPipelines + dabfg::Registrycreate + dabfg::RegistrycreateBlob + dabfg::RegistrycreateTexture2d + dabfg::RegistrycurrNameSpace + dabfg::RegistryexecutionHas + dabfg::RegistrygetResolution + dabfg::RegistrygetResolution + dabfg::RegistryhistoryFor + dabfg::RegistryhistoryFor + dabfg::Registrymodify + dabfg::Registrymodify + dabfg::Registrymodify + dabfg::Registrymodify + dabfg::RegistrymodifyBlob + dabfg::RegistrymodifyBlob + dabfg::RegistrymodifyTexture + dabfg::RegistrymodifyTexture + dabfg::RegistrymodifyTexture + dabfg::RegistrymodifyTexture + dabfg::Registrymultiplex + dabfg::RegistryNameSpace + dabfg::RegistryorderMeAfter + dabfg::RegistryorderMeAfter + dabfg::RegistryorderMeBefore + dabfg::RegistryorderMeBefore + dabfg::Registryread + dabfg::Registryread + dabfg::Registryread + dabfg::Registryread + dabfg::RegistryreadBlob + dabfg::RegistryreadBlob + dabfg::RegistryreadBlobHistory + dabfg::RegistryreadBlobHistory + dabfg::RegistryreadTexture + dabfg::RegistryreadTexture + dabfg::RegistryreadTexture + dabfg::RegistryreadTexture + dabfg::RegistryreadTextureHistory + dabfg::RegistryreadTextureHistory + dabfg::RegistryregisterBackBuffer + dabfg::RegistryregisterBuffer + dabfg::RegistryregisterBufferImpl + dabfg::RegistryregisterTexture2d + dabfg::RegistryregisterTexture2dImpl + dabfg::RegistryRegistry + dabfg::Registryrename + dabfg::Registryrename + dabfg::RegistryrenameBlob + dabfg::RegistryrenameBlob + dabfg::RegistryrenameTexture + dabfg::RegistryrenameTexture + dabfg::RegistryrequestRenderPass + dabfg::RegistryrequestState + dabfg::Registryroot + dabfg::RegistrysetPriority + +
+
diff --git a/breathe/doxygen/daBFG/xml/classdabfg_1_1_state_request.xml b/breathe/doxygen/daBFG/xml/classdabfg_1_1_state_request.xml new file mode 100644 index 000000000..25ff54528 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/classdabfg_1_1_state_request.xml @@ -0,0 +1,252 @@ + + + + dabfg::StateRequest + stateRequest.h + + + class + friend class Registry + + Registry + + Registry + + + + + + + + + + + + + NodeNameId + NodeNameId dabfg::StateRequest::id + + id + + + + + + + + + + InternalRegistry * + InternalRegistry* dabfg::StateRequest::registry + + registry + + + + + + + + + + + + + dabfg::StateRequest::StateRequest + (InternalRegistry *reg, NodeNameId nodeId) + StateRequest + + InternalRegistry * + reg + + + NodeNameId + nodeId + + + + + + + + + + + + + StateRequest + StateRequest dabfg::StateRequest::setFrameBlock + (const char *block) && + setFrameBlock + + const char * + block + + +Requests for a block to be set to FRAME layer Values of frame block shader vars are supposed to change once per frame. + + + + +block + + +The name of the block to set. Must be present in the shader dump. + + + + + + + + + + + StateRequest + StateRequest dabfg::StateRequest::setSceneBlock + (const char *block) && + setSceneBlock + + const char * + block + + +Requests for a block to be set to SCENE layer. Values of scene block shader vars are supposed to change when the rendering mode changes. Examples of rendering modes are; depth pre-pass, shadow pass, color pass, voxelization pass, etc. + + + + +block + + +The name of the block to set. Must be present in the shader dump. + + + + + + + + + + + StateRequest + StateRequest dabfg::StateRequest::setObjectBlock + (const char *block) && + setObjectBlock + + const char * + block + + +Requests for a block to be set to OBJECT layer. Per-object blocks are evil and should be avoided at all costs. They imply a draw-call-per-object model, which has historically proven itself antagonistic to performance. + + + + +block + + +The name of the block to set. Must be present in the shader dump. + + + + + + + + + + + StateRequest + StateRequest dabfg::StateRequest::allowWireframe + () && + allowWireframe + +Requests for the driver wireframe mode to be enabled for this node when the user turns it on for debug purposes. + + + + + + + + + StateRequest + StateRequest dabfg::StateRequest::vrs + (VrsSettings vrs) && + vrs + + VrsSettings + vrs + + +Configures VRS settings for this node. + + +The default settings correspond to no VRS. VRS will only work if it is supported and enabled through dabfg::update_external_state. + + + +vrs + + +The VRS settings to use. + + + + + + + + + + + StateRequest + StateRequest dabfg::StateRequest::enableOverride + (shaders::OverrideState override) && + enableOverride + + shaders::OverrideState + override + + +Requests a shader pipeline state override to be active while this node is executing. + + + + +override + + +The override to use. + + + + + + + + + + + +Represents a request for a certain global state to be set during the node's execution. + + + + + + dabfg::StateRequestallowWireframe + dabfg::StateRequestenableOverride + dabfg::StateRequestid + dabfg::StateRequestRegistry + dabfg::StateRequestregistry + dabfg::StateRequestsetFrameBlock + dabfg::StateRequestsetObjectBlock + dabfg::StateRequestsetSceneBlock + dabfg::StateRequestStateRequest + dabfg::StateRequestvrs + + + diff --git a/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_pass_request.xml b/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_pass_request.xml new file mode 100644 index 000000000..2297ab14f --- /dev/null +++ b/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_pass_request.xml @@ -0,0 +1,608 @@ + + + + dabfg::VirtualPassRequest + virtualPassRequest.h + + + detail::ResourceRequestPolicy + using dabfg::VirtualPassRequest::RRP = detail::ResourceRequestPolicy + + RRP + + + + + + + + + + + + detail::VirtualAttachmentRequest< RRP::Readonly|RRP::Optional|RRP::History|RRP::HasUsageStage|RRP::HasUsageType, RRP::None > + using dabfg::VirtualPassRequest::RwVirtualAttachmentRequest = detail::VirtualAttachmentRequest<RRP::Readonly | RRP::Optional | RRP::History | RRP::HasUsageStage | RRP::HasUsageType, RRP::None> + + RwVirtualAttachmentRequest + +Resolve and RW depth cannot be readonly, optional or history requests. Usage should not have been specified yet. + + + + + + + + + detail::VirtualAttachmentRequest< RRP::Readonly|RRP::History|RRP::HasUsageStage|RRP::HasUsageType, RRP::None > + using dabfg::VirtualPassRequest::ColorRwVirtualAttachmentRequest = detail::VirtualAttachmentRequest<RRP::Readonly | RRP::History | RRP::HasUsageStage | RRP::HasUsageType, RRP::None> + + ColorRwVirtualAttachmentRequest + +Color requests may be optional, but cannot be readonly or history. Usage is specified later. + + + + + + + + + detail::VirtualAttachmentRequest< RRP::Optional|RRP::HasUsageStage|RRP::HasUsageType, RRP::None > + using dabfg::VirtualPassRequest::DepthRoVirtualAttachmentRequest = detail::VirtualAttachmentRequest<RRP::Optional | RRP::HasUsageStage | RRP::HasUsageType, RRP::None> + + DepthRoVirtualAttachmentRequest + +RO depth is not allowed to be optional, as it doesn't seem useful (may be changed later). Usage will be determined by us. + + + + + + + + + detail::VirtualAttachmentRequest< RRP::Optional|RRP::HasUsageType, RRP::None > + using dabfg::VirtualPassRequest::DepthRoAndSvBindVirtualAttachmentRequest = detail::VirtualAttachmentRequest<RRP::Optional | RRP::HasUsageType, RRP::None> + + DepthRoAndSvBindVirtualAttachmentRequest + +For RO depth that is also sampled through a shader var (SV), we also prohibit optional requests and while the usage type is determined by us (simultaneous depth+sampling), stage should be provided separately. + + + + + + + + + detail::VirtualAttachmentRequest< RRP::History|RRP::HasUsageStage|RRP::HasUsageType, RRP::None > + using dabfg::VirtualPassRequest::RoVirtualAttachmentRequest = detail::VirtualAttachmentRequest<RRP::History | RRP::HasUsageStage | RRP::HasUsageType, RRP::None> + + RoVirtualAttachmentRequest + +Input attachments are not allowed to be history, as renderpasses cannot span frame boundaries. Usage is determined by us. + + + + + + + + + + + class + friend class Registry + + Registry + + Registry + + + + + + + + + + + + + NodeNameId + NodeNameId dabfg::VirtualPassRequest::nodeId + + nodeId + + + + + + + + + + InternalRegistry * + InternalRegistry* dabfg::VirtualPassRequest::registry + + registry + + + + + + + + + + + + + dabfg::VirtualPassRequest::VirtualPassRequest + (NodeNameId node, InternalRegistry *reg) + VirtualPassRequest + + NodeNameId + node + + + InternalRegistry * + reg + + + + + + + + + + + + + RRP + disallowPolicies + disallowPolicies + + + RRP + requirePolicies + requirePolicies + + + detail::ResUid + detail::ResUid dabfg::VirtualPassRequest::getResUidForAttachment + (detail::VirtualAttachmentRequest< disallowPolicies, requirePolicies > attachment) + getResUidForAttachment + + detail::VirtualAttachmentRequest< disallowPolicies, requirePolicies > + attachment + + + + + + + + + + + void + void dabfg::VirtualPassRequest::blobClearImpl + (RwVirtualAttachmentRequest attachment, ResourceSubtypeTag projectee, const char *blob, detail::TypeErasedProjector projector) + blobClearImpl + + RwVirtualAttachmentRequest + attachment + + + ResourceSubtypeTag + projectee + + + const char * + blob + + + detail::TypeErasedProjector + projector + + + + + + + + + + + + + VirtualPassRequest + VirtualPassRequest dabfg::VirtualPassRequest::color + (std::initializer_list< ColorRwVirtualAttachmentRequest > attachments) && + color + + std::initializer_list< ColorRwVirtualAttachmentRequest > + attachments + + +Specifies color attachments for this virtual pass, which will be bound in the order specified here. A color attachment is a synonym for "render target". Call this with a braced list of either request objects or resource names, and optionally mip/layer numbers grouped with an object or name using braces. E.g. {{"cube", 0, 1}, "normals", prevFrameMotionRequest} + + + + +attachments + + +A list of attachments to use as color ones. This method should be usable without understanding the internals of detail::VirtualAttachmentRequest most of the time. + + + + + + + + + + + VirtualPassRequest + VirtualPassRequest dabfg::VirtualPassRequest::depthRw + (RwVirtualAttachmentRequest attachment) && + depthRw + + RwVirtualAttachmentRequest + attachment + + +Specifies the depth attachment for this virtual pass and enables depth write. The specified resource request MUST be a modify request. Call this with either a resource request object or an object name. You can also optionally specify mip/layer using braces: {"cube", 0, 1}. + + + + +attachment + + +The attachment to use as depth. This method should be usable without understanding the internals of detail::VirtualAttachmentRequest most of the time. + + + + + + + + + + + VirtualPassRequest + VirtualPassRequest dabfg::VirtualPassRequest::depthRo + (DepthRoVirtualAttachmentRequest attachment) && + depthRo + + DepthRoVirtualAttachmentRequest + attachment + + + + + + + + + + + VirtualPassRequest + VirtualPassRequest dabfg::VirtualPassRequest::depthRoAndBindToShaderVars + (DepthRoAndSvBindVirtualAttachmentRequest attachment, std::initializer_list< const char * > shader_var_names) && + depthRoAndBindToShaderVars + + DepthRoAndSvBindVirtualAttachmentRequest + attachment + + + std::initializer_list< const char * > + shader_var_names + + +Specifies the depth attachment for this virtual pass, disables depth write and binds it to several shader variable for sampling inside a shader. + + +This can only be called with a resource request object and not a string name, due to requiring stage to be specified as all stages where these shader vars will be used. +Note however that the resource request may be either read or modify, which will determine the ordering for this node. +This is is only multi-usage API in daBfg, an exception to the one usage per node guideline. +Warning: switching between RO and RW depth requires decompression and recompression on AMD hardware, which is expensive. + + +attachment + + +The resource request for the depth attachment. + + + + +shader_var_names + + +A list of shader var names to be bound. + + + + + + + + + + + VirtualPassRequest + VirtualPassRequest dabfg::VirtualPassRequest::clear + (RwVirtualAttachmentRequest attachment, ResourceClearValue color) && + clear + + RwVirtualAttachmentRequest + attachment + + + ResourceClearValue + color + + +Specifies that the attachment should be cleared with color at the beginning of this pass. + + +This causes a low-level pass break, so should be used sparingly. + + + +attachment + + +The attachment to clear. + + + + +color + + +The color to clear it with. + + + + + + + + + + + VirtualPassRequest + VirtualPassRequest dabfg::VirtualPassRequest::clear + (RwVirtualAttachmentRequest attachment, const char *color_blob) && + clear + + RwVirtualAttachmentRequest + attachment + + + const char * + color_blob + + +Specifies that the attachment should be cleared with the color contained in the color_blob at the beginning of this pass. + + +The requested blob's type is inferred from the projector's argument type. +This causes a low-level pass break, so should be used sparingly. + + + +attachment + + +The attachment to clear. + + + + +color + + +The name of the blob to grab the color from. + + + + + + + + + + + + + auto + projector + projector + + + VirtualPassRequest + VirtualPassRequest dabfg::VirtualPassRequest::clear + (RwVirtualAttachmentRequest attachment, const char *color_blob) && + clear + + RwVirtualAttachmentRequest + attachment + + + const char * + color_blob + + +Specifies that the attachment should be cleared with the color contained in the color_blob at the beginning of this pass. + + +The requested blob's type is inferred from the projector's argument type. +This causes a low-level pass break, so should be used sparingly. + + + +projector + + +A function to extract the color from the blob. Can be a pointer-to-member, i.e. &BlobType::field or a (pure) function pointer. + + + + + +attachment + + +The attachment to clear. + + + + +color + + +The name of the blob to grab the color from. + + + + + + + + + + + VirtualPassRequest + VirtualPassRequest dabfg::VirtualPassRequest::resolve + (RwVirtualAttachmentRequest from, RwVirtualAttachmentRequest to) && + resolve + + RwVirtualAttachmentRequest + from + + + RwVirtualAttachmentRequest + to + + +Specifies that the attachment from is a MSAA texture that should be resolved to the texture to at the end of this pass. + + +The resource from must have been previously requested as either a color or a depth attachment. + + + +from + + +The attachment to resolve. + + + + +to + + +The resource to resolve it to. + + + + + + + + + + + VirtualPassRequest + VirtualPassRequest dabfg::VirtualPassRequest::vrsRate + (RoVirtualAttachmentRequest attachment) && + vrsRate + + RoVirtualAttachmentRequest + attachment + + +Specifies the VRS rate texture attachment for this virtual pass. + + +The specified resource request MUST be a read. See embed:rst:inline :cpp:func:`d3d::set_variable_rate_shading_texture` for further details. Call this with either a resource request object or an object name. You can also optionally specify mip/layer using braces: {"cube", 0, 1}. Currently, no driver supports mips/layers for VRS textures. + + + +attachment + + +The attachment to use as a VRS rate. This method should be usable without understanding the internals of detail::VirtualAttachmentRequest most of the time. + + + + + + + + + + + VirtualPassRequest + VirtualPassRequest dabfg::VirtualPassRequest::area + (IPoint2 from, IPoint2 to) && + area + + IPoint2 + from + + + IPoint2 + to + + + + + + + + + + + +Requests this node to be inside a render pass with specified attachments. It is a virtual pass, as FG will merge these virtual passes into a single physical pass where possible. This class must be used to further specify the details of a virtual pass. + + +Attachments is a term that includes both render targets, depth targets and some other mobile-specific stuff. Note that methods that specify attachments take a special helper class, detail::VirtualAttachmentRequest. It is not necessary to understand how this class works, just call these methods either with a resource request or a string resource name, or even a {request/name, mip, layer} initializer list for tricky cases like cube maps. + + + + dabfg::VirtualPassRequestarea + dabfg::VirtualPassRequestblobClearImpl + dabfg::VirtualPassRequestclear + dabfg::VirtualPassRequestclear + dabfg::VirtualPassRequestclear + dabfg::VirtualPassRequestcolor + dabfg::VirtualPassRequestColorRwVirtualAttachmentRequest + dabfg::VirtualPassRequestdepthRo + dabfg::VirtualPassRequestdepthRoAndBindToShaderVars + dabfg::VirtualPassRequestDepthRoAndSvBindVirtualAttachmentRequest + dabfg::VirtualPassRequestDepthRoVirtualAttachmentRequest + dabfg::VirtualPassRequestdepthRw + dabfg::VirtualPassRequestgetResUidForAttachment + dabfg::VirtualPassRequestnodeId + dabfg::VirtualPassRequestRegistry + dabfg::VirtualPassRequestregistry + dabfg::VirtualPassRequestresolve + dabfg::VirtualPassRequestRoVirtualAttachmentRequest + dabfg::VirtualPassRequestRRP + dabfg::VirtualPassRequestRwVirtualAttachmentRequest + dabfg::VirtualPassRequestVirtualPassRequest + dabfg::VirtualPassRequestvrsRate + + + diff --git a/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_resource_creation_semi_request.xml b/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_resource_creation_semi_request.xml new file mode 100644 index 000000000..cea9ccbd3 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_resource_creation_semi_request.xml @@ -0,0 +1,385 @@ + + + + dabfg::VirtualResourceCreationSemiRequest + virtualResourceCreationSemiRequest.h + +
Buffer methods
+ The buffer naming convention repeats the one in the d3d driver interface, see functions in namespaceembed:rst:inline :cpp:type:`d3d::buffers` + + + VirtualResourceRequest< Sbuffer, RRP::None > + VirtualResourceRequest<Sbuffer, RRP::None> dabfg::VirtualResourceCreationSemiRequest::byteAddressBufferUaSr + (uint32_t size_in_dwords) && + byteAddressBufferUaSr + + uint32_t + size_in_dwords + + + + + + + + + + + VirtualResourceRequest< Sbuffer, RRP::None > + VirtualResourceRequest<Sbuffer, RRP::None> dabfg::VirtualResourceCreationSemiRequest::byteAddressBufferUa + (uint32_t size_in_dwords) && + byteAddressBufferUa + + uint32_t + size_in_dwords + + + + + + + + + + + + + class T + + + VirtualResourceRequest< Sbuffer, RRP::None > + VirtualResourceRequest<Sbuffer, RRP::None> dabfg::VirtualResourceCreationSemiRequest::structuredBufferUaSr + (uint32_t element_count) && + structuredBufferUaSr + + uint32_t + element_count + + + + + + + + + + + + + class T + + + VirtualResourceRequest< Sbuffer, RRP::None > + VirtualResourceRequest<Sbuffer, RRP::None> dabfg::VirtualResourceCreationSemiRequest::structuredBufferUa + (uint32_t element_count) && + structuredBufferUa + + uint32_t + element_count + + + + + + + + + + + VirtualResourceRequest< Sbuffer, RRP::None > + VirtualResourceRequest<Sbuffer, RRP::None> dabfg::VirtualResourceCreationSemiRequest::indirectBufferUa + (d3d::buffers::Indirect indirect_type, uint32_t call_count) && + indirectBufferUa + + d3d::buffers::Indirect + indirect_type + + + uint32_t + call_count + + + + + + + + + + + VirtualResourceRequest< Sbuffer, RRP::None > + VirtualResourceRequest<Sbuffer, RRP::None> dabfg::VirtualResourceCreationSemiRequest::indirectBuffer + (d3d::buffers::Indirect indirect_type, uint32_t call_count) && + indirectBuffer + + d3d::buffers::Indirect + indirect_type + + + uint32_t + call_count + + + + + + + + + +
+ + + detail::VirtualResourceRequestBase + using dabfg::VirtualResourceCreationSemiRequest::Base = detail::VirtualResourceRequestBase + + Base + + + + + + + + + + detail::ResourceRequestPolicy + using dabfg::VirtualResourceCreationSemiRequest::RRP = detail::ResourceRequestPolicy + + RRP + + + + + + + + + + + + class + friend class Registry + + Registry + + Registry + + + + + + + + + + + + + + dabfg::VirtualResourceCreationSemiRequest::VirtualResourceCreationSemiRequest + (detail::ResUid resId, NodeNameId node, InternalRegistry *reg) + VirtualResourceCreationSemiRequest + + detail::ResUid + resId + + + NodeNameId + node + + + InternalRegistry * + reg + + + + + + + + + + + + + VirtualResourceRequest< BaseTexture, RRP::None > + VirtualResourceRequest<BaseTexture, RRP::None> dabfg::VirtualResourceCreationSemiRequest::texture + (const Texture2dCreateInfo &info) && + texture + + const Texture2dCreateInfo & + info + + +Specifies the request to be a 2D texture creation one. + + + + +info + + +The 2D texture creation info. + + + + + + + + + + + VirtualResourceRequest< BaseTexture, RRP::None > + VirtualResourceRequest<BaseTexture, RRP::None> dabfg::VirtualResourceCreationSemiRequest::texture + (const Texture3dCreateInfo &info) && + texture + + const Texture3dCreateInfo & + info + + +Specifies the request to be a 3D texture creation one. + + + + +info + + +The 3D texture creation info. + + + + + + + + + + + VirtualResourceRequest< Sbuffer, RRP::None > + VirtualResourceRequest<Sbuffer, RRP::None> dabfg::VirtualResourceCreationSemiRequest::buffer + (const BufferCreateInfo &info) && + buffer + + const BufferCreateInfo & + info + + +Specifies the request to be a buffer creation one. Note that this is a legacy method that is error-prone and hard to use correctly. Avoid this in favor of one of the methods below if possible. + + + + +info + + +The buffer creation info. + + + + + + + + + + + + + class T + + + VirtualResourceRequest< T, RRP::None > + VirtualResourceRequest<T, RRP::None> dabfg::VirtualResourceCreationSemiRequest::blob + () && + blob + +Specifies the request to be a blob creation one. + + + + +T + + +The type of the CPU data blob + + + + + + + + + + + + + class T + + + VirtualResourceRequest< T, RRP::None > + VirtualResourceRequest<T, RRP::None> dabfg::VirtualResourceCreationSemiRequest::blob + (const T defaultValue) && + blob + + const T + defaultValue + + +Specifies the request to be a blob creation one. + + + + +T + + +The type of the CPU data blob + + + + + +defaultValue + + +The default value to initialize the blob with. + + + + + + + + + + + +A builder object for an incomplete resource creation request: we want to create something, but don't know what yet. Note that all methods of this class return a new request object which should be used for further specification. Never re-use objects of this type for several requests. + + + + + + dabfg::VirtualResourceCreationSemiRequestBase + dabfg::VirtualResourceCreationSemiRequestblob + dabfg::VirtualResourceCreationSemiRequestblob + dabfg::VirtualResourceCreationSemiRequestbuffer + dabfg::VirtualResourceCreationSemiRequestbyteAddressBufferUa + dabfg::VirtualResourceCreationSemiRequestbyteAddressBufferUaSr + dabfg::VirtualResourceCreationSemiRequestindirectBuffer + dabfg::VirtualResourceCreationSemiRequestindirectBufferUa + dabfg::VirtualResourceCreationSemiRequestRegistry + dabfg::VirtualResourceCreationSemiRequestRRP + dabfg::VirtualResourceCreationSemiRequeststructuredBufferUa + dabfg::VirtualResourceCreationSemiRequeststructuredBufferUaSr + dabfg::VirtualResourceCreationSemiRequesttexture + dabfg::VirtualResourceCreationSemiRequesttexture + dabfg::VirtualResourceCreationSemiRequestVirtualResourceCreationSemiRequest + +
+
diff --git a/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_resource_handle.xml b/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_resource_handle.xml new file mode 100644 index 000000000..45b472a08 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_resource_handle.xml @@ -0,0 +1,227 @@ + + + + dabfg::VirtualResourceHandle + virtualResourceHandle.h + + + class Res + + + bool + gpu + gpu + + + bool + optional + optional + + + + + detail::VirtualResourceHandleBase + using dabfg::VirtualResourceHandle< Res, gpu, optional >::Base = detail::VirtualResourceHandleBase + + Base + + + + + + + + + + eastl::remove_cvref_t< Res > + using dabfg::VirtualResourceHandle< Res, gpu, optional >::ResNoConst = eastl::remove_cvref_t<Res> + + ResNoConst + + + + + + + + + + eastl::conditional_t< gpu, ManagedResView< ManagedRes< ResNoConst > >, BlobView > + using dabfg::VirtualResourceHandle< Res, gpu, optional >::View = eastl::conditional_t<gpu, ManagedResView<ManagedRes<ResNoConst> >, BlobView> + + View + + + + + + + + + + + + + + class + + + detail::ResourceRequestPolicy + + + class + friend class VirtualResourceRequest + + VirtualResourceRequest + + VirtualResourceRequest + + + + + + + + + + + + + + dabfg::VirtualResourceHandle< Res, gpu, optional >::VirtualResourceHandle + (detail::ResUid resId, const ResourceProvider *prov) + VirtualResourceHandle + + detail::ResUid + resId + + + const ResourceProvider * + prov + + + + + + + + + + + + + Res & + Res& dabfg::VirtualResourceHandle< Res, gpu, optional >::ref + () const & + ref + +Returns a reference to the provided resource. Only defined for mandatory handles. + + +For read requests, this always returns a const reference. Due to unfortunate coupling of textures with samplers, sometimes this constness needs to be violated. Use .view() for that. +A non-nullable reference to the resource. + + + + + + + + + Res * + Res* dabfg::VirtualResourceHandle< Res, gpu, optional >::get + () const & + get + +Returns a pointer to the provided resource, or nullptr for missing optional resources. Always check for null when using this! + + +For read requests, this always returns a const reference. Due to unfortunate coupling of textures with samplers, sometimes this constness needs to be violated. Use .view() for that. +A pointer to the resource that may be nullptr for optional requests. + + + + + + + + + View + View dabfg::VirtualResourceHandle< Res, gpu, optional >::view + () const & + view + +Returns a managed view to a provided GPU resource, or an empty view for missing optional resources. + + +A ManagedResView to the GPU resource that may be empty for optional requests. + + + + + + + + + D3DRESID + D3DRESID dabfg::VirtualResourceHandle< Res, gpu, optional >::d3dResId + () const & + d3dResId + +Returns the engine resource manager ID for a provided GPU resource, or a BAD_RESID for a missing optional resource. + + +A D3DRESID to the GPU resource that may be BAD_RESID for optional requests. + + + + + + + + + +Handle to a virtual resource managed by BFG. Does not actually represent a physical GPU or CPU resource until the execution callback gets called. The physical resource will also change between calls to the execution callback, so the dereferenced value of this handle should NEVER be cached anywhere. + + +All methods are const & as this is supposed to be called from within the node execution callback. + +Res + + +BaseTexture or Sbuffer when gpu == true, otherwise arbitrary CPU data type. + + + + +gpu + + +True iff this handle represents a GPU resource. + + + + +optional + + +True iff this handle can refer to a missing resource. + + + + + + + + dabfg::VirtualResourceHandleBase + dabfg::VirtualResourceHandled3dResId + dabfg::VirtualResourceHandleget + dabfg::VirtualResourceHandleref + dabfg::VirtualResourceHandleResNoConst + dabfg::VirtualResourceHandleView + dabfg::VirtualResourceHandleview + dabfg::VirtualResourceHandleVirtualResourceHandle + dabfg::VirtualResourceHandleVirtualResourceRequest + + + diff --git a/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_resource_request.xml b/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_resource_request.xml new file mode 100644 index 000000000..7c842923b --- /dev/null +++ b/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_resource_request.xml @@ -0,0 +1,556 @@ + + + + dabfg::VirtualResourceRequest + virtualResourceRequest.h + + + class Res + + + detail::ResourceRequestPolicy + policy + policy + + + + + detail::VirtualResourceRequestBase + using dabfg::VirtualResourceRequest< Res, policy >::Base = detail::VirtualResourceRequestBase + + Base + + + + + + + + + + detail::ResourceRequestPolicy + using dabfg::VirtualResourceRequest< Res, policy >::RRP = detail::ResourceRequestPolicy + + RRP + + + + + + + + + + VirtualResourceHandle< eastl::conditional_t< hasPolicy(RRP::Readonly), const Res, Res >, is_gpu, hasPolicy(RRP::Optional)> + using dabfg::VirtualResourceRequest< Res, policy >::HandleType = VirtualResourceHandle<eastl::conditional_t<hasPolicy(RRP::Readonly), const Res, Res>, is_gpu, hasPolicy(RRP::Optional)> + + HandleType + + + + + + + + + + + + constexpr bool + constexpr bool dabfg::VirtualResourceRequest< Res, policy >::is_gpu + + is_gpu + = eastl::is_base_of_v<D3dResource, Res> + + + + + + + + + + + + + + detail::ResourceRequestPolicy + + + detail::ResourceRequestPolicy + + + class + friend class detail::VirtualAttachmentRequest + + detail::VirtualAttachmentRequest + + detail::VirtualAttachmentRequest + + + + + + + + + + + + + class + + + detail::ResourceRequestPolicy + + + class + friend class VirtualResourceRequest + + VirtualResourceRequest + + VirtualResourceRequest + + + + + + + + + + + class + friend class VirtualResourceCreationSemiRequest + + VirtualResourceCreationSemiRequest + + VirtualResourceCreationSemiRequest + + + + + + + + + + + + + detail::ResourceRequestPolicy + + + class + friend class VirtualResourceSemiRequest + + VirtualResourceSemiRequest + + VirtualResourceSemiRequest + + + + + + + + + + + class + friend class Registry + + Registry + + Registry + + + + + + + + + + + + + + dabfg::VirtualResourceRequest< Res, policy >::VirtualResourceRequest + (detail::ResUid resId, NodeNameId node, InternalRegistry *reg) + VirtualResourceRequest + + detail::ResUid + resId + + + NodeNameId + node + + + InternalRegistry * + reg + + + + + + + + + + + + + constexpr bool + static constexpr bool dabfg::VirtualResourceRequest< Res, policy >::hasPolicy + (RRP p) + hasPolicy + + RRP + p + + + + + + + + + + + constexpr bool + static constexpr bool dabfg::VirtualResourceRequest< Res, policy >::hasPolicy + (RRP p, const char *) + hasPolicy + + RRP + p + + + const char * + + + + + + + + + + + constexpr RRP + static constexpr RRP dabfg::VirtualResourceRequest< Res, policy >::flipPolicy + (RRP p) + flipPolicy + + RRP + p + + + + + + + + + + + + + VirtualResourceRequest< Res, flipPolicy(RRP::Optional)> + VirtualResourceRequest<Res, flipPolicy(RRP::Optional)> dabfg::VirtualResourceRequest< Res, policy >::optional + () && + optional + +Makes this request optional. The node will not get disabled if the resource is missing, the handle will return an empty value. + + + + + + + + + VirtualResourceRequest< Res, flipPolicy(RRP::HasUsageType)> + VirtualResourceRequest<Res, flipPolicy(RRP::HasUsageType)> dabfg::VirtualResourceRequest< Res, policy >::bindToShaderVar + (const char *shader_var_name=nullptr) && + bindToShaderVar + + const char * + shader_var_name + nullptr + + +Requests for this resource to be bound to a shader variable with the specified name. The usage stage MUST have been set beforehand and MUST include all shader stages that this shader var will be accessed from within this node. + + + + +shader_var_name + + +The name of the shader variable to bind. If not specified, the name of the resource will be used. + + + + + + + + + + + + + auto + projector + projector + + + class + void + + + VirtualResourceRequest< Res, policy > + VirtualResourceRequest<Res, policy> dabfg::VirtualResourceRequest< Res, policy >::bindToShaderVar + (const char *shader_var_name=nullptr) && + bindToShaderVar + + const char * + shader_var_name + nullptr + + +Requests for a sub-object of a blob to be bound to a shader variable with the specified name. + + + + +projector + + +A function to extract the value to bind from the blob. Can be a pointer-to-member, i.e. &BlobType::field or a (pure) function pointer. + + + + + +shader_var_name + + +The name of the shader variable to bind. If not specified, the name of the resource will be used. + + + + + + + + + + + VirtualResourceRequest< Res, policy > + VirtualResourceRequest<Res, policy> dabfg::VirtualResourceRequest< Res, policy >::bindAsView + () && + bindAsView + +Requests for a matrix-like blob to be bound as the current view matrix. + + + + + + + + + + + auto + projector + projector + + + class + void + + + VirtualResourceRequest< Res, policy > + VirtualResourceRequest<Res, policy> dabfg::VirtualResourceRequest< Res, policy >::bindAsView + () && + bindAsView + +Requests for a matrix-like sub-object of a blob to be bound as the current view matrix. + + + + +projector + + +A function to extract the value to bind from the blob. Can be a pointer-to-member, i.e. &BlobType::field or a (pure) function pointer. + + + + + + + + + + + VirtualResourceRequest< Res, policy > + VirtualResourceRequest<Res, policy> dabfg::VirtualResourceRequest< Res, policy >::bindAsProj + () && + bindAsProj + +Requests for a matrix-like blob to be bound as the current projection matrix. + + + + + + + + + + + auto + projector + projector + + + class + void + + + VirtualResourceRequest< Res, policy > + VirtualResourceRequest<Res, policy> dabfg::VirtualResourceRequest< Res, policy >::bindAsProj + () && + bindAsProj + +Requests for a matrix-like sub-object of a blob to be bound as the current projection matrix. + + + + +projector + + +A function to extract the value to bind from the blob. Can be a pointer-to-member, i.e. &BlobType::field or a (pure) function pointer. + + + + + + + + + + + VirtualResourceRequest< Res, flipPolicy(RRP::HasUsageStage)> + VirtualResourceRequest<Res, flipPolicy(RRP::HasUsageStage)> dabfg::VirtualResourceRequest< Res, policy >::atStage + (Stage stage) && + atStage + + Stage + stage + + +Must be used when the resource is manually accessed through the handle or bound to a shader var to specify what shader stage this resource will be used at. + + + + + + + + + VirtualResourceRequest< Res, flipPolicy(RRP::HasUsageType)> + VirtualResourceRequest<Res, flipPolicy(RRP::HasUsageType)> dabfg::VirtualResourceRequest< Res, policy >::useAs + (Usage type) && + useAs + + Usage + type + + +Must be used when the resource is manually accessed through the handle to specify how exactly the resource will be used. + + + + + + + + + HandleType + HandleType dabfg::VirtualResourceRequest< Res, policy >::handle + () && + handle + +Returns a handle that can be used to access the physical resource underlying this virtual one during execution time. Note that the physical resource will change throughout executions and should never be cached by reference. See dabfg::VirtualResourceHandle for further details. + + + + + + + + + +Request for a virtual resource known to BFG. Should be used to further configure the properties of the request. + + +The intended usage is auto myTexHandle = registry.readTexture("my_tex") + .optional() + ... + .handle(); + Hence methods are only rvalue-callable. Don't try to get smart with these request classes. Don't cache them, don't pass them around a bunch of functions, KISS. + + +Res + + +The C++ type representing this resource. BaseTex/Sbuffer for GPU resources, any C++ type for CPU resources. + + + + +policy + + +Static data about this request's structure used for erroring out at compile time if this class is used incorrectly. + + + + + + + + dabfg::VirtualResourceRequestatStage + dabfg::VirtualResourceRequestBase + dabfg::VirtualResourceRequestbindAsProj + dabfg::VirtualResourceRequestbindAsProj + dabfg::VirtualResourceRequestbindAsView + dabfg::VirtualResourceRequestbindAsView + dabfg::VirtualResourceRequestbindToShaderVar + dabfg::VirtualResourceRequestbindToShaderVar + dabfg::VirtualResourceRequestdetail::VirtualAttachmentRequest + dabfg::VirtualResourceRequestflipPolicy + dabfg::VirtualResourceRequesthandle + dabfg::VirtualResourceRequestHandleType + dabfg::VirtualResourceRequesthasPolicy + dabfg::VirtualResourceRequesthasPolicy + dabfg::VirtualResourceRequestis_gpu + dabfg::VirtualResourceRequestoptional + dabfg::VirtualResourceRequestRegistry + dabfg::VirtualResourceRequestRRP + dabfg::VirtualResourceRequestuseAs + dabfg::VirtualResourceRequestVirtualResourceCreationSemiRequest + dabfg::VirtualResourceRequestVirtualResourceRequest + dabfg::VirtualResourceRequestVirtualResourceRequest + dabfg::VirtualResourceRequestVirtualResourceSemiRequest + + + diff --git a/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_resource_semi_request.xml b/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_resource_semi_request.xml new file mode 100644 index 000000000..8cf13ba41 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/classdabfg_1_1_virtual_resource_semi_request.xml @@ -0,0 +1,174 @@ + + + + dabfg::VirtualResourceSemiRequest + virtualResourceSemiRequest.h + + + detail::ResourceRequestPolicy + policy + policy + + + + + detail::VirtualResourceRequestBase + using dabfg::VirtualResourceSemiRequest< policy >::Base = detail::VirtualResourceRequestBase + + Base + + + + + + + + + + + + class + friend class StateRequest + + StateRequest + + StateRequest + + + + + + + + + + + class + friend class NameSpaceRequest + + NameSpaceRequest + + NameSpaceRequest + + + + + + + + + + + + + + dabfg::VirtualResourceSemiRequest< policy >::VirtualResourceSemiRequest + (detail::ResUid resId, NodeNameId node, InternalRegistry *reg) + VirtualResourceSemiRequest + + detail::ResUid + resId + + + NodeNameId + node + + + InternalRegistry * + reg + + + + + + + + + + + + + VirtualResourceRequest< BaseTexture, policy > + VirtualResourceRequest<BaseTexture, policy> dabfg::VirtualResourceSemiRequest< policy >::texture + () && + texture + +Specifies this to be a texture request. + + + + + + + + + VirtualResourceRequest< Sbuffer, policy > + VirtualResourceRequest<Sbuffer, policy> dabfg::VirtualResourceSemiRequest< policy >::buffer + () && + buffer + +Specifies this to be a buffer request. + + + + + + + + + + + class T + + + VirtualResourceRequest< T, policy > + VirtualResourceRequest<T, policy> dabfg::VirtualResourceSemiRequest< policy >::blob + () && + blob + +Specifies this to be a blob request. + + + + +T + + +The type of the blob to be requested. + + + + + + + + + + + +A builder object for an incomplete resource creation request: we want to read, modify or rename something, but don't know what yet. Note that all methods of this class return a new request object which should be used for further specification. Never re-use objects of this type for several requests. + + + + +policy + + +Static data about this request's structure used for erroring out at compile time if this class is used incorrectly. + + + + + + + + dabfg::VirtualResourceSemiRequestBase + dabfg::VirtualResourceSemiRequestblob + dabfg::VirtualResourceSemiRequestbuffer + dabfg::VirtualResourceSemiRequestNameSpaceRequest + dabfg::VirtualResourceSemiRequestStateRequest + dabfg::VirtualResourceSemiRequesttexture + dabfg::VirtualResourceSemiRequestVirtualResourceSemiRequest + + + diff --git a/breathe/doxygen/daBFG/xml/classdabfg_1_1detail_1_1_virtual_attachment_request.xml b/breathe/doxygen/daBFG/xml/classdabfg_1_1detail_1_1_virtual_attachment_request.xml new file mode 100644 index 000000000..40c2c233d --- /dev/null +++ b/breathe/doxygen/daBFG/xml/classdabfg_1_1detail_1_1_virtual_attachment_request.xml @@ -0,0 +1,370 @@ + + + + dabfg::detail::VirtualAttachmentRequest + virtualPassRequest.h + + + detail::ResourceRequestPolicy + disallowPolicies + disallowPolicies + + + detail::ResourceRequestPolicy + requirePolicies + requirePolicies + + + + + detail::ResourceRequestPolicy + using dabfg::detail::VirtualAttachmentRequest< disallowPolicies, requirePolicies >::RRP = detail::ResourceRequestPolicy + + RRP + + + + + + + + + + + + class + friend class dabfg::VirtualPassRequest + + dabfg::VirtualPassRequest + + dabfg::VirtualPassRequest + + + + + + + + + + + + + eastl::variant< ResUid, const char * > + eastl::variant<ResUid, const char *> dabfg::detail::VirtualAttachmentRequest< disallowPolicies, requirePolicies >::image + + image + + + + + + + + + + uint32_t + uint32_t dabfg::detail::VirtualAttachmentRequest< disallowPolicies, requirePolicies >::mipLevel + + mipLevel + = 0 + + + + + + + + + + uint32_t + uint32_t dabfg::detail::VirtualAttachmentRequest< disallowPolicies, requirePolicies >::layer + + layer + = 0 + + + + + + + + + + + + constexpr bool + static constexpr bool dabfg::detail::VirtualAttachmentRequest< disallowPolicies, requirePolicies >::policyAllowed + (RRP policy) + policyAllowed + + RRP + policy + + + + + + + + + + + constexpr bool + static constexpr bool dabfg::detail::VirtualAttachmentRequest< disallowPolicies, requirePolicies >::policyAllowed + (RRP policy, const char *) + policyAllowed + + RRP + policy + + + const char * + + + + + + + + + + + + + + + RRP + policy + policy + + + class + void + + + + dabfg::detail::VirtualAttachmentRequest< disallowPolicies, requirePolicies >::VirtualAttachmentRequest + (VirtualResourceRequest< BaseTexture, policy > res) + VirtualAttachmentRequest + + VirtualResourceRequest< BaseTexture, policy > + res + + +Implicit conversion from a resource request. + + + + +res + + +Resource request of an appropriate type. + + + + + + + + + + + + + RRP + policy + policy + + + class + void + + + + dabfg::detail::VirtualAttachmentRequest< disallowPolicies, requirePolicies >::VirtualAttachmentRequest + (VirtualResourceRequest< BaseTexture, policy > res, uint32_t mip_level, uint32_t layer) + VirtualAttachmentRequest + + VirtualResourceRequest< BaseTexture, policy > + res + + + uint32_t + mip_level + + + uint32_t + layer + + +Implicit conversion from an init list specifying a request, a mip level and a layer. + + + + +res + + +Resource request of an appropriate type. + + + + +mip_level + + +Mip level of the texture to use as an attachment. + + + + +layer + + +Layer of an array texture to use as an attachment. + + + + + + + + + + + + + class + void + + + + dabfg::detail::VirtualAttachmentRequest< disallowPolicies, requirePolicies >::VirtualAttachmentRequest + (const char *name) + VirtualAttachmentRequest + + const char * + name + + +Implicit conversion from a string name of a resource. + + +Automatically requests this resource for modification and marks appropriate usage type and stage for it. + + +name + + +String name of a resource. + + + + + + + + + + + + + class + void + + + + dabfg::detail::VirtualAttachmentRequest< disallowPolicies, requirePolicies >::VirtualAttachmentRequest + (const char *name, uint32_t mip_level, uint32_t layer) + VirtualAttachmentRequest + + const char * + name + + + uint32_t + mip_level + + + uint32_t + layer + + +Implicit conversion from an init list specifying a string name of a resource, a mip level and a layer. + + +Automatically requests this resource for modification and marks appropriate usage type and stage for it. + + +name + + +String name of a resource. + + + + +mip_level + + +Mip level of the texture to use as an attachment. + + + + +layer + + +Level of an array texture to use as an attachment. + + + + + + + + + + + +A helper class to make calling .color() and .depth() convenient. + + +This class wraps around either a request or a string name of a resource, validating that the request is appropriate in the first case and automatically selecting sensible request defaults in the second case. Generally speaking, we can use certain mips/layers as attachments, so an attachment request can specify them too. + + +disallowPolicies + + +Bitmask of request policies that are not allowed for this attachment type. + + + + +requirePolicies + + +Bitmask of request policies that are required for this attachment type. + + + + + + + + dabfg::detail::VirtualAttachmentRequestdabfg::VirtualPassRequest + dabfg::detail::VirtualAttachmentRequestimage + dabfg::detail::VirtualAttachmentRequestlayer + dabfg::detail::VirtualAttachmentRequestmipLevel + dabfg::detail::VirtualAttachmentRequestpolicyAllowed + dabfg::detail::VirtualAttachmentRequestpolicyAllowed + dabfg::detail::VirtualAttachmentRequestRRP + dabfg::detail::VirtualAttachmentRequestVirtualAttachmentRequest + dabfg::detail::VirtualAttachmentRequestVirtualAttachmentRequest + dabfg::detail::VirtualAttachmentRequestVirtualAttachmentRequest + dabfg::detail::VirtualAttachmentRequestVirtualAttachmentRequest + + + diff --git a/breathe/doxygen/daBFG/xml/combine.xslt b/breathe/doxygen/daBFG/xml/combine.xslt new file mode 100644 index 000000000..3bfa82c1e --- /dev/null +++ b/breathe/doxygen/daBFG/xml/combine.xslt @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/breathe/doxygen/daBFG/xml/compound.xsd b/breathe/doxygen/daBFG/xml/compound.xsd new file mode 100644 index 000000000..6a8a83463 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/compound.xsd @@ -0,0 +1,1215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/daBFG/xml/dir_089e0d3966ab15eefa92c1e290379d38.xml b/breathe/doxygen/daBFG/xml/dir_089e0d3966ab15eefa92c1e290379d38.xml new file mode 100644 index 000000000..62c634025 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/dir_089e0d3966ab15eefa92c1e290379d38.xml @@ -0,0 +1,12 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude + + + + + + + diff --git a/breathe/doxygen/daBFG/xml/dir_969cd38e26b2d824905221b9b88e71e5.xml b/breathe/doxygen/daBFG/xml/dir_969cd38e26b2d824905221b9b88e71e5.xml new file mode 100644 index 000000000..98e08b3cf --- /dev/null +++ b/breathe/doxygen/daBFG/xml/dir_969cd38e26b2d824905221b9b88e71e5.xml @@ -0,0 +1,33 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg + autoResolutionRequest.h + bfg.h + externalResources.h + externalState.h + history.h + multiplexing.h + nameSpace.h + nameSpaceRequest.h + nodeHandle.h + priority.h + registry.h + resourceCreation.h + sideEffects.h + stage.h + stateRequest.h + usage.h + variableRateShading.h + virtualPassRequest.h + virtualResourceCreationSemiRequest.h + virtualResourceHandle.h + virtualResourceRequest.h + virtualResourceSemiRequest.h + + + + + + + diff --git a/breathe/doxygen/daBFG/xml/dir_dfe6bed94bcf04987b38a6f8493ab81c.xml b/breathe/doxygen/daBFG/xml/dir_dfe6bed94bcf04987b38a6f8493ab81c.xml new file mode 100644 index 000000000..0092349c7 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/dir_dfe6bed94bcf04987b38a6f8493ab81c.xml @@ -0,0 +1,12 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs + + + + + + + diff --git a/breathe/doxygen/daBFG/xml/dir_e2c640b54affa6f86d83d95c201d0b2f.xml b/breathe/doxygen/daBFG/xml/dir_e2c640b54affa6f86d83d95c201d0b2f.xml new file mode 100644 index 000000000..4867921a0 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/dir_e2c640b54affa6f86d83d95c201d0b2f.xml @@ -0,0 +1,12 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render + + + + + + + diff --git a/breathe/doxygen/daBFG/xml/dir_ea1f7663ccf2bdfe1baad716ec70d619.xml b/breathe/doxygen/daBFG/xml/dir_ea1f7663ccf2bdfe1baad716ec70d619.xml new file mode 100644 index 000000000..754172c62 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/dir_ea1f7663ccf2bdfe1baad716ec70d619.xml @@ -0,0 +1,12 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg + + + + + + + diff --git a/breathe/doxygen/daBFG/xml/external_resources_8h.xml b/breathe/doxygen/daBFG/xml/external_resources_8h.xml new file mode 100644 index 000000000..d60babe0c --- /dev/null +++ b/breathe/doxygen/daBFG/xml/external_resources_8h.xml @@ -0,0 +1,104 @@ + + + + externalResources.h + EASTL/variant.h + generic/dag_fixedMoveOnlyFunction.h + render/daBfg/multiplexing.h + 3d/dag_resPtr.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/registry.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/nameSpaceRequest.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<EASTL/variant.h> + +#include<generic/dag_fixedMoveOnlyFunction.h> +#include<render/daBfg/multiplexing.h> +#include<3d/dag_resPtr.h> + + +namespacedabfg +{ + +usingExternalResource=eastl::variant<ManagedTexView,ManagedBufView>; + +usingExternalResourceProvider=dag::FixedMoveOnlyFunction<32,ExternalResource(constmultiplexing::Index&)const>; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/external_state_8h.xml b/breathe/doxygen/daBFG/xml/external_state_8h.xml new file mode 100644 index 000000000..63caea6e2 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/external_state_8h.xml @@ -0,0 +1,44 @@ + + + + externalState.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/bfg.h + + + + + + + + + + + + + dabfg::ExternalState + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +namespacedabfg +{ + +structExternalState +{ +boolwireframeModeEnabled=false; +boolvrsEnabled=false; +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/group___dabfg_core.xml b/breathe/doxygen/daBFG/xml/group___dabfg_core.xml new file mode 100644 index 000000000..9f7341298 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/group___dabfg_core.xml @@ -0,0 +1,171 @@ + + + + DabfgCore + Core daBfg functionality + dabfg::ExternalState + dabfg::NameSpace + Core daBfg aliases + + + NameSpace + NameSpace dabfg::root + () + root + +Creates a namespace object for the root frame graph namespace. + + +The object representing the root namespace. + + + + + + + + + void + void dabfg::set_multiplexing_extents + (multiplexing::Extents extents) + set_multiplexing_extents + + multiplexing::Extents + extents + + +Sets the multiplexing extents for the following frames. + + +May safely be called every frame, only triggers a recompilation when the values actually change + + + + + + + bool + bool dabfg::run_nodes + () + run_nodes + +Executes the frame graph, possibly recompiling it. + + +Return false if run is not possible (d3d device was lost for example) + + + + + + + void + void dabfg::startup + () + startup + +Initializes the daBfg backend. + + + + + + + + + void + void dabfg::shutdown + () + shutdown + +Frees resources held by the daBfg backend. + + + + + + + + + void + void dabfg::invalidate_history + () + invalidate_history + +Invalidates history. + + +When making changes to the graph history is generally preserved calling this function makes this preservation invalid and the history resources will be recreated. + + + + + + + void + void dabfg::update_external_state + (ExternalState state) + update_external_state + + ExternalState + state + + +Sets various global state that is external to daBfg. + + + + + + + + + void + void dabfg::mark_external_resource_for_validation + (const D3dResource *resource) + mark_external_resource_for_validation + + const D3dResource * + resource + + +Marks an external resource to be validated for illegal access within nodes. Note that daBfg-managed resources are always automatically validated for illegal access through sneaky global variables, but external are often used for gradual migration to FG, at which point they are indeed illegally accessed through global state and that is intended. + + + + +resource + + +The name of the resource to be validated. + + + + + + + + + + + + + DABFG_PP_NODE_SRC + (__FILE__ ":" DABFG_PP_STRINGIZE(__LINE__)) + +A macro that expands to the current source location. Should always be provided to dabfg::register_node as the source_location parameter. + + + + + + + + + + + +Core dabfg functions that everything else is accessed through. + + + diff --git a/breathe/doxygen/daBFG/xml/group___dabfg_core_aliases.xml b/breathe/doxygen/daBFG/xml/group___dabfg_core_aliases.xml new file mode 100644 index 000000000..f3201ab6b --- /dev/null +++ b/breathe/doxygen/daBFG/xml/group___dabfg_core_aliases.xml @@ -0,0 +1,192 @@ + + + + DabfgCoreAliases + Core daBfg aliases + + + + + class F + + + NodeHandle + NodeHandle dabfg::register_node + (const char *name, const char *source_location, F &&declaration_callback) + register_node + + const char * + name + + + const char * + source_location + + + F && + declaration_callback + + +Alias for dabfg::root().registerNode, see NameSpace::registerNode. + + + + + + + + + + + class T + + + void + void dabfg::set_resolution + (const char *typeName, T value) + set_resolution + + const char * + typeName + + + T + value + + +Alias for dabfg::root().setResolution, see NameSpace::setResolution. + + + + + + + + + + + class T + + + void + void dabfg::set_dynamic_resolution + (const char *typeName, T value) + set_dynamic_resolution + + const char * + typeName + + + T + value + + +Alias for dabfg::root().setDynamicResolution, see NameSpace::setDynamicResolution. + + + + + + + + + void + void dabfg::fill_slot + (NamedSlot slot, const char *res_name) + fill_slot + + NamedSlot + slot + + + const char * + res_name + + +Alias for dabfg::root().fillSlot(slot, dabfg::root(), res_name), see NameSpace::fillSlot. + + + + + + + + + void + void dabfg::update_externally_consumed_resource_set + (eastl::span< const char *const > res_names) + update_externally_consumed_resource_set + + eastl::span< const char *const > + res_names + + +Alias for dabfg::root().updateExternallyConsumedResourceSet, see NameSpace::updateExternallyConsumedResourceSet(eastl::span<const char *const> res_names) + + + + + + + + + void + void dabfg::update_externally_consumed_resource_set + (std::initializer_list< const char * > res_names) + update_externally_consumed_resource_set + + std::initializer_list< const char * > + res_names + + + + + + + + + + + void + void dabfg::mark_resource_externally_consumed + (const char *res_name) + mark_resource_externally_consumed + + const char * + res_name + + +Alias for dabfg::root().markResourceExternallyConsumed, see NameSpace::markResourceExternallyConsumed. + + + + + + + + + void + void dabfg::unmark_resource_externally_consumed + (const char *res_name) + unmark_resource_externally_consumed + + const char * + res_name + + +Alias for dabfg::root().unmarkResourceExternallyConsumed, see NameSpace::unmarkResourceExternallyConsumed. + + + + + + + + + + + +Compatibility aliases for access to the root name space. + + + diff --git a/breathe/doxygen/daBFG/xml/history_8h.xml b/breathe/doxygen/daBFG/xml/history_8h.xml new file mode 100644 index 000000000..f84958afa --- /dev/null +++ b/breathe/doxygen/daBFG/xml/history_8h.xml @@ -0,0 +1,58 @@ + + + + history.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/nameSpaceRequest.h + + + + + + + + + + + + + + + + + + + + + + + + + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +namespacedabfg +{ + +enumclassHistory:uint8_t +{ +No, + +ClearZeroOnFirstFrame, + +DiscardOnFirstFrame +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/index.xml b/breathe/doxygen/daBFG/xml/index.xml new file mode 100644 index 000000000..ee1bcf764 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/index.xml @@ -0,0 +1,441 @@ + + + dabfg::AutoResolutionRequest + NameSpaceRequest + detail::VirtualResourceRequestBase + autoResTypeId + multiplier + provider + AutoResolutionRequest + get + + dabfg::BufferCreateInfo + elementSize + elementCount + flags + format + + dabfg::multiplexing::Extents + superSamples + subSamples + viewports + + dabfg::ExternalState + wireframeModeEnabled + vrsEnabled + + eastl::hash< dabfg::NameSpace > + operator() + + dabfg::multiplexing::Index + superSample + subSample + viewport + operator== + + dabfg::detail::IPointImpl + + dabfg::detail::IPointImpl< 2 > + Value + + dabfg::detail::IPointImpl< 3 > + Value + + dabfg::NamedSlot + name + NamedSlot + + dabfg::NameSpace + eastl::hash< NameSpace > + root + operator== + operator< + nameId + NameSpace + NameSpace + resolveName + operator/ + registerNode + setResolution + setDynamicResolution + fillSlot + updateExternallyConsumedResourceSet + updateExternallyConsumedResourceSet + markResourceExternallyConsumed + unmarkResourceExternallyConsumed + _make_namespace + + dabfg::NameSpaceRequest + read + read + historyFor + modify + modify + rename + readTexture + readTexture + readTextureHistory + modifyTexture + modifyTexture + renameTexture + readBlob + readBlobHistory + modifyBlob + renameBlob + RRP + VirtualTextureRequest + VirtualBufferRequest + VirtualBlobRequest + Registry + NewRwRequestPolicy + NewRoRequestPolicy + NewHistRequestPolicy + nameSpaceId + nodeId + registry + NameSpaceRequest + operator/ + getResolution + + dabfg::NodeHandle + NameSpace + register_external_node + uid + NodeHandle + NodeHandle + NodeHandle + operator= + NodeHandle + operator= + ~NodeHandle + valid + operator bool + + dabfg::Registry + create + registerTexture2d + registerBackBuffer + registerBuffer + historyFor + modify + modify + read + read + rename + createTexture2d + createBlob + modifyBlob + modifyTexture + modifyTexture + readBlob + readBlobHistory + readTexture + readTexture + readTextureHistory + renameBlob + renameTexture + NameSpace + Registry + registerTexture2dImpl + registerBufferImpl + allowAsyncPipelines + orderMeBefore + orderMeBefore + orderMeAfter + orderMeAfter + setPriority + multiplex + executionHas + requestState + requestRenderPass + currNameSpace + root + getResolution + + dabfg::StateRequest + Registry + id + registry + StateRequest + setFrameBlock + setSceneBlock + setObjectBlock + allowWireframe + vrs + enableOverride + + dabfg::Texture2dCreateInfo + creationFlags + resolution + mipLevels + + dabfg::Texture3dCreateInfo + creationFlags + resolution + mipLevels + + dabfg::detail::VirtualAttachmentRequest + RRP + dabfg::VirtualPassRequest + image + mipLevel + layer + policyAllowed + policyAllowed + VirtualAttachmentRequest + VirtualAttachmentRequest + VirtualAttachmentRequest + VirtualAttachmentRequest + + dabfg::VirtualPassRequest + RRP + RwVirtualAttachmentRequest + ColorRwVirtualAttachmentRequest + DepthRoVirtualAttachmentRequest + DepthRoAndSvBindVirtualAttachmentRequest + RoVirtualAttachmentRequest + Registry + nodeId + registry + VirtualPassRequest + getResUidForAttachment + blobClearImpl + color + depthRw + depthRo + depthRoAndBindToShaderVars + clear + clear + clear + resolve + vrsRate + area + + dabfg::VirtualResourceCreationSemiRequest + byteAddressBufferUaSr + byteAddressBufferUa + structuredBufferUaSr + structuredBufferUa + indirectBufferUa + indirectBuffer + Base + RRP + Registry + VirtualResourceCreationSemiRequest + texture + texture + buffer + blob + blob + + dabfg::VirtualResourceHandle + Base + ResNoConst + View + VirtualResourceRequest + VirtualResourceHandle + ref + get + view + d3dResId + + dabfg::VirtualResourceRequest + Base + RRP + HandleType + is_gpu + detail::VirtualAttachmentRequest + VirtualResourceRequest + VirtualResourceCreationSemiRequest + VirtualResourceSemiRequest + Registry + VirtualResourceRequest + hasPolicy + hasPolicy + flipPolicy + optional + bindToShaderVar + bindToShaderVar + bindAsView + bindAsView + bindAsProj + bindAsProj + atStage + useAs + handle + + dabfg::VirtualResourceSemiRequest + Base + StateRequest + NameSpaceRequest + VirtualResourceSemiRequest + texture + buffer + blob + + dabfg::VrsSettings + rateX + rateY + vertexCombiner + pixelCombiner + + dabfg + SideEffects + None + Internal + External + Stage + UNKNOWN + PRE_RASTER + POST_RASTER + COMPUTE + TRANSFER + RAYTRACE + PS + VS + CS + PS_OR_CS + ALL_GRAPHICS + ALL_INDIRECTION + History + No + ClearZeroOnFirstFrame + DiscardOnFirstFrame + Usage + UNKNOWN + COLOR_ATTACHMENT + INPUT_ATTACHMENT + DEPTH_ATTACHMENT + DEPTH_ATTACHMENT_AND_SHADER_RESOURCE + RESOLVE_ATTACHMENT + SHADER_RESOURCE + CONSTANT_BUFFER + INDEX_BUFFER + VERTEX_BUFFER + COPY + BLIT + INDIRECTION_BUFFER + VRS_RATE_TEXTURE + ExternalResource + ExternalResourceProvider + IPoint + priority_t + AUTO_MIP_COUNT + PRIO_DEFAULT + PRIO_AS_LATE_AS_POSSIBLE + PRIO_AS_EARLY_AS_POSSIBLE + operator| + operator|= + operator& + stagesSubsetOf + root + set_multiplexing_extents + run_nodes + startup + shutdown + invalidate_history + update_external_state + mark_external_resource_for_validation + register_node + set_resolution + set_dynamic_resolution + fill_slot + update_externally_consumed_resource_set + update_externally_consumed_resource_set + mark_resource_externally_consumed + unmark_resource_externally_consumed + + dabfg::detail + + dabfg::multiplexing + Mode + None + SuperSampling + SubSampling + Viewport + FullMultiplex + operator| + + eastl + + autoResolutionRequest.h + + bfg.h + + externalResources.h + + externalState.h + + history.h + + multiplexing.h + + nameSpace.h + DABFG_PP_NODE_SRC + + nameSpaceRequest.h + + nodeHandle.h + + priority.h + + registry.h + + resourceCreation.h + + sideEffects.h + + stage.h + + stateRequest.h + + usage.h + + variableRateShading.h + + virtualPassRequest.h + ENABLE_IF + + virtualResourceCreationSemiRequest.h + + virtualResourceHandle.h + REQUIRE + + virtualResourceRequest.h + REQUIRE_IMPL + REQUIRE + + virtualResourceSemiRequest.h + + DabfgCore + root + set_multiplexing_extents + run_nodes + startup + shutdown + invalidate_history + update_external_state + mark_external_resource_for_validation + DABFG_PP_NODE_SRC + + DabfgCoreAliases + register_node + set_resolution + set_dynamic_resolution + fill_slot + update_externally_consumed_resource_set + update_externally_consumed_resource_set + mark_resource_externally_consumed + unmark_resource_externally_consumed + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs + + /home/runner/work/DagorEngine/DagorEngine/prog + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render + + diff --git a/breathe/doxygen/daBFG/xml/index.xsd b/breathe/doxygen/daBFG/xml/index.xsd new file mode 100644 index 000000000..edb1d347d --- /dev/null +++ b/breathe/doxygen/daBFG/xml/index.xsd @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/daBFG/xml/multiplexing_8h.xml b/breathe/doxygen/daBFG/xml/multiplexing_8h.xml new file mode 100644 index 000000000..335f88f01 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/multiplexing_8h.xml @@ -0,0 +1,120 @@ + + + + multiplexing.h + EASTL/utility.h + math/integer/dag_IPoint2.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/registry.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/bfg.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/externalResources.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::multiplexing::Extents + dabfg::multiplexing::Index + dabfg + dabfg::multiplexing + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<EASTL/utility.h> +#include<math/integer/dag_IPoint2.h> + +namespacedabfg::multiplexing +{ + +structExtents +{ +uint32_tsuperSamples{1}; +uint32_tsubSamples{1}; +uint32_tviewports{1}; +}; + +structIndex +{ +uint32_tsuperSample{0}; +uint32_tsubSample{0}; +uint32_tviewport{0}; + +booloperator==(constIndex&other) +{ +returnsuperSample==other.superSample&&subSample==other.subSample&&viewport==other.viewport; +} +}; + +enumclassMode:uint32_t +{ +None=0b000, + +SuperSampling=0b001, +SubSampling=0b010, +Viewport=0b100, + + +FullMultiplex=SuperSampling|SubSampling|Viewport, +}; + +inlineModeoperator|(Modea,Modeb){returnstatic_cast<Mode>(eastl::to_underlying(a)|eastl::to_underlying(b));} + +}//namespacedabfg::multiplexing + + + + diff --git a/breathe/doxygen/daBFG/xml/name_space_8h.xml b/breathe/doxygen/daBFG/xml/name_space_8h.xml new file mode 100644 index 000000000..3549de462 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/name_space_8h.xml @@ -0,0 +1,190 @@ + + + + nameSpace.h + EASTL/span.h + EASTL/functional.h + render/daBfg/detail/nameSpaceNameId.h + render/daBfg/detail/bfg.h + render/daBfg/nodeHandle.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/bfg.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::NameSpace + eastl::hash< dabfg::NameSpace > + dabfg + eastl + + + DABFG_PP_NODE_SRC + (__FILE__ ":" DABFG_PP_STRINGIZE(__LINE__)) + +A macro that expands to the current source location. Should always be provided to dabfg::register_node as the source_location parameter. + + + + + + + + + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<EASTL/span.h> +#include<EASTL/functional.h> + +#include<render/daBfg/detail/nameSpaceNameId.h> +#include<render/daBfg/detail/bfg.h> +#include<render/daBfg/nodeHandle.h> + + +namespacedabfg +{ + +#defineDABFG_PP_STRINGIZE2(x)#x +#defineDABFG_PP_STRINGIZE(x)DABFG_PP_STRINGIZE2(x) + +#defineDABFG_PP_NODE_SRC(__FILE__":"DABFG_PP_STRINGIZE(__LINE__)) + + +classNameSpace +{ +friendNameSpaceroot(); +friendstructeastl::hash<NameSpace>; + +NameSpace(); +NameSpace(NameSpaceNameIdnid); + +public: +NameSpaceoperator/(constchar*child_name)const; + +template<classF> +[[nodiscard]]NodeHandleregisterNode(constchar*name,constchar*source_location,F&&declaration_callback)const +{ +//Underhighoptimizationsettings,thedeclCb/execCbcallswillget +//inlined,thereforenoperfloss,exceptfortypeerasurelater +//downtheline. +autouid=detail::register_node(nameId,name,source_location, +[declCb=eastl::forward<F>(declaration_callback)](NodeNameIdnodeId,InternalRegistry*r){ +usingExecCb=eastl::invoke_result_t<F,Registry>; +ifconstexpr(eastl::is_invocable_v<ExecCb,multiplexing::Index>) +{ +returndeclCb({nodeId,r}); +} +elseifconstexpr(eastl::is_void_v<ExecCb>) +{ +Registry(nodeId,r).executionHas(SideEffects::None); +declCb({nodeId,r}); +return[](multiplexing::Index){;}; +} +else +{ +return[execCb=declCb({nodeId,r})](multiplexing::Index){execCb();}; +} +}); +return{uid}; +} + +template<classT> +voidsetResolution(constchar*type_name,Tvalue); + +template<classT> +voidsetDynamicResolution(constchar*type_name,Tvalue); + +voidfillSlot(NamedSlotslot,NameSpaceres_name_space,constchar*res_name); + +voidupdateExternallyConsumedResourceSet(eastl::span<constchar*const>res_names); + +voidupdateExternallyConsumedResourceSet(std::initializer_list<constchar*>res_names) +{ +updateExternallyConsumedResourceSet(eastl::span<constchar*const>(res_names.begin(),res_names.size())); +} + +voidmarkResourceExternallyConsumed(constchar*res_name); + +voidunmarkResourceExternallyConsumed(constchar*res_name); + +friendbooloperator==(constNameSpace&fst,constNameSpace&snd){returnfst.nameId==snd.nameId;} + +friendbooloperator<(constNameSpace&fst,constNameSpace&snd){returnfst.nameId<snd.nameId;} + +inlinestaticNameSpace_make_namespace(dabfg::NameSpaceNameIdnid){return{nid};} + +private: +autoresolveName(constchar*name)const; + +NameSpaceNameIdnameId; +}; + +}//namespacedabfg + +namespaceeastl +{ + +template<> +structhash<dabfg::NameSpace> +{ +size_toperator()(dabfg::NameSpacens)const +{ +returneastl::hash<eastl::underlying_type_t<dabfg::NameSpaceNameId>>{}(eastl::to_underlying(ns.nameId)); +} +}; + +}//namespaceeastl + + + + diff --git a/breathe/doxygen/daBFG/xml/name_space_request_8h.xml b/breathe/doxygen/daBFG/xml/name_space_request_8h.xml new file mode 100644 index 000000000..6aa94f141 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/name_space_request_8h.xml @@ -0,0 +1,262 @@ + + + + nameSpaceRequest.h + render/daBfg/detail/nameSpaceNameId.h + render/daBfg/history.h + render/daBfg/externalResources.h + render/daBfg/virtualResourceSemiRequest.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/registry.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::NameSpaceRequest + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<render/daBfg/detail/nameSpaceNameId.h> + +#include<render/daBfg/history.h> +#include<render/daBfg/externalResources.h> +#include<render/daBfg/virtualResourceSemiRequest.h> + + +namespacedabfg +{ + +classNameSpaceRequest +{ +friendclassRegistry; + +NameSpaceRequest(NameSpaceNameIdns,NodeNameIdnode,InternalRegistry*reg):nameSpaceId{ns},nodeId{node},registry{reg}{} + +usingRRP=detail::ResourceRequestPolicy; + +staticconstexprRRPNewRwRequestPolicy=RRP::None; +staticconstexprRRPNewRoRequestPolicy=RRP::Readonly; +staticconstexprRRPNewHistRequestPolicy=RRP::Readonly|RRP::History; + + +template<RRPpolicy> +usingVirtualTextureRequest=VirtualResourceRequest<BaseTexture, policy>; + +template<RRPpolicy> +usingVirtualBufferRequest=VirtualResourceRequest<Sbuffer, policy>; + +template<classT,RRPpolicy> +usingVirtualBlobRequest=VirtualResourceRequest<T, policy>; + + +public: +NameSpaceRequestoperator/(constchar*child_name)const; + +template<intD> +AutoResolutionRequest<D>getResolution(constchar*type_name,floatmultiplier=1.f)const; + + +VirtualResourceSemiRequest<NewRoRequestPolicy>read(constchar*name)const; + +VirtualResourceSemiRequest<NewRoRequestPolicy>read(NamedSlotslot_name)const; + +VirtualResourceSemiRequest<NewHistRequestPolicy>historyFor(constchar*name)const; + +VirtualResourceSemiRequest<NewRwRequestPolicy>modify(constchar*name)const; + +VirtualResourceSemiRequest<NewRwRequestPolicy>modify(NamedSlotslot_name)const; + +VirtualResourceSemiRequest<NewRwRequestPolicy>rename(constchar*from,constchar*to,Historyhistory)const; + + + +VirtualTextureRequest<NewRoRequestPolicy>readTexture(constchar*name)const{returnread(name).texture();} + +VirtualTextureRequest<NewRoRequestPolicy>readTexture(NamedSlotslot_name)const{returnread(slot_name).texture();} + +VirtualTextureRequest<NewHistRequestPolicy>readTextureHistory(constchar*name)const{returnhistoryFor(name).texture();} + +VirtualTextureRequest<NewRwRequestPolicy>modifyTexture(constchar*name)const{returnmodify(name).texture();} + +VirtualTextureRequest<NewRwRequestPolicy>modifyTexture(NamedSlotslot_name)const{returnmodify(slot_name).texture();} + +VirtualTextureRequest<NewRwRequestPolicy>renameTexture(constchar*from,constchar*to,Historyhistory)const +{ +returnrename(from,to,history).texture(); +} + +template<classT> +VirtualBlobRequest<T, NewRoRequestPolicy>readBlob(constchar*name)const +{ +returnread(name).blob<T>(); +} + +template<classT> +VirtualBlobRequest<T, NewHistRequestPolicy>readBlobHistory(constchar*name)const +{ +returnhistoryFor(name).blob<T>(); +} + +template<classT> +VirtualBlobRequest<T, NewRwRequestPolicy>modifyBlob(constchar*name)const +{ +returnmodify(name).blob<T>(); +} + +template<classT> +VirtualBlobRequest<T, NewRwRequestPolicy>renameBlob(constchar*from,constchar*to,Historyhistory)const +{ +returnrename(from,to,history).blob<T>(); +} + + +private: +NameSpaceNameIdnameSpaceId; +NodeNameIdnodeId; +InternalRegistry*registry; +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/namespacedabfg.xml b/breathe/doxygen/daBFG/xml/namespacedabfg.xml new file mode 100644 index 000000000..622461110 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/namespacedabfg.xml @@ -0,0 +1,875 @@ + + + + dabfg + dabfg::VirtualResourceHandle + dabfg::StateRequest + dabfg::NamedSlot + dabfg::Texture2dCreateInfo + dabfg::Texture3dCreateInfo + dabfg::BufferCreateInfo + dabfg::Registry + dabfg::ExternalState + dabfg::VirtualResourceRequest + dabfg::VirtualResourceCreationSemiRequest + dabfg::AutoResolutionRequest + dabfg::NameSpaceRequest + dabfg::VrsSettings + dabfg::VirtualPassRequest + dabfg::VirtualResourceSemiRequest + dabfg::NameSpace + dabfg::NodeHandle + dabfg::detail + dabfg::multiplexing + + + uint8_t + SideEffects + + None + +Node has an empty execution callback that can safely be skipped. + + + + + + Internal + +Default: node only accesses daBfg state and may be culled away. + + + + + + External + +Node has side effects outside daBfg and will never be culled away. + + + + + +Specified the side effects of executing a node. + + + + + + + + + uint8_t + Stage + + UNKNOWN + = 0 + + + +For legacy code only. Will suppress a barrier before this usage and force a barrier after this usage. + + + + PRE_RASTER + = 1u << 0 + + + +All pre-rasterization stages: indirect draw reading, vertex input, vertex shader, geometry shader, tesselation shaders, mesh shaders. + + + + POST_RASTER + = 1u << 1 + + + +All post-rasterization stages: early tests, fragment shader, late tests, attachment output. + + + + COMPUTE + = 1u << 2 + +Copute dispatches. + + + + + + TRANSFER + = 1u << 3 + +Blit and copy operations. + + + + + + RAYTRACE + = 1u << 4 + +All raytrace shaders. + + + + + + PS + = POST_RASTER + + + +Aliases for simple use-cases. Note however that even though all PS usages are POST_RASTER, but not all POST_RASTER usages are from the pixel shader (PS). Use with caution so as not to confuse the reader of your code. + + + + VS + = PRE_RASTER + + + + + + + CS + = COMPUTE + + + + + + + PS_OR_CS + = PS | CS + + + + + + + ALL_GRAPHICS + = PRE_RASTER | POST_RASTER + +Anything graphics-related. + + + + + + ALL_INDIRECTION + = PRE_RASTER | COMPUTE | RAYTRACE + +Reads from inderection buffers can only happen during one of these stages. + + + + + +Describes a GPU pipeline stage at which a resource is accessed. Part of the information required for daBfg to place barriers. Note that this is a flags enum, so you can combine multiple stages. + + + + + + + + + uint8_t + History + + No + +Resource does not need history, requesting it will result in an error message. + + + + + + ClearZeroOnFirstFrame + + + +History is required and should be an all-zero image on the first frame. This might be slow, so should only be used when necessary. NOTE: for CPU-resources, this simply default-constructs them + + + + DiscardOnFirstFrame + + + +History is required and it doesn't matter what it contains on the first frame This is the preferred variant as it is faster, but it might cause artifacts and trash value propagation for cumulative type algorithms. NOTE: for CPU-resources, this simply default-constructs them + + + +History policy for a resource. Must always be specified on creation. + + + + + + + + + uint8_t + Usage + + UNKNOWN + + + +For legacy code only, will suppress a barrier before this usage and force a barrier after this usage. + + + + COLOR_ATTACHMENT + +Regular render target. + + + + + + INPUT_ATTACHMENT + +Vulkan only: subpass input attachment. + + + + + + DEPTH_ATTACHMENT + +Depth buffer. + + + + + + DEPTH_ATTACHMENT_AND_SHADER_RESOURCE + + + +A special read-only usage type that allows a texture to be used as a read-only depth target as well as a sampled image simultaneously. + + + + RESOLVE_ATTACHMENT + +Vulkan only: automatic MSAA resolve inside a subpass. + + + + + + SHADER_RESOURCE + + + +Any type of shader resource, i.e. a sampled image or a storage buffer/texture in terms of vulkan and an SRV or a UAV in terms of directX. + + + + CONSTANT_BUFFER + + + +Special type of shader resource that is limited in size but is faster to read. Marked as cbuffer in shaders. + + + + INDEX_BUFFER + +Index buffer for a draw primitive. + + + + + + VERTEX_BUFFER + +Vertex buffer for a draw primitive. + + + + + + COPY + +Either the source or the destination of a copy operation. + + + + + + BLIT + +Either the source or the destination of a blit operation. + + + + + + INDIRECTION_BUFFER + +A buffer used for an indirect draw/dispatch/raytrace primitive. + + + + + + VRS_RATE_TEXTURE + +A texture used for determining variable shading rate for regions. + + + + + +Describes the way a node uses a resource. Part of the information required for daBfg to place barriers. + + + + + + + + + + + eastl::variant< ManagedTexView, ManagedBufView > + using dabfg::ExternalResource = typedef eastl::variant<ManagedTexView, ManagedBufView> + + ExternalResource + +A concrete physical resource provided to daBfg for external virtual resource on a particular multiplexing iteration. + + + + + + + + + dag::FixedMoveOnlyFunction< 32, ExternalResource(const multiplexing::Index &) const > + using dabfg::ExternalResourceProvider = typedef dag::FixedMoveOnlyFunction<32, ExternalResource(const multiplexing::Index &) const> + + ExternalResourceProvider + +A callback that provides a physical resource to daBfg for a particular external virtual resource on a particular multiplexing iteration. Note that if a node that registers this virtual resource is multiplexed along any dimension, this callback will be called multiple times and must return different values each time. + + + + + + + + + + + int + D + D + + + typename detail::IPointImpl< D >::Value + using dabfg::IPoint = typedef typename detail::IPointImpl<D>::Value + + IPoint + + + + + + + + + + int32_t + using dabfg::priority_t = typedef int32_t + + priority_t + +Type for daBfg node execution priorities. + + + + + + + + + + + constexpr int + constexpr int dabfg::AUTO_MIP_COUNT + + AUTO_MIP_COUNT + = 0 + +Special value for Texture2dCreateInfo::mipLevels. daBfg will automatically generate all mip levels for such a texture. + + + + + + + + + constexpr priority_t + constexpr priority_t dabfg::PRIO_DEFAULT + + PRIO_DEFAULT + = 0 + +Default priority that is used when none is specified explicitly. + + + + + + + + + constexpr priority_t + constexpr priority_t dabfg::PRIO_AS_LATE_AS_POSSIBLE + + PRIO_AS_LATE_AS_POSSIBLE + = eastl::numeric_limits<priority_t>::max() + +Max priority: the node will be executed as late as possible. + + + + + + + + + constexpr priority_t + constexpr priority_t dabfg::PRIO_AS_EARLY_AS_POSSIBLE + + PRIO_AS_EARLY_AS_POSSIBLE + = eastl::numeric_limits<priority_t>::min() + +Min priority: the node will be executed as early as possible. + + + + + + + + + + + constexpr Stage + constexpr Stage dabfg::operator| + (Stage a, Stage b) + operator| + + Stage + a + + + Stage + b + + + + + + + + + + + constexpr Stage & + constexpr Stage& dabfg::operator|= + (Stage &a, Stage b) + operator|= + + Stage & + a + + + Stage + b + + + + + + + + + + + constexpr Stage + constexpr Stage dabfg::operator& + (Stage a, Stage b) + operator& + + Stage + a + + + Stage + b + + + + + + + + + + + constexpr bool + constexpr bool dabfg::stagesSubsetOf + (Stage subset, Stage superset) + stagesSubsetOf + + Stage + subset + + + Stage + superset + + + + + + + + + + + NameSpace + NameSpace dabfg::root + () + root + +Creates a namespace object for the root frame graph namespace. + + +The object representing the root namespace. + + + + + + + + + void + void dabfg::set_multiplexing_extents + (multiplexing::Extents extents) + set_multiplexing_extents + + multiplexing::Extents + extents + + +Sets the multiplexing extents for the following frames. + + +May safely be called every frame, only triggers a recompilation when the values actually change + + + + + + + bool + bool dabfg::run_nodes + () + run_nodes + +Executes the frame graph, possibly recompiling it. + + +Return false if run is not possible (d3d device was lost for example) + + + + + + + void + void dabfg::startup + () + startup + +Initializes the daBfg backend. + + + + + + + + + void + void dabfg::shutdown + () + shutdown + +Frees resources held by the daBfg backend. + + + + + + + + + void + void dabfg::invalidate_history + () + invalidate_history + +Invalidates history. + + +When making changes to the graph history is generally preserved calling this function makes this preservation invalid and the history resources will be recreated. + + + + + + + void + void dabfg::update_external_state + (ExternalState state) + update_external_state + + ExternalState + state + + +Sets various global state that is external to daBfg. + + + + + + + + + void + void dabfg::mark_external_resource_for_validation + (const D3dResource *resource) + mark_external_resource_for_validation + + const D3dResource * + resource + + +Marks an external resource to be validated for illegal access within nodes. Note that daBfg-managed resources are always automatically validated for illegal access through sneaky global variables, but external are often used for gradual migration to FG, at which point they are indeed illegally accessed through global state and that is intended. + + + + +resource + + +The name of the resource to be validated. + + + + + + + + + + + + + class F + + + NodeHandle + NodeHandle dabfg::register_node + (const char *name, const char *source_location, F &&declaration_callback) + register_node + + const char * + name + + + const char * + source_location + + + F && + declaration_callback + + +Alias for dabfg::root().registerNode, see NameSpace::registerNode. + + + + + + + + + + + class T + + + void + void dabfg::set_resolution + (const char *typeName, T value) + set_resolution + + const char * + typeName + + + T + value + + +Alias for dabfg::root().setResolution, see NameSpace::setResolution. + + + + + + + + + + + class T + + + void + void dabfg::set_dynamic_resolution + (const char *typeName, T value) + set_dynamic_resolution + + const char * + typeName + + + T + value + + +Alias for dabfg::root().setDynamicResolution, see NameSpace::setDynamicResolution. + + + + + + + + + void + void dabfg::fill_slot + (NamedSlot slot, const char *res_name) + fill_slot + + NamedSlot + slot + + + const char * + res_name + + +Alias for dabfg::root().fillSlot(slot, dabfg::root(), res_name), see NameSpace::fillSlot. + + + + + + + + + void + void dabfg::update_externally_consumed_resource_set + (eastl::span< const char *const > res_names) + update_externally_consumed_resource_set + + eastl::span< const char *const > + res_names + + +Alias for dabfg::root().updateExternallyConsumedResourceSet, see NameSpace::updateExternallyConsumedResourceSet(eastl::span<const char *const> res_names) + + + + + + + + + void + void dabfg::update_externally_consumed_resource_set + (std::initializer_list< const char * > res_names) + update_externally_consumed_resource_set + + std::initializer_list< const char * > + res_names + + + + + + + + + + + void + void dabfg::mark_resource_externally_consumed + (const char *res_name) + mark_resource_externally_consumed + + const char * + res_name + + +Alias for dabfg::root().markResourceExternallyConsumed, see NameSpace::markResourceExternallyConsumed. + + + + + + + + + void + void dabfg::unmark_resource_externally_consumed + (const char *res_name) + unmark_resource_externally_consumed + + const char * + res_name + + +Alias for dabfg::root().unmarkResourceExternallyConsumed, see NameSpace::unmarkResourceExternallyConsumed. + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/daBFG/xml/namespacedabfg_1_1detail.xml b/breathe/doxygen/daBFG/xml/namespacedabfg_1_1detail.xml new file mode 100644 index 000000000..db902ebf4 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/namespacedabfg_1_1detail.xml @@ -0,0 +1,15 @@ + + + + dabfg::detail + dabfg::detail::VirtualAttachmentRequest + dabfg::detail::IPointImpl + dabfg::detail::IPointImpl< 2 > + dabfg::detail::IPointImpl< 3 > + + + + + + + diff --git a/breathe/doxygen/daBFG/xml/namespacedabfg_1_1multiplexing.xml b/breathe/doxygen/daBFG/xml/namespacedabfg_1_1multiplexing.xml new file mode 100644 index 000000000..d7d3b34b5 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/namespacedabfg_1_1multiplexing.xml @@ -0,0 +1,97 @@ + + + + dabfg::multiplexing + dabfg::multiplexing::Extents + dabfg::multiplexing::Index + + + uint32_t + Mode + + None + = 0b000 + +Run once, ignore multiplexing (i.e. global setup) + + + + + + SuperSampling + = 0b001 + +Run the node for every super-sample. + + + + + + SubSampling + = 0b010 + +Run the node for every sub-sample. + + + + + + Viewport + = 0b100 + +Run the node once for every viewport. + + + + + + FullMultiplex + = SuperSampling | SubSampling | Viewport + +Default: everything is multiplexed (normal scene rendering nodes) + + + + + +Describes the dimensions along which a node shall be multiplexed. + + + + + + + + + + + Mode + Mode dabfg::multiplexing::operator| + (Mode a, Mode b) + operator| + + Mode + a + + + Mode + b + + +Bitwise OR operator for combining several modes. + + + + + + + + + +Multiplexing allows a single run_nodes call to result in several consequent executions of frameGraph with some nodes being run only once. As an example, when rendering for VR, shadows need to be rendered only once, not for every eye/viewport, while most scene geometry should be rendered for every viewport/eye. + + + + + + diff --git a/breathe/doxygen/daBFG/xml/namespaceeastl.xml b/breathe/doxygen/daBFG/xml/namespaceeastl.xml new file mode 100644 index 000000000..009525efd --- /dev/null +++ b/breathe/doxygen/daBFG/xml/namespaceeastl.xml @@ -0,0 +1,12 @@ + + + + eastl + eastl::hash< dabfg::NameSpace > + + + + + + + diff --git a/breathe/doxygen/daBFG/xml/node_handle_8h.xml b/breathe/doxygen/daBFG/xml/node_handle_8h.xml new file mode 100644 index 000000000..915d1b3a3 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/node_handle_8h.xml @@ -0,0 +1,103 @@ + + + + nodeHandle.h + render/daBfg/detail/bfg.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/bfg.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/nameSpace.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::NodeHandle + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<render/daBfg/detail/bfg.h> + + +namespacedabfg +{ + +classNodeHandle +{ +friendclassNameSpace; +friendNodeHandleregister_external_node(NodeNameIdname_id,uint16_tgeneration); + +NodeHandle(detail::NodeUidid):uid{id}{} + +public: +NodeHandle()=default; + +NodeHandle(constNodeHandle&)=delete; +NodeHandle&operator=(constNodeHandle&)=delete; + +NodeHandle(NodeHandle&&other):uid{eastl::exchange(other.uid,detail::NodeUid{})}{} + +NodeHandle&operator=(NodeHandle&&other) +{ +if(this==&other) +return*this; + +if(uid.valid) +detail::unregister_node(uid); + +uid=eastl::exchange(other.uid,detail::NodeUid{}); + +return*this; +} + +~NodeHandle() +{ +if(uid.valid) +detail::unregister_node(uid); +} + +boolvalid()const{returnuid.valid;} +explicitoperatorbool()const{returnthis->valid();} + +private: +detail::NodeUiduid{}; +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/priority_8h.xml b/breathe/doxygen/daBFG/xml/priority_8h.xml new file mode 100644 index 000000000..0a449ec5a --- /dev/null +++ b/breathe/doxygen/daBFG/xml/priority_8h.xml @@ -0,0 +1,66 @@ + + + + priority.h + EASTL/numeric_limits.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/registry.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<EASTL/numeric_limits.h> + + +namespacedabfg +{ + +usingpriority_t=int32_t; + +inlineconstexprpriority_tPRIO_DEFAULT=0; + +inlineconstexprpriority_tPRIO_AS_LATE_AS_POSSIBLE=eastl::numeric_limits<priority_t>::max(); + +inlineconstexprpriority_tPRIO_AS_EARLY_AS_POSSIBLE=eastl::numeric_limits<priority_t>::min(); + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/registry_8h.xml b/breathe/doxygen/daBFG/xml/registry_8h.xml new file mode 100644 index 000000000..4da5a2126 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/registry_8h.xml @@ -0,0 +1,365 @@ + + + + registry.h + render/daBfg/stateRequest.h + render/daBfg/virtualPassRequest.h + render/daBfg/multiplexing.h + render/daBfg/externalResources.h + render/daBfg/priority.h + render/daBfg/sideEffects.h + render/daBfg/nameSpaceRequest.h + render/daBfg/virtualResourceCreationSemiRequest.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/bfg.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::Registry + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<render/daBfg/stateRequest.h> +#include<render/daBfg/virtualPassRequest.h> +#include<render/daBfg/multiplexing.h> +#include<render/daBfg/externalResources.h> +#include<render/daBfg/priority.h> +#include<render/daBfg/sideEffects.h> +#include<render/daBfg/nameSpaceRequest.h> +#include<render/daBfg/virtualResourceCreationSemiRequest.h> + + +namespacedabfg +{ +classNodeTracker; +}//namespacedabfg + +namespacedabfg +{ + +classNodeHandle; + +classRegistryfinal:privateNameSpaceRequest +{ +friendclassNameSpace; + +Registry(NodeNameIdnode,InternalRegistry*reg); + +public: +RegistryallowAsyncPipelines(); + +RegistryorderMeBefore(constchar*name); + +RegistryorderMeBefore(std::initializer_list<constchar*>names); + +RegistryorderMeAfter(constchar*name); + +RegistryorderMeAfter(std::initializer_list<constchar*>names); + +RegistrysetPriority(priority_tprio); + +Registrymultiplex(multiplexing::Modemode); + +RegistryexecutionHas(SideEffectsside_effect); + +StateRequestrequestState(); + +VirtualPassRequestrequestRenderPass(); + +NameSpaceRequestcurrNameSpace(){return*this;} + +NameSpaceRequestroot()const; + +usingNameSpaceRequest::getResolution; + + +VirtualResourceCreationSemiRequestcreate(constchar*name,Historyhistory); + +template<classF> +VirtualTextureRequest<NewRwRequestPolicy>registerTexture2d(constchar*name,F&&texture_provider_callback) +{ +autouid=registerTexture2dImpl(name, +[impl=eastl::forward<F>(texture_provider_callback)](constmultiplexing::Index&mIdx){returnExternalResource(impl(mIdx));}); +return{uid,nodeId,registry}; +} + +VirtualTextureRequest<NewRwRequestPolicy>registerBackBuffer(constchar*name); + +template<classF> +VirtualBufferRequest<NewRwRequestPolicy>registerBuffer(constchar*name,F&&buffer_provider_callback) +{ +autouid=registerBufferImpl(name, +[impl=eastl::forward<F>(buffer_provider_callback)](constmultiplexing::Index&mIdx){returnExternalResource(impl(mIdx));}); +return{uid,nodeId,registry}; +} + +usingNameSpaceRequest::historyFor; +usingNameSpaceRequest::modify; +usingNameSpaceRequest::read; +usingNameSpaceRequest::rename; + + + + +VirtualTextureRequest<NewRwRequestPolicy>createTexture2d(constchar*name,Historyhistory,Texture2dCreateInfoinfo) +{ +returncreate(name,history).texture(info); +} + +template<classT> +VirtualBlobRequest<T, NewRwRequestPolicy>createBlob(constchar*name,Historyhistory) +{ +returncreate(name,history).blob<T>(); +} + +usingNameSpaceRequest::modifyBlob; +usingNameSpaceRequest::modifyTexture; +usingNameSpaceRequest::readBlob; +usingNameSpaceRequest::readBlobHistory; +usingNameSpaceRequest::readTexture; +usingNameSpaceRequest::readTextureHistory; +usingNameSpaceRequest::renameBlob; +usingNameSpaceRequest::renameTexture; + + +private: +detail::ResUidregisterTexture2dImpl(constchar*name,dabfg::ExternalResourceProvider&&p); +detail::ResUidregisterBufferImpl(constchar*name,dabfg::ExternalResourceProvider&&p); +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/resource_creation_8h.xml b/breathe/doxygen/daBFG/xml/resource_creation_8h.xml new file mode 100644 index 000000000..04c7787da --- /dev/null +++ b/breathe/doxygen/daBFG/xml/resource_creation_8h.xml @@ -0,0 +1,111 @@ + + + + resourceCreation.h + math/integer/dag_IPoint2.h + math/integer/dag_IPoint3.h + EASTL/variant.h + drv/3d/dag_buffers.h + render/daBfg/autoResolutionRequest.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::NamedSlot + dabfg::Texture2dCreateInfo + dabfg::Texture3dCreateInfo + dabfg::BufferCreateInfo + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<math/integer/dag_IPoint2.h> +#include<math/integer/dag_IPoint3.h> +#include<EASTL/variant.h> +#include<drv/3d/dag_buffers.h> + +#include<render/daBfg/autoResolutionRequest.h> + + +namespacedabfg +{ + +structNamedSlot +{ +constchar*name; + +explicitNamedSlot(constchar*slot_name):name(slot_name){} +}; + +inlineconstexprintAUTO_MIP_COUNT=0; + +structTexture2dCreateInfo +{ +uint32_tcreationFlags=0; +eastl::variant<IPoint2,AutoResolutionRequest<2>>resolution; +uint32_tmipLevels=1; +}; + +structTexture3dCreateInfo +{ +uint32_tcreationFlags=0; +eastl::variant<IPoint3,AutoResolutionRequest<3>>resolution; +uint32_tmipLevels=1; +}; + +structBufferCreateInfo +{ +uint32_telementSize; +uint32_telementCount; +uint32_tflags; +uint32_tformat; +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/side_effects_8h.xml b/breathe/doxygen/daBFG/xml/side_effects_8h.xml new file mode 100644 index 000000000..12a625ae7 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/side_effects_8h.xml @@ -0,0 +1,50 @@ + + + + sideEffects.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/registry.h + + + + + + + + + + + + + + + + + + + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +namespacedabfg +{ + +enumclassSideEffects:uint8_t +{ +None, +Internal, +External +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/stage_8h.xml b/breathe/doxygen/daBFG/xml/stage_8h.xml new file mode 100644 index 000000000..cbdd202ae --- /dev/null +++ b/breathe/doxygen/daBFG/xml/stage_8h.xml @@ -0,0 +1,135 @@ + + + + stage.h + EASTL/utility.h + util/dag_stdint.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/virtualResourceRequest.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<EASTL/utility.h> +#include<util/dag_stdint.h> + + +namespacedabfg +{ + +enumclassStage:uint8_t +{ +UNKNOWN=0, + +PRE_RASTER=1u<<0, + +POST_RASTER=1u<<1, + +COMPUTE=1u<<2, + +TRANSFER=1u<<3, + +RAYTRACE=1u<<4, + +PS=POST_RASTER, +VS=PRE_RASTER, +CS=COMPUTE, +PS_OR_CS=PS|CS, + +ALL_GRAPHICS=PRE_RASTER|POST_RASTER, + +ALL_INDIRECTION=PRE_RASTER|COMPUTE|RAYTRACE, +}; + +constexprinlineStageoperator|(Stagea,Stageb){returnstatic_cast<Stage>(eastl::to_underlying(a)|eastl::to_underlying(b));} + +constexprinlineStage&operator|=(Stage&a,Stageb) +{ +a=a|b; +returna; +} + +constexprinlineStageoperator&(Stagea,Stageb){returnstatic_cast<Stage>(eastl::to_underlying(a)&eastl::to_underlying(b));} + +constexprinlineboolstagesSubsetOf(Stagesubset,Stagesuperset){return(subset&superset)==subset;} + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/state_request_8h.xml b/breathe/doxygen/daBFG/xml/state_request_8h.xml new file mode 100644 index 000000000..fdcc6ca51 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/state_request_8h.xml @@ -0,0 +1,105 @@ + + + + stateRequest.h + shaders/dag_overrideStates.h + render/daBfg/variableRateShading.h + render/daBfg/detail/nodeNameId.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/registry.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::StateRequest + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<shaders/dag_overrideStates.h> + +#include<render/daBfg/variableRateShading.h> +#include<render/daBfg/detail/nodeNameId.h> + + +namespacedabfg +{ + +structInternalRegistry; + +classStateRequest +{ +friendclassRegistry; +StateRequest(InternalRegistry*reg,NodeNameIdnodeId); + +public: +StateRequestsetFrameBlock(constchar*block)&&; + +StateRequestsetSceneBlock(constchar*block)&&; + +StateRequestsetObjectBlock(constchar*block)&&; + +StateRequestallowWireframe()&&; + +StateRequestvrs(VrsSettingsvrs)&&; + +StateRequestenableOverride(shaders::OverrideStateoverride)&&; + +private: +NodeNameIdid; +InternalRegistry*registry; +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/structdabfg_1_1_buffer_create_info.xml b/breathe/doxygen/daBFG/xml/structdabfg_1_1_buffer_create_info.xml new file mode 100644 index 000000000..688bd92eb --- /dev/null +++ b/breathe/doxygen/daBFG/xml/structdabfg_1_1_buffer_create_info.xml @@ -0,0 +1,77 @@ + + + + dabfg::BufferCreateInfo + resourceCreation.h + + + uint32_t + uint32_t dabfg::BufferCreateInfo::elementSize + + elementSize + +Size of a single element in bytes. + + + + + + + + + uint32_t + uint32_t dabfg::BufferCreateInfo::elementCount + + elementCount + +Amount of elements in this buffer. + + + + + + + + + uint32_t + uint32_t dabfg::BufferCreateInfo::flags + + flags + +Use SBCF_ flags here. + + + + + + + + + uint32_t + uint32_t dabfg::BufferCreateInfo::format + + format + + + +This is for so-called T-buffers, which are basically 1d textures masquerading as buffers. If you are not targeting DX10, don't use these + + + + + + + + + +An effort to create a less error-prone buffers API is currently ongoing, this structure exposes the to-be-deprecated embed:rst:inline :cpp:func:`d3d::create_sbuffer` buffer creation mechanism. You are on your own trying to figure out how to use this. + + + + dabfg::BufferCreateInfoelementCount + dabfg::BufferCreateInfoelementSize + dabfg::BufferCreateInfoflags + dabfg::BufferCreateInfoformat + + + diff --git a/breathe/doxygen/daBFG/xml/structdabfg_1_1_external_state.xml b/breathe/doxygen/daBFG/xml/structdabfg_1_1_external_state.xml new file mode 100644 index 000000000..7bc4a29ea --- /dev/null +++ b/breathe/doxygen/daBFG/xml/structdabfg_1_1_external_state.xml @@ -0,0 +1,49 @@ + + + + dabfg::ExternalState + externalState.h + + + bool + bool dabfg::ExternalState::wireframeModeEnabled + + wireframeModeEnabled + = false + +Enables wireframe debug mode for nodes that allow it. + + + + + + + + + bool + bool dabfg::ExternalState::vrsEnabled + + vrsEnabled + = false + + + +Enables variable rate shading for all nodes that allow it using the per-node settings specified inside VrsRequirements. + + + + + + + +Describes various global state that can influence the execution of the frame graph but is not managed by daBfg. + + + + + + dabfg::ExternalStatevrsEnabled + dabfg::ExternalStatewireframeModeEnabled + + + diff --git a/breathe/doxygen/daBFG/xml/structdabfg_1_1_named_slot.xml b/breathe/doxygen/daBFG/xml/structdabfg_1_1_named_slot.xml new file mode 100644 index 000000000..3a4dbdf39 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/structdabfg_1_1_named_slot.xml @@ -0,0 +1,53 @@ + + + + dabfg::NamedSlot + resourceCreation.h + + + const char * + const char* dabfg::NamedSlot::name + + name + +String name for this slot, must not match any other resource's name. + + + + + + + + + + + + dabfg::NamedSlot::NamedSlot + (const char *slot_name) + NamedSlot + + const char * + slot_name + + +Enables using regular parentheses for construction. + + + + + + + + + +Named slots do not represent any resource by default and must be explicitly set to point to a different resource through dabfg::fill_slot. + + + + + + dabfg::NamedSlotname + dabfg::NamedSlotNamedSlot + + + diff --git a/breathe/doxygen/daBFG/xml/structdabfg_1_1_texture2d_create_info.xml b/breathe/doxygen/daBFG/xml/structdabfg_1_1_texture2d_create_info.xml new file mode 100644 index 000000000..e6b925e46 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/structdabfg_1_1_texture2d_create_info.xml @@ -0,0 +1,67 @@ + + + + dabfg::Texture2dCreateInfo + resourceCreation.h + + + uint32_t + uint32_t dabfg::Texture2dCreateInfo::creationFlags + + creationFlags + = 0 + +Use TEXCF_ prefixed flags. + + + + + + + + + eastl::variant< IPoint2, AutoResolutionRequest< 2 > > + eastl::variant<IPoint2, AutoResolutionRequest<2> > dabfg::Texture2dCreateInfo::resolution + + resolution + +Resolution for this texture. May either be hard-coded or automatic, see AutoResolutionRequest. + + + + + + + + + uint32_t + uint32_t dabfg::Texture2dCreateInfo::mipLevels + + mipLevels + = 1 + +Use 0 for automatic mip levels. + + + + + + + + + +Specifies the creation parameters for a 2D texture. + + +Resources will ALWAYS contain garbage right after they've been created. Use virtual passes to clear them if you need to, or write explicit clears. + + + + + + dabfg::Texture2dCreateInfocreationFlags + dabfg::Texture2dCreateInfomipLevels + dabfg::Texture2dCreateInforesolution + + + diff --git a/breathe/doxygen/daBFG/xml/structdabfg_1_1_texture3d_create_info.xml b/breathe/doxygen/daBFG/xml/structdabfg_1_1_texture3d_create_info.xml new file mode 100644 index 000000000..75c2d4e5e --- /dev/null +++ b/breathe/doxygen/daBFG/xml/structdabfg_1_1_texture3d_create_info.xml @@ -0,0 +1,64 @@ + + + + dabfg::Texture3dCreateInfo + resourceCreation.h + + + uint32_t + uint32_t dabfg::Texture3dCreateInfo::creationFlags + + creationFlags + = 0 + +Use TEXCF_ prefixed flags. + + + + + + + + + eastl::variant< IPoint3, AutoResolutionRequest< 3 > > + eastl::variant<IPoint3, AutoResolutionRequest<3> > dabfg::Texture3dCreateInfo::resolution + + resolution + +Resolution for this texture. May either be hard-coded or automatic, see AutoResolutionRequest. + + + + + + + + + uint32_t + uint32_t dabfg::Texture3dCreateInfo::mipLevels + + mipLevels + = 1 + +Use 0 for automatic mip levels. + + + + + + + + + +Specifies the creation parameters for a 3D volumetric texture. + + + + + + dabfg::Texture3dCreateInfocreationFlags + dabfg::Texture3dCreateInfomipLevels + dabfg::Texture3dCreateInforesolution + + + diff --git a/breathe/doxygen/daBFG/xml/structdabfg_1_1_vrs_settings.xml b/breathe/doxygen/daBFG/xml/structdabfg_1_1_vrs_settings.xml new file mode 100644 index 000000000..f861eed12 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/structdabfg_1_1_vrs_settings.xml @@ -0,0 +1,84 @@ + + + + dabfg::VrsSettings + variableRateShading.h + + + uint32_t + uint32_t dabfg::VrsSettings::rateX + + rateX + = 1 + +horizontal rate + + + + + + + + + uint32_t + uint32_t dabfg::VrsSettings::rateY + + rateY + = 1 + +vertical rate + + + + + + + + + VariableRateShadingCombiner + VariableRateShadingCombiner dabfg::VrsSettings::vertexCombiner + + vertexCombiner + = VariableRateShadingCombiner::VRS_PASSTHROUGH + +Vertex combiner. See VariableRateShadingCombiner for details. + + + + + + + + + VariableRateShadingCombiner + VariableRateShadingCombiner dabfg::VrsSettings::pixelCombiner + + pixelCombiner + = VariableRateShadingCombiner::VRS_PASSTHROUGH + +Pixel combiner. See VariableRateShadingCombiner for details. + + + + + + + + + +Describes the settings with which variable rate shading should be enabled for a particular node. + + +Seeembed:rst:inline :cpp:func:`d3d::set_variable_rate_shading` for further explanation of what these parameters do. The rate texture is specified through a render pass request, as it must be kept in the tile cache on TBR/TBDR GPUs. See dabfg::VirtualPassRequest::vrsRate. + + + + + + dabfg::VrsSettingspixelCombiner + dabfg::VrsSettingsrateX + dabfg::VrsSettingsrateY + dabfg::VrsSettingsvertexCombiner + + + diff --git a/breathe/doxygen/daBFG/xml/structdabfg_1_1detail_1_1_i_point_impl.xml b/breathe/doxygen/daBFG/xml/structdabfg_1_1detail_1_1_i_point_impl.xml new file mode 100644 index 000000000..d8aa4186c --- /dev/null +++ b/breathe/doxygen/daBFG/xml/structdabfg_1_1detail_1_1_i_point_impl.xml @@ -0,0 +1,20 @@ + + + + dabfg::detail::IPointImpl + + + int + D + D + + + + + + + + + + + diff --git a/breathe/doxygen/daBFG/xml/structdabfg_1_1detail_1_1_i_point_impl_3_012_01_4.xml b/breathe/doxygen/daBFG/xml/structdabfg_1_1detail_1_1_i_point_impl_3_012_01_4.xml new file mode 100644 index 000000000..28a4071f2 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/structdabfg_1_1detail_1_1_i_point_impl_3_012_01_4.xml @@ -0,0 +1,31 @@ + + + + dabfg::detail::IPointImpl< 2 > + + + + + IPoint2 + using dabfg::detail::IPointImpl< 2 >::Value = IPoint2 + + Value + + + + + + + + + + + + + + + + dabfg::detail::IPointImpl< 2 >Value + + + diff --git a/breathe/doxygen/daBFG/xml/structdabfg_1_1detail_1_1_i_point_impl_3_013_01_4.xml b/breathe/doxygen/daBFG/xml/structdabfg_1_1detail_1_1_i_point_impl_3_013_01_4.xml new file mode 100644 index 000000000..1e2e586ea --- /dev/null +++ b/breathe/doxygen/daBFG/xml/structdabfg_1_1detail_1_1_i_point_impl_3_013_01_4.xml @@ -0,0 +1,31 @@ + + + + dabfg::detail::IPointImpl< 3 > + + + + + IPoint3 + using dabfg::detail::IPointImpl< 3 >::Value = IPoint3 + + Value + + + + + + + + + + + + + + + + dabfg::detail::IPointImpl< 3 >Value + + + diff --git a/breathe/doxygen/daBFG/xml/structdabfg_1_1multiplexing_1_1_extents.xml b/breathe/doxygen/daBFG/xml/structdabfg_1_1multiplexing_1_1_extents.xml new file mode 100644 index 000000000..90f706043 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/structdabfg_1_1multiplexing_1_1_extents.xml @@ -0,0 +1,71 @@ + + + + dabfg::multiplexing::Extents + multiplexing.h + + + uint32_t + uint32_t dabfg::multiplexing::Extents::superSamples + + superSamples + {1} + +Number of super-samples. + + + + + + + + + uint32_t + uint32_t dabfg::multiplexing::Extents::subSamples + + subSamples + {1} + +Number of sub-samples. + + + + + + + + + uint32_t + uint32_t dabfg::multiplexing::Extents::viewports + + viewports + {1} + +Number of viewports. + + + + + + + + + +A struct describing the amount of multiplexing that occurs over every dimension. + + +The application is free to interpret these dimensions however it pleases, but the intended interpretation is +superSamples used when rendering the entire scene multiple times to achieve a higher resolution result than the user's VRAM would allow otherwise, which is useful for screenshots and cinematics; +subSamples used for rendering the entire scene multiple times and then blending the results to achieve SSAA without spending any additional VRAM required; +viewports used for VR/AR. + + + + + + dabfg::multiplexing::ExtentssubSamples + dabfg::multiplexing::ExtentssuperSamples + dabfg::multiplexing::Extentsviewports + + + diff --git a/breathe/doxygen/daBFG/xml/structdabfg_1_1multiplexing_1_1_index.xml b/breathe/doxygen/daBFG/xml/structdabfg_1_1multiplexing_1_1_index.xml new file mode 100644 index 000000000..7cf3c409f --- /dev/null +++ b/breathe/doxygen/daBFG/xml/structdabfg_1_1multiplexing_1_1_index.xml @@ -0,0 +1,87 @@ + + + + dabfg::multiplexing::Index + multiplexing.h + + + uint32_t + uint32_t dabfg::multiplexing::Index::superSample + + superSample + {0} + +Index of the super-sample. + + + + + + + + + uint32_t + uint32_t dabfg::multiplexing::Index::subSample + + subSample + {0} + +Index of the sub-sample. + + + + + + + + + uint32_t + uint32_t dabfg::multiplexing::Index::viewport + + viewport + {0} + +Index of the viewport. + + + + + + + + + + + bool + bool dabfg::multiplexing::Index::operator== + (const Index &other) + operator== + + const Index & + other + + +Equality comparison operator. + + + + + + + + + +Identifies a concrete iteration of multiplexing. + + +Can be accessed from an execution callback by simply adding an argument of this type to it. It is then possible to achieve different behavior for different eyes or sub/super samples. + + + + dabfg::multiplexing::Indexoperator== + dabfg::multiplexing::IndexsubSample + dabfg::multiplexing::IndexsuperSample + dabfg::multiplexing::Indexviewport + + + diff --git a/breathe/doxygen/daBFG/xml/structeastl_1_1hash_3_01dabfg_1_1_name_space_01_4.xml b/breathe/doxygen/daBFG/xml/structeastl_1_1hash_3_01dabfg_1_1_name_space_01_4.xml new file mode 100644 index 000000000..f3e313bb8 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/structeastl_1_1hash_3_01dabfg_1_1_name_space_01_4.xml @@ -0,0 +1,35 @@ + + + + eastl::hash< dabfg::NameSpace > + + + + + size_t + size_t eastl::hash< dabfg::NameSpace >::operator() + (dabfg::NameSpace ns) const + operator() + + dabfg::NameSpace + ns + + + + + + + + + + + + + + + + + eastl::hash< dabfg::NameSpace >operator() + + + diff --git a/breathe/doxygen/daBFG/xml/usage_8h.xml b/breathe/doxygen/daBFG/xml/usage_8h.xml new file mode 100644 index 000000000..63ee62357 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/usage_8h.xml @@ -0,0 +1,123 @@ + + + + usage.h + util/dag_stdint.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/virtualResourceRequest.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<util/dag_stdint.h> + + +namespacedabfg +{ + +enumclassUsage:uint8_t +{ +UNKNOWN, + +COLOR_ATTACHMENT, + +INPUT_ATTACHMENT, + +DEPTH_ATTACHMENT, + +DEPTH_ATTACHMENT_AND_SHADER_RESOURCE, + +RESOLVE_ATTACHMENT, + +SHADER_RESOURCE, + +CONSTANT_BUFFER, + +INDEX_BUFFER, + +VERTEX_BUFFER, + +COPY, + +BLIT, + +INDIRECTION_BUFFER, + +VRS_RATE_TEXTURE, +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/variable_rate_shading_8h.xml b/breathe/doxygen/daBFG/xml/variable_rate_shading_8h.xml new file mode 100644 index 000000000..9fb9f5bb7 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/variable_rate_shading_8h.xml @@ -0,0 +1,74 @@ + + + + variableRateShading.h + drv/3d/dag_variableRateShading.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/stateRequest.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::VrsSettings + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<drv/3d/dag_variableRateShading.h> + + +namespacedabfg +{ + +structVrsSettings +{ +uint32_trateX=1; +uint32_trateY=1; + +VariableRateShadingCombinervertexCombiner=VariableRateShadingCombiner::VRS_PASSTHROUGH; +VariableRateShadingCombinerpixelCombiner=VariableRateShadingCombiner::VRS_PASSTHROUGH; +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/virtual_pass_request_8h.xml b/breathe/doxygen/daBFG/xml/virtual_pass_request_8h.xml new file mode 100644 index 000000000..daf85ff78 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/virtual_pass_request_8h.xml @@ -0,0 +1,304 @@ + + + + virtualPassRequest.h + EASTL/initializer_list.h + EASTL/optional.h + math/integer/dag_IPoint2.h + render/daBfg/virtualResourceRequest.h + render/daBfg/detail/access.h + drv/3d/dag_tex3d.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/registry.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::detail::VirtualAttachmentRequest + dabfg::VirtualPassRequest + dabfg + dabfg::detail + + + ENABLE_IF + ... + class = void + + + + + + + + + + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<EASTL/initializer_list.h> +#include<EASTL/optional.h> + +#include<math/integer/dag_IPoint2.h> + +#include<render/daBfg/virtualResourceRequest.h> +#include<render/daBfg/detail/access.h> +#include<drv/3d/dag_tex3d.h> + + +namespacedabfg +{ + +structInternalRegistry; +classVirtualPassRequest; + +namespacedetail +{ + +template<detail::ResourceRequestPolicydisallowPolicies,detail::ResourceRequestPolicyrequirePolicies> +classVirtualAttachmentRequest +{ +usingRRP=detail::ResourceRequestPolicy; + +staticconstexprboolpolicyAllowed(RRPpolicy) +{ +return(disallowPolicies&policy)==RRP::None&&(requirePolicies&policy)==requirePolicies; +} + +//Trickformakingclangprintcustomstringsinerrormessages. +staticconstexprboolpolicyAllowed(RRPpolicy,constchar*){returnpolicyAllowed(policy);} + +friendclassdabfg::VirtualPassRequest; + +public: +#ifndefDOXYGEN +#defineENABLE_IF(...)classDummy=void,class=eastl::enable_if_t<(__VA_ARGS__),Dummy> +#else +#defineENABLE_IF(...)class=void +#endif + +template<RRPpolicy,ENABLE_IF(policyAllowed(policy,"ERROR:Invalidresourcerequestforthistypeofattachment!" +"Seethedocsforthefunctionyouaretryingtocall!"))> +VirtualAttachmentRequest(VirtualResourceRequest<BaseTexture, policy>res):image{res.resUid} +{} + +template<RRPpolicy,ENABLE_IF(policyAllowed(policy,"ERROR:Invalidresourcerequestforthistypeofattachment!" +"Seethedocsforthefunctionyouaretryingtocall!"))> +VirtualAttachmentRequest(VirtualResourceRequest<BaseTexture, policy>res,uint32_tmip_level,uint32_tlayer): +image{res.resUid},mipLevel{mip_level},layer{layer} +{} + +template<ENABLE_IF(requirePolicies==RRP::None)> +VirtualAttachmentRequest(constchar*name):image{name} +{} + +template<ENABLE_IF(requirePolicies==RRP::None)> +VirtualAttachmentRequest(constchar*name,uint32_tmip_level,uint32_tlayer):image{name},mipLevel{mip_level},layer{layer} +{} + +#undefENABLE_IF + +private: +eastl::variant<ResUid,constchar*>image; +uint32_tmipLevel=0; +uint32_tlayer=0; +}; + +}//namespacedetail + +classVirtualPassRequest +{ +friendclassRegistry; +VirtualPassRequest(NodeNameIdnode,InternalRegistry*reg); + +usingRRP=detail::ResourceRequestPolicy; + +public: +usingRwVirtualAttachmentRequest= +detail::VirtualAttachmentRequest<RRP::Readonly | RRP::Optional | RRP::History | RRP::HasUsageStage | RRP::HasUsageType, RRP::None>; +usingColorRwVirtualAttachmentRequest= +detail::VirtualAttachmentRequest<RRP::Readonly | RRP::History | RRP::HasUsageStage | RRP::HasUsageType, RRP::None>; +usingDepthRoVirtualAttachmentRequest= +detail::VirtualAttachmentRequest<RRP::Optional | RRP::HasUsageStage | RRP::HasUsageType, RRP::None>; +usingDepthRoAndSvBindVirtualAttachmentRequest=detail::VirtualAttachmentRequest<RRP::Optional | RRP::HasUsageType, RRP::None>; +usingRoVirtualAttachmentRequest= +detail::VirtualAttachmentRequest<RRP::History | RRP::HasUsageStage | RRP::HasUsageType, RRP::None>; + +VirtualPassRequestcolor(std::initializer_list<ColorRwVirtualAttachmentRequest>attachments)&&; + +VirtualPassRequestdepthRw(RwVirtualAttachmentRequestattachment)&&; + +//DEPRECATEDANDPOINTLESS,DON'TUSE +VirtualPassRequestdepthRo(DepthRoVirtualAttachmentRequestattachment)&&; + +VirtualPassRequestdepthRoAndBindToShaderVars(DepthRoAndSvBindVirtualAttachmentRequestattachment, +std::initializer_list<constchar*>shader_var_names)&&; + +VirtualPassRequestclear(RwVirtualAttachmentRequestattachment,ResourceClearValuecolor)&&; + +VirtualPassRequestclear(RwVirtualAttachmentRequestattachment,constchar*color_blob)&& +{ +blobClearImpl(attachment,tag_for<ResourceClearValue>(),color_blob,detail::identity_projector); +return*this; +} + +template<autoprojector> +VirtualPassRequestclear(RwVirtualAttachmentRequestattachment,constchar*color_blob)&& +{ +usingProjectedType=detail::ProjectedType<projector>; +usingProjecteeType=detail::ProjecteeType<projector>; +static_assert(eastl::is_same_v<ProjectedType,ResourceClearValue>,"ExpectedtheprojectortoreturnaResourceClearValue!"); +blobClearImpl(attachment,tag_for<ProjecteeType>(),color_blob,detail::erase_projector_type<projector,ProjecteeType>()); +return*this; +} + +VirtualPassRequestresolve(RwVirtualAttachmentRequestfrom,RwVirtualAttachmentRequestto)&&; + +VirtualPassRequestvrsRate(RoVirtualAttachmentRequestattachment)&&; + +/*NOTIMPLEMENTED +*\briefSetsacustomrenderareaforthispass,alsoknownasa +*scissorrect.Bydefault,itwillbethefullareaofalltargets. +*Iftheresolutionsoftargetsdon'tmatch,aruntimeerrorwill +*beproduced. +*\detailsWarning:changingtherendingarebreaksarenderpass! +* +*\paramfromThetop-leftcornerofthearea. +*\paramtoThebottom-rightcornerofthearea. +*/ +VirtualPassRequestarea(IPoint2from,IPoint2to)&&; + +//TODO:implementthisstuffformobile(hugetask) +//VirtualPassRequestinput(std::initializer_list<RoAttachmentRequest>attachments)&&; +//VirtualPassRequestpreserve(std::initializer_list<RoAttachmentRequest>attachments)&&; + +private: +template<RRPdisallowPolicies,RRPrequirePolicies> +detail::ResUidgetResUidForAttachment(detail::VirtualAttachmentRequest<disallowPolicies, requirePolicies>attachment); + +voidblobClearImpl(RwVirtualAttachmentRequestattachment,ResourceSubtypeTagprojectee,constchar*blob, +detail::TypeErasedProjectorprojector); + +NodeNameIdnodeId; +InternalRegistry*registry; +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/virtual_resource_creation_semi_request_8h.xml b/breathe/doxygen/daBFG/xml/virtual_resource_creation_semi_request_8h.xml new file mode 100644 index 000000000..467694bfa --- /dev/null +++ b/breathe/doxygen/daBFG/xml/virtual_resource_creation_semi_request_8h.xml @@ -0,0 +1,243 @@ + + + + virtualResourceCreationSemiRequest.h + debug/dag_log.h + render/daBfg/virtualResourceRequest.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/registry.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::VirtualResourceCreationSemiRequest + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<debug/dag_log.h> +#include<render/daBfg/virtualResourceRequest.h> + + +namespacedabfg +{ + +class[[nodiscard]]VirtualResourceCreationSemiRequest +:privatedetail::VirtualResourceRequestBase +{ +usingBase=detail::VirtualResourceRequestBase; +usingRRP=detail::ResourceRequestPolicy; + +friendclassRegistry; +VirtualResourceCreationSemiRequest(detail::ResUidresId,NodeNameIdnode,InternalRegistry*reg):Base{resId,node,reg}{} + +public: +VirtualResourceRequest<BaseTexture, RRP::None>texture(constTexture2dCreateInfo&info)&& +{ +Base::texture(info); +return{resUid,nodeId,registry}; +} + +VirtualResourceRequest<BaseTexture, RRP::None>texture(constTexture3dCreateInfo&info)&& +{ +Base::texture(info); +return{resUid,nodeId,registry}; +} + +VirtualResourceRequest<Sbuffer, RRP::None>buffer(constBufferCreateInfo&info)&& +{ +Base::buffer(info); +return{resUid,nodeId,registry}; +} + + + +VirtualResourceRequest<Sbuffer, RRP::None>byteAddressBufferUaSr(uint32_tsize_in_dwords)&& +{ +BufferCreateInfoci{d3d::buffers::BYTE_ADDRESS_ELEMENT_SIZE,size_in_dwords,SBCF_UA_SR_BYTE_ADDRESS,0}; +Base::buffer(ci); +return{resUid,nodeId,registry}; +} + +VirtualResourceRequest<Sbuffer,RRP::None>byteAddressBufferUa(uint32_tsize_in_dwords)&& +{ +BufferCreateInfoci{d3d::buffers::BYTE_ADDRESS_ELEMENT_SIZE,size_in_dwords,SBCF_UA_BYTE_ADDRESS,0}; +Base::buffer(ci); +return{resUid,nodeId,registry}; +} + +template<classT> +VirtualResourceRequest<Sbuffer,RRP::None>structuredBufferUaSr(uint32_telement_count)&& +{ +BufferCreateInfoci{sizeof(T),element_count,SBCF_UA_SR_STRUCTURED,0}; +Base::buffer(ci); +return{resUid,nodeId,registry}; +} + +template<classT> +VirtualResourceRequest<Sbuffer,RRP::None>structuredBufferUa(uint32_telement_count)&& +{ +BufferCreateInfoci{sizeof(T),element_count,SBCF_UA_STRUCTURED,0}; +Base::buffer(ci); +return{resUid,nodeId,registry}; +} + +VirtualResourceRequest<Sbuffer,RRP::None>indirectBufferUa(d3d::buffers::Indirectindirect_type,uint32_tcall_count)&& +{ +BufferCreateInfoci{ +d3d::buffers::BYTE_ADDRESS_ELEMENT_SIZE,call_count*dword_count_per_call(indirect_type),SBCF_UA_INDIRECT,0}; +Base::buffer(ci); +return{resUid,nodeId,registry}; +} + +VirtualResourceRequest<Sbuffer,RRP::None>indirectBuffer(d3d::buffers::Indirectindirect_type,uint32_tcall_count)&& +{ +BufferCreateInfoci{d3d::buffers::BYTE_ADDRESS_ELEMENT_SIZE,call_count*dword_count_per_call(indirect_type),SBCF_INDIRECT,0}; +Base::buffer(ci); +return{resUid,nodeId,registry}; +} + + +template<classT> +VirtualResourceRequest<T, RRP::None>blob()&& +{ +Base::blob(BlobDescription{tag_for<T>(),sizeof(T),alignof(T), +//IMPORTANT:()zero-initializesstructs ++[](void*ptr){new(ptr)T();},// ++[](void*ptr){eastl::destroy_at<T>(reinterpret_cast<T*>(ptr));}, ++[](void*ptr,constvoid*from){ +ifconstexpr(eastl::is_copy_constructible<T>::value) +{ +new(ptr)T(*reinterpret_cast<constT*>(from)); +} +else +{ +logerr("daBFG:blobtypeisNOTcopyconstructible,constructingNEWblobinstead"); +new(ptr)T{}; +} +}}); + +return{resUid,nodeId,registry}; +} + +template<classT> +VirtualResourceRequest<T, RRP::None>blob(constTdefaultValue)&& +{ +Base::blob(BlobDescription{tag_for<T>(),sizeof(T),alignof(T),[defaultValue](void*ptr){new(ptr)T{defaultValue};},// ++[](void*ptr){eastl::destroy_at<T>(reinterpret_cast<T*>(ptr));}, ++[](void*ptr,constvoid*from){ +ifconstexpr(eastl::is_copy_constructible<T>::value) +{ +new(ptr)T(*reinterpret_cast<constT*>(from)); +} +else +{ +logerr("daBFG:blobtypeisNOTcopyconstructible,constructingNEWblobinstead"); +new(ptr)T{}; +} +}}); + +return{resUid,nodeId,registry}; +} +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/virtual_resource_handle_8h.xml b/breathe/doxygen/daBFG/xml/virtual_resource_handle_8h.xml new file mode 100644 index 000000000..a2986bddc --- /dev/null +++ b/breathe/doxygen/daBFG/xml/virtual_resource_handle_8h.xml @@ -0,0 +1,187 @@ + + + + virtualResourceHandle.h + EASTL/type_traits.h + render/daBfg/detail/virtualResourceHandleBase.h + 3d/dag_resPtr.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/virtualResourceRequest.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::VirtualResourceHandle + dabfg + dabfg::detail + + + REQUIRE + ... + + + + + + + + + + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<EASTL/type_traits.h> + +#include<render/daBfg/detail/virtualResourceHandleBase.h> + +#include<3d/dag_resPtr.h> + + +namespacedabfg +{ + +namespacedetail +{ +enumclassResourceRequestPolicy:uint32_t; +} + +#ifndefDOXYGEN +//TODO:ReplacethishackynesswithconstraintsassoonasC++20drops +#defineREQUIRE(...)template<classDummy1=void,class=typenameeastl::enable_if<(__VA_ARGS__),Dummy1>::type> +#else +#defineREQUIRE(...) +#endif + +template<classRes,boolgpu,booloptional> +classVirtualResourceHandle +:privatedetail::VirtualResourceHandleBase +{ +template<class,detail::ResourceRequestPolicy> +friendclassVirtualResourceRequest; + +usingBase=detail::VirtualResourceHandleBase; + +usingResNoConst=eastl::remove_cvref_t<Res>; +usingView=eastl::conditional_t<gpu,ManagedResView<ManagedRes<ResNoConst>>,BlobView>; + +VirtualResourceHandle(detail::ResUidresId,constResourceProvider*prov):Base{resId,prov}{} + +public: +REQUIRE(!optional) +Res&ref()const&{return*get();} + +Res*get()const& +{ +ifconstexpr(eastl::is_base_of_v<BaseTexture,ResNoConst>) +returnBase::getResourceView<View>().getBaseTex(); +elseifconstexpr(eastl::is_base_of_v<Sbuffer,ResNoConst>) +returnBase::getResourceView<View>().getBuf(); +else +{ +autoview=Base::getResourceView<View>(); +G_ASSERT((view.data!=nullptr&&view.typeTag==tag_for<ResNoConst>())|| +(view.data==nullptr&&view.typeTag==ResourceSubtypeTag::Invalid));//sanitycheck +returnreinterpret_cast<ResNoConst*>(view.data); +} +} + +REQUIRE(gpu) +Viewview()const&{returnBase::getResourceView<View>();} + +REQUIRE(gpu) +D3DRESIDd3dResId()const& +{ +//Petpeeve:whytfdodifferentmanagedresholdershavedifferent +//gettercallsbutnocommononefortemplatedcases? +ifconstexpr(eastl::is_base_of_v<BaseTexture,ResNoConst>) +returnBase::getResourceView<View>().getTexId(); +elseifconstexpr(eastl::is_base_of_v<Sbuffer,ResNoConst>) +returnBase::getResourceView<View>().getBufId(); +else +returnBAD_D3DRESID; +} +}; + +#undefREQUIRE + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/virtual_resource_request_8h.xml b/breathe/doxygen/daBFG/xml/virtual_resource_request_8h.xml new file mode 100644 index 000000000..409de1a8b --- /dev/null +++ b/breathe/doxygen/daBFG/xml/virtual_resource_request_8h.xml @@ -0,0 +1,301 @@ + + + + virtualResourceRequest.h + EASTL/type_traits.h + render/daBfg/usage.h + render/daBfg/stage.h + render/daBfg/virtualResourceHandle.h + render/daBfg/detail/virtualResourceRequestBase.h + render/daBfg/detail/resourceRequestPolicy.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/virtualResourceCreationSemiRequest.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/virtualPassRequest.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/virtualResourceSemiRequest.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::VirtualResourceRequest + dabfg + dabfg::detail + + + REQUIRE_IMPL + ... + class = void + + + + + + + + + + REQUIRE + ... + + + + + + + + + + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<EASTL/type_traits.h> + +#include<render/daBfg/usage.h> +#include<render/daBfg/stage.h> +#include<render/daBfg/virtualResourceHandle.h> +#include<render/daBfg/detail/virtualResourceRequestBase.h> +#include<render/daBfg/detail/resourceRequestPolicy.h> + + +namespacedabfg +{ + +namespacedetail +{ +template<detail::ResourceRequestPolicy,detail::ResourceRequestPolicy> +classVirtualAttachmentRequest; +}//namespacedetail + +#ifndefDOXYGEN +//TODO:ReplacethishackynesswithconstraintsassoonasC++20drops +#defineREQUIRE_IMPL(...)classDummy1=void,class=typenameeastl::enable_if<(__VA_ARGS__),Dummy1>::type +#defineREQUIRE(...)template<REQUIRE_IMPL(__VA_ARGS__)> +#else +#defineREQUIRE_IMPL(...)class=void +#defineREQUIRE(...) +#endif + +template<classRes,detail::ResourceRequestPolicypolicy> +classVirtualResourceRequest +:privatedetail::VirtualResourceRequestBase +{ +staticconstexprboolis_gpu=eastl::is_base_of_v<D3dResource,Res>; + +usingBase=detail::VirtualResourceRequestBase; + +template<detail::ResourceRequestPolicy,detail::ResourceRequestPolicy> +friendclassdetail::VirtualAttachmentRequest; + +template<class,detail::ResourceRequestPolicy> +friendclassVirtualResourceRequest; + +friendclassVirtualResourceCreationSemiRequest; + +template<detail::ResourceRequestPolicy> +friendclassVirtualResourceSemiRequest; +friendclassRegistry; +VirtualResourceRequest(detail::ResUidresId,NodeNameIdnode,InternalRegistry*reg):Base{resId,node,reg}{} + +usingRRP=detail::ResourceRequestPolicy; + +staticconstexprboolhasPolicy(RRPp){return(policy&p)==p;} + +staticconstexprboolhasPolicy(RRPp,constchar*){returnhasPolicy(p);} + +staticconstexprRRPflipPolicy(RRPp){returnstatic_cast<RRP>(eastl::to_underlying(policy)^eastl::to_underlying(p));} + +usingHandleType= +VirtualResourceHandle<eastl::conditional_t<hasPolicy(RRP::Readonly),constRes,Res>,is_gpu,hasPolicy(RRP::Optional)>; + +public: +REQUIRE(!hasPolicy(RRP::Optional,"ERROR:Please,removetheduplicate.optional()call!")) +VirtualResourceRequest<Res,flipPolicy(RRP::Optional)>optional()&& +{ +Base::optional(); +return{resUid,nodeId,registry}; +} + +REQUIRE(!is_gpu||(hasPolicy(RRP::HasUsageStage,"ERROR:Please,call.atStage(usagestage)before.bindToShaderVar(...)!")&& +!hasPolicy(RRP::HasUsageType,"ERROR:Please,don'tcall.useAs(usagetype)before.bindToShaderVar(...)!"))) +VirtualResourceRequest<Res,flipPolicy(RRP::HasUsageType)>bindToShaderVar(constchar*shader_var_name=nullptr)&& +{ +Base::bindToShaderVar(shader_var_name,tag_for<Res>(),detail::identity_projector); +return{resUid,nodeId,registry}; +} + +template<autoprojector,REQUIRE_IMPL(!is_gpu&&eastl::is_invocable_v<decltype(projector),Res>)> +VirtualResourceRequest<Res, policy>bindToShaderVar(constchar*shader_var_name=nullptr)&& +{ +usingProjectedType=detail::ProjectedType<projector>; +Base::bindToShaderVar(shader_var_name,tag_for<ProjectedType>(),detail::erase_projector_type<projector,Res>()); +return{resUid,nodeId,registry}; +} + +REQUIRE(!is_gpu) +VirtualResourceRequest<Res,policy>bindAsView()&& +{ +Base::bindAsView(tag_for<Res>(),detail::identity_projector); +return{resUid,nodeId,registry}; +} + +template<autoprojector,REQUIRE_IMPL(!is_gpu&&eastl::is_invocable_v<decltype(projector),Res>)> +VirtualResourceRequest<Res, policy>bindAsView()&& +{ +usingProjectedType=detail::ProjectedType<projector>; +Base::bindAsView(tag_for<ProjectedType>(),detail::erase_projector_type<projector,Res>()); +return{resUid,nodeId,registry}; +} + +REQUIRE(!is_gpu) +VirtualResourceRequest<Res,policy>bindAsProj()&& +{ +Base::bindAsProj(tag_for<Res>(),detail::identity_projector); +return{resUid,nodeId,registry}; +} + +template<autoprojector,REQUIRE_IMPL(!is_gpu&&eastl::is_invocable_v<decltype(projector),constRes&>)> +VirtualResourceRequest<Res, policy>bindAsProj()&& +{ +usingProjectedType=detail::ProjectedType<projector>; +Base::bindAsProj(tag_for<ProjectedType>(),detail::erase_projector_type<projector,Res>()); +return{resUid,nodeId,registry}; +} + +REQUIRE(is_gpu&&!hasPolicy(RRP::HasUsageStage,"ERROR:Please,removetheduplicate.atStage(usagestage)call!")) +VirtualResourceRequest<Res,flipPolicy(RRP::HasUsageStage)>atStage(Stagestage)&& +{ +Base::atStage(stage); +return{resUid,nodeId,registry}; +} + +REQUIRE(is_gpu&&!hasPolicy(RRP::HasUsageType,"ERROR:Please,removetheduplicate.useAs(usagetype)call!")) +VirtualResourceRequest<Res,flipPolicy(RRP::HasUsageType)>useAs(Usagetype)&& +{ +Base::useAs(type); +return{resUid,nodeId,registry}; +} + +REQUIRE(!is_gpu||(hasPolicy(RRP::HasUsageStage,"ERROR:Please,call.atStage(usagestage)before.handle()!")&& +hasPolicy(RRP::HasUsageType,"ERROR:Please,call.useAs(usagetype)before.handle()!"))) +[[nodiscard]]HandleTypehandle()&&{return{resUid,Base::provider()};} +}; + +#undefREQUIRE_IMPL +#undefREQUIRE + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/virtual_resource_semi_request_8h.xml b/breathe/doxygen/daBFG/xml/virtual_resource_semi_request_8h.xml new file mode 100644 index 000000000..06bd155ec --- /dev/null +++ b/breathe/doxygen/daBFG/xml/virtual_resource_semi_request_8h.xml @@ -0,0 +1,146 @@ + + + + virtualResourceSemiRequest.h + render/daBfg/virtualResourceRequest.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/daBfg/nameSpaceRequest.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dabfg::VirtualResourceSemiRequest + dabfg + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<render/daBfg/virtualResourceRequest.h> + + +namespacedabfg +{ + +template<detail::ResourceRequestPolicypolicy> +classVirtualResourceSemiRequest +:privatedetail::VirtualResourceRequestBase +{ +usingBase=detail::VirtualResourceRequestBase; + +friendclassStateRequest; +friendclassNameSpaceRequest; +VirtualResourceSemiRequest(detail::ResUidresId,NodeNameIdnode,InternalRegistry*reg):Base{resId,node,reg}{} + +public: +VirtualResourceRequest<BaseTexture, policy>texture()&&{return{resUid,nodeId,registry};} + +VirtualResourceRequest<Sbuffer, policy>buffer()&&{return{resUid,nodeId,registry};} + +template<classT> +VirtualResourceRequest<T, policy>blob()&& +{ +Base::markWithTag(tag_for<T>()); +return{resUid,nodeId,registry}; +} +}; + +}//namespacedabfg + + + + diff --git a/breathe/doxygen/daBFG/xml/xml.xsd b/breathe/doxygen/daBFG/xml/xml.xsd new file mode 100644 index 000000000..9f80fe158 --- /dev/null +++ b/breathe/doxygen/daBFG/xml/xml.xsd @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/resourceSlot.cfg b/breathe/doxygen/resourceSlot.cfg new file mode 100644 index 000000000..759e48b7c --- /dev/null +++ b/breathe/doxygen/resourceSlot.cfg @@ -0,0 +1,96 @@ +PROJECT_NAME = "resourceSlot" +OUTPUT_DIRECTORY = resourceSlot +GENERATE_LATEX = NO +GENERATE_MAN = NO +GENERATE_RTF = NO +CASE_SENSE_NAMES = NO +INPUT = /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/resourceSlot/actions.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/resourceSlot/registerAccess.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/resourceSlot/state.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/resourceSlot/nodeHandleWithSlotsAccess.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/resourceSlot/resolveAccess.h /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/resourceSlot/nodeHandleWithSlotsAccessVector.h +ENABLE_PREPROCESSING = YES +QUIET = YES +JAVADOC_AUTOBRIEF = YES +JAVADOC_AUTOBRIEF = NO +GENERATE_HTML = NO +GENERATE_XML = YES +ALIASES = rst="\verbatim embed:rst" +ALIASES += endrst="\endverbatim" +ALIASES += inlinerst="\verbatim embed:rst:inline" +ENABLE_PREPROCESSING=YES +MACRO_EXPANSION=YES +PREDEFINED=DOXYGEN declare_new(x)= __restrict= __forceinline= +ALIASES += constcap{1}="\copybrief \1 \ref \1" +ALIASES += basecap{1}="\details \copybrief \1 \see \1" +ALIASES += runtimecap{2}="Runtime defined on \2. \ref \1" +ALIASES += microsoft="Microsoft" +ALIASES += win32="Windows" +ALIASES += windows="\win32" +ALIASES += xbone="Xbox One" +ALIASES += xboxone="\xbone" +ALIASES += scarlett="Xbox Series X / S" +ALIASES += xbox="\xbone and \scarlett" +ALIASES += sony="Sony" +ALIASES += ps4="PlayStation 4" +ALIASES += ps5="PlayStation 5" +ALIASES += ps="\ps4 and \ps5" +ALIASES += nintendo="Nintendo" +ALIASES += nswitch="\nintendo Switch" +ALIASES += apple="Apple" +ALIASES += ios="iOS" +ALIASES += mac="macOS" +ALIASES += tvos="tvOS" +ALIASES += google="Google" +ALIASES += android="Android" +ALIASES += linux="Linux" +ALIASES += nvidia="Nvidia" +ALIASES += AMD="AMD" +ALIASES += amd="\AMD" +ALIASES += ATI="AMD / ATI" +ALIASES += ati="\ATI" +ALIASES += intel="Intel" +ALIASES += ARM="ARM" +ALIASES += arm="\ARM" +ALIASES += mali="\arm Mali" +ALIASES += imgtec="imgTec" +ALIASES += powervrr="\imgtec Power VR Rogue" +ALIASES += qcomm="Qualcomm" +ALIASES += adreno="\qcomm Adreno" +ALIASES += mesa="Mesa 3D" +ALIASES += dx11="DirectX 11" +ALIASES += dx12="DirectX 12" +ALIASES += khronos="Khronos" +ALIASES += vk="Vulkan" +ALIASES += metal="Metal" +ALIASES += llvmpipe="\mesa LLVM pipe" +ALIASES += capbrief="\brief Indicates that the device driver" +ALIASES += briefconstcap{2}="\brief Constant \1\basecap{\2}" +ALIASES += NYI="\remarks This feature can be supported, but is not yet implemented." +ALIASES += someNYI="\remarks Some drivers without support could support this feature, but do not implement it yet." +ALIASES += constissue{1}="\copybrief \1 \ref \1" +ALIASES += baseissue{1}="\details \copybrief \1 \see \1" +ALIASES += briefconstissue{3}="\brief Is constant \1 on \2 \baseissue{\3}" +ALIASES += runtimeissue{2}="Runtime defined on \2. \ref \1" +ALIASES += caprefc{3}="\ref \3::\2 \"\1\"" +ALIASES += caprefa{3}="\ref \3::\2 \"\1\"" +ALIASES += caprefr{3}="\ref \3 \"\1\"" +ALIASES += caprefc{4}="\ref \3::\2 \"\1\"" +ALIASES += caprefa{4}="\ref \4::\2 \"\1\"" +ALIASES += caprefr{4}="\ref \3 \"\1\"" +ALIASES += capvaluec{2}="\copybrief \2::\1" +ALIASES += capvaluea{2}="\copybrief \2::\1" +ALIASES += capvaluer{2}="Runtime determined." +ALIASES += capvaluec{3}="\copybrief \2::\1" +ALIASES += capvaluea{3}="\copybrief \3::\1" +ALIASES += capvaluer{3}="Runtime determined." +ALIASES += platformtable{12}="\note ^^\ +
PlatformValue^^\ +
\capref\2{\xbone,\1,DeviceDriverCapabilitiesXboxOne} \capvalue\2{\1,DeviceDriverCapabilitiesXboxOne} ^^\ +
\capref\3{\scarlett,\1,DeviceDriverCapabilitiesScarlett,DeviceDriverCapabilitiesXboxOne} \capvalue\3{\1,DeviceDriverCapabilitiesScarlett,DeviceDriverCapabilitiesXboxOne} ^^\ +
\capref\4{\ps4,\1,DeviceDriverCapabilitiesPS4} \capvalue\4{\1,DeviceDriverCapabilitiesPS4} ^^\ +
\capref\5{\ps5,\1,DeviceDriverCapabilitiesPS5,DeviceDriverCapabilitiesPS4} \capvalue\5{\1,DeviceDriverCapabilitiesPS5,DeviceDriverCapabilitiesPS4} ^^\ +
\capref\6{\ios,\1,DeviceDriverCapabilitiesIOS} \capvalue\6{\1,DeviceDriverCapabilitiesIOS} ^^\ +
\capref\7{\tvos,\1,DeviceDriverCapabilitiesTVOS} \capvalue\7{\1,DeviceDriverCapabilitiesTVOS} ^^\ +
\capref\8{\nswitch,\1,DeviceDriverCapabilitiesNintendoSwitch} \capvalue\8{\1,DeviceDriverCapabilitiesNintendoSwitch} ^^\ +
\capref\9{\android,\1,DeviceDriverCapabilitiesAndroid} \capvalue\9{\1,DeviceDriverCapabilitiesAndroid} ^^\ +
\capref\10{\mac,\1,DeviceDriverCapabilitiesMacOSX} \capvalue\10{\1,DeviceDriverCapabilitiesMacOSX} ^^\ +
\capref\11{\linux,\1,DeviceDriverCapabilitiesLinux} \capvalue\11{\1,DeviceDriverCapabilitiesLinux} ^^\ +
\capref\12{\win32,\1,DeviceDriverCapabilitiesWindows} \capvalue\12{\1,DeviceDriverCapabilitiesWindows} ^^\ +
" \ No newline at end of file diff --git a/breathe/doxygen/resourceSlot/xml/actions_8h.xml b/breathe/doxygen/resourceSlot/xml/actions_8h.xml new file mode 100644 index 000000000..6659b4853 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/actions_8h.xml @@ -0,0 +1,87 @@ + + + + actions.h + render/resourceSlot/detail/registerAccess.h + render/resourceSlot/detail/ids.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/resourceSlot/registerAccess.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + resource_slot::Create + resource_slot::Update + resource_slot::Read + resource_slot + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<render/resourceSlot/detail/registerAccess.h> +#include<render/resourceSlot/detail/ids.h> + +namespaceresource_slot +{ + +structCreate +{ +Create(constchar*slot_name,constchar*resource_name); + +::resource_slot::detail::SlotIdslot; +::resource_slot::detail::ResourceIdresource; +}; + +structUpdate +{ +Update(constchar*slot_name,constchar*resource_name,intupdate_priority); + +::resource_slot::detail::SlotIdslot; +::resource_slot::detail::ResourceIdresource; +intpriority; +}; + +structRead +{ +Read(constchar*slot_name,intread_priority=DEFAULT_READ_PRIORITY); + +::resource_slot::detail::SlotIdslot; +intpriority; +staticconstexprintDEFAULT_READ_PRIORITY=INT_MAX; +}; + +}//namespaceresource_slot + + + + diff --git a/breathe/doxygen/resourceSlot/xml/combine.xslt b/breathe/doxygen/resourceSlot/xml/combine.xslt new file mode 100644 index 000000000..3bfa82c1e --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/combine.xslt @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/breathe/doxygen/resourceSlot/xml/compound.xsd b/breathe/doxygen/resourceSlot/xml/compound.xsd new file mode 100644 index 000000000..6a8a83463 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/compound.xsd @@ -0,0 +1,1215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/resourceSlot/xml/dir_089e0d3966ab15eefa92c1e290379d38.xml b/breathe/doxygen/resourceSlot/xml/dir_089e0d3966ab15eefa92c1e290379d38.xml new file mode 100644 index 000000000..62c634025 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/dir_089e0d3966ab15eefa92c1e290379d38.xml @@ -0,0 +1,12 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude + + + + + + + diff --git a/breathe/doxygen/resourceSlot/xml/dir_b901b6855fa0141d224444cca13ae14b.xml b/breathe/doxygen/resourceSlot/xml/dir_b901b6855fa0141d224444cca13ae14b.xml new file mode 100644 index 000000000..6d30c2dc6 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/dir_b901b6855fa0141d224444cca13ae14b.xml @@ -0,0 +1,17 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/resourceSlot + actions.h + nodeHandleWithSlotsAccess.h + nodeHandleWithSlotsAccessVector.h + registerAccess.h + resolveAccess.h + state.h + + + + + + + diff --git a/breathe/doxygen/resourceSlot/xml/dir_dfe6bed94bcf04987b38a6f8493ab81c.xml b/breathe/doxygen/resourceSlot/xml/dir_dfe6bed94bcf04987b38a6f8493ab81c.xml new file mode 100644 index 000000000..0092349c7 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/dir_dfe6bed94bcf04987b38a6f8493ab81c.xml @@ -0,0 +1,12 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs + + + + + + + diff --git a/breathe/doxygen/resourceSlot/xml/dir_e2c640b54affa6f86d83d95c201d0b2f.xml b/breathe/doxygen/resourceSlot/xml/dir_e2c640b54affa6f86d83d95c201d0b2f.xml new file mode 100644 index 000000000..4867921a0 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/dir_e2c640b54affa6f86d83d95c201d0b2f.xml @@ -0,0 +1,12 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render + + + + + + + diff --git a/breathe/doxygen/resourceSlot/xml/dir_ea1f7663ccf2bdfe1baad716ec70d619.xml b/breathe/doxygen/resourceSlot/xml/dir_ea1f7663ccf2bdfe1baad716ec70d619.xml new file mode 100644 index 000000000..85f780b47 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/dir_ea1f7663ccf2bdfe1baad716ec70d619.xml @@ -0,0 +1,12 @@ + + + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/resourceSlot + + + + + + + diff --git a/breathe/doxygen/resourceSlot/xml/index.xml b/breathe/doxygen/resourceSlot/xml/index.xml new file mode 100644 index 000000000..b8cc2e952 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/index.xml @@ -0,0 +1,88 @@ + + + resource_slot::Create + slot + resource + Create + + resource_slot::NodeHandleWithSlotsAccess + nameSpace + id + generation + isValid + NodeHandleWithSlotsAccess + NodeHandleWithSlotsAccess + operator= + NodeHandleWithSlotsAccess + operator= + reset + valid + ~NodeHandleWithSlotsAccess + _noteContext + NodeHandleWithSlotsAccess + + resource_slot::Read + slot + priority + DEFAULT_READ_PRIORITY + Read + + resource_slot::State + nameSpace + nodeId + order + size + State + State + operator= + State + operator= + ~State + resourceToReadFrom + resourceToCreateFor + orderInChain + sizeOfChain + isNodeLastInChain + State + resolve_access + + resource_slot::Update + slot + resource + priority + Update + + dabfg + root + + das + + resource_slot + NodeHandleWithSlotsAccessVector + register_access + register_access + resolve_access + + actions.h + + nodeHandleWithSlotsAccess.h + + nodeHandleWithSlotsAccessVector.h + + registerAccess.h + + resolveAccess.h + + state.h + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs + + /home/runner/work/DagorEngine/DagorEngine/prog + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render + + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/resourceSlot + + diff --git a/breathe/doxygen/resourceSlot/xml/index.xsd b/breathe/doxygen/resourceSlot/xml/index.xsd new file mode 100644 index 000000000..edb1d347d --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/index.xsd @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/resourceSlot/xml/namespacedabfg.xml b/breathe/doxygen/resourceSlot/xml/namespacedabfg.xml new file mode 100644 index 000000000..bc9e8d9c9 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/namespacedabfg.xml @@ -0,0 +1,26 @@ + + + + dabfg + + + NameSpace + NameSpace dabfg::root + () + root + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/resourceSlot/xml/namespacedas.xml b/breathe/doxygen/resourceSlot/xml/namespacedas.xml new file mode 100644 index 000000000..1bde3e718 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/namespacedas.xml @@ -0,0 +1,11 @@ + + + + das + + + + + + + diff --git a/breathe/doxygen/resourceSlot/xml/namespaceresource__slot.xml b/breathe/doxygen/resourceSlot/xml/namespaceresource__slot.xml new file mode 100644 index 000000000..76bd2f6cb --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/namespaceresource__slot.xml @@ -0,0 +1,214 @@ + + + + resource_slot + resource_slot::Create + resource_slot::Update + resource_slot::Read + resource_slot::State + resource_slot::NodeHandleWithSlotsAccess + + + dag::Vector< NodeHandleWithSlotsAccess > + using resource_slot::NodeHandleWithSlotsAccessVector = typedef dag::Vector<NodeHandleWithSlotsAccess> + + NodeHandleWithSlotsAccessVector + + + + + + + + + + + + + + class F + + + resource_slot::NodeHandleWithSlotsAccess + resource_slot::NodeHandleWithSlotsAccess resource_slot::register_access + (dabfg::NameSpace ns, const char *name, const char *source_location, resource_slot::detail::ActionList &&action_list, F &&declaration_callback) + register_access + + dabfg::NameSpace + ns + + + const char * + name + + + const char * + source_location + + + resource_slot::detail::ActionList && + action_list + + + F && + declaration_callback + + + + +Register access to resource slot state +Enhanced version of dabfg::register_node() +Usage: +resource_slot::NodeHandleWithSlotsAccesshandle=resource_slot::register_access("node_name",DABFG_PP_NODE_SRC,{ +resource_slot::Read{"slot1"}, +//nodeCANreadslot1fromslotsState +resource_slot::Create{"slot2","tex2"}, +//nodeMUSTcreatetex2,thatwillbesavedintoslot2afterthenode +resource_slot::Update{"slot3","tex3_updated_variant",priority=200} +//nodeCANreadslot3fromslotsState +//nodeMUSTcreatetex3_updated_variant,thatwillbesavedintoslot3afterthenode +//nodeswithHIGHERprioritywillbeupdatedAFTERnodeswithLOWERpriority: +//firstpriority=100,thenpriority=200 +//dependencycycleinslotsandprioritiesisprogrammingerror +},[](resource_slot::StateslotsState,dabfg::Registryregistry) +{ +registry.readTexture(slotsState.resourceToReadFrom("slot1")).atStage(...).bindToShaderVar(...); +//readfinalstateofslot1afterallupdatesbyothernodes + +registry.createTexture2d(slotsState.resourceToCreateFor("slot2"),...); +//willbesavedtoslot2afterthisnode + +registry.readTexture(slotsState.resourceToReadFrom("slot3")).atStage(...).bindToShaderVar(...); +//readpreviousresourceinslot3,forexample"tex3" +registry.createTexture2d(slotsState.resourceToCreateFor("slot3"),...); +//willbesavedtoslot3afterthisnode + +return[]{ +shader.render();//rendercodehere +}; +}); + + + +ns + + +name space where the slot, the node, and all of the resources will be looked up in + + + + +name + + +node name + + + + +source_location + + +SHOULD be DABFG_PP_NODE_SRC + + + + +action_list + + +list of slots, that will be created, updated or read by the node + + + + +declaration_callback + + +node declaration; gets State as first argument + + + + +storage_id + + +RESERVED for future use + + + +handle for access to storage + + + + + + + + + + + class F + + + resource_slot::NodeHandleWithSlotsAccess + resource_slot::NodeHandleWithSlotsAccess resource_slot::register_access + (const char *name, const char *source_location, resource_slot::detail::ActionList &&action_list, F &&declaration_callback) + register_access + + const char * + name + + + const char * + source_location + + + resource_slot::detail::ActionList && + action_list + + + F && + declaration_callback + + + + + + + + + + + void + void resource_slot::resolve_access + () + resolve_access + + + +Perform all registered access and set NodeHandles. +MUST be executed in every frame before dabfg::run_nodes() + + +storage_id + + +RESERVED for future use + + + + + + + + + + + + + + + + + diff --git a/breathe/doxygen/resourceSlot/xml/node_handle_with_slots_access_8h.xml b/breathe/doxygen/resourceSlot/xml/node_handle_with_slots_access_8h.xml new file mode 100644 index 000000000..9effdd050 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/node_handle_with_slots_access_8h.xml @@ -0,0 +1,86 @@ + + + + nodeHandleWithSlotsAccess.h + render/daBfg/nameSpace.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/resourceSlot/nodeHandleWithSlotsAccessVector.h + + + + + + + + + + + + + + + + + + + + + + + + resource_slot::NodeHandleWithSlotsAccess + das + resource_slot + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<render/daBfg/nameSpace.h> + + +namespacedas +{ +classContext; +}//namespacedas + +namespaceresource_slot +{ + +structNodeHandleWithSlotsAccess +{ +NodeHandleWithSlotsAccess(); +NodeHandleWithSlotsAccess(NodeHandleWithSlotsAccess&&h); +NodeHandleWithSlotsAccess&operator=(NodeHandleWithSlotsAccess&&h); +NodeHandleWithSlotsAccess(constNodeHandleWithSlotsAccess&)=delete; +NodeHandleWithSlotsAccess&operator=(constNodeHandleWithSlotsAccess&)=delete; + +voidreset(); + +boolvalid()const; + +~NodeHandleWithSlotsAccess(); + +NodeHandleWithSlotsAccess(dabfg::NameSpacens,inthandle_id,unsignedgeneration_number); + +void_noteContext(constdas::Context*context)const; + +private: +dabfg::NameSpacenameSpace; +intid; +unsignedgeneration:31; +unsignedisValid:1; +}; + +static_assert(sizeof(NodeHandleWithSlotsAccess)==sizeof(unsigned)*3); + +}//namespaceresource_slot + + + + diff --git a/breathe/doxygen/resourceSlot/xml/node_handle_with_slots_access_vector_8h.xml b/breathe/doxygen/resourceSlot/xml/node_handle_with_slots_access_vector_8h.xml new file mode 100644 index 000000000..b52ff2b9c --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/node_handle_with_slots_access_vector_8h.xml @@ -0,0 +1,54 @@ + + + + nodeHandleWithSlotsAccessVector.h + render/resourceSlot/nodeHandleWithSlotsAccess.h + dag/dag_vector.h + + + + + + + + + + + + + + + + + + + + + + + resource_slot + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<render/resourceSlot/nodeHandleWithSlotsAccess.h> +#include<dag/dag_vector.h> + + +namespaceresource_slot +{ + +usingNodeHandleWithSlotsAccessVector=dag::Vector<NodeHandleWithSlotsAccess>; + +}//namespaceresource_slot + + + + diff --git a/breathe/doxygen/resourceSlot/xml/register_access_8h.xml b/breathe/doxygen/resourceSlot/xml/register_access_8h.xml new file mode 100644 index 000000000..f52edf579 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/register_access_8h.xml @@ -0,0 +1,89 @@ + + + + registerAccess.h + render/resourceSlot/state.h + render/resourceSlot/actions.h + render/daBfg/bfg.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + resource_slot + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<render/resourceSlot/state.h> +#include<render/resourceSlot/actions.h> + +#include<render/daBfg/bfg.h> + +namespaceresource_slot +{ + +template<classF> +[[nodiscard]]resource_slot::NodeHandleWithSlotsAccessregister_access(dabfg::NameSpacens,constchar*name, +constchar*source_location,resource_slot::detail::ActionList&&action_list,F&&declaration_callback) +{ +returnresource_slot::detail::register_access(ns,name,eastl::move(action_list), +[ns,declCb=eastl::forward<F>(declaration_callback),name,source_location](resource_slot::States)mutable{ +returnns.registerNode(name,source_location, +[declCb2=eastl::forward<F>(declCb),s](dabfg::Registryr){returndeclCb2(eastl::move(s),r);}); +}); +} + +template<classF> +[[nodiscard]]resource_slot::NodeHandleWithSlotsAccessregister_access(constchar*name,constchar*source_location, +resource_slot::detail::ActionList&&action_list,F&&declaration_callback) +{ +returnresource_slot::register_access(dabfg::root(),name,source_location,eastl::move(action_list), +eastl::forward<F>(declaration_callback)); +} + +}//namespaceresource_slot + + + + diff --git a/breathe/doxygen/resourceSlot/xml/resolve_access_8h.xml b/breathe/doxygen/resourceSlot/xml/resolve_access_8h.xml new file mode 100644 index 000000000..a0eecc9c4 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/resolve_access_8h.xml @@ -0,0 +1,24 @@ + + + + resolveAccess.h + resource_slot + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +namespaceresource_slot +{ +voidresolve_access(); +}//namespaceresource_slot + + + + diff --git a/breathe/doxygen/resourceSlot/xml/state_8h.xml b/breathe/doxygen/resourceSlot/xml/state_8h.xml new file mode 100644 index 000000000..9f30f9641 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/state_8h.xml @@ -0,0 +1,88 @@ + + + + state.h + render/daBfg/nameSpace.h + /home/runner/work/DagorEngine/DagorEngine/prog/gameLibs/publicInclude/render/resourceSlot/registerAccess.h + + + + + + + + + + + + + + + + + + + + + + + + resource_slot::State + dabfg + resource_slot + + + + + +// +//DagorEngine6.5-GameLibraries +//Copyright(C)GaijinGamesKFT.Allrightsreserved. +// +#pragmaonce + +#include<render/daBfg/nameSpace.h> + +namespacedabfg +{ +NameSpaceroot(); +}//namespacedabfg + +namespaceresource_slot +{ + +structState +{ +State(); + +State(constState&)=default; +State&operator=(constState&)=default; +State(State&&)=default; +State&operator=(State&&)=default; +~State()=default; + +constchar*resourceToReadFrom(constchar*slot_name)const; + +constchar*resourceToCreateFor(constchar*slot_name)const; + +uint16_torderInChain()const{returnorder;} +uint16_tsizeOfChain()const{returnsize;} +boolisNodeLastInChain()const{returnorder==size-1;} + +private: +dabfg::NameSpacenameSpace; +intnodeId; +uint16_torder; +uint16_tsize; + +State(dabfg::NameSpacens,intnode_id,uint16_torder_in_chain,uint16_tsize_of_chain); +friendvoidresolve_access(); +}; + +static_assert(sizeof(State)==sizeof(int)*3); + +}//namespaceresource_slot + + + + diff --git a/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_create.xml b/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_create.xml new file mode 100644 index 000000000..49923b75a --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_create.xml @@ -0,0 +1,89 @@ + + + + resource_slot::Create + actions.h + + + ::resource_slot::detail::SlotId + ::resource_slot::detail::SlotId resource_slot::Create::slot + + slot + + + + + + + + + + ::resource_slot::detail::ResourceId + ::resource_slot::detail::ResourceId resource_slot::Create::resource + + resource + + + + + + + + + + + + + resource_slot::Create::Create + (const char *slot_name, const char *resource_name) + Create + + const char * + slot_name + + + const char * + resource_name + + + + +Constructor + + +slot_name + + +name of the slot + + + + +resource_name + + +name of the resource, that MUST be created in current node and WILL be saved into slot for using after the node + + + + + + + + + + + + + +Create request +Declared resource MUST be created in the node + + + + resource_slot::CreateCreate + resource_slot::Createresource + resource_slot::Createslot + + + diff --git a/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_node_handle_with_slots_access.xml b/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_node_handle_with_slots_access.xml new file mode 100644 index 000000000..46fd89d1d --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_node_handle_with_slots_access.xml @@ -0,0 +1,261 @@ + + + + resource_slot::NodeHandleWithSlotsAccess + nodeHandleWithSlotsAccess.h + + + dabfg::NameSpace + dabfg::NameSpace resource_slot::NodeHandleWithSlotsAccess::nameSpace + + nameSpace + + + + + + + + + + int + int resource_slot::NodeHandleWithSlotsAccess::id + + id + + + + + + + + + + unsigned + unsigned resource_slot::NodeHandleWithSlotsAccess::generation + + generation + 31 + + + + + + + + + + unsigned + unsigned resource_slot::NodeHandleWithSlotsAccess::isValid + + isValid + 1 + + + + + + + + + + + + + resource_slot::NodeHandleWithSlotsAccess::NodeHandleWithSlotsAccess + () + NodeHandleWithSlotsAccess + + + + + + + + + + + resource_slot::NodeHandleWithSlotsAccess::NodeHandleWithSlotsAccess + (NodeHandleWithSlotsAccess &&h) + NodeHandleWithSlotsAccess + + NodeHandleWithSlotsAccess && + h + + + + + + + + + + + NodeHandleWithSlotsAccess & + NodeHandleWithSlotsAccess& resource_slot::NodeHandleWithSlotsAccess::operator= + (NodeHandleWithSlotsAccess &&h) + operator= + + NodeHandleWithSlotsAccess && + h + + + + + + + + + + + + resource_slot::NodeHandleWithSlotsAccess::NodeHandleWithSlotsAccess + (const NodeHandleWithSlotsAccess &)=delete + NodeHandleWithSlotsAccess + + const NodeHandleWithSlotsAccess & + + + + + + + + + + + NodeHandleWithSlotsAccess & + NodeHandleWithSlotsAccess& resource_slot::NodeHandleWithSlotsAccess::operator= + (const NodeHandleWithSlotsAccess &)=delete + operator= + + const NodeHandleWithSlotsAccess & + + + + + + + + + + + void + void resource_slot::NodeHandleWithSlotsAccess::reset + () + reset + + + +Reset handle if set. + + + + + + + bool + bool resource_slot::NodeHandleWithSlotsAccess::valid + () const + valid + + + +Check, if handle is valid + + + + + + + + resource_slot::NodeHandleWithSlotsAccess::~NodeHandleWithSlotsAccess + () + ~NodeHandleWithSlotsAccess + + + +Destructor; calls reset() + + + + + + + void + void resource_slot::NodeHandleWithSlotsAccess::_noteContext + (const das::Context *context) const + _noteContext + + const das::Context * + context + + + + + + + + + + + + + + resource_slot::NodeHandleWithSlotsAccess::NodeHandleWithSlotsAccess + (dabfg::NameSpace ns, int handle_id, unsigned generation_number) + NodeHandleWithSlotsAccess + + dabfg::NameSpace + ns + + + int + handle_id + + + unsigned + generation_number + + + + +Private constructor +INTERNAL use only + + + + + + + + + +Handle for access to resource slots storage. +Also it is proxy for dabfg::NodeHandle. +If use in usual code: +#include<render/resourceSlot/nodeHandleWithSlotsAccess.h> + +If use in ecs: +#include<render/resourceSlot/ecs/nodeHandleWithSlotsAccess.h> + + + + + resource_slot::NodeHandleWithSlotsAccess_noteContext + resource_slot::NodeHandleWithSlotsAccessgeneration + resource_slot::NodeHandleWithSlotsAccessid + resource_slot::NodeHandleWithSlotsAccessisValid + resource_slot::NodeHandleWithSlotsAccessnameSpace + resource_slot::NodeHandleWithSlotsAccessNodeHandleWithSlotsAccess + resource_slot::NodeHandleWithSlotsAccessNodeHandleWithSlotsAccess + resource_slot::NodeHandleWithSlotsAccessNodeHandleWithSlotsAccess + resource_slot::NodeHandleWithSlotsAccessNodeHandleWithSlotsAccess + resource_slot::NodeHandleWithSlotsAccessoperator= + resource_slot::NodeHandleWithSlotsAccessoperator= + resource_slot::NodeHandleWithSlotsAccessreset + resource_slot::NodeHandleWithSlotsAccessvalid + resource_slot::NodeHandleWithSlotsAccess~NodeHandleWithSlotsAccess + + + diff --git a/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_read.xml b/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_read.xml new file mode 100644 index 000000000..bc164eac9 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_read.xml @@ -0,0 +1,107 @@ + + + + resource_slot::Read + actions.h + + + ::resource_slot::detail::SlotId + ::resource_slot::detail::SlotId resource_slot::Read::slot + + slot + + + + + + + + + + int + int resource_slot::Read::priority + + priority + + + + + + + + + + + + constexpr int + constexpr int resource_slot::Read::DEFAULT_READ_PRIORITY + + DEFAULT_READ_PRIORITY + = INT_MAX + + + + + + + + + + + + + resource_slot::Read::Read + (const char *slot_name, int read_priority=DEFAULT_READ_PRIORITY) + Read + + const char * + slot_name + + + int + read_priority + DEFAULT_READ_PRIORITY + + + + +Constructor + + +slot_name + + +name of the slot + + + + +read_priority + + +priority of read; nodes with LOWER priority will be scheduled BEFORE current node. By default Read will be scheduled after all Update of this slot. + + + + + + + + + + + + + +Read request +Requested slot CAN be read in the node + + + + resource_slot::ReadDEFAULT_READ_PRIORITY + resource_slot::Readpriority + resource_slot::ReadRead + resource_slot::Readslot + + + diff --git a/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_state.xml b/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_state.xml new file mode 100644 index 000000000..66e100619 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_state.xml @@ -0,0 +1,338 @@ + + + + resource_slot::State + state.h + + + dabfg::NameSpace + dabfg::NameSpace resource_slot::State::nameSpace + + nameSpace + + + + + + + + + + int + int resource_slot::State::nodeId + + nodeId + + + + + + + + + + uint16_t + uint16_t resource_slot::State::order + + order + + + + + + + + + + uint16_t + uint16_t resource_slot::State::size + + size + + + + + + + + + + + + + resource_slot::State::State + () + State + + + + + + + + + + + resource_slot::State::State + (const State &)=default + State + + const State & + + + + + + + + + + + State & + State& resource_slot::State::operator= + (const State &)=default + operator= + + const State & + + + + + + + + + + + + resource_slot::State::State + (State &&)=default + State + + State && + + + + + + + + + + + State & + State& resource_slot::State::operator= + (State &&)=default + operator= + + State && + + + + + + + + + + + + resource_slot::State::~State + ()=default + ~State + + + + + + + + + + const char * + const char* resource_slot::State::resourceToReadFrom + (const char *slot_name) const + resourceToReadFrom + + const char * + slot_name + + + + +Get name of resource in slot before the node. +This function can be called several times inside the node. + + +slot_name + + +name of slot; should be requested in action_list + + + +current resource + + + + + + + + + const char * + const char* resource_slot::State::resourceToCreateFor + (const char *slot_name) const + resourceToCreateFor + + const char * + slot_name + + + + +Get name of resource from declaration of Create or Update for using after the node. +This function can be called several times inside the node. For example, for using in readTextureHistory(). + + +slot_name + + +name of slot; should be requested in action_list + + + +resource after node + + + + + + + + + uint16_t + uint16_t resource_slot::State::orderInChain + () const + orderInChain + + + + + + + + + + uint16_t + uint16_t resource_slot::State::sizeOfChain + () const + sizeOfChain + + + + + + + + + + bool + bool resource_slot::State::isNodeLastInChain + () const + isNodeLastInChain + + + + + + + + + + + + + resource_slot::State::State + (dabfg::NameSpace ns, int node_id, uint16_t order_in_chain, uint16_t size_of_chain) + State + + dabfg::NameSpace + ns + + + int + node_id + + + uint16_t + order_in_chain + + + uint16_t + size_of_chain + + + + + + + + + + + + + void + void resolve_access + () + resolve_access + + + +Perform all registered access and set NodeHandles. +MUST be executed in every frame before dabfg::run_nodes() + + +storage_id + + +RESERVED for future use + + + + + + + + + + + + + +State of slots storage. +Size is kept small, can be copied to declaration_callback. + + + + resource_slot::StateisNodeLastInChain + resource_slot::StatenameSpace + resource_slot::StatenodeId + resource_slot::Stateoperator= + resource_slot::Stateoperator= + resource_slot::Stateorder + resource_slot::StateorderInChain + resource_slot::Stateresolve_access + resource_slot::StateresourceToCreateFor + resource_slot::StateresourceToReadFrom + resource_slot::Statesize + resource_slot::StatesizeOfChain + resource_slot::StateState + resource_slot::StateState + resource_slot::StateState + resource_slot::StateState + resource_slot::State~State + + + diff --git a/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_update.xml b/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_update.xml new file mode 100644 index 000000000..20bd988be --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/structresource__slot_1_1_update.xml @@ -0,0 +1,115 @@ + + + + resource_slot::Update + actions.h + + + ::resource_slot::detail::SlotId + ::resource_slot::detail::SlotId resource_slot::Update::slot + + slot + + + + + + + + + + ::resource_slot::detail::ResourceId + ::resource_slot::detail::ResourceId resource_slot::Update::resource + + resource + + + + + + + + + + int + int resource_slot::Update::priority + + priority + + + + + + + + + + + + + resource_slot::Update::Update + (const char *slot_name, const char *resource_name, int update_priority) + Update + + const char * + slot_name + + + const char * + resource_name + + + int + update_priority + + + + +Constructor + + +slot_name + + +name of the slot + + + + +resource_name + + +name of the resource, that MUST be created in current node and WILL be saved into slot for using after the node + + + + +update_priority + + +priority of update, nodes with HIGHER priority will be scheduled AFTER nodes with LOWER priority + + + + + + + + + + + + + +Update request +Requested slot CAN be read in the node and declared resource MUST be created in the node + + + + resource_slot::Updatepriority + resource_slot::Updateresource + resource_slot::Updateslot + resource_slot::UpdateUpdate + + + diff --git a/breathe/doxygen/resourceSlot/xml/xml.xsd b/breathe/doxygen/resourceSlot/xml/xml.xsd new file mode 100644 index 000000000..9f80fe158 --- /dev/null +++ b/breathe/doxygen/resourceSlot/xml/xml.xsd @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/dagor-home/dagor_engine.html b/dagor-home/dagor_engine.html new file mode 100644 index 000000000..1454fd7ea --- /dev/null +++ b/dagor-home/dagor_engine.html @@ -0,0 +1,284 @@ + + + + + + + Introduction — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Introduction

+

The Dagor Engine is an open-source game engine by +Gaijin, continuously updated since 2002 for +high-performance gaming and realistic graphics.

+
+
+

Platform Support

+

Supports Windows PC, Linux, iOS, Android, Nintendo Switch, +PlayStation 4, PlayStation 5, Xbox One, Xbox Series X/S.

+
+
+

Games Created with the Dagor Engine

+

Powers games with detailed physics and large-scale environments, including:

+
    +
  • War Thunder: Vehicular combat game with air, +land, and sea battles across historical eras.

  • +
  • Enlisted: Squad-based WWII first-person shooter +with large-scale battles.

  • +
  • War Thunder Mobile: Mobile adaptation of War +Thunder for iOS and Android.

  • +
+
+
+

Key Features

+
    +
  • Graphics Engine: Supports DirectX 12, Vulkan, and Metal APIs.

  • +
  • Physics Engine: Dagor supports third party open source industry +standard solutions for physics simulation: Jolt +Physics (preferable) and Bullet +Physics.

  • +
  • DaGI (Dagor Global Illumination)

    + +
  • +
  • Darg (Dagor Reactive GUI)

    +
      +
    • Reactive UI framework based on +Quirrel scripting.

    • +
    • Supports stateful components and modular development with native code +integration.

    • +
    +
  • +
  • Dagor ECS

    +
      +
    • Data-driven Entity Component System for modular game development.

    • +
    • Manages entities through templates, supporting parallel processing and cache +efficiency.

    • +
    +
  • +
  • Render Framegraph

    +
      +
    • Directed acyclic graph for defining frame rendering sequences.

    • +
    • Allows flexible integration of game-specific and engine features.

    • +
    +
  • +
  • daNetGame Framework

    +
      +
    • Modular platform for comprehensive game development.

    • +
    • Integrates core systems like rendering, physics, networking, and audio.

    • +
    +
  • +
  • Daslang

    +
      +
    • Scripting language for interacting with core systems like rendering and +physics.

    • +
    • Enables dynamic content management and engine functionality extension.

    • +
    +
  • +
  • DSHL (Dagor Shader Language)

    +
      +
    • Specialized language for shader creation and management.

    • +
    • Supports advanced features like conditionals, custom data types, and +hardware-specific optimizations.

    • +
    +
  • +
  • Toolset

    +
      +
    • Dagor Editor: Level +editor with terrain editing, prefab placement, and plugin support.

    • +
    • Asset +Viewer: +Resource editor and viewer for special effects, particle systems, and +animations.

    • +
    • Impostor Baker: Tool +for optimizing rendering with simplified 3D object representations.

    • +
    • Importers and Exporters: Integration +with 3ds Max, Maya, and Blender.

    • +
    +
  • +
  • Networking Subsystem

    +
      +
    • Scalable, low-latency architecture for multiplayer games.

    • +
    • Supports TCP and UDP protocols, with built-in tools for debugging, lag +compensation, and data compression.

    • +
    +
  • +
  • Audio Engine

    +
      +
    • Uses FMOD library for 3D sound, DSP effects, and multi-channel support.

    • +
    +
  • +
  • Animation System

    +
      +
    • Supports skeletal and procedural animation, blending, morphing, and various +controllers, including Inverse Kinematics, additive animations and motion +matching.

    • +
    +
  • +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-home/documentation/contributing_to_docs.html b/dagor-home/documentation/contributing_to_docs.html new file mode 100644 index 000000000..eabd5788e --- /dev/null +++ b/dagor-home/documentation/contributing_to_docs.html @@ -0,0 +1,202 @@ + + + + + + + Contributing to Documentation — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Contributing to Documentation

+

If you would like to contribute to the Dagor Engine documentation, please +follow the steps outlined below:

+
    +
  1. Fork the Repository:

    +

    Fork the Dagor Engine repository on GitHub and create a new branch +specifically for your documentation updates.

    +
  2. +
  3. Make Your Changes:

    +

    Edit or add documentation content as needed. Ensure that your changes are +accurate and improve the clarity or completeness of the documentation.

    +
  4. +
  5. Build Locally:

    +

    Run a local build of the documentation to +verify that your changes render correctly. This helps catch any formatting or +structural issues before submission.

    +
  6. +
  7. Adhere to Style Guidelines:

    +

    Ensure that your modifications conform to the documentation style guidelines. +Consistency in tone, formatting, and structure is essential for maintaining +high-quality documentation.

    +
  8. +
  9. Commit and Submit:

    +

    Commit your changes with clear and descriptive commit messages. Once you are +satisfied with your updates, open a pull request (PR) on the original Dagor +Engine repository for review.

    +
  10. +
+

By following these steps, you help maintain the quality and accuracy of the +Dagor Engine documentation, benefiting the entire development community.

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-home/documentation/how_to_build_docs_locally.html b/dagor-home/documentation/how_to_build_docs_locally.html new file mode 100644 index 000000000..80ba3a76e --- /dev/null +++ b/dagor-home/documentation/how_to_build_docs_locally.html @@ -0,0 +1,239 @@ + + + + + + + How to Build Documentation Locally — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

How to Build Documentation Locally

+

To generate local documentation for the Dagor Engine, follow these steps:

+
    +
  1. Clone the Repository

    +

    Clone the Dagor Engine +repository.

    +
  2. +
  3. Install Python

    +

    Download and install Python.

    +
  4. +
  5. Install Sphinx and Dependencies

    +

    Use the provided configuration file to install +Sphinx and required components:

    +
    pip install -r requirements.txt
    +
    +
    +
    +

    Note

    +

    On Windows, Sphinx and its dependencies must be installed with +administrator privileges.

    +
    +
  6. +
  7. Install Doxygen

    +

    Download and install Doxygen.

    +
    +

    Note

    +

    On Windows, add Doxygen to the environment PATH: +$env:PATH=$env:PATH+';<doxygen_installation_dir>\bin\', +replacing <doxygen_installation_dir> with the path to your Doxygen +installation directory (e.g., c:\Program Files\doxygen).

    +
    +
  8. +
  9. Build Documentation

    +

    In the DagorEngine/_docs directory, execute the following steps:

    +
      +
    • Run the Build Script

      +

      Execute the script to parse source files:

      +
      python3 build_all_docs.py
      +
      +
      +

      This script will process documentation from DagorEngine/prog and output +it to _docs/source/.

      +
    • +
    • Run Sphinx Build Command

      +

      Use Sphinx to build the documentation:

      +
        +
      • On Windows:

        +
        sphinx-build . _build
        +
        +
        +
      • +
      • On Linux:

        +
        python3 -m sphinx . _build
        +
        +
        +
      • +
      +

      Sphinx will generate the documentation in HTML format by default, placing +the output in _docs/_build.

      +
    • +
    +
  10. +
  11. View the Documentation

    +

    Open the index.html file located in _docs/_build to view the generated +documentation.

    +
  12. +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-home/documentation/index.html b/dagor-home/documentation/index.html new file mode 100644 index 000000000..59ce8e5c6 --- /dev/null +++ b/dagor-home/documentation/index.html @@ -0,0 +1,184 @@ + + + + + + + Documentation — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+ + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-home/documentation/qdox-user-guide/index.html b/dagor-home/documentation/qdox-user-guide/index.html new file mode 100644 index 000000000..9d7ed0655 --- /dev/null +++ b/dagor-home/documentation/qdox-user-guide/index.html @@ -0,0 +1,202 @@ + + + + + + + Qdox User Guide — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dagor-home/documentation/qdox-user-guide/qdox.html b/dagor-home/documentation/qdox-user-guide/qdox.html new file mode 100644 index 000000000..5be121e4a --- /dev/null +++ b/dagor-home/documentation/qdox-user-guide/qdox.html @@ -0,0 +1,491 @@ + + + + + + + QDox, writing your documentation — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

QDox, writing your documentation

+

QDox allows you to generate docs (ReStrcturedText, sphinx rst) from .cpp files +(and later in future - perhaps from .nut quirrel modules).

+

written in python 3.10, no external dependecies, should work in Python 3.9 or later. +Inspired by LuaDox +but written much more dirty and probably needs refactor. +It was not possible to use LuaDox mostly not because of different comment style in cpp and lua, +but because of that Quirrel is much more complex language and I want to try to get more from cpp files

+

What is not done yet, but can be done in future:

+
+
    +
  • outside the scope definitions and later bindings. Can produce unreferenced objects.

  • +
  • multiscope path definition @class foo/bar/Baz – add class Baz in module foo and in table bar

  • +
  • support for @example @usage @image @icon and others handy things

  • +
  • multiline param and return definitions

  • +
  • generate stubs from parsed representation (one of the goals)

  • +
+
+

But it will likely require to significantly rewrite parser again. So maybe later.

+

A brief example of how to comment cpp code:

+
+
part of sqWebBrowser.cpp
+
void bind_webbrowser(SqModules* sq_modules_mgr)
+{
+  Sqrat::Table tbl(sq_modules_mgr->getVM());
+  /**@module browser
+
+Opens embeded web browser. Requires native cef binary and its integration.
+
+  */
+  tbl
+    .Func("can_use_embeded_browser", can_use_embedded_browser)
+    ///@return b : Returns can browser be opened
+    .Func("browser_go_back", go_back)
+    .Func("browser_reload_page", reload)
+    ///Will reload page
+    .Func("browser_add_window_method", add_window_method)
+    ///@param method c : add function
+  ;
+
+  using namespace webbrowser;
+
+  CONST(BROWSER_EVENT_INITIALIZED);
+  CONST(BROWSER_EVENT_DOCUMENT_READY);
+
+  sq_modules_mgr->addNativeModule("browser", tbl);
+}
+
+
+
+
+

The Basics

+

All QDox comments should begin from three slashes /// or doxygen style multiline comment /** */.

+

Everything starts with @module or @page +You should place ///@module <your module name> or ///@page <your page name> somewhere in the file, +cause without module all other things can’t be added

+

There are several directives you need to know:

+

collections or containers can have some other members in them:

+
+
    +
  • @module or @page can have tables, classes, functions, consts, values, enums. Usually it exports a table.

  • +
  • @table can have functions, classes, enums, tables, consts and values

  • +
  • @class can have functions, ctor, operators, Var, Prop, Const

  • +
  • @enum can have only consts and values

  • +
+
+

‘Leaf’ objects (can’t have members):

+
+
    +
  • @function - can be only in tables or module

  • +
  • @ctor - can be only in classes

  • +
  • @operator - can be only in classes

  • +
  • @property - can be only in classes

  • +
  • @var - can be only in classes

  • +
  • @value - can be in module, table, class, enum

  • +
  • @const - can be in module, table, class, enum

  • +
+
+

‘Doc’ objects:

+
+
    +
  • multiline - @code, @expand, @tip, @seealso, @warning, @tip, @alert or @danger, @note. +These objects close their scope when <tag_name>@ appears (like code@, tip@, etc) or comment ended. +These objects can be at any scope, as they just add simple way of create rst (see below)

  • +
+
+

Each object - container or leaf type - can be defined with scope of module.

+
+

@class myModule/MyClass will set that MyClass is in myModule.

+
+

Functions, tables and classes can be defined as a module:

+
+

@class DataBlock = DataBlock will describe module that exports class DataBlock.

+
+
+
In function scope (as well as in operator and ctor) you can use following directive :
    +
  • @paramsnum - integer for number of parameters (called paramscheck in cpp). +If negative - means that function can be called with at least that amount of parameters, but also with more than that.

  • +
  • @kwarged - means that function paramaters should be provided via table. like: function foo({argument=1, arg2=2})

  • +
  • @typemask - string with typemask. See documentation

  • +
  • @vargved - means that function can have variable arguments count

  • +
  • @param - should be @param <name> <type> : description, for example @param title t : Title of messagebox

  • +
  • @return - should be @return typemask : any description or @return typemask

  • +
+
+
+
+

Note

+

All directives, except doc-objects, @param and @return follows very simple declaration rule:

+

@fieldname value brief description

+

@param and @return use : to separate description from other arguments, cause they can have variable number of arguments

+
+
+

Note

+

@param can have following variants:

+

@param name : description

+

@param name type : description

+

@param name type defvalue : description

+

and description is always optional

+
+
+
In class scope:
    +
  • @extends - what class does this class extends

  • +
+
+
In property of class:
    +
  • @writeable - can you modify property.

  • +
+
+
In value or const or Var scope:
    +
  • @ftype - type of constant (typemask-like string or just any text)

  • +
  • @fvalue - value of constant

  • +
+
+
In scope of any object you can use following directives:
    +
  • @brief - short description

  • +
  • @parent - scope reference (to show name like parent.Object)

  • +
+
+
+
+

Special directives

+
+
@resetscope - to exit all scopes (modules, functions).

Basically to stop autodocumentation till next module scope will be entered

+
+
+

@skipline - skipnext line in parsing

+
+
+
+

Autodocumentation for .Func

+

If function used in .Func() is defined in the same cpp file - it can be autodocumented. +No lambdas or namespaces are supported. +No multiline function definition is supported also

+
int addTen(int val)
+{
+  return val+10;
+}
+...
+.Func("bindFuncName", CppFuncName)  //will generate return type and arguments type and name in documentation
+
+
+
+
+

Doc-objects

+
+

Mutltiline (blocks)

+

@alert:

+
@alert
+  any alert here
+alert@
+
+
+
+

Danger

+

any alert here

+
+

The same syntax goes for @tip, @note, @seealso, @warning

+
+

Tip

+

Tip! Nice tip!

+
+
+

Warning

+

Warning!

+
+
+

Danger

+

Use this alert block to bring the reader’s attention to a serious threat.

+
+
+

See also

+

place here some links

+
+
+

Note

+

And this is note

+
+
+

@expand (aliases @spoiler, dropdown):

+
@spoiler My spoiler
+  toggle text that can be any rst (but not recursive code objects)
+
+  preformat::
+
+    some code or preformat text
+spoiler@
+
+
+
+ +My spoiler
+
+
+
+
+

toggle text that can be any rst (but not recursive code objects)

+

preformat:

+
some code or preformat text
+
+
+
+

+

@code:

+
@code some_name lang
+  watch indent
+    will generate block
+code@
+
+
+
+
some_name
+
  watch indent
+    will generate block
+
+
+
+
+
+
+

Configurate what to analyze and build

+

You need to set where your files to parse are placed and what is documentation about. +This is done via .qdox config +.qdox config is json (with cpp style single line comments supported)

+
+
.qdox
+
  [
+  {
+    "paths": ["prog/gameLibs/quirrel"], //folders or files list, required, relative to config
+    "doc_chapter": "quirrel_gamelibs", //internal folder name, required
+    "chapter_desc": "Docs for Quirrel modules extracted from source in gameLibs", //displayed title, optional
+    "chapter_title": "Quirrel Gamelibs Native Modules", //displayed title, optional
+    "extensions": [".cpp"], //optional, list of extensions of files
+    "exclude_dirs_re": [], //optional, list of regexps that should full match to exclude dirs in recursive search
+    "exclude_files_re": [], //optional, list of full match regexp to skip files'
+    "recursive": true //optional, do recursive search for folders'
+  }
+  ]
+
+
+
+
+
+

Building and testing the qdox

+

You need python 3.10+ installed with python in paths

+

Installation:

+
pip install sphinx
+pip install myst
+pip install myst_parser
+pip install sphinx_rtd_theme
+pip install sphinx-autobuild
+
+
+

Than in your dagor folder you can just run following commandlines:

+
python _docs/qdoc_main.py
+sphinx-build -b html -d _docs/build/doctrees _docs/source _docs/build/html
+
+
+

(in folder where .qdox config is build (see usage for details))

+

to watch changes in cpp files, configs and autorebuild:

+
@start python _docs/watch.py
+@start sphinx-autobuild --port 8080 _docs/source _docs/build/html
+
+
+

(in .qdox folder to start autorebuild rst from source and config)

+

To have a look on a result - open with you browser _docs/build/html/index.html if you build manually (first way) +or localhost:8080 if you launch autobuild

+
+
+

ReStructuredText

+

Any docline that is not some directives is just restructured text

+

There is lots of RTFM of sphix rst in internet

+

Strong emphasis: small emphasis

+

Here are some goodies you can do (see source in source/user-guid/qdox.rst to understand how that was made)

+

inline let = function(){} wow

+

inline void function(){} here

+

For example separate text by lines:

+
+

A coloured icon: , look at it.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-home/documentation/qdox-user-guide/rst-cheatsheet.html b/dagor-home/documentation/qdox-user-guide/rst-cheatsheet.html new file mode 100644 index 000000000..62d045498 --- /dev/null +++ b/dagor-home/documentation/qdox-user-guide/rst-cheatsheet.html @@ -0,0 +1,1002 @@ + + + + + + + RST CheatSheet — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

RST CheatSheet

+
+

Inline Markup

+

Inline markup allows words and phrases within text to have character styles (like italics and boldface) and functionality (like hyperlinks).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
*emphasis*
+
+
+

emphasis

**strong emphasis**
+
+
+

strong emphasis

`interpreted text`
+
+
+

The rendering and meaning of interpreted text +is domain- or application-dependent.

``inline literal``
+
+
+

inline literal

reference_
+
+
+

reference

`phrase reference`_
+
+
+

phrase reference

anonymous__
+
+
+

anonymous

_`inline internal target`
+
+
+

inline internal target

|substitution reference|
+
+
+

The result is substituted in from the +substitution definition.

footnote reference [1]_
+
+
+

footnote reference [1]

citation reference [CIT2002]_
+
+
+

citation reference [CIT2002]

http://docutils.sf.net/
+
+
+

http://docutils.sf.net/

+
+
+

Escaping with Backslashes

+

reStructuredText uses backslashes (”\”) to override the special meaning given to markup characters and get +the literal characters themselves. To get a literal backslash, use an escaped backslash (”\\”). For example:

+ + + + + + + + + +
*escape* ``with`` "\"
+
+
+

escape with “"

\*escape* \``with`` "\\"
+
+
+

*escape* ``with`` “\”

+
+
+

Lists

+ + + + + + + + + + + + + + + + + + +
- This is item 1. A blank line before the first
+  and last items is required.
+- This is item 2
+
+- Item 3: blank lines between items are optional.
+- Item 4: Bullets are "-", "*" or "+".
+  Continuing text must be aligned after the bullet
+  and whitespace.
+- This list item contains nested items
+
+  - Nested items must be indented to the same
+    level
+
+
+
    +
  • This is item 1. A blank line before the first +and last items is required.

  • +
  • This is item 2

  • +
  • Item 3: blank lines between items are optional.

  • +
  • Item 4: Bullets are “-”, “*” or “+”. +Continuing text must be aligned after the bullet +and whitespace.

  • +
  • This list item contains nested items

    +
      +
    • Nested items must be indented to the same +level

    • +
    +
  • +
+
3. This is the first item
+4. This is the second item
+5. Enumerators are arabic numbers,
+   single letters, or roman numerals
+6. List items should be sequentially
+   numbered, but need not start at 1
+   (although not all formatters will
+   honour the first index).
+#. This item is auto-enumerated
+
+
+
    +
  1. This is the first item

  2. +
  3. This is the second item

  4. +
  5. Enumerators are arabic numbers, +single letters, or roman numerals

  6. +
  7. List items should be sequentially +numbered, but need not start at 1 +(although not all formatters will +honour the first index).

  8. +
  9. This item is auto-enumerated

  10. +
+
what
+  Definition lists associate a term with
+  a definition.
+
+how
+  The term is a one-line phrase, and the
+  definition is one or more paragraphs or
+  body elements, indented relative to the
+  term. Blank lines are not allowed
+  between term and definition.
+
+
+
+
what

Definition lists associate a term with +a definition.

+
+
how

The term is a one-line phrase, and the +definition is one or more paragraphs or +body elements, indented relative to the +term. Blank lines are not allowed +between term and definition.

+
+
+
:Authors:
+    Tony J. (Tibs) Ibbs,
+    David Goodger
+
+:Version: 1.0 of 2001/08/08
+:Dedication: To my father.
+
+
+
+
Authors:
+

Tony J. (Tibs) Ibbs, +David Goodger

+
+
Version:
+

1.0 of 2001/08/08

+
+
Dedication:
+

To my father.

+
+
+
-a            command-line option "a"
+-b file       options can have arguments
+              and long descriptions
+--long        options can be long also
+--input=file  long options can also have
+              arguments
+/V            DOS/VMS-style options too
+
+
+
+
-a
+

command-line option “a”

+
+
-b file
+

options can have arguments +and long descriptions

+
+
--long
+

options can be long also

+
+
--input=file
+

long options can also have +arguments

+
+
/V
+

DOS/VMS-style options too

+
+
+
+
+
+

Section Structure

+ + + + + + +
Title
+=====
+
+Titles are underlined (or over- and underlined) with
+a nonalphanumeric character at least as long as the
+text.
+
+A lone top-level section is lifted up to be the
+document's title.
+
+Any non-alphanumeric character can be used, but
+Python convention is:
+
+* ``#`` with overline, for parts
+* ``*`` with overline, for chapters
+* ``=``, for sections
+* ``-``, for subsections
+* ``^``, for subsubsections
+* ``"``, for paragraphs
+
+
+

Title

+

Titles are underlined (or over- and underlined) with +a nonalphanumeric character at least as long as the +text.

+

A lone top-level section is lifted up to be the +document’s title.

+

Any non-alphanumeric character can be used, but +Python convention is:

+
    +
  • # with overline, for parts

  • +
  • * with overline, for chapters

  • +
  • =, for sections

  • +
  • -, for subsections

  • +
  • ^, for subsubsections

  • +
  • ", for paragraphs

  • +
+
+
+
+

Blocks

+ + + + + + + + + + + + + + + + + + + + + +
This is a paragraph.
+
+Paragraphs line up at their left edges, and are
+normally separated by blank lines.
+
+
+

This is a paragraph.

+

Paragraphs line up at their left +edges, and are normally separated +by blank lines.

+
A paragraph containing only two colons indicates
+the following indented or quoted text is a literal
+block or quoted text is a literal block.
+
+::
+
+  Whitespace, newlines, blank lines, and  all kinds of
+  markup (like *this* or \this) is preserved here.
+
+You can also tack the ``::`` at the end of a
+paragraph::
+
+   It's very convenient to use this form.
+
+Per-line quoting can also be used for unindented
+blocks::
+
+> Useful for quotes from email and
+> for Haskell literate programming.
+
+
+

A paragraph containing only two colons +indicates that the following indented +or quoted text is a literal block.

+
Whitespace, newlines, blank lines, and
+all kinds of markup (like *this* or
+\this) is preserved by literal blocks.
+
+
+

You can also tack the :: at the end of a +paragraph:

+
It's very convenient to use this form.
+
+
+

Per-line quoting can also be used for +unindented blocks:

+
> Useful for quotes from email and
+> for Haskell literate programming.
+
+
+
| Line blocks are useful for addresses,
+| verse, and adornment-free lists.
+|
+| Each new line begins with a
+| vertical bar ("|").
+|     Line breaks and initial indents
+|     are preserved.
+| Continuation lines are wrapped
+  portions of long lines; they begin
+  with spaces in place of vertical bars.
+
+
+
+
Line blocks are useful for addresses,
+
verse, and adornment-free lists.
+

+
Each new line begins with a
+
vertical bar (“|”).
+
+
Line breaks and initial indents
+
are preserved.
+
+
Continuation lines are wrapped +portions of long lines; they begin +with spaces in place of vertical bars.
+
+
Block quotes are just:
+
+    Indented paragraphs,
+
+        and they may nest.
+
+
+

Block quotes are just:

+
+

Indented paragraphs,

+
+

and they may nest.

+
+
+
Doctest blocks are interactive
+Python sessions. They begin with
+"``>>>``" and end with a blank line.
+
+>>> print "This is a doctest block."
+This is a doctest block.
+
+
+

Doctest blocks are interactive +Python sessions. They begin with +“>>>” and end with a blank line.

+
>>> print "This is a doctest block."
+This is a doctest block.
+
+
+
A transition marker is a horizontal line
+of 4 or more repeated punctuation
+characters.
+
+------------
+
+A transition should not begin or end a
+section or document, nor should two
+transitions be immediately adjacent.
+
+
+

A transition marker is a horizontal line +of 4 or more repeated punctuation +characters.

+ + + + + +

------

+

A transition should not begin or end a +section or document, nor should two +transitions be immediately adjacent.

+
+
+
+

Tables

+

There are two syntaxes for tables in reStructuredText. Grid tables are complete but cumbersome to create. Simple +tables are easy to create but limited (no row spans, etc.).

+ + + + + + + + + +
+------------+------------+-----------+
+| Header 1   | Header 2   | Header 3  |
++============+============+===========+
+| body row 1 | column 2   | column 3  |
++------------+------------+-----------+
+| body row 2 | Cells may span columns.|
++------------+------------+-----------+
+| body row 3 | Cells may  | - Cells   |
++------------+ span rows. | - contain |
+| body row 4 |            | - blocks. |
++------------+------------+-----------+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +

Header 1

Header 2

Header 3

body row 1

column 2

column 3

body row 2

Cells may span columns.

body row 3

Cells may +span rows.

    +
  • Cells

  • +
  • contain

  • +
  • blocks.

  • +
+

body row 4

+
=====  =====  ======
+   Inputs     Output
+------------  ------
+  A      B    A or B
+=====  =====  ======
+False  False  False
+True   False  True
+False  True   True
+True   True   True
+=====  =====  ======
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Inputs

Output

A

B

A or B

False

False

False

True

False

True

False

True

True

True

True

True

+
+
+
+

Explicit Markup

+

Explicit markup blocks are used for constructs which float (footnotes), have no direct paper-document representation +(hyperlink targets, comments), or require specialized processing (directives). +They all begin with two periods and whitespace, the “explicit markup start”.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Footnote references, like [5]_.
+Note that footnotes may get
+rearranged, e.g., to the bottom of
+the "page".
+
+.. [5] A numerical footnote. Note
+   there's no colon after the ``]``.
+
+
+

Footnote references, like [5]. +Note that footnotes may get +rearranged, e.g., to the bottom of +the “page”.

+ +
Autonumbered footnotes are
+possible, like using [#]_ and [#]_.
+
+.. [#] This is the first one.
+.. [#] This is the second one.
+
+They may be assigned 'autonumber
+labels' - for instance,
+[#fourth]_ and [#third]_.
+
+.. [#third] a.k.a. third_
+
+.. [#fourth] a.k.a. fourth_
+
+
+

Autonumbered footnotes are +possible, like using [1] and [2].

+ +

They may be assigned ‘autonumber +labels’ - for instance, +[4] and [3].

+ +
Auto-symbol footnotes are also
+possible, like this: [*]_ and [*]_.
+
+.. [*] This is the first one.
+.. [*] This is the second one.
+
+
+

Auto-symbol footnotes are also +possible, like this: [*] and [].

+ +
Citation references, like [CIT2002]_.
+Note that citations may get
+rearranged, e.g., to the bottom of
+the "page".
+
+.. [CIT2002] A citation
+   (as often used in journals).
+
+Citation labels contain alphanumerics,
+underlines, hyphens and fullstops.
+Case is not significant.
+
+Given a citation like [this]_, one
+can also refer to it like this_.
+
+.. [this] here.
+
+
+

Citation references, like [CIT2002]. +Note that citations may get +rearranged, e.g., to the bottom of +the “page”.

+
+
+[CIT2002] +(1,2) +

A citation +(as often used in journals).

+
+
+

Citation labels contain alphanumerics, +underlines, hyphens and fullstops. +Case is not significant.

+

Given a citation like [this], one +can also refer to it like this.

+
+
+[this] +

here.

+
+
+
External hyperlinks, like Python_.
+
+.. _Python: http://www.python.org/
+
+
+

External hyperlinks, like Python.

+
External hyperlinks, like `Python
+<http://www.python.org/>`_.
+
+
+

External hyperlinks, like Python.

Internal crossreferences, like example_.
+
+.. _example:
+
+This is an example crossreference target.
+
+
+

Internal crossreferences, like example.

+

This is an example crossreference target.

+
Python_ is `my favourite
+programming language`__.
+
+.. _Python: http://www.python.org/
+
+__ Python_
+
+
+

Python is my favourite +programming language.

+
Titles are targets, too
+=======================
+
+Implict references, like `Titles are targets, too`_.
+
+
+

Titles are targets, too

+

Implict references, like +Titles are targets, too.

+
+
Directives are a general-purpose extension mechanism,

a way of adding support for new constructs without adding

+

new syntax. For a description of all standard directives,

+

see reStructuredText Directives (http://is.gd/2Ecqh).

+
+
+
For instance:
+
+.. image:: magnetic-balls.jpg
+   :width: 40pt
+
+
+

For instance:

+../../../_images/magnetic-balls.jpg +

Substitutions are like inline directives, allowing graphics and arbitrary constructs within text.

The |biohazard| symbol must be used on containers used to
+dispose of medical waste.
+
+.. |biohazard| image:: biohazard.png
+   :align: middle
+   :width: 12
+
+
+

The biohazard symbol must be used on containers used to +dispose of medical waste.

+
+
Any text which begins with an explicit markup start but doesn’t

use the syntax of any of the constructs above, is a comment.

+
+
+
.. This text will not be shown
+   (but, for instance, in HTML might be
+   rendered as an HTML comment)
+
+
+
An "empty comment" does not
+consume following blocks.
+(An empty comment is ".." with
+blank lines before and after.)
+
+..
+
+        So this block is not "lost",
+        despite its indentation.
+
+
+

An “empty comment” does not +consume following blocks. +(An empty comment is “..” with +blank lines before and after.)

+
+

So this block is not “lost”, +despite its indentation.

+
+
+
+
+

Credits

+

https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-home/index.html b/dagor-home/index.html new file mode 100644 index 000000000..e46c644e9 --- /dev/null +++ b/dagor-home/index.html @@ -0,0 +1,182 @@ + + + + + + + Dagor Home — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dagor Home

+

The Dagor Engine’s resources and essential information.

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor-max-tools/dagor_max_tools.html b/dagor-tools/addons/3ds-max/dagor-max-tools/dagor_max_tools.html new file mode 100644 index 000000000..8c4473d99 --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor-max-tools/dagor_max_tools.html @@ -0,0 +1,461 @@ + + + + + + + Dagor Max Tools — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Dagor Max Tools

+

3ds Max includes several Dagor tools that are particularly useful for our +workflow.

+
    +
  • Dagor Scene Export: A tool for exporting assets, animations, and more.

  • +
  • Dagor Utility: A tool for procedural model adjustments.

  • +
+

Dagor Max Tools

+
+

Connecting the Tools

+

The tools are located here: .../tools/dagor_cdk/windows-x86_64/plugins-3dsMax.

+

The process of connecting them is similar to other third-party plugins in 3ds +Max:

+
    +
  1. Go to CustomizeConfigure User and System Paths.

    +

    Dagor Max Tools

    +
  2. +
  3. Select the 3rd Party Plugins tab and use the Add button to add the +path to the tools.

    +

    Dagor Max Tools

    +
  4. +
+

Let’s take a closer look at these tools.

+
+
+

Dagor Scene Export

+

The Dagor Scene Export tool is used for exporting assets, particularly for +saving scenes into .dag files. This is the primary function of interest.

+

Dagor Max Tools

+
+

Dagor Scene Exporter

+

The buttons in the Dagor Scene Exporter interface have the following +functions:

+
    +
  • Export DAG: This button is used to export the scene into a .dag file.

  • +
  • Export Parameter Buttons:

    +
      +
    • hid: Exports hidden objects in the scene (if the sel button is not +enabled).

    • +
    • sel: Exports only the selected assets in the Viewport.

    • +
    • mesh: Exports the geometry.

    • +
    • lt: Exports the light sources.

    • +
    • cam: Exports the cameras.

    • +
    • hlp: Exports the helpers.

    • +
    • no vnorm: Resets vertex normals during export. This does not alter the +model itself, but resets the normals upon export. It’s recommended to adjust +the normals directly on the model to avoid issues in the future. For more +details, see here.

    • +
    • mat: Exports the materials.

    • +
    • mopt: Optimizes materials during export (removes materials not assigned +to any geometry).

    • +
    • spl: Exports the splines.

    • +
    +
    +

    Note

    +

    These parameters now come with tooltips that provide additional explanations.

    +
    +
  • +
+

In typical asset workflows, the following buttons are most frequently used:

+
    +
  • sel: Use with caution, as it determines exactly what will be exported.

  • +
  • mesh: Always used when exporting geometry.

  • +
  • mat: Always used when exporting geometry with materials.

  • +
  • mopt: Always used to optimize materials.

  • +
+
+
+

Export Mode

+

The Export Mode section is extensive and merits a detailed explanation. The +descriptions above apply to the standard export mode, but alternative modes are +available for batch exports. Modes other than Standard are designed for +exporting multiple files at once. Instead of specifying a file path, you +indicate a directory path, and filenames are derived from the scene.

+
    +
  • Objects as dags: As the name suggests, this mode exports each object as a +separate .dag file. The filename is taken from the object’s name, and the +pivot is local – taken from the object, not from the scene center. This means +that even if the object is offset or scaled in the scene, it will be exported +in its original state, as if rotation=location=[0,0,0] and scale=[1,1,1].

    +

    To export multiple objects into a single .dag file in this mode, group the +objects. The group will be treated as a single object.

    +
    +

    Important

    +

    When creating a group, its pivot position is automatically set by Max to +the center of the group’s bounding box. This can result in the pivot being +offset, even if all components had their pivots aligned as intended. To avoid +this, you must manually adjust the pivot position between grouping and +exporting:

    +

    Dagor Max Tools

    +
    +

    Export parameters in this mode function exactly as they do in standard export +– you can exclude hidden objects, export everything or only selected items, +etc.

    +
  • +
  • Layers as dags: This mode saves layers as separate .dag files. The hid +and sel parameters behave slightly differently here since they apply to +layers rather than individual objects.

    +

    Export Rules:

    +
      +
    • Only layers at the bottom of the hierarchy (those without nested layers) +will be exported. If a layer contains no objects that match the export +parameters, an empty .dag file will not be created.

    • +
    • The default layer is never exported, as it’s unlikely you’d need a +default.dag. However, nested layers within default are checked and will +be exported if they meet the specified criteria.

    • +
    • If sel=True, only the current layer (indicated by a different icon color +in the Scene Explorer) and its nested layers will be checked. If +sel=False, all layers in the scene will be checked.

    • +
    • If hid=True, hidden objects and layers will be exported. If hid=False, +hidden layers will not be exported, and hidden objects will be excluded.

    • +
    +
  • +
+

Dagor Max Tools

+

For example, in the image above, the current layer is asset_a.lods. If +sel=True, only this layer and its child layers will be checked, while +asset_b.lods and asset_c.lods will be ignored along with their contents.

+
    +
  • The current layer contains child layers, so it will not be exported.

  • +
  • The child layer asset_a.lod00 has no further nested layers, but it has two +visible nodes. It will be exported as asset_a.lod00.dag regardless of the +hid setting.

  • +
  • The asset_a.lod01 layer has no nested layers, but one node is hidden. If +hid=True, asset_a.lod01.dag will be exported with both nodes inside; if +hid=False, only the axis.lod01 node will be exported.

  • +
  • The asset_a.lod02 layer will be exported as asset_a.lod02.dag only if +hid=True, as it is hidden.

  • +
  • The asset_a.lod03 layer will never be exported, as it contains no nodes, +making visibility irrelevant.

  • +
+

This method is particularly useful when working with a pack of assets rather +than a single one. For example, by grouping the layers asset_[a,b,c].lods into +a general layer called assets and making it active (or simply activating the +default layer as shown above, or setting sel=False), you can re-export the +entire pack with all LODs in a single click.

+
+

No VNorm and Optimization

+

When exporting objects, if custom normals are not assigned, the object will be +exported without them, even if the no vnorm option is not enabled.

+

However, unlike .max files, .dag files cannot store custom normals for only +a portion of an object’s vertices while calculating the rest based on smoothing +groups. If even one vertex in an object has a custom normal, the .dag file +will store values for all vertices.

+

Example 1

+

In this example, we have a character model and a beveled cube with weighted +normals, with the cube being a separate object.

+

Dagor Max Tools

+
    +
  • Upon export, custom normals were preserved only for the cube, since the +character model had no custom normals assigned.

  • +
  • After re-importing, we can see that the character model lacks custom normals +(normals are shown in blue in the Edit Normals modifier).

  • +
  • The .dag file size is 75 KB.

  • +
+

Example 2

+

Here, the character model and cube were attached together into a single object +before export.

+

Dagor Max Tools

+
    +
  • During export, custom normals were saved for every vertex, not just those +belonging to the cube.

  • +
  • After re-importing, all the vectors on the character model appear “greened +out,” even though they originally looked like the previous image before +export.

  • +
  • The .dag file size is 166 KB.

  • +
+

Therefore, if you need to adjust shading using custom normals, it’s advisable to +detach the editable part of the model before applying custom normals. This +way, the .dag file won’t significantly increase in size after export. Be sure +to check after export by re-importing to see if any unnecessary normals +appeared.

+

Once custom normals are assigned, even resetting them through the Edit Normals +modifier or attaching the object to a new one won’t completely remove them. The +only reliable workaround is to export the objects to a .dag file with no +vnorm, delete the original, and then re-import the cleaned file. This ensures +all references to custom normals are removed, and export behavior will return to +normal.

+

After such a re-import, apply Dagor UtilitiesMaterialsCollapse +Materials to prevent materials from being split into two copies with the same +names.

+
+
+
+

Export Log

+

The Export Log records the results of each export operation.

+

Dagor Max Tools

+

If you encounter any export errors, do not ignore them. Check the log to +identify which objects in the scene are causing problems. Common errors include:

+
    +
  • Presence of degenerate triangles.

  • +
  • Presence of unsmoothed triangles.

  • +
  • Geometry that is too large.

  • +
  • Non-Dagor materials assigned.

  • +
+

The log is now displayed in a separate, resizable window and will automatically +open during export only if errors are detected. If there are no warnings, the +export information is recorded, but the log window won’t pop up. So, if the log +opens after export, carefully read it and address any issues. To view +information about the most recent export, you can manually open the log by +clicking the (Re)open Log button. If the log window was already open, +clicking the button will reset its size and position to default, which is useful +if the log was accidentally resized beyond the screen or moved off-screen.

+
+
+
+

Dagor Utility

+

The Dagor Utility tool is designed for the automatic correction and refinement +of models. Below are the primary functions you’ll likely use:

+
+

Important

+

All these functions only work in Editable Mesh mode.

+
+
    +
  • Remove degenerates: This function removes degenerate triangles, which are +triangles with edges that lie on the same plane. If you encounter an error +during export indicating the presence of degenerate triangles, use this tool.

    +
    +

    Caution

    +

    Sometimes, this function can disrupt the shading of the model. If that +happens, converting everything back to Editable Poly should resolve the issue.

    +
    +
  • +
+

Dagor Max Tools

+
    +
  • Dagor -> Dagor New: Converts the material assigned to a model from +DagorMat1 to DagorMat2.

  • +
  • Collapse materials: Merges materials with the same name and identical +parameters into a single material. This is useful when importing multiple LODs +of the same object into 3ds Max. By default, these LODs have duplicated +materials, so modifying the material on one LOD won’t affect the others. This +function combines the duplicated materials into one. It’s crucial to use this +function before making any modifications to the imported materials.

  • +
  • Show maps on s.o. (selected objects): Forces textures to display on +objects with Dagor materials. There may be instances where textures don’t +display correctly due to glitches – this button helps resolve that.

  • +
  • Hide: Forces textures to hide.

  • +
  • StdMat -> DagorMat: Converts a standard 3ds Max material to a +DagorMat. The conversion is not perfect – it only transfers the diffuse +texture. However, it can still be useful in some situations.

  • +
  • DagorMat -> StdMat: The reverse procedure, converting DagorMat back to a +standard material. This process is also imperfect, but it might come in handy.

  • +
+

Dagor Max Tools

+
    +
  • UV Utils: Provides tools for modifying UV mapping:

    +
      +
    • Copy: Copies UV mapping to another channel.

    • +
    • Swap: Swaps UV mapping between channels.

    • +
    • Move: Transfers UV mapping to another channel.

    • +
    • Kill: Deletes UV mapping on a specific channel (i.e., specifying the +same channel in both channels).

    • +
    • CopyBuffer / PasteBuffer: These theoretically allow copying UV mapping +from one model to another. This functionality has not been thoroughly +tested.

    • +
    +
  • +
+

Dagor Max Tools

+

For additional optional tools that are installed separately, refer to the Dagor +2 Max Tools documentation.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor-max-tools/index.html b/dagor-tools/addons/3ds-max/dagor-max-tools/index.html new file mode 100644 index 000000000..cfb8987ff --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor-max-tools/index.html @@ -0,0 +1,197 @@ + + + + + + + Dagor Max Tools — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Dagor Max Tools

+

Dagor Max Tools - Core Toolset for 3ds Max

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/ambient_occlusion_baker.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/ambient_occlusion_baker.html new file mode 100644 index 000000000..ff789ab4a --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/ambient_occlusion_baker.html @@ -0,0 +1,280 @@ + + + + + + + Dagor 2 Ambient Occlusion Baker — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Dagor 2 Ambient Occlusion Baker

+
+

Installation

+

Install the script following the provided instructions.

+
+

Important

+

This script requires 3ds Max 2018 or newer version to run.

+
+
+
+

Accessing the Ambient Occlusion Baker

+
    +
  1. Navigate to Gaijin ToolsAmbient Occlusion Baker. This will open +the main window of the Dagor 2 AO Baker.

  2. +
  3. To verify the version (3) of the script, go to Gaijin Tools (1) ▸ +About (2). The About window will display the current version. It’s +important to check this regularly to ensure your script is up to date.

  4. +
+

Ambient Occlusion Baker

+
+

Note

+

Make sure that the plugin version is at least 1.4.

+
+
+
+

Using the Ambient Occlusion Baker

+
    +
  1. Open the tool panel by navigating to Gaijin ToolsAmbient Occlusion +Baker.

    +

    Ambient Occlusion Baker

    +
  2. +
  3. Click the Bake Selected Object (1) button to generate Ambient Occlusion +(AO) for the selected object in the Viewport. Note that AO can only be baked +for one object at a time.

  4. +
  5. The tool provides several options:

    +
      +
    • AO Tint Color: Choose the color for the AO backlight.

    • +
    • AO Ambient Color: Select the color for the minimum lighting of the AO.

    • +
    • Display AO on Viewport: Toggle the display of AO in the viewport +(enabled by default).

    • +
    • Transfer AO to Map Channel: Choose which channel the AO results will be +placed in (specific to Dagor Engine). By default, the AO is placed in +channel 8.

    • +
    • Visit toLearning Web Site: Click to view this article.

    • +
    • Contact with Developer: Access the developer’s web page.

    • +
    +
  6. +
  7. To test the AO Baker, load the following test scene: tree_AO_test_2021.max.

  8. +
  9. Open the scene and select the object tree_vitellaria_wide_c.lod01.

  10. +
  11. For the test, configure the colors as shown below:

    +

    Ambient Occlusion Baker

    +
  12. +
  13. Leave all other settings at their default values. Click Bake Selected +Object and wait for the progress bar indicating scene lighting to complete. +The result should appear as follows:

    +

    Ambient Occlusion Baker

    +
  14. +
  15. To view the results, right-click on the Viewport and select the appropriate +display option:

    +

    Ambient Occlusion Baker

    +
  16. +
  17. Then, change the selection from Vertex Color to Map Channel Color as +shown below:

    +

    Ambient Occlusion Baker

    +
  18. +
  19. The AO should now be displayed correctly:

  20. +
+

Ambient Occlusion Baker

+
+

Important

+
    +
  • Supported Model Types: The script works correctly with Edit Poly, +Edit Mesh, and GrowFX model types. Other model types are not +supported, and using modifiers on the source model may cause errors when +generating LODs or collisions.

  • +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/check_degenerated_faces_tool.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/check_degenerated_faces_tool.html new file mode 100644 index 000000000..e4e897afc --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/check_degenerated_faces_tool.html @@ -0,0 +1,290 @@ + + + + + + + Dagor 2 Check Degenerated Faces Tool — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dagor 2 Check Degenerated Faces Tool

+
+

Installation

+

Install the script following the provided instructions.

+
+

Important

+

This script requires 3ds Max 2014 or newer version to run.

+
+
+
+

Overview

+

This tool is designed to identify degenerate triangles in a scene by evaluating +two key criteria: the minimum area of triangles and the minimum angle within +triangles.

+

Example of the tool’s output: check_deg_faces_00.gif

+
+
+

Accessing the Check Degenerated Faces Tool

+
    +
  1. Navigate to Gaijin Tools (1)Degenerated Triangles Checker…. This +will open the Error Log window.

  2. +
  3. To verify the version (3) of the script, go to Gaijin Tools (1) ▸ +About (2). The About window will display the current version. It’s +important to check this regularly to ensure your script is up to date.

  4. +
+

Check Degenerated Faces Tool

+
+

Note

+

Make sure that the plugin version is at least 1.7.

+
+
+
+

Using the Check Degenerated Faces Tool

+

To get started, download the following test scene: +degenerated_triangles_test_2021.max.

+
+

Important

+

This scene requires 3ds Max 2021 or a newer version.

+
+

Open the script by navigating to the menu (1) and selecting the script +option (2).

+

Check Degenerated Faces Tool

+

The script window will appear with several key options:

+
    +
  • Minimum face area size (3): Specifies the minimum area of triangles to be +considered degenerate. The value is based on the current scene units (e.g., +meters, inches).

  • +
  • Minimum face angle (4): Sets the minimum angle for triangle evaluation. If +any angle within a triangle is smaller than this value, the triangle will be +marked as degenerate. The default values in these fields are typically optimal +for scenes imported from a .dag file, as the correct size and scale are +automatically set.

  • +
  • Show Log Window (5): Enables a log that lists all objects and any +degenerate triangles found.

  • +
  • Show Degenerated Face(s) (6): Automatically adds a new modifier to all +objects checked for degenerate triangles, highlighting the problematic areas +for easy identification.

  • +
  • Check Degenerated Triangles! (7): Initiates the check process.

  • +
  • Save Settings (8): Saves the current script settings.

  • +
  • Default Settings (9): Loads the default settings.

  • +
  • Visit to LearningWeb Site (10): Links to this documentation.

  • +
  • Contact with Developer (11): Provides contact information for the +developer if assistance is needed.

  • +
  • Progress Bar Blue (12): Displays the overall progress.

  • +
  • Progress Bar Green (13): Shows the progress for the currently selected +object.

  • +
+
+

Running a Test

+

To test the loaded scene, select an object and press the start button (7). +For example, if you select a simple object, the results will appear quickly:

+

Check Degenerated Faces Tool

+

As shown in the log, the object stalingrad_water_tower_roof_lod01_col_tra_wood +(1) contains 20 degenerate triangles (2). These problematic triangles +are highlighted in the Viewport (3) using the modifier (4). If you need +to revert the scene to its original state, simply remove the added modifier from +the highlighted objects.

+
+

Note

+

On average, the tool processes around 1,000 triangles in about two seconds, so +larger objects or scenes may take longer.

+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/custom_groups_export_tool.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/custom_groups_export_tool.html new file mode 100644 index 000000000..8e95ebc1f --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/custom_groups_export_tool.html @@ -0,0 +1,296 @@ + + + + + + + Dagor 2 Custom Groups Export Tool — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Dagor 2 Custom Groups Export Tool

+
+

Installation

+

The Dagor 2 Custom Groups Export Tool is a specialized script designed to +prepare scenes for export, automating the process of saving multiple groups of +objects with predefined properties into the .dag format. This script is not +included in the Dagor Tool set, as it is tailored for a specific mode of +object export.

+

To install the script, simply drag and drop the dagor2_export_custom_groups.ms +file located at .../dagor2_toolbox/base (0) into the active Viewport of +3ds Max (1) (green marks on the picture below). This action will open the +Dagor Custom Batch Exporter script window.

+
+

Important

+

This script requires 3ds Max 2013 or a newer version.

+

Ensure that Dagor Plugins are installed before using this script.

+
+

Custom Groups Export Tool

+
+
+

Using the Custom Groups Export Tool

+

The script provides several configurable settings:

+
    +
  • Move to [0,0,0] (2): Moves selected objects to the coordinate center +before export. After export, objects are returned to their original positions.

  • +
  • Reset XForm (3): Automatically resets the XForm on selected objects +before export.

  • +
  • Convert to Editable Mesh (4): Converts selected objects to Editable +Mesh before export.

  • +
  • Merge All Nodes (5): Merges all selected objects within groups into a +single object and assigns the group name to this new object. If enabled, the +log will only display a general summary for the group. If disabled, the log +will detail which specific objects have degenerate triangles.

  • +
+
+

Note

+

These settings only apply during export. Once the export is complete, the scene +will revert to its previous state.

+
+
+

Export Settings

+
    +
  • Format (6): Select the export format. The script is designed exclusively +for the Dagor Engine, so only the .dag format is available.

  • +
  • Path (7): Displays previously saved export paths. These paths are +automatically added when you select an export path using button … Export +Path (8).

  • +
  • If checkbox Export to Max File Location (10) is enabled, list (7) and +button (8) become unavailable. This option allows you to export to the +directory where the current .max scene is saved.

  • +
  • Clicking button Max Folder (9) opens the directory containing the current +.max scene in Windows Explorer.

  • +
  • Show prompt before export (11): Enables the display of logs after export. +Any errors or warnings encountered during export will be shown.

  • +
+
+
+

Naming Conventions

+
    +
  • Change Names (12): Enables the addition of prefixes and suffixes to the +names of exported objects. You can specify the prefix and suffix in text +fields (14) and (13), respectively. For example, if the object name is +OBJ_01, by default, only the suffix .lod00 will be applied, resulting in +the final file name OBJ_01.lod00.dag.

  • +
+
+
+

Collision Settings

+
    +
  • Collision Settings block allows you to export collision objects based on a +prefix specified in text field (16). To enable this function, check +checkbox (15). The script will search for collision objects in the scene +that match the prefix (default: Cls_) specified in field (16). If found, +these objects will be included in the export. Otherwise, they will be exported +as normal objects.

  • +
+
+
+

Additional Controls

+
    +
  • Export Selection (17): Initiates the export process. Ensure that at least +one object with triangles is selected in the scene before proceeding.

  • +
  • Visit to Learning Web Site (18): Opens a browser window with this +documentation.

  • +
  • Contact with Developer (19): Displays the contact information for the +script developer.

  • +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool.html new file mode 100644 index 000000000..ed595c526 --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool.html @@ -0,0 +1,287 @@ + + + + + + + Dagor 2 Damages Setup Tool — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Dagor 2 Damages Setup Tool

+
+

Installation

+

Install the script following the provided instructions.

+
+

Important

+

This script requires 3ds Max 2013 or newer version to run.

+
+
+
+

Accessing the Damage Setup Tool

+
    +
  1. Navigate to Gaijin Tools (1)Damage Objects Setup… (2). +This will open the main window of the Dagor 2 Damages Setup (3).

  2. +
  3. To verify the version of the script, go to Gaijin Tools (1)About +(4). The About window will display the current version. It’s important +to check this regularly to ensure your script is up to date.

  4. +
+

Damages Setup Tool

+
+

Note

+

Make sure that the plugin version is at least 1.4.

+
+
+
+

Configuring the Damage Setup Tool

+

Download the following test scene: +dmg_example.max +and open the downloaded project in 3ds Max.

+
+

Note

+

The minimum supported version for this file is 3ds Max 2018.

+
+

Open the utility window:

+

Damages Setup Tool

+

Configure the following parameters:

+
    +
  1. Visible Object Parameters: Define parameters for object chunks that will +be visually displayed in the game. Default settings are optimized for most +cases but can be customized as needed.

  2. +
  3. Collision Object Parameters: Set parameters for the collisions generated +by the tool. These are pre-configured for common use cases, but you can +modify them to fit specific requirements.

  4. +
  5. Collision Rotation: Adjust the rotation limits for generated collisions +to create more natural-looking destruction effects.

  6. +
  7. Max Points in Collision: Specify the maximum number of points in a +generated collision. This option is only active if a convex hull is selected +as the collision type.

  8. +
  9. Collision Surface Displacement: Define the displacement of the collision +surface relative to the object surface. This setting is also only active +when using a convex hull collision type.

  10. +
  11. Collision Name Postfix: Add a postfix to the names of generated +collisions to easily distinguish them from other objects.

  12. +
  13. Collision Type: Select the type of collision to generate. The default is +a box, but other options include sphere, capsule, and convex hull.

  14. +
  15. Overwrite Existing Parameters: Use this checkbox to determine whether the +existing parameters in “Visible Object Parameters” and “Collision Object +Parameters” will be overwritten. If unchecked, all existing parameters will +be removed and replaced with the new ones.

  16. +
  17. Generate Collisions: After selecting the objects for which you want to +generate collisions, click this button to start the process.

  18. +
  19. Documentation: Click this button to access the current documentation.

  20. +
  21. Contact Author: If you need additional information, use this button to +contact the author.

  22. +
  23. Progress Bar: Displays the progress of the scene processing. For scenes +with many objects (50-100), this may take several minutes.

  24. +
+
+
+

Generating Collisions

+
    +
  1. Select the objects you want to generate collisions for (A).

  2. +
  3. Prepare them for export to the engine.

  4. +
  5. Click the Generate button (B).

  6. +
+

Damages Setup Tool

+
+
+

Reviewing Generated Collisions

+

After processing, a list of new objects © and generated collisions (D) +will appear.

+

Damages Setup Tool

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/editing_normals_tool.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/editing_normals_tool.html new file mode 100644 index 000000000..edead47e9 --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/editing_normals_tool.html @@ -0,0 +1,364 @@ + + + + + + + Dagor Editing Normals Tool — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Dagor Editing Normals Tool

+
+

Installation

+

Install the script following the provided instructions.

+
+

Important

+

This script requires 3ds Max 2023 or newer version to run.

+
+
+
+

Overview

+

The Editing Normals Tool provides comprehensive functionality for generating +and transferring vegetation normals using all widely recognized methods +available at the time of publication. It supports:

+
    +
  • Puffiness, similar to the technique used in SpeedTree.

  • +
  • Polysurface Method, as demonstrated by Guerrilla Games’ Gilbert Sanders +during the 2018 GDC session on Horizon Zero Dawn.

  • +
  • Classic Normal Transfer, via the Noors Normal Thief approach, which +transfers normals from a parent object.

  • +
+

Example of the tool’s output: +editing_normals_00.gif

+
+
+

Accessing the Editing Normals Tool

+
    +
  1. Navigate to Gaijin Tools (1)Dagor Editing Normals Tool…. This +will open the main window of the Dagor Editing Normals Tool.

  2. +
  3. To verify the version (3) of the script, go to Gaijin Tools (1) ▸ +About (2). The About window will display the current version. It’s +important to check this regularly to ensure your script is up to date.

  4. +
+

Editing Normals Tool

+
+

Note

+

Make sure that the plugin version is at least 1.6.

+
+
+
+

Using the Editing Normals Tool

+

To begin, open the tool panel by navigating to Gaijin ToolsDagor +Editing Normals Tool.

+

Download the following test scene: +tree_example.max.

+
+

Important

+

This scene requires 3ds Max 2024 or a newer version.

+
+
+

Interface Overview

+

The Editing Normals Tool interface is divided into three main sections: +Puffiness Settings, Polysurface Settings, and Classic Normals Thief +Settings, with a General Settings block that affects all three sections.

+

Editing Normals Tool

+
    +
  • From Ground Center Offset (1): Adjusts the elevation of the Puffiness +build point from the ground to the center of the build.

  • +
  • Start Puffiness! (2): Initiates the Puffiness generation process.

  • +
  • Strength % (10): Controls the blending ratio between the new and existing +normals on the object. This is crucial when you only need to partially replace +the normals’ weight. A typical range is 70-90%.

  • +
  • Display Normals Length (11): Determines the duration that normals are +displayed in the Viewport.

  • +
+
+
+

Working with Puffiness

+

To see how Puffiness works, set parameter Strength % (10) to 100 and +parameter Display Normals Length (11) to 100 for clear visibility. Note +that the normal length is dependent on the scene’s scale and units. Select the +palm tree in the test scene (you can also process multiple objects or LODs at +once). Press the Start Puffiness! (2) button to generate the normals:

+

Editing Normals Tool

+

Initially, the center aligns with the tree’s base, near the Pivot. If needed, +adjust the center by setting From Ground Center Offset (1) to 2500. Remove +the EditNormals modifier generated by the script before re-running the +process. After pressing the Start Puffiness! (2) button again, you should +see the result:

+

Editing Normals Tool

+

As you can see, everything is much better with the crown. With the crown +adjusted, set the Strength % (10) to 80%, remove the EditNormals +modifier again, and run the process:

+

Editing Normals Tool

+

The result shows improved lighting on the large palm leaves, though issues may +still exist with the root system. To address this, you may need to edit the +normals on the roots separately. Some tree bark normals might remain unedited, +shown as blue. The Keep Normals on Material Name (12) parameter is vital +here, as it allows you to specify which materials’ normals will be processed.

+

Editing Normals Tool

+

For instance, if the bark is named “bark,” ensure that “bark” is listed in +(12). This field supports RegExp, enabling precise control over which +materials are included or excluded from processing. After adjusting the +expression, set the From Ground Center Offset (1) parameter to zero. After +all, the center of illumination of the root beam should be just somewhere at +zero. At the Pivot point of the object. Set the parameter of normal +transfer strength (10) to 80% and rerun the Puffiness generation:

+

Editing Normals Tool

+
+
+

Polysurface Settings

+

The Polysurface Settings block provides advanced tools for generating and +transferring normals, originally used in the Horizon Zero Dawn project. More +details about the method see +here.

+

To apply similar lighting effects to your tree, select the tree without the +EditNormals modifier and configure the Polysurface Settings and +General Group as shown below. Ensure that “bark” is excluded from normal +adjustments:

+

Editing Normals Tool

+

After applying, you should see a result similar to this:

+

Editing Normals Tool

+

You can remove the Polysurface after generation using Delete PSurface after +Transfer (6) checkbox.

+
+

Note

+

All Polysurface parameters are sensitive to the scene size and object scale. If +values are set too high, Polysurface may not generate; too low, and it could +generate with excessive triangles, causing processing issues in 3ds Max.

+
+

Adjust these settings carefully:

+
    +
  • Polysurface Size (3): Controls surface smoothness. A larger value results +in a smoother surface, while a smaller value creates more detailed but less +smooth surfaces.

  • +
  • Polysurface Tension (4): Sets the surface tension. A value of 1.0 creates +a maximally bulged surface, and 0.0 creates a tight surface. Typically, 0.5 is +optimal, though this may vary based on the object type (e.g., higher for +conifers, lower for palm trees).

  • +
  • Polysurface Accuracy (5): Defines the step size for generating surface +triangles. Smaller steps yield more precise surfaces but increase the triangle +count exponentially. Usually 20-30 thousand triangles are enough to get an +excellent result of Polysurface generation. Carefully reduce the value. +Reducing the value by 2 times you increase the number of resulting triangles +from 4x to 9 times!

  • +
+
+
+

Classic Normals Thief Method

+

The Normals Thief method, dating back to 2008, allows manual creation and +projection of normals. Select the source object with the Source Object (8) +button, and project normals onto the target object using the Steal ! (9). +More details are available here: Noors Normal +Thief

+

In the General Block, you can adjust the normal transfer strength (10) +(default: 50%). Setting this to 100% replicates the classic Normals Thief +behavior. You can also clear the material exclusion mask for full normal +transfer, mimicking the original tool’s functionality.

+
    +
  • Progress bar (13): Progress bar.

  • +
  • Visit to Learning Web Site (14): Access this article.

  • +
  • Contact with Developer (15): Contact the author for additional support.

  • +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties.html new file mode 100644 index 000000000..55ad7d13f --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties.html @@ -0,0 +1,258 @@ + + + + + + + Dagor 2 Fast Editor User Properties — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dagor 2 Fast Editor User Properties

+
+

Installation

+

Install the script following the provided instructions.

+
+

Important

+

This script requires 3ds Max 2012 or newer version to run.

+
+
+
+

Accessing the Fast Editor User Properties

+
    +
  • Press Ctrl+Shift to open the floating panel:

    +

    Fast Editor panel

    +
  • +
  • Closing the panel by pressing X disables this editor completely. To return +the toggle behavior, reopen the editor from the Gaijin ToolsDagor 2 +Fast Properties…

    +

    Fast Properties in the menu

    +
  • +
+
+
+

Using the Fast Editor User Properties

+

The panel buttons shown in the picture above perform several key functions:

+
    +
  1. Copy Obj User Defined: Copies the User-Defined Properties of the first +selected object to the system clipboard as plain text.

    +
    +

    Note

    +

    The other toolbar buttons apply to all selected objects.

    +
    +
  2. +
+
+

Note

+

Fast access is limited to the first 20 selected objects to prevent performance +degradation with larger selections.

+
+
    +
  1. Paste Obj User Defined: Pastes the text from the system clipboard into +the Properties of all selected objects.

  2. +
  3. Clear Obj User Defined: Clears the Properties of all selected objects.

  4. +
  5. Vertex Color ON: Enables the display of Vertex Color in the Viewport.

  6. +
  7. Vertex Color OFF: Disables the display of Vertex Color in the Viewport.

  8. +
  9. The Display Properties on Viewport checkbox allows you to display +Properties directly in the viewport, near the pivot point of each object.

  10. +
  11. The block of Objects below displays copies of the Properties of the +selected objects. Editing the text in this panel will not modify the actual +object properties. To make changes, use the Clear and Paste buttons.

  12. +
  13. The support section at the bottom of the panel provides quick access to the +documentation via the Visit to Learning Web Site button. Since you’re +already here, you may have found it. For further assistance, contact the tool +developer by clicking the Contact with Developer button.

  14. +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fix_normal_orientation_tool.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fix_normal_orientation_tool.html new file mode 100644 index 000000000..d52fa75c6 --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fix_normal_orientation_tool.html @@ -0,0 +1,243 @@ + + + + + + + Dagor 2 Fix Normal Orientation Tool — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dagor 2 Fix Normal Orientation Tool

+
+

Installation

+

Install the script following the provided instructions.

+
+

Important

+

This script requires 3ds Max 2013 or newer version to run.

+
+
+
+

Accessing the Fix Normal Orientation Tool

+
    +
  1. Navigate to Gaijin Tools (1)Fix Normal Orientation… (2). This +will open the main window of the Dagor 2 Fix Normals Orientation script +(3).

  2. +
  3. To verify the version of the script, go to Gaijin Tools (1)About +(4). The About window will display the current version. It’s important +to check this regularly to ensure your script is up to date.

  4. +
+

Fix Normal Orientation Tool

+
+

Note

+

Make sure that the plugin version is at least 1.4.

+
+
+
+

Using the Fix Normal Orientation Tool

+

After exporting objects, you may encounter issues with normals in daEditor, as +shown in the screenshot below:

+

Fix Normal Orientation Tool

+

The Fix Normal Orientation Tool is designed to resolve these issues in most +cases. To correct the normals:

+
    +
  1. In the Viewport, select the objects with incorrect normals.

  2. +
  3. Click the Fix Normals from Selection button.

  4. +
+

This should correct the normals for the selected objects. In most cases, the +issue is resolved upon re-export. See the screenshot below for an example of the +corrected normals:

+

Fix Normal Orientation Tool

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fixing_illegal_characters.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fixing_illegal_characters.html new file mode 100644 index 000000000..f96e19083 --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fixing_illegal_characters.html @@ -0,0 +1,313 @@ + + + + + + + Dagor 2 Fixing Illegal Characters Tool — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dagor 2 Fixing Illegal Characters Tool

+
+

Installation

+

Install the script following the provided instructions.

+
+

Important

+

This script requires 3ds Max 2013 or newer version to run.

+
+
+
+

Accessing the Fixing Illegal Characters Tool

+
    +
  1. Navigate to Gaijin Tools (1)Fix Illegal Characters…. This +will open the main window of the Dagor 2 Fix Illegal Characters script.

  2. +
  3. To verify the version of the script, go to Gaijin Tools (1)About +(2). The About window will display the current version. It’s important +to check this regularly to ensure your script is up to date.

  4. +
+

Fixing Illegal Characters Tool

+
+

Note

+

Make sure that the plugin version is at least 1.4.

+
+
+
+

Using the Fixing Illegal Characters Tool

+

To begin, run the script from the GaijinTools ▸ Fix Illegal Characters… +(1) menu. The following window will appear:

+

Fixing Illegal Characters Tool

+
+

Tool Options

+
    +
  • Illegal Characters List (2): Enter or delete illegal characters in this +field.

  • +
  • Replace with Characters (3): Specify characters to replace the illegal +ones. If left blank, illegal characters will be removed. This option supports +UTF-8, including hieroglyphs, Slavic languages, and Arabic characters, etc.

  • +
  • Latinization of the Russian (4): Converts all Russian characters to Latin +according to standard Latinization rules. If unchecked, Russian characters +will be replaced with the characters specified in the Replace with +Characters (3) field.

  • +
  • Log Warning Bitmap Path Name (5): Logs warnings for file paths containing +illegal characters to the log window (17).

    +
    +

    Note

    +

    No substitutions are made; this only outputs warnings.

    +
    +
  • +
  • Log Warning Texture Maps Names (6): Logs warnings for texture names +containing illegal characters to the log window (17).

    +
    +

    Note

    +

    No substitutions are made; this only outputs warnings.

    +
    +
  • +
  • Fix Layers Names (7): Replaces illegal characters in layer names with the +specified replacement characters.

    +
    +

    Note

    +

    Layer 0 (default) cannot be renamed.

    +
    +

    There cannot be layers with the same name. If naming conflicts occur or +renaming fails, a warning is displayed in the log window (17):

    +

    Fixing Illegal Characters Tool

    +
  • +
  • Fix Objects Names (8): Replaces illegal characters in object names with the +specified replacement characters. For check naming it’s necessary to select +objects.

    +
    +

    Note

    +

    This may result in objects having identical names.

    +
    +
  • +
  • Fix Materials Names (9): Replaces illegal characters in material names +with the specified replacement characters.

    +
    +

    Note

    +

    This may result in materials having identical names.

    +
    +
  • +
  • All Changes to Lower Case (10): Converts all names to lower case and +performs checks in lower case.

  • +
  • DAG Export After Fixing Illegal Characters (11): Opens the DAG format +export window after all checks are complete.

    +
    +

    Note

    +

    Ensure you are familiar with how Dagor 2 plugins work before enabling this +option.

    +
    +
  • +
  • Save Current Settings (12): Saves the current settings.

  • +
  • Load Default Settings (13): Loads the default settings.

  • +
  • FIX ILLEGAL CHARACTERS FROM SELECTION (14): Executes the script to fix +illegal characters in the selected objects.

  • +
  • Visit to Learning Website (15): A link to this article.

  • +
  • Get in Touch with the Author (16): Contact the author if the article does +not resolve your issue.

  • +
  • Errors Log (17): Displays information about the results of the checks and +any changes made.

  • +
+

If the scene contains no errors, you will see a window like this:

+

Fixing Illegal Characters Tool

+

Any errors will be highlighted in red and labeled as ERROR! or WARNING!:

+

Fixing Illegal Characters Tool

+

A scene containing multiple errors may produce results like this:

+

Fixing Illegal Characters Tool

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/index.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/index.html new file mode 100644 index 000000000..ec37a1e38 --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/index.html @@ -0,0 +1,286 @@ + + + + + + + Dagor 2 3ds Max Tools — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Dagor 2 3ds Max Tools

+

Dagor 2 3ds Max Tools - Additional Toolset for 3ds Max.

+
+

Contents:

+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/installation.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/installation.html new file mode 100644 index 000000000..1519644e2 --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/installation.html @@ -0,0 +1,252 @@ + + + + + + + Installation — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Installation

+
+

Important

+

If you have already installed any of the Dagor 2 3ds Max Tools, you should +uninstall the previous version.

+

If you are installing the tools for the first time, skip the Uninstallation +Steps section.

+
+
+

Uninstallation Steps

+
    +
  1. Go to Customize User Interface.

  2. +
  3. Choose Menus tab.

  4. +
  5. Delete GaijinTools from Main Menu Bar.

  6. +
  7. Now you can close the Customize User Interface window.

    +

    Uninstall Steps

    +
  8. +
  9. Close the 3ds Max.

  10. +
  11. Remove all GJ_Tools*.mcr files from usermarcos directory. It should be +located here by default:

    +
    C:\Users\USER_NAME\AppData\Local\Autodesk\3dsMax\YOUR_3DS_MAX_VERSION\ENU\usermacros
    +
    +
    +
  12. +
  13. Remove all startup scripts, that you did not added yourself. Default path:

    +
    C:\Users\USER_NAME\AppData\Local\Autodesk\3dsMax\YOUR_3DS_MAX_VERSION\ENU\scripts\startup
    +
    +
    +
  14. +
+
+
+

Clean Installation

+

For a clean installation, follow these steps:

+
    +
  1. Open CustomizeConfigure User and Subsystem Paths.

  2. +
  3. Go to User and System tab.

  4. +
  5. Select the Additional Startup Scripts line and click the Modify… +button.

  6. +
  7. Specify path to:

    +
    .../dagor2_toolbox/base
    +
    +
    +
  8. +
  9. Confirm the changes by clicking OK.

    +

    Configuring Path

    +
  10. +
  11. Restart 3ds Max. The script will automatically add the Gaijin Tools +menu right after the Help menu.

  12. +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/lods_and_collisions_generator.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/lods_and_collisions_generator.html new file mode 100644 index 000000000..5bf9ba2d4 --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/lods_and_collisions_generator.html @@ -0,0 +1,374 @@ + + + + + + + Dagor 2 LODs and Collisions Generator — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dagor 2 LODs and Collisions Generator

+
+

Installation

+

Install the script following the provided instructions.

+
+

Important

+

This script requires 3ds Max 2018 or newer version to run.

+
+
+
+

Overview

+

This script provides superior triangle optimization compared to tools like +MultiRes or ProOptimizer. It simplifies the process by requiring only a +single button press. The script more accurately preserves texture coordinates +and texture coordinate edges. Additionally, the advanced features support +high-quality collision generation and specific settings tailored for the Dagor +Engine.

+
+

Comparison of Optimization Quality

+

The following image illustrates the differences in optimization quality:

+

LODs and Collisions Generator

+
+
+

Key Advantages

+
    +
  1. More Accurate Contour Representation: The optimized model more closely +follows the original object’s contours.

  2. +
  3. Increased Segment Density: More segments are generated along the radius, +resulting in a finer mesh.

  4. +
  5. Enhanced Knot Detail Preservation: Critical details, such as knots, are +retained, which are often lost in other optimization methods.

  6. +
+

The script optimizes the placement of triangles more effectively, ensuring the +shape of the object is conveyed with greater precision, even with the same +number of triangles.

+
+
+
+

Accessing the LODs and Collisions Generator

+
    +
  1. Navigate to Gaijin Tools (1)LOD Generator…. This will open the +main window of the Dagor 2 LOD Generator.

  2. +
  3. To verify the version (3) of the script, go to Gaijin Tools (1) ▸ +About (2). The About window will display the current version. It’s +important to check this regularly to ensure your script is up to date.

  4. +
+

LODs and Collisions Generator

+
+

Note

+

Make sure that the plugin version is at least 1.4.

+
+
+
+

Using the LODs and Collisions Generator

+

To open the script window, navigate to Gaijin ToolsLOD Generator… +in the menu.

+

LODs and Collisions Generator

+
+

Key Parameters and Controls

+
    +
  • Vertex % (1): Defines the percentage by which the number of triangles is +reduced in each LOD. For example, LOD01 will contain 50% of the original +model’s triangles, LOD02 will have 25%, and so on.

  • +
  • Iterations (2): Specifies the number of iterations for the optimization +algorithm. Higher iterations generally yield better quality in point +placement. The optimal number of 10 was determined experimentally, though in +some cases, using the maximum allowable value is recommended.

  • +
  • Number of LODs: Specifies how many LODs will be created.

  • +
  • LOD Postfix (3): Sets the postfix for the names of newly optimized +objects.

  • +
  • Build LODs! (4): Initiates the generation process. The script can batch +process all selected models, creating LODs or collisions for each.

  • +
+
+

Important

+
    +
  • Supported Model Types: The script works correctly with Edit Poly, +Edit Mesh, and GrowFX model types. Other model types are not supported +and may cause errors. Note that all modifiers applied to LODs and collisions +will be removed if they were used on the model from which LODs or collisions +are generated.

  • +
+
+

This basic functionality covers the use of MultiRes and ProOptimizer. For +users familiar with these tools, the script should suffice for achieving optimal +results. For more advanced collision generation and further optimization without +visual quality loss, consider exploring the advanced settings detailed below.

+
+
+

Advanced Settings

+

To access advanced settings, activate the Use Advanced Options (5) checkbox. +These settings provide greater control over the generation process.

+
    +
  1. Loading the Test Scene: Load the following test scene: +tree_cocos_nucifera.max.

    +
    +

    Important

    +

    This scene requires 3ds Max 2021 or a newer version.

    +
    +

    This scene features a complex object with a Multi/Sub Material applied. It is +crucial that Sub Materials are correctly named, as this influences collision +generation.

    +
  2. +
  3. Material Keyword Filtering: In Keep Material Name (16) field, you can +enter keywords separated by commas to specify which materials should be +retained during collision generation. For example, on a palm tree, you might +exclude roots and fruits but retain anything named “bark.” Materials matching +the specified keywords will be preserved, while all others, along with their +associated triangles, will be removed.

    +

    Example: Highlight the palm tree, enable advanced options via checkbox +(5), and enter “bark” in field (16). Run the script by clicking +button (4). The result will show that all unnecessary triangles (e.g., +leaves, roots, fruits) have been removed from the collision generation:

    +

    LODs and Collisions Generator

    +

    This filtering can be toggled off using Collision Use Name Mask (10) +checkbox .

    +
    +

    Warning

    +

    If the object does not have a Multi/Sub Material, the script will issue a +warning and skip processing. No changes will be made in such cases.

    +
    +
  4. +
  5. Collision Height Cutoff: Enabling Collision Cut FromTop (7) checkbox +allows you to cut off the collision mesh at a specified height, set in +Collision Cut Height (14) parameter. This can be useful for optimizing +performance by removing unnecessary upper parts of the collision mesh, such +as branches or trunks that characters cannot interact with.

    +

    Example: Highlight the palm tree, ensure checkbox (7) is enabled, and +set the desired cutoff height in parameter (14). Run the script with +button (4) again to see the result:

    +

    LODs and Collisions Generator

    +
  6. +
  7. Dagor Material Assignment: If Collision Assign Dagor Mat (8) checkbox +is enabled, the collision mesh is assigned to Dagor Material 2 with the +gi_black setting, and the material name is set to cls.

  8. +
  9. Additional Options:

    +
      +
    • Collision Generation (6): Enables or disables collision generation.

    • +
    • Replace Custom Properties (9): Allows replacing custom object +properties with those specified in fields LODs Custom Properties (17) +for LODs and Collision Custom Properties (18) for collisions. If +unchecked, custom properties will be copied from the selected objects +during generation.

    • +
    +
  10. +
  11. Future Development:

    +
      +
    • Collision Remove Small Parts (11) and Collision Part Size % (13): +Reserved for future updates. This feature will allow the removal of small, +non-essential parts of the object (e.g., small twigs or debris) based on +their bounding box size. This will help further optimize LODs and +collisions.

    • +
    +
  12. +
+
+
+

Support

+

For additional assistance, buttons (19) provide quick access to this article +and an option to contact the developer.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/pivot_painter_vegetation_tool.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/pivot_painter_vegetation_tool.html new file mode 100644 index 000000000..313b3c1ab --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/pivot_painter_vegetation_tool.html @@ -0,0 +1,301 @@ + + + + + + + Dagor 2 Pivot Painter Vegetation Tool — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dagor 2 Pivot Painter Vegetation Tool

+
+

Installation

+

Install the script following the provided instructions.

+
+

Important

+

This script requires 3ds Max 2015 or newer version to run.

+
+
+
+

Accessing the Pivot Painter Vegetation Tool

+
    +
  1. Navigate to Gaijin ToolsPivot Painter Vegetation Tool. This will +open the main window of the Dagor 2 Pivot Painter Tool.

  2. +
  3. To verify the version (3) of the script, go to Gaijin Tools (1) ▸ +About (2). The About window will display the current version. It’s +important to check this regularly to ensure your script is up to date.

  4. +
+

Pivot Painter Vegetation Tool

+
+

Note

+

Make sure that the plugin version is at least 1.4.

+
+
+
+

Using the Pivot Painter Vegetation Tool

+

To begin, open the Pivot Painter Vegetation Tool by navigating to Gaijin +ToolsPivot Painter Vegetation Tool.

+

Download the following test scene: tree_oak_test_2021.max.

+
+

Important

+

This scene requires 3ds Max 2021 or a newer version.

+

Be sure to have installed GrowFX no lower than version 2.0.1.

+
+

The tool window will appear as shown below:

+

Pivot Painter Vegetation Tool

+
+

Key Features and Controls

+
    +
  1. Pick (1): Choose the GrowFX object that will serve as the parent for +all other elements of the tree.

  2. +
  3. Texture Save Path (2): Select the directory where the generated position +and rotation textures will be saved. For more information about these +textures and their purpose, refer to the article: Pivot Painter Wind on +Vegetation for daNetGame-based +Projects.

  4. +
  5. Final Object Name (3): Specify a custom name for the resulting object. By +default, the tool assigns the name of the selected object.

  6. +
  7. Start Creation (4): Initiates the tool’s operation.

  8. +
  9. Visit to Learning Web Site (5): Provides access to this article.

  10. +
  11. Contact with Developer (6): Opens a link to contact the tool’s author.

  12. +
+
+
+

Workflow Example

+
    +
  1. Select tree_oak_large_a and navigate to the Modify panel. Locate the +Create Hierarchy of Meshes button. Ensure the Group by Path Color +checkbox is unchecked before clicking the button.

  2. +
  3. The script will generate a large number of hierarchically connected objects +within the layer:

    +

    Pivot Painter Vegetation Tool

    +
  4. +
  5. Select all the contents of this layer and assign the material previously +applied to tree_oak_large_a. The tool is now ready to work.

  6. +
  7. Select the parent object using button (1) at the beginning of the +hierarchy. This object is the root of all branches in the tree:

    +

    Pivot Painter Vegetation Tool

    +
  8. +
  9. Use button (2) to specify the output path for the resulting .dds +textures. Press button (4) to generate the textures pivot_pos.dds and +pivot_dir.dds, along with a new WIND layer containing the completed +object with the assigned name.

    +

    Pivot Painter Vegetation Tool

    +
  10. +
  11. After generating the textures, follow the instructions in the document: +Pivot Painter Wind on Vegetation for daNetGame-based +Projects.

  12. +
+
+

Important

+
    +
  • Script Limitations: Unlike the Houdini graph version, this script is +limited to a maximum of 4 hierarchy levels within GrowFX. Consequently, the +number of allowed links is restricted to 4x. In Houdini, any levels beyond +the 4th will be merged into the last one, while this script will discard and +not display them.

  • +
  • Object Limitations: Both this script and Houdini impose a limit of 2048 +objects, derived from the maximum allowed texture size. Any objects exceeding +this limit will be ignored by the script, and Houdini will also disregard +them.

  • +
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/simple_cmp_editor.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/simple_cmp_editor.html new file mode 100644 index 000000000..48b03026b --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/simple_cmp_editor.html @@ -0,0 +1,440 @@ + + + + + + + Dagor 2 Simple CMP Editor — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Dagor 2 Simple CMP Editor

+
+

Caution

+

This tool is currently under development!

+
+
+

Installation

+

Install the script following the provided instructions.

+
+

Important

+
    +
  • This script requires 3ds Max 2021 or newer version to run.

  • +
  • Make sure that the plugin version is at least 1.8.

  • +
  • This Simple CMP Editor requires the +Dagor 2 Fast Editor User Properties, which +is part of the toolbox.

  • +
+
+
+
+

Accessing the Simple CMP Editor

+

To get started, ensure that your toolbox is up to date. Then, drag and drop +dagor2_CMP_GeneratorSimple.ms into the Viewport.

+
    +
  • Press Ctrl+Shift to open the floating panel:

    +

    Fast Editor panel

    +
  • +
  • Closing the panel by pressing X disables this editor completely. To return +the toggle behavior, reopen the editor from the Gaijin ToolsDagor 2 +Fast Properties…

    +

    Fast Properties in the menu

    +
  • +
  • To open the main window of the Dagor2 CMP Exporter, navigate to Gaijin +ToolsDagor CMP Exporter… (1)…

  • +
  • To verify the version (2) of the script, go to Gaijin Tools ▸ +About. The About window will display the current version. It’s +important to check this regularly to ensure your script is up to date.

  • +
+

Simple CMP Editor

+
+
+

Using the Simple CMP Editor

+

All node properties are stored in Object Properties. The script automatically +updates these properties when the position, rotation, or scale of an object +changes. Below is an example:

+

Node properties example

+

Always use the CMP Exporter to edit properties. The following is a list of +currently supported properties:

+
+

Supported Properties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyExampleDescription
place_type:iplace_type:i = 1"No Collision Type"=0, "Place Pivot"=1, "Place Pivot and use Normal"=2, "Place 3-point (bbox)"=3, "Place Foundation (bbox)"=4, "Place on Water (flootable)"=5, "Place Pivot with Rendinst Collision"=6
rot_x:p2rot_x:p2=90, 2Rotates the node 90° on the chosen axis, then applies a random angle between -2° and 2°.
rot_y:p2rot_y:p2=0, 30Rotates the node randomly on the chosen axis between -30° and 30°.
rot_z:p2rot_z:p2=90, 2Rotates the node 90° on the chosen axis, then applies a random angle between -2° and 2°.
offset_x:p2offset_x:p2=1, 2Moves the node 1 unit along the x-axis, then randomly between +/-2 units.
offset_y:p2offset_y:p2=1, 2Moves the node 1 unit along the y-axis, then randomly between +/-2 units.
offset_z:p2offset_z:p2=1, 2Moves the node 1 unit along the z-axis, then randomly between +/-2 units.
scale:p2scale:p2=1.5, 0.1Uniformly scales the node to 1.5, with variation in the range [-0.1 .. 0.1].
yScale:p2yScale:p2=1, 0.1Alters the node height by a value in the range [-0.1 .. 0.1].
tm:mtm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [0.0, 0.0, 0.0]]Non-randomized location, rotation, and scale.
aboveHt:raboveHt:r=0.0Specifies a fixed height above the surface.
+

The script does not affect manually entered properties not listed above. The +animation below shows that when you change the parameters, unsupported +properties of the collision object remain untouched, example: +simple_cmp_preserving_unsup_prop.gif.

+
+

Important

+

Only one selected object can be edited at a time. If you select more than one +object, the CMP Exporter interface will be greyed out and unavailable for +parameter editing. This is intentional to prevent damaging or erasing properties +of different objects.

+
+

However, objects can be moved, rotated, or scaled in selected groups. When the +script runs, it automatically updates all parameters inside user custom +properties for all selected objects. If the script is not run during editing, +parameters will automatically update when you press the Export CMP button. +Alternatively, run the script and select an object to update its parameters +automatically.

+
+

Important

+

If an object does not already have any CMP properties, default properties such +as Matrix3 and Place type will be automatically assigned. Note that only +Editable Mesh or Editable Poly objects can have CMP settings. For non-editable +objects, the interface will be greyed out and unavailable for editing.

+
+

For example, create a box and select it when the script window is open. The +whole interface will be grey because it is not an Editable Mesh or Editable +Poly.

+

It will look like this (only node name and Matrix3):

+
node{
+  name:t="ancient_statue_c_dmg_056_dmg:rendInst"
+  tm:m=[[0.606621, 0.0, 0.0105886] [0.000184797, 0.606621, -0.010587] [-0.010587, 0.0105886, 0.606528] [-0.211369, 3.01566, 0.255796]]
+}
+
+
+
+

Important

+

All objects in the scene must have the same scale on all axes.

+
+

If an object is not uniformly scaled along all axes, a warning will appear, +suggesting correction:

+

Non Uniform Scale Warning

+

The script will not correct this error; it leaves the decision to your +discretion. However, every time such an object is selected while the script is +running, a warning will appear.

+
+
+

CMP Editor Interface

+

Let’s consider the functionality of the script interface:

+

CMP Editor Interface

+
    +
  • Output Path (1): Specify the path where the .composit.blk file will be +saved after export. Button (2) allows you to select a custom path. On +first use, this will default to the 3Ds Max export path.

  • +
  • Default Node Type (3): Set the default node type. If the name contains +some gross errors like invalid characters, the script will indicate an error +of the form:

    +

    Type error

    +
  • +
  • Remove numeric suffixes if exist (4): If enabled, removes the last three +digits from object names during export. For example, +ancient_statue_c_dmg_087 will be exported as ancient_statue_c_dmg_. This +is useful since objects in 3Ds Max often include numbers that are unnecessary +in the final composite file.

  • +
  • Export CMP (5): Exports objects to the specified directory. All objects in +the current active layer will be exported. Recall that the active layer is the +layer highlighted by the blue folder

    +

    Active Layer

    +

    For example a layer

    +

    Active Layer Name

    +

    is exported to ancient_statue_c_dmg_cmp.composit.blk at the specified path.

    +

    Ensure the active layer is named correctly; otherwise, a warning will appear:

    +

    Type Warning

    +
  • +
+

Next are parameters to export from 3Ds Max to Dagor:

+
    +
  • Transfor Matrix3 Enabled (6): Exports the transformation matrix (position, +rotation, scale) to Dagor’s format. Learn more about transformation +matrices +here.

  • +
  • place_type Enabled (7): Enables object placement type in Dagor. There +are seven different placement methods, which your mentor can explain in +detail.

  • +
  • Parameter block (8): Responsible for randomizing node rotations along the +x, y, z axes. Example: +simple_cmp_ed_prop_edit_rot_02.gif.

    +
    +

    Important

    +

    If any checkbox for rot_x, rot_y, rot_z, offset_x, offset_y, +offset_z, scale, or yScale is enabled, the Matrix3 parameter will be +unavailable.

    +

    This limitation is intentional and adheres to Dagor Engine requirements.

    +
    +
  • +
  • Parameter block (9): Responsible for randomizing node offsets along the x, +y, z axes relative to the current position.

  • +
  • Scale Enabled (10): Enables randomization of node scaling from the base +scale value within the specified range.

  • +
  • yScale Enabled (11): Enables randomization of scaling along the Y-axis +(Z-axis in 3Ds Max, which is up in Dagor).

  • +
  • aboveHit Enabled (12): Enables fixed node positioning above the surface by +the specified value in the aboveHt parameter.

  • +
+

As the Dagor Engine evolves, new parameters may be added or existing ones +modified. Always refer to the updated table of parameters.

+
+

Note

+

This script is complex, functioning as an editor within the 3Ds Max editor. It +may contain bugs or errors. If you encounter any strange behavior or issues, do +not try to resolve them yourself. Report them to the developer immediately to +save time and facilitate quick fixes.

+
+
    +
  • Open Learning Document (13): Opens this article.

  • +
  • Contact with Developer (14): Provides contact with script developer.

  • +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/transfer_vertex_position_to_vertex_color_tool.html b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/transfer_vertex_position_to_vertex_color_tool.html new file mode 100644 index 000000000..8e9a86a59 --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/transfer_vertex_position_to_vertex_color_tool.html @@ -0,0 +1,480 @@ + + + + + + + Dagor 2 Transfer Vertex Position to Vertex Color Tool — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dagor 2 Transfer Vertex Position to Vertex Color Tool

+
+

Installation

+

Install the script following the provided instructions.

+
+

Important

+

This script requires 3ds Max 2010 or newer version to run.

+
+
+
+

Overview

+

This tool facilitates the transfer and baking of vertex position changes from +one object to another using vertex colors, enabling the creation of detailed +morph effects. The tool captures the positional differences between +corresponding vertices of two objects and encodes this information into the +vertex color channels.

+

Below is an example of the tool’s output:

+

Transfer Vertex Position to Vertex Color Tool

+
+
+

Accessing the Transfer Vertex Position to Vertex Color Tool

+
    +
  1. Navigate to Gaijin Tools (1)Dagor Vertex Pos to VColor…. This +will open the main window of the Dagor Vertex Position to VColor Tool.

  2. +
  3. To verify the version (3) of the script, go to Gaijin Tools (1) ▸ +About (2). The About window will display the current version. It’s +important to check this regularly to ensure your script is up to date.

  4. +
+

Transfer Vertex Position to Vertex Color Tool

+
+

Note

+

Make sure that the plugin version is at least 1.6.

+
+
+
+

Using the Transfer Vertex Position to Vertex Color Tool

+

To begin, open the tool panel by navigating to Gaijin ToolsDagor +Vertex Pos to VColor.

+

Download the following test scene: VColorMorphDemo.max.

+
+

Important

+

This scene requires 3ds Max 2024 or a newer version.

+
+
+

Use Case: Bent Metal Effect

+

The script was originally developed to create a bent metal effect, where a new +car model gradually morphs into a damaged car model. Storing two full models is +resource-intensive, so this tool allows us to store the positional changes as +vertex color data. This approach requires that the vertex count and order in +both the original and deformed models are identical.

+
+
+

Encoding Process

+
    +
  1. Channel Assignment:

    +
      +
    • The Red channel stores the X-axis offset.

    • +
    • The Green channel stores the Y-axis offset.

    • +
    • The Blue channel stores the Z-axis offset.

    • +
    +
    +

    Note

    +

    The Z-axis is upward in most coordinate systems, but remember that in some +systems like DirectX, the Y-axis is considered upward.

    +
    +
  2. +
  3. Brightness Range:

    +
      +
    • The brightness range is split into two intervals: 0-127 and 127-255.

    • +
    • 127 represents zero offset, meaning no positional change between the +original and deformed model.

    • +
    • Values 0-126 represent negative offsets, while 128-255 represent +positive offsets.

    • +
    +
  4. +
  5. Normalization:

    +
      +
    • To fit the positional offsets within the 128-step brightness range, +normalization is applied.

    • +
    • The script identifies the maximum distance between corresponding vertices +across both models. For example, if the maximum distance is 256 units, the +script normalizes all distances using a multiplier of 256/128 = 2.0. This +normalization ensures that the offsets are encoded correctly within the +available brightness range. The multiplier and normalization are +automatically calculated after the script processes the models, as shown in +the following example:

    • +
    +

    Transfer Vertex Position to Vertex Color Tool

    +
  6. +
+
+
+

Script Interface Overview

+

The script interface is divided into three main sections:

+
    +
  1. Base Object Selection (Block 1):

    +
      +
    • Select the base object, which remains unchanged and serves as the reference +for positional comparison.

    • +
    • Choose the target object where the vertex color (vColor) data will be +written.

    • +
    +
  2. +
  3. Calculation and Output (Block 2):

    +
      +
    • Initiate the calculation and output of the positional differences.

    • +
    +
  4. +
  5. Inverse Transformation (Block 3):

    +
      +
    • Optionally, verify the accuracy of the process by performing an inverse +transformation, converting the vertex color data back into vertex positions +to check for consistency.

    • +
    +
  6. +
+

Transfer Vertex Position to Vertex Color Tool

+
+
+

Example Workflow

+

To illustrate, let’s transfer the vertex position differences from an object +named StartMorph to another named EndMorph. As EndMorph has a point offset +along the X-axis, the Red channel will reflect this shift – positive values on +one side and negative values on the other. A gray color (127, 127, 127) +indicates no positional change.

+
    +
  1. Select the Source Object:

    +
      +
    • Choose StartMorph using the Source Object (1) button.

    • +
    +
  2. +
  3. Select the Target Object:

    +
      +
    • Select EndMorph (3), the object to which vColor data will be applied.

    • +
    +
  4. +
  5. Display the Result:

    +
      +
    • Check the Show VColor Result (4) option to display the vColor in the +Viewport.

    • +
    • If needed, specify a different channel (5) for the output, such as +channel 8 (used for Ambient Occlusion in Dagor Engine).

    • +
    +
  6. +
  7. Start the Process:

    +
      +
    • Click the Transfer Vertex Position to VColor (6) button to begin the +transfer. The resulting vColor will illustrate the deformation, as shown by +the color changes in the sphere, examples (9) and (10).

    • +
    +
  8. +
+

Transfer Vertex Position to Vertex Color Tool

+

This is an illustrative example when deformation of an object where the vColor +has changed. In a real task, we need to transfer the position the other way +around from the deformed object to the undeformed object. The selection will be +inverted.

+
+
+

Verification

+

To verify the accuracy of the transformation:

+

Inverse Transformation:

+
    +
  1. Set the Global Distance Multiplier (11) to the value calculated during +the initial process.

  2. +
  3. Select the model with the generated vColor.

  4. +
  5. Click Restore VertexPos to Start Pos (12) button to revert the vColor +back into vertex positions.

  6. +
+

The process may introduce minor distortions due to the limited precision +available within the 128-step brightness range.

+
+
+
+

Prototype Car Destruction in Unreal Engine

+

This section demonstrates a practical application of the script for simulating +car damage in Unreal Engine. You can download the Unreal Engine project from +the following link:

+

Download Unreal Project

+
+

Note

+

The minimum supported version for this project is Unreal Engine 4.27.

+
+

To view the results directly, you can run the executable file +CarDeformExampleWin64x\CarDeformExample.exe, example: transfer_vertex_05.gif.

+
+

Nissan Car Damage Example

+

For a hands-on example, you can download the scene files for a damaged Nissan +car from the links below:

+ +
+

Note

+

The minimum supported version for this scene is 3ds Max 2024.

+
+
+

Step-by-Step Instructions

+
    +
  1. Open the Scene in 3ds Max:

    +
      +
    • The scene contains two versions of the car: a dented version (2) and an +undamaged version (1).

    • +
    +
  2. +
+

Transfer Vertex Position to Vertex Color Tool

+
    +
  1. Select the Undamaged Car:

    +
      +
    • Begin by selecting the undamaged car model (1).

    • +
    +
  2. +
  3. Specify the Dented Car as the Target:

    +
      +
    • With the undamaged car still selected, press the selection button (3) +to specify the dented car as the target for the transformation.

    • +
    +
  4. +
  5. Run the Script:

    +
      +
    • Press the execute button (4) and wait for the script to complete its +process.

    • +
    +

    The car should now display a vertex color indicative of the deformation +process, similar to the example shown below:

    +

    Transfer Vertex Position to Vertex Color Tool

    +
  6. +
  7. Verify the Results:

    +
      +
    • To verify the process, make a copy of the undamaged car (1) and press +the button (2) to apply the vertex color transformation.

    • +
    +

    The result should closely resemble the dented car model, as illustrated here:

    +

    Transfer Vertex Position to Vertex Color Tool

    +
  8. +
  9. Inspect for Artifacts:

    +
      +
    • Upon closer inspection, particularly around the steering wheel, you may +notice minor artifacts. These artifacts are a result of compressing vertex +positions into the vertex color space, as shown below:

    • +
    +

    Transfer Vertex Position to Vertex Color Tool

    +

    Unfortunately, these artifacts are inherent to the technology used for +encoding vertex positions in the vertex color channels. However, they are +generally inconspicuous during gameplay, blending naturally with the car’s +damaged appearance.

    +
  10. +
+
+
+
+

Additional Resources

+
    +
  • Documentation: Button Visit to Learning Web Site (7) will open this +article.

  • +
  • Contact Information: Button Contact with Developer (8) provides the +developer’s contacts.

  • +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagormat/dagormat.html b/dagor-tools/addons/3ds-max/dagormat/dagormat.html new file mode 100644 index 000000000..f51163c8a --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagormat/dagormat.html @@ -0,0 +1,354 @@ + + + + + + + DagorMat — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

DagorMat

+
+

General Information

+

DagorMat is essentially a collection of shaders for 3ds Max. To access it, +open the Material Editor (preferably using the Slate Material Editor), +navigate to the General tab, and you should see two materials listed under +Dagor Dagorrat Material.

+
+

Note

+

If you don’t see DagorMat listed, press F10 and switch the Renderer +field to Scanline Renderer.

+
+

DagorMat

+

There are two versions available because the original was DagorMat1 (often +just called DagorMat), where shader names (class names) and their parameters +had to be manually entered. Even now, some shaders have not been migrated to +DagorMat2 and thus still open in DagorMat1, with all parameters defined via +scripts. This can be cumbersome since 3DsMax’s interface limits the shader +parameter display area to just a few lines.

+

DagorMat

+

DagorMat2 was likely developed to address these usability issues, allowing you +to set all parameters using a mouse-friendly interface.

+

Shader:

+

DagorMat

+

Additional parameters:

+

DagorMat

+
+
+

Configuring DagorMat Shaders

+

Since DagorMat1 does not use any preset parameters (everything is manually +scripted), there’s no need for additional configuration. However, DagorMat2 +requires that shaders and their parameters be added to the dagorShaders.cfg +files for them to appear in 3ds Max.

+

These configuration files can be found at:

+
.../dagor_cdk/windows-x86_64/plugins-3dsMax/
+
+
+
+

General Configuration Parameters

+

To configure shaders, open the dagorShaders.cfg file in any text editor.

+
+

Texture Slot Names

+

The first section you’ll encounter:

+

These parameters:

+
[_settings]
+tex1_name="diffuse"
+tex2_name="CUBE environment"
+tex3_name="normalmap"
+tex4_name="parallax (height field)"
+tex5_name="glossmap (specular mask+shininess)"
+tex6_name="emission tex (unsupported!)"
+tex7_name="lightmap"
+tex8_name="detail tex"
+
+
+

control the following:

+

DagorMat

+
+
+

Global Parameters

+

These parameters apply to all shaders. While they might not work everywhere, you +can set them in any shader. If a shader doesn’t have its own specific +parameters, only the global ones will be used.

+

These parameters:

+
[_global_params]
+lighting=enum(none lightmap vltmap)
+real_two_sided=enum(yes no)
+scene_emission=real optional
+emission=real optional
+relief=real optional
+atest=text optional
+reflection_multiplier=int optional
+
+
+

control the following:

+

DagorMat

+

Pay close attention to how different parameter types are displayed and processed +in the 3ds Max interface:

+
    +
  • enum(none lightmap vltmap) – Enumerations appear as “radio buttons.”

  • +
  • enum(yes no) – Boolean options appear as checkboxes.

  • +
  • real optional – A “real number” allows you to specify any numerical value.

    +
    +

    Note

    +

    3ds Max does not export zero values unless you manually enter them. If you +add a new parameter (which defaults to 0) and don’t replace it with your own +zero, the parameter will not be exported.

    +
    +
  • +
  • text optional – string type, typically used when a parameter requires +multiple components (e.g., (1,1,1,1)).

  • +
  • int optional – integer type, ranging from negative to positive infinity.

  • +
+
+
+
+

Shader-Specific Parameters

+

Next, you’ll find parameters specific to each shader. These are defined +similarly to the global ones, using the same types of variables.

+
[rendinst_perlin_layered]                   // Shader name
+invert_heights=text optional                // Parameters
+mask_gamma=text optional
+paint_details=text optional
+
+micro_detail_layer=real optional
+micro_detail_layer_v_scale=real optional
+micro_detail_layer_uv_scale=real optional
+
+// War Thunder parameters
+blend_normals=text optional
+details_tile=text optional
+
+
+
+
+

Procedural Parameter Update – dagorShadersCfgGenerator-dev.exe

+

The dagorShaders.cfg file can now be updated using the tool located at +.../tools/util/dagorShadersCfgGenerator-dev.exe.

+

This tool performs the following steps:

+
    +
  1. Reads the Parent dagorShaders.cfg: The tool begins by loading the +parent dagorShaders.cfg file, which serves as the base for updating shader +parameters.

  2. +
  3. Reads the Target dagorShaders.cfg: It then loads the target +dagorShaders.cfg, where the final parameters and shaders will be saved. +Usually, this is the same file as the parent, since there are no other shader +config files to reference.

  4. +
  5. Loads Shader Dumps: The tool reads a list of shader binaries, either from +tool-specific shaders (tools.ps50.shdump.bin) or game shaders +(game.ps50.shdump.bin). Given the variety of projects, shaders differ +between them, so you can specify multiple binaries from different projects to +consolidate their parameters into a single dagorShaders.cfg.

  6. +
  7. Extracts Shaders and Parameters: The tool extracts all shaders and their +parameters from the shader binaries.

  8. +
  9. Merges Parameters: It merges these extracted parameters into the parent +dagorShaders.cfg, maintaining the structure by only adding new parameters +and removing outdated ones.

  10. +
  11. Writes the Final dagorShaders.cfg: The tool then saves the updated +configuration to the target dagorShaders.cfg.

  12. +
+

The tool is run through the command line with the following syntax:

+
dagorShadersCfgGenerator-dev.exe [parent dagorShaders.cfg] [target dagorShaders.cfg] [shader binary 1 (.ps50.shdump.bin)] [shader binary 2 (.ps50.shdump.bin)] ... [shader binary N (.ps50.shdump.bin)]
+
+
+
+

Important

+
    +
  • Exercise Caution! The tool should not be fully trusted due to frequent +changes in the shader environment. After each update, always perform a diff +comparison with the current version and carefully review any differences.

  • +
  • Potential Issues: The tool may occasionally omit certain parameters or +fail to locate shaders that you know exist.

  • +
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/dagormat/index.html b/dagor-tools/addons/3ds-max/dagormat/index.html new file mode 100644 index 000000000..793d0da29 --- /dev/null +++ b/dagor-tools/addons/3ds-max/dagormat/index.html @@ -0,0 +1,196 @@ + + + + + + + DagorMat — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

DagorMat

+

DagorMat - Shader set for 3ds Max.

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/3ds-max/index.html b/dagor-tools/addons/3ds-max/index.html new file mode 100644 index 000000000..61d7f5f50 --- /dev/null +++ b/dagor-tools/addons/3ds-max/index.html @@ -0,0 +1,210 @@ + + + + + + + Add-ons for 3ds Max — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/blender/dag4blend-comp-editor/dag4blend_comp_editor.html b/dagor-tools/addons/blender/dag4blend-comp-editor/dag4blend_comp_editor.html new file mode 100644 index 000000000..1d58ae665 --- /dev/null +++ b/dagor-tools/addons/blender/dag4blend-comp-editor/dag4blend_comp_editor.html @@ -0,0 +1,595 @@ + + + + + + + dag4blend Composite Editor — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dag4blend Composite Editor

+
+

How to Enable

+

The Composite Editor is currently under development and is considered an +experimental feature. As such, it is hidden by default. To enable its +visibility, you need to check the appropriate box in the add-on settings.

+How to Enable +
+How to Enable +
+

The Composite Editor can be found in the N-panel under the Dagor tab. +The panel itself is divided into three main sections: CMP Import, CMP +Export, and CMP Tools.

+
+
+

CMP Import

+CMP Import +
+
    +
  • import path: This is the full path to the name.composit.blk file. +However, if the correct project is selected, you can simply specify +name.composit.blk or even just name – the add-on will locate and import +it.

  • +
  • refresh cache: To import subcomposites and geometry, the add-on needs to +know where to find them. When this checkbox is active, the importer will scan +all files in the active project directory once and record where everything is +located. This list is then used during the import process, which significantly +speeds up the operation compared to the previous version, where the directory +might be searched multiple times across several levels of nesting. If you’re +importing composites from the same project, you can uncheck this box to save a +few seconds, but only if you’re certain the paths are up-to-date. A separate +cache is maintained for each project.

  • +
  • recursive: This option imports not only the specified composite but also +its subcomposites, which are nodes, and their subcomposites. The algorithm +should be self-explanatory.

  • +
  • with dags: Imports *.lod00.dag rendinsts and *.dag prefabs for all +composites. If recursive is disabled, it only imports geometry directly +within the composite being imported; otherwise, it also imports the necessary +assets for the subcomposites.

  • +
  • with lods: Available only when the previous checkbox is active. This +option allows you to import not just lod00 but all other LODs (Level of +Detail) as well. Keep in mind that this significantly slows down the import +process and increases the scene’s complexity – useful only when you need to +adjust a mesh in a small composite, rather than the position of nodes. For +example, if you need to reposition a couple of apples so they don’t stick out +of a box in a composite, and the apple pile is a single mesh, you still need +to update all LODs, not just the first one.

  • +
+

If a collection named after the composite already exists, it will be cleared +during import, and the import will occur within that collection. If the +collection isn’t found, a new one will be created. All nodes are placed in a +collection named NODES; again, if a collection with this name exists, it will +be used.

+

If a .dag (rendinst or prefab) collection existed before the composite import, +the asset will not be imported.

+

The node type and its name are explicitly set in the collection’s properties. +For rendinsts, this isn’t critical since the name is stored in *.lods rather +than the nested geometry collections. However, for prefabs, this is important to +remember – Override Name will select the overridden collection name.

+
+

Note

+

Don’t forget to check the log.

+
+
+

New Blend File Structure

+

The Composite Editor also introduces a new file structure for .blend files. +Instead of having everything in a single scene, the new approach suggests using +multiple scenes, each organized by content type.

+New Blend File Structure +
+

Scenes in Blender can be thought of as “.blend files within a .blend +file”. They are independent of each other, meaning that settings like checkbox +states, export paths, and other parameters are unique to each scene.

+
    +
  • COMPOSITS: This scene is where all composites are imported.

  • +
  • GAMEOBJ: Collections for game objects are created here. These objects are +not automatically readable, so placeholders for previews (and some tools, +discussed later) must be manually added.

  • +
  • GEOMETRY: This is where all .dag files are imported, including through +dag-imports if the scene exists.

  • +
  • Scene: The default scene that exists in a new .blend file. Any scenes +you create will also appear in this list; tools do not delete user-created +resources.

  • +
  • TECH_STUFF: Ideally, you should never need to use this scene. It contains +temporary collections of random nodes, and in the future, other resources +required for the add-on’s internal tasks.

  • +
+

These scenes are not linked to each other. To transfer resources between them, +the add-on adds a collection called TRANSFER_COLLECTION to each scene. This +collection isn’t a copy but the same entity across all scenes. For example, you +can enter the GEOMETRY scene, create nodes from the necessary rendinsts, +place them in this collection, and then switch to the COMPOSITS scene to +start assembling your composite using those nodes.

+

If you want to set up this scene structure without importing a composite, or if +you’ve accidentally deleted the TRANSFER_COLLECTION, don’t worry. The CMP +ToolsScenes section includes a button for creating or updating the scene +structure, along with a duplicate scene switcher. This dropdown differs from the +standard one in that it prevents accidental deletion or duplication of scenes.

+New Blend File Structure +
+
+
+

Creating Nodes

+

Let’s start by exploring the different methods for creating nodes. There are +several approaches:

+
    +
  1. Adding an Empty Object

    +

    You can add an Empty object to the scene, enable instancing in the +Entities panel, and select the desired object’s collection from the +dropdown menu. If instancing is disabled, or enabled but the collection is +not specified, the node will be exported as empty.

    +Creating Nodes +
    +
  2. +
  3. Dragging a Collection

    +

    In the Outliner, you can drag the collection containing the desired asset +into the 3D view.

    +
    +
    +Creating Nodes +Creating Nodes +
    +
    +

    In this case, there is no need to enable instancing.

    +
  4. +
  5. Enabling Instancing via Object Properties

    +

    Add an Empty object and enable instancing through the Object Properties +panel (Blender’s native properties, not the add-on’s).

    +Creating Nodes +
    +
  6. +
+

The first method is effectively a more flexible version of the third. Why is it +more flexible? This will be explained below.

+
+
+

Editing Nodes

+

To convert a standard node into a random node, simply click the “+” button in +the Entities panel.

+Editing Nodes +
+

The second entity will initially be empty, and you can assign a collection to it +either through the dropdown menu, by entering the collection name manually, or +by dragging it from the Outliner into the field.

+
+

Important

+

There is no safeguard against incorrect selections, so all collections are +available for selection. Ensure that the chosen collection is indeed a node.

+
+

To set a weight different from the default value of 1.0, click Init weight +and enter the desired value in the newly generated field.

+

By default, all entities are displayed immediately, which may hinder your +workflow. To hide one or more entities in a random node, click the Monitor +icon next to its name.

+

To delete an entity, click the Trash icon. Once only one entity remains, the +node will revert to a non-random state.

+
+
+

Setting Node Types and Changing Display

+

In composites, it’s possible (and sometimes necessary) to specify the node type +– whether the asset is a rendinst, game object, composite, or prefab. The +importer determines the type automatically, but when creating new nodes, you’ll +need to specify it manually.

+

In Blender’s editor, an asset is represented by a collection that is drawn +over an Empty object. Therefore, the type needs to be set in the collection’s +properties. When the Composite Editor is enabled, a new panel, Type, is +added to the Collection Properties.

+

To specify the type, click the circle next to the appropriate type – your +selection will be highlighted. A newly created collection will show +Undefined as the active value until a type is set.

+Setting Node Types +
+

During export, the collection’s name (without any suffix like .lodNN, .lods, +or .002) and its type, if specified, will be recorded. Nodes with instanced +collections such as:

+
    +
  • asset

  • +
  • asset.lods

  • +
  • asset.lod01

  • +
  • asset.001

  • +
+

are treated equivalently by the exporter (assuming their types are the same). +The “suffix trimming” allows you to toggle the display of all rendinst LODs at +once (by default), switch to only the base LOD for cleaner and more accurate +display, or focus on the LOD with collision to check for intersections between +the parent and child colliders for proper destruction setup.

+

To hide a mesh from the composite preview, you can disable its original in the +source collection for the viewport using the monitor icon, as you did with +entities in the previous section. This is useful for disabling collision meshes, +for example, when you want to view LODs with collisions but not the colliders +themselves, or temporarily disabling decals if Z-fighting is visually +distracting.

+

Any collection can be used:

+Setting Node Types +
+
+
+

Node Hierarchy in a Composite

+

To establish a parent-child relationship among nodes and build a more +complex hierarchy, use Blender’s standard tools.

+

You can set a parent for a node through the object’s properties. However, this +will cause the matrix to recalculate, resulting in the object visually “jumping” +as its new “zero” point changes.

+Node Hierarchy in a Composite +
+

To maintain the node’s visual position, use the Set Parent command – either +by pressing Ctrl+P or through the ObjectParent menu.

+

To reverse this process and remove the parent while preserving the matrix, use +the Alt+P shortcut or select the option in the same ObjectParent +menu.

+
+
+

Using Blender’s Built-in Features

+

To display nodes as Empty objects, the Composite Editor uses Blender’s +built-in feature: collection instancing. As a result, tools that work with +collection instancing also work with composites.

+
+

Replacing Node Content Quickly

+

If you need to quickly replace the content of multiple nodes with the same +asset:

+
    +
  1. Select all the nodes you want to replace.

  2. +
  3. Assign the desired collection to the active node (the order of this step and +the first one can be swapped – both work the same).

  4. +
  5. Then, link the same collection to all the selected Empty objects. You can do +this by pressing Ctrl+L and selecting Link Instance Collection (the +default hotkey), or by accessing the same option through the +ObjectLink/Transfer Data menu if your hotkeys have been customized.

    +Replacing Node Content +
    +Replacing Node Content +
    +
  6. +
+
+
+

Snap to Surface

+

Remember that snapping also works here. For placing objects on an uneven +surface, you might find the Face snapping mode with Project Individual +Elements active to be useful. This ensures that all selected nodes will snap +their pivot points to the surface. Optionally, you can also enable rotation to +match the surface normal.

+
+

Important

+

Do not confuse this with the place_type:i setting for exported nodes – this +specific snapping needs to be set in the dagObject Properties of the Empty +object if required.

+
+
+
+
+
+

CMP Tools

+
+

BBOX to Node

+

The BBOX to Node tool converts the bounding boxes of all selected objects +into instances of a chosen collection. This tool is designed to simplify the +placement of objects like indoor walls, environment probes, wall holes, etc. +You’ll need to create the necessary collections yourself.

+BBOX to Node +
+

Once the collection is set up, you can hide it and leave it untouched – just add +a few meshes for future game objects and transform them as needed, whether in +Object or Edit mode. The pivot position is irrelevant; the replacement will work +as intended. Just be sure to monitor the bounding box before the transformation +(you can enable its display in the Object Properties).

+

Here’s an extreme example (such rotations are rarely needed in practice):

+BBOX to Node +
+BBOX to Node +
+BBOX to Node +
+

For clarity, it’s recommended adding a 1-meter cube with gi_black to the +future game object’s collection. This will make it easier to temporarily convert +it back to a mesh for further adjustments.

+
+
+

To Mesh

+

The To Mesh tool converts selected composite nodes (collection instances) +into actual geometry.

+

Once converted, the geometry can be exported to any other format – now it’s just +a mesh. For example, you can transfer the composite to Houdini via +Alembic/FBX, where a .dag export already exists but importing isn’t +supported yet.

+To Mesh +
+
+
+

Explode

+

Want to edit a subcomposite directly in place, such as moving a plate on a table +or adding another one? No problem! The Explode tool temporarily disassembles +the selected composite instance and places its components as child objects of +the original node, which now becomes “empty”. You can then make changes – adjust +transforms, add or remove objects, etc.

+Explode +
+Explode +
+

Changes can either be reverted to the original state by clicking Revert or +applied using Rebuild, which will replace the original collection. Don’t +forget to save these changes by exporting the modified subcomposite.

+Explode +
+

However, reassembly is not mandatory – the disassembled composite can be +exported without issues as an empty node with several children. If desired, you +can separate them using Clear Parent and keep transformation and delete the +“empty” node altogether. This is useful when you need to replace a multi-level +random composite with one of its states – disassemble it (you can disassemble +several nested levels at once) and remove the unnecessary parts.

+

The Explode tool also allows you to disassemble rendinsts and prefabs to +make changes to their geometry, which can be useful at times. If the source was +a directory containing all LODs, a disassembled rendinst will appear slightly +different:

+Explode +
+

Each LOD will be tied to its own “empty” node.

+

To reassemble it, you’ll need to select the top-level empty, not the one with +the LOD number. Unlike a disassembled composite, disassembling a mesh will cause +an export error, so be sure to either revert the node to its original state or +apply the changes before exporting.

+
+

Important

+

A known limitation is that this type of editing leaves “garbage” indices, as it +works through creating copies, and Blender doesn’t allow two objects of the +same type to have identical names. Additionally, Explode currently cannot +retain the parent-child relationships within the disassembled collection, +but it does preserve the correct coordinates relative to the composite’s “zero” +point. If the hierarchy is important, you’ll need to manually restore it after +using Rebuild.

+
+
+
+
+

CMP Export

+

The CMP Export section is straightforward: specify the directory path where +the composite should be exported, along with the collection representing the +composite to be exported.

+CMP Export +
+
+

Parameters

+

Export parameters, such as random offsets, are specified in the Object +Properties of the Empty object. These parameters do not appear +in the viewport. During import, only the initial state (the first part of the +value) is applied, but any random deviation (the value after the comma) will not +be.

+

If a node has at least one random field specified, its transformation matrix +will not be saved. If the imported node has both a matrix and random fields, the +random parameters will be ignored, and a corresponding notification will be +logged.

+Parameters +
+
+
+

Limitations of the Composite Editor

+
    +
  • Includes Not Supported: Currently, includes are not supported. Lines with +the include directive are ignored during import, which may lead to some data +loss. This will be noted in the log.

  • +
  • Blender’s Limitation: Blender supports a maximum of 7 levels of nesting. +Multi-level composites may experience performance issues and may not display +correctly – starting from the 8th level of nesting, the content will not be +rendered. However, import and export are still possible.

    +

    For example, a node-rendinst represents one level of nesting. A random node +with several rendinsts represents two levels. A subcomposite with these random +nodes would be three levels, and so on. This issue mainly arises when +importing buildings with interiors, such as in daNetGame-based games, where +indoor_stuff includes numerous nested composites with randomness – like +random cabinets with objects placed on the shelves, each with random offsets.

    +
  • +
  • Axis Mismatch: In Blender, the Z-axis is up, while in Dagor, the +Y-axis is up. While matrix adjustments are handled automatically, preventing +scenes from tilting, it’s important to remember that offset_y:p2 refers to +up/down movement despite the name. The same logic applies to rotation and +scaling.

  • +
  • Random Offset Parameters: Currently, random offset parameters do not +automatically display in the viewport. During import, the add-on sets the +initial offset, but if you add or modify a random parameter, you’ll need to +manually adjust the node’s position.

  • +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/blender/dag4blend-comp-editor/index.html b/dagor-tools/addons/blender/dag4blend-comp-editor/index.html new file mode 100644 index 000000000..d1d001c15 --- /dev/null +++ b/dagor-tools/addons/blender/dag4blend-comp-editor/index.html @@ -0,0 +1,201 @@ + + + + + + + dag4blend Composite Editor — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

dag4blend Composite Editor

+

The dag4blend Composite Editor is an experimental Blender add-on designed to +import, edit, and export complex composite structures. It provides tools for +managing node hierarchies, converting geometry, and handling nested assets, +streamlining the process of working with complex 3D scenes.

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/blender/dag4blend-texture-baker/dag4blend_texture_baker.html b/dagor-tools/addons/blender/dag4blend-texture-baker/dag4blend_texture_baker.html new file mode 100644 index 000000000..084632f01 --- /dev/null +++ b/dagor-tools/addons/blender/dag4blend-texture-baker/dag4blend_texture_baker.html @@ -0,0 +1,417 @@ + + + + + + + dag4blend Texture Baker — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dag4blend Texture Baker

+
+

Overview

+

This tool is designed to convert “heavy” materials into a single low-resolution +rendinst_simple material, suitable for use on the last LOD (Level of Detail). +It is also useful for porting assets to mobile projects.

+

Starting from version 2.2.0, the baker also supports re-baking Blender’s +Principled BSDF, enabling the transfer of assets with textures from other +software via GLB/glTF with texture conversion, as well as “mixing” materials +directly in Blender.

+
+
+

Where to Find It

+

The Bake panel is located in the N-panel under the Dagor tab. To ensure +proper operation of the baking process, you need to specify the rendering device +in Blender’s EditPreferences settings. However, this parameter is set +for any render, so it is likely already configured.

+Where to Find It +
+
+
+

Settings

+

Here, various parameters for the upcoming bake are organized into groups.

+Settings +
+
+

Renderer

+

You can choose the device to perform the baking – either the CPU or GPU – and +set the number of samples. It is recommended to start with one sample and only +increasing the value if the bake appears “noisy”.

+
+
+

Inputs

+

Here, you can select the baking mode – either from the object to itself or from +one object to another. Depending on the mode, the parameters may vary slightly.

+Inputs - Self Bake +
+Inputs - HP to LP +
+
    +
  • Asset: The collection containing the asset to be baked. It will be +converted to Lowpoly when the mode is switched.

  • +
  • Highpoly: The collection with the asset from which the bake will be +performed. This is only relevant in the second mode, so it is hidden in the +first.

  • +
  • The Recursive checkbox determines whether to check child collections. If +baking a house for War Thunder that consists of a base and several _dp, +it’s better to place their collections in a parent collection and activate +this parameter.

  • +
+
+

Important

+

The parameters below are only relevant when baking from one object to another, +but not from UV to UV.

+
+
    +
  • Use Cage: Whether to use a cage for baking. This option is only relevant +when baking from object to object, so it is hidden in the first mode.

  • +
  • Extrusion: Defines how much the search area for the high-poly will be +“inflated” along the normal. If the Use Cage checkbox is active and a +custom cage is not specified, the low-poly node itself will be used as the +cage, inflated evenly without considering sharp edges. If the checkbox is not +active, the inflation will account for sharp edges.

  • +
+Inputs - Extrusion +
+Inputs - Extrusion +
+
    +
  • Max Ray Distance: Specifies the distance from the cage (inward) to search +for baking information. If set to zero, the ray is not limited.

  • +
+
+
+

Active Node

+

This tab only exists in the HP to LP mode and allows for detailed settings +for Lowpoly nodes. It displays the parameters of the active object.

+Active Node +
+Active Node +
+
    +
  • Cage: If the Use Cage checkbox is active, you can specify a custom +cage here. Press Init Custom Cage to create a parameter reference, then +select the desired node. This can be done from the general list by clicking on +the parameter, using the eyedropper from the Viewport or Outliner, or simply +dragging the node from the Outliner. You can delete the parameter entirely by +pressing the trash can icon, or reset it with X and select a different +node. If the selected node does not match the topology of the baked object, +the bake will fail with an error.

    +
    +

    Important

    +

    Do not place the cage in the Lowpoly or Highpoly collection.

    +
    +
  • +
  • Highpoly allows you to specify nodes from which information should be +captured for the active node. If nothing is specified, the bake will be +performed from each Highpoly node sequentially, which can take a significant +amount of time. It is better to specify only the relevant sources. To do this, +click on ADD and select sources similarly to how the cage is selected. +Multiple sources can be selected.

  • +
+
+
+

Outputs

+

This section allows you to define what you want to get as output.

+Outputs +
+
    +
  • tex_d, tex_n: Checkboxes for selecting the corresponding textures. If +neither is active, the bake will not start as there is nothing to bake.

  • +
  • Width and Height: The resolution of the output texture. Limited to +powers of two.

  • +
  • If the Reveal Result checkbox is active, the add-on will open the +directories containing the output files after a successful bake.

  • +
  • Tex Dirpath: Where to save the textures. You can enter the path as text or +select it through Blender’s built-in file browser by clicking the folder +icon on the right.

  • +
  • open texture folder: Opens the specified directory using your operating +system’s file explorer.

  • +
  • If the Save Proxymat checkbox is active, the baker will also create new +rendinst_simple proxy materials from the new textures. If one of the +textures is missing in the directory (for example, if only tex_d was +baked), the process will be interrupted with a corresponding log entry. The +path for saving it is set in the same way as for textures.

  • +
+

The add-on can also assign the resulting proxymat immediately after baking. In +this case, unnecessary UVs and materials will be removed, and the Bake UV +channel will be renamed to UVMap, which the add-on expects for correct display. +This saves time if you need to export the result as render instance. If the +Viewport result is unsatisfactory and needs re-baking, the assignment of the +proxymat and deletion of information can be undone with Ctrl+Z.

+
+

See also

+

For more information, see +Proxymats.

+
+
+
+
+

Operators

+Outputs +
+
    +
  • Convert Principled BSDF: As the name suggests, this converts Blender’s +standard shader, allowing it to be baked as +rendinst_simple. +Useful when the material was mixed directly in Blender or when an asset was +imported from GLB/glTF from another program along with textures.

  • +
  • Cleanup geometry: Removes unsupported shader polygons from the source +geometry. How do you know if a shader is supported? In the Shader Editor, +the material’s Shader node should have outputs for _tex_d_rgb, +_tex_d_alpha, _tex_met_gloss, and _tex_mask. This feature is primarily +designed for decals, which cannot be baked. Blender cannot bake through +transparent polygons; the top polygon will completely overwrite the +information beneath it.

    +

    If there is an unsupported shader on the geometry that is important for +baking, you can reassign it to a similar one. For example, the unsupported +rendinst_mask_layered +can be replaced with +rendinst_perlin_layered. +This does not have to be done manually. In the directory with the installed +add-on, there is a text file with remapping parameters:

    +

    C:\Users\<username>\AppData\Roaming\Blender Foundation\Blender\<version number>\scripts\addons\dag4blend\extras\remap.txt.

    +

    Use a colon to specify the name of the missing shader node and the name of the +replacement node. If you only want to change the material, specify its name. +If you also want to remap texture coordinates, include them as well (same +names with the _uv postfix).

    +
  • +
  • To Palette: As the name suggests, creates a “palette” of materials. A +plane is created for each material with the name of that material and the Bake +UV layer. Useful when you need to re-bake tiles – the actual geometry of the +asset would only get in the way for such a task.

  • +
  • BAKE: Starts the baking process. Creates texture files (asset collection +name + texture type postfix separated by _). The collection name is +truncated at the first dot, so my_material.001 creates +my_material_tex_d.tif instead of my_material.001_tex_d.tif. It also +removes endings indicating the LOD number.

    +

    If something goes wrong, it will display an explanatory popup and write a log +entry.

    +

    Baking is performed on the UV channel named Bake – you need to create it for +all low-poly objects. Shaders are bound to the naming of UV channels, so +renaming existing ones is not recommended.

    +
  • +
+
+
+

Scene Requirements

+
    +
  • All geometry used in the bake must be visible and selectable when you press +the BAKE button. The only exceptions are optional cages.

  • +
  • The source geometry must only have supported shaders. The receiver geometry +must have a UV channel named Bake. For self-baking, this is the same asset.

  • +
  • Naturally, the UV layout must be reasonable. It’s not enough to just create a +UV channel; you also need to unwrap it properly.

  • +
  • Everything outside the unit square will not affect the result – shift +overlapping geometry left/up to avoid strange artifacts from blending +information from different triangles in the same place.

  • +
+
+
+

Limitations

+

The output textures and proxymat are ready for use in the engine and display +correctly in most image viewers and editors. However, Photoshop is currently +an exception. It does not interpret the alpha channel correctly, neither +displaying it as the fourth channel nor as a layer mask.

+Limitations +
+

If you need to make changes to the alpha channel of such a texture, here’s a +temporary solution: LayerLayer MaskFrom Transparency allows you to +extract the alpha channel into a mask. After this, you can copy the mask’s +contents, delete the mask, and place its copied contents into a new alpha +channel.

+Limitations +
+

This solution is not the most elegant, but it works. Apply it only when +necessary to edit the alpha.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/blender/dag4blend-texture-baker/index.html b/dagor-tools/addons/blender/dag4blend-texture-baker/index.html new file mode 100644 index 000000000..e759838b9 --- /dev/null +++ b/dagor-tools/addons/blender/dag4blend-texture-baker/index.html @@ -0,0 +1,201 @@ + + + + + + + dag4blend Texture Baker — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dag4blend Texture Baker

+

The dag4blend Texture Baker is a tool for converting “heavy” materials +into a single low-resolution rendinst_simple material for final LOD use.

+

Contents:

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/blender/dag4blend/dag4blend.html b/dagor-tools/addons/blender/dag4blend/dag4blend.html new file mode 100644 index 000000000..2b45eaa1a --- /dev/null +++ b/dagor-tools/addons/blender/dag4blend/dag4blend.html @@ -0,0 +1,856 @@ + + + + + + + dag4blend — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dag4blend

+
+

Installation

+
    +
  1. Go to EditPreferencesAdd-ons in Blender.

  2. +
  3. Click Install… and navigate to the .zip file of the add-on.

  4. +
  5. After installation, check the box next to the add-on in the list.

  6. +
+

Before starting, you need to perform some initial configuration, so do not close +the Preferences window yet:

+Preferences +
+

The path for ObjProps presets: and shader list dagorShaders.cfg: can now +be set manually. This feature ensures that updating the add-on does not +overwrite any user-made changes. It is recommended to store presets outside the +add-on directory.

+

Until the path to an existing directory is specified, the preset menu will not +be displayed. For each project you work on, you need to specify the path to the +\assets directory.

+

Set the name (it can be any name as long as it is clear to the user), specify +the path, and click + ADD Project to add the project to the list of +available projects.

+
+

Note

+

Many interface elements have tooltips that appear when you hover the +cursor over them.

+
+

Starting from version dag4blend2.0, projects have additional parameters +available. These parameters can be found in the Projects panel:

+Projects +
+
    +
  • path: You can edit the path after adding a project – for example, if you +move resources to a different drive. You no longer need to delete and re-add +the project with the new path.

  • +
  • Shading mode: Shaders behave slightly different between projects. The +add-on is designed to adapt to two main shader groups: daNetGame-like and +War Thunder-like shaders.

  • +
  • Palettes: There are default global and local palettes.

  • +
  • Experimental Features: New tools that are functional but have some +limitations. Currently, these include a Composite +Editor and Texture Baker tools:

  • +
+Experimental Features +
+

The active project is set through the menu in the scene properties. You can also +change palettes here without needing to go into User Preferences each time:

+Scene +
+
+

Note

+

The add-on applies settings when these parameters are changed, but +only if there is an appropriate target. Therefore, to fix the Shading mode, +you need to re-select the project after creating at least one dagormat in the +scene. For Palettes, re-select the project after creating a painted +dagormat.

+

By default, the global and local palettes will be simple red and green fills, +and the shaders will be in War Thunder-like mode. To correct this, re-select +the project from the dropdown after the first asset import or creation.

+
+
+
+

Log and Text Editors

+

Text objects play an important role in this toolset, so it is recommended to add +a text field to your layout or add a new window with just a text field if you +are working with multiple monitors.

+Text field +
+

The import/export functions (and future ones) write execution information to a +text log field.

+
+

Note

+

The log does not clear itself, so remember to clear it periodically after +ensuring that there are no unchecked errors and warnings. To clear it, you can +simply delete the text object. The next time you need it, the toolset will +create a new one. This approach can be faster than selecting all the lines and +deleting them with Backspace/Delete.

+
+

To edit object properties, dagormats, or proxymats as text, the toolset creates +a special text object. The name of the object is provided in the tooltip.

+
+

See also

+

For more information, see +Proxymats.

+
+
+
+

Material Setup

+

For setup material for Dagor Engine, there is separate dagormat tab. It +contains several subtabs that can be collapsed when not needed:

+Dagormat +
+
+

Main

+

Here you can choose whether the material is two-sided, and if so, how it +behaves:

+Dagormat▸Main +
+
    +
  • single_sided: Enables backface culling for triangles with this material.

  • +
  • two_sided: Each triangle is rendered from both sides. The shader is +slightly heavier, but the geometry is lighter. Use this primarily for heavy +geometry, such as tree crowns.

  • +
  • real_two_sided: In the engine, a single-sided material is uses, but each +triangle with this material will be duplicated and flipped to be visible from +the other side. This shader is lighter, but it doubles the mesh weight. It is +better used on simpler meshes.

  • +
+

Below is a list of legacy properties: ambient, specular, diffuse, +emissive and power. Hover over them to see tooltips describing each +property.

+

This tab also allows you to select a shader from the available options or +manually enter a value. It is useful if new shaders have been added to the game +but the toolset has not been updated yet.

+Dagormat▸Shader +
+

The list of shaders and their possible parameters are taken from +dagorShaders.cfg, which by default is located at: +C:\Users\<username>\AppData\Roaming\Blender Foundation\Blender\<version number>\scripts\addons\dag4blend.

+
+
+

Textures

+

This section lists the textures in use. Indices (matching those stored in .dag +files) are available in tooltips. You can copy and paste paths from Asset +Viewer or Explorer; quotes +will be removed automatically.

+Dagormat▸Textures +
+
+
+

Optional

+

Visual editing of shader parameters. You can manually enter values or select +from a list, similar to how shader selection works.

+Dagormat▸Optional +
+
+
+

Tools

+

Here you can edit the active material in text format.

+Dagormat▸Tools +
+Dagormat▸Tools +
+

If there is no text editing field, one will be added to the left of the +viewport, otherwise, the text will be opened in the first available text field.

+

Search is available in two modes: only for the active material or for all +materials in the scene. Switch modes by clicking the text indicating the current +mode.

+

A correctly specified project is required for search to function properly – when +working on a daNetGame asset, specify daNetGame.

+
    +
  • Find missing…: Finds all textures and all proxymats (if they exist in +the project). The texture search only affects viewport display and does not +alter the material path.

  • +
  • Rebuild materials: Rebuilds the materials for the viewport.

  • +
  • Update texture paths: Finds non-existent paths and replaces them with +current ones. Should be used after texture search.

  • +
  • Clear texture paths: Removes directory information, leaving only texture +names.

  • +
+
+
+

Proxy

+

The add-on now supports proxymats.

+Dagormat▸Proxy +
+

Proxymat parameter information is taken from the .blk file, so all settings +for them are hidden. Instead, a new tab allows you to specify the path to the +proxymat directory. It can still be edited as text or temporarily unchecked as +is proxymat.

+

Changes can be reverted by reloading information from the file or saved to the +proxymat. Any regular material can also be converted to a proxymat by toggling +the checkbox and saving it to the desired directory.

+
+

Note

+

Proxymats in Blender use the file name, not a user-defined one. Upon import, +shaders are automatically renamed if the name differs.

+
+
+

See also

+

For more information, see +Proxymats.

+
+
+
+
+

Object Properties

+

Located in the N-panel under the Dagor tab, it shows parameters of the +active object and is hidden if there is no active object.

+Object Properties +
+
+

Properties

+

Visual editing allows you to add or remove parameters individually and change +their values.

+

The UI format is determined by the value string. If the wrong UI option +appears (e.g., prop:r=0 gives an integer toggle, while the variable should be +a float slider), enter the parameter name in the name field and the correct +format value (e.g., 0.0 instead of 0 for a float slider). Specify the type +in the name using :.

+
+
+

Presets

+

Once properties are configured, you can save them as a preset for quick +application to other objects.

+

To save the active object’s properties, enter a name for the preset and click +Save preset as:. To apply an existing preset, select it from the dropdown +and click Apply preset:.

+

Since presets are simple text files, you might want to edit them in a text +editor. The open presets folder button opens the directory containing all +presets in .txt format, where you can add, delete, or edit them. Changes are +applied immediately.

+
+
+

Tools

+

Editing in text format within Blender, similar to material editing, requires +opening the to the file specified in the tooltip by clicking Open as text.

+

Apply…: Applies changes from the text.

+

Write example: Writes an example to the text (without applying it, since +you will likely need to modify the example for your specific situation).

+

Transfer Attr: Copies the properties from the active object to all selected +objects, saving time on manual copying.

+

Starting from version 2.1.0, the text object props_temp opens +automatically if the internal text editor is open.

+
+

Note

+

Incorrect values in Object Properties are recorded in a new broken +properties field; separated by ;, allowing manual recovery. Similarly, +incorrect values when using Apply from text are recorded.

+
+
+
+
+

Export

+

Like any other import-export add-on, the .dag exporter is available through +FileExport. However, to save time during multiple re-exports in the +workflow, the exporter is also available in the N-panel. The functionality is +identical, so choose the option that is most convenient for you.

+
+

Batch Export

+

General parameters:

+
    +
  • vNormals: Saves custom normals if they have been added to the object. +Without custom normals, even with the checkbox active, the export will include +smoothing groups.

  • +
  • applyMods: Exports geometry with visible modifiers applied.

  • +
  • Optimize Materials: Keeps only the materials used on at least one polygon +for each object.

  • +
  • Path: The path where the file will be saved.

  • +
  • Cleanup Names: Ignore indices (.000+) during export.

  • +
+
+

Note

+

Use Cleanup… only for exporting composite parts for 3ds Max! It can +cause issues. In a .dag file for the game engine, there should not be multiple +objects with the same name.

+
+
    +
  • Name: Context-sensitive field, appearing only when exporting to a single +.dag file. This field is hidden in other export modes.

  • +
  • Collection: Also context-sensitive field. You do not need to select a +collection from the dropdown; you can simply drag the desired collection from +the Outliner.

  • +
  • Limit by: Allows you to choose the export mode.

  • +
+
+

Examples

+
    +
  1. Limit by: Visible

    +

    Export object: export all scene contents to Path\<Name>.dag.

    +

    Example input:

    +Limit by▸Visible +
    +

    Example output: C:\tmp\asset.dag – contains all scene objects with +custom normals.

    +
  2. +
  3. Limit by: Sel.Joined

    +

    Export object: export selected objects to Path\<Name>.dag.

    +

    Example input:

    +Limit by▸Sel.Joined +
    +

    Example output: C:\tmp\asset.dag – contains only selected scene +objects.

    +
  4. +
  5. Limit by: Sel.Separated

    +

    Export object: export selected objects to separate .dag files, where +the names of selected objects are used as file names.

    +

    Example input:

    +Limit by▸Sel.Separated +
    +

    Example output: C:\tmp\cube.lod00.dag, C:\tmp\cube.lod01.dag.

    +
  6. +
  7. Limit by: Col.Separated

    +

    Export object: export collections from the hierarchy starting from the +selected one, if there are no subcollections inside. The exportOrphans +checkbox allows exporting objects that lie next to subcollections.

    +

    Example input:

    +Limit by▸Col.Separated +
    +

    Example output: C:\tmp\cube.lod00.dag – contains visible geometry and +occluder inside, C:\tmp\cube.lod01.dag – contains visible geometry and +collider inside and C:\tmp\cube.lod02.dag. C:\tmp\cube_temp.dag – will +not be exported, because the exportOrphans checkbox is not active. If +you don’t specify the collection at all, then in this case the result will +be identical, because the check will start with SceneCollection, and it +contains only the cube collection.

    +
  8. +
  9. Limit by: Col.Joined

    +

    Export object: export all contents of the selected collection to a file +with the name of this collection. Created mainly for Asset +Viewer of assets +created from several .dag files.

    +

    Example input:

    +Limit by▸Col.Joined +
    +

    Example output: +C:\tmp\soviet_town_building_5_floors_a_joined.lod00.dag, containing all +null LODs related to this building. The collections have been linked +(transfer with Ctrl in Outliner), i.e. they are not copies, but the +same collections. The rest of the temporary LODs (Level of Detail) can be +prepared in the same way. It’s much faster than selecting objects and typing +the name manually.

    +
    +

    Note

    +

    Since they are the same collections and not copies, do not delete them with +Del, but remove them with RMBUnlink, so that you don’t overwrite +them.

    +
    +
  10. +
+
+
+
+
+

Collection Properties

+

Located in the N-panel, similar to Object Properties. It shows properties of the +active collection. Unlike Object Properties, these properties exist only within +Blender and are used for internal purposes.

+Collection Properties +
+
+

Override Name

+

Allows you to override the name with which the collection will be exported to +Col.Separated mode. By default, overriding is disabled.

+

When importing .dag files with names longer than 63 characters (the Blender +limit), the name will be recorded in this field to preserve the “overflow” +characters. You can also manually rename it – check the checkbox and enter the +new name:

+Override name +
+

In the given example, the contents of the collection will be exported to +C:\tmp\cube.lod00.dag instead of C:\tmp\Collection.dag. However, this is not +the most useful application.

+

A much more practical use is when you need to save multiple .dag files in +different subdirectories. Here, you can specify a subpath that will be appended +to the main export path. If there is no need to rename the collection, simply +end the subpath with *, which will be replaced by the collection name during +export:

+Override name +
+

In this example, the export path will be +C:\tmp\subfolder\yet_another_subfolder\cube.lod00.dag, which is convenient for +working with complex assets like buildings. For example, windows in +composit_parts\windows\*, doors in composit_parts\doors\*, and so on.

+

Additionally, you can completely override the path – start it with the drive +letter:

+Override name +
+

In this case, the Path field will be ignored for this collection, and the +file will be exported to D:\daNetGame\develop\assets\rendinst_1lod\.

+
+

Type

+

Used by the Composite +Editor. When importing, it +records the node type, and during export, it ensures a unique type (to avoid +double interpretation in the presence of asset namesakes, typically found among +composites and rendinsts). For manually created item intended for composite +export, set this manually.

+Type +
+

Since it is used for composites, DynModel is in the list but not actually +applied – it can’t be arranged through composites. Therefore, the composite +importer assumes all assets with .lod**.dag in their name are RendInsts, not +DynModels.

+
+
+
+

Geometry Nodes

+
+

Note

+

Currently, geometry nodes cannot be combined with custom normals, as applying +the modifier erases them. If you’re placing instances using geometry nodes, +don’t forget to add the Realize instances node; otherwise, the geometry will +be lost during export. Technically, before this node, they are similar to +“empty” without their own geometry.

+
+
+
+
+

Smoothing Groups

+

A bug was discovered in Blender’s function for calculating smoothing groups +for formats that use them. To solve this, a smoothing group editor has been +added. It’s available in Edit Mode when Face selection mode is active.

+

Upon import, objects retain smoothing groups from the original file. New +objects, however, do not have smoothing groups, so you must create them with the +Init button:

+Smoothing groups +
+

When smoothing exist, the interface works similarly to 3ds Max, but without +real-time display. Partial preview is available via Convert to Sharp Edges, +which shows only sharp edges from the smoothing groups.

+Smoothing groups +
+

Starting with version 2.1.0, the Live Update function recalculates hard +edges during smoothing group editing. This can slow down performance on heavy +geometry, so it is off by default.

+

From the same version, you can also select polygons by smoothing group. Click +the corresponding group button in the Select by SG subpanel.

+
+

Note

+

Selecting by smoothing group adds to the existing selection, rather than +replacing it. So, if you need to select only group 3, for example, clear the +selection first.

+
+
+

When to use?

+

If a model has areas where sharp edges do not fully divide the surface into +closed regions, the smoothing group calculation will be incorrect and needs +manual adjustment. You may also need to adjust smoothing groups after modifying +existing .dag file post-import if the groups were saved as an attribute.

+Smoothing groups +
+
+
+
+

Import

+

Similar to export, there are two methods for import – the standard method via +FileImport and the batch import via N-panel.

+
+

Import and Textures

+

A .dag file contains not only the texture name but also its path. However, +these paths are often become invalid when files are transferred. If the texture +path os invalid or only the texture name is provided, it will be replaced with a +UV checker texture. If a texture is used in multiple materials, updating the +path in one will update it across all materials.

+

Texture slots are still used as in +rendinst_simple, +regardless of the chosen shader. Nodes do not overlap but are arranged +meaningfully. Images from all slots are now added to the Shader Editor, so +with Node Wrangler enabled, they can be viewed by pressing +Shift+Ctrl+LMB.

+
+
+

File▸Import

+

Parameters:

+
    +
  • Optimize material slots: Removes unused slots and merges slots with the +same material.

  • +
  • Import LODs: Imports all LODs, not just the selected .dag file.

  • +
  • Import dps: Imports all damage_parts (_dp).

  • +
  • Import dmgs: Imports all damage versions.

  • +
  • Replace existing: If a collection with the asset name exists in the scene, +it will replace its contents with those from the .dag file instead of +creating a duplicate with a .001+ suffix. Useful for quickly reverting +multiple changes.

  • +
+File Import +
+

For bulk imports, it’s smart to use batch import.

+
+
+

Batch Import

+

This panel allows importing .dag files from a specified directory.

+Batch Import +
+

Options:

+
    +
  • Search in subfolders: Checks all subdirectories for files. Use cautiously, +as it can hang Blender if too many matches are found.

  • +
  • Optimize material slots: Same as in regular import.

  • +
  • Preserve Smoothing Groups: Saves smoothing groups as an attribute to +ensure they don’t change during export. Not recommended if you plan to modify +the geometry after import.

  • +
  • Preserve paths: Saves the full path to the .dag file (including the +file name) in Collection Property. Useful when importing file from multiple +directories and needing to export them back to original locations.

  • +
  • Masks: Specifies masks for import, using * instead of .* for multiple +characters, and . instead of \.. Separate masks with ;. Spaces are +ignored.

  • +
  • Excludes: Same syntax as masks, but for excluding files from import.

  • +
+
+

Example

+

Masks: “asset_a.lod0[0,2]*; asset_b_dp*”; Excludes=“*_dmg*” imports +asset_a.lod00.dag, asset_a.lod02.dag, and all LODs of all asset_b_dp, +except their _dmg versions.

+
    +
  • Path: The directory to search.

  • +
+
+

Note

+

Blender will be unresponsive until the import is complete. To monitor the +import process, open the console (WindowToggle system console).

+
+
+
+

Additional Features

+

Often, you may need to import a single asset that is already open in Asset +Viewer or Explorer. +Instead of searching for it through FileImport, you can copy the path +from Asset Viewer or +Explorer (RMBCopy as path) and paste it into Path field of the batch +import panel. This action will automatically transfer the file name to +Masks, and clicking IMPORT will load only the desired asset.

+

If you only have the asset’s name, you can enter it in Masks and then use +the Apply as search path button to set the entire project directory with +subdirectories as the search path.

+

If the path is unknown, the import will be slower by a few seconds (due to +search file), but this is often faster than searching the full path manually.

+Batch Import Additional Features +
+
+
+
+
+

Tools

+

The panel is continuously being improved. Tools are grouped into blocks that can +be collapsed when not in use to avoid cluttering the interface.

+Tools +
    +
  • Optimize material slots: Merges identical material slots and removes +unused ones.

  • +
  • Merge Duplicates: Merges identical materials with different indices (e.g., +Material and Material.001). These duplicate materials often arise when +copying objects using Ctrl+C / Ctrl+V, as this operation saves the +selection to an external .blend file and then appends it to the active scene +along with all its materials.

  • +
  • Find missing textures: Searches the textures without valid paths in the +selected project’s directory.

  • +
  • Find missing proxymats: Similar functionality for proxymats.

  • +
  • Save textures: Collects all textures with valid paths from selected +objects and saves them in the /textures/ subdirectory of the export +directory.

  • +
  • Preserve Sharp Edges: Marks sharp edges based on Autosmooth Angle, and +sets the angle to 180° to ensure consistency between the model in the +scene and in the .dag file. This function is not mandatory before exporting, +as it will automatically apply to the exported geometry (keeping the original +scene geometry unchanged).

  • +
  • Apply Modifiers: Applies modifiers to the geometry. Not mandatory before +export as the exporter can preserve modifiers in the original scene.

  • +
  • Clear normals: Removes custom normals from selected objects.

  • +
  • sort collections: Recursively groups scene collections by the longest +matching name prefix. You can see the example on the screenshot for the +“Col.Joined” export.

  • +
  • pack orphans: Searches for objects not at the hierarchy’s bottom and +creates individual collections for them.

  • +
  • Setup Destruction: Assigns a list of typical object properties for +destruction to all selected objects:

  • +
+
+
  animated_node:b=yes
+  physObj:b=yes
+  collidable:b=no
+  massType:t=none
+
+
+

Creates bounding boxes (BBoxes) objects with gi_black material, sets them as +children, and assigns collider parameters:

+
  materialName:t=[value from the material field]
+  density:r=[value from the density field]
+  massType:t=box
+  collType:t=box
+
+
+

The BBoxes may still need to be adjusted and scaled to better fit the +silhouette. In some cases, they may also need to be duplicated. However, this +process still saves time in the overall setup.

+
+
+

Experimental Features

+
+

Bake

+

Allows baking textures from complex shaders to +rendinst_simple. +Commonly used for final LODs or porting assets to mobile projects.

+
+

See also

+

For more information, see +Texture Baker tool.

+
+Bake +
+
+
+

Composite Editor

+
+

See also

+

For more information, see +Composite Editor.

+
+Composites Editor +
+
+

General Limitations of the Add-on Tools in Blender

+
    +
  • Limitation on the number of characters in the name – names longer than 63 +characters will be truncated, and when importing objects with the same name, +an index .001 is appended, reducing the maximum name length by 4 more +characters. Starting from version 1.2.6, overly long names are saved in +Collection Property.

  • +
  • Animations are not supported yet.

  • +
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/blender/dag4blend/index.html b/dagor-tools/addons/blender/dag4blend/index.html new file mode 100644 index 000000000..83032c057 --- /dev/null +++ b/dagor-tools/addons/blender/dag4blend/index.html @@ -0,0 +1,205 @@ + + + + + + + dag4blend — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

dag4blend

+

The dag4blend add-on integrates Blender with Dagor Engine for seamless asset +creation, export, and management directly within the Blender interface.

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/blender/index.html b/dagor-tools/addons/blender/index.html new file mode 100644 index 000000000..60c5adcc8 --- /dev/null +++ b/dagor-tools/addons/blender/index.html @@ -0,0 +1,294 @@ + + + + + + + Add-ons for Blender — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/addons/index.html b/dagor-tools/addons/index.html new file mode 100644 index 000000000..f0e24e535 --- /dev/null +++ b/dagor-tools/addons/index.html @@ -0,0 +1,193 @@ + + + + + + + Add-ons for Blender and 3ds Max — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Add-ons for Blender and 3ds Max

+

The add-ons that integrate Blender and 3ds Max with Dagor Engine.

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/asset-viewer/asset-viewer-comp-editor/asset_viewer_comp_editor.html b/dagor-tools/asset-viewer/asset-viewer-comp-editor/asset_viewer_comp_editor.html new file mode 100644 index 000000000..6327194ce --- /dev/null +++ b/dagor-tools/asset-viewer/asset-viewer-comp-editor/asset_viewer_comp_editor.html @@ -0,0 +1,362 @@ + + + + + + + Overview — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Overview

+

Before proceeding, it’s strongly recommend familiarizing yourself with the main +article on the structure of +composites. The editor is +currently under development, so you may encounter bugs, and this documentation +could quickly become outdated.

+
+
+

Where to Find It

+

You can now edit composites directly from the Asset Viewer. To enable the +Composite Editor, navigate to the View menu:

+

Where to Find It

+

If you prefer the editor to open automatically when a composite is selected in +the Asset Tree and close when any other type of object is selected, you can +enable this option in the Settings:

+

Where to Find It

+
+

Note

+

The Composite Editor is still under development, and it may significantly +impact performance when working with large composites that have many nested +elements. This is especially relevant, for example, for houses with complex +indoor structures in daNetGame-based games. For this reason, the auto-open +option is disabled by default. Use it at your own risk.

+
+
+
+

Creating a New Composite

+
    +
  1. In the Asset Tree, select the directory where you want to place the +composite.

  2. +
  3. Right-click and select Create new composite asset from the context menu.

  4. +
+

Creating a New Composite

+
    +
  1. In the pop-up window, enter the desired name, making sure to follow the +naming conventions (refer to the main article). If an asset with this name +already exists, a warning will be displayed when you attempt to create it.

  2. +
+

Creating a New Composite

+
+
+

Composite Editor Interface

+

The interface is divided into two main sections: Outliner and Properties.

+

Composite Editor Interface

+
+

Composite Outliner

+

The Composite Outliner functions similarly to the Asset Tree but is +specific to composites. The composite itself serves as the “root” of the +structure.

+

When you create a new composite, it will initially contain only the root block +with its name. To add a new node, click on this sole element and select Add +Node from the context menu.

+

A newly created node does not contain any parameters, making it equivalent to an +empty node{}.

+

Through the context menu, you can define the type of the node:

+
    +
  • “Change asset” allows you to select an asset for rendering, analogous to +name:t = ....

  • +
  • “Add entity” turns the node into a random entity, analogous to ent{}.

  • +
  • “Add node” allows you to add a child node.

  • +
  • “Delete node” does exactly what it says.

  • +
+
+

Note

+
    +
  • Adding an asset hides the option to add an entity, and vice versa – a node +cannot simultaneously contain both name:t and ent{}.

  • +
  • You can also delete a node using the Delete key, but in both cases, +confirmation is required.

  • +
  • Deleting a node will also remove all its child nodes since they are +technically nested within it (e.g., node{node{}}). Keep this in mind.

  • +
+
+

If a node already contains an asset, you can open it by double-clicking. This is +useful when you need to edit a subcomposite. However, since there is currently +no history of recently opened assets, returning to the “main” composite will +only be possible by finding it again in the Asset Tree. Therefore, the +editor will ask for confirmation before switching to another asset.

+
+

Identifying Random Nodes

+

A random node is displayed with the same icon as an empty node, but it will be +named random instead of node.

+

All possible entities are listed one level lower in the hierarchy.

+

Since a random node can have child nodes, this can cause significant confusion – +these children are also displayed one level lower. To address this, all +ent{} entries are shown with an additional icon. The first icon represents an +empty node, while the second indicates the entity type.

+

Identifying Random Nodes

+

In the .composit.blk file, what is shown in the screenshot might look +something like this:

+
node{
+  ent{name:t="table_a:rendinst"}
+  ent{name:t="table_b:rendinst"}
+  node{name:t="cup_a:rendinst"}
+  ent{name:t=""}
+  node{name:t=""}
+}
+
+
+

To improve readability, I recommend adding all ent{} entries first, followed +by the child nodes. However, it will work either way.

+
+
+
+

Editor Properties

+

Do not confuse this with the Properties of the entire composite asset.

+

Editor Properties

+

This section contains the properties of the selected node, along with options to +save or revert changes.

+
+

Entities

+

This panel lists all ent{} nodes. Here, you can set the weight for existing +entities, change the asset (via a large button displaying the asset’s name, or +“–” if no asset is selected), and add a new entity to the end of the list using +the “+” button. The context menu (accessed by the “…” button) allows you to +add an entity after any existing one (instead of at the end of the list) or +delete the selected entity.

+
+
+

Children

+

A similar panel exists for child nodes, although weight is not assigned here +for obvious reasons. This panel may be removed in the future, as it impacts the +performance of heavy composites (some buildings have thousands of child +nodes), and the same functionality is available through the Outliner.

+
+
+

Node Parameters

+

This section contains the properties of the selected node. To move the node, you +need to check the Use transformation matrix box, which corresponds to the +tm:m=... block. If this box is checked, you can edit the matrix in a +human-readable format:

+

Editor Properties

+
+
+

Add Parameters

+

Here, you can set additional parameters for the node. Since the transformation +matrix takes precedence over random offsets, attempting to add both will trigger +a warning, and the parameter fields will be locked for editing.

+

Editor Properties

+

To apply random transforms, you need to disable the matrix.

+
+
+

Composit

+

The Composit tab offers only two options – cancel or save changes. +If you try to switch from the composite to another asset, the editor will also +ask how to handle the current changes.

+
+
+
+
+

Visual Editing

+

Now we’ve reached the interesting part. In addition to text-based editing, you +can make adjustments directly in the viewport. You can left-click on any object, +and the corresponding node will be selected in both the 3D view and the +Outliner. Pressing Z will center the camera on the selected node and zoom in +on it. Unfortunately, selecting multiple nodes simultaneously is not yet +supported. However, you can edit matrices using the gizmo.

+

When the Composite Editor is open, new icons appear in the toolbar: +Select, Move, Rotate, and Scale. Select is always active, but +for the other tools to have an effect, the transformation matrix must be enabled +for the selected node using the checkbox mentioned earlier. Random offsets +cannot be applied via the gizmo. These tools can be activated using the standard +hotkeys — Q, W, E, and R, respectively.

+

Visual Editing

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/asset-viewer/asset-viewer-comp-editor/index.html b/dagor-tools/asset-viewer/asset-viewer-comp-editor/index.html new file mode 100644 index 000000000..174f74db9 --- /dev/null +++ b/dagor-tools/asset-viewer/asset-viewer-comp-editor/index.html @@ -0,0 +1,198 @@ + + + + + + + Asset Viewer Composite Editor — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dagor-tools/asset-viewer/asset-viewer/asset_viewer.html b/dagor-tools/asset-viewer/asset-viewer/asset_viewer.html new file mode 100644 index 000000000..ed35be8d3 --- /dev/null +++ b/dagor-tools/asset-viewer/asset-viewer/asset_viewer.html @@ -0,0 +1,631 @@ + + + + + + + Overview — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Overview

+

The Asset Viewer is one of the two main tools for working with assets, and in +some cases, for creating them. It offers a vast array of parameters and +capabilities. In this article, we’ll cover the basic principles for new users.

+
+
+

Basic Workflow in Asset Viewer

+ +
+

Working with Assets

+

The interface is organized into three main panels:

+
    +
  1. Control Panel

    +

    Control Panel

    +
  2. +
  3. Properties Panel

    +

    Properties Panel

    +
  4. +
  5. Viewport Settings Panel

    +

    Viewport Settings Panel

    +
  6. +
+
+
+

Control Panel

+

The most frequently used features in this panel are the Sun and the +Console buttons.

+

Control Panel

+
    +
  • Console: This is your go-to tool. If something isn’t displaying correctly, +don’t just report “it doesn’t work” – check the console first. You’ll be +surprised how often it flags issues like duplicates and LOD errors.

  • +
  • Sun: A set of environment management settings (including service +textures). Let’s dive deeper into its parameters:

    +
      +
    • Settings – Sun settings.

      +

      Sun Settings

      +
    • +
    • Debug Settings – Debug modes.

      +
        +
      • You can choose different model display modes to check for issues.

      • +
      • Most commonly used are per-channel modes (diffuse, normal, smoothness, and +metallness) and albedo_ao, to check black-and-white range conformity.

      • +
      +

      Debug Settings

      +
    • +
    • Environment Textures:

      +
        +
      • envi snapshot – Assign a texture that applies lighting properties from +a specific location (first, create this texture in that location).

      • +
      • background texture – Add a custom background in .dds format (works +when an environment texture is connected).

      • +
      • paint details texture: – Required for daNetGame-based games, which +supports multiple paint textures. To see the correct color of an object, +connect its paint texture here. War Thunder only uses one texture, which +loads automatically in Asset Viewer.

      • +
      • background texture stretch – Background texture tiling.

      • +
      • reflection texture – Reflection texture, you can connect a cubemap, +but it only works with an environment texture).

      • +
      • Level BLK (for microdetails texture): Necessary for War Thunder, +where microdetails vary by map. If your assets appear black or with +incorrect microdetails in the daEditor, connect the level.blk file for +the appropriate level.blk files are located at +\<project_name>\develop\gameBase\levels. In daNetGame-based games, +microdetails load automatically, so no manual setup is needed.

      • +
      +

      Environment Textures

      +
    • +
    • Sky/Weather Settings – Lighting and time of day settings.

      +
        +
      • Limited in scope and rarely used, but be sure to set a weather preset +during the initial setup (it’s off by default).

      • +
      +

      Sky/Weather Settings

      +
    • +
    • Ambient Wind Settings.

      +
        +
      • Direction – Wind direction

      • +
      • Strength (Beaufort) – Wind speed in Beaufort.

      • +
      • Noise strength (Multiplier of strength) – Multiplier of wind gust strength.

      • +
      • Noise speed (Beaufort) – Wind gust speed.

      • +
      • Noise scale (Meters) – Multiplier of wind gust size

      • +
      • Noise perpendicular – direction of wind gust movement

      • +
      +

      Ambient Wind Settings

      +
      +

      Note

      +

      Wind effects are only applied to assets with tree in their name. Although +not all assets have advanced wind, all vegetation assets created after 2022 +include wind effects.

      +
      +
    • +
    • Several Display Settings.

      +
        +
      • Usually, the settings shown in the image below are enabled.

      • +
      • Previously, disabling all post-effects and enabling no postfx was the +only way to view a more accurate polygon count:

        +
          +
        • In War Thunder, this provided a clear display with honest polygon +counts.

        • +
        • In daNetGame-based games, the image was unreadable, but the polygon +count was accurate.

        • +
        +
      • +
      • Now, this is unnecessary, as the asset statistics are sufficient without +these workarounds.

      • +
      • Shadow Quality – Adjusts shadow quality (rarely needed).

      • +
      • Render Envi Entity – Allows you to load a background asset into +Asset Viewer and display everything else alongside it. Useful, e.g. for +checking how your tank looks in a hangar or comparing the size of two +assets.

      • +
      +

      Display Settings

      +
    • +
    +

    The other parameters are typically not needed.

    +
  • +
+
+
+

Properties Panel

+

Let’s look at its key parameters:

+
    +
  • Common Parameters:

    +
      +
    • Object type (Render Instance, prefab, texture, decal, etc.).

    • +
    • Object name.

    • +
    +

    Common Parameters

    +
  • +
  • Object Specific Parameters:

    +
      +
    • Rotate object horizontally.

    • +
    • Rotate object vertically.

    • +
    • PN-triangulation – Geometry tessellation with rendinst_clipmap +material. The closer the camera, the more detailed the object becomes. +However, since this doesn’t affect rounding, it’s not very useful.

    • +
    • LOD distances (you can switch and view LODs).

      +
        +
      • You can also switch LODs with hotkeys – numbers (starting from zero) force +a specific LOD. This works on the numpad as well. Backspace and NumDel +return to automatic LOD selection. A number that’s too large (3+ in the +example) will select the last existing LOD.

      • +
      • In automatic mode, you can move away from the object (tracking distance by +camera position) and observe the LOD transition quality. By displaying the +distance from the camera to the center and manually switching LODs, you +can fine-tune the distances.

      • +
      +
    • +
    • generate per-instance seed – Properties for composites.

    • +
    +

    Object Specific Parameters

    +
  • +
  • Set of Used Textures and LODs:

    +
      +
    • Here, you can track all the textures used by the asset as a whole and by +each LOD.

    • +
    • Always consider that the more textures an asset uses, the heavier it is to +process. You should ask yourself, “Do I really need this many textures?”

    • +
    • Additionally, the number of textures should typically decrease with LODs – +polygons with assigned materials are removed.

    • +
    +

    Specific Parameters 2

    +
  • +
+
+

Note

+
    +
  • The Properties panel can slightly slow down the loading of assets, +especially with heavy render instances containing many submaterials. If you +only need to check that each element of a large pack loads without errors +(e.g., missing LODs), you might want to temporarily disable Properties for +faster asset switching. The hotkey to toggle the panel is P. You can also +toggle it via ViewProperties in the menu.

  • +
+
+
+
+

Viewport Settings Panel

+

By right-clicking on the highlighted yellow rectangle, you can access the +following options:

+

Viewport Settings

+

From here, you can explore shortcuts for projection views, model grids, ground +grids, and how to enable statistics (StatsShow Stats). You can also +toggle the display of statistics with or without a black background +(StatsOpaque Stats).

+

Stats Display

+

Polygon count is shown by default after all post-effects are applied; the camera +position is displayed as [X, Y, Z] coordinates relative to the scene’s center. +While these metrics might not be crucial for asset creators, you can customize +them to better suit your needs:

+
+

Customizing Scene Statistics Display

+

You can access the statistics settings in two ways:

+
    +
  • Right-click on the viewport window and select StatsStats settings.

    +

    Stats settings

    +
  • +
  • From the Settings menu, choose Stats Settings.

    +

    Stats settings

    +
  • +
+

In this menu, you can select which information is important to you.

+

Stats settings

+

The settings are organized into a two-tier hierarchy, grouped into categories. +Disabling a top-level category will disable all its nested options. At the very +top, you’ll find the Show stats option, which is the same as the one in the +previously mentioned context menu.

+

Here, you can select the information that matters most to you:

+
    +
  • Stat 3d – Is not particularly useful for asset work; it’s more relevant +for rendering engineers. You might want to keep cpu frame enabled for +performance tracking.

  • +
  • Camera – Is more useful. Knowing the camera position can be handy when +working on composites, but more often, you’ll need to track the distance from +the camera to the center of the scene. This is where the pivot of the RI +(Rendering Instance) is located, simplifying the process of adjusting LOD +(Level of Detail) distances – you won’t need to manually calculate the vector +from zero to the camera’s coordinates. camera FOV helps ensure that the +field of view matches the in-game setting and that you’re adjusting LOD +distances with the correct camera setup.

  • +
  • Asset Stats – Provides the most useful information for asset creators, +including:

    +
      +
    • Number of visible triangles in the asset.

    • +
    • Statistics on physics collisions: the number of meshes, triangles (referred +to as faces, but assets are always triangulated), boxes, convex shapes, and +vertices.

    • +
    • Similar information for trace collisions. Since there’s no distinction +between these in War Thunder, you can disable one of the options – they’ll +show identical values anyway.

    • +
    • Number of materials in the rendered geometry.

    • +
    • Number of textures used.

    • +
    • The index of the currently displayed LOD.

    • +
    +
  • +
+
+

Note

+

Asset statistics are still under development and have known issues:

+
    +
  • Tested on render instances; there may be bugs with dynamic models – take the +information with a grain of caution.

  • +
  • If an asset lacks a specific parameter, the statistics will show the last +known value, such as the number of materials and textures on collisions that +are actually zero.

  • +
  • Composites in Asset Viewer are displayed without collisions, so statistics +will show zeros for both physics and trace collisions.

  • +
  • In War Thunder, there’s no distinction between phys and trace collisions, +but the statistics are output as they are in daNetGame-based games – twice.

  • +
+
+
+
+

Customizing the Grid

+

In addition to statistics, you can also customize the grid parameters.

+

Customizing the Grid

+

Customizing the Grid

+

Beyond toggling grid visibility, you can configure snapping parameters (used in +the composition editor), height offset, cell size and count, as well as the +colors and thickness of the grid lines.

+
+
+

Viewport Rotation Gizmo

+

Unlike the grid and statistics, the viewport rotation gizmo only has visibility +settings.

+

Viewport Rotation Gizmo

+

When enabled, it appears in the top-right corner of the viewport(s). Beyond +simply displaying the axes, it can also be used for quick navigation:

+
    +
  • You can use it as a virtual trackball to rotate the viewport – just hover over +the gizmo and start rotating by holding down the left mouse button.

  • +
  • Clicking on an axis letter with the left mouse button automatically rotates +the camera along that axis. Unlike hotkeys for projections, this rotation +doesn’t switch to an orthographic view; it retains the perspective view.

    +

    Viewport Rotation Gizmo

    +
  • +
+
+
+
+

Building Assets

+

To learn more about what building entails and why it’s necessary, refer to the +dedicated article about Resource +Building. In short, the game +doesn’t directly handle files like DAGs, textures, etc.; it operates on binary +files where these resources are compiled. To check your work in-game, you need +to compile these resources into the binary files.

+
+

General Considerations

+

It’s important to remember that when you export assets into .dag files, they +are processed by .folder.blk and converted into various types of in-game +objects.

+

For example, if you export a house with four LODs and an overlay texture, it +might look like this:

+
    +
  • LOD00: Geometry + Materials; Apex settings.

  • +
  • LOD01: Geometry + Materials.

  • +
  • LOD02: Geometry + Materials; Collision.

  • +
  • LOD03: Geometry + Materials.

  • +
  • Overlay Texture.

  • +
+

In the Asset Viewer and the game itself, these components will be transformed +into the following object types:

+
    +
  • Render Instance: All LODs with geometry and materials.

  • +
  • _Apex Object: A sliced asset processed by Apex.

  • +
  • _Collision Object: Collision data from LOD02.

  • +
  • Texture: The overlay texture.

  • +
+

When building your changes to view them in the game, it’s crucial to keep track +of what exactly you have modified. If your changes only affect a specific type +of object (e.g., the render instance), it’s more efficient to build only that +object type.

+

However, if your changes impact multiple object types, it’s usually easier to +build the entire directory containing the modified asset. This approach prevents +the need to sequentially build each object type one by one.

+
+
+

Selecting and Exporting Assets

+
    +
  • You need to choose either an individual asset or the directory containing the +asset you wish to export. Your choice depends on what exactly you want to +export.

  • +
+

For example:

+
    +
  • If only the collision data of a specific asset has been modified, select the +“collision object” type.

  • +
  • If only the asset itself (geometry, materials) has been modified, select the +“render instance” type.

  • +
  • If both the asset (geometry, materials) and its collision data have been +modified, you have two options:

    +
      +
    • Select the render instance first, followed by its collision object +(as separate asset types within Asset Viewer).

    • +
    • Or, select the entire folder containing the asset and its collision data, +which allows you to handle everything at once.

    • +
    +
  • +
+

Selecting and Exporting Assets

+
    +
  • After selecting the asset or directory, right-click on it.

  • +
+

For an individual asset, you’ll be given a single action option – exporting the +package for that specific asset (e.g., terrain_decorations.grp).

+

For a subdirectory, you’ll have several export options:

+
    +
  • Export resources (including subdirectories) – this covers render +instances, destructibles, collisions, etc., excluding textures.

  • +
  • Export textures (including subdirectories).

  • +
  • Export everything (including subdirectories).

  • +
+

If you haven’t changed textures, for instance, select only the gameres +option. Conversely, if you’ve modified everything, choose to export everything.

+

Selecting and Exporting Assets

+

You can monitor the build log in the console. When building resources using +Asset Viewer, the build speed is significantly slower compared to using +daBuild.

+
+

Note

+

Be mindful of what you select before building.

+

Exporting an asset won’t automatically include its textures located nearby. +Similarly, exporting a directory containing an asset won’t automatically include +textures located in a different directory, even if the asset references them.

+
+
+
+

Nuances

+
    +
  1. Package Name Conflicts

    +
      +
    • War Thunder: Package name conflicts are not a significant issue.

    • +
    • daNetGame-based: These conflicts are common. Package names often repeat +across different packages. For example, the directory indoor_stuff (and +its corresponding package) exists in both the manmade_common, city_1, +and city_2 packages. When you select the indoor_stuff directory and +choose export all with subdirectories (or select an asset and choose +export pack indoor_stuff.grp), all indoor_stuff packages across these +packages will be built.

    • +
    • This will result in the build of not just the single modified item, but +potentially hundreds of objects. If a full resource rebuild was done +recently, unchanged packages will be skipped. However, if a full rebuild +hasn’t been done in a while, this process could take considerable time.

    • +
    +
  2. +
  3. HQ Texture Pack Build

    +
      +
    • Initially, Asset Viewer couldn’t handle the assembly of HQ texture packs. +Now it can. When triggering a build from the texture’s context menu, ensure +you select the option that includes HQ textures. Note that in the context +menu for directories, there’s no separation – both base and HQ texture +packs will always be assembled.

      +

      Selecting and Exporting Assets

      +
    • +
    +
  4. +
  5. Logging Errors in the Console

    +
      +
    • By default, all asset-related errors (loggers) will be output to the +console. If you need to control these locally, you can add the following +block to your application.blk:

      +
      logerr_to_con{
      +  assetViewer{
      +    include_re:t=... // only loggers matching this regex will be shown
      +    exclude_re:t=... // loggers matching this regex will be excluded
      +  }
      +}
      +
      +
      +

      Example

      +
      logerr_to_con{
      +  assetViewer{
      +    exclude_re:t="(warning: node <occluder_box> from)|(Shader 'land_mesh_combined' not found in bin dump)|(has mesh with 0 faces)|(degenerate tri)|(degenerate mesh node)" // loggers matching this regex will be excluded
      +  }
      +}
      +
      +
      +
    • +
    +
  6. +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/asset-viewer/asset-viewer/index.html b/dagor-tools/asset-viewer/asset-viewer/index.html new file mode 100644 index 000000000..c801612e9 --- /dev/null +++ b/dagor-tools/asset-viewer/asset-viewer/index.html @@ -0,0 +1,196 @@ + + + + + + + Asset Viewer — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dagor-tools/asset-viewer/collision-generation/collision_generation_for_assets.html b/dagor-tools/asset-viewer/collision-generation/collision_generation_for_assets.html new file mode 100644 index 000000000..346f5d2d1 --- /dev/null +++ b/dagor-tools/asset-viewer/collision-generation/collision_generation_for_assets.html @@ -0,0 +1,417 @@ + + + + + + + Collision Generation for Assets in Asset Viewer — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Collision Generation for Assets in Asset Viewer

+
+

Overview

+

The Asset Viewer now supports the ability +to generate new collision nodes from a combination of original nodes. These +nodes can be built for assets through the daBuild process.

+

A new node can be of one of the following six types:

+
    +
  • mesh, box, sphere – merges the selected nodes into the corresponding +primitive.

  • +
  • k-dop (discrete oriented polytope) – a bounding volume for a specific +geometry. The generation algorithm “wraps” the original mesh using predefined +directions. After export, the collision type becomes convex.

    +

    The k in k-dop represents the number of initial directions used for +generation.

    +
  • +
  • convex computer – creates a convex shape around the selected nodes.

  • +
  • convex v-hacd – decomposes the mesh of the selected nodes, breaking the +geometry into multiple convex nodes. For more details on the algorithm, refer +to the original repository.

  • +
+
+
+

Parameters in Asset Viewer

+

In the properties panel for collision assets, a tree of nodes available for +merging is now displayed.

+
+

Collision Nodes Panel

+../../../_images/collision_generation_for_assets_01.jpg +

This panel shows the collision node tree. The node prefixes indicate their +flags. If a node is merged from multiple nodes, its original child nodes will be +displayed. Merged nodes can be edited or deleted.

+
+
+

Create New Node Panel

+../../../_images/collision_generation_for_assets_02.jpg +

When creating a new node or editing an existing one, you can:

+
    +
  • Select nodes to include in the new node during generation.

  • +
  • Assign a unique name to the node, even if it replaces child nodes during the +process.

  • +
  • Set the flag for whether the selected nodes will be replaced. If nodes are +replaced, they will not be exported.

  • +
  • Set the Phys Collidable and Traceable flags.

  • +
  • Choose a collision type for the new node from the six types described earlier.

  • +
+
+
+

Viewport Display Option

+

For mesh, box, and sphere types, the result will be displayed in the +viewport and can be saved. For k-dop, convex computer, and convex v-hacd +types, the next step involves generating based on the selected parameters.

+../../../_images/collision_generation_for_assets_03.jpg +

Clicking on a node in the viewport will highlight it in the list of selected +nodes. Holding Ctrl allows for multiple node selection.

+
+
+

k-dop Node Generation Parameters

+
+

Selected Preset

+../../../_images/collision_generation_for_assets_04.jpg +../../../_images/collision_generation_for_assets_05.jpg +

Select a preset for the chosen nodes. The following presets are available for +k-dop generation:

+
    +
  • 6-dop – regular box.

  • +
  • 14-dop – basic 6 directions + 8 corner directions.

  • +
  • 18-dop – basic 6 directions + 12 face directions.

  • +
  • 26-dop – combines face and corner directions from 14-dop and 18-dop.

  • +
  • k-dop with fixed X-axis – generates k-dop with a fixed number of segments +around the X-axis.

  • +
  • k-dop with fixed Y-axis – generates k-dop with a fixed number of segments +around the Y-axis.

  • +
  • k-dop with fixed Z-axis – generates k-dop with a fixed number of segments +around the Z-axis.

  • +
  • Custom k-dop – generates k-dop with a custom number of segments around the +X and Y axes.

  • +
+

The number of segments can vary from 4 to 20 with an increment of 1.

+
+
+

k-dop Rotations

+../../../_images/collision_generation_for_assets_06.jpg +

Rotate the k-dop around 3 axes to better match the original mesh.

+
+
+

k-dop Cut Off Planes

+../../../_images/collision_generation_for_assets_07.jpg +

For optimization, small-area planes can be trimmed relative to the plane with +the largest area. The maximum trim value is 40%.

+
+
+

Show k-dop

+../../../_images/collision_generation_for_assets_08.jpg +

The k-dop can be displayed in several ways:

+
    +
  • Drawing planes.

  • +
  • Drawing triangles.

  • +
  • Drawing directions from the center, with a distance to the corresponding +plane.

  • +
+

Example: Generating an 18-dop.

+../../../_images/collision_generation_for_assets_09.jpg +
+
+
+
+

Convex Computer Node Generation Parameters

+../../../_images/collision_generation_for_assets_10.jpg +

A convex will be generated around the selected nodes. Using the Shrink +parameter, the shell can be “shrunk” inward toward the selected mesh.

+

Example: Generating a convex computer.

+../../../_images/collision_generation_for_assets_11.jpg +
+
+
+

Convex v-hacd Node Generation Parameters

+../../../_images/collision_generation_for_assets_12.jpg +

This generation method is governed by four parameters:

+
    +
  • Convex depth – recursion depth of the algorithm. Lower values lead to +earlier exits from the algorithm, resulting in rougher convex shapes.

  • +
  • Max convex hulls – the number of convex nodes generated by the algorithm. If +the value is 1, it is more efficient to use convex computer to reduce asset +export time.

  • +
  • Max verts – the maximum number of vertices for a single convex node.

  • +
  • Resolution – voxelization resolution. Higher values produce more accurate +results, but also increase export time.

  • +
+
+

Note

+

Some parameter combinations may result in invalid geometry. In such cases, the +result cannot be saved, and it is recommended to adjust the parameters, for +example, by incrementing or decrementing the Resolution by one step.

+
+

Example: Generating a convex v-hacd.

+../../../_images/collision_generation_for_assets_13.jpg +
+

To save all changes, press Ctrl+S. If this is the first time saving changes +for the asset, a .collision.blk file will be created alongside the .dag +file. The exported result will only be visible after restarting the Asset +Viewer. When editing, the exported result is displayed immediately after +saving.

+

If a node previously exported is selected, it will revert to its original +geometry for editing. If no changes are made, switching to a different asset +will restore the .collision.blk file.

+
+

Note

+

If a crash occurs while working with collisions, data loss may occur.

+
+
+
+
+

Parameters in .blk

+

Generation parameters are stored in the .collision.blk file within the +nodes{} block. This block lists all nodes and their generation parameters.

+
+

Common Parameters

+
    +
  • collision:t – type of collision for node generation. Possible values:

    +
      +
    • "mesh"

    • +
    • "box"

    • +
    • "sphere"

    • +
    • "kdop"

    • +
    • "convexComputer"

    • +
    • "convexVhacd"

    • +
    +
  • +
  • replaceNodes:b – indicates whether the original nodes are replaced during +generation.

  • +
  • isPhysCollidable:b, isTraceable:b – flags set for the node.

  • +
  • refNodes{} – block with the names of the nodes used as a reference for +generation.

  • +
+
+
+

k-dop Parameters

+
    +
  • kdopPreset:i – preset index:

    +
      +
    • 0 – 6-dop.

    • +
    • 1 – 14-dop.

    • +
    • 2 – 18-dop.

    • +
    • 3 – 26-dop.

    • +
    • 4 – k-dop with fixed X-axis.

    • +
    • 5 – k-dop with fixed Y-axis.

    • +
    • 6 – k-dop with fixed Z-axis.

    • +
    • 7 – Custom k-dop.

    • +
    +
  • +
  • kdopSegmentsX:i, kdopSegmentsY:i – number of segments.

  • +
  • kdopRotX:i, kdopRotY:i, kdopRotZ:i – rotation around axes in degrees.

  • +
  • cutOffThreshold:r – trim percentage of the maximum plane area.

  • +
+
+
+

Convex Computer Parameters

+
    +
  • shrink:r – amount to shrink the shell inward toward the selected mesh.

  • +
+
+
+

Convex v-hacd Parameters

+
    +
  • convexDepth:i – recursion depth of the algorithm.

  • +
  • maxConvexHulls:i – number of convex nodes generated.

  • +
  • maxConvexVerts:i – maximum number of vertices for a single convex node.

  • +
  • convexResolution:i – voxelization resolution used by the algorithm.

  • +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/asset-viewer/collision-generation/index.html b/dagor-tools/asset-viewer/collision-generation/index.html new file mode 100644 index 000000000..d034b2019 --- /dev/null +++ b/dagor-tools/asset-viewer/collision-generation/index.html @@ -0,0 +1,191 @@ + + + + + + + Collision Generation for Assets — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Collision Generation for Assets

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/asset-viewer/index.html b/dagor-tools/asset-viewer/index.html new file mode 100644 index 000000000..96b77c7a5 --- /dev/null +++ b/dagor-tools/asset-viewer/index.html @@ -0,0 +1,198 @@ + + + + + + + Asset Viewer — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dagor-tools/blk/blk.html b/dagor-tools/blk/blk.html new file mode 100644 index 000000000..c5d2cb6ba --- /dev/null +++ b/dagor-tools/blk/blk.html @@ -0,0 +1,487 @@ + + + + + + + .blk File Format — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

.blk File Format

+

The .blk (“block”) is a Data Block, the primary configuration format in +Dagor Engine. It is a configuration file similar to .ini, .cfg, and other +configuration files you may have encountered in other systems.

+

The Dagor Engine uses .blk files for storing settings, parameters, and other +essential information.

+

There are two types of .blk files: text and binary.

+
+

Text Format of .blk File

+

Text .blk files are regular text files with proprietary syntax.

+
+

File Syntax

+

The .blk file consists of a block name and optional parameters enclosed in +curly braces.

+
<block_name>{
+  <parameter_name>:<type>=<value>[;]
+}
+
+
+

where

+
    +
  • <block name>: The name of the block, which must start with a Latin letter or +an underscore and consist of Latin letters, digits, or underscores.

  • +
  • <parameter_name>: The name of the parameter, which must start with a Latin +letter or an underscore and consist of Latin letters, digits, or underscores.

  • +
  • <type>: The type of the parameter, which is mandatory and can be one of the +following:

    +
      +
    • t: string, the <value> is a text string in quotes. If the string +consists of only one word, quotes may be omitted. The string should not +contain LF, CR, or TAB symbols. Instead, use combinations of +symbols: ~r (CR symbol), ~n (LF symbol), ~t (TAB symbol).

    • +
    • b: boolean, the <value> is one of the strings: yes, no, +true, false, on, off, 1, 0.

    • +
    • c: 32-bit color (E3DCOLOR), the <value> is a sequence of +comma-separated integer numbers representing the color the format R,G,B +or in R, G, B, A with components ranging from 0 to 255.

    • +
    • r: floating-point number, the <value> is a floating-point number +with truncated trailing zeros.

    • +
    • m: matrix 3x4, the <value> is a string in the form of [[first line][second line][third line][fourth line]]. The lines are +comma-separated floating-point numbers defining x,y,z vector (p3 – +see below).

    • +
    • p2: Point2 vector, the <value> is comma-separated floating-point +numbers defining x,y vector.

    • +
    • p3: Point3 vector, the <value> is comma-separated floating-point +numbers defining x,y,z vector.

    • +
    • p4: Point4 vector, the <value> is comma-separated floating-point +numbers defining x,y,z,w vector.

    • +
    • ip2: IPoint2 vector, the <value> is comma-separated integer +numbers defining x,y vector.

    • +
    • ip3: IPoint3 vector, the <value> is comma-separated integer +numbers defining x,y,z vector.

    • +
    +
  • +
  • <value>: The value of the parameter, can be in quotes.

  • +
  • [;]: If a semicolon is placed after the parameter, the next parameter may be +on the same line. If the semicolon is omitted, the next parameter should be on +a new line.

    +
    +

    Note

    +

    Use a tilde (~) in quotes to represent special characters such as +quotes. To write a tilde in a string, use two tildes (~~).

    +
    +
  • +
+

Parameters can be defined as an array:

+
<Parameter name>:<type>[] = [<values>]
+
+
+

where:

+
    +
  • <type>: The type of parameter,

  • +
  • <values>: A list of values of the corresponding type separated by a +semicolon or a new line.

  • +
+

Example:

+
param1:i[]=[42; 43; 44;]
+param2:t[]=[
+  "parameter1"
+  "parameter2"
+  "parameter3"
+]
+
+
+
+
+

Directives and Comments

+

.blk files may contain parser directives and comments.

+
+

Directive @include

+

All parameters of the file will be included as if they were initially presented +in the current file. Included files may contain other include files.

+

Including another .blk file:

+
include <file_name>
+
+
+

where file name is a path to the included .blk file relative to the current +.blk file path. If the file_name starts with a slash (/), the path is +considered from the root of the engine, otherwise from the directory where the +.blk file is located. In tools, starting with # means from the develop +directory.

+
+
+

Directive @override

+
"@override:<name of block or parameter>"
+"@override:block"{
+  "@override:parameter"i=10`
+}
+
+
+

There are rules to follow when overriding:

+
    +
  • Overriding a value that has not been declared before results in a log error.

  • +
  • If it’s unclear whether a value to be overridden has been declared before, +it’s common practice to delete it first. This ensures there is no such +variable from that point, allowing you to add the variable normally.

  • +
+

Example:

+
@override:video{
+  @delete:vsync:b=no
+  vsync:b=yes
+}
+
+
+

The code above ensures that vsync is deleted first. If there was a vsync +before, it will be deleted; if not, then no action is taken. After that, vsync +does not need to be overridden and can be added normally, regardless of the +presence of vsync before it.

+
+
+

Directive @delete

+
"@delete:<name of block or parameter>"
+
+
+
+
+

Directive @clone-last

+
"@clone-last:<name of block or parameter>"
+
+
+
+
+

Comments

+
    +
  • // – single-line comment

  • +
  • /* ... */ – multi-line comment

  • +
+
+
+
+

Block Types

+

Blocks can be of the following types: sequential, nested and combination of +sequential and nested.

+
+

Sequential

+
block_name{
+  param_name:type=value
+}
+block_name{
+  param_name:type="value"
+}
+
+
+

Example:

+
lod{
+  range:r=70;
+}
+lod{
+  range:r=10000; fname:t="billboard_octagon_impostor.lod01.dag";
+}
+
+
+
+
+

Nested

+
block_name{
+  param_name:type=value
+  block_name{
+    param_name:type="value"
+  }
+}
+
+
+

Example:

+
contents{
+  lod{
+    range:r=70;
+  }
+}
+
+
+
+
+

Combination of sequential and nested

+
block_name{
+  param_name:type=value
+  block_name{
+    param_name:type="value"
+  }
+  block_name{
+    param_name:type=value
+  }
+}
+
+
+

Example:

+
contents{
+  lod{
+    range:r=70;
+  }
+  lod{
+    range:r=10000; fname:t="billboard_octagon_impostor.lod01.dag";
+  }
+}
+
+
+
+
+
+
+

Binary Format of .blk File

+

Binary .blk files are optimized for performance with a defined structure for +efficient data storage and retrieval.

+
+

File Structure

+

The data in a binary .blk file consists of header, name and string maps, +parameters, and blocks. The data is ordered as follows:

+
    +
  • Header

  • +
  • Name map (parameter and block names)

  • +
  • String map (string parameters)

  • +
  • Root parameters: (may be nested)

    +
      +
    • paramCnt

    • +
    • paramNameId_1

    • +
    • paramType_1

    • +
    • param_1

    • +
    • ...

    • +
    • paramNameId_Cnt

    • +
    • paramType_Cnt

    • +
    • param_Cnt

    • +
    +
  • +
  • Root blocks: (may be nested)

    +
      +
    • blockCnt

    • +
    • Block1 parameters:

      +
        +
      • paramCnt

      • +
      • paramNameId_1

      • +
      • paramTypeCnt_1

      • +
      • param_1

      • +
      • ...

      • +
      • paramNameId_Cnt

      • +
      • paramType_Cnt

      • +
      • param_Cnt

      • +
      +
    • +
    • Block1 blocks:

      +
        +
      • blockCnt

      • +
      • Block1_1

      • +
      • Block1_2

      • +
      • ...

      • +
      • Block1_Cnt

        +
          +
        • ...

        • +
        +
      • +
      +
    • +
    • Block_Cnt parameters

    • +
    • Block_Cnt blocks

    • +
    +
  • +
+
+
+
+

Useful tools

+

The dagor3_cdk has some useful tools for working with .blk:

+
    +
  • binBlk.exe: Converts binary and text .blk files to and from each other.

  • +
  • blkDiff.exe: Performs a syntactic diff between two .blk files.

  • +
  • blkEditor-dev.exe: Facilitates the creation of a GUI editor with dynamic +views for .blk files.

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/blk/index.html b/dagor-tools/blk/index.html new file mode 100644 index 000000000..c0600bc0a --- /dev/null +++ b/dagor-tools/blk/index.html @@ -0,0 +1,187 @@ + + + + + + + .blk Format — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

.blk Format

+

Syntax, structure, and usage of .blk files, including configuration examples +and parsing directives.

+

Contents:

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/daeditor/daeditor-console-commands/daeditor_console_commands.html b/dagor-tools/daeditor/daeditor-console-commands/daeditor_console_commands.html new file mode 100644 index 000000000..58f39ca57 --- /dev/null +++ b/dagor-tools/daeditor/daeditor-console-commands/daeditor_console_commands.html @@ -0,0 +1,781 @@ + + + + + + + Overview — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Overview

+

To view a list of all registered commands, use the list command in the +console. For syntax details and brief descriptions of each command, use the +help command.

+
+
+

camera.dir

+

Sets the current direction of the camera.

+

Usage: camera.dir x y z [x_up = 0 y_up = 1 z_up = 0]

+
+
+

camera.pos

+

Shows and sets the current position of the camera.

+

Usage: camera.pos to know camera position in last active viewport.

+

Usage: camera.pos x y z to set camera position in last active viewport.

+
+
+

clear

+

Clears the console output.

+

Usage: clear

+
+
+

driver.reset

+

Resets the graphics driver to its default state.

+

Usage: driver.reset

+
+
+

entity.stat

+

Outputs statistics for entity pools to console.

+

Usage: entity.stat

+
+
+

envi.set

+

Configures the environment settings.

+

Usage: envi.set <envi_name>

+
+
+

.sun_from_time

+

Adjusts the sun position based on the specified time.

+

Usage: .sun_from_time year month day time lattitude longtitude

+
+
+

exit

+

Exits the daEditor.

+

Usage: exit [save_project]

+

If save_project is set no message box will be shown.

+
+
+

help

+

Displays a list of available commands along with their syntax and descriptions.

+

Usage: help <command name>

+
+
+

land.commit_changes

+

Commits changes made to the land data.

+

Usage: land.commit_changes

+
+
+

land.ltmap

+

Generates or modifies the lightmap for the land.

+

Usage: land.ltmap [file_path] to calculate and save lightmaps; optional +file_path is relative to develop; with no file_path builtScene/lightmap.dds is +saved.

+
+
+

land.rebuild_colors

+

Rebuilds the color information for the landmesh/heightmap.

+

Usage: land.rebuild_colors

+
+
+

list

+

Lists all registered commands.

+

Usage: list

+
+
+

perf.dump

+

Dumps performance data for analysis.

+

Usage: perf.dump

+
+
+

perf.off

+

Turns off performance monitoring.

+

Usage: perf.off

+
+
+

perf.on

+

Enables performance monitoring.

+

Usage: perf.on

+
+
+

project.export.all

+

Exports project in all formats.

+

Usage: project.export.all level_name_pc level_name_xbox level_name_ps3 to +export project in all formats where level_name_* – path to exported level +relative application levels directory.

+
+
+

project.export.and

+

Exports project for the Android platform.

+

Usage: project.export.and level_name to export project in Android (Tegra GPU +family) format where level_name – path to exported level relative application +levels directory.

+
+
+

project.export.ios

+

Exports project for the iOS platform.

+

Usage: project.export.iOS level_name to export project in iOS format where +level_name – path to exported level relative application levels directory.

+
+
+

project.export.pc

+

Exports the project for PC platforms.

+

Usage: project.export.pc level_name to export project in PC format where +level_name – path to exported level relative application levels directory.

+
+
+

project.export.ps3

+

Exports the project for PlayStation 3 platforms.

+

Usage: project.export.ps3 level_name to export project in PS3 format where +level_name – path to exported level relative application levels directory.

+
+
+

project.export.ps4

+

Exports the project for PlayStation 4 platforms.

+

Usage: project.export.ps4 level_name to export project in PS4 format where +level_name – path to exported level relative application levels directory.

+
+
+

project.export.xbox

+

Exports the project for Xbox platforms.

+

Usage: project.export.xbox level_name to export project in XBOX 360 format +where level_name – path to exported level relative application levels +directory.

+
+
+

project.open

+

Opens a specified project.

+

Usage: project.open file_path [lock = false] [save_project] where file_path +– full path to level.blk or path relative to projects developdirectory,lock boolean value to determine to lock project or not,save_project` – +boolean value to supress save question message box

+
+
+

project.tex_metrics

+

Computes and outputs tex metrics to console.

+

Usage: project.tex_metrics [verbose] [nodlg]

+
+
+

screenshot.ortho

+

Outputs orthographic screenshot using extents from landscape.

+

Usage: screenshot.ortho

+
+
+

set_workspace

+

Sets the current workspace configuration.

+

Usage: set_workspace application_blk_path [save_project] to load workspace +from mentioned “application.blk” file where application_blk_path – path to +desired application.blk file. Must be full or relative to daEditor folder +save_project – boolean value to disable save question message box.

+
+
+

shaders.list

+

Lists all available shaders.

+

Usage: shaders.list [name_substr]

+
+
+

shaders.reload

+

Reloads all shaders from disk.

+

Usage: shaders.reload [shaders-binary-dump-fname].

+
+
+

shaders.set

+

Sets a specified shader configuration.

+

Usage: shaders.set <shader-var-name> <value>

+
+
+

shadervar

+

Lists shader variables.

+

Usage: shadervar

+
+
+

tex.hide

+

Hides the specified texture.

+

Usage: tex.hide

+
+
+

tex.info full

+

Gives a detailed list of textures in a .log/debug file.

+

Usage: tex.info full

+
+
+

tex.refs

+

Lists references to the specified texture.

+

Usage: tex.refs

+
+
+

tex.show

+

Shows the specified texture.

+

Usage: tex.show

+
+
+

time.speed

+

Sets the current simulation speed.

+

Usage: time.speed <scale>

+
+
+

render.shaderVar [x] [x] [x] [x]

+

Sets shader variables with specified values.

+

Usage: render.shaderVar  <x> [x] [x] [x] [x]

+
+
+

render.shaderBlk

+

Applies a shader block configuration.

+

Usage: render.shaderBlk  <x>

+
+
+

app.tex [x]

+

Manages application textures.

+

Usage: app.tex

+
+
+

app.tex_refs

+

Calculates amount of references for application textures.

+

Usage: app.tex_refs

+
+
+

app.save_tex [x]

+

Saves the specified texture(s).

+

Usage: app.save_tex  <x> [x]

+
+
+

app.save_all_tex

+

Saves all application textures.

+

Usage: app.save_all_tex

+
+
+

app.stcode

+

Displays shader code for debugging.

+

Usage: app.stcode

+
+
+

render.reset_device

+

Resets the rendering device to its default state.

+

Usage: render.reset_device

+
+
+

render.hang_device

+

Causes the rendering device to hang or pause for debugging purposes.

+

Usage: render.hang_device  <x>

+
+
+

render.send_gpu_dump [x]

+

Sends a GPU memory dump for analysis. Parameters specify details.

+

Usage: render.send_gpu_dump  <x> [x]

+
+
+

render.reload_shaders [use_fence] [shaders_bindump_name]

+

Reloads shaders with optional parameters for synchronization and shader binding +dumps.

+

Usage: render.reload_shaders  [use_fence] [shaders_bindump_name]

+
+
+

water.hq [x] [x] [x] [x]

+

Configures high-quality settings for water rendering.

+

Usage: water.hq  [x] [x] [x] [x]

+
+
+

water.foam_hats [x] [x] [x]

+

Adjusts settings for foam effects on water surfaces.

+

Usage: water.foam_hats <hats_mul> <hats_threshold> <hats_folding>

+
+
+

water.surface_folding_foam [x] [x] [x]

+

Configures settings for surface folding foam in water.

+

Usage: water.surface_folding_foam <mul> <pow>

+
+
+

water.foam_turbulent [x] [x] [x] [x]

+

Adjusts settings for turbulent foam effects on water.

+

Usage: water.foam_turbulent <generation_threshold> <generation_amount> <dissipation_speed> <falloff_speed>

+
+
+

water.dependency_wind [x]

+

Configures water rendering to depend on wind settings.

+

Usage: water.wind_dependency <size>

+
+
+

water.alignment_wind [x]

+

Adjusts water alignment based on wind settings.

+

Usage: water.alignment_wind <size>

+
+
+

water.choppiness [x]

+

Configures the choppiness of water surfaces.

+

Usage: water.choppiness <size>

+
+
+

water.facet_size [x]

+

Sets the facet size for water tessellation.

+

Usage: water.facet_size <size>

+
+
+

water.amplitude [x] [x] [x] [x] [x]

+

Adjusts the amplitude of water waves.

+

Usage: water.amplitude <a01234> or water.amplitude <a0> <a1> <a2> <a3> <a4>

+
+
+

water.small_wave_fraction [x]

+

Configures the fraction of small waves in water rendering.

+

Usage: water.smallWaveFraction <size>

+
+
+

water.cascade_window_length [x]

+

Sets the length of the cascade window for water rendering.

+

Usage: water.cascade_window_length <size>

+
+
+

water.cascade_facet_size [x]

+

Configures facet size for water cascades.

+

Usage: water.cascade_facet_size <size>

+
+
+

water.roughness [x] [x]

+

Adjusts the roughness of water surfaces.

+

Usage: water.roughness <base> <cascadesBase>

+
+
+

water.fft_resolution [x]

+

Sets the FFT resolution for water rendering.

+

Usage: water.fft_resolution <size>

+
+
+

water.tesselation

+

Configures the tessellation level for water surfaces.

+

Usage: water.tesselation <size>

+
+
+

water.fft_period [x]

+

Sets the FFT period for water waves.

+

Usage: water.fft_period <size>

+
+
+

water.spectrum [x] [x]

+

Configures the water spectrum for wave patterns.

+

Usage: water.spectrum <spectra index> <bf_scale> where <spectra index>: +phillips = 0, unified_directional = 1.

+
+
+

water.vs_samplers

+

Sets the number of vertex shader samplers for water.

+
+
+

water.reset_render

+

Resets water rendering settings to default.

+
+
+

water.num_cascades [x]

+

Configures the number of cascades for water rendering.

+

Usage: water.num_cascades <size>

+
+
+

debug_mesh.range

+

Sets the range for displaying debug mesh information.

+
+
+

skies.convert_weather_blk_to_entity

+

Converts a weather block to an entity format.

+

Usage: rendinst.hide_object <rendinst name>

+
+
+

rendinst.hide_object [x]

+

Hides a specified rendering instance object.

+

Usage: rendinst.hide_object <rendinst name>

+
+
+

rendinst.list

+

Lists all rendering instances.

+
+
+

rendinst.profiling [x]

+

Toggles rendinst in profiles by name, or include all ri in profiler (all), or +exclude all rendinst from profiler (none).

+

Usage: rendinst.profiling <rendins tname>|all|none

+
+
+

rendinst.verify_lods [x]

+

Verifies level of detail (LOD) settings for rendering instances.

+
+
+

ri_gpu_objects.invalidate

+

Invalidates GPU objects for the rendering interface, potentially forcing a +reload.

+
+
+

rigrid.stats

+

Displays statistics about the rig grid.

+
+
+

shaded_collision.none

+

Disables shaded collision rendering.

+
+
+

shaded_collision.alone

+

Displays shaded collision alone without any visual elements.

+
+
+

shaded_collision.with_visual

+

Displays shaded collision with visual elements.

+
+
+

shaded_collision.alone_diff

+

Shows differences in shaded collision alone.

+
+
+

shaded_collision.with_visual_diff

+

Displays differences in shaded collision with visual elements.

+
+
+

shaded_collision.wireframe

+

Renders shaded collision in wireframe mode.

+
+
+

shaded_collision.face_orientation

+

Displays the face orientation for shaded collision.

+
+
+

gameres.update_pack

+

Updates the specified resource pack for the game.

+
+
+

gameres.list_missing_for_res [x]

+

Lists missing resources for a specified category.

+
+
+

gameres.list_missing_for_tex

+

Lists missing textures for the specified category.

+
+
+

gameres.list_missing_for_all_tex [x]

+

Lists missing textures across all categories.

+
+
+

riUnitedVdata.list

+

Lists UnitedV data for rendering interface.

+
+
+

riUnitedVdata.status

+

Displays the status of UnitedV data.

+
+
+

riUnitedVdata.dumpMem

+

Dumps memory for UnitedV data.

+
+
+

riUnitedVdata.perfStat

+

Provides performance statistics for UnitedV data.

+
+
+

dmUnitedVdata.list

+

Lists UnitedV data for data management.

+
+
+

dmUnitedVdata.status

+

Displays the status of UnitedV data in data management.

+
+
+

dmUnitedVdata.dumpMem

+

Dumps memory for UnitedV data in data management.

+
+
+

dmUnitedVdata.perfStat

+

Provides performance statistics for UnitedV data in data management.

+
+
+

tex.list [x] [x] [x] [x] [x] [x] [x] [x] [x]

+

Lists textures with optional filtering parameters.

+
+
+

tex.downgrade [x]

+

Downgrades the specified texture to a lower quality.

+
+
+

tex.setMaxLev [x]

+

Sets the maximum level for texture detail.

+
+
+

tex.set

+

Sets the specified texture.

+
+
+

tex.addRef

+

Adds a reference to the specified texture.

+
+
+

tex.delRef

+

Removes a reference from the specified texture.

+
+
+

tex.markLFU [x]

+

Marks the specified texture as Least Frequently Used (LFU).

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/daeditor/daeditor-console-commands/index.html b/dagor-tools/daeditor/daeditor-console-commands/index.html new file mode 100644 index 000000000..61598f4d6 --- /dev/null +++ b/dagor-tools/daeditor/daeditor-console-commands/index.html @@ -0,0 +1,389 @@ + + + + + + + daEditor Console Commands — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

daEditor Console Commands

+

Contents:

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/daeditor/daeditor/daeditor.html b/dagor-tools/daeditor/daeditor/daeditor.html new file mode 100644 index 000000000..0e08f3246 --- /dev/null +++ b/dagor-tools/daeditor/daeditor/daeditor.html @@ -0,0 +1,327 @@ + + + + + + + Overview — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Overview

+

daEditor (DagorEditor) is one of the two primary tools for working with +assets, and in some cases, for creating them. It offers a vast array of +parameters and features.In this article, we will cover the basic principles of +using daEditor, aimed at helping new users get started.

+
+
+

Basic Workflow in daEditor

+ +
+

Working with Assets on the Landscape

+

All asset-related work is performed within the Landscape tab. This is the +central workspace for placing, editing, and managing assets on the terrain or +environment you’re developing.

+

Control Panel

+
+
+

Basic Logic and Controls

+

The logic in daEditor is largely similar to that of 3ds Max. Below is an +overview of the essential controls and buttons, all of which come with +tooltips – be sure to read them for more detailed information.

+

Create Entity

+

This button allows you to place an object onto the map.

+

Control Panel

+

Console

+

If something isn’t working as expected, or if something isn’t working at all, +check the console for errors (look for red text).

+

Control Panel

+

Object Movement Controls

+

These buttons control the movement of objects. The hotkeys are the same as in +3ds Max.

+

Control Panel

+

Snap Settings

+

This button allows you to snap objects to the landscape grid (for object +movement), as well as snap rotation and scale.

+

Control Panel

+

Drop Pivot to Ground

+

Use this to “drop” the pivot point to the ground if you’ve accidentally placed +it in the air. If your object has the “Place on collision” property, this will +only affect the pivot, while the object itself will always remain on the +landscape.

+

Control Panel

+

Move to Selected Object

+

This button will move your camera to the currently selected object.

+

Control Panel

+

Select Object by Name

+

This allows you to select an object by its name.

+

Control Panel

+

Export Group as Composite

+

This button lets you export a group of objects as a composite entity.

+

Control Panel

+

Break Composite into Individual Entities

+

Use this button to break down a composite entity into its individual components +(DAGs).

+

Control Panel

+
+
+

Working with Object Properties

+

When an object is selected, you can access its properties by pressing the letter +P (for “Properties”) on your keyboard.

+

Object Properties

+

1: Object Name in Scene

+

This field displays the name of the object within the scene. It is often helpful +to have the scene names match the asset names. You can use the Unify object +names command to accomplish this:

+

Object Properties

+

2: Collision Placement Settings

+

This property defines how the object interacts with landscape collision:

+
    +
  • Ignore Collision: The object’s height matches its pivot point.

  • +
  • Place Pivot: The pivot point (typically the origin point of +the asset in the 3ds Max scene) is placed directly on the collision surface.

  • +
  • Place Pivot and Use Normal: The object’s pivot aligns to the normal of the +landscape, useful for placing objects like houses on hills so that they tilt +naturally.

  • +
  • Place 3-Point (bbox): A bounding box is created around the object, and the +object is placed so that at least three points of the bounding box align with +the collision surface.

  • +
  • Place Foundation (bbox): All four points of the bounding box base align +with the collision surface.

  • +
  • Place on Water (floatable): Specifically for floating objects, this option +places the object on a water surface.

  • +
  • Place Pivot with RendInst Collision: This option aligns the object’s pivot +with the collision of the corresponding Render Instance.

  • +
+

3: Actual Object Name

+

This property shows the real name of the object placed on the map. You can +select a different object here instead of placing a new one.

+

4: Shader Parameter Seed Generation

+

This option generates seeds for the shader parameters of selected objects, +including those within composite entities (as they contain many sub-objects):

+
    +
  • Individual: Generates a unique seed for each selected object.

  • +
  • Equal: Generates the same seed for all selected objects.

  • +
  • Seed Slider: Adjust the seed value for the previously selected seed type +(either individual or equal).

    +
    +

    Note

    +

    These seeds affect only shader parameters, not other aspects of composites. +Currently, this feature is used solely for procedural painting.

    +
    +
  • +
+

5: Object Seed Generation on the Map

+

This is similar to the previous property but operates on a larger scale, +generating seeds for entire composite entities rather than individual shader +parameters:

+
    +
  • Individual: Generates a unique seed for each selected object.

  • +
  • Equal: Generates the same seed for all selected objects.

  • +
  • Seed Slider: Adjust the seed value for the previously selected seed type +(either individual or equal).

  • +
+
+
+

Exporting a Location

+

To export a location, navigate to the menu ProjectExport to Game (PC +format).

+

Object Properties

+

After selecting this option, a series of dialogs will appear, allowing you to +choose whether to export all elements of the created location. The default +settings are typically correct and do not require adjustments.

+

The most critical part of this process is specifying the correct export path for +the level. Occasionally, the tools might malfunction and suggest saving the +level in incorrect directories.

+

A simple way to verify that you’re exporting the level to the right location is +to check whether you’re replacing the existing binary file. If you’re prompted +with a message indicating that you’re about to overwrite an existing file, and +given the option to “replace” or “rename”, then you’re exporting to the correct +directory.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/daeditor/daeditor/index.html b/dagor-tools/daeditor/daeditor/index.html new file mode 100644 index 000000000..cf34bb6bb --- /dev/null +++ b/dagor-tools/daeditor/daeditor/index.html @@ -0,0 +1,196 @@ + + + + + + + daEditor — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dagor-tools/daeditor/index.html b/dagor-tools/daeditor/index.html new file mode 100644 index 000000000..baa4b2e53 --- /dev/null +++ b/dagor-tools/daeditor/index.html @@ -0,0 +1,304 @@ + + + + + + + daEditor — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

daEditor

+
+

Contents:

+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/daeditor/navmesh/index.html b/dagor-tools/daeditor/navmesh/index.html new file mode 100644 index 000000000..a221725c4 --- /dev/null +++ b/dagor-tools/daeditor/navmesh/index.html @@ -0,0 +1,194 @@ + + + + + + + Navigation Mesh — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dagor-tools/daeditor/navmesh/navmesh.html b/dagor-tools/daeditor/navmesh/navmesh.html new file mode 100644 index 000000000..bbf0a174f --- /dev/null +++ b/dagor-tools/daeditor/navmesh/navmesh.html @@ -0,0 +1,340 @@ + + + + + + + Navigation Mesh — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ + + + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/daeditor/splines_in_daeditor.html b/dagor-tools/daeditor/splines_in_daeditor.html new file mode 100644 index 000000000..a785686fb --- /dev/null +++ b/dagor-tools/daeditor/splines_in_daeditor.html @@ -0,0 +1,296 @@ + + + + + + + Splines in daEditor — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Splines in daEditor

+

More detailed information can be found here: +spline.blk.

+
+

Splines and Render Instances (Rendinsts)

+
    +
  1. Removing Render Instances Along the Spline

    +
      +
    • Splines can remove both render instances generated at runtime (from masks +and scripts) and those saved in the level (generated via splines).

    • +
    +

    a) To remove render instances generated by masks or scripts, use the +parameters in the spline class:

    +
      +
    • sweepWidth:r= - distance from the center of the spline to the end of the +“cleared area”.

    • +
    • addFuzzySweepHalfWidth:r= - distance from the center of the spline to the +end of the sparse space, used to create irregular edges.

    • +
    +

    b) To remove render instances generated along splines, use:

    +
      +
    • sweep2Width:r=

    • +
    • addFuzzySweep2HalfWidth:r=

    • +
    • Additionally, startPadding:r= and endPadding:r= define a distance from +the start and end of the spline where objects are not generated (useful for +roads that lead into bridges).

    • +
    +

    To split spline-generated assets into separate entities, use the command +LandscapeInstantiate gen. objects into separate entities.

    +
  2. +
  3. Rendering Along a Loft Instead of a Perfect Spline

    +
      +
    • To generate instances along a loft, accounting for its curves and twists, +enable:

    • +
    • storeSegsForGen:b=yes in the loft generation block.

    • +
    • useLoftSegs:b=yes either in the object generation block (for a specific +object) or anywhere after the loft definition (for all objects).

    • +
    +
  4. +
  5. Splines as Modifiers

    +
      +
    • Splines can act as modifiers for heightmaps or land meshes (delanoy).

    • +
    +
  6. +
+
+
+

Sorting Order of Lofts in the Clipmap During Rendering

+
    +
  1. Order of Spline Classes

    +
      +
    • This order is set in the daEditor +(using the place layer order switch) or in the splines.blk of a +specific location (via layerOrder:i= with values ranging from 0 to +2). The higher the value, the higher the spline sits in the rendering +layer. This also applies to decals. The priority of splines is higher than +that of lofts. To place a decal above a spline, add +script:t="layerOrder=n" to the decal where n is the desired layer.

    • +
    +
  2. +
  3. Order of Loft Rendering

    +
      +
    • Each loft within a spline has a rendering order defined by +loftLayerOrder:i=. The higher the number, the higher the loft appears in +the rendering stack. By default, all lofts are at layer 0.

    • +
    +
  4. +
  5. Decals Above Splines

    +
      +
    • To render decals on top of all splines, check if the box in Exported +ParametersGeom: render loft below all is checked in the +daEditor.

    • +
    +
  6. +
+
+
+

Additional Notes

+
    +
  • Straight Segments: When creating a spline, holding Shift forces the +spline to consist of straight segments instead of curves (each node switches +to corner mode).

  • +
  • Tight Fence Orientation: To make objects placed along a spline form a +continuous chain, add:

    +
      +
    • tightFenceOrient:b="yes" in the spline class (within the objGenerate{} +block).

    • +
    +
  • +
+
+
+

Asset Orientation Types in the Spline Class

+
    +
  • orientation:t="fence_normal"

  • +
  • orientation:t="fence"

  • +
  • orientation:t="normal"

  • +
  • orientation:t="spline": assets are aligned parallel to the spline.

  • +
  • orientation:t="spline_up"

  • +
  • orientation:t="world"

  • +
  • orientation:t="world_xz"

  • +
  • orientation:t="normal_xz"

  • +
+
+
+

Additional Parameter

+
    +
  • zeroOpacityDistAtEnds:r=2: This parameter sets zero opacity at the +spline’s end vertices (distance in meters). It is applied at the root of the +spline.

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/dag2rires/dag2rires.html b/dagor-tools/dag2rires/dag2rires.html new file mode 100644 index 000000000..5a1426031 --- /dev/null +++ b/dagor-tools/dag2rires/dag2rires.html @@ -0,0 +1,260 @@ + + + + + + + Overview — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Overview

+

The dag2riRes tool is used for the following purposes:

+
    +
  • Converting .dag files into .composit.blk files.

  • +
  • Generating multiple .dag files from objects within a single .dag file.

  • +
+

The tool uses two key files:

+
    +
  • dag2riRes-dev.exe

  • +
  • dag2riRes-dev.pdb

  • +
+
+
+

Usage Recommendation

+

For ease of use, it is recommended to create a separate directory where you can +copy the tool. Avoid placing this directory within the project resources, as +temporary files can accumulate there, potentially disrupting the build process +and generating errors in the editor logs. While these issues are usually minor +and can be resolved by routine cleanup, in cases like research or iterative +testing, where frequent exporting, testing, and deleting is necessary, it is +better to keep the tool in a dedicated directory. In the created directory, +duplicate the *.exe and *.pdb files.

+
+
+

Generating a .composit.blk File

+

To generate a .composit.blk file:

+
    +
  1. In 3ds Max/Blender, either create a new object if it is not yet available +in the asset database, or import it from an existing .dag file.

  2. +
  3. Name the object either after the original .dag file from which you imported +the geometry or after the .dag file you want to generate from the object +using dag2riRes.

  4. +
  5. Add a three-digit suffix such as _000.

  6. +
  7. If you assign the suffix _origin to any object in the scene, its pivot +point will be used as the zero-coordinate in the resulting composite file.

    +
    +

    Note

    +

    If the .dag file being processed with dag2riRes lacks a node named +*_origin, the pivot in the resulting composite file will not match the +pivot of the original .dag, and will be offset instead.

    +
    +
  8. +
  9. It is recommended to clone similar geometry in the scene as a reference (or +instance).

  10. +
  11. Export the .dag scene to the directory containing the dag2riRes tool.

  12. +
  13. The composite file will be generated in the root directory, next to the +executable file.

  14. +
+

For more detailed instructions on creating .composit.blk files, please refer +to the relevant documentation.

+

See more details about composite files +here.

+
+
+

Rules for Generating Individual .dag Files

+

When generating individual .dag files:

+
    +
  • .dag files will be created based on similar names. For a set of similarly +named objects in the scene, only one .dag file will be generated based on +the first object in the numerical order. For example, from the objects +test_geometry_001, test_geometry_127, and test_geometry_origin, only one +.dag file will be created, named test_geometry, based on the first object +(test_geometry_001).

  • +
  • .dag files will automatically be assigned a .lod00 suffix; no other +suffixes are supported.

  • +
  • The .dag files will be located in the \simple_dags\p_RendInst directory.

  • +
  • .rendinst.blk files will be generated alongside the .dag files, but they +are generally not useful.

  • +
+
+
+

Running the dag2riRes

+

To run dag2riRes-dev.exe, it is recommended to use FAR Manager. Upon +launching, the log will display a brief instruction:

+

Running the dag2riRes

+

Enter the command in the command line. At a minimum, you need to specify the +name of the .dag file you are processing and the target directory. For +example:

+
dag2riRes-dev.exe -s:test.dag -d:simple_dags
+
+
+

All other parameters are optional.

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/dag2rires/index.html b/dagor-tools/dag2rires/index.html new file mode 100644 index 000000000..de9a9d2a6 --- /dev/null +++ b/dagor-tools/dag2rires/index.html @@ -0,0 +1,188 @@ + + + + + + + dag2riRes — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dagor-tools/impostor-baker/impostor_baker.html b/dagor-tools/impostor-baker/impostor_baker.html new file mode 100644 index 000000000..a65bd8a7b --- /dev/null +++ b/dagor-tools/impostor-baker/impostor_baker.html @@ -0,0 +1,561 @@ + + + + + + + Overview — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Overview

+

The purpose of this tool is to generate impostor textures of rendInst models to +be exported to game resource packages.

+
+
+

Local Workflow

+
    +
  • The tool is a separate executable. The existing daBuild is console +application, thus it does not support rendering assets.

  • +
  • The generation of the impostor textures takes place before the building of the +assets, so the generated textures get exported as well

  • +
+
    +
  1. Generate the impostor textures.

  2. +
  3. Build the resources with dabuild (to test them locally).

  4. +
  5. Commit changes:

    +
      +
    • .folder.blk, which is used for the trees,

    • +
    • the generated textures (there are 3 per rendinst),

    • +
    • riImpostors.bin files, which are modified (found in +<content_folder>/<package_folder>/res/).

    • +
    +
  6. +
+
+
+

Local Workflow - Quick Start

+
    +
  1. Enable baked impostors in .folder.blk files

    +

    1.1. In the .folder.blk that exports trees, look for such virtual assets:

    +

    virtual_res_blk{ find:t="^(.*bush.*)\.lod00\.dag$"...

    +

    1.2. Replace this line:

    +

    lod { range:r=1000; fname:t="../dynamic_imposter.lod01.dag";}

    +

    to

    +

    lod { range:r=1000; fname:t="../billboard_octagon_impostor.lod01.dag";}

    +

    1.3. Add impostor block: impostor {} (check the end of the page for more +details on this).

    +
  2. +
  3. Run daImpostor.cmd in <game_folder>/develop/

  4. +
  5. Run dabuild. Necessary packages (or just build everything):

    +

    3.1. vegetation.grp (or wherever the affected trees are exported to)

    +

    3.2. <trees_foldername>_impostors.dxp (there could be more if there are +trees in different folders)

    +

    3.3. .grp for the impostor_data.impostorData.blk file. The location is specified in application.blk: assets/impostor_data_folder:t=...

    +
  6. +
  7. (optional) Export level binaries. The game runs without this, but the +rotation palettes won’t be available. Without this step, there will be a +logerr when a level is loaded. It is not dangerous, safe to ignore, but the +level will look slightly different after level binary export.

  8. +
  9. When uploading stuff to cvs, it has to include all the generated +textures+.folder.blk in the generated impostors folder +(<trees_folder>/impostors/); and the impostor_data.impostorData.blk file, and +of course modified the .folder.blk.

  10. +
+
+
+

How to Access the Tool

+

Here will be description about how to access the tool.

+
+
+

Impostor Texture Resolution

+

The texture sizes can be specified in application.blk or in .folder.blk per +asset.

+

In application.blk:

+

The texture height can be specified either globally or based on world space tree +height, using quality levels. The width of the texture will be calculated based +on world space height/width ratio of the tree. Wide trees will have a wide +texture. For configuration, check the end of this page.

+

In .folder.blk:

+

Here the exact resolution can be specified. If only height is specified, width +will be calculated based on world space height/width ratio of the tree. The +impostor block options for textureWidth and textureHeight correspond to the +resolution of the entire generated texture, not per-slice. The generated +textures will contain 9 views in a row, but they are compacted.

+

Keep in mind that the option for texture resolutions will apply to the highest, +hq texture config. These resolutions should be the ones that the current game +is supposed to use with the highest quality options. Mip offsets are applied for +mq, and lq and optionally applied for mobile distribution too.

+

If you want to specify texture quality for specific platforms, the +impostors/.folder.blk has to be changed. The generated textures are created +for all platforms. .folder.blk can be used to export them with mip offsets. +Until there is no project specific option here, it’s better to update +impostorBaker.cpp to generate a different default .folder.blk.

+
+
+

How to Use the Tool

+
    +
  1. Using the separate tool:

  2. +
+

The tool needs to be executed from the develop folder in order to work. It needs +two mandatory arguments: the path to the application.blk and the path to the +root dir:

+

> G:/dagor2/tools/dagor3_cdk/bin64/impostorBaker-dev.exe ../application.blk -rootdir:G:/dagor2/enlisted/develop [options...]

+

The options are:

+
    +
  • debug: either classic or default. This sets the debugging mode.

  • +
  • assets:<assest_name1;asset_name2…> Asset names can be listed here (of +type rendinst), separated with ;. The tool will export these assets.

  • +
  • packs:<pack_name1;pack_name2…> Assets from these packs, which have an +impostor will be exported.

  • +
  • clean:<yes|no> Can be used to remove all textures that belong to assets +that no longer exist. Default value is no. - +folderblk:<disabled|dont_replace|replace> This option specifies what to do +with the .folder.blk files found inside the impostor directories:

    +
      +
    • disabled: never generate or modify these files;

    • +
    • dont_replace: generate .folder.blk if it doesn’t exist;

    • +
    • replace (default): always generate/replace existing.

    • +
    +
  • +
+

If the assets or packs options are set, only those assets will be generated. +Otherwise all supported assets (rendinst which have an impostor block). If +invalid arguments are detected the application will print out a help menu with +all these arguments.

+

The tool will generate a folder in every folder containing rendinst which +support impostors. The textures and a .folder.blk (depending on the settings) +will be placed in this folder upon generation.

+
+

Note

+

Don’t put anything else in that folder, because it’s content is +handled automatically. If the clean option is enabled, it will parse all +impostor folders, and all file names inside these folders. It will keep all +files which belong to an existing asset, that supports impostors; it will delete +all textures which match the impostor texture name format, which don’t belong to +any such asset; .folder.blk files are ignored at this step; if any other file +is found, then the cleaning operation will abort to prevent accidentally +deleting necessary files.

+
+
    +
  1. Using the Asset Viewer:

  2. +
+

Let the image do the talking:

+

Asset Viewer

+

Note that the impostor textures only appear if they exist when the av starts. If +the impostor textures are generated from the av, then they will only appear in +the assets after a restart.

+
+
+

How to Enable the Impostor Texture Generation of an Asset

+

First of all, the asset has to be of type rendinst, otherwise the tool will just +skip it.

+

Add an impostor block to the content of the virtual asset. The impostor block +must be directly inside of the content block, not inside of a third block. +At the moment baked/runtime impostor duality is not supported. It’s not possible +to set up different impostor types for different build configurations, eg. +different platforms. This is a doable feature, but it is not done.

+

Example

+
virtual_res_blk{
+  find:t="^(.*tree_tropic_large_.*)\.lod00\.dag$"
+  className:t="rendInst"
+  contents{
+    impostor{
+      textureWidth:i=4096
+      textureHeight:i=0 // automatically adjust to width, based on asset height (for trees/bushes)
+      rotationPaletteSize:i=3
+      mipCount:i=0 // 0 means generate all until specified smallest mip size (application.blk)
+    }
+    //...
+  }
+}
+
+
+

or just simply

+
virtual_res_blk{
+  find:t="^(.*tree_tropic_large_.*)\.lod00\.dag$"
+  className:t="rendInst"
+  contents{
+    impostor{} // autodetect impostor type; use default settings
+    //...
+  }
+}
+
+
+

Any of the parameters inside the impostor block can be left out to use the +default values. The block can also be empty. The tool will generate a texture, +that is composed of slices, which correspond to different viewing angles of the +asset.

+
    +
  • textureWidth: X resolution of the entire texture containing 9 slices,

  • +
  • textureHeight: Y resolution of the generated texture = height of a single +slice,

  • +
  • mipCount: by default (value=0) it will generate all mips based on +application.blk settings. Any different value will manually override it. It +means the total number of mip levels including the base texture.

  • +
  • rotationPaletteSize: The tree will be able to rotate around Y, but only a +few discrete angles are allowed. For rotationPaletteSize=3, possible rotations +will be 0, 120, 240 degrees.

    +
    +

    Warning

    +

    There will be a shadow texture created for every possible +rotation for every tree!

    +
    +
  • +
  • preshadowsEnabled: Disable preshadows for this asset,

  • +
  • crownCenterOffset1: Point3 offset of transmittance ellipsoid center in +meters,

  • +
  • crownRadOffset1: Point3 offset of transmittance ellipsoid radius in +meters,

  • +
  • crownCenter2: Point3 secondary transmittance ellipsoid center in meters,

  • +
  • crownRad2: Point3 secondary transmittance ellipsoid radius in meters,

  • +
  • mipOffsets_hq_mq_lq:ip3=0,1,2: These mip offsets will be exported directly +to the .tex.blk files. These options only affect dabuild.

  • +
  • mobileMipOffsets_hq_mq_lq:ip3=0,1,2: Same as mipOffsets_hq_mq_lq, except +it’s for mobile platforms. If the project is not built for mobile, then no +need to specify it.

  • +
  • impostorNormalMip:i=5: There is a way to tell baker which mip will be used +for baking the normals for this asset. By default it’s 0.

  • +
+

The default values can be found in: +prog\gameLibs\publicInclude\rendInst\impostorTextureMgr.h

+
+
+

How to Enable Baked Impostors in a New Game

+
    +
  1. Add copy the current billboard_octagon_impostor.lod01.dag file to every +location, where there is a dynamic_imposter.lod01.dag file in the assets +folder. If there is already one, check if it’s the same.

  2. +
  3. Enable impostorData asset type in application.blk:

    +
      +
    • assets/types/ type:t=“impostorData”

    • +
    • assets/export/types/ type:t=“impostorData”

    • +
    +
  4. +
  5. Add assets/impostor block to the application.blk

    +
      +
    • data_folder:t – mandatory, pick a location that is exported for the +game always (not level dependent or something similar); The corresponding +grp cannot contain any assets that use baked impostors!!!

    • +
    • splitAt:i – optional, splitAt value generated for impostor textures. It +will be used to export all impostor textures within the project.

    • +
    • defaultTextureHeight:i – optional, default texture height for generated +impostor textures. It can be overwritten in the virtual asset blk.

    • +
    • textureQualityLevels { qualityLevel { minHeight:r=; textureHeight:i= } +– list of texture heights based on world space tree height. textureHeight +will be applied for trees that are at least minHeight tall. Multiple +qualityLevel blocks can be specified. Only one of defaultTextureHeight +and textureQualityLevels can be specified at a time.

    • +
    • mobileMipOffset:i – optional, if the mobile version of the game +requires smaller resolution textures than the PC, a mip offset can be +applied to them using this option. Texture can be generated in PC +resolution and the mobile will use them with the given mip offset.

    • +
    • normalMipOffset:i – normal_translucency texture will have a lower +resolution than the diffuse texture when using this.

    • +
    • aoSmoothnessMipOffset:i – same as the above, but for ao_smoothness +texture,

    • +
    • aoBrightness:r - brightness of impostor AO effect default: 0.7

    • +
    • aoFalloffStart:r -  lower means darker center of impostor AO effect +(0…1) default: 0.25

    • +
    • aoFalloffStop:r - lower means darker edge of impostor AO effect (0…1) +default: 1.0

    • +
    • preshadowsEnabled:b - enable or disable preshadows by default for this +project. It can be overwritten per-asset. Preshadows usually improve +quality at the cost of performance, although they don’t work for every +asset. default: yes

    • +
    +
  6. +
+

Example

+
impostor{
+  data_folder:t="develop/assets/gameres/gameObjects"
+  preshadowsEnabled:b=yes
+  splitAt:i=256
+  mobileMipOffset:i=1
+  normalMipOffset:i=1
+  aoSmoothnessMipOffset:i=1
+  textureQualityLevels{
+    qualityLevel{
+      minHeight:r=0; textureHeight:i=32
+    }
+    qualityLevel{
+      minHeight:r=4; textureHeight:i=64
+    }
+    qualityLevel{
+      minHeight:r=8; textureHeight:i=128
+    }
+    qualityLevel{
+      minHeight:r=16; textureHeight:i=256
+    }
+  }
+}
+
+
+
    +
  1. Check the corresponding gameParams.blk

    +

    4.1. Remove this line (if exists):

    +

    enableImpostorTextureManager:b=false (default=yes)

    +

    4.2. Optionally add this line to disable preshadow compression:

    +

    enableImpostorPreshadowCompression:b = <yes/no> (default=yes)

    +

    4.3. Parameters for transmittance approximation for outside of cascade0:

    +
  2. +
+
treeCrownTransmittance{brightness:r // default - 0.5falloffStart:r // default - 0.01falloffStop:r // default - 1.enabled:b // default - no
+}
+
+
+
+
+

How to Use ImpostorNormalMip for Smoothness Hack

+

The idea of hack. At some mip of branches normal texture place a the same +texture, but with fade smoothness channel. After that bake the impostor with +this texture, and as a result we saw in game impostor with less whitish stuff on +the edge.

+
    +
  1. Set up a mipFade feature for normal texture of branches for vegetation, for +example you set a 4 mip as faded

    +
    +

    Important

    +

    You should specify mipFade according to swizzling.

    +
    +

    As shows the example below, here we want mip fade for smoothness channel, +which stored in alpha channel. But according to swizzling Alpha channel goes +to Red channel. So we apply mip fade to red channel.

    +

    Example

    +

    Customized mipmap lit color for A channel(smoothness) only for branches +exclude palms, olives, glossy foliage etc.

    +
  2. +
+
virtual_res_blk{
+  find:t="^(.*branch.*_n?)\.tif$"
+  //exclude glossy foliage here!
+  className:t="tex"
+  contents{
+    hqMip:i=1; mqMip:i=2; lqMip:i=3
+    convert:b=yes; fmt:t="BC7"
+    rebuild_bc67:b=yes
+    gamma:r=1
+    stubTexTag:t="smooth0_nx_metal0_ny"
+    mipFilter:t="filterKaiser"; mipFilterAlpha:r=42; mipFilterStretch:r=2 
+    addrU:t="wrap"; addrV:t="wrap"
+    hqMip:i=0; mqMip:i=1; lqMip:i=2
+    swizzleARGB:t="RAGB"
+    mipFade{
+      mipFadeColor:p4=1.0,-1,-1,-1
+      mipFadeStart:c=0,0,0,0
+      mipFadeEnd:c=4,4,4,4
+    }
+  }
+}
+
+
+
    +
  1. Make a export of this export, to apply changes of mipFade feature.

  2. +
  3. Set up a mip which will be used for sampling, per asset for tree.

    +

    Example

    +
  4. +
+
virtual_res_blk{
+  find:t="^(tree_autumn_.*)\.lod00\.dag$"
+  className:t="rendInst"
+  contents{
+    lod{
+      range:r=80;
+    }
+    lod{
+      range:r=160;
+    }
+    lod{
+      range:r=1500; fname:t="../billboard_octagon_impostor.lod01.dag";
+    }
+    transition_lod{
+      ...
+    }
+    impostor{
+      impostorNormalMip:i=5;
+    }
+    allowProxyMat:b=yes
+  }
+}
+
+
+
    +
  1. Run ImpostorBaker, to bake the impostors.

  2. +
  3. Export whole data to the game.

  4. +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/impostor-baker/index.html b/dagor-tools/impostor-baker/index.html new file mode 100644 index 000000000..e3bd4be23 --- /dev/null +++ b/dagor-tools/impostor-baker/index.html @@ -0,0 +1,196 @@ + + + + + + + Impostor Baker — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dagor-tools/index.html b/dagor-tools/index.html new file mode 100644 index 000000000..c8e80d5a1 --- /dev/null +++ b/dagor-tools/index.html @@ -0,0 +1,231 @@ + + + + + + + Dagor Tools — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/levels-deps/index.html b/dagor-tools/levels-deps/index.html new file mode 100644 index 000000000..9dcd8de4e --- /dev/null +++ b/dagor-tools/levels-deps/index.html @@ -0,0 +1,185 @@ + + + + + + + levels.deps — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

levels.deps

+
+

Contents:

+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/levels-deps/levels_deps.html b/dagor-tools/levels-deps/levels_deps.html new file mode 100644 index 000000000..bc53dcc35 --- /dev/null +++ b/dagor-tools/levels-deps/levels_deps.html @@ -0,0 +1,327 @@ + + + + + + + levels.deps — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

levels.deps

+
+

Overview

+

The levels.deps tool provides two logs that are essential for tracking asset +and texture dependencies:

+
    +
  1. Texture-to-Asset Dependency Log: This log shows which assets are using +specific textures. With this information, you can precisely identify which +assets need to have a texture removed to ensure it no longer appears in a +certain location (or, conversely, determine which assets should be removed +from a location).

  2. +
  3. Asset-to-Texture Dependency Log: This log identifies which textures are +used by specific assets. It also helps you determine whether a texture is +used exclusively by a particular asset or is shared across multiple assets. +Additionally, this log displays the vertex buffer for each asset, as well as +the global buffer for the map.

  4. +
+
+
+

Usage

+

The usage process is consistent across all projects:

+
    +
  1. Navigate to the <engine_root>/tools/dagor3_cdk/util64/ directory.

  2. +
  3. Run the appropriate batch file.

  4. +
  5. Wait for the tool to process all the maps.

  6. +
  7. Once processing is complete, navigate to the output directory: +levels.deps/<project_name>.

  8. +
  9. Open the .deps file for the desired map to access the two types of logs:

    +
      +
    • Texture-to-Asset Dependency Log

    • +
    • Asset-to-Texture Dependency Log

    • +
    +
  10. +
+
+

Texture-to-Asset Dependency Log

+

This is the first log in the file, which indicates which assets are using a +specific texture.

+

The log format typically looks like this:

+
[texture size] texture name <- asset(s)
+
+
+

Example

+
referenced 752 DDSx (4 root, legend: [WxH memSz] TEX <- RES...):
+[ 256x256 85K] african_fabric_cover_d_tex_d* <- debris_clothes_f;
+[ 256x256 85K] african_fabric_cover_h_tex_d* <- debris_clothes_e;
+[ 256x256 85K] african_fabric_cover_tex_n*   <- debris_clothes_e; debris_clothes_f;
+.........................
+total 874M for 752 texture(s)
+
+
+
+
+

Asset-to-Texture Dependency Log

+

This is the second log in the file, which provides the following information:

+
    +
  • Which textures are used by a specific asset.

  • +
  • Whether these textures are unique to that asset or shared across multiple +assets.

  • +
  • The vertex buffer for each asset and the global vertex buffer for the map.

  • +
+

The log format typically looks like this:

+
[asset vertex buffer + unique texture size] asset name -> unique textures; shared textures;
+
+
+

Example

+
referenced 3428 resources (1704 root, legend: [resVB + uniqueTex] RES -> unique{TEX...}; shared{TEX...}):
+* [ 1345K+ 0K] 88mm_flak_36_canon_a            -> shared[2]={ flak_36_set_tex_d*; flak_36_set_tex_n*; };
+               88mm_flak_36_canon_a_collision
+
+* [ 1345K+ 0K] 88mm_flak_36_canon_b            -> shared[2]={ flak_36_set_tex_d*; flak_36_set_tex_n*; };
+               88mm_flak_36_canon_b_collision
+
+* [ 71K+ 170K] wooden_power_pole_a             -> unique[2]={ insulator_tex_d*; insulator_tex_n*; }; shared[7]={ decal_modulate_leaks_bottom_tex_m*;};
+.........................
+total 322.4M (VB/IB) for 3428 resource(s)      // total vertex buffer for the location.
+
+
+

This log is particularly useful because of the vertex buffer data, which helps +identify potential issues with excessive texture channels (e.g., if the vertex +buffer size is very large).

+
+
+
+

Tool Internals

+

Understanding the internal structure of the tool is crucial for effective usage.

+
+

File Structure

+

The tool consists of the following components:

+
    +
  • dbldUtil-dev.exe: Located at <engine_root>/tools/dagor3_cdk/util/.

  • +
  • Batch Files (build_deps.cmd): Located at +<engine_root>/<project_name>/develop/levels.deps/.

  • +
  • Configuration Files (game_env.blk): Located in the same directory as the +batch files.

  • +
+

While there’s no need to modify the executable, you might need to adjust the +batch files.

+
+
+

Batch Files

+

The batch files consist of command lines that perform specific tasks. For +example:

+
@for %%f in (..\..\game\content\<project_name>\levels\*.bin) do ..\..\..\tools\dagor3_cdk\util\dbldUtil-dev.exe PC %%f -deps:game_env-cr.blk ><project_name>\%%~nxf.deps
+
+
+

This command means:

+
    +
  • @for %%f in (..\..\game\content\<project_name>\levels\*.bin): For all files +with a .bin extension in the specified directory,

  • +
  • do ..\..\..\tools\dagor3_cdk\util\dbldUtil-dev.exe PC %%f -deps:game_env-cr.blk ><project_name>\%%~nxf.deps: run the tool with the +<project_name> configuration on a PC, and output the results to the +<project_name> directory with the same filename but with a .deps +extension.

  • +
+

If you don’t want the tool to process all binaries, you can modify the batch +file to target specific files.

+

For instance, to process a specific file:

+
..\..\..\tools\dagor3_cdk\util\dbldUtil-dev.exe PC ..\..\game\content\<project_name>\levels\cr_menu_background.bin -deps:game_env-cr.blk ><project_name>\cr_menu_background.bin.deps
+
+
+

This command instructs the tool to:

+
    +
  • process a specific file (cr_menu_background.bin),

  • +
  • using the <project_name> configuration,

  • +
  • output the result to the designated directory and file.

  • +
+
+
+

Tool Configurations

+

If you encounter any errors while using the tool, it’s essential to check the +configuration files.

+

The game_env.blk file defines the “working directories” and, crucially, the +packages required +for the map to function correctly. Therefore, if the tool doesn’t process your +map, don’t worry. Check that all packages the map depends on are listed in the +configuration file and read the error logs carefully.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/resource-building/index.html b/dagor-tools/resource-building/index.html new file mode 100644 index 000000000..6b00de4d5 --- /dev/null +++ b/dagor-tools/resource-building/index.html @@ -0,0 +1,200 @@ + + + + + + + Resource Building — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dagor-tools/resource-building/packages.html b/dagor-tools/resource-building/packages.html new file mode 100644 index 000000000..dd92be4aa --- /dev/null +++ b/dagor-tools/resource-building/packages.html @@ -0,0 +1,192 @@ + + + + + + + Packages — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Packages

+
+

How It Works

+

The rules that define which packages exist in the game and their dependencies +are specified in the +application.blk file within +the packages{} block.

+

Example:

+
pkg_dev{  // package name
+  PC:b=yes; iOS:b=no; and:b=no;  // platforms
+  destSuffix:t="/../content.hq"  // if the package should be placed in content.hq (needed for HQ versions)
+  "PC~~dedicatedServer":b=yes    // required on dedicated servers (HQ versions are not needed, standard ones are)
+  allow_patch:b=false   // should patching be allowed (only disabled for pkg_dev, everything in production is patched)
+  always_commit:b=true  // should the rebuild commit changes
+  dependencies{  // dependencies
+    "*" {base:b=yes;}  // base package
+    pkg_cockpits {base:b=yes;}  // cockpit assets
+  }
+}
+
+
+

The dependencies{} block indicates that Package A, which specifies a +dependency on Package B, relies on Package B. However, Package B does not depend +on Package A.

+
+
+

How to Add a New Package

+

To add a new package, define the new pkg in application.blk, modify the +necessary folder.blk files (export +settings for assets), run the local build, +and ensure that the dependencies are correct and no errors occur.

+

It’s not necessary to rebuild the vromfs files after defining a new +package.

+

For the game to recognize the package content, you must specify it in the +settings file +settings.blk located +at engine_root\<project_name>\develop\gameBase\_pc\settings.blk. Add the +package paths in both the addons{} and addons_no_check{} blocks.

+
+
+ + +
+
+
+ +
+ +
+

© Copyright Gaijin Entertainment 2024. + Last updated on Dec 03, 2024. +

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/resource-building/resource_building.html b/dagor-tools/resource-building/resource_building.html new file mode 100644 index 000000000..f5f3f53c5 --- /dev/null +++ b/dagor-tools/resource-building/resource_building.html @@ -0,0 +1,646 @@ + + + + + + + Resource Building: daBuild, build, vromfs, levels, settings.blk — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Resource Building: daBuild, build, vromfs, levels, settings.blk

+

Resource building refers to the process of packaging all game assets – including +models, textures, levels, and their associated settings and game logic – into +binary files. This approach helps reduce the number of files that need to be +downloaded, speeding up the download process while keeping the data volume +constant. It also protects our assets from being exploited by players for +unintended purposes.

+

The game itself does not interact directly with the raw assets like models, +textures, or level settings that we create. Instead, it only interacts with the +compiled binary files. When a level is loaded, the necessary packages are +fetched, decompressed, and the required information is extracted from them.

+

This article provides an overview of how to build assets, levels, and settings.

+
+

Parameters in .folder.blk Affecting the Building Process

+

Resource building is governed by the rules defined in .folder.blk files.

+
+

See also

+

For more information, see +.folder.blk.

+
+

For example, the following block specifies compression parameters for .tiff +textures.

+
virtual_res_blk{
+  find:t="^(.*)\.tiff$"  // search for any .tiff files
+  className:t="tex"      // assign the "texture" class
+  contents{              // processing details
+    convert:b=yes;fmt:t="DXT1|DXT5"  // convert; use DXT1 or DXT5 format (if alpha is present)
+    mipFilter:t="filterKaiser";mipFilterAlpha:r=40;mipFilterStretch:r=2 // mipmap compression using
+                                     // the Kaiser filter (sharpens); with two parameters
+    addrU:t="wrap";addrV:t="wrap"    // define texture tiling behavior, wrap = repeat for repeating textures.
+    hqMip:i=0;mqMip:i=1;lqMip:i=2    // define the displayed mip level based on graphics quality;
+                                     // hq (high quality) uses the original texture,
+                                     // mq uses mip level 1 (50% compression), lq uses mip level 2 (75% compression).
+  }
+}
+
+
+

There are numerous such processing blocks. Below, we’ll examine the key ones.

+
+
+

Global Export Parameters

+
export{
+  package:t="*" // Specify the package to which the asset will be built
+                // (a package is the highest level of asset grouping)
+  forcePackage:t="*" // Some packages might be automatically renamed by hardcoded logic.
+                     // This parameter enforces a specific name. Use this if you want to
+                     // ensure that certain assets are built into only one location.
+  ddsxTexPackPrefix:t="tanks/" // Specify the directory in the built resources where
+                               // texture packs will be stored (a pack is the next level of grouping within a package).
+                               // In this example, texture packs for tanks will be built
+                               // into the "tanks" directory rather than the general directory.
+  ddsxTexPack:t="*name_src"    // Specify the name of the texture pack. If "*name_src" is used,
+                               // the name will be derived from the directory containing the textures.
+  gameResPack:t="aces.grp" // Specify the name of the resource pack. If "*name_src" is used,
+                           // the name will be derived from the folder containing the textures.
+  splitNotSeparate:b=true  // Indicate that textures should not be split between the base client and the full client.
+                           // In the base client, textures are downscaled to 512px so players can download a smaller
+                           // amount of data and start playing sooner. To maintain visual quality, some textures, like
+                           // those for tanks or hangars, are not downscaled but kept at normal quality. This flag is
+                           // set to true to prevent downscaling. The default is false, and it can be omitted.
+}
+
+
+

These are just a few examples. Let’s delve into the primary parameters.

+
+
+

About Packs and Packages

+

The hierarchy of resources can be illustrated as follows:

+Hierarchy of Resources +

In essence, a project can contain several packages, and each package can include +multiple packs.

+
+

What Is a “Package”?

+

A package typically serves as a container for resources that we want to +distribute to or remove from the player’s environment. For example, we might +bundle a specific location and its assets into a package for a particular event. +Players download it, enjoy the event for a week, and once the event concludes, +the package is removed from their resources.

+

Packages can also be used to release or sell add-ons. Instead of requiring +players to download 20 GB of resources upfront, they can start with a minimal +setup and quickly get into the game. Later, they can purchase additional content +and download the necessary data from the relevant package.

+
+

See also

+

For more information, see +Packages.

+
+
+
+

What Is a “Pack”?

+

A pack is a component of a package where the assets are actually built. The +logic for dividing assets into packs is straightforward:

+
    +
  • When a location is loaded, the minimum possible number of packs should be +fetched to optimize loading times.

  • +
  • Each pack should ideally be between 10 to 100 MB (with 100 MB being the +absolute maximum) to ensure efficient unpacking.

  • +
+

Generally, we group similar assets together; for example, all vehicle props +might go into a pack named vehicles. Defensive structures like pillboxes, +trenches, bunkers, and barricades might be grouped into a pack called +fortifications.

+

If a pack becomes too large, we break it down into smaller groups. For example, +vehicles could be further divided into packs such as buses, trucks, and +cars.

+
+
+
+

Local Build

+

When you create a new asset, it needs to be tested locally in the game. The +local client, like the player’s client, only understands built resources, so +they need to be built before testing.

+

There are three types of builds:

+
    +
  1. Full Build: Builds all resources.

  2. +
  3. Partial Pack Build: Builds the specific pack containing the resource you +need. This method is used when only a few assets have been modified – quick +and efficient.

  4. +
  5. Partial Package Build: Builds an entire package (a set of packs). +Although this is a longer process, it can be more convenient in some cases, +such as in daNetGame-based games, where packaging the resources this way +might be preferable to building individual packs.

  6. +
+
+
+

Local Full daBuild

+

The daBuild is a program executed via the +dabuild.cmd batch file.

+
+

Important

+

Running dabuild.cmd will build all resources – this process can take hours. If +you only need to build a single resource for quick testing, use +dabuild_test.bat instead.

+
+
+

Building and Errors

+

In theory, all assets should be error-free. However, asset management initially +relied heavily on manual checks, leading to human error and allowing issues to +slip through. Over time, more automated checks were added to daBuild, which +means that older assets that previously built without problems might now trigger +errors. If an error occurs while building a pack, the build process for that +pack is halted, and subsequent assets are not built. Errors are only detected +during the build process, but they also interrupt it, making it time-consuming +to identify and fix issues across all assets within a pack.

+

To address this, the -keep_building_after_error flag was introduced. If the +previous build resulted in errors, you can add this flag at the end of the batch +file command to allow daBuild to continue building all resources while logging +the errors.

+
+

Note

+

The -keep_building_after_error flag should not be used to ignore errors. The +build process for specific assets will still be interrupted, but it will move on +to the next asset in the pack rather than stopping at the first error. Once +you’ve collected error data, fix the assets and run the build without this flag +to ensure that daBuild completes successfully without issues.

+
+
+
+

Local Pack Build

+
+

Important

+

Building packs with daBuild will compile all packs matching a specified +pattern. For example, if you have a vehicles pack and a vehicles_modern +pack, building vehicles will compile both packs unless you specify the exact +pack extension (e.g., vehicles.grp to target only that pack).

+

Also, note that daBuild will build packs based on the package name. For +example, if you have several packs within the main package and you run a build +using the main pattern, it will build all packs within the main package. +This builds all packs within the main package, not the main package +itself.

+

This happens because the final pack names always include the package name as a +prefix. For example, the vehicles pack in the main package will ultimately +be named main_vehicles.

+
+

To build a specific pack, open dabuild_test.bat in any text editor, and you +will see a line like this:

+
..\..\tools\dagor3_cdk\bin64\dabuild-dev.exe -target:PC ..\application.blk -packs_re:usa_gm -Q
+
+
+

Replace usa_gm with the name of the pack you need to build. The pack is +determined by the nearest .folder.blk file to the asset, containing lines +like:

+
export{
+  ddsxTexPack:t="gm_lvl_assets.dxp.bin"
+  gameResPack:t="gm_lvl_assets.grp"
+}
+
+
+

The gm_lvl_assets is an example of the pack name into which the resources will +be built. It may vary – refer to your specific setup.

+
+

Important

+

Notice that there are two types of packs:

+
    +
  • ddsxTexPack: Exports textures.

  • +
  • gameResPack: Exports models.

  • +
+

It’s possible for textures to be exported to one pack and models to another. +For example:

+
```
+export{
+  ddsxTexPack:t="gm_lvl_assets.dxp.bin"
+  gameResPack:t="locations.grp"
+}
+```
+
+
+

You need to build the packs corresponding to the resources you’ve modified. If +you’ve changed textures, build the texture pack. If you’ve changed models, build +the model pack. If both were changed, build both packs.

+
+
+
+
+

Local Package Build

+

Unlike packs, packages are more comprehensive and refer to self-contained +volumes of resources that can be enabled or disabled with a “toggle”.

+

For example, in War Thunder:

+
    +
  • pkg_main (or simply *): The default package where all assets are exported.

  • +
  • pkg_dev: Contains assets that should be built but not distributed to +players.

  • +
  • tomoe: A package for modifying certain symbols in countries where their +original form is prohibited.

  • +
  • Event packages are also occasionally used.

  • +
+

In daNetGame-based games, each location is its own package, which can be +distributed to players independently.

+

In a .folder.blk file, the package entry looks like this:

+
export{
+  package:t="tomoe"
+}
+
+
+

In War Thunder, local package builds are not common, as there are few +packages, and packs are usually built instead. However, in daNetGame-based +games, this is an extremely useful feature. There are two options for such +builds.

+
+

Option 1: Building a Specific Package

+

In the daBuild batch file, write:

+
..\..\tools\dagor3_cdk\bin64\dabuild-dev.exe -target:PC ..\application.blk -package:package_name -Q
+
+
+

Replace package_name with the name of the package you need to build. This will +build the entire package with validation and checks.

+
+

Note

+

Package builds target specific packages, unlike packs, which work based on +patterns. This isn’t usually an issue unless you’re trying to build textures.

+

For example, package_name and package_name_hq (high-quality textures used +for close-up views) are different packages. Building the package with +-package:package_name will only compile standard textures, not high-quality +ones. This could result in your changes appearing in low-quality textures but +reverting when viewed up close, as the high-quality textures haven’t been +updated.

+

To avoid this, you should either:

+
    +
  • sequentially build both packages using one batch file: +-package:package_name -package:package_name_hq

  • +
+

or

+
    +
  • create two separate batch files: one for the main resource package (non-HQ +textures) and another specifically for HQ textures.

  • +
+
+
+
+

Option 2: Building a Specific Package and Its Dependencies

+

In daNetGame-based games, packages often have cross-references. When something +changes in a “common” package, you need to ensure that everything works +correctly in all other packages that reference it. Instead of doing a full build +(which is very time-consuming), you can build the “common” package along with +its dependent packages, which is much faster.

+

To do this, write the following in the daBuild batch file:

+
..\..\tools\dagor3_cdk\bin64\dabuild-dev.exe -target:PC ..\application.blk -package_and_deps:package_name -Q
+
+
+

The package_and_deps refers to the package and its dependencies.

+
+
+
+

Toggling Packages in settings.blk

+

Occasionally, you may need to enable or disable packages to test specific +scenarios (for example, disabling a package to verify that the game runs without +it). This is configured in the settings.blk file.

+
+

See also

+

For more information, see +settings.blk.

+
+

For all projects, after modifying the package list, you must rebuild the +.vromfs.bin files.

+

In War Thunder, packages are enabled or disabled in the file located at +<engine_root>/<project_name>/develop/gameBase/_pc/settings.blk:

+
addons{
+  folder:t = "content.hq/hq_tex"
+  folder:t = "content.hq/pkg_cockpits"
+  folder:t = "content/pkg_china"
+  folder:t = "content.hq/pkg_china_hq"
+  folder:t = "content/pkg_dev"
+  folder:t = "content.hq/pkg_dev_hq"
+  folder:t = "content/hc_pacific"
+  folder:t = "content/pkg_user"
+  folder:t = "content/pkg_local"
+  folder:t = "content/tomoe"
+  folder:t = "content.hq/tomoe_hq"
+  folder:t = "content.hq/uhq_vehicles"
+  folder:t = "content.hq/uhq_aircraft"
+  folder:t = "content.hq/uhq_environment"
+}
+addons_no_check{
+  folder:t = "content.hq/hq_tex"
+  folder:t = "content.hq/pkg_cockpits"
+  folder:t = "content/pkg_china"
+  folder:t = "content.hq/pkg_china_hq"
+  folder:t = "content/pkg_dev"
+  folder:t = "content.hq/pkg_dev_hq"
+  folder:t = "content/hc_pacific"
+  folder:t = "content/pkg_user"
+  folder:t = "content/pkg_local"
+  folder:t = "content/tomoe"
+  folder:t = "content.hq/tomoe_hq"
+  folder:t = "content.hq/uhq_vehicles"
+  folder:t = "content.hq/uhq_aircraft"
+  folder:t = "content.hq/uhq_environment"
+}
+
+
+

To disable a package, simply comment out the relevant lines in both blocks and +rebuild .vromfs.bin files.

+

It’s important to note that this file is responsible only for enabling or +disabling packages within the game; it does not handle the creation of packages. +The requirement for a package to be built by daBuild is defined in the +application.blk file within the packages{} block.

+
+

See also

+

For more information, see +application.blk.

+
+
+
+

Local Build of a Specific Asset

+

The daBuild command with the -build:<asset>[:<out_file>] parameter allows +you to build a single asset into the specified file. This command does not +update packages, meaning the updated asset will not be added to any package.

+
+
+

Local Resource Build in Asset Viewer

+

Resources can also be built using the Asset +Viewer, which often speeds up +the process since daBuild via batch files can sometimes lag unpredictably.

+
+

See also

+

For more information on how to build using Asset Viewer, see +Asset Viewer: Building Assets.

+
+
+
+

Local Vromfs Build

+

VROMFS stands for “Virtual Read-Only Memory File System”. Essentially, +vromfs files are the “virtual configuration disk” for our game. +They contain all the game’s operational settings that aren’t hard-coded.

+

When creating assets, you need to build vromfs primarily when you’re configuring +asset destruction or fine-tuning the behavior of in-game vehicles. In other +scenarios, vromfs building is typically unnecessary.

+

It’s crucial to remember that, by default, vromfs are delivered over the network +at the start of each mission, allowing for different settings per mission. If +you want to test something locally, ensure that your config.blk file has the +following line in the debug{} block: offlineBinaries:b=yes. Alternatively, +you can use disableNetwork:b=yes if network features are irrelevant to you. +For added security, you might want to include both.

+
+

Methods to Build Vromfs

+
    +
  1. Using create_vrsroms.bat

    +
      +
    • Located in the <engine_root>/<project_name>/develop/gameBase directory. +This method is useful because it immediately indicates if there’s an issue +with the settings by throwing an error. Additionally, it provides a local +log (log_vrom) in the same directory, which helps you identify and +resolve any problems.

    • +
    +
  2. +
  3. Using aces_dev.exe

    +
      +
    • Technically, this tool does not build vromfs. However, if you have +vromfsPriority:b=no set in the debug{} block of your config.blk, all +configuration files will be read directly from develop/gameBase instead +of from vromfs. This approach offers several advantages: there’s no need to +wait for vromfs building after each change, and errors are logged in a more +readable format. Additionally, this method allows you to add the powerful +trackEnvChanges:b=yes line to your config.blk, enabling you to tweak +settings directly in-game. Although this doesn’t work for all settings, +it’s particularly helpful for adjusting weather or visual elements, as you +can see the changes in real-time without restarting the client.

    • +
    +
  4. +
+

Choose the method based on your experience. The in-game approach might be less +convenient, but sometimes it’s essential to ensure everything behaves exactly as +it would in production.

+
+
+
+

Local Build of Resources and Vromfs in the open daEditor and Client

+

You can build resources and vromfs while the +daEditor is open (though resource building +might cause the daEditor to crash).

+

However, resources and vromfs cannot be built while the client is open.

+

If you find that resources aren’t building after you’ve closed the client – or +they seem to build, but the changes aren’t reflected in-game – open the Task +Manager and terminate any lingering aces_dev.exe processes.

+
+
+

Local Level Export

+

If you’re developing in-game vehicles that are loaded via missions, you can skip +this section.

+

However, if you’re creating objects for maps, you’ll need to place them on the +map and export the level to test them in-game. This process is done via the +daEditor.

+

Level export is necessary when:

+
    +
  • You’re working with prefabs. Prefabs are only included in the game during +level re-export.

  • +
  • You’ve added a new asset that wasn’t previously on the level or removed +something from the location.

  • +
  • Something has changed in object generation, and their placement needs to be +updated.

  • +
+

If you’re only modifying render instances or textures, there’s no need to +re-export the level – doing so would just waste time.

+

Once you have placed all your objects, save the level and follow these steps:

+
    +
  1. Open the Project menu.

  2. +
  3. Select Export to Game (PC format) (if needed).

  4. +
  5. Click OK on all subsequent dialog boxes.

  6. +
  7. Save the level binary file.

  8. +
  9. After the level build is complete, launch the game and verify the objects.

  10. +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/resource-building/vromfs.html b/dagor-tools/resource-building/vromfs.html new file mode 100644 index 000000000..7f80f5984 --- /dev/null +++ b/dagor-tools/resource-building/vromfs.html @@ -0,0 +1,221 @@ + + + + + + + Vromfs — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Vromfs

+
+

What is Vromfs?

+

Vromfs is a type of virtual file system used by Dagor games.

+

Files and directories are compressed into a single file with the extension +.vromfs.bin. This file can be both compressed and cryptographically signed +during creation.

+

Files are created and managed using vromfsPacker-dev.exe, which can also +unpack them. To use it, run the command:

+
vromfsPacker-dev.exe some_config.blk
+
+
+

The configuration file in .blk format, +contains rules for compression, specifying what to compress, the source and +destination paths of directories, compression settings, signing, etc.

+

You can open a .vromfs.bin file to inspect which directories and files are +compressed within each vrom file and identify their source paths. It is also +possible to decompress a vrom file manually.

+

Using vroms protects data from modification and significantly reduces load +times.

+
+
+

Important Tips and Hints

+
    +
  • Potential Issues: Using the flag has drawbacks. For example, the +disappearance of a file might go unnoticed because it would still be found in +the vrom.

  • +
  • daNetGame Approach: daNetGame-based games use a different concept. +All add-ons and vroms are mounted to the game via a list in settings.blk, +which also provides the source of the vrom. The flag +debug{useAddonVromSrc:b=yes} tells the game to ignore vroms and instead +mount the provided directories.

  • +
  • Advantages of Vroms: Vroms are small and can hold vital information, such +as scripts and game data, which allows updates or patches without a full patch +(particularly important for consoles or phones where quick updates are not +feasible). Consequently, vroms are updated in all games. In WarThunder, this +is done via a special service that also synchronizes vroms between dedicated +servers and clients. In daNetGame-based games, the game downloads these +files at startup (only on consoles). Future updates may include downloading +vroms before joining queues or in other scenarios.

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/substance-designer/index.html b/dagor-tools/substance-designer/index.html new file mode 100644 index 000000000..21e20dc76 --- /dev/null +++ b/dagor-tools/substance-designer/index.html @@ -0,0 +1,185 @@ + + + + + + + Substance Designer — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Substance Designer

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/dagor-tools/substance-designer/substance_designer.html b/dagor-tools/substance-designer/substance_designer.html new file mode 100644 index 000000000..ddca85488 --- /dev/null +++ b/dagor-tools/substance-designer/substance_designer.html @@ -0,0 +1,276 @@ + + + + + + + Substance Designer Mip Generator — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Substance Designer Mip Generator

+
+

Installation

+

To avoid having to search for the node on your disk every time, you can add it +to your custom library. To do this, go to EditPreferences ▸ +ProjectsLibrary+, and in the pop-up window, add the directory +containing the node. For internal team members, the directory is located at:

+
<engine_root>/tools/substance_library/
+
+
+

If you already have a custom library, you can simply copy the node into it. Once +added, the node will be available under the FiltersTransforms tab and +accessible via search.

+../../_images/substance_designer_01.jpg +
+
+
+

Usage

+

To use the node, drag it into a new Substance Graph and connect your diffuse +texture with an alpha channel to the tex_d input. The initial result +(tex_d_mips) may not be perfect and could require further configuration. If it +looks correct from the start, custom mips may not be necessary.

+
+

Initial Setup

+

Let’s consider a less-than-ideal input example: a metallic grid of 7x13 cells, +where the edges of the cells align with the edges of the texture.

+
+

Note

+

This is an exaggeratedly bad case, and ideally, most of these issues should be +resolved during the texture creation process.

+
+

First, adjust the global offset. In the Main tab, enter the number of grid +cells and set Half Cell Offset to True. Note that changing this parameter +will generate a second output – tex_d_offset, which doesn’t contain mips. +After configuring the diffuse, remember to connect the normal map input to apply +the same offset.

+../../_images/substance_designer_02.jpg +../../_images/substance_designer_03.jpg +
+
+

Mip Adjustment

+

Now, let’s move on to configuring the mips. The settings are consistent across +all mip levels. The first few mips likely won’t require modification. From left +to right in the output image, the mips are ordered as 0, 1, 2, and so on. Once +you find the first mip that looks unclear, start configuring the settings.

+

For example, by mip level 2 (mip02), the lines may appear unclear. Initially, +you can improve this by adjusting the contrast and midpoint sliders.

+

However, at some point, the contrast will no longer be enough – the mip +resolution will be too low to properly render the cells. This is where the +cell count setting comes in handy.

+

First, set the number of cells so that one complete cell is drawn per mip level. +It’s easier to configure when the edges are aligned around the perimeter, so you +may want to temporarily switch to half-cell offset for the zero mip.

+

Then, reduce the number of cells, approximately to half the original count. You +can experiment with a smaller reduction, but you’ll need to test in-game to +ensure no noticeable flickering occurs due to line shifts rather than a +reduction in cell count.

+../../_images/substance_designer_04.jpg +../../_images/substance_designer_05.jpg +

For mip05, improving line clarity required reducing the 7x13 grid to 4x8.

+

If a significantly distinct area of the texture has been cropped out, you can +reposition it with the offset tool. The step size corresponds to one grid cell.

+

As the resolution decreases, the line thickness will inevitably increase in +proportion since it can’t be thinner than a single pixel. However, if the lines +remain two pixels thick on distant mips and contrast adjustments don’t help, you +can manually enter a non-integer offset for problematic mips. Often, a value of +0.01 will suffice.

+../../_images/substance_designer_06.jpg +../../_images/substance_designer_07.jpg +

Eventually, the texture will degrade into an unreadable cluster of pixels. To +avoid manually adjusting the “midpoint” for every mip beyond this point, the +Main tab allows you to replace the alpha channel in all subsequent mips with +a solid fill – either fully transparent or fully opaque.

+

The settings for these mips are hidden to keep the interface uncluttered and +make it easier to navigate the list.

+
+
+
+

Enabling Custom Mips

+

Simply modifying the texture in this way will break its display in both the +Asset Viewer and in-game. You +must also specify that the texture contains custom mips, or the engine will +misinterpret it.

+

To do this, create a .tex.blk file named after the texture (without the +extension) in the same directory as the texture itself. Inside this file, +specify the texture name and include the appropriate block.

+

For example, for the texture barbwire_tex_d.tif, the barbwire_tex_d.tex.blk +file would look like this:

+
name:t="barbwire_tex_d.tif"
+include "#/develop/assets/_srgbx_with_mips.blk"
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/danetgame-framework/daNetGame/index.html b/danetgame-framework/daNetGame/index.html new file mode 100644 index 000000000..309b76c77 --- /dev/null +++ b/danetgame-framework/daNetGame/index.html @@ -0,0 +1,156 @@ + + + + + + + DaNetGame Framework — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

DaNetGame Framework

+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright Gaijin Entertainment 2024. + Last updated on Dec 03, 2024. +

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/danetgame-framework/index.html b/danetgame-framework/index.html new file mode 100644 index 000000000..eeea89558 --- /dev/null +++ b/danetgame-framework/index.html @@ -0,0 +1,159 @@ + + + + + + + DaNetGame Framework — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

DaNetGame Framework

+

Explore the DaNetGame Framework, a powerful toolset for developing and managing +networked multiplayer games on the Dagor Engine.

+
+ + +
+
+
+ +
+ +
+

© Copyright Gaijin Entertainment 2024. + Last updated on Dec 03, 2024. +

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 000000000..fdd36058f --- /dev/null +++ b/genindex.html @@ -0,0 +1,7239 @@ + + + + + + Index — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Index

+ +
+ Symbols + | A + | B + | C + | D + | E + | F + | G + | H + | I + | L + | M + | N + | O + | P + | R + | S + | T + | U + | V + | X + +
+

Symbols

+ + + +
+ +

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + + +
+ +

I

+ + + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + + +
+ +

P

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + + +
+ +

X

+ + + +
+ + + +
+
+
+ +
+ +
+

© Copyright Gaijin Entertainment 2024. + Last updated on Dec 03, 2024. +

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/getting-started/directory_structure.html b/getting-started/directory_structure.html new file mode 100644 index 000000000..00ff9dad5 --- /dev/null +++ b/getting-started/directory_structure.html @@ -0,0 +1,512 @@ + + + + + + + Directory Structure Overview — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Directory Structure Overview

+
+

General Directory Structure

+

At the top level of the Dagor Engine directory structure, the root directory +is organized into four main sections:

+
    +
  • Main Sources: Contain the engine core and +associated tools.

  • +
  • Projects: Contain files specific to individual game +projects.

  • +
  • Samples: Include example projects for reference.

  • +
  • Documentation: Provides comprehensive guides and +references.

  • +
+

Below is a tree of the general directory structure:

+
DagorEngineRootDirectory/
+├── <project_name>/
+│   ├── prog/
+│   │   ├── ui/
+│   │   ├── scripts/
+│   │   └── gameBase/
+│   ├── develop/
+│   │   ├── assets/
+│   │   ├── levels/
+│   │   ├── gui(ui)/
+│   │   └── gameBase/
+│   ├── game/
+│   ├── tools/
+│   └── application.blk
+├── prog/
+│   ├── _jBuild/
+│   ├── 1stPartyLibs/
+│   ├── 3rdPartyLibs/
+│   ├── dagorInclude/
+│   ├── engine/
+│   ├── tools/
+│   ├── scripts/
+│   ├── gameLibs/
+│   ├── daNetGame/
+│   ├── daNetGameLibs/
+│   └── samples/
+├── samples/
+└── _docs/
+
+
+
+
+

Main Sources

+

The main sources directory prog/ contains several key parts, each serving a +specific purpose:

+
+

_jBuild/

+

Contains common JAM file settings used to build code for different platforms.

+
+
+

1stPartyLibs/

+

Contains internal libraries. These libraries have no dependencies on the engine +or other internal projects, except for 3rdPartyLibs, making them usable +outside of Dagor Engine projects.

+
+
+

3rdPartyLibs/

+

Contains external libraries with no dependencies on Gaijin code. The code within +3rdPartyLibs/ is entirely independent.

+
+
+

dagorInclude/

+

Contains essential components and modules that form the core functionality, +including 3D rendering, animation systems, debugging tools, device drivers, +special effects, resource management, and much more. May have dependencies on +1stPartyLibs/ and 3rdPartyLibs/.

+
+
+

engine/

+

Contains the core components of the Dagor Engine, encompassing a broad range of +functionalities critical for game development. This directory includes systems +for console processing, device drivers, game resources, base GUI components, +input/output systems, and so on. Most parts are optionally used across various +applications. They may have dependencies on 1stPartyLibs/ and 3rdPartyLibs/.

+
+
+

tools/

+

Contains the source code for various Dagor Tools.

+
+
+

scripts/

+

Contains common scripts, primarily Quirrel, which is the main dynamic +scripting language used in the Dagor Engine.

+
+
+

gameLibs/

+

Contains libraries for game development. Most of these libraries are +cross-platform. Dependencies are limited to 1stPartyLibs/, 3rdPartyLibs/, +engine/, and other gameLibs/.

+
+
+

daNetGame/

+

Contains a Work-In-Progress (WIP) Entity Component System (ECS) framework for +building cross-platform network games. This codebase is subject to change, with +specific components such as AI, weapons, player customization, and terrain +expected to be moved to daNetGameLibs/ and potentially rewritten using +dascript and ECS principles. Dependencies should only include +1stPartyLibs/, 3rdPartyLibs/, engine/, daECS/, and some gameLibs/. The +goal is to support a general networking solution for any physical game, with +both dedicated and player-hosted servers (excluding peer-to-peer).

+
+
+

daNetGameLibs/

+

Contains libraries that assist in developing games using the daNetGame +framework. Dependencies can include 1stPartyLibs/, 3rdPartyLibs/, engine/, +daNetGame/, daECS/, and some gameLibs/.

+
+
+

samples/

+

Contains sample projects for both the core engine and game libraries are stored +here.

+

Library Development Principles

+

Libraries should adhere to the FIRS(T) principles:

+
    +
  • Focused: Each library should have a single responsibility.

  • +
  • Independent: Libraries should minimize dependencies.

  • +
  • Reusable: Code should be designed for reuse.

  • +
  • Small: Keep libraries concise and manageable.

  • +
  • Testable: Ensure libraries can be easily tested.

  • +
+

Developers are encouraged to move code that meets these principles into +1stPartyLibs/ or gameLibs/, depending on the dependencies, rather than +keeping it within individual projects. This practice helps avoid code +duplication and increases the likelihood of code review and improvement.

+
+
+
+

Projects

+
+

General Architecture of Projects

+

We follow a standard directory structure for our game projects and recommend its +use to developers:

+
<project_name>/
+ ├── prog/
+ │   ├── ui/
+ │   ├── scripts/
+ │   └── gameBase/
+ ├── develop/
+ │   ├── assets/
+ │   ├── levels/
+ │   ├── gui(ui)/
+ │   └── gameBase/
+ ├── game/
+ ├── tools/
+ └── application.blk
+
+
+
+
+

prog/

+

Contains the game’s source code, C++ files, shaders, and often configuration +files directly used by the game.

+
+
+

ui/

+

Contains scripts and configurations for the game’s user interface, focusing on +elements such as controls, layouts, and components.

+
+
+

scripts/

+

Contains script files and related resources that define and manage various game +behaviors, events, and logic.

+
+
+

gameBase/

+

Contains essential elements related to game content and virtual file system +management for projects. This directory includes:

+
    +
  • content/: A subdirectory where game assets and content files are stored. +This typically includes various game resources such as textures, models, audio +files, and other data required for the game.

  • +
  • create_vfsroms.bat: A batch script used to create virtual file system +(VFS) ROMs, which are packaged file archives that optimize the loading and +management of game assets.

  • +
  • mk.vromfs.blk: A configuration file for the VFS ROM creation process, +specifying how files should be packaged and organized within the virtual file +system.

  • +
+
+
+

develop/

+

Contains raw data, including the asset base, locations, images, and fonts for +the interface.

+
+
+

assets/

+

Assets are the building blocks of the project, used to create locations and game +objects. Key characteristics of an asset include: name, type, and +properties. The properties specify which raw data to use and how to compile it +into the final game data.

+

Examples of asset types include tex, dynModel, rendInst, composit, and +fx. For instance, texture (tex) properties might include a reference to the +source image file (typically .tif, .tga, or another standard format), the +texture format (e.g., DXT1, DXT5), and the number of mipmaps with settings for +their generation from the source image. Similarly, other asset types have unique +properties necessary for their compilation.

+

Asset Base

+

The asset base is created by scanning asset directories. This process is carried +out by all our tools that work with assets (dabuild scans and then performs +the build, AssetViewer scans, creates the asset tree, and allows viewing the +base, daEditorX scans and allows using assets from the base for editing +locations).

+

During scanning, two methods are used to define an asset:

+
    +
  1. Explicit Asset: Defined by a <ASSET_NAME>.<ASSET_TYPE>.blk file +containing the asset’s properties.

  2. +
  3. Virtual Asset: Generated based on scanning rules described in +.folder.blk files.

  4. +
+

Scanning is performed recursively, traversing all subdirectories. Each directory +may contain a .folder.blk file that specifies:

+
    +
  • Whether to scan subdirectories (default is to scan).

  • +
  • Whether to scan assets in the current directory (default is to scan).

  • +
  • Where and under what name to compile assets from the current and nested +subdirectories, and whether to do so.

  • +
  • virtual_res_blk{} blocks used to generate virtual assets for arbitrary files +found in the directory.

  • +
+
+
+

levels/

+

Contains various game levels and their corresponding assets. Each subdirectory +represents a distinct level, containing all necessary resources and +configurations to render and manage that level effectively.

+
+
+

gui(ui)/

+

Contains resources and scripts for building and managing the graphical user +interface (GUI). This directory is organized to handle font generation, UI +skinning, input configurations, and overall UI structure.

+
+
+

game/

+

The build output directory, including compiled code and assets. This is +essentially what is delivered to the players.

+
+
+

tools/

+

Contains data for tools, including shaders used for asset building and running +editors.

+
    +
  • dsc2-*: Shader compilers for different platforms, converting shader code +written in our script format + HLSL into binary format usable on various +systems (e.g., DX11, DX12, SpirV for Windows, Metal for macOS and iOS, SpirV +for Linux and Android).

  • +
  • vromfsPacker-dev.exe: Vromfs packer (virtual containers with read-only +files for quick loading and game usage, structurally similar to .zip +archives). We package vromfs to deliver 3-4 files to the player instead of +3000-4000 scattered files.

  • +
  • daBuild-dev.exe: Tool for building raw asset data into game resources. +It takes data from the asset base (develop/ folder) and after validation, +compiles it into a format suitable for loading by the game in the game/ +directory.

  • +
  • impostorBaker-dev.exe: Tool for preparing special tree view textures, +used in conjunction with dabuild, to optimize tree rendering in the game +(when a complex tree model is replaced with a simple texture that looks the +same from a certain distance).

  • +
  • assetViewer2-dev.exe: Asset viewer (and sometimes editor). Reads the +asset base, presents it as a tree (where branches are asset directories and +leaves are the assets themselves), and allows selecting an asset to view it in +a viewport window and its properties in a properties panel. Some asset types +(fx, fastPhys, composit) can be edited and saved upon exiting the +viewer, while others (animChar, physObj) can be visualized and debugged +dynamically.

  • +
  • daEditor3x-dev.exe: Location editor. Allows editing terrain, water +areas, and placing assets manually, along splines (lines), and across areas +(polygons). It can compile/export the edited location into a format suitable +for game loading (in the game/ directory).

  • +
  • csvUtil2-dev.exe: Utility for preparing language localizations from raw +data (e.g., CSV from Crowdin) into a format readable by the game. It performs +various checks (presence of translations for all languages, etc.).

  • +
+
+
+

application.blk

+

The file sets the configuration for the asset base and the location of data +directories for the editor. In application.blk, can be defined:

+
    +
  • A list of asset types used in the project.

  • +
  • A list of asset types that can be compiled into game resources using special +exporter plugins.

  • +
  • A list of root directories from which assets are scanned (the asset base).

  • +
  • A set of settings for where and how to compile assets into the game (the +game/ directory).

  • +
+
+
+
+

Samples

+

The samples directory includes example projects that demonstrate the usage of +the core engine and various game libraries. These sample projects serve as +practical references, showcasing different aspects of game development with the +Dagor Engine. They are designed to illustrate best practices and provide a +starting point for developers to build their own projects. Each sample is +carefully crafted to highlight specific features and functionalities, making it +easier for developers to learn and apply the concepts in their own work.

+
+
+

Documentation

+

The documentation directory _docs contains comprehensive guides, references, +and resources for using and developing with the Dagor Engine. It includes +detailed manuals, API documentation, and tutorials designed to help developers +understand the engine’s capabilities and best practices. This section is +essential for both new and experienced developers, providing valuable insights +into the architecture, features, and functions of the Dagor Engine.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/getting-started/how_to_access.html b/getting-started/how_to_access.html new file mode 100644 index 000000000..b38c220c9 --- /dev/null +++ b/getting-started/how_to_access.html @@ -0,0 +1,170 @@ + + + + + + + How to Access — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

How to Access

+

The Dagor Engine is available as an open-source project, with the source code +hosted in the official Dagor Engine repository on GitHub: Dagor Engine +GitHub Repository.

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/getting-started/how_to_build.html b/getting-started/how_to_build.html new file mode 100644 index 000000000..517fa5992 --- /dev/null +++ b/getting-started/how_to_build.html @@ -0,0 +1,270 @@ + + + + + + + How to Build — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

How to Build

+
+

How to Build: Environment

+

Requirements for building and using the Dagor Engine toolkit: Windows 10 +(x64), 16 GB of RAM, 200 GB of HDD/SSD space.

+ +

Create a project directory at the root of any drive (the directory name should +not contain spaces or non-Latin characters).

+
md X:\develop
+cd X:\develop
+
+
+

Clone the Dagor Engine source code and samples:

+
git clone https://github.com/GaijinEntertainment/DagorEngine.git
+cd DagorEngine
+
+
+

Run the make_devtools.py script. This script will download, install, and +configure the build toolkit. You should provide the path to the build toolkit +directory as an argument, and the script will create this directory if it +doesn’t exist.

+
python3 make_devtools.py X:\develop\devtools
+
+
+

If the script is not run as an administrator, installers of certain programs may +request permission for installation, which you should grant. If you plan to use +plugins for 3ds Max, press Y when the script asks if you want to install the +3ds Max SDK. The script will also ask to add the path X:\develop\devtools to +the PATH environment variable and set the GDEVTOOL variable to point to this +directory.

+

After the script completes its work, the X:\develop\devtools directory will be +configured with the following SDKs and tools:

+
    +
  • FidelityFX_SC – a library for image quality enhancement

  • +
  • fmod-studio-2.xx.xx [optional] – FMOD sound library

  • +
  • LLVM-15.0.7 – C/C++ compiler and libraries (Clang)

  • +
  • nasm – assembler

  • +
  • max2024.sdk3ds Max 2004 SDK

  • +
  • openxr-1.0.16 – library for AR/VR

  • +
  • vc2019_16.10.3 – C/C++ compiler and libraries (MSVC)

  • +
  • win.sdk.100 – Windows 10 SDK

  • +
  • win.sdk.81 – Windows 8.1 SDK

  • +
  • ducible.exe – a tool to make builds of Portable Executables (PEs) and PDBs +reproducible

  • +
  • pdbdump.exe – a tool for dumping the content of PDB files

  • +
  • jam.exe – a small build tool that can be used as a replacement for Make

  • +
+

Restart the command line console to make the new environment variables +available.

+
+
+

How to Build: Prebuilt Binaries

+

You will need to download and extract additional binary files from the +repository +https://github.com/GaijinEntertainment/DagorEngine/releases into the X:\develop\DagorEngine directory:

+
    +
  • samples-base.7z – contains initial assets that will be compiled into binary +files that will be loaded the game

  • +
  • samples-prebuilt-game.7z – contains precompiled assets

  • +
  • tools-prebuilt.7z – contains the prebuilt engine toolkit

  • +
+

The directory structure should look like this:

+
X:\develop\DagorEngine\tools\...
+
+X:\develop\DagorEngine\samples\skiesSample\game
+                              \skiesSample\develop
+                              \skiesSample\prog
+
+X:\develop\DagorEngine\samples\testGI\game
+                              \testGI\develop
+                              \testGI\prog
+
+
+

where

+
    +
  • prog – Game source code.

  • +
  • develop – Initial assets.

  • +
  • game – Directory where assets are placed after building and game executable +files are located.

  • +
+

More details on the directory structure here: Directory +structure.

+
+
+

How to Build: Build from Source Code

+

To build the “testGI” sample, navigate to the +X:\develop\DagorEngine\samples\testGI\prog directory and run the jam +command.

+

After building, the executable file will be placed in the testGI\game +directory.

+

Run DagorEngine/build_all.cmd to build the entire project toolkit from the +source code. This process may take a considerable amount of time.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/getting-started/how_to_contribute.html b/getting-started/how_to_contribute.html new file mode 100644 index 000000000..a1a4e1333 --- /dev/null +++ b/getting-started/how_to_contribute.html @@ -0,0 +1,194 @@ + + + + + + + Contributing — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Contributing

+

As an open-source project, contributions to the Dagor Engine are welcome. If +you would like to contribute, please follow the steps outlined below:

+
    +
  1. Fork the Repository:

    +

    Create a fork of the Dagor Engine repository on GitHub to have your own +copy where you can make changes.

    +
  2. +
  3. Create a New Branch:

    +

    Create a new branch for your feature or bug fix:

    +
    git checkout -b feature-name
    +
    +
    +
  4. +
  5. Make Changes and Commit:

    +

    Make your desired changes, then commit them to your branch:

    +
    git commit -m "Description of the changes"
    +
    +
    +
  6. +
  7. Push and Submit a Pull Request:

    +

    Push your changes to your forked repository and submit a pull request to the +original Dagor Engine repository for review.

    +
    git push origin feature-name
    +
    +
    +
  8. +
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/getting-started/index.html b/getting-started/index.html new file mode 100644 index 000000000..02b14935e --- /dev/null +++ b/getting-started/index.html @@ -0,0 +1,177 @@ + + + + + + + Getting Started with Dagor — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Getting Started with Dagor

+

How to set up and start developing with the Dagor Engine.

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/getting-started/license.html b/getting-started/license.html new file mode 100644 index 000000000..6e85dd89f --- /dev/null +++ b/getting-started/license.html @@ -0,0 +1,329 @@ + + + + + + + License Information — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

License Information

+
+

BSD 3-Clause License

+

Dagor Engine

+

BSD 3-Clause License

+

Copyright © 2023, Gaijin Entertainment +All rights reserved.

+

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. +
  3. 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.

  4. +
  5. Neither the name of the copyright holder nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission.

  6. +
+

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.

+
+ + +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 000000000..2e1120d71 --- /dev/null +++ b/index.html @@ -0,0 +1,223 @@ + + + + + + + Dagor Documentation — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 000000000..198c94205 Binary files /dev/null and b/objects.inv differ diff --git a/samples/index.html b/samples/index.html new file mode 100644 index 000000000..8e400d4c6 --- /dev/null +++ b/samples/index.html @@ -0,0 +1,160 @@ + + + + + + + Samples — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Samples

+

Sample projects to understand and implement the Dagor Engine’s features.

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 000000000..6c12b7c16 --- /dev/null +++ b/search.html @@ -0,0 +1,159 @@ + + + + + + Search — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+

© Copyright Gaijin Entertainment 2024. + Last updated on Dec 03, 2024. +

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 000000000..e2fc50f57 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["api-references/dagor-dshl/index", "api-references/dagor-dshl/index/basic-concepts", "api-references/dagor-dshl/index/basic-concepts/conditionals", "api-references/dagor-dshl/index/basic-concepts/data-types", "api-references/dagor-dshl/index/basic-concepts/error", "api-references/dagor-dshl/index/basic-concepts/hardware", "api-references/dagor-dshl/index/basic-concepts/includes", "api-references/dagor-dshl/index/basic-concepts/intervals", "api-references/dagor-dshl/index/basic-concepts/macros", "api-references/dagor-dshl/index/channels", "api-references/dagor-dshl/index/directives", "api-references/dagor-dshl/index/global-constants", "api-references/dagor-dshl/index/intrinsics", "api-references/dagor-dshl/index/introduction", "api-references/dagor-dshl/index/keywords", "api-references/dagor-dshl/index/materials", "api-references/dagor-dshl/index/pipeline-states", "api-references/dagor-dshl/index/shaders", "api-references/dagor-ecs/dagor_ecs", "api-references/dagor-ecs/index", "api-references/dagor-ecs/schemeful_events", "api-references/dagor-engine-docs/index", "api-references/dagor-engine-docs/picture_image/Image", "api-references/dagor-engine-docs/picture_image/PictureManager", "api-references/dagor-engine-docs/picture_image/index", "api-references/dagor-render/index", "api-references/dagor-render/index/d3dAPI", "api-references/dagor-render/index/d3dAPI/Barrier", "api-references/dagor-render/index/d3dAPI/Bindless", "api-references/dagor-render/index/d3dAPI/Buffers", "api-references/dagor-render/index/d3dAPI/Command", "api-references/dagor-render/index/d3dAPI/Dispatch", "api-references/dagor-render/index/d3dAPI/DispatchMesh", "api-references/dagor-render/index/d3dAPI/Draw", "api-references/dagor-render/index/d3dAPI/Heap", "api-references/dagor-render/index/d3dAPI/Info", "api-references/dagor-render/index/d3dAPI/Lock", "api-references/dagor-render/index/d3dAPI/MatricesAndPerspective", "api-references/dagor-render/index/d3dAPI/Query", "api-references/dagor-render/index/d3dAPI/RenderPass", "api-references/dagor-render/index/d3dAPI/RenderState", "api-references/dagor-render/index/d3dAPI/RenderTarget", "api-references/dagor-render/index/d3dAPI/ResUpdateBuffer", "api-references/dagor-render/index/d3dAPI/Resource", "api-references/dagor-render/index/d3dAPI/RwResource", "api-references/dagor-render/index/d3dAPI/Sampler", "api-references/dagor-render/index/d3dAPI/Shader", "api-references/dagor-render/index/d3dAPI/ShaderConstants", "api-references/dagor-render/index/d3dAPI/TiledResource", "api-references/dagor-render/index/d3dAPI/VariableRateShading", "api-references/dagor-render/index/d3dAPI/VertexIndexBuffer", "api-references/dagor-render/index/d3dAPI/ViewScissor", "api-references/dagor-render/index/d3dAPI/constants", "api-references/dagor-render/index/d3dAPI/other", "api-references/dagor-render/index/d3dAPI/textures", "api-references/dagor-render/index/d3dHelpers", "api-references/dagor-render/index/d3dHelpers/multidrawContext", "api-references/dagor-render/index/daBFG", "api-references/dagor-render/index/daBFG/bfg_ecs", "api-references/dagor-render/index/daBFG/core", "api-references/dagor-render/index/daBFG/daBfgCore", "api-references/dagor-render/index/daBFG/das", "api-references/dagor-render/index/daBFG/declaringNodes", "api-references/dagor-render/index/daBFG/graphState", "api-references/dagor-render/index/daBFG/runtime", "api-references/dagor-render/index/resMgr", "api-references/dagor-render/index/resMgr/general", "api-references/dagor-render/index/resMgr/resid", "api-references/dagor-render/index/resMgr/textures", "api-references/dagor-render/index/resourceSlot", "api-references/dagor-render/index/resourceSlot/ResourceSlotCore", "api-references/dagor-render/index/resourceSlot/nodeHandleWithSlotsAccess", "api-references/dagor-render/index/resourceSlot/registerAccess", "api-references/dagor-render/index/resourceSlot/resolveAccess", "api-references/dagor-render/index/resourceSlot/resource_slot_das", "api-references/dagor-render/index/resourceSlot/resource_slot_ecs", "api-references/index", "api-references/quirrel-modules/dargbox/gamelib.input", "api-references/quirrel-modules/dargbox/index", "api-references/quirrel-modules/index", "api-references/quirrel-modules/quirrel-modules/daNetGame/control", "api-references/quirrel-modules/quirrel-modules/daNetGame/index", "api-references/quirrel-modules/quirrel-modules/daNetGame/net", "api-references/quirrel-modules/quirrel-modules/daNetGame/settings", "api-references/quirrel-modules/quirrel-modules/daNetGame/videomode", "api-references/quirrel-modules/quirrel-modules/daNetGameLibs/gpuBenchmark", "api-references/quirrel-modules/quirrel-modules/daNetGameLibs/index", "api-references/quirrel-modules/quirrel-modules/darg_framework/daRg", "api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.debug", "api-references/quirrel-modules/quirrel-modules/darg_framework/index", "api-references/quirrel-modules/quirrel-modules/darg_framework/renderCanvas", "api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs", "api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.netevent", "api-references/quirrel-modules/quirrel-modules/quirrel_daECS/index", "api-references/quirrel-modules/quirrel-modules/quirrel_daECS/net", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/DataBlock", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/base64", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/browser", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/console", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daEditorEmbedded", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.debug", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dacoll.trace", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.clipboard", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.debug", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.folders", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.vrom", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.http", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.iso8601", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.localize", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.math", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.memtrace", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.perf", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.profiler", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.random", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.shell", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.file_handlers", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.time", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.workcycle", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dainput2", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dasevents", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/datacache", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.netevent", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/entity_editor", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/eventbus", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/executable", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/frp", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/hash", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/index", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/json", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/jwt", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/modules", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/nestdb", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/net", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/pathfinder", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/platform", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/regexp2", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/renderCanvas", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sound", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/statsd", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sysinfo", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/utf8", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/win.registry", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/yupfile_parse", "api-references/quirrel-modules/quirrel-modules/soundSystem/index", "api-references/quirrel-modules/quirrel-modules/soundSystem/sound", "assets/about-assets/about_assets", "assets/about-assets/how-to-test-assets-on-maps/how_to_test_assets_on_maps", "assets/about-assets/how-to-test-assets-on-maps/index", "assets/about-assets/index", "assets/about-assets/ladders/climbable_ladders", "assets/about-assets/ladders/index", "assets/about-assets/ladders/navmesh_gen_vert_ladders", "assets/about-assets/occluder/index", "assets/about-assets/occluder/occluder_box", "assets/all-about-blk/application_blk", "assets/all-about-blk/composit_blk", "assets/all-about-blk/config_and_settings_blk", "assets/all-about-blk/folder_blk", "assets/all-about-blk/index", "assets/all-about-blk/skeleton_blk", "assets/all-about-blk/spline_blk", "assets/animations/animation_export", "assets/animations/index", "assets/index", "assets/lighting/adding_light_fixtures_to_building_composites", "assets/lighting/flickering_lights", "assets/lighting/index", "assets/lighting/lighting_catalog", "assets/lighting/lights", "assets/lighting/lights_creation_guide", "assets/lighting/photometric_lights", "assets/lighting/replacing_or_modifying_lights", "assets/materials/index", "assets/materials/proxymats", "assets/shaders/dng-shaders/dynamic_painted_by_mask", "assets/shaders/dng-shaders/index", "assets/shaders/dng-shaders/land_mesh_height_decal", "assets/shaders/dng-shaders/rendinst_blend_diffuse_decal", "assets/shaders/dng-shaders/rendinst_blend_normal_decal", "assets/shaders/dng-shaders/rendinst_deferred_decal", "assets/shaders/dng-shaders/rendinst_deferred_modulate2x_decal", "assets/shaders/dng-shaders/rendinst_emissive", "assets/shaders/dng-shaders/rendinst_flag_colored", "assets/shaders/dng-shaders/rendinst_flag_layered", "assets/shaders/dng-shaders/rendinst_mask_layered", "assets/shaders/dng-shaders/rendinst_modulate2x_diffuse_decal", "assets/shaders/dng-shaders/rendinst_refraction", "assets/shaders/dng-shaders/rendinst_simple", "assets/shaders/dng-shaders/rendinst_simple_emissive_anim", "assets/shaders/dng-shaders/rendinst_simple_glass", "assets/shaders/dng-shaders/rendinst_simple_painted", "assets/shaders/dng-shaders/rendinst_tree_colored", "assets/shaders/dng-shaders/rendinst_tree_perlin_layered", "assets/shaders/dng-shaders/rendinst_vcolor_layered", "assets/shaders/index", "assets/shaders/land_mesh_combined_decal_family", "assets/shaders/rendinst_interior_mapping", "assets/shaders/rendinst_layered", "assets/shaders/rendinst_layered_family", "assets/shaders/rendinst_layered_lightmap", "assets/shaders/rendinst_parallax_ice", "assets/shaders/rendinst_perlin_layered", "assets/shaders/rendinst_simple_emissive", "assets/shaders/simple_aces_detailed", "dagor-home/dagor_engine", "dagor-home/documentation/contributing_to_docs", "dagor-home/documentation/how_to_build_docs_locally", "dagor-home/documentation/index", "dagor-home/documentation/qdox-user-guide/index", "dagor-home/documentation/qdox-user-guide/qdox", "dagor-home/documentation/qdox-user-guide/rst-cheatsheet", "dagor-home/index", "dagor-tools/addons/3ds-max/dagor-max-tools/dagor_max_tools", "dagor-tools/addons/3ds-max/dagor-max-tools/index", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/ambient_occlusion_baker", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/check_degenerated_faces_tool", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/custom_groups_export_tool", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/editing_normals_tool", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fix_normal_orientation_tool", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fixing_illegal_characters", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/index", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/installation", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/lods_and_collisions_generator", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/pivot_painter_vegetation_tool", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/simple_cmp_editor", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/transfer_vertex_position_to_vertex_color_tool", "dagor-tools/addons/3ds-max/dagormat/dagormat", "dagor-tools/addons/3ds-max/dagormat/index", "dagor-tools/addons/3ds-max/index", "dagor-tools/addons/blender/dag4blend-comp-editor/dag4blend_comp_editor", "dagor-tools/addons/blender/dag4blend-comp-editor/index", "dagor-tools/addons/blender/dag4blend-texture-baker/dag4blend_texture_baker", "dagor-tools/addons/blender/dag4blend-texture-baker/index", "dagor-tools/addons/blender/dag4blend/dag4blend", "dagor-tools/addons/blender/dag4blend/index", "dagor-tools/addons/blender/index", "dagor-tools/addons/index", "dagor-tools/asset-viewer/asset-viewer-comp-editor/asset_viewer_comp_editor", "dagor-tools/asset-viewer/asset-viewer-comp-editor/index", "dagor-tools/asset-viewer/asset-viewer/asset_viewer", "dagor-tools/asset-viewer/asset-viewer/index", "dagor-tools/asset-viewer/collision-generation/collision_generation_for_assets", "dagor-tools/asset-viewer/collision-generation/index", "dagor-tools/asset-viewer/index", "dagor-tools/blk/blk", "dagor-tools/blk/index", "dagor-tools/daeditor/daeditor-console-commands/daeditor_console_commands", "dagor-tools/daeditor/daeditor-console-commands/index", "dagor-tools/daeditor/daeditor/daeditor", "dagor-tools/daeditor/daeditor/index", "dagor-tools/daeditor/index", "dagor-tools/daeditor/navmesh/index", "dagor-tools/daeditor/navmesh/navmesh", "dagor-tools/daeditor/splines_in_daeditor", "dagor-tools/dag2rires/dag2rires", "dagor-tools/dag2rires/index", "dagor-tools/impostor-baker/impostor_baker", "dagor-tools/impostor-baker/index", "dagor-tools/index", "dagor-tools/levels-deps/index", "dagor-tools/levels-deps/levels_deps", "dagor-tools/resource-building/index", "dagor-tools/resource-building/packages", "dagor-tools/resource-building/resource_building", "dagor-tools/resource-building/vromfs", "dagor-tools/substance-designer/index", "dagor-tools/substance-designer/substance_designer", "danetgame-framework/daNetGame/index", "danetgame-framework/index", "getting-started/directory_structure", "getting-started/how_to_access", "getting-started/how_to_build", "getting-started/how_to_contribute", "getting-started/index", "getting-started/license", "index", "samples/index", "tutorials/create-mission-wt/create_mission_wt", "tutorials/create-mission-wt/index", "tutorials/dng-non-human-char/dng_non_human_char", "tutorials/dng-non-human-char/index", "tutorials/index", "tutorials/wt-designing-vehicle-deformations/index", "tutorials/wt-designing-vehicle-deformations/wt_designing_vehicle_deformations"], "filenames": ["api-references/dagor-dshl/index.rst", "api-references/dagor-dshl/index/basic-concepts.rst", "api-references/dagor-dshl/index/basic-concepts/conditionals.rst", "api-references/dagor-dshl/index/basic-concepts/data-types.rst", "api-references/dagor-dshl/index/basic-concepts/error.rst", "api-references/dagor-dshl/index/basic-concepts/hardware.rst", "api-references/dagor-dshl/index/basic-concepts/includes.rst", "api-references/dagor-dshl/index/basic-concepts/intervals.rst", "api-references/dagor-dshl/index/basic-concepts/macros.rst", "api-references/dagor-dshl/index/channels.rst", "api-references/dagor-dshl/index/directives.rst", "api-references/dagor-dshl/index/global-constants.rst", "api-references/dagor-dshl/index/intrinsics.rst", "api-references/dagor-dshl/index/introduction.rst", "api-references/dagor-dshl/index/keywords.rst", "api-references/dagor-dshl/index/materials.rst", "api-references/dagor-dshl/index/pipeline-states.rst", "api-references/dagor-dshl/index/shaders.rst", "api-references/dagor-ecs/dagor_ecs.md", "api-references/dagor-ecs/index.rst", "api-references/dagor-ecs/schemeful_events.md", "api-references/dagor-engine-docs/index.rst", "api-references/dagor-engine-docs/picture_image/Image.rst", "api-references/dagor-engine-docs/picture_image/PictureManager.rst", "api-references/dagor-engine-docs/picture_image/index.rst", "api-references/dagor-render/index.rst", "api-references/dagor-render/index/d3dAPI.rst", "api-references/dagor-render/index/d3dAPI/Barrier.rst", "api-references/dagor-render/index/d3dAPI/Bindless.rst", "api-references/dagor-render/index/d3dAPI/Buffers.rst", "api-references/dagor-render/index/d3dAPI/Command.rst", "api-references/dagor-render/index/d3dAPI/Dispatch.rst", "api-references/dagor-render/index/d3dAPI/DispatchMesh.rst", "api-references/dagor-render/index/d3dAPI/Draw.rst", "api-references/dagor-render/index/d3dAPI/Heap.rst", "api-references/dagor-render/index/d3dAPI/Info.rst", "api-references/dagor-render/index/d3dAPI/Lock.rst", "api-references/dagor-render/index/d3dAPI/MatricesAndPerspective.rst", "api-references/dagor-render/index/d3dAPI/Query.rst", "api-references/dagor-render/index/d3dAPI/RenderPass.rst", "api-references/dagor-render/index/d3dAPI/RenderState.rst", "api-references/dagor-render/index/d3dAPI/RenderTarget.rst", "api-references/dagor-render/index/d3dAPI/ResUpdateBuffer.rst", "api-references/dagor-render/index/d3dAPI/Resource.rst", "api-references/dagor-render/index/d3dAPI/RwResource.rst", "api-references/dagor-render/index/d3dAPI/Sampler.rst", "api-references/dagor-render/index/d3dAPI/Shader.rst", "api-references/dagor-render/index/d3dAPI/ShaderConstants.rst", "api-references/dagor-render/index/d3dAPI/TiledResource.rst", "api-references/dagor-render/index/d3dAPI/VariableRateShading.rst", "api-references/dagor-render/index/d3dAPI/VertexIndexBuffer.rst", "api-references/dagor-render/index/d3dAPI/ViewScissor.rst", "api-references/dagor-render/index/d3dAPI/constants.rst", "api-references/dagor-render/index/d3dAPI/other.rst", "api-references/dagor-render/index/d3dAPI/textures.rst", "api-references/dagor-render/index/d3dHelpers.rst", "api-references/dagor-render/index/d3dHelpers/multidrawContext.rst", "api-references/dagor-render/index/daBFG.rst", "api-references/dagor-render/index/daBFG/bfg_ecs.rst", "api-references/dagor-render/index/daBFG/core.rst", "api-references/dagor-render/index/daBFG/daBfgCore.rst", "api-references/dagor-render/index/daBFG/das.rst", "api-references/dagor-render/index/daBFG/declaringNodes.rst", "api-references/dagor-render/index/daBFG/graphState.rst", "api-references/dagor-render/index/daBFG/runtime.rst", "api-references/dagor-render/index/resMgr.rst", "api-references/dagor-render/index/resMgr/general.rst", "api-references/dagor-render/index/resMgr/resid.rst", "api-references/dagor-render/index/resMgr/textures.rst", "api-references/dagor-render/index/resourceSlot.rst", "api-references/dagor-render/index/resourceSlot/ResourceSlotCore.rst", "api-references/dagor-render/index/resourceSlot/nodeHandleWithSlotsAccess.rst", "api-references/dagor-render/index/resourceSlot/registerAccess.rst", "api-references/dagor-render/index/resourceSlot/resolveAccess.rst", "api-references/dagor-render/index/resourceSlot/resource_slot_das.rst", "api-references/dagor-render/index/resourceSlot/resource_slot_ecs.rst", "api-references/index.rst", "api-references/quirrel-modules/dargbox/gamelib.input.rst", "api-references/quirrel-modules/dargbox/index.rst", "api-references/quirrel-modules/index.rst", "api-references/quirrel-modules/quirrel-modules/daNetGame/control.rst", "api-references/quirrel-modules/quirrel-modules/daNetGame/index.rst", "api-references/quirrel-modules/quirrel-modules/daNetGame/net.rst", "api-references/quirrel-modules/quirrel-modules/daNetGame/settings.rst", "api-references/quirrel-modules/quirrel-modules/daNetGame/videomode.rst", "api-references/quirrel-modules/quirrel-modules/daNetGameLibs/gpuBenchmark.rst", "api-references/quirrel-modules/quirrel-modules/daNetGameLibs/index.rst", "api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.rst", "api-references/quirrel-modules/quirrel-modules/darg_framework/daRg.debug.rst", "api-references/quirrel-modules/quirrel-modules/darg_framework/index.rst", "api-references/quirrel-modules/quirrel-modules/darg_framework/renderCanvas.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_daECS/ecs.netevent.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_daECS/index.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_daECS/net.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/DataBlock.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/base64.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/browser.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/console.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daEditorEmbedded.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/daRg.debug.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dacoll.trace.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.clipboard.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.debug.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.folders.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.fs.vrom.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.http.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.iso8601.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.localize.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.math.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.memtrace.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.perf.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.profiler.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.random.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.shell.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.system.file_handlers.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.time.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dagor.workcycle.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dainput2.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/dasevents.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/datacache.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/ecs.netevent.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/entity_editor.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/eventbus.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/executable.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/frp.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/hash.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/index.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/json.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/jwt.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/modules.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/nestdb.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/net.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/pathfinder.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/platform.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/regexp2.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/renderCanvas.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sound.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/statsd.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/sysinfo.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/utf8.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/win.registry.rst", "api-references/quirrel-modules/quirrel-modules/quirrel_gamelibs/yupfile_parse.rst", "api-references/quirrel-modules/quirrel-modules/soundSystem/index.rst", "api-references/quirrel-modules/quirrel-modules/soundSystem/sound.rst", "assets/about-assets/about_assets.md", "assets/about-assets/how-to-test-assets-on-maps/how_to_test_assets_on_maps.md", "assets/about-assets/how-to-test-assets-on-maps/index.rst", "assets/about-assets/index.rst", "assets/about-assets/ladders/climbable_ladders.md", "assets/about-assets/ladders/index.rst", "assets/about-assets/ladders/navmesh_gen_vert_ladders.md", "assets/about-assets/occluder/index.rst", "assets/about-assets/occluder/occluder_box.md", "assets/all-about-blk/application_blk.md", "assets/all-about-blk/composit_blk.md", "assets/all-about-blk/config_and_settings_blk.md", "assets/all-about-blk/folder_blk.md", "assets/all-about-blk/index.rst", "assets/all-about-blk/skeleton_blk.md", "assets/all-about-blk/spline_blk.md", "assets/animations/animation_export.md", "assets/animations/index.rst", "assets/index.rst", "assets/lighting/adding_light_fixtures_to_building_composites.md", "assets/lighting/flickering_lights.md", "assets/lighting/index.rst", "assets/lighting/lighting_catalog.md", "assets/lighting/lights.md", "assets/lighting/lights_creation_guide.md", "assets/lighting/photometric_lights.md", "assets/lighting/replacing_or_modifying_lights.md", "assets/materials/index.rst", "assets/materials/proxymats.md", "assets/shaders/dng-shaders/dynamic_painted_by_mask.md", "assets/shaders/dng-shaders/index.rst", "assets/shaders/dng-shaders/land_mesh_height_decal.md", "assets/shaders/dng-shaders/rendinst_blend_diffuse_decal.md", "assets/shaders/dng-shaders/rendinst_blend_normal_decal.md", "assets/shaders/dng-shaders/rendinst_deferred_decal.md", "assets/shaders/dng-shaders/rendinst_deferred_modulate2x_decal.md", "assets/shaders/dng-shaders/rendinst_emissive.md", "assets/shaders/dng-shaders/rendinst_flag_colored.md", "assets/shaders/dng-shaders/rendinst_flag_layered.md", "assets/shaders/dng-shaders/rendinst_mask_layered.md", "assets/shaders/dng-shaders/rendinst_modulate2x_diffuse_decal.md", "assets/shaders/dng-shaders/rendinst_refraction.md", "assets/shaders/dng-shaders/rendinst_simple.md", "assets/shaders/dng-shaders/rendinst_simple_emissive_anim.md", "assets/shaders/dng-shaders/rendinst_simple_glass.md", "assets/shaders/dng-shaders/rendinst_simple_painted.md", "assets/shaders/dng-shaders/rendinst_tree_colored.md", "assets/shaders/dng-shaders/rendinst_tree_perlin_layered.md", "assets/shaders/dng-shaders/rendinst_vcolor_layered.md", "assets/shaders/index.rst", "assets/shaders/land_mesh_combined_decal_family.md", "assets/shaders/rendinst_interior_mapping.md", "assets/shaders/rendinst_layered.md", "assets/shaders/rendinst_layered_family.md", "assets/shaders/rendinst_layered_lightmap.md", "assets/shaders/rendinst_parallax_ice.md", "assets/shaders/rendinst_perlin_layered.md", "assets/shaders/rendinst_simple_emissive.md", "assets/shaders/simple_aces_detailed.md", "dagor-home/dagor_engine.md", "dagor-home/documentation/contributing_to_docs.md", "dagor-home/documentation/how_to_build_docs_locally.md", "dagor-home/documentation/index.rst", "dagor-home/documentation/qdox-user-guide/index.rst", "dagor-home/documentation/qdox-user-guide/qdox.rst", "dagor-home/documentation/qdox-user-guide/rst-cheatsheet.rst", "dagor-home/index.rst", "dagor-tools/addons/3ds-max/dagor-max-tools/dagor_max_tools.md", "dagor-tools/addons/3ds-max/dagor-max-tools/index.rst", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/ambient_occlusion_baker.md", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/check_degenerated_faces_tool.md", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/custom_groups_export_tool.md", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/damages_setup_tool.md", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/editing_normals_tool.md", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fast_editor_user_properties.md", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fix_normal_orientation_tool.md", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/fixing_illegal_characters.md", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/index.rst", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/installation.md", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/lods_and_collisions_generator.md", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/pivot_painter_vegetation_tool.md", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/simple_cmp_editor.md", "dagor-tools/addons/3ds-max/dagor2-3ds-max-tools/transfer_vertex_position_to_vertex_color_tool.md", "dagor-tools/addons/3ds-max/dagormat/dagormat.md", "dagor-tools/addons/3ds-max/dagormat/index.rst", "dagor-tools/addons/3ds-max/index.rst", "dagor-tools/addons/blender/dag4blend-comp-editor/dag4blend_comp_editor.md", "dagor-tools/addons/blender/dag4blend-comp-editor/index.rst", "dagor-tools/addons/blender/dag4blend-texture-baker/dag4blend_texture_baker.md", "dagor-tools/addons/blender/dag4blend-texture-baker/index.rst", "dagor-tools/addons/blender/dag4blend/dag4blend.md", "dagor-tools/addons/blender/dag4blend/index.rst", "dagor-tools/addons/blender/index.rst", "dagor-tools/addons/index.rst", "dagor-tools/asset-viewer/asset-viewer-comp-editor/asset_viewer_comp_editor.md", "dagor-tools/asset-viewer/asset-viewer-comp-editor/index.rst", "dagor-tools/asset-viewer/asset-viewer/asset_viewer.md", "dagor-tools/asset-viewer/asset-viewer/index.rst", "dagor-tools/asset-viewer/collision-generation/collision_generation_for_assets.md", "dagor-tools/asset-viewer/collision-generation/index.rst", "dagor-tools/asset-viewer/index.rst", "dagor-tools/blk/blk.md", "dagor-tools/blk/index.rst", "dagor-tools/daeditor/daeditor-console-commands/daeditor_console_commands.md", "dagor-tools/daeditor/daeditor-console-commands/index.rst", "dagor-tools/daeditor/daeditor/daeditor.md", "dagor-tools/daeditor/daeditor/index.rst", "dagor-tools/daeditor/index.rst", "dagor-tools/daeditor/navmesh/index.rst", "dagor-tools/daeditor/navmesh/navmesh.md", "dagor-tools/daeditor/splines_in_daeditor.md", "dagor-tools/dag2rires/dag2rires.md", "dagor-tools/dag2rires/index.rst", "dagor-tools/impostor-baker/impostor_baker.md", "dagor-tools/impostor-baker/index.rst", "dagor-tools/index.rst", "dagor-tools/levels-deps/index.rst", "dagor-tools/levels-deps/levels_deps.md", "dagor-tools/resource-building/index.rst", "dagor-tools/resource-building/packages.md", "dagor-tools/resource-building/resource_building.md", "dagor-tools/resource-building/vromfs.md", "dagor-tools/substance-designer/index.rst", "dagor-tools/substance-designer/substance_designer.md", "danetgame-framework/daNetGame/index.rst", "danetgame-framework/index.rst", "getting-started/directory_structure.md", "getting-started/how_to_access.md", "getting-started/how_to_build.md", "getting-started/how_to_contribute.md", "getting-started/index.rst", "getting-started/license.md", "index.rst", "samples/index.rst", "tutorials/create-mission-wt/create_mission_wt.md", "tutorials/create-mission-wt/index.rst", "tutorials/dng-non-human-char/dng_non_human_char.md", "tutorials/dng-non-human-char/index.rst", "tutorials/index.rst", "tutorials/wt-designing-vehicle-deformations/index.rst", "tutorials/wt-designing-vehicle-deformations/wt_designing_vehicle_deformations.md"], "titles": ["Dagor Shading Language (DSHL) docs", "Basic Concepts", "Conditionals", "Data types and variables", "Throwing compilation errors", "Hardware defines", "Includes", "Intervals", "Macros", "Channels", "Common directives", "Global constants", "Intrinsics", "Introduction", "Keywords", "Materials", "Pipeline state configuration", "Shaders", "Dagor ECS", "Dagor ECS", "Schemeful Events (daScript, Quirrel, C++, Net)", "Engine Libraries Docs", "Image", "PictureManager", "Dagor Engine Libraries", "Dagor Engine Render", "D3D API", "Barriers", "Bindless resources API", "Buffers", "Driver commands", "Compute shader dispatch API", "Mesh shader dispatch API", "Draw calls API", "Heaps", "Driver info API", "GPU related locks", "D3D API for work with matrices and perspective object", "Queries", "RenderPass", "Render State", "Render Targets", "Resource update buffers", "Resources", "Read/Write (UAV) resources", "Samplers", "Shader programs", "Shader constants and const buffers", "Tiled Resource", "Variable rate shading API", "Vertex and Index buffer API", "View and Scissor d3d API", "Constants, Structures and Enumerations", "All other methods", "Textures", "Helper classes for D3D API", "MultidrawContext", "daBFG API", "Bfg in das+ecs", "Core Functions", "DaBfgCore das module", "Bfg in das", "Declaring a Node", "Controlling the Graph State", "Dispatching Work in Nodes at Runtime", "Managed Resources", "General Resource Management", "Resource IDs", "Texture Management", "Resource slots", "ResourceSlotCore das module", "Node and slot access handle", "Register request for access to slots storage", "Perform access requests", "Resource slot in das", "Resource slot in das+ecs", "API References and Documentation", "gamelib.input", "dargbox", "Quirrel Modules Docs", "control", "daNetGame", "net", "settings", "videomode", "gpuBenchmark", "daNetGameLibs", "daRg", "daRg.debug", "daRg framework", "renderCanvas", "ecs", "ecs.netevent", "Quirrel ECS", "net", "DataBlock", "base64", "browser", "console", "daEditorEmbedded", "daRg", "daRg.debug", "dacoll.trace", "dagor.clipboard", "dagor.debug", "dagor.folders", "dagor.fs", "dagor.fs.vrom", "dagor.http", "dagor.iso8601", "dagor.localize", "dagor.math", "dagor.memtrace", "dagor.perf", "dagor.profiler", "dagor.random", "dagor.shell", "dagor.system", "dagor.system.file_handlers", "dagor.time", "dagor.workcycle", "dainput2", "dasevents", "datacache", "ecs", "ecs.netevent", "entity_editor", "eventbus", "executable", "frp", "hash", "Quirrel Gamelibs Native Modules", "json", "jwt", "modules", "nestdb", "net", "pathfinder", "platform", "regexp2", "renderCanvas", "sound", "statsd", "sysinfo", "utf8", "win.registry", "yupfile_parse", "soundSystem", "sound", "Introduction to Assets", "How to Test Assets on Maps (Basic Workflow)", "How to Test Assets on Maps", "Assets", "Climbable Ladders", "Ladders", "Infantry NavMesh Generation for Vertical Ladders", "Occluder Box", "Occluder Box", "application.blk", ".composit.blk", ".config.blk and .settings.blk", ".folder.blk", "All about .blk", ".skeleton.blk", "spline.blk", "Animation Export", "Animations", "Assets and Assets Management", "Adding Light Fixtures to Building Composites", "Flickering Lights", "Lighting", "Lighting Catalog", "Lights", "Lights Creation Guide", "Photometric Lights (IES)", "Replacing or Modifying Lights in Props", "Materials", "Proxymats", "Shader: dynamic_painted_by_mask", "daNetGame-Based Shaders", "Shader: land_mesh_height_decal", "Shader: rendinst_blend_diffuse_decal", "Shader: rendinst_blend_normal_decal", "Shader: rendinst_deferred_decal", "Shader: rendinst_deferred_modulate2x_decal", "Shader: rendinst_emissive", "Shader: rendinst_flag_colored", "Shader: rendinst_flag_layered", "Shader: rendinst_mask_layered", "Shader: rendinst_modulate2x_diffuse_decal", "Shader: rendinst_refraction", "Shader: rendinst_simple / simple_aces", "Shader: rendinst_simple_emissive_anim / dynamic_illum_anim", "Shader: rendinst_simple_glass", "Shader: rendinst_simple_painted", "Shader: rendinst_tree_colored", "Shader: rendinst_tree_perlin_layered", "Shader: rendinst_vcolor_layered", "Shaders", "Shader Family: land_mesh_combined_decal", "Shader: rendinst_interior_mapping", "Shader: rendinst_layered", "Shader Family: rendinst_layered", "Shader: rendinst_layered_lightmap", "Shader: rendinst_parallax_ice", "Shader: rendinst_perlin_layered", "Shader: rendinst_simple_emissive", "Shader: simple_aces_detailed", "Introduction", "Contributing to Documentation", "How to Build Documentation Locally", "Documentation", "Qdox User Guide", "QDox, writing your documentation", "RST CheatSheet", "Dagor Home", "Dagor Max Tools", "Dagor Max Tools", "Dagor 2 Ambient Occlusion Baker", "Dagor 2 Check Degenerated Faces Tool", "Dagor 2 Custom Groups Export Tool", "Dagor 2 Damages Setup Tool", "Dagor Editing Normals Tool", "Dagor 2 Fast Editor User Properties", "Dagor 2 Fix Normal Orientation Tool", "Dagor 2 Fixing Illegal Characters Tool", "Dagor 2 3ds Max Tools", "Installation", "Dagor 2 LODs and Collisions Generator", "Dagor 2 Pivot Painter Vegetation Tool", "Dagor 2 Simple CMP Editor", "Dagor 2 Transfer Vertex Position to Vertex Color Tool", "DagorMat", "DagorMat", "Add-ons for 3ds Max", "dag4blend Composite Editor", "dag4blend Composite Editor", "dag4blend Texture Baker", "dag4blend Texture Baker", "dag4blend", "dag4blend", "Add-ons for Blender", "Add-ons for Blender and 3ds Max", "Overview", "Asset Viewer Composite Editor", "Overview", "Asset Viewer", "Collision Generation for Assets in Asset Viewer", "Collision Generation for Assets", "Asset Viewer", ".blk File Format", ".blk Format", "Overview", "daEditor Console Commands", "Overview", "daEditor", "daEditor", "Navigation Mesh", "Navigation Mesh", "Splines in daEditor", "Overview", "dag2riRes", "Overview", "Impostor Baker", "Dagor Tools", "levels.deps", "levels.deps", "Resource Building", "Packages", "Resource Building: daBuild, build, vromfs, levels, settings.blk", "Vromfs", "Substance Designer", "Substance Designer Mip Generator", "DaNetGame Framework", "DaNetGame Framework", "Directory Structure Overview", "How to Access", "How to Build", "Contributing", "Getting Started with Dagor", "License Information", "Dagor Documentation", "Samples", "Creating a Mission (War Thunder)", "Creating a Mission (War Thunder)", "Non-Human Character: Step-by-Step Guide", "Non-Human Character: Step-by-Step Guide", "Tutorials and Manuals", "Designing Vehicle Deformations", "Designing Vehicle Deformations"], "terms": {"introduct": [0, 76, 152, 167, 215, 281], "basic": [0, 3, 9, 17, 19, 20, 34, 52, 59, 62, 76, 151, 152, 159, 169, 186, 191, 194, 195, 198, 200, 201, 206, 212, 228, 246, 247, 249, 255, 256, 286], "concept": [0, 19, 76, 197, 201, 270, 275, 285, 288], "condit": [0, 1, 7, 15, 18, 36, 52, 53, 155, 164, 169, 192, 205, 208, 280, 285], "data": [0, 1, 9, 13, 17, 20, 27, 29, 31, 33, 34, 41, 42, 45, 46, 47, 54, 57, 60, 62, 64, 68, 83, 91, 98, 108, 124, 157, 158, 165, 169, 172, 174, 197, 208, 231, 235, 245, 247, 250, 252, 258, 262, 266, 269, 270, 275, 280, 289], "type": [0, 1, 9, 17, 18, 20, 27, 28, 29, 33, 34, 35, 38, 39, 44, 45, 52, 54, 56, 57, 58, 59, 62, 63, 64, 69, 70, 74, 75, 87, 91, 100, 106, 108, 109, 117, 118, 119, 124, 132, 133, 143, 150, 152, 153, 155, 158, 162, 164, 167, 168, 169, 177, 178, 189, 197, 199, 201, 205, 208, 213, 218, 221, 222, 228, 230, 232, 237, 241, 243, 245, 247, 254, 256, 258, 262, 266, 269, 270, 275, 283, 286, 289], "variabl": [0, 1, 2, 7, 9, 10, 12, 14, 15, 16, 17, 18, 25, 26, 29, 52, 53, 54, 59, 62, 66, 68, 74, 158, 159, 174, 191, 192, 194, 196, 205, 213, 232, 239, 250, 252, 277, 285], "throw": [0, 1, 158, 269], "compil": [0, 1, 2, 3, 5, 7, 9, 10, 12, 14, 15, 16, 30, 61, 62, 174, 175, 245, 269, 275, 277], "error": [0, 1, 2, 10, 14, 18, 34, 35, 50, 52, 53, 54, 58, 62, 75, 83, 98, 117, 133, 154, 159, 164, 165, 174, 177, 186, 188, 194, 197, 198, 205, 216, 218, 219, 220, 225, 228, 230, 235, 237, 239, 245, 250, 254, 260, 266, 268, 286, 289], "hardwar": [0, 1, 29, 34, 35, 39, 41, 52, 62, 208], "defin": [0, 1, 2, 3, 8, 9, 10, 14, 15, 16, 18, 20, 34, 39, 41, 45, 52, 53, 56, 59, 64, 87, 94, 97, 100, 111, 136, 138, 149, 153, 157, 158, 159, 161, 164, 169, 172, 173, 174, 178, 185, 186, 187, 188, 189, 190, 191, 192, 194, 196, 197, 199, 200, 201, 202, 205, 206, 208, 213, 221, 222, 223, 228, 232, 237, 239, 243, 250, 254, 258, 259, 266, 268, 269, 275, 285, 289], "includ": [0, 1, 3, 7, 8, 10, 17, 18, 20, 29, 46, 52, 62, 68, 71, 106, 149, 150, 157, 158, 161, 164, 165, 167, 169, 172, 173, 185, 186, 187, 188, 193, 194, 199, 201, 202, 204, 205, 206, 207, 208, 216, 220, 221, 222, 225, 230, 235, 237, 239, 245, 247, 251, 252, 254, 258, 262, 269, 270, 272, 275, 280, 285, 289], "interv": [0, 1, 2, 10, 91, 124, 186, 187, 231], "macro": [0, 1, 18, 58, 59], "channel": [0, 3, 15, 17, 54, 76, 149, 164, 169, 172, 174, 180, 181, 185, 186, 187, 188, 191, 192, 195, 197, 199, 201, 202, 203, 204, 206, 208, 216, 218, 231, 237, 245, 262, 266, 272, 285, 289], "shader": [0, 2, 3, 4, 5, 7, 9, 10, 11, 12, 13, 15, 16, 25, 26, 28, 29, 30, 39, 40, 41, 44, 45, 49, 50, 52, 54, 62, 64, 67, 76, 157, 158, 165, 167, 172, 174, 177, 208, 233, 237, 239, 245, 253, 254, 256, 275, 281, 285], "preshad": [0, 3, 11, 12], "block": [0, 2, 3, 6, 7, 8, 9, 10, 11, 13, 15, 30, 42, 52, 53, 61, 62, 68, 83, 149, 155, 159, 160, 162, 163, 165, 169, 174, 178, 194, 201, 205, 212, 220, 222, 223, 230, 231, 239, 243, 245, 247, 252, 258, 259, 262, 268, 269, 272, 275, 285, 289], "materi": [0, 3, 7, 10, 76, 149, 150, 157, 158, 164, 167, 170, 177, 179, 185, 189, 191, 193, 194, 197, 199, 200, 202, 207, 216, 222, 225, 228, 229, 232, 237, 238, 240, 241, 245, 280, 281, 286, 288], "textur": [0, 1, 2, 5, 7, 9, 10, 14, 16, 23, 25, 26, 27, 28, 29, 34, 39, 41, 42, 44, 45, 48, 49, 52, 57, 60, 61, 62, 64, 65, 66, 67, 75, 150, 158, 159, 164, 170, 172, 177, 179, 181, 186, 188, 189, 196, 198, 202, 203, 205, 206, 216, 225, 228, 229, 241, 242, 245, 252, 263, 264, 269, 272, 275, 285, 289], "paramet": [0, 3, 18, 20, 22, 23, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 56, 59, 62, 64, 66, 67, 68, 69, 72, 73, 98, 149, 162, 164, 165, 169, 170, 173, 174, 175, 177, 179, 196, 198, 213, 216, 221, 222, 230, 237, 239, 241, 245, 248, 250, 252, 254, 256, 260, 262, 267, 272, 285, 288], "two": [0, 2, 7, 12, 18, 35, 45, 47, 52, 54, 87, 100, 149, 150, 153, 155, 159, 163, 164, 165, 169, 172, 173, 174, 175, 178, 181, 185, 186, 187, 188, 190, 191, 192, 193, 197, 199, 200, 201, 202, 204, 205, 206, 214, 216, 219, 231, 232, 235, 237, 239, 243, 245, 250, 254, 258, 260, 262, 266, 269, 272, 275, 283, 285, 289], "side": [0, 3, 12, 17, 18, 20, 54, 62, 74, 153, 159, 169, 174, 190, 191, 200, 201, 207, 231, 239, 285, 289], "render": [0, 4, 7, 10, 16, 17, 18, 23, 26, 29, 30, 34, 35, 39, 42, 50, 51, 52, 53, 56, 57, 58, 59, 62, 66, 71, 74, 75, 76, 90, 140, 157, 158, 159, 164, 169, 172, 173, 174, 180, 181, 188, 189, 190, 194, 195, 196, 197, 199, 207, 208, 209, 214, 232, 235, 239, 241, 243, 245, 253, 254, 256, 262, 269, 272, 275, 281, 285], "render_stag": [0, 14], "direct": [0, 2, 6, 18, 20, 32, 52, 64, 76, 158, 159, 161, 164, 165, 169, 172, 174, 177, 185, 186, 187, 190, 192, 201, 205, 208, 214, 235, 245, 247, 251, 252, 280], "common": [0, 12, 17, 18, 22, 34, 45, 55, 76, 83, 149, 154, 158, 159, 163, 166, 169, 172, 173, 174, 177, 188, 190, 193, 196, 200, 201, 216, 221, 245, 250, 269, 275, 286], "no_dynstcod": [0, 14], "dont_rend": [0, 5, 14], "no_ablend": [0, 14], "intrins": [0, 2, 4, 52, 76], "float": [0, 2, 3, 7, 9, 14, 15, 17, 18, 20, 34, 35, 39, 40, 41, 43, 44, 45, 47, 51, 52, 53, 54, 60, 61, 62, 68, 85, 87, 91, 100, 102, 115, 121, 124, 126, 137, 141, 142, 143, 148, 159, 201, 214, 223, 230, 239, 250, 254], "time_phas": 0, "period": [0, 42, 120, 214, 239, 252], "offset": [0, 20, 29, 31, 32, 33, 34, 39, 47, 50, 52, 54, 56, 158, 159, 164, 174, 180, 191, 199, 200, 204, 205, 216, 222, 230, 231, 235, 243, 245, 260, 262, 272], "sin": [0, 201], "x": [0, 5, 9, 11, 17, 20, 31, 32, 51, 52, 54, 61, 87, 91, 94, 95, 97, 100, 111, 121, 124, 129, 136, 153, 158, 159, 169, 174, 186, 193, 196, 197, 200, 205, 208, 223, 230, 231, 237, 245, 247, 250, 253, 256, 262, 277, 280], "co": 0, "pow": [0, 252], "y": [0, 9, 11, 31, 32, 51, 52, 61, 111, 121, 129, 158, 159, 174, 186, 197, 200, 205, 230, 231, 235, 245, 247, 250, 252, 262, 277], "float4": [0, 3, 9, 10, 11, 14, 15, 17, 29, 47], "vecpow": 0, "v": [0, 2, 9, 10, 11, 17, 18, 44, 45, 46, 47, 87, 98, 100, 120, 159, 164, 172, 201, 207, 214, 239, 280, 286], "sqrt": 0, "min": [0, 9, 16, 52, 68, 186, 204, 258], "max": [0, 9, 23, 32, 45, 52, 53, 66, 153, 157, 161, 165, 172, 174, 176, 186, 193, 197, 203, 205, 206, 207, 208, 218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 232, 233, 237, 239, 245, 247, 254, 258, 260, 264, 277, 281, 286], "fsel": 0, "b": [0, 9, 16, 18, 23, 35, 43, 52, 54, 62, 87, 100, 106, 111, 115, 129, 149, 150, 153, 155, 157, 159, 160, 161, 164, 165, 169, 173, 174, 177, 186, 188, 190, 191, 192, 197, 199, 207, 213, 214, 216, 221, 239, 247, 250, 259, 262, 268, 269, 270, 278, 285, 289], "c": [0, 3, 13, 16, 17, 18, 19, 29, 41, 44, 47, 52, 53, 62, 76, 158, 169, 174, 210, 213, 216, 227, 237, 239, 250, 262, 275, 277], "srgbread": 0, "get_dimens": 0, "t": [0, 7, 8, 16, 18, 23, 27, 29, 31, 34, 35, 37, 39, 41, 51, 52, 53, 54, 56, 57, 59, 62, 66, 67, 74, 87, 91, 100, 102, 107, 109, 119, 124, 149, 150, 153, 155, 158, 159, 161, 163, 164, 165, 169, 172, 173, 174, 177, 178, 180, 181, 186, 187, 188, 189, 190, 193, 194, 195, 196, 197, 199, 200, 201, 202, 204, 205, 206, 207, 213, 214, 216, 230, 232, 235, 239, 243, 245, 247, 250, 254, 258, 259, 262, 266, 268, 269, 272, 275, 277, 285, 289], "int": [0, 2, 3, 5, 7, 14, 15, 16, 17, 18, 20, 29, 30, 33, 35, 37, 41, 42, 47, 50, 51, 52, 53, 54, 60, 61, 62, 66, 68, 72, 74, 83, 85, 87, 98, 100, 108, 138, 143, 213, 232], "mip": [0, 28, 30, 34, 41, 42, 44, 48, 54, 62, 68, 149, 196, 262, 264, 269, 271], "get_siz": 0, "buffer": [0, 1, 9, 14, 16, 25, 26, 27, 31, 32, 33, 34, 39, 41, 44, 52, 53, 56, 57, 60, 61, 62, 64, 68, 158, 190, 192, 266], "get_viewport": 0, "exists_tex": 0, "exists_buf": 0, "global": [0, 1, 7, 12, 17, 18, 28, 37, 41, 45, 51, 57, 59, 62, 68, 76, 149, 158, 169, 172, 174, 179, 181, 188, 197, 208, 231, 239, 262, 266, 267, 272], "constant": [0, 7, 9, 16, 17, 20, 25, 26, 29, 34, 37, 39, 49, 67, 69, 76, 87, 100, 158, 194, 213, 269], "pipelin": [0, 30, 31, 34, 52, 57, 62, 76, 159, 169, 285, 289], "state": [0, 14, 19, 25, 26, 29, 30, 34, 35, 37, 39, 41, 49, 51, 52, 53, 54, 57, 59, 62, 67, 68, 69, 72, 74, 76, 87, 100, 143, 158, 169, 200, 201, 208, 216, 219, 220, 235, 252, 285], "configur": [0, 14, 17, 18, 23, 34, 40, 62, 76, 149, 150, 152, 156, 158, 159, 162, 163, 165, 167, 170, 173, 174, 175, 177, 178, 180, 181, 185, 186, 188, 191, 194, 195, 196, 197, 198, 199, 200, 205, 207, 210, 212, 216, 218, 220, 222, 226, 227, 233, 237, 239, 245, 250, 251, 252, 262, 269, 270, 272, 275, 277, 283, 286, 288], "blend": [0, 10, 40, 62, 159, 164, 180, 181, 185, 187, 188, 192, 196, 199, 202, 203, 204, 208, 222, 231, 237, 239, 241, 285, 289], "depth": [0, 12, 17, 34, 39, 40, 41, 42, 43, 48, 49, 51, 52, 54, 59, 62, 155, 158, 164, 169, 184, 190, 204, 205, 247, 258, 289], "stencil": [0, 14, 34, 39, 40, 41, 43, 49, 52, 54, 62], "cull": [0, 15, 17, 40, 239], "alpha": [0, 12, 15, 22, 40, 43, 52, 169, 172, 180, 181, 185, 187, 188, 189, 191, 192, 195, 196, 199, 201, 202, 204, 205, 206, 237, 262, 269, 272, 285, 289], "coverag": [0, 40, 52, 178, 289], "view": [0, 11, 25, 26, 29, 34, 37, 40, 41, 44, 52, 61, 62, 64, 158, 159, 165, 174, 175, 186, 196, 199, 201, 210, 216, 218, 231, 235, 239, 243, 245, 250, 252, 258, 262, 269, 275, 285], "instanc": [0, 15, 18, 20, 29, 33, 35, 52, 59, 68, 87, 91, 100, 124, 157, 158, 159, 161, 163, 164, 169, 172, 173, 174, 177, 188, 191, 194, 197, 199, 200, 201, 207, 214, 216, 222, 235, 237, 239, 245, 252, 254, 256, 260, 266, 269, 275, 285, 289], "color": [0, 7, 9, 15, 17, 18, 39, 40, 41, 45, 46, 52, 54, 58, 61, 62, 75, 87, 100, 157, 158, 159, 169, 172, 174, 178, 179, 180, 185, 186, 187, 188, 189, 190, 191, 192, 194, 199, 203, 204, 206, 207, 216, 218, 223, 226, 229, 234, 245, 250, 252, 262], "write": [0, 15, 18, 20, 25, 26, 28, 29, 39, 40, 52, 62, 69, 75, 83, 158, 159, 180, 202, 211, 212, 232, 237, 239, 250, 269], "mask": [0, 15, 40, 52, 77, 83, 84, 87, 90, 91, 92, 95, 96, 98, 100, 102, 103, 104, 105, 106, 108, 109, 110, 111, 112, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 129, 130, 132, 133, 135, 137, 138, 140, 141, 146, 148, 149, 158, 161, 164, 169, 173, 175, 178, 180, 181, 185, 187, 188, 191, 197, 199, 202, 203, 204, 205, 222, 228, 232, 237, 239, 259, 285, 289], "keyword": [0, 2, 7, 9, 15, 16, 17, 76, 228, 285], "boolean": [0, 2, 15, 52, 87, 100, 116, 158, 191, 232, 250, 252], "modifi": [0, 3, 9, 18, 20, 49, 61, 62, 68, 129, 150, 153, 155, 157, 159, 160, 165, 167, 168, 169, 170, 172, 174, 177, 182, 188, 190, 192, 194, 199, 201, 202, 213, 216, 218, 219, 221, 222, 223, 227, 228, 229, 230, 235, 239, 245, 252, 259, 262, 266, 268, 269, 272, 286, 289], "graphic": [0, 18, 22, 30, 31, 34, 39, 42, 52, 53, 62, 83, 150, 196, 208, 214, 252, 269, 275], "set": [0, 3, 15, 16, 17, 18, 20, 27, 29, 30, 34, 35, 37, 39, 40, 41, 44, 46, 47, 49, 50, 51, 52, 53, 54, 56, 58, 59, 62, 63, 66, 68, 71, 73, 79, 81, 87, 100, 111, 116, 117, 119, 129, 149, 150, 153, 155, 157, 158, 159, 161, 162, 164, 165, 167, 168, 169, 170, 172, 173, 178, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 200, 202, 204, 205, 206, 207, 213, 216, 218, 219, 221, 225, 230, 231, 232, 233, 238, 239, 241, 243, 246, 247, 250, 253, 254, 256, 258, 259, 260, 262, 264, 267, 268, 270, 272, 275, 277, 279, 283, 285], "still": [0, 10, 17, 18, 20, 34, 48, 52, 53, 67, 159, 164, 174, 191, 201, 205, 216, 222, 231, 232, 235, 239, 243, 245, 269, 270, 283], "uncategor": 0, "local": [1, 7, 12, 14, 15, 18, 20, 34, 74, 79, 119, 131, 158, 209, 211, 215, 216, 227, 239, 245, 263, 264, 267, 268, 275, 285, 289], "option": [1, 8, 14, 16, 18, 20, 29, 30, 34, 37, 39, 46, 50, 52, 54, 60, 61, 62, 64, 68, 69, 87, 100, 108, 116, 120, 149, 153, 157, 158, 159, 163, 169, 172, 175, 178, 186, 191, 192, 197, 198, 200, 202, 213, 214, 216, 218, 219, 220, 221, 228, 231, 232, 235, 237, 241, 243, 245, 250, 252, 254, 258, 260, 262, 275, 277, 283, 285, 289], "assum": [1, 3, 14, 17, 30, 52, 201, 235, 239, 280], "outsid": [2, 3, 12, 39, 40, 45, 51, 62, 74, 159, 173, 174, 189, 193, 213, 237, 239, 262, 275], "hlsl": [2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 17, 52, 174, 275], "els": [2, 4, 7, 14, 16, 18, 29, 59, 61, 83, 85, 98, 108, 159, 161, 169, 175, 177, 201, 245, 262], "ar": [2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 28, 29, 30, 34, 37, 39, 40, 41, 42, 44, 45, 46, 47, 49, 52, 53, 54, 55, 56, 59, 60, 61, 62, 63, 64, 67, 68, 70, 74, 83, 91, 106, 124, 149, 150, 153, 155, 157, 158, 159, 160, 161, 163, 164, 165, 168, 169, 172, 173, 174, 175, 177, 178, 180, 181, 185, 186, 187, 188, 189, 190, 192, 193, 194, 195, 196, 197, 199, 200, 201, 202, 204, 205, 206, 209, 213, 214, 216, 218, 219, 220, 221, 222, 225, 227, 228, 230, 231, 232, 235, 237, 239, 243, 245, 247, 250, 254, 258, 259, 260, 262, 266, 268, 269, 270, 272, 275, 277, 278, 280, 283, 285, 289], "us": [2, 3, 4, 5, 7, 9, 10, 11, 12, 13, 15, 16, 18, 20, 22, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 56, 59, 61, 62, 63, 64, 66, 67, 68, 69, 71, 72, 73, 86, 87, 90, 91, 97, 98, 100, 106, 120, 124, 129, 140, 147, 149, 150, 153, 155, 157, 158, 160, 162, 163, 164, 165, 168, 169, 170, 172, 173, 175, 177, 180, 181, 182, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 202, 203, 204, 205, 206, 207, 208, 210, 213, 214, 216, 221, 226, 232, 237, 238, 241, 243, 245, 247, 251, 252, 254, 258, 259, 260, 263, 264, 266, 269, 270, 272, 275, 277, 280, 283, 284, 285, 289], "perform": [2, 7, 16, 17, 19, 20, 23, 25, 30, 34, 36, 39, 40, 41, 42, 52, 53, 62, 68, 69, 91, 124, 149, 157, 158, 159, 161, 164, 165, 169, 172, 174, 183, 191, 196, 201, 208, 223, 225, 228, 231, 232, 235, 237, 239, 243, 245, 250, 252, 254, 258, 262, 266, 275, 285, 289], "differ": [2, 5, 7, 9, 15, 16, 17, 19, 26, 29, 34, 35, 41, 52, 54, 56, 59, 62, 67, 68, 69, 98, 106, 149, 150, 158, 159, 160, 161, 163, 164, 165, 169, 172, 173, 174, 175, 177, 181, 185, 186, 187, 188, 189, 190, 193, 194, 197, 199, 200, 201, 203, 204, 213, 216, 228, 230, 231, 232, 235, 237, 239, 245, 247, 252, 254, 258, 262, 269, 270, 275, 280, 283, 285, 289], "variant": [2, 7, 10, 15, 18, 32, 61, 62, 126, 159, 169, 173, 213], "dshl": [2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 76, 208, 281], "exampl": [2, 3, 5, 7, 9, 10, 11, 15, 16, 19, 22, 34, 39, 48, 52, 58, 59, 61, 62, 72, 149, 150, 153, 155, 156, 160, 162, 164, 165, 168, 169, 170, 172, 173, 175, 177, 178, 179, 181, 185, 188, 189, 192, 193, 194, 199, 200, 201, 202, 204, 205, 207, 213, 214, 216, 219, 220, 222, 224, 228, 230, 235, 237, 241, 243, 245, 247, 250, 251, 260, 262, 266, 268, 269, 270, 272, 275, 286, 288], "tex": [2, 3, 10, 17, 23, 27, 30, 34, 41, 42, 44, 48, 54, 66, 68, 158, 161, 174, 232, 237, 253, 256, 262, 266, 269, 272, 275], "fallback": [2, 35], "test_interv": 2, "0": [2, 3, 5, 7, 9, 12, 15, 16, 17, 18, 20, 22, 27, 28, 29, 30, 31, 32, 33, 34, 35, 39, 40, 41, 42, 45, 46, 47, 48, 52, 54, 56, 60, 62, 66, 68, 83, 85, 98, 108, 111, 143, 153, 155, 159, 161, 164, 165, 169, 172, 174, 175, 177, 178, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 194, 195, 196, 197, 199, 200, 201, 202, 203, 204, 206, 207, 208, 214, 216, 220, 222, 225, 229, 230, 231, 232, 235, 237, 239, 245, 247, 250, 252, 259, 262, 269, 272, 277, 280, 285, 289], "neg": [2, 66, 68, 172, 173, 185, 213, 231, 232, 289], "less_than_two": 2, "2": [2, 7, 12, 15, 16, 17, 32, 49, 52, 60, 62, 66, 68, 77, 83, 84, 87, 91, 92, 95, 96, 98, 100, 103, 104, 106, 107, 108, 109, 110, 111, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 129, 130, 132, 135, 141, 143, 144, 148, 149, 157, 159, 164, 165, 169, 170, 172, 174, 177, 186, 188, 189, 191, 192, 194, 195, 196, 197, 199, 200, 201, 202, 205, 213, 214, 216, 222, 227, 232, 234, 237, 239, 242, 247, 254, 259, 262, 266, 272, 277, 280, 285, 289], "more_than_two": 2, "test_shad": [2, 10], "null": [2, 7, 10, 12, 14, 20, 28, 30, 35, 41, 49, 53, 64, 68, 83, 84, 85, 87, 91, 92, 97, 98, 100, 104, 106, 108, 110, 114, 115, 117, 120, 121, 122, 123, 124, 125, 126, 132, 141, 148, 161, 239], "p": [2, 3, 10, 12, 15, 17, 18, 22, 29, 37, 44, 46, 47, 54, 59, 64, 111, 150, 161, 175, 235, 245, 254, 283, 289], "smp2d": [2, 3, 17], "posit": [2, 9, 17, 45, 141, 148, 150, 153, 158, 159, 161, 164, 168, 169, 173, 185, 186, 190, 200, 201, 202, 205, 216, 220, 226, 229, 230, 232, 234, 235, 245, 252, 283, 285], "var": [2, 5, 7, 20, 58, 61, 62, 64, 67, 74, 75, 80, 87, 91, 98, 100, 111, 124, 158, 173, 205, 213, 252], "f4": [2, 3, 10, 12, 15, 17, 165, 175], "1": [2, 3, 7, 9, 11, 12, 15, 16, 17, 18, 20, 23, 28, 29, 35, 40, 42, 45, 49, 52, 53, 54, 60, 61, 62, 66, 68, 83, 85, 87, 91, 95, 98, 100, 103, 104, 105, 106, 108, 111, 124, 126, 127, 129, 134, 138, 141, 143, 148, 149, 157, 158, 159, 161, 164, 165, 169, 170, 172, 174, 177, 178, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 199, 200, 202, 204, 206, 207, 213, 214, 216, 218, 219, 220, 221, 222, 224, 225, 228, 229, 230, 231, 232, 235, 239, 247, 250, 252, 254, 262, 272, 277, 280, 285, 289], "For": [2, 9, 12, 15, 16, 17, 18, 20, 22, 27, 34, 41, 49, 52, 62, 64, 67, 68, 69, 72, 149, 159, 160, 161, 163, 164, 165, 168, 169, 172, 173, 174, 177, 178, 180, 181, 185, 186, 188, 189, 190, 191, 192, 193, 194, 197, 199, 200, 201, 202, 205, 207, 213, 214, 216, 218, 219, 220, 221, 222, 223, 225, 227, 228, 229, 230, 231, 235, 237, 239, 243, 245, 247, 252, 258, 260, 262, 266, 268, 269, 270, 272, 275, 285, 289], "each": [2, 3, 7, 9, 12, 15, 16, 17, 18, 20, 27, 29, 32, 34, 39, 46, 47, 48, 52, 56, 149, 153, 155, 158, 163, 164, 165, 169, 172, 173, 174, 185, 187, 189, 192, 194, 197, 200, 201, 202, 205, 213, 214, 216, 223, 228, 232, 235, 237, 239, 245, 250, 252, 254, 259, 266, 269, 270, 275, 280, 285, 289], "branch": [2, 7, 12, 18, 149, 195, 196, 209, 228, 229, 262, 275, 278], "statement": [2, 7, 15, 18, 52, 159, 169], "creat": [2, 7, 10, 13, 17, 18, 19, 23, 29, 30, 31, 34, 38, 39, 40, 43, 45, 46, 47, 50, 52, 53, 54, 59, 61, 62, 63, 66, 67, 68, 69, 72, 74, 75, 127, 149, 150, 154, 155, 156, 161, 162, 163, 164, 169, 170, 173, 174, 176, 180, 188, 189, 191, 192, 197, 199, 200, 201, 205, 209, 213, 214, 215, 216, 221, 222, 228, 229, 230, 231, 237, 239, 241, 244, 245, 249, 254, 258, 259, 260, 262, 269, 270, 272, 275, 277, 278, 281, 286, 287, 289], "some": [2, 3, 5, 8, 9, 10, 11, 15, 16, 17, 18, 20, 34, 41, 52, 59, 61, 62, 64, 66, 68, 69, 74, 106, 149, 155, 159, 165, 169, 174, 181, 197, 199, 200, 201, 205, 213, 216, 222, 228, 230, 231, 232, 235, 239, 243, 245, 247, 250, 254, 262, 269, 272, 275, 285], "number": [2, 7, 10, 12, 16, 17, 18, 20, 27, 28, 29, 31, 32, 33, 34, 39, 40, 41, 46, 47, 48, 51, 52, 54, 56, 59, 62, 66, 68, 119, 150, 153, 155, 158, 159, 164, 165, 172, 174, 175, 177, 189, 191, 200, 201, 203, 205, 213, 214, 221, 222, 228, 229, 230, 232, 235, 237, 239, 245, 247, 250, 252, 259, 262, 269, 272, 275, 283, 285, 289], "determin": [2, 18, 20, 35, 52, 62, 68, 153, 164, 175, 180, 186, 203, 205, 207, 216, 221, 222, 228, 235, 237, 239, 252, 258, 266, 269, 285, 289], "combinator": 2, "If": [2, 7, 8, 10, 16, 17, 18, 20, 23, 34, 36, 39, 41, 46, 47, 52, 53, 56, 59, 62, 66, 68, 69, 71, 74, 108, 120, 149, 150, 153, 157, 159, 161, 163, 164, 165, 168, 169, 172, 173, 174, 175, 177, 178, 181, 185, 186, 187, 188, 189, 190, 191, 192, 194, 196, 197, 200, 201, 202, 204, 205, 206, 209, 213, 216, 219, 220, 221, 222, 225, 227, 228, 230, 231, 232, 235, 237, 239, 243, 245, 247, 250, 252, 254, 258, 260, 262, 266, 269, 272, 277, 278, 283, 285, 289], "i": [2, 3, 5, 7, 8, 9, 10, 12, 13, 15, 16, 17, 18, 19, 22, 23, 26, 27, 28, 29, 30, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 51, 52, 53, 54, 56, 57, 58, 59, 61, 62, 63, 64, 66, 67, 68, 69, 71, 72, 74, 81, 83, 87, 91, 98, 100, 106, 108, 116, 120, 124, 129, 143, 149, 150, 153, 155, 157, 158, 160, 161, 162, 163, 164, 165, 167, 168, 169, 170, 171, 172, 175, 177, 178, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 213, 214, 216, 218, 219, 220, 221, 222, 223, 224, 225, 228, 229, 230, 231, 232, 235, 236, 237, 238, 239, 243, 245, 247, 250, 252, 254, 258, 259, 260, 262, 266, 267, 268, 272, 275, 276, 277, 280, 283, 285, 289], "an": [2, 3, 7, 16, 17, 18, 19, 27, 29, 34, 38, 40, 48, 50, 54, 57, 59, 62, 63, 64, 66, 67, 68, 87, 100, 149, 150, 153, 155, 156, 158, 159, 161, 164, 165, 168, 169, 170, 172, 173, 175, 177, 179, 185, 186, 187, 188, 189, 190, 191, 193, 194, 197, 199, 200, 202, 203, 204, 206, 208, 214, 216, 219, 220, 222, 224, 228, 230, 231, 235, 236, 237, 239, 243, 245, 247, 250, 252, 254, 258, 260, 263, 264, 269, 272, 275, 276, 277, 278, 283, 285, 289], "exact": [2, 18, 20, 159, 173, 174, 186, 205, 262, 269], "duplic": [2, 15, 149, 159, 161, 163, 168, 175, 177, 191, 201, 216, 235, 239, 245, 260, 275, 289], "anoth": [2, 9, 18, 29, 34, 39, 52, 54, 58, 62, 159, 161, 163, 169, 174, 175, 191, 197, 201, 205, 216, 231, 235, 237, 243, 250, 258, 269, 275], "These": [2, 3, 5, 9, 12, 15, 17, 18, 42, 47, 55, 62, 149, 155, 158, 159, 160, 161, 164, 165, 169, 172, 173, 174, 177, 189, 196, 197, 200, 201, 204, 205, 213, 216, 219, 220, 221, 228, 231, 232, 235, 239, 243, 245, 247, 254, 262, 269, 275, 280, 285, 289], "switch": [2, 7, 17, 18, 52, 62, 149, 161, 175, 191, 201, 208, 232, 235, 237, 239, 243, 245, 247, 259, 272, 285], "runtim": [2, 3, 7, 10, 12, 20, 25, 34, 52, 57, 62, 68, 196, 259, 262], "base": [2, 7, 15, 17, 18, 29, 33, 35, 36, 40, 47, 50, 52, 54, 66, 86, 89, 147, 149, 155, 157, 158, 160, 161, 164, 165, 167, 168, 169, 170, 173, 175, 177, 178, 180, 181, 184, 187, 190, 191, 192, 194, 195, 196, 197, 198, 199, 200, 201, 204, 206, 207, 208, 216, 219, 220, 222, 227, 228, 229, 230, 231, 232, 235, 237, 239, 243, 245, 247, 252, 254, 258, 260, 262, 268, 269, 270, 275, 277, 283, 285, 289], "valu": [2, 5, 7, 10, 12, 15, 16, 17, 18, 20, 27, 28, 29, 30, 32, 34, 35, 37, 39, 40, 41, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 59, 62, 64, 66, 67, 68, 87, 91, 94, 98, 99, 100, 108, 123, 124, 126, 129, 136, 137, 141, 142, 143, 145, 148, 149, 153, 158, 159, 161, 164, 169, 172, 173, 174, 178, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 194, 195, 196, 197, 200, 201, 202, 204, 205, 206, 213, 216, 218, 219, 222, 228, 230, 231, 232, 235, 237, 239, 245, 247, 250, 252, 254, 259, 262, 272, 285, 289], "insid": [2, 3, 7, 10, 16, 17, 18, 39, 52, 59, 61, 62, 63, 64, 67, 72, 74, 87, 100, 159, 169, 193, 216, 230, 239, 262, 272], "It": [2, 3, 7, 15, 17, 18, 27, 28, 29, 33, 36, 41, 47, 49, 52, 53, 56, 57, 59, 61, 62, 64, 150, 153, 155, 157, 159, 161, 164, 169, 172, 173, 174, 179, 181, 183, 184, 185, 189, 190, 191, 192, 195, 199, 200, 202, 203, 204, 205, 206, 207, 213, 214, 216, 218, 219, 221, 222, 224, 225, 227, 228, 229, 230, 231, 232, 235, 236, 238, 239, 241, 244, 245, 249, 250, 254, 258, 259, 260, 262, 266, 269, 270, 272, 275, 285, 289], "possibl": [2, 15, 16, 18, 20, 29, 34, 39, 47, 49, 52, 53, 54, 58, 59, 62, 64, 66, 68, 75, 106, 157, 159, 161, 163, 164, 169, 172, 173, 174, 190, 200, 201, 213, 214, 235, 239, 243, 247, 258, 262, 269, 270, 280, 285, 289], "similar": [2, 3, 12, 15, 16, 18, 20, 45, 61, 153, 157, 158, 159, 161, 169, 174, 177, 186, 188, 194, 197, 200, 201, 203, 204, 205, 216, 222, 231, 237, 239, 243, 245, 250, 254, 258, 260, 262, 269, 275, 280, 285, 289], "elif": [2, 5, 7], "endif": [2, 5, 7, 98, 114], "too": [2, 18, 42, 52, 56, 119, 155, 157, 159, 174, 190, 194, 196, 197, 200, 214, 216, 222, 239, 245, 262, 269, 272], "special": [2, 3, 7, 10, 12, 15, 17, 18, 34, 39, 48, 52, 58, 62, 153, 157, 172, 201, 205, 208, 214, 220, 239, 250, 258, 270, 275, 280, 286], "preprocessor": [2, 6, 7, 17], "tag": [2, 7, 18, 68, 142, 158, 164, 169, 173], "In": [2, 15, 17, 18, 20, 23, 29, 52, 56, 59, 62, 149, 150, 153, 155, 157, 158, 159, 160, 161, 163, 164, 165, 168, 169, 172, 173, 174, 175, 177, 180, 185, 186, 190, 192, 193, 194, 196, 199, 200, 201, 202, 205, 207, 210, 213, 216, 222, 224, 228, 229, 231, 235, 237, 239, 243, 245, 247, 250, 254, 260, 262, 269, 270, 272, 275, 283, 285], "thi": [2, 3, 5, 7, 9, 10, 12, 14, 15, 16, 17, 18, 20, 23, 28, 29, 30, 32, 33, 34, 35, 39, 41, 42, 45, 46, 47, 48, 49, 50, 51, 52, 54, 56, 58, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 72, 87, 91, 92, 95, 98, 100, 104, 106, 108, 110, 111, 121, 122, 124, 125, 127, 130, 132, 137, 141, 148, 149, 150, 153, 155, 157, 158, 159, 161, 163, 164, 165, 168, 169, 171, 172, 173, 174, 175, 177, 178, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 199, 200, 201, 202, 203, 204, 205, 206, 207, 209, 210, 213, 214, 216, 218, 219, 220, 221, 222, 223, 224, 225, 228, 229, 230, 231, 232, 235, 237, 239, 243, 245, 247, 250, 254, 258, 259, 260, 262, 266, 269, 270, 272, 275, 277, 280, 283, 285, 289], "case": [2, 9, 10, 12, 15, 16, 17, 18, 20, 23, 27, 34, 39, 48, 52, 56, 58, 59, 62, 66, 68, 106, 149, 153, 155, 158, 159, 161, 164, 169, 172, 173, 174, 175, 177, 185, 186, 192, 194, 197, 199, 200, 201, 205, 207, 214, 221, 224, 225, 228, 235, 237, 239, 243, 245, 247, 254, 260, 269, 272, 285, 289], "howev": [2, 7, 18, 59, 62, 64, 74, 149, 153, 155, 159, 161, 165, 168, 169, 172, 174, 175, 181, 189, 191, 196, 197, 199, 200, 201, 205, 216, 230, 231, 232, 235, 237, 239, 243, 245, 258, 268, 269, 272, 280, 285, 289], "you": [2, 4, 5, 7, 8, 9, 11, 12, 15, 16, 17, 18, 20, 23, 29, 41, 49, 52, 57, 59, 61, 62, 64, 69, 74, 98, 149, 150, 153, 155, 157, 159, 161, 164, 165, 168, 169, 172, 174, 175, 177, 181, 185, 186, 187, 188, 189, 190, 192, 194, 197, 199, 200, 201, 202, 204, 205, 209, 213, 214, 216, 219, 220, 221, 222, 223, 224, 225, 227, 228, 230, 231, 232, 235, 237, 239, 243, 245, 247, 250, 254, 258, 260, 262, 266, 268, 269, 270, 272, 277, 278, 280, 283, 285, 287, 289], "need": [2, 3, 7, 9, 15, 16, 17, 18, 23, 29, 34, 35, 36, 41, 42, 45, 48, 50, 52, 56, 61, 62, 64, 69, 74, 149, 150, 153, 155, 157, 159, 161, 164, 165, 168, 169, 172, 173, 174, 175, 177, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 197, 199, 200, 201, 202, 204, 205, 206, 209, 213, 214, 216, 219, 221, 222, 231, 232, 235, 237, 239, 243, 245, 250, 260, 262, 266, 268, 269, 272, 277, 283, 285, 289], "close": [2, 54, 56, 159, 164, 169, 174, 175, 181, 196, 201, 213, 223, 227, 228, 230, 231, 232, 239, 243, 245, 254, 269, 289], "them": [2, 3, 5, 10, 15, 16, 17, 18, 20, 47, 56, 62, 64, 106, 155, 159, 160, 161, 163, 164, 169, 172, 173, 174, 175, 177, 181, 188, 189, 190, 197, 199, 201, 205, 213, 216, 221, 229, 230, 232, 235, 237, 239, 245, 254, 262, 269, 270, 275, 278, 280, 285, 289], "end": [2, 13, 18, 36, 39, 47, 52, 62, 98, 108, 120, 127, 155, 158, 159, 161, 164, 165, 174, 186, 200, 201, 202, 206, 213, 214, 237, 239, 243, 258, 259, 262, 269, 283, 285, 289], "somefloat": 2, "mayb": [2, 14, 50, 213], "can": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 20, 22, 23, 27, 28, 29, 30, 32, 34, 39, 41, 42, 47, 48, 49, 52, 53, 56, 58, 59, 61, 62, 64, 68, 69, 72, 74, 75, 86, 87, 100, 106, 117, 119, 133, 147, 149, 150, 153, 155, 157, 158, 159, 160, 161, 164, 165, 169, 172, 173, 174, 175, 177, 178, 181, 184, 185, 186, 187, 188, 189, 190, 192, 193, 194, 196, 197, 199, 200, 201, 202, 204, 205, 206, 213, 214, 216, 218, 220, 221, 222, 227, 228, 230, 231, 232, 235, 237, 239, 243, 245, 247, 250, 254, 258, 259, 260, 262, 266, 269, 270, 272, 275, 277, 278, 280, 283, 285, 289], "bool": [2, 3, 14, 18, 29, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 50, 51, 52, 53, 54, 56, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 70, 71, 75, 83, 85, 87, 91, 97, 98, 100, 102, 106, 108, 121, 123, 124, 126, 132, 138, 141, 143, 145, 148], "express": [2, 17, 158, 222, 258, 280], "Its": [2, 201], "argument": [2, 8, 18, 20, 27, 29, 31, 32, 56, 58, 60, 61, 62, 70, 72, 74, 75, 77, 83, 84, 87, 90, 91, 92, 95, 96, 97, 98, 100, 102, 103, 104, 105, 106, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 135, 137, 139, 140, 141, 142, 145, 146, 148, 160, 213, 214, 262, 277], "ani": [2, 3, 10, 17, 18, 20, 28, 29, 34, 39, 42, 47, 52, 57, 58, 62, 68, 86, 127, 147, 153, 157, 159, 160, 161, 165, 168, 169, 173, 174, 175, 177, 178, 181, 184, 189, 196, 197, 200, 201, 205, 209, 213, 214, 216, 219, 220, 225, 227, 229, 230, 232, 235, 237, 239, 243, 252, 258, 260, 262, 266, 269, 275, 277, 280, 283, 285, 289], "identifi": [2, 18, 34, 40, 59, 62, 67, 68, 155, 159, 175, 216, 219, 231, 266, 269, 270, 285, 289], "return": [2, 10, 11, 12, 17, 18, 20, 28, 29, 30, 31, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 56, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 70, 72, 74, 75, 80, 83, 84, 85, 87, 91, 96, 97, 98, 100, 102, 104, 106, 108, 109, 111, 112, 114, 115, 117, 118, 119, 120, 121, 123, 124, 126, 127, 128, 132, 133, 134, 137, 138, 141, 143, 145, 148, 161, 175, 213, 216, 220, 223, 230, 243, 245], "fals": [2, 14, 16, 18, 29, 31, 33, 34, 35, 37, 38, 40, 41, 42, 44, 46, 47, 50, 52, 53, 54, 59, 66, 68, 83, 91, 98, 108, 124, 143, 161, 169, 174, 214, 216, 250, 252, 262, 268, 269, 285], "otherwis": [2, 7, 12, 29, 30, 31, 33, 34, 35, 37, 38, 39, 40, 41, 42, 44, 46, 47, 50, 52, 54, 62, 64, 68, 143, 150, 153, 159, 164, 169, 173, 186, 191, 197, 201, 205, 220, 230, 235, 239, 250, 262, 280], "wsao_tex": 2, "ssao": [2, 158], "use_wsao": 2, "true": [2, 14, 16, 18, 29, 31, 33, 34, 35, 37, 38, 40, 41, 42, 44, 46, 47, 50, 51, 52, 53, 54, 63, 64, 66, 68, 83, 87, 91, 98, 100, 108, 124, 143, 161, 164, 213, 214, 216, 250, 268, 269, 272], "foo": [2, 12, 18, 20, 59, 106, 213], "try": [2, 30, 34, 62, 158, 159, 169, 201, 213, 230, 243, 269, 289], "remov": [2, 3, 18, 33, 35, 37, 40, 47, 48, 52, 56, 63, 68, 87, 91, 100, 124, 149, 155, 157, 158, 163, 164, 169, 174, 177, 180, 201, 202, 216, 219, 221, 222, 225, 227, 228, 230, 232, 235, 237, 239, 243, 245, 252, 259, 262, 266, 269, 285, 289], "caus": [2, 4, 10, 18, 23, 39, 41, 52, 59, 62, 106, 155, 159, 164, 165, 169, 173, 177, 186, 188, 192, 197, 201, 204, 205, 206, 213, 216, 218, 222, 228, 235, 239, 243, 252, 269, 280, 285, 289], "becaus": [2, 3, 7, 16, 18, 20, 29, 37, 74, 119, 157, 159, 169, 174, 177, 181, 185, 188, 189, 197, 199, 200, 201, 205, 213, 230, 232, 239, 258, 262, 266, 269, 270, 285], "declar": [2, 3, 7, 8, 9, 15, 17, 18, 19, 25, 29, 46, 50, 57, 59, 61, 64, 69, 72, 162, 213, 250, 285], "all": [2, 7, 8, 14, 15, 16, 17, 18, 20, 25, 26, 27, 28, 29, 30, 32, 34, 39, 40, 41, 49, 52, 54, 57, 59, 61, 62, 63, 64, 66, 68, 69, 72, 73, 83, 91, 106, 117, 124, 127, 149, 150, 157, 158, 159, 160, 161, 163, 165, 167, 168, 169, 172, 174, 175, 177, 178, 185, 186, 187, 188, 189, 193, 194, 196, 197, 199, 200, 201, 204, 205, 206, 213, 214, 216, 218, 219, 220, 221, 222, 223, 225, 227, 228, 229, 230, 231, 232, 235, 237, 239, 243, 245, 247, 250, 253, 254, 256, 258, 259, 260, 262, 266, 269, 270, 272, 275, 280, 281, 283, 286, 289], "multipl": [2, 6, 7, 15, 16, 17, 18, 27, 28, 33, 34, 47, 52, 57, 62, 68, 149, 150, 153, 158, 161, 162, 163, 164, 169, 173, 174, 177, 185, 190, 192, 194, 197, 200, 201, 204, 205, 216, 220, 222, 225, 232, 235, 237, 239, 243, 245, 247, 260, 262, 266, 269, 285, 289], "also": [2, 3, 7, 15, 16, 17, 18, 20, 22, 28, 34, 41, 47, 52, 59, 62, 63, 64, 67, 71, 74, 75, 155, 159, 160, 164, 165, 169, 172, 173, 174, 175, 177, 185, 186, 187, 188, 189, 190, 191, 197, 200, 201, 202, 204, 206, 213, 214, 216, 221, 222, 229, 235, 237, 239, 243, 245, 247, 258, 259, 262, 266, 269, 270, 272, 277, 285, 289], "onc": [2, 3, 7, 15, 17, 18, 20, 39, 48, 52, 62, 150, 159, 174, 175, 177, 209, 216, 220, 222, 235, 239, 245, 258, 266, 269, 272, 283, 285, 289], "conveni": [2, 18, 62, 74, 155, 159, 168, 172, 173, 214, 239, 269, 289], "just": [2, 10, 12, 15, 16, 17, 18, 39, 42, 57, 62, 68, 91, 124, 159, 169, 177, 187, 189, 191, 201, 205, 213, 214, 216, 222, 232, 235, 237, 239, 245, 262, 269, 289], "do": [2, 3, 7, 15, 17, 18, 20, 39, 40, 41, 50, 52, 57, 59, 62, 64, 66, 68, 108, 149, 150, 153, 155, 157, 159, 161, 163, 165, 169, 172, 174, 175, 177, 185, 188, 190, 199, 200, 201, 213, 214, 216, 230, 235, 237, 239, 243, 245, 254, 262, 266, 269, 272, 275, 285, 289], "": [2, 5, 9, 15, 17, 18, 20, 23, 39, 40, 43, 46, 50, 52, 54, 62, 63, 64, 68, 75, 76, 83, 98, 106, 117, 149, 150, 153, 155, 157, 158, 159, 161, 163, 164, 168, 169, 172, 173, 174, 175, 177, 180, 181, 184, 185, 186, 188, 189, 190, 191, 192, 194, 196, 197, 199, 200, 201, 202, 204, 205, 207, 208, 213, 214, 215, 216, 218, 219, 221, 222, 224, 225, 228, 229, 230, 231, 232, 237, 239, 241, 243, 245, 247, 250, 252, 254, 258, 259, 260, 262, 266, 268, 269, 272, 275, 280, 282, 285, 289], "name": [2, 3, 8, 15, 17, 18, 20, 23, 29, 30, 34, 35, 39, 50, 52, 54, 56, 59, 61, 62, 65, 66, 68, 69, 72, 74, 77, 83, 97, 98, 106, 117, 118, 120, 141, 145, 148, 149, 150, 153, 157, 158, 160, 161, 163, 164, 165, 168, 172, 173, 174, 175, 176, 189, 191, 199, 201, 202, 204, 207, 213, 216, 221, 222, 225, 228, 229, 230, 231, 235, 237, 241, 243, 245, 247, 250, 252, 254, 258, 260, 262, 266, 268, 269, 272, 275, 277, 278, 280, 283, 289], "one": [2, 6, 7, 16, 17, 18, 20, 23, 27, 28, 29, 34, 41, 42, 45, 47, 48, 52, 53, 54, 59, 61, 62, 66, 68, 87, 100, 133, 149, 150, 153, 155, 159, 161, 165, 168, 169, 172, 173, 174, 175, 177, 178, 190, 191, 192, 197, 199, 200, 201, 202, 203, 205, 213, 214, 216, 218, 220, 229, 230, 231, 235, 237, 239, 243, 245, 247, 250, 254, 258, 260, 262, 269, 272, 285, 289], "three": [2, 7, 149, 159, 164, 168, 169, 172, 174, 175, 178, 185, 187, 189, 192, 194, 196, 197, 199, 200, 201, 204, 213, 222, 230, 231, 235, 245, 254, 258, 260, 269, 289], "result": [2, 15, 18, 20, 29, 34, 37, 49, 52, 54, 59, 62, 68, 98, 106, 116, 153, 157, 159, 164, 165, 169, 173, 174, 177, 180, 181, 185, 186, 188, 189, 191, 192, 194, 196, 197, 199, 200, 201, 202, 203, 205, 213, 214, 216, 218, 219, 220, 222, 225, 228, 229, 231, 235, 237, 239, 245, 247, 250, 258, 260, 262, 266, 269, 272, 285, 289], "3": [2, 7, 12, 15, 16, 17, 18, 40, 54, 60, 62, 75, 83, 87, 91, 92, 95, 98, 100, 104, 110, 111, 112, 121, 122, 124, 125, 127, 129, 133, 135, 139, 146, 149, 159, 164, 169, 170, 172, 174, 186, 188, 190, 197, 199, 200, 201, 202, 204, 205, 207, 213, 214, 218, 219, 220, 221, 222, 224, 225, 228, 229, 230, 231, 239, 245, 247, 252, 254, 262, 275, 277, 285, 289], "which": [2, 3, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 20, 26, 28, 29, 37, 38, 39, 40, 41, 47, 48, 49, 52, 59, 62, 67, 68, 108, 120, 149, 150, 153, 155, 158, 159, 160, 161, 163, 164, 169, 172, 173, 174, 175, 177, 180, 181, 184, 187, 188, 189, 190, 191, 192, 194, 196, 197, 199, 200, 201, 202, 204, 205, 214, 216, 218, 220, 221, 222, 228, 230, 231, 232, 235, 237, 239, 243, 245, 250, 254, 258, 260, 262, 266, 268, 269, 270, 272, 275, 277, 283, 285, 289], "have": [2, 3, 8, 10, 15, 16, 17, 18, 23, 28, 29, 32, 34, 47, 52, 59, 62, 66, 68, 69, 74, 75, 119, 149, 150, 153, 155, 158, 159, 161, 164, 165, 169, 172, 173, 174, 175, 177, 184, 185, 189, 190, 191, 196, 197, 200, 201, 204, 213, 214, 216, 220, 223, 225, 227, 228, 229, 230, 232, 235, 237, 239, 243, 245, 250, 254, 258, 262, 266, 269, 272, 275, 278, 285, 289], "assign": [2, 7, 10, 15, 17, 18, 20, 34, 48, 54, 56, 59, 63, 66, 68, 150, 157, 159, 163, 169, 176, 187, 189, 193, 199, 205, 214, 216, 220, 228, 229, 230, 231, 235, 237, 239, 243, 245, 247, 260, 269, 283, 285, 288], "confus": [2, 6, 66, 159, 169, 199, 235, 243], "featur": [2, 5, 7, 16, 17, 18, 30, 39, 49, 52, 57, 59, 63, 66, 153, 159, 164, 188, 190, 194, 195, 196, 197, 200, 201, 202, 205, 215, 228, 237, 240, 241, 245, 254, 258, 262, 269, 275, 278, 281, 282, 283, 286, 289], "doe": [2, 10, 17, 18, 34, 45, 52, 54, 56, 62, 64, 68, 153, 155, 157, 158, 159, 165, 169, 186, 190, 194, 196, 197, 200, 201, 204, 205, 213, 214, 216, 225, 228, 230, 232, 235, 237, 239, 243, 250, 262, 268, 269, 285, 289], "singl": [2, 7, 16, 17, 18, 27, 29, 33, 34, 41, 47, 52, 59, 62, 63, 149, 158, 161, 162, 163, 169, 172, 174, 185, 186, 188, 189, 191, 194, 196, 200, 201, 204, 206, 207, 213, 214, 216, 220, 228, 232, 235, 237, 238, 239, 245, 247, 250, 258, 260, 262, 269, 270, 272, 275, 285, 289], "nativ": [3, 9, 39, 46, 52, 76, 79, 97, 208, 213, 235, 289], "mean": [3, 7, 9, 10, 15, 16, 18, 34, 41, 52, 62, 66, 67, 68, 106, 153, 159, 161, 169, 174, 177, 185, 190, 192, 193, 194, 199, 200, 201, 205, 207, 213, 214, 216, 231, 235, 250, 258, 262, 266, 269, 289], "thei": [3, 6, 7, 9, 10, 12, 17, 18, 20, 34, 37, 46, 52, 55, 59, 62, 68, 83, 149, 153, 159, 161, 164, 169, 172, 173, 174, 177, 181, 186, 187, 188, 189, 190, 194, 197, 199, 200, 201, 204, 205, 213, 214, 216, 220, 228, 231, 232, 235, 239, 243, 245, 247, 250, 254, 260, 262, 269, 275, 285, 289], "scalar": [3, 9, 40], "vector": [3, 9, 12, 18, 22, 98, 108, 158, 174, 216, 245, 250], "4d": [3, 9], "int4": [3, 14, 17], "matrix": [3, 11, 17, 37, 62, 153, 159, 169, 230, 235, 243, 250], "4x4": [3, 192], "float4x4": [3, 11, 14, 17], "const_buff": [3, 14], "raytrac": [3, 17, 29, 52, 60, 143, 208], "structur": [3, 18, 20, 25, 26, 27, 29, 32, 33, 39, 48, 57, 61, 62, 66, 68, 69, 74, 149, 154, 155, 161, 163, 175, 179, 201, 209, 212, 232, 236, 241, 243, 251, 269, 277, 279, 281, 286], "tla": [3, 17], "There": [3, 8, 15, 18, 22, 52, 149, 150, 155, 157, 159, 169, 173, 174, 197, 199, 201, 213, 214, 216, 225, 230, 232, 235, 239, 250, 262, 269], "convert": [3, 9, 20, 54, 75, 109, 119, 132, 149, 157, 158, 159, 161, 164, 174, 177, 216, 220, 225, 231, 235, 236, 237, 238, 239, 245, 250, 252, 260, 262, 269, 275, 280, 285, 289], "process": [3, 18, 20, 29, 35, 39, 158, 168, 172, 174, 175, 189, 201, 205, 208, 210, 214, 216, 219, 220, 221, 222, 228, 232, 235, 236, 237, 239, 245, 247, 254, 260, 266, 267, 272, 275, 277, 283, 285], "vertex": [3, 9, 17, 25, 26, 30, 33, 41, 46, 47, 49, 52, 54, 158, 179, 180, 186, 187, 196, 201, 216, 218, 223, 226, 228, 234, 252, 266, 285], "input": [3, 9, 17, 27, 29, 30, 34, 39, 42, 53, 54, 62, 78, 79, 80, 157, 158, 159, 214, 239, 241, 272, 275, 289], "refer": [3, 14, 16, 18, 20, 23, 28, 35, 37, 39, 40, 56, 59, 62, 64, 66, 68, 91, 124, 149, 157, 158, 159, 160, 161, 164, 169, 172, 173, 175, 177, 187, 188, 191, 205, 213, 214, 216, 229, 230, 231, 232, 235, 237, 243, 245, 247, 252, 260, 269, 275, 281, 285], "more": [3, 15, 16, 17, 18, 20, 27, 28, 29, 34, 50, 57, 68, 69, 74, 153, 155, 158, 159, 161, 164, 165, 169, 172, 173, 174, 175, 181, 183, 187, 188, 189, 190, 191, 193, 194, 196, 197, 199, 200, 201, 202, 205, 213, 214, 216, 221, 222, 228, 229, 230, 235, 237, 239, 245, 247, 254, 259, 260, 262, 269, 275, 277, 283, 285, 289], "inform": [3, 9, 12, 20, 29, 35, 39, 45, 48, 52, 59, 62, 158, 161, 165, 169, 172, 173, 181, 188, 191, 193, 201, 202, 205, 215, 216, 219, 220, 221, 225, 229, 231, 233, 237, 239, 245, 250, 252, 254, 259, 266, 269, 270, 279, 281, 285, 289], "most": [3, 10, 17, 18, 22, 39, 45, 52, 53, 59, 62, 67, 149, 159, 169, 173, 174, 188, 190, 193, 197, 199, 201, 205, 216, 221, 224, 231, 237, 239, 245, 254, 258, 272, 275, 285, 289], "often": [3, 15, 17, 18, 59, 64, 155, 159, 172, 173, 185, 189, 200, 201, 202, 205, 214, 228, 230, 232, 239, 245, 254, 269, 272, 275, 285, 289], "from": [3, 7, 9, 10, 12, 15, 16, 17, 18, 20, 23, 29, 32, 33, 34, 36, 39, 41, 46, 48, 50, 52, 54, 56, 59, 60, 61, 62, 63, 64, 66, 67, 68, 69, 72, 75, 77, 80, 82, 83, 84, 85, 87, 88, 90, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 153, 155, 157, 158, 159, 161, 163, 164, 165, 168, 169, 172, 173, 174, 175, 177, 178, 180, 181, 183, 185, 186, 187, 189, 190, 191, 192, 194, 195, 196, 197, 199, 200, 201, 202, 203, 205, 206, 210, 213, 214, 216, 218, 219, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 232, 235, 237, 239, 243, 245, 247, 250, 252, 258, 259, 260, 262, 266, 269, 270, 272, 275, 280, 283, 285, 289], "code": [3, 7, 8, 15, 16, 17, 19, 29, 30, 35, 36, 39, 46, 52, 58, 59, 61, 62, 64, 67, 71, 74, 75, 87, 98, 100, 106, 149, 160, 161, 188, 205, 208, 213, 250, 252, 269, 275, 276, 280, 285, 289], "dure": [3, 7, 10, 18, 20, 29, 34, 35, 52, 62, 153, 155, 157, 158, 159, 164, 165, 169, 172, 173, 174, 175, 177, 185, 189, 193, 196, 200, 206, 216, 220, 222, 228, 230, 231, 235, 239, 245, 247, 256, 258, 269, 270, 272, 275, 285, 289], "follow": [3, 6, 7, 9, 10, 16, 17, 18, 31, 32, 52, 53, 59, 62, 66, 68, 91, 124, 133, 150, 153, 155, 157, 159, 161, 164, 165, 168, 169, 172, 173, 174, 175, 177, 178, 180, 186, 191, 194, 197, 199, 200, 201, 202, 205, 206, 207, 209, 210, 213, 214, 216, 218, 219, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 232, 243, 245, 247, 250, 258, 260, 266, 269, 275, 277, 278, 280, 283, 285, 289], "syntax": [3, 5, 7, 9, 16, 17, 61, 62, 159, 162, 164, 165, 181, 188, 205, 213, 214, 232, 239, 251, 252, 258, 285], "initi": [3, 15, 17, 18, 20, 27, 29, 35, 39, 52, 59, 62, 68, 159, 160, 165, 169, 174, 197, 201, 214, 219, 220, 222, 228, 229, 231, 235, 239, 243, 245, 247, 250, 269, 277, 283, 285], "always_referenc": [3, 14, 17], "cannot": [3, 12, 16, 18, 20, 54, 62, 83, 155, 159, 161, 163, 164, 165, 169, 172, 173, 174, 181, 191, 194, 197, 200, 201, 216, 225, 228, 235, 237, 239, 243, 247, 262, 269, 285], "float2": [3, 9, 14, 17], "float3": [3, 7, 9, 11, 12, 14, 17, 20], "must": [3, 9, 15, 17, 18, 20, 28, 29, 31, 33, 34, 39, 40, 42, 47, 52, 56, 59, 62, 63, 66, 67, 68, 72, 73, 98, 149, 153, 155, 159, 161, 164, 165, 169, 172, 173, 174, 177, 181, 186, 187, 188, 189, 194, 200, 201, 204, 205, 206, 210, 214, 216, 230, 235, 237, 239, 243, 250, 252, 258, 262, 268, 269, 272, 280, 285, 289], "support": [3, 5, 6, 10, 11, 12, 14, 16, 17, 18, 20, 29, 30, 35, 38, 45, 46, 47, 49, 50, 52, 53, 57, 59, 61, 62, 66, 67, 68, 91, 124, 149, 155, 158, 159, 161, 165, 169, 180, 181, 185, 186, 188, 191, 194, 196, 199, 201, 202, 205, 207, 213, 214, 215, 218, 221, 222, 223, 225, 231, 235, 237, 239, 243, 245, 247, 260, 262, 275, 281, 285], "flag": [3, 7, 17, 27, 29, 34, 35, 36, 39, 41, 50, 52, 54, 61, 62, 68, 69, 87, 100, 155, 158, 169, 186, 245, 247, 269, 270], "disallow": [3, 10], "unus": [3, 52, 54, 68, 159, 178, 186, 188, 196, 197, 200, 201, 205, 239, 285], "help": [3, 16, 20, 159, 174, 201, 209, 216, 227, 228, 245, 253, 254, 256, 262, 266, 269, 272, 275, 285, 287, 289], "when": [3, 7, 9, 10, 12, 16, 17, 18, 20, 22, 28, 29, 30, 34, 39, 40, 42, 45, 47, 49, 52, 53, 59, 62, 63, 64, 66, 68, 87, 100, 143, 149, 153, 157, 158, 159, 160, 163, 164, 165, 168, 169, 170, 173, 174, 175, 177, 178, 181, 183, 184, 185, 186, 188, 190, 191, 192, 193, 194, 195, 196, 197, 199, 200, 201, 205, 206, 213, 216, 218, 220, 221, 222, 230, 231, 232, 235, 237, 241, 243, 245, 247, 250, 254, 259, 260, 262, 269, 272, 275, 277, 285, 289], "we": [3, 8, 9, 15, 17, 18, 23, 29, 30, 35, 37, 39, 50, 52, 56, 59, 62, 74, 75, 149, 153, 159, 161, 163, 168, 169, 175, 181, 197, 199, 200, 201, 205, 216, 231, 243, 245, 254, 258, 262, 269, 275, 280, 285, 289], "want": [3, 7, 15, 18, 39, 57, 59, 62, 150, 159, 161, 168, 177, 185, 199, 200, 201, 202, 205, 213, 221, 235, 237, 239, 243, 245, 260, 262, 266, 269, 272, 277, 283], "access": [3, 5, 7, 10, 15, 18, 20, 25, 27, 28, 29, 34, 37, 39, 41, 52, 59, 60, 62, 64, 65, 68, 69, 76, 155, 159, 175, 201, 226, 232, 235, 243, 245, 254, 263, 264, 266, 272, 279, 281, 283, 289], "cpu": [3, 7, 17, 29, 30, 34, 39, 57, 62, 64, 237, 245], "construct": [3, 7, 36, 56, 57, 62, 63, 67, 161, 163, 214, 289], "wai": [3, 7, 8, 15, 18, 29, 52, 62, 157, 159, 168, 169, 177, 190, 204, 213, 214, 216, 231, 237, 239, 243, 245, 247, 254, 262, 269, 272, 280], "specifi": [3, 7, 9, 10, 12, 15, 16, 17, 18, 20, 22, 23, 29, 30, 31, 32, 34, 37, 38, 40, 41, 43, 47, 48, 50, 52, 54, 57, 59, 62, 64, 66, 68, 98, 108, 149, 150, 153, 158, 159, 160, 161, 163, 164, 165, 169, 173, 174, 175, 177, 178, 181, 185, 187, 188, 189, 194, 196, 197, 200, 201, 202, 205, 206, 216, 219, 220, 221, 222, 225, 227, 228, 229, 230, 231, 232, 235, 237, 239, 252, 254, 258, 260, 262, 266, 268, 269, 270, 272, 275, 280, 283, 285, 289], "no_warn": [3, 14], "stack": [3, 158, 159, 205, 258, 259, 289], "visibl": [3, 15, 17, 18, 20, 39, 59, 157, 158, 159, 164, 165, 172, 174, 181, 184, 185, 186, 188, 189, 192, 197, 199, 200, 201, 202, 205, 206, 216, 221, 222, 235, 237, 239, 245, 247, 285, 289], "onli": [3, 7, 8, 9, 10, 11, 16, 17, 18, 20, 28, 29, 34, 35, 39, 40, 41, 45, 52, 53, 54, 56, 59, 62, 63, 64, 67, 68, 87, 100, 106, 149, 153, 155, 157, 159, 164, 168, 169, 172, 173, 174, 175, 177, 178, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 194, 195, 196, 197, 199, 200, 201, 202, 204, 205, 206, 213, 214, 216, 218, 220, 221, 222, 225, 228, 230, 232, 235, 237, 239, 243, 245, 247, 250, 254, 258, 260, 262, 268, 269, 270, 275, 285, 289], "temporari": [3, 29, 54, 186, 235, 237, 239, 260, 289], "calcul": [3, 18, 20, 29, 37, 52, 159, 164, 174, 196, 200, 201, 205, 216, 231, 239, 245, 252, 258, 262, 285, 289], "static": [3, 7, 10, 14, 15, 17, 18, 23, 27, 35, 40, 52, 53, 54, 56, 62, 66, 67, 68, 83, 85, 91, 98, 124, 158, 173, 186, 199, 289], "instanti": [3, 7, 259], "dynam": [3, 7, 10, 14, 15, 17, 20, 23, 59, 62, 158, 159, 161, 163, 165, 172, 173, 178, 193, 196, 199, 202, 208, 245, 250, 275, 286, 288], "similarli": [3, 20, 28, 34, 149, 159, 186, 197, 199, 201, 202, 204, 232, 237, 239, 243, 245, 260, 275, 289], "chang": [3, 5, 7, 17, 18, 20, 29, 58, 59, 62, 63, 64, 68, 69, 83, 151, 153, 158, 159, 164, 165, 168, 172, 173, 175, 177, 181, 188, 189, 190, 192, 200, 201, 205, 209, 213, 218, 220, 223, 225, 227, 228, 230, 231, 232, 237, 239, 241, 243, 245, 247, 252, 262, 268, 269, 272, 275, 278, 283, 285], "well": [3, 7, 9, 16, 18, 39, 52, 63, 156, 158, 159, 165, 173, 190, 191, 195, 196, 197, 200, 201, 213, 235, 237, 245, 254, 262, 266], "expens": [3, 62, 169, 190, 191, 201, 205, 280], "than": [3, 17, 18, 28, 29, 30, 34, 48, 52, 59, 62, 149, 155, 157, 159, 164, 169, 172, 174, 175, 185, 186, 187, 189, 190, 191, 194, 197, 199, 200, 201, 202, 205, 206, 208, 213, 216, 219, 229, 230, 235, 239, 254, 259, 262, 269, 272, 275, 289], "stcode": [3, 10, 12, 17, 253, 256], "respons": [3, 17, 18, 108, 158, 164, 230, 269, 275, 280], "execut": [3, 17, 18, 27, 32, 39, 52, 53, 54, 56, 57, 59, 61, 62, 64, 69, 73, 79, 98, 131, 150, 161, 188, 210, 225, 231, 239, 260, 262, 266, 269, 277, 285], "time": [3, 6, 7, 9, 12, 16, 17, 18, 20, 29, 30, 39, 50, 52, 54, 57, 59, 62, 63, 66, 67, 68, 69, 72, 79, 120, 131, 149, 153, 158, 159, 161, 164, 165, 169, 172, 173, 175, 192, 200, 201, 205, 206, 208, 218, 222, 227, 230, 235, 237, 239, 245, 247, 253, 256, 262, 269, 270, 272, 277, 285], "setstat": [3, 7], "call": [3, 7, 15, 16, 17, 18, 20, 25, 26, 27, 28, 29, 34, 39, 41, 42, 45, 47, 49, 52, 53, 54, 56, 58, 59, 62, 64, 66, 68, 71, 72, 74, 87, 100, 120, 159, 201, 202, 205, 213, 216, 232, 235, 258, 269, 283], "without": [3, 15, 16, 17, 18, 20, 23, 30, 34, 37, 39, 52, 59, 62, 63, 66, 68, 157, 158, 159, 161, 164, 168, 169, 174, 177, 184, 185, 188, 189, 197, 199, 200, 201, 202, 204, 205, 213, 214, 216, 222, 228, 235, 237, 239, 245, 252, 258, 262, 269, 270, 272, 280, 285, 289], "normal": [3, 9, 15, 17, 52, 62, 111, 149, 158, 159, 164, 178, 179, 180, 181, 182, 183, 185, 186, 188, 191, 192, 194, 195, 197, 200, 202, 204, 206, 207, 214, 216, 220, 226, 230, 231, 234, 235, 237, 239, 245, 250, 254, 259, 262, 269, 272, 285, 289], "trigger": [3, 18, 20, 59, 129, 165, 169, 201, 206, 243, 245, 269, 289], "warn": [3, 20, 62, 106, 117, 165, 174, 213, 216, 220, 225, 228, 230, 239, 243, 245, 289], "some_tex": [3, 58], "some_buf": [3, 12], "some_constant_buf": 3, "pipe": [3, 9, 13, 17], "via": [3, 5, 9, 11, 16, 17, 18, 34, 47, 150, 153, 160, 161, 169, 172, 173, 175, 187, 194, 196, 201, 205, 213, 222, 223, 228, 232, 235, 237, 239, 243, 245, 259, 269, 270, 272, 289], "e": [3, 6, 7, 9, 16, 17, 18, 38, 58, 59, 62, 66, 67, 68, 75, 77, 94, 111, 136, 149, 150, 153, 159, 161, 164, 168, 169, 173, 174, 175, 177, 181, 185, 188, 189, 190, 200, 201, 205, 206, 210, 214, 216, 219, 222, 228, 232, 239, 243, 245, 258, 266, 269, 275, 285, 289], "g": [3, 6, 7, 9, 12, 16, 17, 18, 20, 38, 43, 54, 59, 62, 66, 67, 68, 111, 149, 150, 158, 159, 161, 164, 168, 169, 173, 174, 175, 177, 181, 185, 186, 188, 190, 192, 197, 199, 200, 201, 205, 206, 210, 214, 219, 222, 228, 232, 239, 243, 245, 250, 258, 262, 266, 269, 275, 285, 289], "my_tex": [3, 62, 64], "my_buf": [3, 17], "buf": [3, 12, 17, 27, 34, 44, 66, 161], "some_buffer_inc": 3, "hlsli": [3, 29], "ha": [3, 7, 10, 15, 16, 17, 18, 20, 27, 28, 29, 30, 34, 42, 52, 62, 66, 68, 91, 124, 149, 153, 155, 159, 164, 169, 172, 173, 181, 189, 194, 199, 200, 201, 202, 205, 216, 231, 235, 239, 245, 250, 254, 258, 259, 262, 269, 270, 272, 280, 285, 289], "somebuff": 3, "struct": [3, 9, 17, 18, 20, 29, 30, 32, 34, 35, 36, 39, 40, 41, 43, 45, 48, 52, 54, 59, 62, 68, 71, 72], "structuredbuff": [3, 12, 17, 29], "my_cbuf": 3, "cbuf": [3, 17], "cbuffer": [3, 17, 29], "some_constant_buffer_inc": 3, "someconstantbuff": 3, "my_constant_buf": 3, "now": [3, 10, 15, 18, 20, 159, 169, 175, 181, 200, 201, 205, 216, 218, 227, 229, 231, 232, 235, 239, 243, 245, 247, 269, 272, 283, 289], "messag": [4, 35, 209, 252, 254, 285], "gi_qual": 4, "only_ao": 4, "high": [4, 18, 66, 149, 158, 159, 169, 172, 188, 190, 196, 208, 209, 222, 228, 237, 252, 258, 269, 283, 285], "unimpl": 4, "gi": 4, "qualiti": [4, 22, 54, 66, 68, 149, 158, 172, 174, 192, 209, 245, 252, 262, 269, 277, 285], "output": [4, 16, 20, 30, 37, 49, 52, 54, 62, 68, 72, 98, 158, 159, 210, 214, 219, 222, 225, 229, 230, 231, 239, 241, 245, 252, 266, 272, 275, 285, 289], "prog": [4, 20, 22, 23, 77, 80, 82, 83, 84, 85, 87, 88, 90, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 148, 169, 172, 173, 174, 175, 178, 194, 210, 213, 258, 262, 277, 280], "gamelib": [4, 76, 78, 79, 87, 88, 90, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 148, 174, 213, 262], "debuggbuff": 4, "41": 4, "9": [4, 18, 54, 60, 66, 90, 140, 161, 172, 178, 181, 191, 199, 201, 205, 213, 219, 220, 222, 225, 228, 230, 231, 262, 280, 289], "built": [5, 11, 17, 23, 65, 159, 169, 208, 237, 241, 245, 247, 262, 269, 285, 289], "toggl": [5, 16, 157, 159, 175, 192, 194, 195, 196, 197, 205, 213, 218, 223, 228, 230, 235, 239, 245, 252, 258, 267], "specif": [5, 7, 15, 16, 17, 18, 20, 29, 30, 34, 35, 47, 52, 54, 62, 63, 108, 149, 153, 155, 157, 158, 159, 161, 162, 166, 168, 169, 172, 174, 175, 177, 180, 181, 185, 187, 188, 189, 197, 200, 204, 205, 208, 209, 216, 218, 220, 221, 228, 235, 239, 243, 245, 247, 254, 258, 259, 262, 266, 267, 275, 280, 283, 285], "behavior": [5, 16, 18, 20, 29, 34, 41, 52, 62, 79, 89, 131, 158, 159, 164, 169, 186, 187, 205, 216, 222, 223, 230, 269, 275, 285, 289], "depend": [5, 7, 18, 59, 62, 149, 150, 155, 158, 159, 164, 173, 174, 185, 187, 189, 210, 214, 222, 237, 245, 252, 258, 262, 268, 275, 285], "target": [5, 15, 16, 20, 25, 26, 34, 39, 40, 42, 51, 52, 62, 165, 175, 177, 197, 214, 222, 231, 232, 239, 260, 266, 269, 285], "platform": [5, 7, 26, 35, 47, 52, 53, 56, 59, 79, 106, 131, 155, 158, 161, 215, 252, 262, 268, 275, 281], "etc": [5, 16, 17, 18, 40, 59, 62, 64, 66, 150, 153, 159, 161, 169, 193, 199, 201, 205, 206, 213, 214, 216, 225, 235, 245, 262, 270, 275], "here": [5, 9, 17, 18, 20, 29, 52, 62, 153, 157, 159, 160, 169, 172, 173, 174, 186, 187, 191, 192, 197, 199, 200, 201, 204, 213, 214, 216, 222, 223, 227, 230, 231, 235, 237, 239, 243, 245, 254, 258, 259, 260, 262, 275, 277, 283, 285, 289], "list": [5, 9, 11, 18, 20, 27, 35, 59, 62, 66, 68, 79, 93, 117, 131, 134, 149, 158, 159, 161, 168, 169, 197, 201, 205, 212, 213, 219, 220, 221, 222, 225, 230, 232, 235, 237, 239, 243, 247, 250, 253, 256, 262, 266, 269, 270, 272, 275, 280, 285, 289], "avail": [5, 11, 15, 17, 18, 20, 28, 45, 46, 47, 52, 54, 59, 66, 143, 153, 155, 165, 174, 180, 186, 201, 204, 205, 216, 220, 222, 231, 232, 235, 239, 243, 247, 252, 258, 260, 262, 272, 276, 277, 283, 285, 289], "metal": [5, 14, 41, 158, 178, 181, 189, 191, 194, 197, 201, 205, 208, 245, 272, 275, 280, 285], "api": [5, 18, 20, 25, 34, 39, 42, 44, 46, 52, 53, 54, 62, 64, 65, 69, 127, 196, 208, 275, 281], "metalio": [5, 14], "io": [5, 52, 158, 161, 208, 253, 256, 268, 275], "vulkan": [5, 14, 17, 35, 39, 52, 54, 208, 280], "pc": [5, 14, 34, 106, 149, 150, 158, 161, 168, 175, 208, 253, 254, 256, 258, 262, 266, 268, 269, 285, 289], "deprec": [5, 9, 33, 37, 41, 45, 51, 62, 202], "alia": [5, 15, 52, 54, 59, 62, 67], "directx": [5, 44, 208, 231], "11": [5, 40, 60, 90, 140, 191, 199, 201, 219, 220, 222, 225, 228, 230, 231], "dx11": [5, 14, 35, 47, 275], "dx12": [5, 14, 16, 17, 34, 35, 47, 52, 275, 280], "12": [5, 40, 52, 60, 164, 169, 196, 197, 205, 208, 214, 219, 220, 222, 225, 230, 231, 247], "xbox": [5, 14, 41, 52, 208, 253, 256], "One": [5, 16, 29, 33, 34, 37, 45, 52, 54, 159, 198, 200, 208], "scarlett": [5, 14, 52], "k": [5, 22, 214], "seri": [5, 52, 159, 208, 254], "ps4": [5, 14, 17, 47, 52, 138, 208, 253, 256], "playstat": [5, 17, 52, 208, 252], "4": [5, 7, 9, 11, 12, 15, 16, 17, 18, 40, 43, 44, 47, 49, 52, 60, 87, 90, 91, 98, 100, 102, 111, 124, 140, 149, 159, 161, 164, 169, 170, 174, 181, 186, 188, 197, 199, 200, 201, 202, 204, 205, 207, 208, 214, 218, 219, 220, 221, 222, 224, 225, 228, 229, 230, 231, 239, 247, 252, 254, 262, 266, 275, 280, 285, 289], "ps5": [5, 14, 17, 52, 138], "5": [5, 7, 15, 16, 18, 52, 60, 90, 98, 126, 137, 140, 153, 155, 158, 159, 164, 169, 172, 174, 180, 181, 185, 186, 187, 188, 189, 190, 194, 197, 199, 200, 201, 202, 205, 208, 214, 219, 220, 222, 225, 228, 229, 230, 231, 247, 254, 258, 262, 280, 285, 289], "fsh_4_0": [5, 14], "model": [5, 16, 17, 18, 37, 62, 150, 153, 158, 159, 161, 163, 165, 170, 185, 186, 188, 190, 191, 193, 197, 199, 200, 201, 202, 205, 216, 218, 228, 231, 239, 245, 262, 269, 275, 283, 286, 288], "version": [5, 18, 19, 35, 52, 62, 158, 159, 164, 169, 183, 184, 199, 201, 202, 214, 218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 232, 235, 237, 239, 262, 268], "fsh_5_0": [5, 14], "fsh_6_0": [5, 14], "6": [5, 16, 52, 54, 60, 66, 90, 140, 159, 169, 178, 188, 199, 200, 201, 214, 219, 220, 222, 225, 228, 229, 230, 231, 239, 247, 280, 285, 289], "fsh_6_6": [5, 14], "mesh": [5, 9, 15, 17, 25, 26, 30, 52, 153, 158, 159, 164, 175, 186, 197, 216, 218, 220, 228, 229, 230, 239, 241, 245, 247, 252, 256, 259, 264, 285, 289], "bindless": [5, 14, 17, 25, 26, 52], "usag": [5, 9, 11, 12, 15, 22, 23, 29, 39, 45, 48, 54, 55, 60, 61, 62, 64, 68, 77, 80, 82, 83, 84, 85, 87, 88, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 141, 142, 143, 144, 145, 146, 148, 158, 170, 177, 179, 201, 208, 213, 251, 252, 261, 264, 265, 271, 275], "example_shad": [5, 7, 11, 17], "some_shad": [6, 9, 17, 58], "include_opt": [6, 14], "optional_shad": 6, "file": [6, 7, 13, 17, 18, 20, 22, 23, 29, 35, 37, 42, 77, 80, 82, 83, 84, 85, 87, 88, 90, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 153, 155, 158, 160, 162, 163, 164, 165, 169, 170, 172, 173, 175, 177, 178, 180, 189, 190, 192, 194, 207, 210, 213, 214, 216, 219, 220, 221, 225, 227, 230, 231, 232, 237, 241, 243, 245, 247, 251, 252, 254, 258, 261, 262, 264, 268, 269, 270, 272, 275, 277, 280, 285, 289], "alwai": [6, 9, 16, 18, 20, 29, 46, 49, 52, 59, 62, 64, 68, 149, 159, 161, 164, 169, 172, 173, 174, 177, 185, 186, 188, 189, 197, 200, 201, 205, 206, 213, 216, 230, 232, 243, 245, 254, 262, 269, 283, 285, 289], "should": [6, 7, 8, 9, 15, 17, 18, 20, 23, 28, 29, 31, 32, 34, 35, 37, 42, 44, 45, 46, 47, 49, 51, 52, 58, 59, 62, 64, 68, 69, 72, 87, 100, 116, 149, 150, 153, 155, 157, 159, 164, 168, 169, 172, 173, 174, 177, 188, 189, 192, 193, 196, 197, 200, 201, 205, 213, 214, 216, 218, 222, 224, 227, 228, 231, 232, 235, 237, 239, 245, 250, 262, 266, 268, 269, 272, 275, 277, 280, 283, 285, 289], "where": [6, 9, 12, 15, 16, 17, 18, 20, 30, 32, 39, 45, 52, 62, 66, 67, 87, 100, 106, 149, 150, 153, 155, 158, 159, 161, 164, 168, 174, 175, 180, 181, 185, 186, 189, 190, 191, 192, 194, 197, 199, 200, 201, 205, 206, 213, 216, 220, 229, 230, 231, 232, 235, 238, 239, 241, 244, 245, 249, 250, 252, 259, 260, 262, 269, 270, 272, 275, 277, 278, 283, 285], "regular": [6, 7, 20, 41, 52, 62, 158, 159, 189, 239, 247, 250, 258], "rule": [6, 9, 42, 68, 152, 157, 158, 162, 163, 169, 173, 174, 177, 196, 201, 213, 216, 225, 250, 261, 264, 268, 269, 270, 275, 285, 289], "gener": [7, 9, 15, 17, 18, 19, 25, 39, 52, 59, 60, 62, 63, 64, 65, 67, 68, 149, 152, 154, 157, 158, 159, 160, 163, 164, 165, 168, 170, 173, 175, 178, 196, 198, 202, 210, 213, 214, 216, 218, 220, 222, 226, 229, 231, 233, 234, 235, 237, 241, 249, 252, 254, 258, 259, 261, 263, 264, 269, 271, 280, 283, 286, 288], "whether": [7, 18, 20, 36, 38, 40, 54, 61, 62, 66, 67, 68, 153, 158, 161, 165, 169, 172, 173, 180, 185, 191, 199, 201, 204, 205, 207, 221, 235, 237, 239, 247, 250, 254, 266, 275, 280], "fall": [7, 52, 159, 169, 172, 201, 289], "rang": [7, 9, 12, 16, 27, 28, 34, 35, 40, 149, 158, 159, 164, 169, 172, 174, 177, 185, 186, 187, 188, 189, 190, 191, 194, 195, 197, 200, 201, 202, 205, 206, 222, 230, 231, 232, 245, 250, 253, 256, 259, 262, 275, 285, 289], "consid": [7, 9, 10, 59, 62, 149, 153, 155, 159, 169, 173, 197, 200, 201, 205, 219, 228, 230, 231, 235, 237, 245, 250, 258, 272, 289], "below_zero": 7, "zero": [7, 16, 28, 29, 48, 52, 159, 161, 164, 188, 194, 200, 205, 222, 231, 232, 235, 237, 245, 250, 259, 260, 272], "positive_less_than_four": 7, "four": [7, 18, 164, 178, 198, 201, 202, 245, 247, 254, 258, 275], "five_or_high": 7, "same": [7, 15, 16, 17, 18, 20, 28, 29, 30, 34, 39, 41, 44, 51, 52, 54, 59, 61, 62, 66, 67, 68, 69, 149, 150, 153, 157, 159, 161, 163, 164, 169, 172, 173, 174, 175, 184, 187, 188, 189, 191, 194, 199, 200, 201, 204, 205, 213, 214, 216, 225, 228, 230, 232, 235, 237, 239, 243, 245, 250, 254, 258, 262, 266, 269, 272, 275, 283, 285, 289], "goe": [7, 213, 237, 262], "permut": [7, 13], "itself": [7, 17, 18, 58, 62, 159, 161, 164, 200, 201, 205, 216, 235, 237, 239, 243, 245, 254, 269, 272], "essenti": [7, 18, 150, 159, 160, 164, 169, 174, 185, 189, 199, 200, 201, 205, 209, 215, 228, 232, 250, 254, 258, 264, 266, 269, 275, 285, 289], "understand": [7, 18, 62, 159, 161, 169, 174, 181, 201, 213, 266, 269, 275, 282, 285, 289], "doesn": [7, 18, 23, 31, 34, 52, 62, 74, 153, 159, 169, 174, 181, 186, 190, 194, 197, 200, 201, 214, 232, 235, 245, 262, 266, 269, 272, 277, 289], "equal": [7, 16, 34, 40, 62, 159, 161, 200, 254, 289], "within": [7, 8, 9, 13, 17, 18, 19, 20, 28, 31, 42, 59, 62, 64, 67, 149, 153, 155, 158, 159, 160, 161, 164, 168, 169, 172, 173, 174, 185, 188, 189, 190, 194, 201, 214, 216, 219, 220, 229, 230, 231, 235, 239, 240, 243, 245, 247, 254, 258, 259, 260, 262, 268, 269, 270, 275, 283, 285, 289], "so": [7, 12, 15, 16, 17, 18, 28, 29, 39, 42, 44, 46, 48, 49, 52, 53, 59, 61, 62, 63, 64, 66, 68, 153, 155, 159, 169, 172, 177, 186, 187, 188, 190, 194, 196, 197, 200, 201, 203, 204, 205, 206, 213, 214, 216, 219, 220, 228, 231, 232, 235, 237, 239, 243, 245, 254, 262, 269, 272, 275, 285, 289], "appli": [7, 17, 18, 42, 48, 52, 58, 66, 68, 75, 83, 157, 158, 159, 160, 161, 164, 165, 169, 172, 173, 174, 175, 177, 178, 181, 185, 186, 188, 189, 190, 191, 194, 195, 196, 197, 199, 200, 201, 202, 204, 205, 206, 216, 220, 222, 223, 228, 229, 230, 231, 232, 235, 237, 239, 243, 245, 252, 259, 262, 272, 275, 285], "notic": [7, 15, 159, 174, 175, 185, 190, 197, 199, 200, 201, 231, 269, 272, 280, 285, 289], "abov": [7, 9, 20, 42, 149, 157, 159, 161, 163, 164, 169, 172, 180, 185, 189, 194, 195, 200, 201, 202, 204, 205, 214, 216, 223, 230, 250, 258, 259, 262, 280, 285, 289], "describ": [7, 9, 17, 18, 20, 30, 34, 39, 42, 48, 52, 59, 61, 62, 150, 155, 157, 158, 159, 161, 164, 165, 169, 173, 174, 175, 187, 213, 239, 247, 275, 289], "resolv": [7, 20, 39, 52, 62, 72, 155, 158, 159, 201, 216, 224, 225, 230, 260, 269, 272, 285], "appropri": [7, 9, 17, 18, 149, 155, 159, 161, 168, 169, 174, 175, 177, 197, 200, 201, 218, 235, 239, 245, 266, 272, 285, 289], "select": [7, 10, 18, 52, 150, 158, 159, 164, 168, 169, 174, 175, 186, 188, 191, 194, 196, 197, 200, 201, 205, 216, 218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 235, 237, 239, 243, 254, 258, 269, 275, 283, 285, 289], "wors": [7, 34, 174], "impact": [7, 39, 153, 159, 169, 172, 173, 185, 189, 197, 201, 243, 245, 289], "compar": [7, 20, 34, 35, 45, 158, 159, 185, 197, 201, 228, 235, 245, 289], "make": [7, 18, 20, 23, 29, 39, 50, 52, 59, 62, 67, 68, 74, 153, 155, 159, 161, 164, 168, 169, 173, 177, 181, 186, 188, 189, 190, 196, 197, 199, 200, 201, 202, 204, 205, 209, 216, 218, 219, 221, 222, 223, 224, 225, 228, 229, 230, 231, 235, 237, 243, 258, 259, 262, 269, 272, 275, 277, 278, 283, 285, 289], "replac": [7, 8, 16, 20, 30, 47, 52, 54, 62, 68, 69, 139, 150, 155, 159, 167, 168, 169, 170, 194, 200, 202, 210, 221, 222, 225, 228, 232, 237, 239, 241, 247, 254, 262, 269, 272, 275, 277], "thu": [7, 18, 45, 159, 169, 177, 185, 200, 232, 262], "reduc": [7, 18, 52, 155, 164, 181, 185, 186, 189, 192, 195, 197, 200, 201, 202, 205, 222, 228, 239, 247, 269, 270, 272, 285], "optionalasbranch": 7, "act": [7, 15, 17, 18, 149, 185, 191, 199, 201, 205, 259, 289], "dev": [7, 18, 40, 150, 159, 175, 250, 260, 262, 266, 269, 270, 275, 285], "build": [7, 18, 20, 29, 39, 40, 52, 81, 149, 151, 153, 158, 159, 160, 167, 169, 170, 173, 174, 175, 177, 193, 194, 200, 201, 206, 209, 211, 212, 215, 222, 228, 235, 239, 243, 246, 258, 260, 262, 264, 268, 275, 279, 281, 285, 289], "test_opt": 7, "testmateri": 7, "fix": [7, 16, 17, 27, 52, 158, 159, 172, 175, 186, 200, 205, 226, 230, 234, 239, 247, 269, 278, 285, 289], "Such": [7, 18, 23, 29, 52, 165, 189, 201, 285], "mai": [7, 16, 18, 20, 22, 28, 34, 39, 42, 48, 49, 52, 54, 59, 62, 64, 66, 149, 150, 153, 155, 159, 160, 164, 165, 169, 173, 174, 175, 185, 186, 188, 189, 190, 191, 195, 197, 199, 200, 201, 204, 205, 214, 216, 218, 219, 221, 222, 223, 224, 225, 228, 230, 231, 232, 235, 237, 239, 243, 245, 247, 250, 258, 269, 270, 272, 275, 277, 280, 283, 285, 289], "binari": [7, 97, 158, 172, 175, 213, 232, 245, 251, 252, 254, 258, 262, 266, 269, 275, 280, 285, 289], "allow": [7, 16, 17, 18, 22, 23, 27, 29, 34, 35, 36, 39, 40, 41, 52, 56, 59, 62, 67, 106, 127, 149, 153, 158, 159, 160, 161, 163, 164, 165, 169, 174, 180, 181, 188, 189, 196, 197, 200, 201, 202, 205, 208, 213, 214, 216, 220, 222, 223, 228, 229, 230, 231, 232, 235, 237, 239, 243, 245, 247, 250, 254, 258, 262, 268, 269, 270, 272, 275, 289], "disabl": [7, 10, 15, 16, 17, 35, 40, 45, 52, 53, 62, 63, 66, 68, 157, 158, 164, 172, 173, 175, 180, 186, 190, 191, 193, 195, 196, 200, 202, 205, 206, 207, 220, 223, 228, 230, 235, 239, 243, 245, 252, 262, 268, 269, 285, 289], "config": [7, 68, 87, 100, 150, 161, 162, 167, 213, 232, 258, 262, 269, 289], "blk": [7, 23, 83, 96, 121, 149, 150, 153, 155, 166, 167, 170, 172, 173, 174, 175, 177, 178, 180, 194, 201, 202, 204, 205, 230, 235, 239, 243, 245, 248, 252, 258, 259, 261, 262, 264, 266, 267, 268, 270, 272, 281, 286, 289], "To": [7, 18, 20, 23, 27, 29, 47, 52, 61, 64, 149, 150, 153, 155, 157, 159, 161, 163, 164, 165, 169, 172, 173, 174, 175, 177, 180, 186, 189, 196, 197, 200, 201, 205, 210, 213, 214, 216, 218, 219, 220, 221, 222, 223, 224, 225, 228, 229, 230, 231, 232, 237, 239, 241, 243, 245, 247, 250, 252, 254, 258, 259, 260, 268, 269, 270, 272, 277, 285, 289], "assume_var": 7, "common_assum": 7, "supports_sh_6_1": 7, "static_shadows_custom_fxaa": 7, "grass_use_quad": 7, "bloom_tex": 7, "By": [7, 16, 20, 34, 69, 72, 87, 100, 153, 159, 161, 169, 174, 175, 181, 185, 194, 196, 197, 200, 201, 204, 205, 209, 216, 218, 229, 235, 239, 245, 258, 259, 262, 285, 289], "never": [7, 16, 18, 59, 62, 64, 106, 157, 159, 172, 200, 201, 216, 235, 262], "interval_nam": 7, "interval_valu": 7, "forc": [7, 22, 38, 40, 52, 53, 54, 68, 159, 204, 216, 245, 252, 259, 289], "unnecessari": [7, 18, 159, 164, 169, 175, 188, 196, 199, 201, 202, 216, 228, 230, 235, 237, 245, 269, 285], "share": [7, 10, 15, 18, 66, 149, 159, 163, 177, 188, 194, 266, 285], "among": [7, 62, 235, 239], "deferred_shadow_common": 7, "deferred_shadow_classify_til": 7, "use_ssss": 7, "off": [7, 40, 52, 159, 169, 173, 181, 191, 192, 200, 201, 205, 216, 223, 228, 239, 245, 250, 253, 256, 285], "argument1": 8, "argument2": 8, "endmacro": [8, 14], "occur": [8, 18, 20, 62, 159, 164, 165, 169, 185, 186, 195, 197, 200, 201, 205, 225, 235, 247, 268, 269, 272, 285, 289], "would": [8, 16, 17, 18, 23, 34, 52, 53, 62, 120, 132, 153, 159, 161, 169, 173, 174, 177, 190, 197, 199, 200, 201, 205, 206, 209, 235, 237, 269, 270, 272, 278], "pass": [8, 16, 17, 18, 20, 39, 52, 56, 57, 58, 59, 62, 106, 108, 119, 127, 158, 161, 172, 173], "invok": [8, 18, 52], "undefin": [8, 34, 62, 235], "define_macro_if_not_defin": [8, 14], "wasn": [8, 269], "previous": [8, 18, 28, 47, 53, 54, 62, 112, 159, 191, 220, 229, 245, 247, 254, 269], "convent": [8, 16, 62, 153, 169, 175, 194, 214, 243, 289], "regard": [8, 165, 169, 285, 289], "No": [8, 29, 35, 39, 52, 57, 60, 67, 75, 155, 159, 169, 185, 192, 201, 205, 206, 213, 225, 228, 230, 235, 285], "init_": 8, "your": [8, 9, 15, 18, 57, 62, 149, 150, 153, 159, 161, 168, 169, 172, 175, 181, 185, 192, 194, 201, 209, 210, 211, 212, 218, 219, 221, 222, 224, 225, 228, 229, 230, 231, 232, 235, 237, 239, 243, 245, 254, 266, 269, 272, 278, 280, 283, 285, 289], "other": [8, 9, 15, 18, 20, 22, 23, 25, 26, 29, 34, 35, 37, 39, 41, 52, 58, 59, 62, 63, 149, 150, 153, 155, 157, 158, 161, 168, 169, 172, 173, 174, 177, 180, 184, 185, 188, 189, 190, 192, 194, 199, 200, 201, 202, 204, 205, 213, 216, 218, 221, 223, 228, 229, 231, 232, 235, 237, 239, 243, 245, 250, 254, 258, 260, 262, 269, 270, 275, 280, 283, 285, 289], "use_": 8, "separ": [8, 18, 20, 22, 23, 40, 59, 62, 68, 153, 158, 159, 164, 169, 172, 173, 175, 177, 181, 190, 192, 197, 201, 205, 213, 214, 216, 222, 228, 235, 237, 239, 245, 250, 258, 259, 260, 262, 269, 285], "accordingli": [8, 28, 153, 159, 172, 177], "go": [9, 16, 17, 34, 37, 53, 62, 159, 161, 175, 201, 216, 218, 219, 221, 222, 224, 225, 227, 228, 229, 230, 231, 239, 245, 269, 270, 272, 289], "get": [9, 15, 17, 18, 27, 29, 30, 35, 37, 38, 41, 46, 51, 54, 61, 62, 64, 66, 67, 68, 69, 72, 106, 108, 116, 129, 159, 174, 181, 189, 201, 213, 214, 219, 222, 225, 230, 237, 245, 254, 262, 269, 281], "usage_dst": 9, "usage_src": 9, "those": [9, 28, 49, 52, 68, 157, 159, 177, 188, 194, 201, 204, 205, 216, 228, 235, 239, 254, 259, 262, 269, 285], "cast": [9, 12, 52, 157, 158, 169, 173, 174, 200], "happen": [9, 10, 18, 39, 42, 52, 62, 159, 181, 200, 201, 216, 269], "compon": [9, 12, 16, 17, 18, 19, 43, 44, 47, 58, 63, 87, 100, 150, 153, 158, 159, 169, 174, 175, 181, 185, 186, 188, 189, 194, 196, 197, 199, 200, 201, 206, 208, 210, 216, 232, 235, 245, 250, 254, 266, 269, 275, 280, 285, 288], "even": [9, 17, 18, 48, 52, 53, 54, 57, 59, 62, 68, 158, 159, 164, 174, 188, 197, 199, 200, 201, 205, 216, 228, 232, 235, 239, 245, 247, 258, 280, 289], "sourc": [9, 16, 21, 22, 24, 29, 34, 40, 46, 49, 50, 52, 54, 59, 77, 80, 82, 83, 84, 85, 87, 88, 90, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 148, 158, 159, 170, 175, 189, 208, 210, 213, 216, 218, 222, 231, 235, 237, 270, 276, 278, 280, 289], "The": [9, 13, 16, 17, 18, 19, 20, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 54, 59, 62, 63, 64, 67, 68, 149, 150, 153, 155, 157, 158, 159, 160, 161, 162, 163, 164, 165, 168, 169, 172, 173, 174, 175, 177, 178, 180, 181, 182, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 212, 214, 215, 216, 218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 232, 235, 236, 237, 238, 239, 240, 242, 243, 245, 247, 250, 254, 258, 259, 260, 262, 266, 268, 269, 270, 272, 275, 276, 277, 280, 283, 285, 289], "below": [9, 16, 18, 20, 23, 59, 62, 64, 149, 153, 157, 158, 159, 163, 164, 169, 172, 174, 175, 180, 181, 189, 190, 192, 194, 200, 202, 209, 213, 216, 218, 220, 222, 223, 224, 228, 229, 230, 231, 235, 237, 239, 245, 250, 254, 259, 262, 269, 275, 278, 285, 289], "float1": [9, 14], "1d": [9, 62], "2d": [9, 34, 42, 52, 62, 158], "3d": [9, 29, 35, 44, 52, 53, 62, 153, 157, 161, 165, 174, 176, 193, 197, 203, 206, 207, 208, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 232, 233, 235, 236, 239, 243, 245, 254, 260, 264, 275, 277, 281, 286], "z": [9, 11, 17, 20, 31, 32, 41, 111, 158, 159, 186, 189, 190, 197, 205, 230, 231, 235, 237, 243, 245, 247, 250, 252], "w": [9, 22, 30, 41, 45, 51, 52, 53, 54, 66, 67, 111, 174, 196, 243, 250], "short2": [9, 14], "sign": [9, 54, 174, 192, 270], "short": [9, 54, 186, 199, 201, 213, 245], "short4": [9, 14], "ubyte4": [9, 14], "uint8_t": [9, 40, 41, 43, 54], "color8": [9, 14], "byte": [9, 12, 18, 29, 31, 32, 33, 34, 42, 48, 50, 62], "r": [9, 12, 16, 18, 34, 39, 43, 52, 54, 67, 87, 100, 111, 149, 153, 155, 158, 159, 164, 165, 169, 174, 177, 178, 186, 192, 197, 199, 202, 207, 210, 230, 239, 243, 247, 250, 259, 262, 269, 285, 289], "A": [9, 10, 16, 18, 20, 29, 30, 34, 35, 36, 38, 41, 50, 52, 54, 59, 62, 64, 67, 68, 149, 150, 155, 158, 159, 161, 163, 164, 165, 169, 172, 173, 175, 178, 180, 185, 186, 188, 189, 190, 191, 192, 193, 195, 197, 199, 200, 201, 202, 204, 205, 206, 213, 214, 216, 221, 222, 225, 231, 232, 235, 237, 239, 243, 245, 247, 250, 254, 262, 268, 269, 275, 280, 283, 284, 285, 289], "half2": [9, 14], "16": [9, 18, 29, 45, 52, 60, 68, 197, 201, 205, 207, 220, 225, 228, 262, 277], "bit": [9, 29, 44, 52, 54, 158, 159, 174, 189, 191, 192, 207, 250], "half4": [9, 14], "short2n": [9, 14], "32767": 9, "short4n": [9, 14], "ushort2n": [9, 14], "unsign": [9, 27, 29, 34, 35, 39, 42, 45, 46, 47, 49, 52, 53, 54, 66, 67, 68, 97], "ushort4n": [9, 14], "udec3": [9, 14], "10": [9, 18, 60, 108, 159, 164, 169, 172, 185, 186, 199, 200, 201, 213, 219, 220, 222, 225, 228, 230, 231, 250, 269, 277], "dec3n": [9, 14], "511": 9, "resourc": [9, 15, 17, 18, 23, 25, 26, 27, 29, 30, 34, 39, 52, 53, 54, 57, 59, 60, 61, 62, 64, 68, 71, 72, 76, 149, 152, 158, 159, 165, 169, 172, 174, 177, 208, 215, 235, 239, 245, 252, 260, 262, 264, 266, 275, 281, 286, 289], "builder": [9, 62, 158], "know": [9, 15, 18, 29, 35, 62, 159, 169, 177, 213, 232, 235, 237, 245, 252], "extract": [9, 17, 18, 39, 54, 62, 64, 131, 161, 169, 213, 232, 237, 269, 277, 285, 289], "given": [9, 28, 29, 34, 37, 39, 40, 45, 48, 52, 54, 159, 172, 199, 200, 201, 214, 232, 239, 245, 254, 262, 289], "sent": [9, 17, 18, 20], "why": [9, 17, 52, 169, 201, 206, 235, 245], "po": [9, 11, 14, 17, 18, 141, 148, 231, 253, 256], "norm": [9, 14], "vcol": [9, 14, 17], "tc": [9, 14], "coordin": [9, 45, 48, 159, 164, 175, 186, 200, 204, 220, 228, 231, 235, 237, 245, 260, 289], "lightmap": [9, 14, 162, 169, 232, 252], "legaci": [9, 15, 19, 62, 64, 67, 149, 239, 285], "were": [9, 47, 50, 51, 64, 67, 149, 159, 197, 200, 201, 206, 216, 228, 239, 250, 269, 285, 289], "extra": [9, 14, 39, 52, 158, 159, 183, 237, 280, 285], "provid": [9, 14, 16, 17, 18, 20, 27, 29, 32, 34, 39, 42, 52, 54, 59, 61, 62, 64, 65, 67, 68, 87, 100, 117, 120, 150, 158, 160, 161, 169, 172, 174, 178, 188, 189, 191, 205, 210, 213, 216, 218, 219, 220, 221, 222, 223, 224, 225, 228, 229, 230, 231, 236, 239, 245, 252, 266, 269, 270, 275, 277, 280, 289], "addit": [9, 15, 17, 18, 20, 29, 52, 62, 68, 69, 149, 155, 158, 164, 174, 175, 179, 186, 187, 190, 192, 197, 200, 201, 205, 207, 208, 216, 221, 222, 226, 227, 228, 232, 241, 243, 245, 256, 258, 269, 277, 283, 285, 289], "info": [9, 15, 17, 25, 26, 27, 39, 45, 54, 61, 62, 68, 69, 106, 117, 118, 143, 174, 253, 256], "vertic": [9, 33, 50, 52, 152, 153, 154, 159, 164, 174, 181, 186, 190, 191, 192, 200, 201, 204, 205, 207, 214, 216, 231, 245, 247, 259, 285, 289], "usual": [9, 18, 23, 29, 34, 41, 52, 66, 67, 69, 71, 106, 149, 150, 161, 169, 172, 197, 200, 201, 206, 213, 222, 232, 245, 260, 262, 269, 283], "match": [9, 18, 20, 28, 29, 34, 54, 62, 68, 72, 139, 153, 158, 159, 161, 164, 165, 169, 172, 174, 177, 200, 201, 206, 208, 213, 216, 220, 228, 235, 237, 239, 245, 247, 254, 260, 262, 269, 285, 289], "But": [9, 159, 200, 201, 213, 262], "sometim": [9, 18, 64, 159, 199, 201, 204, 216, 235, 269, 275], "remap": [9, 158, 193, 237], "intend": [9, 15, 39, 59, 62, 159, 174, 201, 204, 216, 235, 239, 289], "might": [9, 16, 18, 59, 62, 67, 149, 158, 159, 163, 169, 189, 194, 195, 199, 200, 201, 205, 214, 216, 222, 228, 232, 235, 239, 243, 245, 254, 258, 266, 269, 270, 275, 283, 285], "rescal": 9, "multipli": [9, 60, 61, 62, 158, 169, 185, 190, 191, 194, 195, 196, 197, 201, 202, 204, 205, 231, 245, 289], "signed_pack": [9, 14], "unsigned_pack": [9, 14], "bounding_pack": [9, 14], "mul_1k": [9, 14], "1024": 9, "mul_2k": [9, 14], "2048": [9, 229], "mul_4k": [9, 14], "4096": [9, 29, 262], "mul_8k": [9, 14], "8192": 9, "mul_16k": [9, 14], "16384": 9, "mul_32767": [9, 14], "clamp": [9, 16, 45, 52, 149, 174, 189], "simpl": [9, 17, 18, 27, 149, 158, 159, 161, 169, 174, 186, 191, 192, 199, 201, 205, 206, 213, 214, 219, 226, 234, 239, 254, 275, 285, 289], "particular": [9, 18, 54, 59, 62, 159, 201, 266, 269, 280, 289], "vsinput": [9, 17], "style": [9, 18, 50, 158, 209, 213, 214], "note": [9, 15, 16, 17, 18, 48, 49, 52, 59, 62, 63, 87, 100, 150, 165, 169, 170, 177, 179, 190, 197, 200, 201, 205, 213, 214, 218, 222, 228, 230, 235, 245, 256, 258, 262, 269, 272, 280], "correspond": [9, 17, 18, 28, 39, 49, 52, 54, 62, 66, 67, 68, 150, 159, 161, 165, 169, 174, 175, 177, 187, 190, 196, 197, 200, 201, 203, 205, 231, 235, 237, 239, 243, 245, 247, 250, 254, 262, 269, 272, 275, 283, 285], "semant": [9, 16, 18, 67, 161], "color0": [9, 17], "texcoord": 9, "texcoord0": 9, "another_texcoord": 9, "texcoord1": 9, "vsoutput": [9, 17], "some_v": 9, "kind": [10, 29, 59, 214], "its": [10, 15, 17, 18, 29, 30, 34, 35, 39, 41, 52, 62, 66, 68, 97, 149, 153, 155, 157, 158, 159, 163, 164, 168, 169, 172, 174, 175, 177, 186, 187, 189, 197, 199, 200, 201, 204, 205, 210, 213, 214, 216, 219, 220, 230, 231, 232, 235, 237, 239, 243, 245, 247, 252, 254, 259, 260, 269, 272, 275, 277, 280, 285, 289], "bodi": [10, 18, 158, 159, 214, 258, 285, 288], "some_global_var": 10, "another_global_var": 10, "scene": [10, 17, 18, 62, 150, 153, 158, 159, 164, 169, 172, 173, 175, 190, 191, 194, 201, 205, 208, 217, 218, 219, 220, 221, 222, 225, 228, 229, 230, 231, 235, 236, 238, 239, 241, 254, 260, 286], "common_scene_block": 10, "diffus": [10, 14, 15, 17, 149, 158, 178, 180, 181, 185, 186, 188, 189, 191, 192, 194, 195, 196, 197, 199, 201, 204, 205, 206, 207, 216, 232, 239, 245, 262, 272], "diffuse_tex": [10, 15, 17], "redund": [10, 169, 174], "dispatch": [10, 25, 26, 29, 42, 52, 57, 62], "comput": [10, 12, 17, 25, 26, 30, 34, 35, 46, 47, 49, 52, 57, 60, 66, 79, 131, 159, 252, 285], "shaderel": 10, "being": [10, 34, 35, 39, 52, 59, 62, 68, 155, 157, 158, 159, 163, 177, 183, 188, 194, 197, 200, 205, 207, 216, 235, 239, 260, 269, 289], "render_pass_mod": 10, "decals_shad": 10, "render_pass_impostor": 10, "directli": [10, 17, 19, 20, 34, 42, 52, 159, 161, 164, 165, 169, 185, 191, 197, 199, 200, 201, 205, 216, 223, 231, 235, 237, 240, 243, 245, 254, 262, 269, 275, 285, 289], "decreas": [10, 68, 189, 200, 205, 245, 272, 285], "although": [10, 18, 20, 59, 149, 159, 177, 186, 191, 197, 200, 205, 214, 243, 245, 262, 269], "present": [10, 15, 18, 53, 62, 158, 159, 161, 200, 204, 250, 258, 269, 275, 283, 289], "lookup": 10, "tabl": [10, 18, 28, 52, 53, 77, 79, 80, 89, 91, 95, 98, 104, 105, 106, 108, 116, 119, 123, 124, 126, 129, 131, 132, 133, 142, 159, 172, 174, 212, 213, 230, 235], "forcefulli": 10, "blend_src": [10, 14, 16], "blend_dst": [10, 14, 16], "blend_asrc": [10, 14, 16], "blend_adst": [10, 14, 16], "effect": [10, 18, 59, 62, 149, 158, 159, 164, 169, 172, 174, 181, 185, 189, 190, 191, 192, 195, 197, 199, 200, 201, 202, 203, 204, 205, 208, 221, 222, 228, 235, 243, 245, 252, 262, 266, 275, 285, 289], "grab": [11, 17, 62], "globtm": [11, 14, 17, 37], "world": [11, 18, 62, 159, 172, 175, 196, 205, 259, 262, 289], "project": [11, 62, 72, 86, 147, 149, 153, 158, 161, 164, 166, 168, 169, 170, 173, 175, 177, 178, 179, 180, 181, 183, 200, 202, 221, 222, 229, 231, 232, 235, 237, 239, 245, 253, 254, 256, 258, 260, 262, 266, 269, 272, 276, 277, 278, 282, 285, 289], "projtm": [11, 14], "viewprojtm": [11, 14], "local_view_x": [11, 14], "local_view_i": [11, 14], "local_view_z": [11, 14], "local_view_po": [11, 14], "column": [11, 121, 174, 194, 214], "invers": [11, 16, 111, 187, 188, 204, 205, 208, 231, 285], "format": [11, 20, 22, 23, 29, 30, 34, 35, 41, 42, 44, 52, 53, 54, 61, 62, 68, 87, 100, 117, 119, 150, 152, 158, 159, 160, 161, 164, 165, 168, 174, 175, 200, 209, 210, 220, 225, 230, 235, 239, 243, 245, 252, 254, 262, 264, 266, 269, 270, 275, 281, 285, 289], "world_local_x": [11, 14], "world_local_i": [11, 14], "world_local_z": [11, 14], "world_local_po": [11, 14], "transform": [11, 18, 37, 153, 158, 162, 230, 231, 235, 243, 245, 272, 285, 289], "f44": [11, 17], "f3": [11, 12, 17, 157, 164], "example_v": 11, "position0": [11, 17], "worldpo": 11, "mulpointtm": 11, "apart": [12, 159, 164, 169, 289], "function": [12, 13, 16, 17, 18, 20, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 74, 77, 82, 83, 84, 85, 87, 90, 91, 92, 94, 95, 96, 97, 98, 99, 100, 102, 103, 104, 105, 106, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 130, 132, 133, 134, 135, 136, 137, 138, 140, 141, 142, 143, 145, 146, 148, 149, 155, 158, 169, 173, 179, 181, 188, 191, 198, 200, 201, 202, 208, 213, 214, 216, 220, 222, 223, 228, 230, 239, 243, 266, 275, 285, 289], "handl": [12, 20, 25, 27, 39, 45, 52, 57, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 74, 75, 158, 159, 161, 169, 174, 187, 191, 199, 200, 204, 235, 236, 243, 245, 262, 269, 275, 285, 289], "evalu": [12, 16, 18, 98, 149, 219, 289], "system": [12, 17, 18, 19, 20, 30, 34, 42, 47, 52, 57, 65, 67, 79, 106, 131, 143, 149, 153, 158, 159, 160, 161, 164, 169, 172, 177, 186, 189, 208, 216, 222, 223, 227, 231, 237, 239, 250, 258, 269, 270, 275], "unless": [12, 18, 153, 159, 161, 169, 172, 178, 188, 206, 232, 269], "known": [12, 18, 39, 52, 62, 159, 199, 235, 245], "section": [12, 36, 54, 159, 160, 164, 165, 169, 174, 175, 187, 188, 197, 200, 201, 212, 216, 222, 223, 227, 231, 232, 235, 237, 239, 243, 269, 275, 285, 289], "phase": [12, 52, 155, 170, 195, 289], "frac": 12, "shadersglobaltim": 12, "start": [12, 18, 23, 32, 33, 39, 49, 50, 52, 53, 62, 66, 68, 69, 87, 100, 106, 114, 119, 150, 158, 159, 161, 164, 165, 175, 181, 186, 194, 197, 201, 202, 203, 205, 206, 213, 214, 219, 221, 222, 229, 230, 231, 235, 237, 239, 245, 250, 254, 259, 263, 264, 269, 272, 275, 281, 283, 285, 289], "game": [12, 18, 20, 23, 35, 59, 66, 81, 82, 117, 149, 150, 154, 157, 161, 162, 165, 168, 169, 172, 173, 174, 175, 178, 185, 186, 189, 191, 200, 201, 205, 215, 221, 222, 232, 235, 239, 243, 245, 252, 254, 258, 263, 264, 266, 268, 269, 270, 272, 274, 277, 281, 283, 285], "second": [12, 17, 35, 47, 54, 59, 83, 98, 108, 120, 127, 159, 164, 168, 169, 175, 178, 180, 181, 187, 188, 190, 191, 197, 200, 201, 202, 203, 204, 214, 219, 235, 237, 239, 243, 250, 266, 272], "current_tim": 12, "f1": [12, 15, 17, 175], "14": [12, 153, 220, 222, 225, 228, 230, 247], "rais": [12, 23, 164, 181, 197, 201], "power": [12, 45, 177, 181, 201, 204, 205, 207, 208, 237, 239, 269, 274], "33": [12, 165, 197], "squar": [12, 52, 200, 237], "root": [12, 58, 59, 61, 62, 74, 75, 106, 145, 159, 161, 162, 169, 175, 222, 228, 229, 243, 250, 259, 260, 262, 266, 275, 277, 285], "find": [12, 62, 98, 120, 127, 149, 150, 159, 161, 165, 168, 169, 174, 175, 177, 190, 194, 200, 232, 235, 238, 239, 241, 244, 245, 249, 262, 269, 272, 280, 285], "minimum": [12, 18, 33, 35, 40, 51, 66, 68, 155, 158, 164, 169, 186, 190, 192, 200, 201, 205, 218, 219, 221, 231, 260, 269, 285, 289], "maximum": [12, 16, 18, 32, 34, 35, 40, 41, 45, 51, 52, 54, 66, 68, 158, 159, 164, 165, 169, 172, 173, 186, 190, 192, 196, 197, 200, 202, 205, 206, 221, 228, 229, 231, 235, 239, 247, 252, 258, 269, 289], "0f": [12, 18], "rgb": [12, 15, 16, 17, 178, 185, 187, 188, 190, 192, 197, 199, 200, 204, 205, 206, 207], "2f": 12, "srgb_color": 12, "some_color": 12, "discard": [12, 28, 29, 34, 39, 40, 52, 54, 68, 158, 165, 229], "fetch": [12, 269], "level": [12, 20, 27, 34, 35, 41, 42, 44, 54, 57, 62, 66, 68, 70, 117, 143, 149, 151, 155, 159, 161, 162, 163, 172, 175, 192, 196, 199, 200, 201, 202, 208, 214, 229, 235, 237, 239, 243, 245, 252, 254, 258, 259, 262, 264, 267, 272, 281, 285, 289], "width": [12, 22, 34, 35, 39, 41, 42, 48, 51, 54, 60, 87, 100, 158, 164, 174, 190, 194, 200, 201, 214, 237, 262], "height": [12, 22, 34, 35, 39, 41, 42, 48, 51, 54, 60, 87, 100, 155, 158, 159, 164, 174, 179, 180, 191, 194, 199, 200, 201, 202, 204, 228, 230, 232, 237, 245, 254, 258, 262, 289], "depth_or_array_slic": 12, "mip_level": [12, 41, 44, 54], "store": [12, 16, 17, 18, 20, 27, 29, 30, 35, 37, 39, 48, 52, 54, 56, 58, 62, 67, 68, 74, 149, 153, 158, 159, 160, 165, 169, 174, 177, 181, 185, 197, 201, 216, 230, 231, 235, 239, 247, 250, 262, 269, 275, 285], "volumetr": [12, 42, 59, 62, 172], "arrai": [12, 17, 18, 20, 27, 29, 34, 39, 41, 42, 44, 48, 51, 54, 61, 66, 68, 74, 75, 83, 84, 87, 90, 91, 92, 98, 100, 106, 117, 121, 122, 124, 125, 127, 132, 135, 140, 178, 245, 250, 254], "slice": [12, 42, 54, 68, 144, 245, 262], "cube": [12, 16, 34, 41, 42, 54, 62, 153, 158, 159, 216, 232, 235, 239], "ssao_tex": 12, "ssao_siz": 12, "size": [12, 18, 23, 27, 29, 34, 35, 41, 42, 47, 48, 50, 51, 52, 54, 62, 66, 68, 69, 72, 91, 98, 106, 124, 153, 155, 157, 158, 159, 172, 173, 185, 186, 192, 196, 197, 199, 201, 205, 216, 219, 222, 228, 229, 245, 252, 258, 262, 266, 272, 285, 289], "element": [12, 18, 29, 34, 39, 62, 87, 100, 155, 158, 159, 161, 164, 172, 175, 185, 188, 190, 199, 201, 214, 229, 235, 239, 243, 245, 252, 254, 269, 275, 285, 289], "buffer_size_in_el": 12, "buf_siz": 12, "rw": [12, 17, 29, 41, 62], "byteaddressbuff": [12, 29], "dword": [12, 29, 34, 44, 47, 158], "chunk": [12, 18, 204, 221, 285], "contrari": [12, 201], "getdimens": 12, "pure": [12, 13, 17, 18, 62, 68, 201], "viewport": [12, 39, 51, 59, 60, 62, 159, 177, 216, 218, 219, 220, 222, 223, 224, 230, 231, 235, 237, 239, 243, 246, 252, 275], "top_left_x": 12, "top_left_i": 12, "At": [12, 159, 165, 181, 186, 197, 201, 222, 245, 260, 262, 275, 285, 289], "check": [12, 15, 18, 35, 37, 38, 52, 54, 56, 64, 66, 67, 68, 71, 83, 98, 157, 159, 164, 168, 173, 174, 177, 183, 184, 201, 204, 216, 218, 220, 221, 222, 224, 225, 226, 228, 229, 230, 231, 234, 235, 237, 239, 243, 245, 254, 258, 259, 262, 266, 269, 275, 283, 285], "exist": [12, 18, 34, 41, 52, 59, 62, 68, 83, 87, 100, 153, 159, 161, 168, 169, 172, 174, 175, 177, 191, 221, 222, 230, 232, 235, 237, 239, 243, 245, 247, 254, 258, 260, 262, 268, 277, 285, 289], "bound": [12, 17, 18, 34, 39, 40, 45, 47, 52, 62, 157, 158, 159, 169, 200, 202, 216, 228, 235, 237, 239, 247, 254, 289], "think": [12, 69, 155, 199], "run": [12, 16, 17, 18, 35, 39, 52, 57, 59, 62, 85, 150, 159, 160, 175, 209, 210, 213, 218, 221, 222, 223, 224, 225, 228, 229, 230, 231, 232, 261, 262, 264, 266, 268, 269, 270, 275, 277, 283, 285, 289], "equival": [12, 15, 20, 159, 160, 235, 243, 280], "save": [12, 15, 17, 72, 83, 150, 159, 160, 168, 172, 173, 175, 177, 180, 200, 201, 216, 219, 220, 225, 229, 230, 232, 235, 237, 239, 243, 247, 252, 254, 259, 269, 275, 283, 285, 289], "uniform": [12, 159, 164, 169, 174, 200, 201, 289], "example_textur": 12, "tex2d": [12, 17], "example_texture_exist": 12, "i1": [12, 17], "example_buff": 12, "example_buffer_exist": 12, "dagor": [13, 16, 17, 21, 23, 62, 65, 76, 79, 89, 93, 131, 149, 157, 158, 159, 160, 161, 167, 169, 201, 209, 210, 213, 227, 232, 234, 235, 237, 239, 240, 242, 250, 270, 274, 275, 276, 277, 278, 282, 286, 287, 289], "shade": [13, 17, 25, 26, 52, 59, 76, 216, 239, 252, 281], "languag": [13, 17, 20, 76, 89, 208, 213, 214, 225, 275, 281, 285], "driven": [13, 18, 208], "pre": [13, 17, 52, 62, 153, 158, 159, 221, 289], "easi": [13, 20, 159, 201, 214, 219], "pin": 13, "actual": [13, 17, 18, 20, 39, 47, 52, 59, 62, 64, 153, 159, 186, 197, 223, 235, 237, 239, 245, 254, 269, 285], "front": [13, 190, 200, 289], "themselv": [13, 159, 164, 165, 177, 201, 214, 235, 275], "found": [13, 35, 83, 85, 98, 106, 159, 160, 161, 169, 172, 173, 174, 175, 205, 219, 220, 223, 232, 235, 239, 245, 258, 259, 262, 270, 275, 285, 289], "page": [14, 53, 213, 214, 218, 262], "categor": [14, 161], "descript": [14, 16, 17, 18, 20, 34, 35, 39, 40, 52, 54, 87, 98, 100, 149, 153, 158, 160, 166, 169, 172, 209, 213, 214, 216, 230, 252, 262, 278, 285, 289], "none": [14, 15, 16, 47, 52, 54, 60, 61, 62, 72, 165, 232, 239, 253, 256, 285, 289], "const": [14, 18, 20, 25, 26, 27, 29, 30, 33, 34, 35, 36, 37, 39, 40, 41, 44, 45, 46, 48, 50, 52, 53, 54, 56, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 70, 71, 72, 74, 75, 83, 85, 87, 91, 97, 98, 100, 108, 117, 121, 124, 126, 127, 129, 138, 144, 165, 213], "emiss": [14, 169, 170, 185, 192, 193, 202, 203, 207, 232, 239], "specular": [14, 158, 201, 207, 232, 239], "two_sid": [14, 15, 191, 239], "real_two_sid": [14, 15, 191, 207, 232, 239], "render_tran": [14, 15], "regist": [14, 18, 20, 25, 28, 29, 39, 47, 52, 59, 61, 62, 63, 64, 66, 68, 69, 73, 98, 134, 158, 252], "z_write": [14, 16, 41], "z_test": [14, 16], "z_bia": 14, "z_func": [14, 16], "slope_z_bia": 14, "stencil_func": [14, 16], "stencil_ref": [14, 16], "stencil_pass": [14, 16], "stencil_fail": [14, 16], "stencil_zfail": [14, 16], "cull_mod": [14, 15, 16], "alpha_to_coverag": [14, 16], "color_writ": [14, 15, 16], "view_inst": [14, 16], "immediate_dword_count": 14, "combin": [15, 29, 49, 52, 62, 159, 169, 173, 178, 191, 201, 202, 205, 216, 239, 245, 247, 254], "asset": [15, 65, 153, 157, 162, 166, 168, 169, 170, 172, 173, 174, 177, 178, 179, 185, 186, 187, 190, 191, 193, 194, 197, 198, 199, 201, 204, 205, 206, 208, 216, 235, 236, 237, 239, 240, 243, 255, 256, 258, 260, 263, 264, 267, 268, 272, 277, 281, 283, 286, 289], "properti": [15, 34, 48, 52, 60, 62, 68, 70, 75, 87, 100, 121, 129, 150, 157, 158, 159, 160, 161, 166, 167, 169, 174, 175, 177, 189, 190, 199, 201, 213, 220, 226, 228, 234, 235, 240, 241, 244, 246, 247, 255, 258, 275, 283, 285], "own": [15, 18, 34, 52, 62, 66, 68, 149, 155, 159, 169, 172, 177, 189, 200, 201, 205, 232, 235, 239, 243, 269, 275, 278, 280, 289], "non": [15, 18, 29, 30, 34, 36, 39, 52, 64, 66, 68, 150, 159, 160, 169, 174, 177, 185, 188, 192, 198, 201, 204, 214, 216, 228, 230, 235, 239, 269, 272, 277, 281, 283, 287, 289], "referenc": [15, 17, 30, 66, 68, 175, 177, 266], "creator": [15, 68, 159, 245], "how": [15, 17, 18, 52, 62, 149, 152, 154, 157, 158, 159, 161, 167, 168, 169, 175, 176, 179, 181, 186, 189, 197, 200, 202, 204, 205, 211, 213, 214, 215, 222, 225, 228, 232, 236, 237, 239, 241, 243, 245, 254, 258, 263, 264, 269, 275, 279, 281, 285, 289], "mani": [15, 18, 39, 52, 53, 57, 159, 173, 174, 189, 201, 221, 228, 239, 243, 245, 254, 289], "slot": [15, 17, 25, 28, 29, 39, 41, 44, 45, 47, 52, 54, 59, 61, 62, 67, 76, 188, 199, 200, 201, 203, 205, 206, 207, 239, 285, 289], "Then": [15, 20, 159, 168, 177, 218, 230, 235, 272, 283, 289], "after": [15, 17, 18, 29, 34, 39, 42, 52, 62, 64, 66, 68, 69, 72, 150, 159, 161, 168, 169, 175, 177, 186, 188, 196, 197, 201, 204, 205, 214, 216, 220, 221, 222, 224, 225, 227, 229, 230, 231, 232, 235, 237, 239, 243, 245, 247, 250, 254, 258, 259, 260, 262, 268, 269, 272, 275, 277, 283, 285, 289], "appear": [15, 18, 20, 58, 150, 157, 159, 161, 164, 169, 175, 181, 189, 190, 191, 194, 195, 197, 199, 200, 201, 204, 205, 207, 213, 216, 218, 219, 221, 225, 229, 230, 231, 232, 235, 237, 239, 243, 245, 254, 258, 259, 262, 266, 269, 272, 283, 285, 289], "bindump": 15, "choos": [15, 150, 157, 159, 168, 169, 175, 192, 201, 218, 227, 229, 231, 237, 239, 245, 247, 254, 269, 283, 285, 289], "viewer": [15, 149, 150, 153, 157, 158, 161, 168, 169, 170, 174, 185, 186, 191, 197, 200, 206, 208, 237, 239, 243, 248, 262, 264, 267, 272, 275, 281, 286, 289], "editor": [15, 59, 149, 150, 158, 164, 168, 172, 173, 174, 175, 201, 205, 208, 226, 232, 234, 237, 240, 241, 242, 245, 249, 250, 260, 264, 269, 275, 280, 283, 284, 285, 289], "abl": [15, 34, 159, 174, 258, 262, 285], "materials_exampl": 15, "seen": [15, 185, 199, 201, 205], "normal_tex": [15, 17], "contain": [15, 17, 18, 19, 31, 32, 33, 34, 37, 42, 45, 54, 60, 62, 67, 68, 149, 153, 155, 158, 159, 161, 164, 165, 168, 169, 172, 173, 174, 177, 190, 199, 201, 213, 214, 216, 219, 220, 225, 228, 229, 230, 231, 235, 237, 239, 243, 245, 250, 254, 260, 262, 269, 270, 272, 275, 277, 285, 289], "arbitrari": [15, 18, 59, 62, 64, 66, 68, 200, 201, 214, 275], "good": [15, 18, 172, 199, 201, 280, 289], "practic": [15, 18, 149, 169, 172, 190, 200, 201, 231, 235, 239, 250, 275, 289], "meaning": [15, 159], "default": [15, 16, 17, 18, 20, 27, 28, 29, 30, 31, 32, 34, 41, 45, 46, 47, 54, 56, 62, 63, 67, 68, 69, 72, 83, 87, 100, 106, 108, 149, 150, 153, 158, 159, 161, 169, 172, 174, 175, 185, 186, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 200, 201, 202, 204, 205, 207, 210, 216, 218, 219, 220, 221, 222, 225, 227, 229, 230, 232, 235, 239, 243, 245, 252, 254, 258, 259, 262, 269, 275, 283, 285, 289], "edit": [15, 83, 149, 156, 159, 165, 168, 177, 208, 209, 216, 218, 220, 223, 226, 228, 230, 234, 236, 237, 239, 241, 244, 247, 249, 254, 272, 275, 285, 289], "recompil": [15, 59], "some_paramet": 15, "another_paramet": 15, "introduc": [15, 52, 59, 159, 197, 202, 205, 231, 235, 269], "overhead": [15, 18, 174], "see": [15, 17, 18, 23, 27, 34, 39, 49, 52, 59, 62, 66, 68, 69, 75, 150, 157, 159, 160, 161, 164, 165, 172, 173, 175, 187, 188, 189, 191, 193, 197, 200, 201, 202, 205, 206, 213, 214, 216, 222, 224, 225, 228, 232, 237, 239, 245, 250, 260, 269, 283, 285, 289], "everi": [15, 17, 18, 29, 39, 52, 59, 62, 73, 149, 150, 153, 157, 159, 161, 172, 200, 216, 230, 258, 262, 272, 283, 285, 289], "creation": [15, 29, 34, 39, 41, 50, 52, 54, 62, 66, 68, 69, 155, 167, 169, 170, 208, 222, 229, 231, 239, 240, 250, 269, 270, 272, 275, 283], "hint": [15, 17, 34, 53, 245, 254, 267], "triangl": [15, 40, 52, 53, 158, 164, 165, 191, 196, 201, 216, 219, 220, 222, 228, 237, 239, 245, 247, 285, 289], "both": [15, 16, 17, 18, 20, 22, 29, 49, 62, 149, 159, 169, 172, 173, 174, 178, 188, 189, 190, 191, 192, 194, 196, 197, 200, 201, 202, 204, 205, 206, 216, 229, 231, 235, 239, 243, 245, 258, 259, 268, 269, 270, 272, 275, 285, 289], "done": [15, 16, 18, 54, 62, 66, 67, 68, 150, 159, 169, 200, 213, 237, 245, 262, 269, 270, 285], "flip": [15, 53, 191, 239], "necessari": [15, 18, 20, 34, 39, 45, 62, 64, 149, 155, 159, 161, 168, 169, 172, 173, 175, 177, 185, 197, 201, 204, 205, 206, 225, 235, 237, 245, 258, 260, 262, 268, 269, 272, 275, 285, 289], "real": [15, 18, 20, 23, 57, 62, 66, 91, 106, 124, 149, 158, 159, 174, 188, 191, 201, 205, 208, 231, 232, 239, 254, 269, 286, 289], "henc": [15, 59, 62, 66, 68], "stage": [15, 16, 17, 18, 29, 44, 45, 47, 52, 54, 60, 61, 62, 64, 75, 160, 165, 197, 201, 285, 289], "stage_nam": [15, 18], "opaqu": [15, 38, 39, 45, 191, 204, 245, 272], "distinguish": [15, 67, 159, 169, 221, 285], "between": [15, 20, 32, 33, 41, 48, 50, 52, 62, 64, 67, 69, 150, 155, 158, 159, 164, 166, 169, 172, 185, 188, 190, 191, 192, 194, 195, 197, 199, 201, 202, 204, 205, 206, 214, 216, 222, 230, 231, 232, 235, 239, 245, 250, 258, 269, 270, 283, 285, 289], "shadermesh": 15, "class": [15, 18, 25, 27, 29, 30, 34, 35, 40, 41, 45, 52, 54, 56, 57, 59, 62, 63, 64, 66, 67, 68, 69, 72, 76, 79, 81, 89, 93, 108, 131, 149, 157, 161, 164, 177, 192, 199, 207, 213, 232, 256, 269, 285, 289], "getelem": 15, "stg_opaqu": 15, "drawn": [15, 159, 164, 172, 180, 189, 200, 235, 272], "order": [15, 18, 62, 67, 158, 159, 161, 164, 165, 169, 189, 190, 196, 201, 231, 235, 250, 256, 260, 262, 272, 285, 289], "atest": [15, 187, 188, 191, 195, 197, 232, 285], "test": [15, 16, 17, 20, 40, 52, 152, 157, 161, 164, 167, 169, 170, 174, 187, 188, 191, 195, 200, 201, 202, 212, 216, 218, 221, 222, 228, 229, 231, 245, 260, 262, 269, 272, 275, 280, 283, 286, 288], "imm_dec": 15, "immedi": [15, 18, 47, 68, 79, 89, 131, 159, 173, 196, 214, 230, 235, 237, 239, 247, 269, 283, 285], "decal": [15, 159, 180, 181, 182, 183, 189, 199, 235, 237, 245, 259], "tran": 15, "transpar": [15, 28, 45, 158, 164, 189, 190, 191, 197, 199, 201, 202, 204, 237, 258, 272, 285, 289], "distort": [15, 164, 204, 231, 289], "specifiyng": 15, "writemask": 15, "1904": 15, "0b0111": 15, "8": [15, 18, 40, 52, 60, 149, 159, 164, 169, 174, 177, 181, 192, 195, 199, 200, 201, 205, 207, 218, 219, 220, 222, 225, 228, 230, 231, 247, 262, 277, 280, 285, 289], "bitmask": [15, 39, 52], "0b0000": 15, "noth": [15, 56, 59, 68, 149, 159, 181, 201, 204, 237, 285], "blend_target": 16, "blend_factor": [16, 40, 52], "destin": [16, 29, 34, 39, 40, 42, 52, 54, 158, 270], "factor": [16, 40, 173, 186, 196, 205], "sc": 16, "r_": 16, "g_": 16, "b_": 16, "a_": 16, "isc": 16, "sa": 16, "isa": 16, "dc": [16, 94, 136], "r_d": 16, "g_d": 16, "b_d": 16, "a_d": 16, "idc": 16, "da": [16, 20, 25, 57, 69, 280], "ida": 16, "sasat": 16, "satur": [16, 172, 197, 201, 204], "f": [16, 22, 45, 59, 62, 68, 72, 79, 131, 258, 266], "bf": 16, "r_c": 16, "g_c": 16, "b_c": 16, "a_c": 16, "ibf": 16, "repres": [16, 18, 27, 28, 29, 34, 35, 37, 38, 41, 48, 59, 62, 64, 153, 158, 159, 169, 172, 174, 175, 178, 185, 197, 199, 200, 201, 205, 206, 231, 235, 243, 247, 250, 275, 283, 285, 289], "new": [16, 18, 28, 30, 38, 52, 54, 59, 62, 63, 67, 68, 149, 150, 153, 158, 159, 169, 170, 173, 174, 175, 177, 186, 199, 201, 205, 209, 214, 216, 219, 220, 221, 222, 229, 230, 231, 232, 237, 239, 241, 244, 245, 249, 250, 254, 258, 260, 263, 264, 269, 272, 275, 277, 278, 285, 289], "produc": [16, 20, 68, 174, 192, 196, 197, 201, 204, 213, 225, 247, 289], "old": [16, 18, 28, 62, 63, 159, 175, 186, 191], "current": [16, 20, 28, 29, 31, 34, 35, 37, 39, 41, 42, 46, 47, 50, 51, 53, 59, 62, 66, 68, 72, 150, 158, 159, 161, 164, 165, 168, 169, 174, 175, 185, 191, 197, 199, 200, 201, 216, 218, 219, 220, 221, 222, 224, 225, 228, 229, 230, 231, 232, 235, 237, 239, 243, 245, 250, 252, 254, 258, 262, 275, 289], "pseudocod": 16, "blenden": 16, "finalcolor": 16, "srccolorblendfactor": 16, "srccolor": 16, "colorblendop": 16, "dstcolorblendfactor": 16, "dstcolor": 16, "srcalphablendfactor": 16, "alphablendop": 16, "dstalphablendfactor": 16, "dstcoilor": 16, "colorwritemask": 16, "oper": [16, 17, 18, 29, 33, 34, 36, 39, 40, 41, 42, 45, 52, 54, 56, 59, 60, 61, 62, 63, 67, 68, 69, 91, 95, 111, 124, 129, 158, 159, 164, 186, 187, 192, 198, 199, 201, 202, 204, 213, 216, 229, 235, 238, 239, 241, 245, 254, 262, 269, 285], "mode": [16, 17, 35, 40, 41, 45, 49, 52, 57, 59, 62, 83, 126, 149, 150, 158, 160, 175, 185, 189, 192, 196, 197, 201, 220, 235, 237, 239, 245, 252, 258, 259, 262], "don": [16, 29, 35, 39, 41, 51, 52, 53, 56, 57, 59, 62, 66, 119, 149, 159, 169, 172, 173, 177, 189, 197, 199, 201, 204, 216, 232, 235, 239, 245, 262, 266, 272], "independ": [16, 40, 46, 159, 164, 174, 186, 192, 235, 269, 275, 289], "index": [16, 17, 25, 26, 27, 28, 29, 33, 37, 39, 41, 42, 44, 47, 48, 52, 53, 54, 56, 59, 62, 67, 180, 191, 199, 204, 205, 210, 213, 214, 239, 245, 247, 252, 281, 289], "desir": [16, 35, 159, 168, 169, 177, 194, 199, 200, 201, 204, 228, 235, 237, 239, 243, 252, 259, 266, 278, 283, 289], "affect": [16, 20, 153, 158, 159, 164, 169, 172, 177, 181, 184, 185, 188, 189, 190, 194, 197, 200, 201, 202, 205, 216, 222, 230, 237, 239, 245, 254, 262, 267, 289], "enabl": [16, 18, 20, 35, 39, 40, 53, 59, 62, 66, 68, 121, 157, 158, 159, 164, 169, 172, 173, 174, 175, 179, 186, 187, 188, 190, 191, 192, 193, 195, 197, 200, 201, 202, 205, 206, 207, 208, 216, 218, 219, 220, 222, 223, 225, 228, 230, 231, 236, 237, 239, 241, 243, 245, 252, 258, 259, 263, 264, 269, 271, 285, 289], "valid": [16, 20, 29, 34, 35, 37, 39, 41, 42, 45, 47, 49, 59, 60, 63, 67, 68, 70, 71, 158, 172, 177, 239, 269, 275, 285], "comparison": [16, 18, 52, 62, 67, 231, 232], "text": [16, 17, 87, 96, 100, 141, 148, 150, 153, 159, 168, 169, 174, 175, 177, 181, 192, 213, 214, 220, 223, 232, 237, 240, 241, 243, 251, 254, 269, 285], "notequ": 16, "neq": 16, "greater_or_equ": 16, "geq": 16, "explicitli": [16, 18, 20, 47, 62, 63, 158, 159, 207, 235, 285], "closer": [16, 159, 190, 200, 201, 204, 205, 216, 231, 245, 289], "object": [16, 17, 18, 20, 23, 25, 26, 27, 28, 29, 34, 36, 39, 40, 41, 43, 47, 53, 54, 59, 62, 63, 66, 67, 68, 87, 91, 95, 98, 100, 124, 127, 132, 139, 149, 154, 155, 157, 158, 161, 162, 166, 168, 172, 173, 174, 175, 177, 178, 180, 189, 190, 191, 193, 194, 196, 197, 199, 200, 202, 203, 208, 212, 216, 218, 219, 220, 221, 222, 223, 224, 225, 228, 229, 230, 231, 235, 237, 240, 241, 243, 245, 252, 255, 258, 259, 260, 269, 275, 283, 286, 288], "less": [16, 18, 30, 40, 62, 159, 181, 190, 197, 199, 200, 201, 204, 205, 208, 222, 258, 262, 269, 272], "lessequ": 16, "leq": 16, "greater": [16, 18, 40, 48, 159, 190, 191, 196, 199, 200, 202, 205, 228, 289], "greaterequ": 16, "255": [16, 18, 165, 169, 172, 174, 177, 180, 187, 190, 191, 197, 200, 206, 207, 231, 250], "action": [16, 34, 39, 52, 83, 121, 157, 158, 161, 189, 220, 239, 245, 250, 285, 289], "sampl": [16, 22, 29, 39, 40, 41, 45, 49, 52, 53, 54, 62, 174, 196, 237, 262, 277, 281], "fail": [16, 29, 38, 39, 42, 52, 53, 66, 68, 87, 98, 100, 108, 159, 169, 192, 225, 232, 237, 258], "keep": [16, 18, 22, 39, 52, 155, 159, 169, 172, 173, 174, 180, 188, 190, 200, 201, 205, 222, 228, 235, 239, 243, 245, 260, 262, 269, 272, 275, 289], "incrsat": 16, "increment": [16, 66, 247, 285], "decrsat": 16, "decrement": [16, 66, 247], "incr": 16, "wrap": [16, 18, 28, 45, 149, 214, 247, 262, 269], "been": [16, 18, 29, 47, 62, 150, 159, 169, 175, 197, 216, 228, 232, 235, 239, 245, 250, 269, 272, 285], "exceed": [16, 52, 157, 172, 229, 285], "decr": 16, "ccw": 16, "counterclockwis": 16, "cw": 16, "clockwis": 16, "a2c": 16, "map": [16, 17, 48, 52, 54, 62, 66, 98, 149, 152, 157, 158, 159, 164, 167, 169, 172, 175, 177, 179, 180, 181, 182, 183, 186, 188, 191, 192, 194, 197, 199, 200, 202, 206, 207, 216, 218, 225, 245, 250, 254, 258, 266, 269, 272, 283, 285, 289], "pixel": [16, 17, 23, 30, 40, 46, 47, 48, 52, 54, 174, 181, 188, 191, 194, 196, 201, 202, 205, 272], "msaa": [16, 39, 52, 62], "smooth": [16, 158, 178, 179, 180, 181, 188, 189, 191, 194, 195, 196, 197, 199, 201, 205, 216, 222, 240, 241, 245, 263, 264, 285, 289], "out": [16, 29, 34, 37, 59, 62, 67, 159, 165, 169, 174, 185, 194, 197, 201, 205, 206, 216, 230, 235, 262, 269, 272, 275, 280, 283, 285, 289], "edg": [16, 159, 169, 172, 174, 181, 189, 195, 197, 199, 200, 201, 204, 205, 214, 216, 228, 237, 239, 258, 259, 262, 272, 289], "veget": [16, 195, 222, 226, 234, 245, 262], "4x": [16, 222, 229], "draw": [16, 17, 25, 26, 29, 39, 41, 46, 49, 52, 56, 62, 90, 140, 174, 189, 190, 247], "sv_viewid": 16, "enforc": [16, 269], "max_view_inst": 16, "captur": [16, 53, 62, 64, 159, 161, 186, 190, 231, 237], "shadow": [16, 17, 62, 157, 158, 169, 172, 173, 174, 191, 200, 208, 245, 262, 285], "point": [16, 17, 18, 34, 45, 52, 54, 59, 62, 87, 100, 153, 159, 164, 168, 169, 170, 174, 186, 188, 191, 194, 199, 200, 201, 221, 222, 223, 228, 230, 231, 235, 250, 254, 258, 260, 272, 275, 277, 285, 289], "light": [16, 158, 159, 167, 185, 192, 200, 201, 206, 208, 216, 218, 222, 232, 245, 281, 285], "per": [16, 17, 18, 29, 39, 49, 52, 53, 54, 56, 59, 62, 153, 155, 158, 165, 169, 200, 205, 214, 245, 262, 269, 272, 285, 289], "rgba": [16, 43, 172], "swizzl": [16, 149, 158, 161, 262], "15": [16, 18, 66, 68, 159, 164, 169, 172, 180, 186, 188, 201, 202, 220, 222, 225, 277, 285, 289], "0b0001": 16, "0b0010": 16, "0b0100": 16, "0b1000": 16, "rg": [16, 188, 190, 191, 204], "0b0011": 16, "rt": [16, 17, 41, 52], "bind": [17, 18, 20, 29, 39, 45, 52, 57, 60, 62, 64, 67, 70, 74, 88, 91, 98, 101, 111, 124, 129, 158, 213, 252], "let": [17, 18, 20, 75, 77, 80, 82, 83, 84, 85, 87, 88, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 141, 142, 143, 144, 145, 146, 148, 155, 159, 163, 169, 181, 197, 200, 201, 202, 205, 213, 216, 230, 231, 235, 245, 254, 262, 269, 272, 285], "look": [17, 50, 59, 62, 149, 157, 159, 161, 163, 168, 169, 174, 175, 181, 185, 189, 197, 199, 200, 201, 205, 213, 216, 221, 230, 243, 245, 254, 262, 266, 269, 272, 275, 277, 285, 289], "simple_shad": 17, "expect": [17, 18, 27, 34, 52, 159, 169, 194, 237, 254, 275, 289], "sv_posit": 17, "test_vertex": 17, "ret": 17, "test_pixel": 17, "sv_target0": 17, "target_v": 17, "target_p": 17, "reciev": 17, "layout": [17, 27, 30, 32, 87, 100, 159, 174, 190, 201, 237, 239, 275], "entri": [17, 28, 52, 66, 67, 68, 77, 237, 243, 269], "target_": 17, "entry_funct": 17, "respect": [17, 52, 68, 158, 160, 188, 200, 201, 205, 220, 243, 280], "target_h": 17, "hull": [17, 221, 247], "target_d": 17, "domain": [17, 108, 214], "target_g": 17, "geometri": [17, 49, 52, 62, 157, 159, 164, 170, 173, 175, 179, 180, 183, 184, 185, 189, 190, 191, 196, 197, 199, 201, 216, 235, 236, 237, 241, 245, 247, 258, 260, 289], "target_c": 17, "target_m": 17, "target_a": 17, "amplif": [17, 52], "target_vs_for_g": 17, "togeth": [17, 172, 174, 187, 188, 197, 199, 216, 269], "target_vs_for_tess": 17, "tessel": [17, 52, 179, 245, 253, 256, 289], "target_vs_half": 17, "half": [17, 153, 159, 164, 185, 200, 258, 272], "target_ps_half": 17, "parenthes": [17, 20, 62], "d": [17, 18, 43, 54, 62, 66, 85, 159, 201, 213, 216, 221, 239, 260, 285], "h": [17, 20, 22, 30, 39, 41, 51, 53, 54, 66, 67, 71, 87, 100, 174, 262], "m": [17, 34, 53, 159, 169, 210, 220, 230, 243, 250, 278], "omit": [17, 18, 108, 159, 164, 165, 194, 205, 232, 250, 269, 285], "script": [17, 18, 91, 92, 94, 98, 124, 125, 127, 136, 164, 177, 178, 180, 181, 185, 186, 187, 188, 189, 190, 192, 193, 194, 195, 197, 199, 200, 202, 205, 206, 207, 208, 210, 218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 229, 230, 232, 237, 239, 259, 270, 277, 285], "easili": [17, 169, 194, 221, 275], "variou": [17, 20, 29, 59, 158, 159, 161, 163, 169, 174, 190, 196, 197, 208, 237, 245, 275], "instead": [17, 18, 20, 29, 39, 41, 52, 56, 59, 61, 69, 98, 159, 164, 169, 172, 174, 177, 186, 188, 194, 197, 199, 200, 201, 204, 205, 206, 216, 235, 237, 239, 243, 250, 254, 259, 260, 269, 270, 275, 285, 289], "classic": [17, 18, 262], "danc": 17, "pick": [17, 159, 229, 262, 289], "rememb": [17, 153, 159, 165, 169, 173, 177, 201, 231, 235, 239, 245, 269, 272, 289], "mess": [17, 159], "up": [17, 47, 53, 58, 59, 62, 66, 153, 155, 157, 158, 159, 161, 164, 168, 169, 170, 173, 180, 193, 199, 200, 201, 202, 205, 214, 216, 218, 219, 221, 222, 224, 225, 228, 229, 230, 231, 235, 237, 243, 262, 269, 272, 279, 283, 285], "twice": [17, 59, 149, 159, 163, 169, 200, 201, 245], "through": [17, 18, 29, 59, 62, 65, 67, 149, 155, 159, 161, 169, 172, 173, 174, 175, 177, 181, 190, 199, 200, 201, 205, 208, 216, 232, 235, 237, 239, 243, 247, 258, 269, 283, 289], "string": [17, 20, 22, 23, 35, 54, 56, 59, 60, 61, 62, 65, 68, 70, 74, 77, 83, 84, 85, 87, 91, 95, 96, 97, 98, 100, 103, 104, 106, 108, 109, 110, 114, 116, 117, 118, 119, 120, 121, 123, 124, 126, 127, 128, 130, 132, 133, 135, 139, 141, 142, 145, 146, 148, 159, 205, 213, 232, 239, 250, 285], "read": [17, 18, 25, 26, 28, 29, 32, 39, 41, 52, 53, 59, 61, 62, 64, 68, 69, 72, 74, 75, 83, 180, 196, 199, 216, 232, 254, 266, 269, 275, 285], "On": [17, 29, 34, 35, 47, 66, 149, 159, 172, 199, 200, 201, 204, 210, 219, 230], "simpli": [17, 20, 62, 63, 68, 149, 153, 159, 161, 169, 174, 189, 196, 200, 201, 205, 216, 219, 220, 235, 237, 239, 245, 258, 262, 269, 272, 285], "fill": [17, 29, 41, 42, 47, 53, 56, 59, 69, 157, 197, 201, 239, 272, 289], "set_textur": 17, "ask": [17, 243, 245, 277], "certain": [17, 20, 34, 36, 52, 53, 54, 62, 158, 159, 160, 161, 173, 201, 232, 235, 266, 269, 275, 277], "shader_stag": [17, 29, 44, 45, 54], "hlsl_variable_nam": 17, "type_suffix": 17, "our": [17, 26, 159, 169, 200, 201, 216, 269, 275], "sequenc": [17, 158, 164, 208, 250, 289], "interpret": [17, 27, 62, 161, 180, 191, 214, 237, 239], "command": [17, 20, 25, 26, 29, 35, 39, 52, 53, 62, 98, 117, 156, 159, 160, 175, 200, 202, 210, 214, 232, 235, 252, 254, 256, 258, 259, 260, 264, 266, 269, 270, 277, 285], "dump": [17, 54, 62, 83, 114, 158, 232, 245, 253, 256, 277, 289], "befor": [17, 18, 20, 34, 38, 52, 53, 62, 69, 72, 73, 149, 155, 158, 159, 160, 161, 163, 169, 174, 175, 197, 209, 214, 216, 220, 222, 225, 229, 235, 239, 243, 245, 250, 262, 269, 270, 285, 289], "accept": [17, 18, 59, 87, 91, 92, 95, 98, 100, 104, 110, 111, 121, 122, 124, 125, 127, 130, 132, 137, 141, 148, 159, 174, 186], "postfix": [17, 159, 169, 221, 228, 237, 285], "f2": [17, 20, 175, 289], "i2": 17, "int2": [17, 61], "i3": 17, "int3": 17, "i4": 17, "u1": 17, "uint": [17, 44, 54, 60, 61], "u2": 17, "uint2": 17, "u3": 17, "uint3": 17, "u4": 17, "uint4": 17, "texture2d": [17, 54], "tex3d": 17, "texture3d": 17, "texarrai": 17, "texture2darrai": 17, "texcub": 17, "texturecub": 17, "texcubearrai": 17, "texturecubearrai": 17, "uav": [17, 25, 26, 27, 29, 40, 52, 62, 158], "smp": 17, "samplerst": 17, "smp3d": 17, "smparrai": 17, "smpcube": 17, "smpcubearrai": 17, "shd": 17, "samplercomparisonst": 17, "shdarrai": 17, "constantbuff": 17, "staticcub": 17, "statictexarrai": 17, "globtm_psf": 17, "globtm_psf_0": 17, "globtm_psf_1": 17, "globtm_psf_2": 17, "globtm_psf_3": 17, "set_color4": 17, "get_shader_variable_id": [17, 60], "get_globtm_psf_x": 17, "point4": [17, 79, 131, 250], "row": [17, 159, 188, 201, 214, 262], "adequ": [17, 185], "ye": [17, 18, 20, 23, 52, 61, 85, 149, 150, 153, 155, 157, 159, 161, 164, 165, 169, 172, 173, 174, 177, 201, 207, 232, 239, 250, 259, 262, 268, 269, 270, 285, 289], "color4": [17, 79, 131], "veri": [17, 18, 47, 52, 61, 149, 159, 164, 169, 172, 185, 186, 197, 201, 213, 214, 245, 266, 269, 285], "unfortun": [17, 18, 64, 74, 159, 165, 194, 201, 231, 243, 289], "my_arr": 17, "element1": 17, "element2": 17, "elementn": 17, "hlsl_textur": 17, "some_textur": 17, "hlsl_texarrai": 17, "some_texarrai": 17, "t16": 17, "t17": 17, "automat": [17, 18, 20, 36, 57, 59, 62, 63, 64, 66, 68, 74, 149, 159, 160, 161, 163, 165, 169, 174, 177, 189, 201, 206, 216, 219, 220, 227, 230, 231, 235, 239, 243, 245, 260, 262, 269], "chosen": [17, 159, 164, 174, 200, 230, 235, 239, 247, 289], "ensur": [17, 18, 20, 30, 36, 49, 52, 68, 149, 153, 155, 157, 158, 159, 160, 163, 164, 165, 169, 172, 173, 174, 175, 177, 180, 186, 189, 191, 194, 196, 197, 200, 201, 205, 209, 216, 218, 219, 220, 221, 222, 224, 225, 228, 229, 230, 231, 235, 237, 239, 245, 250, 258, 266, 268, 269, 272, 275, 285, 289], "stand": [17, 52, 159, 197, 269], "hlsl_shdtextur": 17, "some_shdtextur": 17, "hlsl_texture_samplerst": 17, "s0": 17, "hlsl_texarray_samplerst": 17, "s1": 17, "hlsl_shdtexture_samplerst": 17, "s2": 17, "hlsl_shdtexture_cmpsampl": 17, "t0": 17, "t1": [17, 149, 163], "t2": 17, "texture_nam": [17, 74, 174, 194], "_samplerst": 17, "_cmpsampler": 17, "uint_textur": 17, "float_texarrai": 17, "treat": [17, 23, 39, 52, 108, 158, 159, 161, 164, 169, 174, 216, 235], "cube_tex": 17, "enablebindless": 17, "getter": [17, 18, 37, 119], "get_": 17, "albedo": [17, 158, 169, 173, 178, 179, 181, 185, 188, 191, 192, 194, 197, 202, 205, 206, 285, 289], "tex2dbindless": 17, "get_diffuse_tex": 17, "diffusetexcoord": 17, "uv": [17, 52, 157, 164, 181, 188, 191, 192, 200, 203, 204, 216, 237, 239], "aforment": 17, "materialproperti": 17, "indic": [17, 20, 27, 29, 30, 34, 35, 36, 50, 52, 53, 149, 155, 158, 159, 161, 164, 165, 172, 178, 180, 181, 195, 200, 201, 214, 216, 218, 230, 231, 235, 237, 239, 243, 247, 254, 258, 266, 268, 269, 285, 289], "first": [17, 18, 20, 28, 29, 34, 35, 39, 47, 48, 52, 54, 56, 58, 61, 66, 68, 69, 83, 87, 98, 100, 127, 158, 159, 161, 164, 168, 169, 174, 175, 178, 181, 185, 186, 187, 188, 191, 194, 197, 199, 200, 201, 202, 204, 206, 208, 213, 214, 223, 227, 230, 232, 235, 237, 239, 243, 245, 247, 250, 258, 260, 262, 266, 269, 272, 283, 285], "retriev": [17, 20, 29, 34, 35, 37, 48, 51, 250], "static_textur": 17, "static_sampl": 17, "what": [17, 18, 39, 41, 62, 162, 175, 177, 180, 181, 188, 199, 201, 205, 212, 214, 216, 237, 243, 245, 262, 267, 275], "essentiali": 17, "my_buff": 17, "mystruct": 17, "my_const_buff": 17, "while": [17, 18, 36, 40, 41, 52, 59, 62, 69, 108, 149, 150, 155, 157, 159, 163, 164, 165, 168, 169, 172, 174, 175, 181, 185, 187, 188, 189, 190, 191, 196, 197, 199, 200, 201, 204, 205, 216, 222, 228, 229, 230, 231, 232, 235, 239, 243, 245, 247, 254, 260, 266, 269, 275, 285, 289], "auto": [17, 58, 59, 61, 62, 64, 68, 74, 75, 77, 83, 98, 108, 120, 127, 214, 243, 283], "overlap": [17, 34, 52, 159, 172, 189, 190, 237, 239, 289], "requir": [17, 18, 20, 30, 34, 39, 40, 42, 44, 45, 47, 52, 53, 56, 58, 59, 61, 62, 63, 68, 74, 75, 77, 80, 82, 83, 84, 85, 87, 88, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 141, 142, 143, 144, 145, 146, 148, 149, 153, 155, 157, 158, 159, 160, 164, 165, 168, 169, 172, 173, 175, 177, 185, 189, 191, 192, 196, 197, 198, 199, 201, 205, 206, 210, 213, 214, 218, 219, 220, 221, 222, 223, 224, 225, 228, 229, 230, 231, 232, 235, 238, 239, 241, 243, 245, 254, 258, 262, 266, 268, 269, 272, 275, 277, 285], "integ": [17, 29, 34, 44, 52, 87, 91, 92, 95, 100, 102, 108, 109, 111, 112, 114, 115, 117, 119, 121, 122, 124, 125, 126, 128, 130, 137, 138, 141, 142, 145, 148, 172, 188, 201, 213, 232, 239, 250, 272], "readabl": [17, 18, 67, 68, 159, 201, 235, 243, 269, 275], "reg_no": 17, "sh": [17, 87, 100], "foo_vec": 17, "foo_tex": 17, "foo_buf": 17, "foo_uav": 17, "rwstructuredbuff": [17, 29], "With": [17, 18, 169, 200, 201, 202, 205, 222, 231, 266, 289], "method": [17, 18, 20, 25, 26, 28, 29, 31, 33, 37, 39, 41, 42, 47, 51, 52, 56, 58, 59, 61, 62, 64, 69, 75, 87, 91, 95, 100, 108, 111, 121, 124, 129, 139, 149, 150, 159, 168, 174, 175, 191, 201, 213, 216, 228, 230, 235, 239, 247, 275], "u": [17, 18, 44, 45, 62, 111, 159, 164, 169, 181, 201, 207, 231], "some_buff": 17, "hlsl_buffer": 17, "rwtexture2d": 17, "purpos": [17, 29, 34, 54, 62, 68, 158, 159, 162, 169, 172, 174, 177, 201, 204, 214, 229, 239, 252, 258, 260, 262, 269, 275, 280, 285, 289], "like": [17, 18, 20, 23, 28, 29, 34, 39, 52, 57, 59, 62, 87, 100, 106, 149, 155, 157, 159, 163, 168, 169, 172, 173, 174, 175, 185, 188, 189, 190, 194, 197, 199, 201, 202, 203, 204, 205, 206, 208, 209, 213, 214, 216, 225, 228, 230, 231, 232, 235, 237, 239, 243, 245, 254, 258, 260, 266, 269, 272, 277, 278, 285, 289], "some_tla": 17, "hlsl_tla": 17, "term": [17, 18, 29, 62, 158, 172, 196, 201, 214, 280, 285], "raytracingaccelerationstructur": 17, "extens": [17, 18, 35, 52, 153, 159, 163, 169, 174, 208, 213, 214, 216, 266, 269, 270, 272, 285, 288], "idea": [17, 63, 83, 159, 206, 262], "intent": [17, 159, 197, 230], "optim": [17, 18, 34, 52, 59, 62, 153, 158, 159, 164, 165, 169, 172, 174, 202, 208, 219, 221, 222, 239, 247, 250, 269, 275, 285, 289], "world_view_po": 17, "global_const": 17, "frame": [17, 29, 39, 42, 47, 52, 53, 57, 59, 62, 66, 68, 69, 73, 159, 165, 190, 194, 200, 208, 245, 258, 285, 289], "name_of_block": 17, "main": [17, 62, 83, 149, 150, 158, 159, 161, 164, 170, 186, 201, 205, 218, 221, 222, 224, 225, 227, 228, 229, 230, 231, 235, 241, 243, 245, 258, 269, 272, 280, 289], "gist": 17, "part": [17, 18, 29, 37, 51, 55, 59, 68, 153, 157, 158, 159, 169, 173, 175, 185, 188, 191, 197, 199, 200, 201, 205, 213, 214, 216, 228, 230, 235, 239, 243, 254, 258, 275, 288], "suppos": [17, 23, 47, 62, 64, 66, 68, 159, 201, 262, 283], "rare": [17, 18, 52, 62, 159, 164, 169, 172, 195, 199, 200, 201, 235, 245], "evil": [17, 62], "avoid": [17, 18, 39, 52, 59, 62, 149, 153, 159, 161, 163, 164, 168, 169, 172, 173, 174, 177, 181, 185, 188, 189, 190, 191, 192, 199, 200, 201, 204, 216, 237, 239, 258, 260, 269, 272, 275, 285, 289], "cost": [17, 62, 191, 262, 280], "impli": [17, 62, 280], "histor": [17, 62, 208, 285], "proven": [17, 62], "antagonist": [17, 62], "mention": [17, 159, 169, 175, 194, 201, 243, 245, 252], "user": [17, 30, 33, 34, 35, 39, 47, 53, 56, 62, 108, 119, 143, 157, 211, 213, 215, 216, 226, 227, 228, 230, 234, 235, 237, 239, 245, 254, 275, 283, 285], "rendinst_opaque_inc": 17, "throughout": [17, 62, 159, 186, 289], "rendinst_scen": 17, "rendinst_depth_scen": 17, "rendinst_grassify_scen": 17, "grassifi": 17, "rendinst_voxelize_scen": 17, "voxel": [17, 62, 247, 258], "shader_nam": 17, "some_block": 17, "some_other_block": 17, "wa": [17, 18, 29, 31, 33, 34, 35, 38, 39, 41, 42, 46, 47, 50, 51, 52, 54, 59, 62, 63, 66, 68, 69, 87, 100, 119, 159, 174, 180, 185, 191, 197, 200, 201, 202, 204, 205, 206, 213, 216, 228, 231, 232, 235, 237, 239, 245, 250, 269, 285], "multiplied_world_po": 17, "intersect": [17, 159, 164, 169, 201, 205, 235, 289], "templat": [18, 27, 29, 34, 39, 54, 56, 59, 62, 64, 66, 72, 79, 93, 131, 170, 172, 173, 174, 178, 200, 208, 285], "import": [18, 61, 67, 68, 77, 80, 82, 83, 84, 85, 87, 88, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 141, 142, 143, 144, 145, 146, 148, 153, 155, 159, 165, 170, 172, 177, 181, 185, 187, 189, 201, 205, 208, 216, 218, 219, 221, 222, 224, 225, 228, 229, 230, 231, 236, 237, 240, 241, 245, 260, 267, 269], "entityid": [18, 79, 93, 131], "weak": [18, 197], "limit": [18, 34, 52, 106, 158, 159, 166, 170, 172, 173, 190, 196, 201, 205, 214, 221, 223, 229, 230, 231, 232, 238, 241, 245, 258, 275, 280, 285, 289], "reus": [18, 153, 159, 169, 172, 185, 275], "cycl": 18, "behaviour": 18, "written": [18, 39, 41, 46, 52, 159, 175, 213, 231, 275, 280, 285], "orient": [18, 157, 164, 169, 174, 175, 205, 226, 234, 247, 252, 256, 289], "program": [18, 25, 26, 52, 169, 192, 210, 214, 237, 269, 277], "polymorph": 18, "receiv": [18, 20, 29, 149, 163, 237], "copi": [18, 27, 29, 34, 41, 42, 52, 53, 56, 60, 68, 72, 149, 159, 163, 168, 172, 175, 177, 185, 205, 216, 223, 228, 231, 235, 237, 239, 260, 262, 272, 278, 280, 289], "constructor": [18, 20, 27, 34, 56, 63, 72], "destructor": [18, 71, 74, 169], "serial": 18, "track": [18, 58, 63, 87, 100, 165, 177, 245, 266], "fulli": [18, 39, 52, 157, 159, 160, 161, 174, 180, 187, 189, 194, 201, 202, 232, 239, 272, 285, 289], "overrid": [18, 29, 47, 52, 54, 62, 98, 158, 160, 169, 185, 188, 201, 205, 214, 235, 241, 262, 289], "archetyp": 18, "memori": [18, 29, 30, 33, 34, 35, 39, 41, 42, 48, 52, 54, 57, 59, 62, 208, 252, 269], "soa": 18, "interact": [18, 36, 98, 149, 153, 159, 161, 162, 185, 195, 201, 208, 214, 228, 254, 269, 289], "framework": [18, 19, 76, 79, 81, 161, 208, 275, 281, 285, 289], "componenttypemanag": 18, "manag": [18, 20, 24, 25, 34, 56, 57, 59, 62, 63, 64, 67, 76, 152, 158, 159, 162, 163, 164, 169, 187, 194, 201, 208, 236, 240, 245, 252, 254, 260, 269, 270, 274, 275, 281, 285], "lifecycl": 18, "destruct": [18, 29, 36, 53, 54, 66, 161, 162, 173, 221, 226, 235, 239, 245, 269, 288], "pod": 18, "plain": [18, 223], "visual_effect": 18, "animchar": [18, 173, 275, 286], "human_phys_actor": 18, "implement": [18, 20, 35, 39, 47, 52, 56, 159, 169, 174, 177, 200, 205, 206, 282, 289], "move": [18, 37, 56, 63, 87, 100, 155, 158, 159, 175, 186, 194, 200, 201, 216, 220, 230, 235, 239, 243, 245, 254, 269, 272, 275, 283, 285, 289], "replicatecompar": 18, "99": [18, 149, 169, 205], "relocat": 18, "anyth": [18, 29, 157, 159, 175, 177, 189, 191, 194, 228, 262], "pointer": [18, 20, 27, 28, 29, 30, 33, 34, 35, 37, 38, 39, 41, 42, 47, 50, 53, 54, 56, 62, 64, 67], "standard": [18, 20, 52, 149, 153, 162, 169, 177, 181, 188, 198, 201, 202, 205, 208, 214, 216, 225, 235, 237, 239, 243, 268, 269, 275, 283, 285, 289], "ecs_declare_boxed_typ": 18, "ecs_declare_relocatable_typ": 18, "faster": [18, 159, 172, 175, 239, 245, 269], "better": [18, 22, 29, 39, 53, 106, 157, 173, 174, 177, 190, 192, 200, 201, 205, 222, 228, 237, 239, 245, 247, 260, 262, 285], "fixed_vector": 18, "65536": 18, "hopefulli": 18, "predefin": [18, 34, 66, 153, 178, 205, 220, 247], "onupd": 18, "broadcast": [18, 20], "event": [18, 19, 38, 58, 76, 79, 93, 108, 131, 269, 275, 280, 285, 289], "lot": [18, 201, 213], "listen": [18, 20], "onev": 18, "could": [18, 29, 34, 52, 54, 56, 155, 159, 164, 169, 177, 201, 222, 243, 245, 258, 262, 269, 272, 289], "tupl": [18, 34, 61], "regularli": [18, 218, 219, 221, 222, 224, 225, 228, 229, 230, 231, 289], "postpon": [18, 30], "fact": [18, 159], "relev": [18, 62, 159, 174, 175, 187, 237, 243, 245, 260, 269, 285], "performqueri": 18, "queri": [18, 25, 26, 34, 48, 52, 58, 75, 169], "childcompon": 18, "child": [18, 59, 62, 149, 159, 163, 216, 235, 237, 243, 247], "fast": [18, 53, 158, 226, 230, 234, 285, 289], "attribut": [18, 27, 40, 52, 54, 158, 239, 280, 285, 289], "That": [18, 34, 159, 169], "sai": [18, 75, 159, 243], "get_all_human": 18, "get_all_humans_with_transform": 18, "entitymanag": [18, 79, 93, 131], "whole": [18, 29, 39, 41, 48, 52, 158, 159, 190, 230, 245, 262], "context": [18, 35, 52, 56, 108, 172, 192, 201, 239, 243, 245, 289], "mutat": [18, 129], "recreateent": 18, "transit": [18, 164, 169, 180, 197, 199, 201, 202, 214, 245, 285], "ad": [18, 28, 40, 62, 87, 100, 149, 150, 153, 155, 159, 160, 163, 164, 165, 167, 169, 170, 172, 173, 175, 188, 197, 200, 201, 202, 205, 213, 214, 219, 220, 227, 230, 232, 235, 239, 243, 250, 269, 272, 286], "miss": [18, 52, 62, 64, 66, 68, 159, 177, 237, 239, 245, 252, 258, 285, 289], "ones": [18, 57, 62, 159, 161, 164, 169, 172, 185, 201, 205, 221, 225, 230, 232, 237, 239, 258, 262, 268, 269, 289], "empti": [18, 34, 39, 62, 64, 98, 108, 159, 205, 214, 216, 235, 239, 243, 262, 285, 289], "replic": [18, 52, 222, 285, 289], "over": [18, 19, 34, 52, 56, 62, 63, 158, 159, 164, 173, 185, 188, 195, 196, 197, 201, 202, 205, 214, 222, 228, 235, 239, 243, 245, 254, 258, 269, 285, 289], "network": [18, 19, 208, 269, 274, 275], "mark": [18, 20, 34, 59, 62, 68, 159, 164, 192, 199, 201, 202, 204, 219, 220, 239, 252, 258, 285], "rather": [18, 33, 62, 149, 159, 173, 174, 175, 185, 190, 200, 201, 205, 216, 235, 239, 254, 269, 272, 275, 289], "complic": [18, 159], "larg": [18, 29, 158, 159, 168, 172, 173, 186, 191, 197, 199, 201, 205, 208, 216, 222, 229, 243, 245, 254, 258, 266, 269, 285, 288], "secur": [18, 269], "encapsul": [18, 59, 63, 64], "mutabl": 18, "hash": [18, 20, 34, 79, 131, 280], "logic": [18, 20, 54, 56, 59, 66, 159, 169, 173, 199, 201, 235, 255, 269, 275, 285, 289], "hasn": [18, 159, 245], "eventu": [18, 66, 68, 272], "consist": [18, 20, 67, 153, 159, 164, 165, 173, 175, 191, 194, 200, 201, 205, 209, 231, 237, 239, 250, 259, 266, 272, 285, 289], "client": [18, 19, 119, 159, 267, 270], "server": [18, 19, 158, 258, 268, 270, 275], "resend": 18, "obsolet": [18, 23, 159], "packet": 18, "lost": [18, 29, 52, 53, 59, 201, 214, 228, 239], "free": [18, 28, 30, 35, 59, 62, 158, 172, 175, 214, 269, 285, 289], "inherit": [18, 52, 158, 159, 169, 175], "contradict": [18, 52], "principl": [18, 155, 187, 198, 206, 237, 245, 254, 275, 286, 289], "asid": [18, 39, 194, 280], "mathemat": 18, "detail": [18, 20, 27, 52, 62, 67, 69, 72, 76, 149, 157, 158, 159, 160, 169, 172, 173, 186, 187, 188, 191, 194, 196, 198, 202, 203, 204, 207, 208, 213, 216, 220, 222, 228, 230, 231, 232, 235, 237, 239, 245, 247, 252, 254, 258, 259, 260, 262, 269, 275, 277, 281, 285], "except": [18, 20, 62, 159, 161, 169, 186, 199, 200, 201, 213, 237, 239, 262, 275], "exclus": [18, 36, 149, 164, 169, 190, 220, 222, 266, 285], "advanc": [18, 39, 155, 159, 196, 199, 200, 208, 222, 245, 285, 289], "lack": [18, 159, 189, 216, 245, 260, 285], "convers": [18, 52, 54, 67, 149, 159, 161, 206, 216, 237, 245, 266, 285], "remain": [18, 52, 153, 155, 159, 161, 164, 169, 175, 186, 188, 189, 191, 200, 201, 202, 204, 222, 230, 231, 235, 254, 272, 285, 289], "unawar": 18, "registr": 18, "reli": [18, 41, 51, 169, 189, 268, 269], "defer": [18, 68, 120, 158, 184], "manner": [18, 200, 204], "later": [18, 39, 62, 66, 153, 157, 159, 161, 169, 174, 177, 201, 205, 213, 235, 269, 285, 289], "unknown": [18, 60, 120, 138, 143, 205, 239], "delai": [18, 53, 54, 141, 148, 285], "simultan": [18, 40, 52, 62, 174, 188, 189, 200, 243, 285], "subject": [18, 275], "topolog": 18, "sort": [18, 190, 239, 256, 285], "storag": [18, 25, 29, 69, 71, 158, 250], "box": [18, 150, 152, 153, 155, 158, 159, 167, 168, 169, 170, 175, 194, 200, 201, 216, 221, 228, 230, 235, 239, 243, 245, 247, 252, 254, 258, 259, 269, 285], "boxedcr": 18, "sequenti": [18, 159, 161, 214, 237, 245, 269, 285], "alloc": [18, 28, 33, 34, 40, 42, 52, 54, 159], "though": [18, 67, 159, 169, 173, 174, 177, 191, 197, 200, 201, 216, 222, 228, 269, 285], "fragment": [18, 46, 289], "complex": [18, 155, 158, 159, 164, 169, 174, 192, 201, 205, 213, 228, 230, 235, 236, 239, 243, 275, 285, 289], "job": [18, 68, 158], "invoc": 18, "meet": [18, 155, 160, 192, 216, 275, 285, 289], "parallel": [18, 62, 174, 208, 259], "across": [18, 20, 155, 159, 164, 165, 169, 177, 186, 188, 190, 192, 193, 194, 197, 200, 201, 205, 208, 231, 235, 239, 245, 252, 266, 269, 272, 275, 285], "thread": [18, 30, 31, 32, 36, 45, 62, 68], "simd": 18, "sinc": [18, 41, 51, 56, 63, 119, 149, 153, 155, 159, 163, 169, 172, 173, 174, 177, 185, 186, 187, 193, 200, 201, 204, 205, 208, 216, 223, 230, 232, 235, 239, 243, 245, 258, 269, 272, 283, 289], "accur": [18, 159, 169, 204, 209, 228, 235, 245, 247, 285, 289], "conflict": [18, 159, 163, 192, 206, 225, 245], "relat": [18, 25, 26, 39, 47, 52, 62, 150, 154, 158, 159, 164, 169, 197, 199, 239, 245, 254, 258, 275, 285, 289], "yet": [18, 38, 52, 62, 66, 67, 150, 206, 213, 235, 239, 243, 260], "extrem": [18, 54, 159, 172, 200, 201, 204, 205, 235, 269, 289], "danger": [18, 213, 262], "undesir": [18, 155], "danetgam": [18, 76, 79, 80, 82, 83, 84, 86, 147, 153, 167, 168, 169, 170, 173, 175, 178, 181, 198, 200, 208, 229, 235, 239, 243, 245, 258, 269, 270, 281, 283, 285, 289], "typenam": [18, 27, 29, 34, 54, 56, 59, 91, 124], "callabl": [18, 25, 26, 39, 62, 64], "void": [18, 27, 28, 29, 30, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 50, 53, 54, 56, 59, 60, 61, 62, 66, 67, 68, 70, 71, 73, 74, 83, 91, 95, 98, 99, 106, 108, 114, 118, 120, 123, 124, 126, 127, 138, 139, 213], "animchar_update_ecs_queri": 18, "ecs_can_parallel_for": 18, "animchar_update_": 18, "updatestageinfo": 18, "eid": [18, 20, 91, 124], "es_ord": 18, "es_nam": 18, "mt": 18, "quant_siz": 18, "es_act": 18, "es_before_rend": 18, "quantum": 18, "larger": [18, 28, 34, 52, 164, 172, 185, 186, 190, 191, 199, 200, 201, 219, 222, 223, 254, 289], "fewer": [18, 52, 200, 201], "around": [18, 23, 45, 52, 62, 159, 169, 174, 181, 197, 205, 219, 231, 247, 254, 258, 262, 272, 289], "uneven": [18, 159, 174, 190, 197, 201, 235], "anim": [18, 87, 100, 149, 153, 158, 161, 167, 169, 173, 179, 187, 192, 208, 216, 230, 239, 275, 281, 286], "small": [18, 56, 72, 159, 172, 173, 174, 186, 191, 196, 199, 200, 201, 213, 228, 235, 247, 252, 258, 270, 275, 277, 285, 289], "amount": [18, 29, 34, 39, 54, 62, 159, 200, 201, 213, 237, 247, 252, 269, 277, 285], "isol": [18, 285, 289], "slow": [18, 33, 53, 54, 158, 159, 177, 235, 239, 245, 258], "budget": [18, 30], "millisecond": [18, 109, 119], "measur": [18, 174], "therefor": [18, 20, 52, 157, 159, 169, 172, 177, 185, 187, 189, 200, 201, 205, 216, 235, 239, 243, 266, 289], "crucial": [18, 153, 159, 172, 216, 222, 228, 245, 266, 269, 283, 285, 289], "signific": [18, 159, 169, 172, 200, 214, 237, 243, 245, 285, 289], "manipul": [18, 57, 289], "under": [18, 53, 54, 66, 68, 87, 100, 159, 169, 173, 174, 180, 230, 232, 235, 237, 239, 243, 245, 258, 272, 275, 289], "zone": [18, 155, 164], "someon": [18, 169], "enter": [18, 159, 175, 201, 213, 225, 228, 230, 232, 235, 237, 239, 243, 260, 272], "either": [18, 20, 41, 42, 52, 59, 62, 68, 159, 161, 169, 172, 173, 174, 181, 188, 189, 193, 194, 200, 201, 205, 232, 235, 237, 243, 245, 254, 258, 259, 260, 262, 269, 272], "entir": [18, 62, 149, 150, 153, 157, 158, 159, 169, 172, 173, 174, 181, 185, 191, 193, 194, 197, 200, 201, 205, 209, 216, 237, 239, 243, 245, 254, 258, 262, 269, 275, 277, 285, 289], "potenti": [18, 72, 157, 159, 164, 206, 232, 245, 252, 260, 266, 270, 275, 289], "re": [18, 28, 37, 54, 59, 61, 62, 63, 64, 66, 68, 159, 161, 169, 175, 177, 188, 199, 201, 216, 222, 223, 224, 235, 237, 239, 245, 254, 262, 266, 269, 285, 289], "advis": [18, 20, 149, 201, 216, 280], "especi": [18, 159, 169, 177, 190, 243, 245, 285], "deal": [18, 169, 199], "extern": [18, 39, 45, 46, 57, 59, 60, 62, 66, 68, 85, 161, 186, 200, 201, 213, 214, 239, 275, 280, 289], "id": [18, 20, 25, 35, 40, 52, 53, 56, 60, 64, 65, 66, 68, 77, 108, 120, 158], "much": [18, 42, 64, 119, 157, 159, 181, 185, 186, 197, 200, 201, 204, 205, 213, 222, 237, 239, 269, 275, 289], "primari": [18, 30, 64, 149, 159, 160, 178, 188, 200, 201, 205, 216, 250, 254, 269, 285, 289], "aka": [18, 39, 52], "queu": 18, "load": [18, 20, 23, 30, 36, 39, 52, 53, 54, 66, 67, 68, 95, 150, 159, 160, 164, 169, 174, 175, 177, 200, 218, 219, 225, 228, 232, 239, 245, 252, 262, 269, 270, 275, 277, 285], "asynchron": [18, 52, 53], "vari": [18, 150, 155, 159, 164, 174, 186, 194, 196, 200, 201, 222, 237, 245, 247, 269, 289], "exot": 18, "composit": [18, 153, 155, 161, 162, 163, 164, 167, 170, 172, 175, 177, 184, 194, 230, 241, 242, 245, 249, 254, 261, 264, 275], "recreat": [18, 41, 56, 59, 169, 174], "bar": [18, 59, 213, 214, 218, 219, 221, 222, 227], "problem": [18, 29, 57, 155, 201, 216, 235, 269], "getrw": 18, "assert": [18, 39, 104, 161, 258, 289], "releas": [18, 30, 36, 38, 42, 47, 53, 66, 68, 98, 108, 160, 269, 277], "getnul": 18, "etnullablerw": 18, "turn": [18, 59, 62, 67, 159, 161, 172, 192, 197, 201, 243, 252, 285], "inher": [18, 231], "violat": [18, 42, 64, 159], "paradigm": 18, "about": [18, 29, 35, 39, 52, 62, 68, 69, 167, 169, 172, 173, 192, 213, 216, 218, 219, 221, 222, 224, 225, 228, 229, 230, 231, 245, 252, 254, 260, 262, 267, 281], "sever": [18, 22, 23, 59, 62, 72, 149, 157, 159, 164, 169, 189, 190, 194, 199, 200, 201, 213, 216, 218, 219, 220, 221, 223, 235, 237, 239, 245, 247, 269, 275], "locat": [18, 20, 48, 54, 59, 150, 155, 158, 159, 161, 168, 169, 172, 173, 174, 175, 177, 178, 181, 186, 188, 191, 193, 201, 205, 206, 210, 216, 220, 227, 229, 230, 232, 235, 237, 239, 245, 250, 255, 258, 259, 260, 262, 266, 268, 269, 272, 275, 277, 280, 283, 285, 289], "recommend": [18, 20, 29, 63, 157, 161, 164, 165, 169, 174, 181, 185, 186, 190, 194, 197, 200, 204, 205, 216, 228, 235, 237, 239, 243, 247, 258, 261, 264, 275, 280, 285, 289], "librari": [18, 44, 57, 59, 61, 76, 174, 175, 201, 208, 272, 275, 277, 281, 289], "leav": [18, 22, 164, 169, 173, 175, 188, 189, 197, 201, 218, 222, 228, 230, 235, 239, 275, 285], "clearli": [18, 159, 201, 285], "distanc": [18, 40, 149, 153, 155, 158, 159, 161, 164, 165, 169, 172, 186, 196, 199, 200, 202, 204, 231, 237, 245, 247, 258, 259, 275, 285, 289], "someth": [18, 35, 41, 62, 159, 168, 181, 201, 205, 237, 243, 245, 254, 262, 269, 289], "had": [18, 62, 169, 197, 216, 232], "spheric": [18, 172, 174, 195], "cubic": [18, 54, 153], "ishapedtrigg": 18, "virtual": [18, 29, 30, 35, 54, 62, 64, 68, 69, 149, 159, 165, 174, 245, 262, 269, 270, 275, 286, 289], "isinsid": 18, "point3": [18, 79, 131, 250, 262], "boxtrigg": 18, "public": [18, 27, 29, 30, 34, 35, 36, 39, 40, 41, 43, 45, 48, 52, 54, 56, 59, 62, 63, 64, 67, 68, 71, 72, 222], "spheretrigg": 18, "foreach": 18, "unit": [18, 150, 159, 165, 172, 199, 200, 219, 222, 230, 231, 237, 283, 285], "do_someth": 18, "sphere_trigger_": 18, "sphere_c": 18, "sphere_r": 18, "length": [18, 98, 111, 155, 159, 164, 186, 222, 239, 252, 258], "sendev": [18, 20, 91, 124], "in_trigg": 18, "box_trigger_": 18, "box_0": 18, "box_1": 18, "bbox3": 18, "As": [18, 59, 62, 63, 153, 159, 164, 169, 172, 174, 175, 188, 190, 194, 197, 200, 201, 202, 204, 205, 216, 219, 222, 230, 231, 235, 237, 262, 272, 278, 285, 289], "benefici": 18, "problemat": [18, 159, 219, 272], "decoupl": 18, "knowledg": [18, 159, 289], "area": [18, 35, 39, 48, 87, 100, 153, 172, 173, 174, 181, 185, 186, 188, 189, 192, 194, 197, 199, 200, 201, 204, 205, 206, 219, 232, 237, 239, 247, 258, 259, 272, 275, 289], "abil": [18, 159, 194, 200, 247], "care": [18, 29, 39, 52, 159, 201], "promot": [18, 280], "debug": [18, 23, 29, 46, 59, 62, 79, 83, 89, 98, 131, 157, 158, 160, 208, 245, 252, 262, 269, 270, 275], "transfer": [18, 29, 52, 60, 166, 216, 218, 222, 226, 234, 235, 237, 239], "ishapearea": 18, "interfac": [18, 29, 35, 62, 159, 216, 227, 232, 239, 240, 244, 245, 249, 252, 257, 272, 275], "extend": [18, 40, 79, 89, 93, 131, 149, 157, 159, 165, 169, 172, 175, 213], "broadli": 18, "seem": [18, 41, 52, 62, 159, 199, 201, 205, 269], "member": [18, 27, 30, 34, 35, 36, 39, 40, 41, 43, 45, 48, 52, 54, 56, 59, 62, 68, 91, 124, 159, 213, 272], "sphere": [18, 174, 221, 231, 247, 289], "exclud": [18, 20, 68, 157, 158, 161, 169, 213, 216, 222, 228, 239, 245, 252, 258, 262, 275, 285], "typic": [18, 149, 155, 158, 159, 161, 164, 169, 172, 173, 174, 189, 193, 196, 197, 199, 201, 205, 206, 216, 219, 222, 232, 239, 245, 254, 266, 269, 275, 283, 289], "least": [18, 22, 52, 189, 194, 213, 214, 218, 219, 220, 221, 222, 224, 225, 228, 229, 230, 231, 235, 239, 252, 254, 258, 262, 285, 289], "hundr": [18, 59, 159, 199, 245, 285, 289], "consum": [18, 59, 62, 214, 269, 289], "ten": [18, 172], "kilobyt": 18, "divers": [18, 190, 201], "pattern": [18, 44, 139, 158, 164, 169, 174, 178, 191, 199, 201, 252, 269, 289], "highli": [18, 29, 149, 157, 159, 161, 169, 181, 285], "suboptim": 18, "cach": [18, 62, 64, 149, 158, 208, 235], "effici": [18, 42, 159, 168, 191, 208, 245, 247, 250, 269, 285, 289], "predict": [18, 159], "exhibit": [18, 199, 289], "form": [18, 52, 66, 68, 149, 159, 169, 186, 201, 214, 230, 250, 259, 269, 275, 280, 289], "duck": 18, "fare": 18, "dagorec": 18, "design": [18, 59, 154, 157, 159, 164, 169, 172, 173, 178, 185, 186, 187, 188, 190, 194, 196, 197, 201, 202, 203, 204, 207, 216, 219, 220, 224, 235, 236, 237, 239, 264, 266, 275, 281, 285, 287], "speed": [18, 186, 192, 235, 245, 253, 256, 269, 285], "excel": [18, 222], "neglig": [18, 172, 280], "batch": [18, 20, 68, 161, 216, 220, 228, 241, 269, 275], "slightli": [18, 159, 172, 174, 191, 200, 201, 205, 216, 235, 237, 239, 245, 262, 285, 289], "40": [18, 149, 201, 247, 269, 289], "slower": [18, 239, 245], "achiev": [18, 62, 157, 159, 169, 186, 192, 194, 199, 200, 201, 228, 289], "task": [18, 53, 159, 174, 231, 235, 237, 266, 269, 285, 289], "upper": [18, 159, 188, 189, 201, 202, 205, 228, 285], "30": [18, 54, 169, 172, 197, 222, 230, 289], "unique_ptr": 18, "ll": [18, 159, 169, 174, 192, 197, 200, 201, 216, 232, 235, 245, 269, 272, 283, 289], "incur": 18, "penalti": 18, "000": [18, 219, 239, 285, 289], "total": [18, 29, 30, 35, 39, 48, 54, 66, 67, 158, 159, 200, 262, 266, 285, 289], "516": 18, "tmatrix": [18, 37, 111, 126], "ident": [18, 20, 28, 34, 45, 159, 163, 164, 169, 174, 188, 191, 194, 197, 200, 204, 216, 225, 231, 235, 239, 245, 285, 289], "iv": 18, "ic2": 18, "ivcopi": 18, "daec": [18, 63, 122, 275], "6788": 18, "grow": [18, 205], "10088": 18, "best": [18, 34, 45, 153, 159, 189, 190, 192, 197, 200, 275], "4768": 18, "averag": [18, 52, 219], "mass": [18, 158, 285], "22": [18, 32, 280], "microsecond": 18, "synchron": [18, 39, 45, 68, 169, 252, 270], "catch": [18, 209], "conclus": 18, "spawn": [18, 150, 159], "pool": [18, 252], "trivial": 18, "kinemat": [18, 208, 285], "dt": [18, 91, 124], "vel": 18, "util": [18, 19, 66, 68, 177, 201, 217, 221, 232, 266, 275, 280, 285], "NOT": [18, 201, 280], "cold": 18, "49": 18, "45": [18, 188, 197, 201, 205], "inlin": [18, 27, 29, 33, 34, 35, 36, 39, 40, 41, 43, 45, 47, 50, 52, 53, 54, 56, 59, 62, 63, 64, 66, 67, 68, 111, 143, 212, 213], "460": 18, "20": [18, 197, 202, 219, 222, 223, 247, 269, 280, 289], "502": 18, "683": 18, "44": [18, 250], "55": [18, 197], "hot": [18, 58, 62, 74, 149], "35": [18, 201], "7": [18, 60, 159, 164, 169, 180, 188, 199, 201, 219, 220, 225, 228, 230, 231, 235, 247, 262, 266, 277, 280, 285, 289], "299": 18, "346": 18, "561": 18, "34": 18, "summari": [18, 159, 181, 201, 220], "despit": [18, 169, 172, 201, 214, 235], "vastli": 18, "uniti": 18, "2018": [18, 218, 221, 222, 228], "algorithm": [18, 158, 186, 194, 228, 235, 247], "approxim": [18, 181, 200, 262, 272, 289], "incredibli": 18, "tool": [18, 39, 77, 149, 150, 153, 158, 159, 161, 164, 173, 174, 175, 177, 197, 201, 205, 208, 218, 223, 227, 228, 230, 232, 234, 236, 237, 238, 240, 241, 242, 243, 245, 251, 254, 260, 263, 265, 269, 272, 277, 280, 281, 283, 285, 289], "lambda": [18, 61, 62, 74, 213], "python": [18, 210, 213, 214, 277], "pars": [18, 20, 58, 59, 75, 132, 174, 210, 213, 251, 262, 285], "_e": 18, "_es_event_handl": 18, "_ecs_queri": 18, "water_": 18, "updatestageinfoact": 18, "updatestageinforend": 18, "water_es_event_handl": 18, "event1": 18, "event2": 18, "recogn": [18, 159, 174, 201, 222, 258, 268, 285], "on_upd": 18, "event_handl": [18, 141, 148], "strict": [18, 20, 159, 280, 289], "strictli": [18, 159, 200, 205], "ecs_requir": 18, "auto_typ": 18, "serv": [18, 159, 175, 229, 231, 232, 243, 269, 275], "water_wind": 18, "nullptr": [18, 29, 30, 34, 35, 37, 38, 39, 41, 42, 46, 47, 48, 49, 54, 56, 62, 64, 66, 68, 83, 98, 127, 144], "implicit": [18, 60, 62, 70], "implicitli": [18, 174], "benefit": [18, 209], "human": [18, 159, 243, 269, 281, 287], "review": [18, 155, 169, 185, 209, 226, 232, 275, 278, 285, 289], "manual": [18, 20, 62, 119, 149, 150, 161, 168, 169, 172, 173, 174, 177, 200, 201, 213, 216, 222, 230, 232, 235, 237, 239, 245, 262, 269, 270, 272, 275, 281, 285, 289], "easier": [18, 149, 159, 163, 185, 201, 235, 245, 272, 275, 285, 289], "effort": [18, 62, 159, 189], "come": [18, 57, 149, 159, 161, 199, 216, 254, 272, 280, 289], "refactor": [18, 213], "ecs_track": 18, "name1": 18, "name2": [18, 117], "ecs_befor": 18, "ecs_aft": 18, "name3": 18, "namex": 18, "__first_sync_point": 18, "ecs_no_ord": 18, "ecs_tag": 18, "sound": [18, 79, 87, 100, 131, 147, 160, 169, 208, 277, 289], "gamecli": 18, "ecs_on_ev": [18, 20], "on_appear": [18, 58, 75], "shortcut": [18, 235, 245, 254], "evententitycr": 18, "eventcomponentsappear": 18, "on_disappear": 18, "evententitydestroi": 18, "eventcomponentsdisappear": 18, "ecs_require_not": 18, "place": [18, 20, 34, 39, 87, 100, 149, 150, 153, 155, 157, 159, 161, 164, 168, 169, 170, 172, 174, 175, 188, 199, 201, 210, 213, 214, 218, 230, 235, 237, 239, 243, 250, 254, 259, 260, 262, 268, 269, 275, 277, 283, 285, 289], "somenam": 18, "someabsentnam": 18, "foo_": 18, "hp": [18, 237, 289], "irrelev": [18, 216, 235, 269, 285], "annot": [18, 20, 57, 69], "liter": [18, 161, 214], "some_compon": 18, "some_tag": 18, "won": [18, 149, 159, 169, 173, 174, 177, 194, 205, 216, 245, 258, 262, 272], "eventnam": [18, 58], "eventname2": 18, "handler": [18, 91, 124, 127], "past": [18, 159, 223, 239], "core": [18, 25, 55, 57, 169, 201, 208, 217, 275], "unicast": 18, "evententityrecr": 18, "previou": [18, 39, 52, 59, 62, 66, 68, 149, 163, 169, 185, 186, 200, 201, 216, 220, 227, 235, 254, 269], "take": [18, 27, 45, 58, 59, 62, 150, 159, 169, 172, 186, 187, 188, 201, 216, 219, 221, 237, 243, 245, 258, 262, 269, 275, 277, 285, 289], "longer": [18, 20, 150, 186, 205, 219, 239, 262, 266, 269, 272, 289], "eventcomponentchang": 18, "uniqu": [18, 56, 59, 62, 66, 68, 149, 153, 159, 161, 163, 164, 165, 169, 172, 173, 175, 188, 197, 199, 200, 204, 205, 235, 239, 247, 254, 266, 275, 285, 289], "unlik": [18, 159, 184, 188, 195, 201, 216, 229, 235, 239, 245, 269, 285], "evententitymanageresorderset": 18, "evententitymanagerbeforeclear": 18, "evententitymanagerafterclear": 18, "rect": [18, 90, 140], "p2": [18, 159, 164, 169, 230, 235, 250], "rectsiz": 18, "brick": [18, 159, 177, 189, 201, 205], "_extend": [18, 174], "ip2": [18, 23, 250], "pad": [18, 164], "ispad": 18, "ball": [18, 214], "600": 18, "700": 18, "330": 18, "550": [18, 149], "radiu": [18, 155, 158, 169, 172, 173, 174, 228, 258, 262], "25": [18, 159, 164, 169, 172, 199, 201, 202, 205, 228, 262], "anton": 18, "yudintsev": 18, "gameplai": [18, 153, 155, 159, 172, 173, 185, 231, 285], "architectur": [18, 19, 52, 208], "mp4": 18, "65": [18, 165, 200, 285, 289], "gb": [18, 269, 277], "scalabl": [19, 208], "entiti": [19, 58, 59, 63, 150, 158, 159, 164, 173, 174, 175, 194, 199, 208, 235, 245, 253, 254, 256, 259, 275, 285, 289], "engin": [19, 22, 23, 29, 30, 64, 67, 76, 149, 158, 159, 160, 161, 167, 169, 174, 209, 210, 215, 218, 220, 221, 226, 228, 230, 237, 239, 240, 242, 245, 250, 264, 272, 274, 276, 277, 278, 279, 281, 282, 286, 287, 289], "characterist": [19, 275, 289], "work": [19, 20, 25, 26, 29, 31, 34, 35, 39, 40, 47, 52, 53, 57, 62, 69, 74, 106, 153, 154, 159, 161, 165, 168, 170, 172, 173, 174, 175, 179, 181, 185, 187, 189, 190, 191, 195, 197, 199, 200, 203, 204, 205, 206, 213, 216, 218, 225, 228, 229, 232, 235, 236, 237, 239, 243, 246, 247, 250, 255, 262, 264, 266, 269, 275, 277, 286, 289], "oop": 19, "approach": [19, 63, 150, 159, 161, 168, 169, 177, 191, 194, 197, 201, 222, 231, 235, 239, 245, 269, 270, 285, 289], "codegen": 19, "video": [19, 30, 35, 53, 87, 100, 157, 160, 250], "lectur": 19, "scheme": [19, 76, 155, 159, 169, 189], "dascript": [19, 61, 76, 275, 280], "quirrel": [19, 76, 81, 86, 89, 95, 96, 97, 98, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 123, 127, 128, 129, 130, 132, 133, 134, 135, 137, 138, 139, 141, 142, 143, 144, 145, 146, 147, 148, 208, 213, 275, 280, 281], "net": [19, 76, 79, 81, 93, 122, 131, 169, 214], "advantag": [19, 159, 269, 270], "subscrib": 19, "send": [19, 30, 108, 252], "protocol": [19, 208], "offlin": 19, "onlin": [19, 159], "bitstream": 19, "reflect": [19, 158, 159, 174, 180, 185, 190, 193, 199, 201, 231, 245, 269, 285], "cpp_event": 19, "stub": [19, 35, 54, 66, 67, 68, 213, 280], "filter": [19, 28, 52, 66, 68, 83, 149, 164, 168, 228, 252, 258, 269, 272], "squirrel": 19, "deliveri": 19, "reliabl": [19, 52, 175, 216, 289], "enum": [19, 28, 29, 30, 33, 34, 35, 37, 39, 40, 41, 45, 52, 53, 54, 62, 66, 79, 89, 131, 213, 232], "faq": 19, "univers": [20, 159, 165], "compat": [20, 29, 35, 39, 52, 59, 67, 165, 285], "transmit": [20, 169], "restart": [20, 227, 247, 262, 269, 277], "field": [20, 34, 45, 60, 61, 62, 74, 84, 87, 100, 108, 168, 175, 219, 220, 222, 225, 228, 232, 235, 239, 243, 245, 254, 283, 289], "evt": 20, "somefield": 20, "full": [20, 23, 35, 41, 45, 49, 64, 66, 68, 159, 161, 174, 185, 189, 199, 200, 201, 205, 213, 222, 231, 235, 239, 245, 253, 256, 258, 267, 270], "directori": [20, 62, 72, 106, 149, 150, 158, 159, 161, 168, 169, 172, 173, 174, 175, 177, 200, 210, 216, 220, 227, 229, 230, 235, 237, 239, 243, 245, 250, 252, 254, 258, 260, 262, 266, 269, 270, 272, 277, 279, 280, 281, 283, 285, 289], "events_": 20, "game_nam": [20, 160], "events_cuisine_royal": 20, "rout": 20, "cover": [20, 159, 165, 169, 173, 175, 190, 193, 197, 201, 228, 245, 254, 257, 285, 289], "cmdcreatemappoint": 20, "mandatori": [20, 22, 50, 64, 149, 159, 200, 205, 235, 239, 250, 262, 285], "rquseabl": 20, "ability_typ": 20, "typograph": 20, "extran": 20, "ultim": [20, 174, 269], "on_ev": [20, 58], "onabilitycancel": 20, "dasev": [20, 79, 131], "ec": [20, 25, 57, 61, 63, 69, 71, 74, 76, 79, 94, 131, 136, 208, 275, 281], "register_": 20, "ability_canceling_": 20, "comp": [20, 91, 124], "dlog": 20, "eastl": [20, 34, 53, 56, 59, 62, 91, 98, 108, 120, 124, 127, 280], "integral_const": 20, "event_type_t": 20, "str_hash_fnv1": 20, "eventonseatownerschang": 20, "broadcastev": [20, 91, 124], "g_entity_mgr": [20, 91, 124], "path": [20, 23, 87, 100, 106, 118, 141, 145, 148, 149, 155, 158, 159, 161, 177, 194, 199, 207, 210, 213, 216, 220, 225, 227, 229, 230, 235, 237, 239, 250, 252, 254, 262, 268, 270, 277, 285], "routing_client_to_serv": 20, "routing_client_controlled_entity_to_serv": 20, "send_net_ev": 20, "broadcast_net_ev": 20, "cmdblinkmark": 20, "sendnetev": [20, 122], "broadcastnetev": [20, 122], "contribut": [20, 211, 215, 279, 281], "disconnect": 20, "session": [20, 214, 222], "control": [20, 25, 29, 57, 59, 62, 68, 79, 81, 87, 97, 100, 158, 159, 164, 172, 173, 177, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 195, 196, 197, 199, 200, 201, 202, 203, 204, 206, 207, 208, 222, 232, 246, 255, 275, 285, 289], "mismatch": [20, 201, 235, 289], "screen": [20, 35, 41, 42, 53, 87, 100, 158, 190, 216], "notif": [20, 68, 235], "net_liabl": 20, "particip": [20, 205], "logerr": [20, 23, 104, 262], "log": [20, 83, 159, 219, 220, 225, 235, 237, 240, 241, 245, 250, 252, 260, 269, 285, 289], "record": [20, 29, 159, 216, 235, 239, 285], "ignor": [20, 30, 34, 47, 52, 53, 62, 158, 159, 164, 186, 216, 229, 235, 239, 254, 262, 269, 270, 285, 289], "logwarn": 20, "net_proto_vers": [20, 82], "count": [20, 27, 28, 29, 32, 40, 52, 54, 66, 68, 150, 153, 158, 191, 200, 206, 213, 222, 231, 245, 272, 285, 289], "explicit": [20, 27, 62, 63, 67, 158, 212, 258, 275], "assist": [20, 159, 219, 223, 228, 275, 289], "adapt": [20, 35, 172, 173, 185, 196, 208, 239], "stream": [20, 46, 50, 54, 65, 67, 68, 132, 158], "content": [20, 21, 24, 28, 29, 39, 41, 42, 52, 54, 56, 68, 78, 79, 81, 86, 89, 93, 131, 147, 149, 165, 169, 173, 174, 177, 178, 194, 201, 208, 209, 216, 229, 237, 238, 239, 241, 250, 251, 253, 255, 257, 261, 262, 263, 266, 268, 269, 275, 277, 285, 289], "significantli": [20, 159, 169, 181, 201, 205, 213, 216, 235, 243, 245, 270, 272, 280, 285, 289], "testev": 20, "along": [20, 62, 155, 159, 164, 169, 173, 174, 175, 186, 191, 195, 199, 201, 205, 207, 216, 228, 229, 230, 231, 235, 237, 239, 243, 245, 252, 259, 269, 275, 285, 289], "intlist": 20, "floatlist": 20, "point3list": 20, "point4list": 20, "str": [20, 98, 144, 161], "obj": [20, 96, 126, 223], "42": [20, 250, 262], "ecs_addr": 20, "helper": [20, 25, 56, 62, 66, 68, 76, 158, 216, 285], "nut": [20, 106, 213], "compobject": [20, 79, 93, 131], "fromconnid": 20, "sender": 20, "connect": [20, 143, 206, 217, 229, 245, 272], "hold": [20, 29, 52, 63, 66, 168, 175, 245, 247, 259, 270, 280], "undergo": 20, "substanti": 20, "outdat": [20, 35, 191, 201, 232, 243, 289], "raw": [20, 35, 39, 54, 67, 269, 275, 285], "possess": 20, "schema": 20, "eventsdb": [20, 79, 93, 131], "geteventschem": 20, "haseventschem": [20, 91, 124], "getfieldscount": [20, 91, 124], "getfieldoffset": [20, 91, 124], "getfieldnam": [20, 91, 124], "findfieldindex": [20, 91, 124], "geteventfieldvalu": [20, 91, 124], "modul": [20, 25, 57, 61, 69, 74, 76, 77, 80, 81, 82, 83, 84, 85, 86, 87, 88, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 135, 136, 137, 138, 139, 141, 142, 143, 144, 145, 146, 147, 148, 180, 189, 194, 197, 213, 275, 280, 281], "events_db_getfieldscount": 20, "db": 20, "window": [20, 34, 35, 44, 52, 53, 159, 168, 175, 185, 190, 193, 194, 208, 210, 216, 218, 219, 220, 221, 222, 224, 225, 227, 228, 229, 230, 231, 232, 239, 243, 245, 252, 254, 258, 272, 275, 277, 289], "imgui": [20, 83, 280], "project_nam": [20, 150, 169, 172, 173, 174, 178, 191, 200, 245, 266, 268, 269, 275, 285, 289], "ecs_events_db": 20, "printout": 20, "demonstr": [20, 149, 161, 169, 200, 201, 222, 231, 275, 289], "describe_ev": 20, "describeev": 20, "eventtyp": [20, 121], "gettyp": [20, 91, 98, 124], "eventid": 20, "geteventsdb": [20, 91, 124], "findev": [20, 91, 124], "hasschem": 20, "fieldscount": 20, "getfieldtyp": [20, 91, 124], "sq": [20, 91, 92, 94, 111, 124, 125, 136], "with_schem": 20, "due": [20, 59, 62, 64, 155, 159, 169, 174, 181, 185, 196, 197, 200, 205, 216, 231, 232, 239, 272, 285, 289], "restrict": [20, 34, 39, 52, 68, 155, 169, 170, 189, 229], "eventonplayerdash": 20, "cpp": [20, 23, 60, 61, 70, 74, 77, 80, 82, 83, 84, 85, 87, 88, 90, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 148, 174, 213, 258, 262, 280], "jam": [20, 275, 277], "splatform": 20, "win64": [20, 150], "scheckedcontain": 20, "aot": 20, "recipi": 20, "group": [20, 31, 32, 34, 58, 59, 62, 75, 150, 158, 159, 161, 164, 169, 199, 200, 201, 216, 222, 226, 229, 230, 234, 237, 240, 241, 245, 254, 269, 285, 289], "player": [20, 153, 155, 159, 177, 269, 275, 283], "team": [20, 150, 159, 165, 272, 285, 289], "enablespect": 20, "target_entity_conn": 20, "broadcast_rcptf": 20, "hero": 20, "somenetmsg": 20, "entity_team": 20, "possessed_and_spect": 20, "spectat": 20, "watch": [20, 79, 131, 213], "possessed_and_spectated_play": 20, "iconnect": 20, "terminologi": 20, "sq_filter": 20, "filtered_by_team_queri": 20, "sqqueri": [20, 79, 93, 131], "comps_ro": 20, "type_int": [20, 91, 124], "connid": 20, "comps_rq": 20, "comps_no": 20, "playerisbot": 20, "filter_connids_by_team": 20, "append": [20, 91, 124, 175, 239, 285], "ne": 20, "eq": 20, "subst": 20, "invalid_connection_id": [20, 94, 136], "And": [20, 157, 159, 201, 205, 213], "sq_send_ev": 20, "requestnextrespawnent": 20, "membereid": 20, "target_team": 20, "reliable_ord": 20, "unreli": 20, "unreliable_sequenc": 20, "reliable_unord": 20, "enumer": [20, 25, 26, 27, 29, 30, 34, 35, 39, 40, 41, 45, 53, 54, 57, 62, 66, 158, 159, 214, 232], "step": [20, 52, 150, 153, 155, 157, 158, 159, 164, 165, 168, 170, 177, 201, 209, 210, 222, 226, 232, 235, 247, 262, 269, 272, 278, 281, 283, 284, 287, 289], "prefer": [20, 35, 150, 158, 159, 161, 172, 173, 175, 186, 208, 232, 237, 239, 243, 269, 272], "export_enum": 20, "add": [20, 52, 68, 69, 150, 158, 163, 164, 165, 168, 169, 172, 173, 174, 175, 177, 183, 190, 197, 199, 201, 205, 209, 210, 213, 216, 219, 221, 227, 232, 235, 236, 237, 240, 245, 250, 252, 259, 260, 262, 264, 269, 270, 272, 277, 281, 285, 289], "file_with_enum": 20, "game_prog": 20, "sq_global": 20, "dasenum": 20, "dump_ev": 20, "consol": [20, 34, 79, 83, 85, 131, 159, 175, 196, 200, 201, 239, 245, 252, 254, 256, 258, 262, 264, 270, 275, 277, 285, 289], "print": [20, 85, 98, 214, 262], "alreadi": [20, 34, 39, 59, 68, 85, 98, 153, 159, 161, 169, 177, 197, 216, 223, 227, 230, 235, 237, 239, 243, 262, 272, 285], "analysi": [20, 252], "addition": [20, 52, 66, 157, 159, 163, 169, 172, 174, 190, 197, 228, 235, 239, 245, 259, 266, 269, 285], "open": [20, 52, 97, 106, 150, 157, 159, 164, 168, 174, 175, 177, 200, 208, 209, 210, 213, 216, 218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 232, 237, 239, 243, 253, 256, 258, 266, 267, 270, 276, 278, 285, 289], "menu": [20, 153, 175, 219, 225, 227, 228, 235, 239, 243, 245, 254, 258, 262, 269, 283, 285, 289], "direct_connect": 20, "updat": [20, 25, 26, 28, 29, 54, 59, 68, 69, 72, 74, 75, 129, 159, 168, 169, 171, 175, 177, 208, 209, 228, 230, 235, 239, 252, 262, 269, 270, 281, 285, 289], "activ": [20, 34, 40, 52, 60, 62, 68, 98, 172, 173, 175, 185, 193, 197, 205, 216, 220, 221, 228, 230, 235, 239, 241, 243, 252, 289], "final": [20, 29, 39, 52, 66, 68, 158, 159, 161, 164, 168, 170, 197, 199, 201, 205, 220, 229, 230, 232, 238, 239, 269, 275, 285], "sure": [20, 39, 52, 68, 150, 155, 159, 169, 173, 177, 185, 186, 216, 218, 219, 221, 222, 224, 225, 228, 229, 230, 231, 235, 243, 245, 254, 283, 285], "_init": 20, "rebuild": [20, 175, 235, 239, 245, 252, 268, 269, 289], "plugin": [20, 149, 158, 200, 208, 216, 218, 219, 220, 221, 222, 224, 225, 228, 229, 230, 231, 232, 275, 277, 289], "vscode": [20, 150, 280], "imag": [21, 23, 24, 35, 42, 52, 54, 62, 157, 169, 190, 200, 201, 213, 214, 216, 228, 237, 239, 245, 262, 272, 275, 277, 280, 289], "raster": [21, 23, 24, 40, 52], "picturemanag": [21, 24], "pictur": [21, 22, 24, 79, 89, 131, 220, 223], "atlas": [21, 24], "decodefnamesuffix": 22, "tiff": [22, 269, 280], "png": [22, 23, 214], "jpg": [22, 23, 214], "svg": [22, 23], "suffix": [22, 66, 106, 153, 159, 169, 177, 189, 220, 230, 235, 239, 260], "aspect": [22, 158, 187, 201, 254, 275, 285], "premultipli": 22, "down": [22, 158, 159, 163, 168, 175, 177, 199, 202, 235, 239, 245, 254, 258, 269], "upsampl": 22, "resampl": 22, "skip": [22, 29, 42, 53, 62, 68, 159, 213, 227, 228, 245, 262, 269, 283, 289], "resolut": [22, 23, 35, 41, 59, 61, 62, 87, 100, 158, 160, 174, 237, 238, 247, 252, 263, 264, 272], "darg": [22, 76, 77, 78, 79, 90, 131, 140, 208], "256": [22, 91, 124, 194, 199, 231, 262], "b64": [22, 23, 96], "base64": [22, 23, 79, 131], "encod": [22, 23, 39, 52], "512": [22, 23], "lib3d": 23, "picmgr": 23, "http": [23, 27, 44, 79, 131, 214, 277], "charact": [23, 153, 155, 158, 161, 169, 190, 195, 214, 216, 226, 228, 230, 234, 239, 250, 277, 281, 287], "pictureatla": 23, "atlaspath": 23, "url": [23, 97, 108, 141, 148], "request": [23, 25, 28, 34, 45, 57, 58, 62, 64, 66, 68, 69, 108, 159, 209, 277, 278], "slash": [23, 213, 250], "endswith": 23, "dxp": [23, 149, 161, 262, 269, 285], "bin": [23, 52, 149, 150, 161, 210, 232, 245, 258, 262, 266, 269, 270, 285, 289], "datablock": [23, 30, 79, 83, 96, 117, 118, 121, 131, 143, 213], "atla": [23, 201], "improv": [23, 157, 158, 159, 185, 200, 201, 209, 222, 239, 243, 262, 272, 275, 289], "ui": [23, 41, 84, 85, 158, 180, 205, 208, 239], "drawprimit": 23, "dynatla": 23, "rttex": 23, "myatla": 23, "maxallowedpicsz": 23, "320": 23, "Will": [23, 29, 39, 61, 87, 100, 213], "attempt": [23, 68, 159, 160, 243, 289], "bigger": [23, 29], "premultiplyalpha": 23, "margin": [23, 159], "picsrcfold": 23, "uiskin": 23, "picreserv": 23, "128": [23, 174, 199, 231, 262], "refhr": 23, "1080": 23, "vertcal": 23, "resoult": 23, "proportion": [23, 200, 201], "scale": [23, 35, 62, 87, 100, 153, 159, 164, 174, 181, 191, 199, 200, 201, 202, 205, 207, 208, 216, 219, 222, 230, 235, 239, 243, 245, 252, 254, 285, 289], "perfect": [23, 197, 201, 216, 259, 272], "icon": [23, 150, 175, 213, 216, 235, 237, 243, 245, 254], "mytex": 23, "tga": [23, 149, 275], "document": [24, 52, 62, 64, 159, 169, 187, 201, 212, 214, 215, 216, 219, 220, 221, 223, 229, 230, 231, 243, 260, 280, 285, 289], "d3d": [25, 27, 28, 29, 30, 31, 32, 33, 35, 36, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 59, 62, 65, 66, 68, 76], "barrier": [25, 26, 39, 57], "driver": [25, 26, 29, 33, 34, 40, 41, 42, 45, 46, 47, 52, 53, 54, 62, 65, 68, 253, 256, 275, 289], "heap": [25, 26, 28, 48, 52, 59, 74], "gpu": [25, 26, 29, 30, 31, 32, 34, 35, 39, 41, 45, 52, 53, 57, 62, 64, 66, 158, 201, 237, 252], "lock": [25, 26, 29, 30, 39, 45, 52, 56, 243, 252], "matric": [25, 26, 149, 159, 169, 230, 243], "perspect": [25, 26, 155, 159, 245], "renderpass": [25, 26, 41, 62], "sampler": [25, 26, 28, 52, 54, 64, 68, 252], "tile": [25, 26, 41, 52, 158, 164, 187, 188, 199, 202, 204, 207, 237, 245, 258, 269], "rate": [25, 26, 52, 59, 62], "scissor": [25, 26, 40, 62], "multidrawcontext": [25, 55], "dabfg": [25, 58, 59, 61, 62, 63, 64, 69, 71, 72, 73, 74, 75, 76], "node": [25, 57, 58, 59, 60, 61, 63, 69, 72, 74, 75, 149, 157, 158, 162, 163, 164, 165, 169, 175, 216, 220, 230, 236, 241, 245, 259, 260, 272, 280, 285, 289], "graph": [25, 57, 59, 69, 158, 208, 229, 272], "bfg": [25, 57, 62, 64], "dabfgcor": [25, 57, 59, 61], "resourceslotcor": [25, 69, 74], "unifi": [26, 254], "hide": [26, 52, 56, 158, 175, 201, 202, 216, 235, 243, 253, 256, 289], "gapi": [26, 52], "resourcebarrierdesc": [27, 53], "resource_barri": [27, 53], "gaijin": [27, 165, 208, 218, 219, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 275, 280, 285, 289], "lan": 27, "displai": [27, 35, 52, 155, 156, 158, 159, 164, 169, 172, 173, 174, 186, 188, 189, 197, 199, 201, 205, 213, 216, 218, 219, 220, 221, 222, 223, 224, 225, 228, 229, 230, 231, 232, 237, 239, 241, 243, 252, 254, 257, 260, 266, 269, 272, 285, 289], "de4": 27, "desc": [27, 34, 35, 53], "sbuffer": [27, 29, 31, 32, 33, 34, 44, 47, 50, 62, 64, 66], "resourcebarri": [27, 30, 39, 52], "rb": 27, "n": [27, 42, 52, 72, 83, 98, 111, 138, 232, 235, 237, 239, 250, 259], "std": [27, 35, 41, 59, 62], "initializer_list": [27, 35, 41, 59, 62], "basetextur": [27, 28, 34, 39, 41, 42, 44, 48, 49, 53, 54, 62, 64, 66, 68], "sub_res_index": 27, "sub_res_rang": 27, "sub": [27, 34, 59, 62, 158, 228, 254], "raytracebottomaccelerationstructur": 27, "bla": 27, "bottom": [27, 29, 153, 159, 161, 174, 200, 202, 205, 214, 216, 223, 239, 289], "acceler": [27, 29, 52], "blase": 27, "b_rb": 27, "b_count": 27, "t_rb": 27, "t_sub_res_index": 27, "t_sub_res_rang": 27, "t_count": 27, "buf_rb": 27, "tex_rb": 27, "rb_flush_uav": [27, 52], "pend": 27, "enumeratebufferbarri": 27, "clb": 27, "callback": [27, 29, 35, 53, 59, 61, 62, 64, 68, 69, 87, 100, 108, 127, 134, 141, 148], "enumeratetexturebarri": 27, "enumerateblasbarri": 27, "bufferst": 27, "texturest": 27, "texturesubresindex": 27, "texturesubresindic": 27, "texturesubresrang": 27, "privat": [27, 34, 56, 62, 98], "union": [27, 34, 43], "anonym": [27, 30, 34, 43, 45, 52, 53, 54, 98, 214], "buffercount": 27, "texturecount": 27, "blascount": 27, "constexpr": [27, 29, 39, 40, 52, 53, 54, 56, 62, 67], "single_element_count": 27, "0u": 27, "namespac": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 59, 61, 62, 72, 74, 77, 82, 84, 85, 87, 88, 90, 94, 95, 96, 97, 100, 101, 102, 103, 105, 107, 108, 110, 111, 115, 117, 118, 119, 120, 123, 127, 130, 135, 136, 137, 140, 143, 145, 146, 213], "uint32_t": [28, 29, 30, 31, 32, 33, 34, 35, 39, 40, 41, 43, 44, 45, 46, 47, 54, 56, 62], "register_bindless_sampl": 28, "portion": [28, 29, 48, 52, 186, 214, 216, 258], "yield": [28, 34, 45, 200, 222, 228], "linear": [28, 45, 87, 100, 164, 186, 187, 192, 197, 205], "address": [28, 29, 42, 45, 149, 158, 159, 163, 165, 201, 205, 214, 216, 222, 232, 243, 269, 285, 289], "anisotrop": [28, 45, 52], "bia": [28, 45, 68], "black": [28, 45, 175, 178, 181, 186, 188, 189, 191, 192, 194, 197, 199, 200, 201, 204, 205, 206, 245, 289], "border": [28, 45, 149], "samplerhandl": [28, 45, 68], "allocate_bindless_resource_rang": 28, "resource_typ": 28, "persist": [28, 29, 68], "res3d_": [28, 29, 34], "resize_bindless_resource_rang": 28, "current_count": 28, "new_count": 28, "resiz": [28, 87, 98, 100, 216], "shrink": [28, 66, 68, 200, 247], "enlarg": 28, "migrat": [28, 59, 232], "behav": [28, 153, 159, 164, 174, 195, 197, 216, 239, 269, 289], "smaller": [28, 59, 159, 172, 186, 191, 200, 201, 219, 222, 258, 262, 269, 272, 289], "free_bindless_resource_rang": 28, "exce": [28, 32, 164, 172, 173, 200, 201, 285, 289], "op": [28, 45, 52], "update_bindless_resourc": 28, "d3dresourc": [28, 29, 54, 59, 66], "restyp": [28, 29, 34, 54, 60], "update_bindless_resources_to_nul": 28, "_ua_": 29, "_sr_": 29, "srv": [29, 67, 164], "_cb": 29, "_one_frame_": 29, "cb": [29, 53], "_persistent_": 29, "counter": [29, 66, 67], "until": [29, 34, 47, 53, 64, 66, 68, 155, 159, 161, 164, 175, 196, 197, 201, 235, 239, 262, 289], "_byte_address": 29, "ua": 29, "sr": 29, "_structur": 29, "_readback": 29, "back": [29, 52, 62, 75, 158, 172, 190, 200, 216, 222, 231, 235, 239, 289], "_indirect": 29, "indirect": [29, 31, 33, 52, 56, 59, 65, 67, 208, 280], "_stage": 29, "resourcecheck": 29, "deriv": [29, 52, 185, 205, 216, 229, 269, 280], "unlock": [29, 54], "setreloadcallback": [29, 54], "ireloaddata": [29, 54], "reload": [29, 52, 58, 68, 74, 149, 158, 159, 213, 239, 253, 256, 285], "successfulli": [29, 35, 37, 38, 41, 46, 47, 50, 51, 54, 68, 159, 269], "res3d_sbuf": 29, "todo": [29, 35, 47, 50, 52, 54, 82], "ofs_byt": 29, "size_byt": [29, 50], "lock_sbuff": 29, "safeti": [29, 289], "begin": [29, 39, 62, 108, 127, 159, 169, 172, 197, 200, 201, 202, 213, 214, 222, 225, 229, 231, 232, 289], "succeed": 29, "getflag": 29, "char": [29, 30, 34, 35, 36, 39, 42, 50, 53, 54, 56, 59, 62, 66, 68, 72, 83, 85, 91, 98, 124, 126, 144, 201], "getbufnam": 29, "getelements": 29, "getnumel": 29, "copyto": 29, "dest": 29, "exactli": [29, 62, 159, 164, 190, 201, 203, 216, 243, 245, 269, 285], "dst_ofs_byt": 29, "src_ofs_byt": 29, "enough": [29, 155, 159, 189, 222, 237, 272], "lockex": 29, "vblock_": 29, "updatedatawithlock": 29, "src": [29, 40, 54, 280], "lockflag": 29, "memcpi": 29, "updatedata": 29, "uint16_t": [29, 33, 54], "lock32": 29, "32": [29, 44, 54, 177, 199, 207, 250, 262], "protect": [29, 36, 54, 169, 269, 270, 289], "restor": [29, 231, 235, 247, 289], "devic": [29, 30, 34, 35, 38, 49, 52, 53, 59, 87, 100, 143, 158, 237, 252, 275], "reset": [29, 30, 35, 36, 38, 39, 49, 52, 53, 59, 63, 67, 68, 70, 71, 159, 186, 216, 220, 237, 253, 256, 289], "reloadd3dr": [29, 54], "sb": [29, 91, 124], "destroyself": [29, 54], "destroi": [29, 34, 54, 59, 63, 66, 68, 98, 155, 159, 169, 173, 289], "create_sbuff": [29, 62], "struct_siz": 29, "texfmt": 29, "uber": 29, "tbuffer": 29, "set_buff": 29, "stage_": 29, "set_rwbuff": 29, "init": [29, 53, 68, 98, 235, 237, 239], "Not": [29, 47, 48, 52, 83, 143, 159, 188, 192, 201, 206, 235, 239, 285], "guarante": [29, 47, 52, 53, 159, 174], "drawindex": 29, "cb_array_reg_count": 29, "array_s": 29, "align": [29, 34, 42, 52, 83, 153, 158, 159, 164, 169, 174, 175, 200, 201, 214, 216, 222, 252, 254, 259, 272, 285, 289], "cb_struct_reg_count": 29, "create_persistent_cb": [29, 47], "registers_count": 29, "show": [29, 157, 159, 169, 172, 174, 175, 181, 189, 200, 201, 202, 205, 213, 216, 219, 220, 222, 228, 230, 231, 235, 239, 245, 253, 254, 256, 258, 262, 266, 285], "statistc": 29, "debugg": 29, "pix": 29, "create_one_frame_cb": [29, 47], "buffer_init": 29, "create_ua_sr_byte_address": 29, "size_in_dword": 29, "thorugh": 29, "unord": [29, 34, 53], "create_ua_sr_structur": 29, "structure_s": 29, "elements_count": 29, "structuretyp": 29, "sizeof": [29, 47, 52], "create_ua_byte_address": 29, "rwbyteaddressbuff": 29, "create_ua_structur": 29, "create_ua_byte_address_readback": 29, "create_ua_structured_readback": 29, "dword_count_per_cal": 29, "indirect_typ": 29, "create_ua_indirect": [29, 31], "records_count": 29, "create_indirect": [29, 31], "create_stag": 29, "size_in_byt": 29, "create_persistent_sr_tbuf": 29, "bufferformat": 29, "vblock_writeonli": [29, 52], "overwritten": [29, 221, 262], "dx10": [29, 62], "create_persistent_sr_byte_address": 29, "create_persistent_sr_structur": 29, "create_one_frame_sr_tbuf": 29, "vblock_discard": [29, 52], "vblock_nooverwrit": [29, 52], "next": [29, 39, 49, 53, 56, 62, 66, 68, 159, 161, 169, 175, 197, 201, 213, 230, 232, 235, 239, 247, 250, 260, 269, 285, 289], "invalid": [29, 34, 39, 40, 48, 49, 52, 59, 60, 63, 66, 67, 68, 230, 239, 247, 253, 256, 262, 285], "again": [29, 159, 168, 169, 175, 201, 213, 222, 228, 235, 243, 285], "create_one_frame_sr_byte_address": 29, "create_one_frame_sr_structur": 29, "create_raytrace_scratch_buff": 29, "scratch": [29, 52, 169, 289], "space": [29, 52, 59, 62, 153, 157, 158, 159, 164, 174, 190, 201, 214, 231, 239, 258, 259, 262, 277, 289], "bottomaccelerationstructurebuildinfo": 29, "scratchspacebuff": 29, "build_bottom_acceleration_structur": 29, "meant": [29, 206], "anywai": [29, 245], "create_raytrace_bottom_acceleration_structur": 29, "failur": [29, 188, 280, 285, 289], "cbuffer_register_s": 29, "divis": [29, 188], "byte_address_element_s": 29, "drv3dcommand": 30, "getvisibilitybegin": 30, "getvisibilityend": 30, "getvisibilitycount": 30, "release_queri": 30, "acquire_ownership": 30, "acquir": [30, 36, 41, 47, 62, 63, 64, 66, 67, 68], "release_ownership": 30, "acquire_load": 30, "mutex": 30, "nonexclus": 30, "release_load": 30, "get_gpu_frame_tim": 30, "get_vsync_refresh_r": 30, "set_pipeline_compilation_time_budget": 30, "get_pipeline_compilation_queue_length": 30, "async_pipeline_compilation_feedback_begin": 30, "async_pipeline_compilation_feedback_end": 30, "timestampfreq": 30, "timestampissu": 30, "timestampget": 30, "timeclockcalibr": 30, "nearli": [30, 159, 174, 188, 191, 201, 205, 289], "moment": [30, 262], "flush_stat": 30, "d3d_flush": 30, "compile_pipelin": 30, "flush": [30, 38, 41], "get_secondary_backbuff": 30, "get_vendor": 30, "override_max_anisotropy_level": 30, "make_textur": 30, "get_texture_handl": 30, "begin_external_access": 30, "end_external_access": 30, "set_vs_debug_info": 30, "set_ps_debug_info": 30, "begin_mrt_clear_sequ": 30, "end_mrt_clear_sequ": 30, "get_shader_cache_uuid": 30, "aftermath_mark": 30, "start_capture_fram": 30, "is_hdr_avail": [30, 84], "is_hdr_en": [30, 84], "int10_hdr_buff": 30, "hdr_output_mod": 30, "get_lumin": 30, "mem_stat": 30, "register_shader_dump": 30, "get_shad": 30, "pix_gpu_begin_captur": 30, "pix_gpu_end_captur": 30, "pix_gpu_capture_next_fram": 30, "pix_gpu_capture_after_long_fram": 30, "get_framerate_limiting_factor": 30, "load_pipeline_cach": 30, "save_pipeline_cach": 30, "get_dlss": 30, "get_reflex": 30, "get_xess_st": [30, 84], "is_xess_quality_available_at_resolut": [30, 84], "get_xess_resolut": 30, "get_xess_vers": 30, "execute_dlss": 30, "execute_dlss_g": 30, "execute_xess": 30, "set_xess_velocity_scal": 30, "execute_fsr": 30, "execute_fsr2": 30, "get_fsr2_stat": 30, "get_fsr2_resolut": 30, "execute_pssr": 30, "get_metalfx_upscale_st": 30, "execute_metalfx_upscal": 30, "get_tim": 30, "get_raytrace_acceleration_structures_memory_usag": 30, "debug_messag": 30, "get_monitor": 30, "get_monitor_info": [30, 84], "get_resolutions_from_monitor": 30, "get_video_memory_budget": 30, "kibyt": 30, "par1": 30, "possibli": [30, 59, 62, 181, 199], "physic": [30, 62, 64, 153, 158, 190, 199, 204, 208, 245, 275, 286], "par2": 30, "minu": [30, 159], "par3": 30, "get_rendering_command_queu": 30, "get_inst": [30, 126], "get_physical_devic": 30, "get_queue_family_index": 30, "get_queue_index": 30, "process_app_inactive_upd": 30, "pre_rotate_pass": 30, "register_frame_completion_ev": 30, "register_one_time_frame_execution_event_callback": 30, "report_resource_state_transit": 30, "register_device_reset_event_handl": 30, "unregister_device_reset_event_handl": 30, "prepare_textures_for_vr_consumpt": 30, "set_app_info": 30, "send_gpu_crash_dump": 30, "process_pending_resource_upd": 30, "get_ps5_pssr_statu": 30, "set_freq_level": 30, "enable_immediate_flush": 30, "disable_immediate_flush": 30, "get_worker_cpu_cor": 30, "set_ps5_fsr_view": 30, "set_hdr": 30, "debug_break": 30, "add_debug_break_string_search": 30, "remove_debug_break_string_search": 30, "is_defrag_request": 30, "process_pending_defrag_request": 30, "compile_pipeline_set": 30, "get_buffer_gpu_address": 30, "enable_worker_low_latency_mod": 30, "logerr_on_sync": 30, "set_driver_netword_manag": 30, "get_console_hfr_statu": 30, "get_console_hfr_support": 30, "get_resource_statist": 30, "delay_sync": 30, "continue_sync": 30, "change_queu": 30, "drv3d_cpu_freq_type_qpc": 30, "drv3d_cpu_freq_type_ref": 30, "drv3d_cpu_freq_nsec": 30, "drv3d_cpu_freq_type_profil": 30, "drv3d_cpu_freq_type_unknown": 30, "frameev": 30, "beginframeev": 30, "endframeev": 30, "devicereseteventhandl": 30, "prerecoveri": 30, "recoveri": [30, 52, 158, 239, 289], "drv3dtime": 30, "long": [30, 52, 57, 159, 163, 164, 169, 214, 239], "frontendupdatescreeninterv": 30, "frontendtobackendupdatescreenlat": 30, "frontendbackendwaitdur": 30, "backendfrontendwaitdur": 30, "gpuwaitdur": 30, "presentdur": 30, "backbufferacquiredur": 30, "frontendwaitforswapchaindur": 30, "compilepipelineset": 30, "defaultformat": 30, "v1": [30, 47], "v2": [30, 47], "featureset": 30, "inputlayoutset": 30, "renderstateset": 30, "incompat": 30, "outputformatset": 30, "wit": [30, 108], "graphicspipelineset": 30, "unsupport": [30, 52, 53, 230, 232, 237], "meshpipelineset": 30, "computepipelineset": 30, "signatur": [30, 59], "computeset": 30, "graphicsset": 30, "graphicsnullpixeloverrideset": 30, "pair": [30, 66, 68, 172, 174, 204, 285], "graphicspixeloverrideset": 30, "differen": 30, "drv3dmaketextureparam": 30, "flg": [30, 54], "layer": [30, 34, 41, 54, 60, 61, 62, 149, 157, 158, 159, 164, 165, 169, 185, 188, 189, 190, 191, 197, 198, 202, 204, 205, 216, 225, 229, 230, 237, 259, 285], "currentst": 30, "driver_command": 30, "thread_group_x": [31, 32], "thread_group_i": [31, 32], "thread_group_z": [31, 32], "gpupipelin": [31, 34, 52, 53], "gpu_pipelin": [31, 34, 53], "dimens": [31, 32, 34, 35, 54, 62, 66, 153, 155, 159], "success": [31, 33, 40, 41, 42, 44, 53, 54, 68, 108, 150, 159, 190, 237, 258, 285, 289], "dispatch_indirect": 31, "arg": [31, 32, 33, 58, 75, 98, 128], "byte_offset": [31, 32, 33], "indirectli": [31, 32, 62, 67], "dispatch_mesh": 32, "64k": 32, "product": [32, 62, 106, 174, 268, 269, 280], "dispatch_mesh_indirect": 32, "dispatch_count": 32, "stride_byt": [32, 33, 50, 53, 54], "dispatcharg": 32, "stride": [32, 33, 46, 50], "dispatch_mesh_indirect_count": 32, "args_stride_byt": 32, "args_byte_offset": 32, "count_byte_offset": 32, "max_count": 32, "count_offset": 32, "draw_bas": 33, "numprim": 33, "num_inst": 33, "start_inst": 33, "primit": [33, 46, 49, 52, 56, 155, 247], "prim_xxx": 33, "draw_instanc": 33, "drawind_bas": 33, "startind": 33, "base_vertex": 33, "drawind_instanc": 33, "drawind": 33, "draw_up": 33, "ptr": 33, "uncontrol": [33, 159], "drawind_up": 33, "minvert": 33, "numvert": 33, "ind": 33, "draw_indirect": 33, "drawindirectarg": 33, "draw_indexed_indirect": 33, "drawindexedindirectarg": 33, "multi_draw_indirect": 33, "prim_typ": 33, "draw_count": 33, "multi_draw_indexed_indirect": 33, "placement": [34, 153, 162, 164, 169, 173, 208, 228, 230, 235, 254, 269, 289], "alias": [34, 39, 52, 57, 59, 62, 67, 158, 174, 213], "aliv": [34, 201], "activate_": 34, "dead": 34, "inact": 34, "deactivate_": 34, "resourcedescript": 34, "alig": 34, "get_resource_allocation_properti": 34, "fit": [34, 66, 68, 153, 157, 159, 164, 172, 201, 221, 231, 239, 280], "create_resource_heap": 34, "place_": 34, "_in_resource_heap": 34, "resourceheapgroup": 34, "resourceheapgroupproperti": 34, "resourceallocationproperti": 34, "sizeinbyt": 34, "resourceheap": [34, 48], "heap_group": 34, "size_t": [34, 42, 48, 52, 85], "resourceheapcreateflag": 34, "destroy_resource_heap": 34, "place_buffer_in_resource_heap": 34, "alloc_info": 34, "place_texture_in_resource_heap": 34, "get_resource_heap_group_properti": 34, "substitut": [34, 159, 161, 164, 169, 214, 225, 280, 289], "activate_buff": 34, "resourceactivationact": [34, 60], "resourceclearvalu": [34, 39, 41, 43, 62], "clear": [34, 39, 41, 42, 43, 44, 52, 62, 87, 91, 98, 100, 108, 120, 123, 124, 127, 155, 159, 177, 189, 197, 201, 209, 222, 223, 235, 239, 245, 253, 256, 259, 289], "safe": [34, 45, 52, 53, 59, 63, 68, 262, 285], "activate_textur": 34, "deactivate_buff": 34, "deactiv": 34, "correct": [34, 149, 150, 157, 158, 159, 164, 168, 169, 175, 185, 186, 189, 200, 201, 204, 205, 216, 219, 224, 230, 235, 237, 239, 245, 254, 268, 272, 285, 289], "deactivate_textur": 34, "field_match": 34, "typedef": [34, 37, 38, 40, 41, 50, 52, 53, 54, 60, 61, 67, 91, 124], "definit": [34, 159, 185, 213, 214, 259], "rewrite_as_copy_destin": [34, 60], "rewrit": [34, 213], "rewrite_as_uav": [34, 60], "rewrite_as_rtv_dsv": [34, 60], "clear_f_as_uav": [34, 60], "clear_i_as_uav": [34, 60], "clear_as_rtv_dsv": [34, 60], "discard_as_uav": [34, 60], "discard_as_rtv_dsv": [34, 60], "steer": [34, 231], "rhcf_none": 34, "reserv": [34, 73, 174, 228, 280], "intern": [34, 53, 57, 60, 62, 66, 68, 157, 159, 161, 201, 204, 213, 214, 235, 239, 265, 272, 275, 285], "excess": [34, 155, 159, 164, 172, 173, 185, 222, 266, 289], "rhcf_requires_dedicated_heap": 34, "dedic": [34, 35, 149, 158, 159, 201, 214, 245, 260, 268, 270, 275, 285, 289], "suppli": [34, 39, 52], "underli": [34, 62, 67, 177, 180, 189, 201], "realli": [34, 50, 74, 245, 285], "increas": [34, 39, 172, 181, 185, 186, 189, 190, 192, 199, 200, 201, 204, 205, 216, 222, 228, 235, 237, 247, 258, 272, 275, 285, 289], "pressur": [34, 289], "gdk": [34, 52], "satisfi": [34, 155, 209], "basicresourcedescript": 34, "subclass": [34, 40, 52, 62], "basictextureresourcedescript": 34, "bufferresourcedescript": [34, 60], "cflag": [34, 60], "clearvalu": [34, 39], "elementsizeinbyt": [34, 60], "elementcount": [34, 60, 61, 62], "viewformat": [34, 60], "cubetextureresourcedescript": [34, 60], "textureresourcedescript": [34, 60], "miplevel": [34, 42, 54, 60, 61, 62], "arraytextureresourcedescript": [34, 60], "voltextureresourcedescript": [34, 60], "volum": [34, 41, 45, 54, 141, 148, 247, 269], "arraylay": 34, "arraycubetextureresourcedescript": [34, 60], "extent": [34, 59, 62, 252], "hasht": 34, "asbasicr": 34, "asbufferr": 34, "asbasictexr": 34, "astexr": 34, "asvoltexr": 34, "asarraytexr": 34, "ascubetexr": 34, "asarraycubetexr": 34, "hashpack": 34, "older": [34, 52, 67, 191, 269, 289], "nvidia": [34, 35, 52], "put": [34, 159, 161, 169, 262], "region": [34, 52, 239], "expos": [34, 59, 62], "resid": [34, 201, 285], "iscpuvis": 34, "isgpuloc": 34, "bu": 34, "pcie": 34, "isonchip": 34, "chip": [34, 52, 188], "esram": 34, "xb1": [34, 47], "uint64_t": [34, 35, 54], "maxresources": 34, "maxheaps": 34, "individu": [34, 159, 172, 173, 174, 190, 197, 205, 216, 235, 239, 245, 254, 261, 264, 269, 275, 285, 289], "instal": [34, 68, 210, 213, 216, 226, 234, 237, 240, 241, 271, 277, 289], "impos": [34, 229], "optimalmaxheaps": 34, "aim": [34, 64, 158, 159, 185, 254, 289], "64": [34, 52, 199, 201, 262], "mibyt": 34, "suggest": [34, 164, 174, 201, 204, 216, 230, 235, 237, 254], "offsetalign": 34, "heapgroup": 34, "containst": 35, "apisupport": 35, "full_support": 35, "outdated_driv": 35, "blacklisted_driv": 35, "blacklist": 35, "bug": [35, 52, 159, 168, 201, 230, 239, 243, 245, 278], "no_device_found": 35, "driver3dinitcallback": [35, 53], "needstereorenderfunc": 35, "stereo": [35, 52], "stereorenderdimensionfunc": 35, "stereorenderextensionsfunc": 35, "stereorenderversionsfunc": 35, "versionrang": 35, "stereorenderadapterfunc": 35, "int64_t": 35, "verifyresolutionset": 35, "ref_scr_wdt": 35, "ref_scr_hgt": 35, "base_scr_wdt": 35, "base_scr_hgt": 35, "window_mod": 35, "verifi": [35, 156, 159, 168, 175, 185, 186, 209, 218, 219, 221, 222, 224, 225, 228, 229, 230, 231, 252, 254, 269, 285, 289], "validatedesc": 35, "driver3ddesc": [35, 52], "fucntion": 35, "anywher": [35, 59, 64, 259], "comparedesc": 35, "desiredstereorend": 35, "desiredadapt": 35, "renders": 35, "desiredrenderers": 35, "desiredrendererdeviceextens": 35, "desiredrendererinstanceextens": 35, "desiredrendererversionrang": 35, "minvers": 35, "maxvers": 35, "guess_gpu_vendor": 35, "out_gpu_desc": 35, "out_drv_ver": 35, "dagordatetim": 35, "out_drv_dat": 35, "device_id": 35, "guess": 35, "vendor": 35, "date": [35, 119, 218, 219, 221, 222, 224, 225, 228, 229, 230, 231, 235], "d3d_vendor_": 35, "get_gpu_driver_d": 35, "get_dedicated_gpu_memory_size_kb": 35, "kb": [35, 216], "get_free_dedicated_gpu_memory_size_kb": 35, "get_current_gpu_memory_kb": 35, "dedicated_tot": 35, "dedicated_fre": 35, "get_gpu_freq": 35, "out_freq": 35, "frequenc": [35, 164, 169, 186, 187, 201], "get_gpu_temperatur": 35, "temperatur": 35, "get_video_vendor_str": 35, "out_str": 35, "get_display_scal": 35, "disable_sli": 35, "sli": 35, "profil": [35, 79, 131, 158, 164, 172, 174, 253, 256], "anymor": 35, "get_driver_nam": 35, "drivercod": 35, "get_driver_cod": 35, "is_stub_driv": 35, "get_device_driver_vers": 35, "get_device_nam": 35, "get_last_error": 35, "last": [35, 37, 62, 66, 68, 158, 159, 164, 165, 169, 174, 191, 194, 200, 201, 205, 214, 229, 230, 237, 245, 252], "get_last_error_cod": 35, "get_devic": 35, "get_context": 35, "get_driver_desc": 35, "is_in_device_reset_now": 35, "is_window_occlud": 35, "complet": [35, 39, 52, 53, 59, 159, 175, 185, 200, 201, 204, 205, 209, 214, 216, 218, 220, 223, 225, 229, 230, 231, 237, 239, 266, 269, 272, 277, 285, 289], "occlud": [35, 152, 158, 167, 239], "should_use_compute_for_image_process": 35, "gpuautolock": 36, "critic": [36, 149, 153, 192, 228, 235, 254, 275, 285, 289], "loadingautolock": 36, "gpuworkloadsplit": 36, "scope": [36, 213, 245, 285], "workload": 36, "split": [36, 39, 41, 52, 66, 68, 82, 159, 175, 200, 216, 231, 258, 259, 269, 289], "do_split": 36, "split_at_end": 36, "marker": [36, 214, 285], "needsplitatend": 36, "depric": 37, "shouldn": [37, 159, 189], "setter": [37, 68], "matrix44": 37, "tmatrix4": 37, "settm": [37, 95], "tm": [37, 111, 159, 169, 230, 243], "tm_xxx": 37, "mat44f": 37, "gettm": [37, 95], "out_tm": 37, "gettm_cref": 37, "getm2vtm": 37, "out_m2v": 37, "getglobtm": 37, "setglobtm": 37, "custom": [37, 68, 150, 158, 163, 164, 166, 169, 185, 200, 201, 208, 216, 221, 226, 227, 228, 229, 230, 234, 235, 237, 239, 247, 262, 271, 275, 285], "setpersp": 37, "driver3dperspect": 37, "proj_tm": 37, "getpersp": 37, "validatepersp": 37, "calcproj": 37, "calcglobtm": 37, "view_tm": 37, "persp": 37, "d3deventqueri": 38, "eventqueri": 38, "create_event_queri": 38, "release_event_queri": 38, "issue_event_queri": 38, "issu": [38, 52, 155, 157, 159, 168, 169, 174, 188, 189, 194, 199, 201, 209, 216, 222, 224, 225, 228, 230, 232, 235, 239, 245, 260, 266, 269, 270, 272, 285, 289], "get_event_query_statu": 38, "force_flush": 38, "statu": [38, 108, 253, 256], "signal": [38, 52], "bad": [38, 66, 68, 159, 272], "testdrv3d": 39, "render_pass_test": 39, "create_render_pass": 39, "renderpassdesc": 39, "rp_desc": 39, "ahead": 39, "sync": [39, 87, 100, 106, 169], "realtim": 39, "sensit": [39, 222, 239], "bindcount": 39, "delete_render_pass": 39, "rp": 39, "delet": [39, 46, 50, 56, 157, 159, 175, 177, 216, 222, 225, 227, 235, 237, 239, 243, 247, 260, 262], "becom": [39, 52, 66, 68, 159, 181, 188, 190, 191, 199, 201, 204, 205, 220, 235, 239, 243, 245, 247, 269, 285], "right": [39, 62, 83, 158, 159, 168, 174, 175, 200, 204, 218, 227, 237, 243, 245, 254, 272, 280, 285], "begin_render_pass": 39, "renderpassarea": 39, "renderpasstarget": 39, "subpass": [39, 52], "prohibit": [39, 62, 269], "ub": [39, 52], "backbuff": [39, 41, 57], "next_subpass": 39, "end_render_pass": 39, "allow_render_pass_target_load": 39, "tell": [39, 159, 262, 270], "attach": [39, 41, 52, 61, 62, 67, 149, 158, 159, 163, 186, 216, 285, 289], "top": [39, 51, 57, 65, 153, 155, 159, 161, 169, 174, 175, 189, 197, 200, 202, 205, 214, 235, 237, 245, 258, 259, 275, 289], "tbdr": [39, 52], "redrawn": 39, "postfx": [39, 158, 245], "clearview": [39, 41, 52], "clear_discard": [39, 52], "renderpassbind": 39, "int32_t": [39, 43], "renderpasstargetact": [39, 52], "dependencybarri": [39, 52], "emul": [39, 52], "renderpasstargetdesc": 39, "earli": [39, 157, 201], "give": [39, 70, 150, 159, 200, 201, 204, 239, 252, 283], "templateresourc": 39, "texcf": 39, "rendertarget": [39, 41], "subresourc": [39, 48], "debugnam": 39, "develop": [39, 150, 158, 159, 160, 161, 169, 172, 173, 174, 175, 191, 200, 201, 205, 208, 209, 218, 219, 220, 222, 223, 228, 229, 230, 231, 232, 235, 239, 243, 245, 250, 252, 254, 258, 262, 266, 268, 269, 272, 274, 277, 279, 280, 284, 285, 289], "targetcount": 39, "targetsdesc": 39, "subpassbindingoffset": [39, 52], "properli": [39, 52, 155, 159, 169, 174, 190, 197, 205, 237, 239, 272, 285, 289], "left": [39, 51, 52, 158, 159, 174, 200, 204, 214, 225, 237, 239, 243, 245, 262, 272], "minz": [39, 51], "maxz": [39, 51], "bitfield": [39, 52], "rp_ta_non": [39, 52], "overal": [39, 52, 159, 164, 169, 188, 189, 219, 239, 275], "rp_ta_load_read": [39, 52], "framebuff": [39, 41, 52], "rp_ta_load_clear": [39, 52], "rp_ta_load_no_car": [39, 52], "underfin": [39, 52], "rp_ta_load_mask": [39, 52], "rp_ta_subpass_read": [39, 52], "subpassinput": [39, 52], "subpassload": [39, 52], "rp_ta_subpass_resolv": [39, 52], "rp_ta_subpass_writ": [39, 52], "rp_ta_subpass_keep": [39, 52], "intact": [39, 52, 157, 159, 188, 289], "rp_ta_subpass_mask": [39, 52], "rp_ta_store_writ": [39, 52], "rp_ta_store_non": [39, 52], "rp_ta_store_no_car": [39, 52], "rp_ta_store_mask": [39, 52], "renderpassextraindex": [39, 52], "rp_index_norm": [39, 52], "rp_subpass_external_end": [39, 52], "pseudo": [39, 52], "rp_slot_depth_stencil": [39, 52], "l": [39, 52, 87, 100, 158, 235], "driverrenderstateid": 40, "generationrefid": 40, "driverrenderstateiddummi": 40, "renderstateid": 40, "renderstatebit": 40, "renderst": 40, "zwrite": 40, "ztest": 40, "zfunc": 40, "relationship": [40, 169, 172, 235, 285], "cmpf": [40, 52], "stencilref": 40, "against": [40, 66, 235, 280], "face": [40, 41, 42, 44, 54, 158, 175, 200, 226, 234, 235, 239, 245, 247, 252, 289], "cull_typ": [40, 52], "depthboundsen": 40, "forcedsamplecount": 40, "cap": [40, 49, 52, 165, 285], "hasforcedsamplercount": [40, 52], "dx": [40, 52], "conservativerast": 40, "conserv": [40, 52, 165, 285], "hasconservativerasster": [40, 52], "topologi": [40, 237], "zclip": 40, "clip": [40, 158, 159, 289], "scissoren": 40, "rectangl": [40, 51, 54, 157, 200, 245], "independentblenden": 40, "alphatocoverag": 40, "viewinstancecount": 40, "colorwr": 40, "0xffffffff": 40, "zbia": 40, "slopezbia": 40, "slope": [40, 155, 159], "stencilst": 40, "param": [40, 41, 66, 68, 98, 106, 116, 123, 158, 213], "blendparam": 40, "numindependentblendparamet": 40, "blendfactor": 40, "dst": [40, 54], "ablendfactor": 40, "sepablendfactor": 40, "blendop": [40, 52], "sepablendop": 40, "ablend": 40, "sepablend": 40, "set_blend_factor": 40, "e3dcolor": [40, 41, 45, 54, 79, 131, 250], "setstencil": 40, "ref": [40, 64, 66, 68, 253, 256], "setwir": 40, "wirefram": [40, 59, 62, 157, 164, 253, 256], "set_depth_bound": [40, 52], "zmin": 40, "zmax": 40, "create_render_st": 40, "set_render_st": 40, "state_id": 40, "clear_render_st": 40, "depthaccess": 41, "sampledro": 41, "IF": [41, 280], "TO": [41, 280], "THE": [41, 280], "WITH": 41, "hiz": 41, "decompress": [41, 62, 269, 270], "tbr": 41, "copy_from_current_render_target": 41, "to_tex": 41, "clear_rt": 41, "clear_val": 41, "accord": [41, 159, 161, 169, 173, 177, 185, 188, 192, 196, 200, 201, 205, 225, 262, 285], "set_render_target": 41, "set_depth": 41, "NO": [41, 280], "rt_index": 41, "fc": 41, "depth_access": 41, "dag": [41, 51, 68, 77, 149, 153, 159, 161, 163, 165, 169, 177, 180, 184, 189, 192, 201, 205, 207, 216, 219, 220, 225, 235, 239, 245, 247, 250, 254, 261, 262, 264, 280, 285, 289], "constspan": [41, 51, 68, 77], "driver3drendertarget": 41, "max_simrt": 41, "render_to_whole_arrai": [41, 53], "geom": [41, 259], "get_render_target": 41, "out_rt": 41, "obtain": [41, 46, 159, 161], "get_target_s": 41, "wrong": [41, 150, 237, 239], "get_render_target_s": 41, "rt_tex": [41, 61], "explain": [41, 159, 168, 174, 194, 205, 230, 235], "clear_": 41, "get_screen_s": 41, "get_backbuffer_tex": 41, "get_secondary_backbuffer_tex": 41, "secondari": [41, 178, 262], "mostli": [41, 201, 213, 289], "higher": [41, 62, 69, 72, 159, 161, 164, 172, 181, 188, 196, 197, 200, 201, 205, 222, 228, 247, 259, 285, 289], "rub": 42, "modern": [42, 50, 149, 201, 208], "resupdatebuff": 42, "allocate_update_buffer_for_tex_region": 42, "dest_base_textur": 42, "dest_mip": 42, "dest_slic": 42, "offset_x": [42, 159, 164, 230], "offset_i": [42, 159, 164, 230, 235], "offset_z": [42, 159, 164, 230], "subregion": 42, "mipmap": [42, 45, 52, 54, 149, 158, 262, 269, 275], "vol": [42, 52], "plu": 42, "unabl": [42, 72, 159], "allocate_update_buffer_for_tex": 42, "dest_tex": 42, "apply_tex_update_buff": 42, "caller": [42, 68], "retri": 42, "release_update_buff": 42, "afterward": [42, 159, 161, 175], "get_update_buffer_addr_for_writ": 42, "get_update_buffer_s": 42, "get_update_buffer_pitch": 42, "pitch": [42, 158], "applic": [42, 52, 57, 62, 68, 78, 149, 159, 161, 162, 167, 168, 175, 177, 179, 194, 197, 214, 231, 239, 245, 252, 262, 268, 269, 285, 289], "get_update_buffer_slice_pitch": 42, "update_texture_and_release_update_buff": 42, "src_rub": 42, "d3dre": 42, "make_clear_valu": 43, "red": [43, 157, 159, 169, 174, 175, 185, 187, 192, 195, 197, 204, 225, 231, 239, 254, 258, 262, 285, 289], "green": [43, 185, 187, 192, 195, 197, 216, 219, 220, 231, 239, 258, 285, 289], "blue": [43, 187, 192, 194, 197, 199, 205, 216, 219, 222, 230, 231, 289], "asuint": 43, "asint": 43, "asfloat": 43, "asdepth": 43, "asstencil": 43, "set_rwtex": 44, "as_uint": 44, "resoruc": 44, "cubemap": [44, 158, 245], "msdn": 44, "microsoft": 44, "com": [44, 214, 277], "en": 44, "desktop": 44, "ff728749": 44, "85": [44, 159], "aspx": 44, "clear_rwtexi": 44, "val": [44, 145, 213], "clear_rwtexf": 44, "clear_rwbufi": 44, "clear_rwbuff": 44, "equ": 45, "cmp": [45, 226, 234, 236, 241], "for_each_field": 45, "sep": 45, "mipmapmod": [45, 54], "texmipmap_default": 45, "texmipmap_non": 45, "texmipmap_point": 45, "texmipmap_linear": 45, "filtermod": [45, 54], "comparas": 45, "pcf": 45, "addressmod": 45, "repeat": [45, 62, 91, 124, 169, 175, 187, 201, 214, 245, 269, 285], "mirror": [45, 245, 254, 289], "mirroronc": 45, "absolut": [45, 159, 172, 200, 201, 269], "symmetr": [45, 174], "axi": [45, 158, 159, 169, 174, 186, 197, 207, 216, 230, 231, 235, 245, 247], "request_sampl": 45, "samplerinfo": [45, 68], "sampler_info": [45, 68], "set_sampl": 45, "held": [45, 59], "stage_xxx": [45, 54], "bordercolor": [45, 87, 100], "underlyingt": 45, "transparentblack": 45, "opaqueblack": 45, "opaquewhit": 45, "white": [45, 157, 169, 172, 175, 178, 181, 185, 186, 188, 191, 192, 194, 197, 201, 204, 205, 206, 245], "rh": [45, 67], "mip_map_mod": 45, "filter_mod": 45, "address_mode_u": 45, "address_mode_v": 45, "address_mode_w": 45, "border_color": 45, "anisotropic_max": 45, "mip_map_bia": 45, "create_program": 46, "vprog": [46, 52], "fshader": [46, 52], "fsh": 46, "vdecl": [46, 50, 52], "delete_program": 46, "vpr_nativ": 46, "fsh_nativ": 46, "create_program_c": 46, "cs_nativ": 46, "cspreload": [46, 52], "preload": 46, "set_program": 46, "create_vertex_shad": 46, "native_cod": 46, "delete_vertex_shad": 46, "create_pixel_shad": 46, "delete_pixel_shad": 46, "get_debug_program": 46, "bytecod": 46, "stuff": [46, 62, 64, 262], "set_const": [47, 138], "reg_bas": 47, "num_reg": 47, "stage_v": [47, 52], "stage_p": [47, 52], "stage_c": [47, 52], "set_vs_const": 47, "set_ps_const": 47, "set_cs_const": 47, "set_vs_const1": 47, "reg": [47, 61, 74], "v0": 47, "v3": 47, "third": [47, 159, 168, 181, 187, 188, 195, 199, 200, 201, 204, 208, 214, 216, 235, 250, 262], "fourth": [47, 178, 181, 185, 188, 199, 200, 201, 204, 214, 237, 250], "set_ps_const1": 47, "set_immediate_const": 47, "num_word": 47, "cheap": 47, "littl": [47, 67, 200, 205], "ideal": [47, 172, 190, 202, 235, 269, 272], "ssetshaderuserdata": 47, "vk": 47, "descriptor": [47, 66, 158], "push": [47, 159, 200, 205, 278, 289], "benign": 47, "stop": [47, 114, 158, 188, 205, 213, 269, 285], "probabl": [47, 159, 164, 213], "word": [47, 205, 214, 250], "set_const_buff": [47, 52], "unbind": [47, 127], "consts_offset": [47, 52], "consts_siz": 47, "set_vs_constbuffer_s": 47, "required_s": 47, "set_cs_constbuffer_s": 47, "set_cb0_data": 47, "fastest": [47, 159, 168], "release_cb0_data": 47, "tilemap": 48, "texx": 48, "texi": 48, "texz": 48, "texsubresourc": 48, "heaptileindex": 48, "heaptilespan": 48, "pack": [48, 150, 158, 161, 177, 201, 216, 239, 245, 252, 262, 267, 289], "tail": 48, "texturetilinginfo": 48, "numunpackedmip": 48, "span": [48, 59, 62, 68, 153, 214], "numtilesneededforpackedmip": 48, "numpackedmip": 48, "totalnumberoftil": 48, "unpack": [48, 269, 270, 285], "firstpackedtileindex": 48, "tilewidthinpixel": 48, "tileheightinpixel": 48, "tiledepthinpixel": 48, "tilememorys": 48, "subresourcewidthintil": 48, "subresourceheightintil": 48, "subresourcedepthintil": 48, "subresourcestarttileindex": 48, "map_tile_to_resourc": 48, "mapping_count": 48, "xyz": [48, 196], "link": [48, 59, 66, 68, 149, 155, 159, 163, 165, 169, 173, 213, 219, 225, 229, 231, 235, 239, 257, 285], "get_texture_tiling_info": 48, "set_variable_rate_shad": 49, "rate_x": 49, "rate_i": 49, "variablerateshadingcombin": [49, 52, 60, 61], "vertex_combin": 49, "vrs_passthrough": [49, 52, 60], "pixel_combin": 49, "setup": [49, 52, 62, 156, 158, 159, 198, 226, 234, 235, 240, 241, 245, 269, 285], "interfer": [49, 159, 172, 201], "vr": [49, 52, 57, 61, 62, 87, 100, 277], "capabl": [49, 52, 63, 245, 275], "sv_shadingr": 49, "provok": 49, "set_variable_rate_shading_textur": [49, 62], "rate_textur": 49, "devicedrivercap": [49, 52], "hasvariablerateshadingtextur": [49, 52], "ibuff": 50, "vbuffer": 50, "create_vb": 50, "temporarili": [50, 177, 235, 239, 245, 272], "create_ib": 50, "stat_nam": [50, 54], "ib": [50, 266], "setvsrc_ex": 50, "vb": [50, 266], "setvsrc": 50, "setind": 50, "create_vdecl": 50, "vsdtype": [50, 52], "vsd": 50, "dx8": 50, "solut": [50, 155, 169, 185, 198, 199, 208, 237, 275, 285], "bad_vdecl": [50, 52], "delete_vdecl": 50, "setvdecl": 50, "setscissor": 51, "corner": [51, 164, 197, 201, 204, 205, 245, 247, 259, 289], "scissorrect": 51, "setview": 51, "getview": 51, "vsdop_mask": 52, "vsdop_stream": 52, "vsdop_input": 52, "vsdt_mask": 52, "vsdr_mask": 52, "vsds_mask": 52, "vsds_per_instance_data": 52, "get_vsdreg": 52, "make_vsdreg": 52, "get_vsdstream": 52, "make_vsdstream": 52, "vsd_skipflg": 52, "get_vsdskip": 52, "vsd_end": 52, "vstreamsrc_normal_data": 52, "vstreamsrc_indexed_data": 52, "vstreamsrc_instance_data": 52, "palid": 52, "vprtype": 52, "fshtype": 52, "gpufencehandl": [52, 53], "devicedrivercapabilitiesbas": 52, "devicedriverissu": 52, "devicedriverissuesnoissu": 52, "devicedrivershadermodelvers": 52, "shadermodel": 52, "shaderstag": 52, "stage_max": 52, "stage_raytrac": 52, "stage_cs_async_st": 52, "stage_max_ext": 52, "async_comput": 52, "maxsampl": 52, "maxstream": 52, "maxsamplers_v": 52, "max_sli_afr": 52, "vdeclusage_po": 52, "vdeclusage_blendw": 52, "vdeclusage_blendind": 52, "vdeclusage_norm": 52, "vdeclusage_ps": 52, "vdeclusage_tc": 52, "vdeclusage_tang": 52, "vdeclusage_binorm": 52, "vdeclusage_tessfactor": 52, "vdeclusage_tpo": 52, "vdeclusage_color": 52, "vdeclusage_fog": 52, "vdeclusage_depth": 52, "vdeclusage_sampl": 52, "sbcf_usage_shader_binding_t": 52, "get_shader_binding_table_buffer_properti": 52, "sbcf_usage_accelleration_structure_build_scratch_spac": 52, "sbcf_dynam": 52, "sbcf_zeromem": 52, "sbcf_index32": 52, "sbcf_framemem": 52, "sbcf_usage_read_back": 52, "sbcf_align16": 52, "sbcf_cpu_access_mask": 52, "sbcf_cpu_access_writ": 52, "sbcf_cpu_access_read": 52, "sbcf_bind_mask": 52, "sbcf_bind_vertex": 52, "sbcf_bind_index": 52, "sbcf_bind_const": 52, "sbcf_bind_shader_r": 52, "sbcf_bind_unord": 52, "sbcf_misc_mask": 52, "sbcf_misc_drawindirect": 52, "sbcf_misc_allow_raw": 52, "sbcf_misc_structur": 52, "sbcf_misc_esram_onli": 52, "sbcf_cb_persist": 52, "sbcf_cb_one_fram": 52, "sbcf_ua_sr_byte_address": 52, "sbcf_ua_sr_structur": 52, "sbcf_ua_byte_address": 52, "sbcf_ua_structur": 52, "sbcf_ua_byte_address_readback": 52, "sbcf_ua_structured_readback": 52, "sbcf_ua_indirect": 52, "sbcf_indirect": 52, "sbcf_staging_buff": 52, "wrap_coord0": 52, "wrap_coord1": 52, "wrap_coord2": 52, "wrap_coord3": 52, "vcdest_non": 52, "vcdest_amb": 52, "vcdest_diff": 52, "vcdest_amb_diff": 52, "vcdest_emi": 52, "vcdest_spec": 52, "writemask_red0": 52, "writemask_green0": 52, "writemask_blue0": 52, "writemask_alpha0": 52, "writemask_red1": 52, "writemask_red2": 52, "writemask_red3": 52, "writemask_red4": 52, "writemask_red5": 52, "writemask_red6": 52, "writemask_red7": 52, "writemask_green1": 52, "writemask_green2": 52, "writemask_green3": 52, "writemask_green4": 52, "writemask_green5": 52, "writemask_green6": 52, "writemask_green7": 52, "writemask_blue1": 52, "writemask_blue2": 52, "writemask_blue3": 52, "writemask_blue4": 52, "writemask_blue5": 52, "writemask_blue6": 52, "writemask_blue7": 52, "writemask_alpha1": 52, "writemask_alpha2": 52, "writemask_alpha3": 52, "writemask_alpha4": 52, "writemask_alpha5": 52, "writemask_alpha6": 52, "writemask_alpha7": 52, "writemask_r": 52, "writemask_green": 52, "writemask_blu": 52, "writemask_alpha": 52, "writemask_rgb": 52, "writemask_al": 52, "writemask_default": 52, "xessstat": 52, "unsupported_devic": 52, "unsupported_driv": 52, "init_error_unknown": 52, "readi": [52, 54, 62, 150, 159, 169, 174, 229, 237, 285, 289], "fsr2state": 52, "not_check": 52, "init_error": 52, "mtlfxupscalest": 52, "hdroutputmod": 52, "sdr_onli": 52, "hdr10_and_sdr": 52, "hdr10_onli": 52, "hdr_onli": 52, "depthresolvemod": 52, "report": [52, 53, 230, 245], "depth_resolve_mode_non": 52, "depth_resolve_mode_sample_zero": 52, "0th": 52, "depth_resolve_mode_averag": 52, "android": [52, 158, 208, 252, 275], "depth_resolve_mode_min": 52, "smallest": [52, 66, 159, 201, 262], "depth_resolve_mode_max": 52, "largest": [52, 201, 247, 289], "drv3d_framerate_limited_by_noth": 52, "drv3d_framerate_limited_by_replay_wait": 52, "drv3d_framerate_limited_by_replay_underfe": 52, "drv3d_framerate_limited_by_gpu_util": 52, "hasvariablerateshadingcombin": 52, "passthrough": 52, "hasvariablerateshadingshaderoutput": 52, "vrs_overrid": [52, 60], "vrs_min": [52, 60], "vrs_max": [52, 60], "vrs_sum": [52, 60], "rb_rw_render_target": 52, "rb_rw_uav": 52, "rb_rw_copy_dest": 52, "rb_rw_blit_dest": 52, "rb_ro_srv": 52, "rb_ro_constant_buff": 52, "rb_ro_vertex_buff": 52, "rb_ro_index_buff": 52, "rb_ro_indirect_buff": 52, "rb_ro_variable_rate_shading_textur": 52, "rb_ro_copy_sourc": 52, "rb_ro_blit_sourc": 52, "rb_ro_raytrace_acceleration_build_sourc": 52, "rb_flag_release_pipeline_ownership": 52, "rb_flag_acquire_pipeline_ownership": 52, "rb_flag_split_barrier_begin": 52, "rb_flag_split_barrier_end": 52, "rb_stage_vertex": 52, "rb_stage_pixel": 52, "rb_stage_comput": 52, "rb_stage_raytrac": 52, "rb_flag_dont_preserve_cont": 52, "rb_source_stage_vertex": 52, "rb_source_stage_pixel": 52, "rb_source_stage_comput": 52, "rb_source_stage_raytrac": 52, "rb_alias_from": 52, "rb_alias_to": 52, "rb_ro_shader_binding_t": 52, "rb_flush_raytrace_acceleration_build_scratch_us": 52, "rb_alias_to_and_discard": 52, "rb_alias_al": 52, "rb_source_stage_all_graph": 52, "rb_source_stage_all_shad": 52, "rb_rw_depth_stencil_target": 52, "rb_ro_constant_depth_stencil_target": 52, "rb_ro_generic_read_buff": 52, "rb_ro_generic_read_textur": 52, "rb_stage_all_shad": 52, "rb_stage_all_graph": 52, "rb_none": 52, "bad_vprog": 52, "bad_fshad": 52, "bad_program": 52, "bad_palid": 52, "bad_gpufencehandl": 52, "rt_transform_s": 52, "basi": [52, 172], "briefconstcap": 52, "nyi": 52, "capbrief": 52, "brief": [52, 149, 213, 252, 260], "phrase": [52, 214], "platformt": 52, "xbone": 52, "tvo": 52, "nswitch": 52, "mac": 52, "linux": [52, 208, 210, 275], "win32": 52, "pull": [52, 201, 205, 209, 278], "cosponsor": 52, "correctli": [52, 57, 62, 153, 157, 159, 169, 173, 175, 188, 191, 197, 201, 205, 209, 216, 218, 228, 230, 231, 235, 237, 239, 245, 266, 269, 285, 289], "expans": [52, 289], "broken": [52, 67, 159, 169, 177, 239], "somenyi": 52, "devicedrivercapabilitiesandroid": 52, "devicedrivercapabilitiesio": 52, "devicedrivercapabilitieslinux": 52, "devicedrivercapabilitiesmacosx": 52, "devicedrivercapabilitiesnintendoswitch": 52, "devicedrivercapabilitiesps4": 52, "devicedrivercapabilitiestvo": 52, "devicedrivercapabilitieswindow": 52, "devicedrivercapabilitiesxboxon": 52, "hasanisotropicfilt": 52, "silent": 52, "nintendo": [52, 208], "maco": [52, 275], "hasdepthreadonli": 52, "hasstructuredbuff": 52, "hasnooverwriteonshaderresourcebuff": 52, "overwrit": [52, 59, 83, 159, 168, 221, 237, 239, 254, 289], "multi": [52, 62, 149, 159, 163, 174, 208, 228, 235, 250], "hasvolmipmap": 52, "eg": [52, 262], "hasasynccomput": 52, "hasocclusionqueri": 52, "occlus": [52, 157, 158, 180, 199, 226, 231, 234], "hasconstbufferoffset": 52, "hasdepthboundstest": 52, "hasconditionalrend": 52, "hasresourcecopyconvers": 52, "hasasynccopi": 52, "hasreadmultisampleddepth": 52, "hasinstanceid": 52, "hasquadtessel": 52, "quad": 52, "hasgather4": 52, "gather": 52, "hasalphacoverag": 52, "candid": 52, "situat": [52, 59, 159, 173, 200, 201, 216, 239], "clarifi": [52, 159], "haswellsupportedindirect": 52, "hasbindless": 52, "experiment": [52, 175, 228, 235, 236, 240, 241], "hasnvapi": 52, "detect": [52, 158, 165, 216, 262, 269, 285], "hasatiapi": 52, "amd": [52, 62], "ati": 52, "hasvariablerateshad": 52, "hasvariablerateshadingby4": 52, "hasaliasedtextur": 52, "hasresourceheap": 52, "hasbufferoverlapcopi": 52, "hasbufferoverlapregionscopi": 52, "hasuavonlyforcedsamplecount": 52, "multisampl": 52, "hasshader64bitintegerresourc": 52, "hasnativerenderpasssubpass": 52, "sup": 52, "hastiled2dresourc": 52, "hastiled3dresourc": 52, "hastiledsaferesourcesaccess": 52, "hastiledmemoryalias": 52, "hasdlss": 52, "dlss": 52, "deep": [52, 149, 159], "learn": [52, 220, 222, 223, 225, 229, 230, 231, 245, 275], "super": [52, 62], "hasxess": 52, "intel": 52, "xess": 52, "xe": 52, "hasdrawid": 52, "hasmeshshad": 52, "line": [52, 90, 117, 140, 150, 159, 160, 161, 164, 169, 172, 174, 175, 194, 197, 201, 202, 205, 213, 214, 227, 232, 235, 239, 245, 250, 260, 262, 266, 269, 272, 275, 277, 285, 289], "hasbasicviewinstanc": 52, "hasoptimizedviewinstanc": 52, "hasacceleratedviewinstanc": 52, "hasrenderpassdepthresolv": 52, "hasstereoexpans": 52, "hastilebasedarchitectur": 52, "bandwidth": 52, "ram": [52, 277], "favor": [52, 62], "vice": [52, 169, 206, 243], "versa": [52, 169, 190, 206, 243], "haslazymemori": 52, "lazili": 52, "transient": [52, 57], "hasindirectsupport": 52, "hw": 52, "a8": 52, "drawindirect": 52, "nor": [52, 62, 214, 237, 280], "dispatchindirect": 52, "hascomparesampl": 52, "constexp": 52, "wanna": 52, "worm": 52, "hasshaderfloat16support": 52, "arithmet": 52, "hasuavoneverystag": 52, "hasrayaccelerationstructur": 52, "rai": [52, 158, 172, 174, 208, 237], "trace": [52, 59, 79, 129, 131, 158, 175, 208, 245, 258], "hasrayqueri": 52, "hasraydispatch": 52, "vsdt_float3": 52, "check_vertex_format_support_for_acceleration_structure_build": 52, "hasindirectraydispatch": 52, "hasgeometryindexinrayaccelerationstructur": 52, "hasskipprimitivetypeinraytracingshad": 52, "procedur": [52, 153, 159, 164, 169, 191, 200, 206, 208, 216, 254, 289], "travers": [52, 258, 275], "hasbasevertexsupport": 52, "cal": 52, "basevertex": 52, "castingfullytypedformatssupport": 52, "op3": 52, "castingfullytypedformatsupport": 52, "hasnativeraytracepipelineexpans": 52, "haswaveop": 52, "wave": [52, 186, 252], "waveop": 52, "devicedrivercapabilitiesscarlett": 52, "atom": 52, "offer": [52, 158, 159, 201, 243, 245, 254, 269], "instruct": [52, 161, 201, 205, 218, 219, 221, 222, 223, 224, 225, 228, 229, 230, 260, 266, 287], "self": [52, 58, 61, 74, 75, 98, 185, 199, 200, 203, 207, 235, 237, 269], "proper": [52, 68, 149, 155, 157, 163, 165, 169, 185, 235, 237, 289], "softwar": [52, 158, 174, 237], "devicedrivercapabilitiesps5": 52, "advertis": 52, "devicedriverissuesbas": 52, "devicedriverissuesandroid": 52, "devicedriverissueswindow": 52, "hascomputetimelimit": 52, "tdr": 52, "timeout": 52, "qualcomm": 52, "adreno": 52, "arm": 52, "mali": 52, "hascomputecannotwrite3dtex": 52, "hasstrictrenderpassesonli": 52, "my": [52, 213, 214], "crash": [52, 164, 247, 269, 289], "hassmallsampledbuff": 52, "64kibyt": 52, "mobil": [52, 62, 208, 237, 239, 262], "categori": [52, 149, 158, 172, 245, 252], "hasrenderpasscleardatarac": 52, "schedul": [52, 68, 69, 72], "random": [52, 79, 131, 162, 164, 169, 178, 186, 187, 191, 195, 201, 205, 230, 235, 289], "flicker": [52, 159, 167, 170, 185, 272], "hasbrokenbaseinstanceid": 52, "hasmultisampledandinstancinghang": 52, "hang": [52, 159, 172, 239, 252], "hasignoredevicelost": 52, "spam": 52, "haspolldevicef": 52, "randomli": [52, 159, 164, 169, 200, 201, 230], "fenc": [52, 53, 164, 201, 258, 259, 289], "wait": [52, 53, 68, 108, 218, 231, 266, 269], "poll": [52, 108], "hasbrokenshadersafterappswitch": 52, "hasbrokensrgbconverionwithmrt": 52, "srgb": [52, 158], "mrt": [52, 62], "hasbrokencomputeformattedoutput": 52, "fp32": 52, "hasclearcolorbug": 52, "radeon": 52, "device_lost": [52, 53], "r8g8": 52, "hasbrokenmtrecreateimag": 52, "devi": 52, "g710": 52, "g610": 52, "hasbrokensubpass": 52, "suffer": 52, "devicedriverraytraceproperti": 52, "topaccelerationstructureinstanceelements": 52, "accelerationstructurebuildscratchbufferoffsetalign": 52, "maxrecursiondepth": 52, "recurs": [52, 106, 159, 213, 235, 237, 239, 247, 275], "gen": [52, 67, 158, 259], "shoot": [52, 159, 258], "hit": 52, "zcmpfunc": 52, "acmpfunc": 52, "sblend": 52, "dblend": 52, "mintexw": 52, "mintexh": 52, "maxtexw": 52, "maxtexh": 52, "mincubes": 52, "maxcubes": 52, "minvols": 52, "maxvols": 52, "maxtexaspect": 52, "maxtexcoord": 52, "maxsimtex": 52, "maxvertexsampl": 52, "maxclipplan": 52, "maxstreamstr": 52, "maxvpconst": 52, "maxprim": 52, "maxvertind": 52, "upixof": 52, "ogl": 52, "vpixof": 52, "maxsimrt": 52, "is20arbitraryswizzleavail": 52, "minwarps": 52, "maxwarps": 52, "variableratetexturetilesizex": 52, "variableratetexturetilesizei": 52, "vsd_stream": 52, "vsd_stream_per_vertex_data": 52, "vsd_stream_per_instance_data": 52, "vsd_reg": 52, "vsd_skip": 52, "vsdt_float1": 52, "vsdt_float2": 52, "vsdt_float4": 52, "vsdt_e3dcolor": 52, "vsdt_ubyte4": 52, "vsdt_short2": 52, "vsdt_short4": 52, "vsdt_short2n": 52, "vsdt_short4n": 52, "vsdt_ushort2n": 52, "vsdt_ushort4n": 52, "vsdt_udec3": 52, "vsdt_dec3n": 52, "vsdt_half2": 52, "vsdt_half4": 52, "vsdt_int1": 52, "vsdt_int2": 52, "vsdt_int3": 52, "vsdt_int4": 52, "vsdt_uint1": 52, "vsdt_uint2": 52, "vsdt_uint3": 52, "vsdt_uint4": 52, "vsdr_po": 52, "vsdr_blendw": 52, "vsdr_blendind": 52, "vsdr_norm": 52, "vsdr_psize": 52, "vsdr_diff": 52, "vsdr_spec": 52, "vsdr_texc0": 52, "vsdr_texc1": 52, "vsdr_texc2": 52, "vsdr_texc3": 52, "vsdr_texc4": 52, "vsdr_texc5": 52, "vsdr_texc6": 52, "vsdr_texc7": 52, "vsdr_pos2": 52, "vsdr_norm2": 52, "vsdr_texc15": 52, "vsdr_texc8": 52, "vsdr_texc9": 52, "vsdr_texc10": 52, "vsdr_texc11": 52, "vsdr_texc12": 52, "vsdr_texc13": 52, "vsdr_texc14": 52, "vblock_readonli": 52, "vblock_nosyslock": 52, "prim_pointlist": 52, "prim_linelist": 52, "prim_linestrip": 52, "prim_trilist": 52, "prim_tristrip": 52, "prim_trifan": 52, "prim_4_control_point": 52, "prim_count": 52, "tm_world": 52, "tm_view": 52, "tm_proj": 52, "tm_local2view": 52, "tm_view2loc": 52, "tm_global": 52, "tm__num": 52, "clear_target": 52, "clear_zbuff": 52, "clear_stencil": 52, "clear_discard_target": 52, "clear_discard_zbuff": 52, "clear_discard_stencil": 52, "blend_zero": 52, "blend_on": 52, "blend_srccolor": 52, "blend_invsrccolor": 52, "blend_srcalpha": 52, "blend_invsrcalpha": 52, "blend_destalpha": 52, "blend_invdestalpha": 52, "blend_destcolor": 52, "blend_invdestcolor": 52, "blend_srcalphasat": 52, "blend_bothinvsrcalpha": 52, "blend_blendfactor": 52, "blend_invblendfactor": 52, "blendop_add": 52, "blendop_subtract": 52, "blendop_revsubtract": 52, "blendop_min": 52, "blendop_max": 52, "cmpf_never": 52, "cmpf_less": 52, "cmpf_equal": 52, "cmpf_lessequ": 52, "cmpf_greater": 52, "cmpf_notequ": 52, "cmpf_greaterequ": 52, "cmpf_alwai": 52, "cull_non": 52, "cull_cw": 52, "cull_ccw": 52, "stnclop_keep": 52, "stnclop_zero": 52, "stnclop_replac": 52, "stnclop_incrsat": 52, "stnclop_decrsat": 52, "stnclop_invert": 52, "stnclop_incr": 52, "stnclop_decr": 52, "texaddr_wrap": 52, "texaddr_mirror": 52, "texaddr_clamp": 52, "texaddr_bord": 52, "texaddr_mirroronc": 52, "texfilter_default": 52, "texfilter_point": 52, "texfilter_linear": 52, "texfilter_best": 52, "texfilter_compar": 52, "texfilter_non": 52, "max_survey_index": 52, "d3d_has_quad": 53, "d3derr": 53, "d3d_err": 53, "intptr_t": 53, "main_wnd_f": 53, "uintptr_t": 53, "d3derr_in_device_reset": 53, "msg": [53, 104], "dagor_d3d_force_driver_reset": 53, "usage_textur": 53, "usage_depth": 53, "usage_rtarget": 53, "usage_autogenmip": 53, "usage_filt": 53, "usage_blend": 53, "usage_vertextextur": 53, "usage_srgbread": 53, "usage_srgbwrit": 53, "usage_samplecmp": 53, "usage_pixreadwrit": 53, "usage_til": 53, "usage_unord": 53, "usage_unordered_load": 53, "capfmt_x8r8g8b8": 53, "capfmt_r8g8b8": 53, "capfmt_r5g6b5": 53, "capfmt_x1r5g5b5": 53, "update_window_mod": 53, "init_driv": 53, "is_init": 53, "init_video": 53, "hinst": 53, "wcname": 53, "ncmdshow": 53, "mainwnd": 53, "renderwnd": 53, "hicon": 53, "titl": [53, 117, 172, 213, 214], "cfg": [53, 232, 239, 250], "hard": [53, 62, 201, 239, 269], "soft": [53, 172, 289], "sucess": 53, "release_driv": 53, "shutdown": [53, 59, 108, 114], "fill_interface_t": 53, "d3dinterfacet": 53, "d3dit": 53, "prepare_for_destroi": 53, "notifi": [53, 68], "window_destroi": 53, "hwnd": 53, "beforewindowdestroyedcooki": 53, "register_before_window_destroyed_callback": 53, "unregister_before_window_destroyed_callback": 53, "cooki": 53, "can_reset_now": 53, "ok": [53, 54, 133, 168, 227, 269], "reset_devic": [53, 253, 256], "succed": 53, "update_screen": 53, "app_act": 53, "wait_for_async_pres": 53, "finish": [53, 62, 87, 100, 159, 201, 289], "gpu_latency_wait": 53, "recent": [53, 159, 216, 243, 245], "insert_f": 53, "insert_wait_on_f": 53, "set_srgb_backbuffer_writ": 53, "setgamma": 53, "get_screen_aspect_ratio": 53, "change_screen_aspect_ratio": 53, "fast_capture_screen": 53, "end_fast_capture_screen": 53, "texpixel32": 53, "capture_screen": 53, "100": [53, 74, 75, 83, 98, 159, 164, 178, 185, 188, 189, 197, 199, 200, 201, 221, 222, 269, 277, 285, 289], "guarant": 53, "release_capture_buff": 53, "create_pred": 53, "completelyon": 53, "survei": 53, "dip": 53, "free_pred": 53, "begin_survei": 53, "end_survei": 53, "begin_conditional_rend": 53, "end_conditional_rend": 53, "beginev": 53, "endev": 53, "get_vrr_support": 53, "get_vsync_en": 53, "vsync": [53, 250], "enable_vsync": 53, "strong": [53, 185, 190, 213, 214], "vblank": 53, "resummarize_htil": 53, "set_esram_layout": 53, "wchar_t": 53, "unset_esram_layout": 53, "reset_esram_layout": 53, "prefetch_movable_textur": 53, "writeback_movable_textur": 53, "1023": 53, "cubetextur": 54, "voltextur": 54, "arraytextur": 54, "on_tex_slice_loaded_cb_t": 54, "ddsx": [54, 68, 158, 174, 266], "header": [54, 108, 133, 158, 214, 250, 280], "channeldtyp": 54, "unorm": 54, "snorm": 54, "ufloat": 54, "sfloat": 54, "sint": 54, "texlock_discard": 54, "texlock_rawdata": 54, "texlock_no_dirty_upd": 54, "texlock_nosyslock": 54, "texlock_read": 54, "texlock_writ": 54, "texlock_readwrit": 54, "texlock_rwmask": 54, "texlock_nooverwrit": 54, "texlock_delsysmemcopi": 54, "texlock_systexlock": 54, "texlock_updatefromsystex": 54, "texlock_donotupdateon9exbydefault": 54, "texlock_copy_stag": 54, "texlock_default": 54, "texlf_calcmipmap": 54, "cubeface_posx": 54, "cubeface_negx": 54, "cubeface_posi": 54, "cubeface_negi": 54, "cubeface_posz": 54, "cubeface_negz": 54, "texloadr": 54, "err": 54, "err_rub": 54, "is_alpha_texformat": 54, "is_bc_texformat": 54, "auto_mip_levels_count": 54, "min_siz": 54, "apply_gen_tex_prop": 54, "texturemetadata": [54, 68], "tmd": 54, "force_addr_from_tmd": [54, 68], "parse_tex_format": 54, "default_fmt": 54, "textureformatdesc": 54, "get_tex_format_desc": 54, "fmt": [54, 119, 149, 158, 161, 262, 269, 280], "get_tex_format_nam": 54, "get_tex_channel_valu": 54, "texturechannelformatdesc": 54, "whose": [54, 68, 158, 159, 169], "lowest": [54, 159, 164], "set_tex_channel_valu": 54, "channel_bits_to_float": 54, "float_to_channel_bit": 54, "d3d_load_ddsx_tex_cont": 54, "textureid": [54, 67, 68], "tid": [54, 68], "paired_tid": 54, "hdr": [54, 158], "igenload": 54, "crd": 54, "q_id": 54, "start_lev": 54, "tex_ld_lev": 54, "on_tex_slice_loaded_cb": 54, "convert_image_lin": 54, "in_channel": 54, "in_bits_per_channel": 54, "in_float": 54, "out_channel": 54, "out_bits_per_channel": 54, "out_float": 54, "swap_rb": 54, "d3d_load_ddsx_tex_contents_impl": 54, "d3d_load_ddsx_to_slic": 54, "int8_t": 54, "isfloatpoint": 54, "issign": 54, "isnorm": 54, "hasalpha": 54, "isdepth": 54, "rgbachannelscount": 54, "channelscount": 54, "dagortextureformat": 54, "bytesperel": 54, "isblockformat": 54, "elementwidth": 54, "elementheight": 54, "mainchannelstyp": 54, "stencilchanneltyp": 54, "textureinfo": 54, "voltex": 54, "arrtex": 54, "cubetex": 54, "cflg": 54, "generatemip": 54, "calcsubresidx": 54, "updatesubregion": 54, "src_subres_idx": 54, "src_x": 54, "src_y": 54, "src_z": 54, "src_w": 54, "src_h": 54, "src_d": 54, "dest_subres_idx": 54, "dest_x": 54, "dest_i": 54, "dest_z": 54, "updatesubregionnoord": 54, "level_count": 54, "texaddr": 54, "addrmod": 54, "texaddru": 54, "texaddrv": 54, "texaddrw": 54, "texbordercolor": 54, "texfilt": 54, "texmipmap": 54, "texlod": 54, "mipmaplod": 54, "setanisotropi": 54, "disablesampl": 54, "issampleren": 54, "texmiplevel": 54, "minlevel": 54, "maxlevel": 54, "iscubearrai": 54, "setreadstencil": 54, "settid": 54, "gettid": 54, "gettexnam": 54, "setresapinam": 54, "lockimg": 54, "unlockimg": 54, "lockbox": 54, "unlockbox": 54, "getinfo": 54, "lockimgex": 54, "maketmptexrescopi": 54, "subtyp": 54, "origin": [54, 68, 158, 159, 168, 172, 175, 177, 191, 201, 205, 209, 216, 219, 220, 222, 228, 231, 232, 235, 239, 247, 254, 260, 269, 272, 278, 289], "replacetexresobject": 54, "new_tex": 54, "allocatetex": 54, "discardtex": 54, "downsiz": 54, "start_src_level": 54, "level_offset": 54, "upsiz": 54, "texaddrimpl": 54, "texaddruimpl": 54, "texaddrvimpl": 54, "texaddrwimpl": 54, "texbordercolorimpl": 54, "texfilterimpl": 54, "texmipmapimpl": 54, "texlodimpl": 54, "setanisotropyimpl": 54, "sampleren": 54, "tex_copi": 54, "check_texformat": 54, "get_max_sample_count": 54, "get_texformat_usag": 54, "res3d_tex": 54, "usage_xxx": 54, "issame_texformat": 54, "cflg1": 54, "cflg2": 54, "check_cubetexformat": 54, "check_voltexformat": 54, "create_tex": 54, "teximage32": 54, "img": [54, 174], "statist": [54, 157, 252], "create_ddsx_tex": 54, "quality_id": 54, "alloc_ddsx_tex": 54, "stub_tex_idx": 54, "load_ddsx_tex_cont": 54, "create_cubetex": 54, "create_voltex": 54, "create_array_tex": 54, "create_cube_array_tex": 54, "alias_tex": 54, "alias_cubetex": 54, "alias_voltex": 54, "alias_array_tex": 54, "alias_cube_array_tex": 54, "stretch_rect": 54, "rectint": 54, "rsrc": 54, "rdst": 54, "stretch": [54, 164, 186, 201, 202, 245, 289], "hood": [54, 68, 159], "copysubresourceregion": 54, "texel": [54, 158, 196, 199, 201, 205], "get_texture_statist": 54, "num_textur": 54, "total_mem": 54, "out_dump": 54, "set_tex": 54, "use_sampl": 54, "settex": 54, "settex_v": 54, "simplifi": [55, 158, 159, 208, 228, 235, 245, 258], "use_staging_multidraw_buf": 56, "perdrawdatat": 56, "multidraw": 56, "incapsul": 56, "holder": [56, 280], "multidrawrenderexecutor": 56, "fillbuff": 56, "drawcalls_count": 56, "set_cb": 56, "iter": [56, 62, 66, 68, 158, 228, 260], "params_sett": 56, "drawcal": 56, "executor": 56, "getperdrawargsbuffernam": 56, "prefix": [56, 62, 149, 158, 159, 161, 163, 174, 220, 239, 247, 269], "ringdynamicsb": 56, "multidrawargu": 56, "uniquebufhold": 56, "perdrawargsbuff": 56, "allocateddrawcallsinbuff": 56, "actualstart": 56, "needperdrawparamsbuff": 56, "primitive_typ": 56, "first_drawcal": 56, "friend": [56, 98], "fun": 57, "homogen": 57, "tempor": 57, "fake": [57, 119], "multiplex": [57, 59, 61, 62], "crime": 57, "soon": [57, 63, 68], "registri": [57, 58, 59, 62, 64, 74, 75, 79, 131], "singleton": [58, 68], "bfg_ecs_nod": [58, 75], "nodehandl": [58, 59, 60, 61, 63, 69, 71, 73, 75], "nodehandlevector": 58, "component_nam": 58, "bfg_ec": [58, 61, 69], "def": [58, 61, 75, 87, 100, 145], "register_some_nod": [58, 75], "some_nod": [58, 61, 75], "registernod": [58, 59, 60, 61, 75], "requestrenderpass": [58, 61, 62, 75], "postfxrender": [58, 75], "function_annot": [58, 75], "bfgecsnodeannot": 58, "astfunctionannot": [58, 75], "func": [58, 75, 80, 87, 88, 91, 95, 98, 100, 101, 111, 113, 120, 121, 124, 129, 144, 212], "functionptr": [58, 75], "modulegroup": [58, 75], "annotationargumentlist": [58, 75], "das_str": [58, 60, 75], "ast": [58, 75], "rtti": [58, 75], "builtin": [58, 60, 75], "declarereloadcallback": [58, 75], "bfgecsnodeannotationarg": 58, "declare": [58, 75], "parsearg": [58, 75], "singular": 59, "backend": 59, "preview": [59, 149, 159, 173, 235, 239, 289], "wrapper": [59, 66, 68], "everyth": [59, 62, 153, 159, 161, 168, 169, 175, 177, 200, 201, 213, 216, 222, 232, 235, 237, 245, 262, 268, 269, 283, 285, 289], "dabfg_pp_node_src": [59, 62, 64], "expand": [59, 201, 213, 289], "register_nod": [59, 62, 63, 64, 69], "source_loc": [59, 72], "set_multiplexing_ext": 59, "run_nod": [59, 62, 73], "startup": [59, 227, 270], "invalidate_histori": 59, "histori": [59, 60, 61, 62, 75, 243], "preserv": [59, 168, 174, 189, 201, 214, 216, 228, 235, 239, 289], "update_external_st": [59, 62], "externalst": 59, "mark_external_resource_for_valid": 59, "illeg": [59, 226, 234], "sneaki": 59, "gradual": [59, 231], "fg": [59, 62, 64], "inde": [59, 235], "influenc": [59, 158, 164, 172, 177, 185, 190, 191, 197, 201, 205, 228, 289], "wireframemodeen": 59, "vrsenabl": 59, "vrsrequir": [59, 61, 62], "child_nam": [59, 61, 62], "declaration_callback": [59, 61, 72, 74], "lifetim": [59, 63, 65, 68], "unregist": [59, 63, 66, 68], "coupl": [59, 64, 235], "classfield": 59, "setresolut": [59, 62], "type_nam": [59, 61, 62, 91, 124], "reschedul": 59, "ipoint2": [59, 62, 111, 250], "ipoint3": [59, 62, 79, 131, 250], "setdynamicresolut": [59, 62], "8212": [59, 62], "fillslot": [59, 61], "namedslot": [59, 61, 62], "res_name_spac": [59, 61], "res_nam": [59, 61, 66, 68], "fog": 59, "intrus": 59, "bunch": [59, 62, 201, 205], "downsampl": 59, "sens": [59, 153, 159, 169], "fog_depth": 59, "ifs": 59, "updateexternallyconsumedresourceset": 59, "somehow": 59, "prune": 59, "markresourceexternallyconsum": 59, "unmarkresourceexternallyconsum": 59, "unmark": 59, "dabfgcorealias": 59, "set_resolut": 59, "set_dynamic_resolut": 59, "fill_slot": [59, 60, 62], "update_externally_consumed_resource_set": 59, "mark_resource_externally_consum": 59, "unmark_resource_externally_consum": 59, "bindingsmap": 60, "fixedvectormap": 60, "namespacenameid": [60, 61], "65535": 60, "nodenameid": [60, 61], "resnameid": [60, 61], "clearzeroonfirstfram": 60, "discardonfirstfram": 60, "multiplexingmod": [60, 61], "supersampl": [60, 62], "subsampl": [60, 62], "fullmultiplex": [60, 62], "sideeffect": [60, 61, 62], "read_onli": 60, "read_writ": 60, "color_attach": 60, "input_attach": 60, "depth_attach": 60, "depth_attachment_and_shader_resourc": 60, "resolve_attach": 60, "shader_resourc": [60, 64], "constant_buff": 60, "index_buff": 60, "vertex_buff": 60, "blit": 60, "indirection_buff": 60, "vrs_rate_textur": 60, "13": [60, 155, 219, 220, 222, 225, 228, 230], "pre_rast": 60, "post_rast": [60, 75], "all_graph": 60, "all_indirect": 60, "21": 60, "resourcetyp": 60, "blob": [60, 61, 62, 64, 108, 132, 214], "autorestypenameid": [60, 61], "bindingtyp": 60, "shadervar": [60, 186, 194, 253, 256], "viewmatrix": 60, "projmatrix": 60, "structure_annot": [60, 70], "resourcedata": 60, "autoresolutiondata": 60, "shaderblocklayersinfo": 60, "scenelay": 60, "objectlay": 60, "framelay": 60, "vrsstaterequir": 60, "ratetextureresid": 60, "pixelcombin": [60, 61], "ratei": [60, 61], "vertexcombin": [60, 61], "ratex": [60, 61], "virtualsubresourceref": 60, "nameid": [60, 61], "bindtyp": 60, "resourceusag": 60, "usagetyp": [60, 61], "resourcerequest": [60, 61], "slotrequest": 60, "nodestaterequir": 60, "supportswirefram": 60, "pipelinestateoverrid": 60, "overridest": [60, 62], "vrsstate": 60, "virtualpassrequir": 60, "colorattach": 60, "fixedvector": 60, "depthreadonli": 60, "depthattach": 60, "nodedata": 60, "uint16": 60, "precedingnodeid": 60, "fixedvectorset": 60, "modifiedresourc": 60, "followingnodeid": 60, "readresourc": 60, "nodesourc": 60, "shaderblocklay": 60, "historyresourcereadrequest": 60, "staterequir": 60, "createdresourc": 60, "renderingrequir": 60, "renamedresourc": 60, "prioriti": [60, 61, 62, 69, 72, 74, 75, 159, 187, 188, 259], "resourceprovid": 60, "internalregistri": [60, 61], "idindexedmap": 60, "knownnam": 60, "idnamemap": 60, "nodetrack": 60, "arg0": [60, 77, 83, 84, 87, 90, 91, 92, 95, 96, 98, 100, 102, 103, 104, 105, 106, 108, 110, 111, 112, 114, 115, 120, 121, 122, 123, 124, 125, 126, 127, 129, 130, 132, 135, 137, 139, 140, 141, 146, 148], "arg1": [60, 83, 87, 90, 91, 92, 95, 98, 100, 102, 104, 110, 111, 112, 121, 122, 124, 125, 126, 127, 130, 135, 137, 139, 140, 146], "arg2": [60, 87, 90, 91, 92, 95, 98, 100, 102, 111, 121, 122, 124, 125, 126, 127, 137, 139, 140, 213], "__context": 60, "arg3": [60, 87, 90, 91, 95, 98, 100, 111, 121, 124, 126, 137, 140], "resetnod": 60, "dabfg_enable_das_intergr": 61, "ordermeaft": [61, 62], "register_debug_visualization_nod": 61, "debug_visualization_node_nam": 61, "is_forward_rend": 61, "target_after_under_water_fog": 61, "depthro": 61, "depth_for_transparent_effect": 61, "tracers_nod": 61, "ordermebefor": [61, 62], "transparent_scene_late_nod": 61, "opaque_final_target": 61, "depthrw": [61, 62], "depth_for_transpar": 61, "requestst": [61, 62], "setframeblock": [61, 62], "global_fram": 61, "worldrenderer_renderdebug": 61, "vrsratetextur": 61, "virtualresourcesemirequest": [61, 62], "virtualattachmentresourc": 61, "resuid": 61, "textureresolut": 61, "autor": 61, "autoresolutionrequest": [61, 62], "namespacerequest": [61, 62], "namespaceid": 61, "nodeid": 61, "virtualresourcerequestbas": 61, "virtualresourcehandl": [61, 62, 64], "virtualresourcecreationsemirequest": [61, 62], "virtualresourcerequest": [61, 62, 64], "virtualtexturehandl": 61, "virtualbufferhandl": 61, "virtualtexturerequest": [61, 62], "virtualbufferrequest": [61, 62], "staterequest": [61, 62], "ratetextur": 61, "virtualpassrequest": [61, 62], "virtualattachmentrequest": [61, 62], "autorestypeid": 61, "texture2dcreateinfo": [61, 62], "creationflag": [61, 62], "buffercreateinfo": [61, 62], "elements": [61, 62], "setprior": [61, 62], "multiplexing_mod": 61, "executionha": [61, 62], "side_effect": [61, 62], "getresolut": [61, 62], "renam": [61, 62, 159, 175, 177, 225, 237, 239, 254, 269], "modifyrequest": 61, "dagorresptr": 61, "managedtexview": [61, 62], "managedbufview": 61, "setsceneblock": [61, 62], "setobjectblock": [61, 62], "allowwirefram": [61, 62], "allowvr": 61, "enableoverrid": [61, 62], "das_overrid": 61, "dagordriver3d": 61, "overriderenderst": 61, "tt": 61, "usea": [61, 62, 64], "atstag": [61, 62, 64, 75], "bindtoshadervar": [61, 62, 75], "node_nam": [62, 64, 74, 75], "outer": [62, 159, 164], "further": [62, 159, 161, 172, 174, 181, 185, 188, 190, 197, 199, 201, 216, 223, 228, 235, 269, 272, 280, 285, 289], "comprehens": [62, 208, 222, 269, 275], "metadata": 62, "doc": [62, 76, 78, 81, 86, 89, 93, 131, 147, 212, 281], "currnamespac": 62, "newrwrequestpolici": 62, "registertexture2d": 62, "texture_provider_callback": 62, "somewher": [62, 213, 222], "registerbackbuff": 62, "swapchain": 62, "everywher": [62, 232], "discuss": [62, 153, 155, 159, 164, 172, 173, 174, 200, 201, 235], "topic": [62, 199], "futur": [62, 73, 159, 169, 172, 175, 196, 213, 216, 228, 235, 239, 243, 270], "registerbuff": 62, "buffer_provider_callback": 62, "managedbufferview": 62, "newhistrequestpolici": 62, "historyfor": 62, "modif": [62, 149, 158, 159, 160, 185, 209, 216, 270, 272, 280], "slot_nam": [62, 69, 70, 72, 74, 75], "newrorequestpolici": 62, "rel": [62, 164, 173, 200, 201, 204, 205, 213, 214, 221, 230, 235, 245, 247, 250, 252, 289], "createtexture2d": 62, "virtualblobrequest": 62, "createblob": 62, "modifyblob": 62, "modifytextur": 62, "readblob": 62, "readblobhistori": 62, "readtextur": 62, "readtexturehistori": [62, 72], "renameblob": 62, "renametextur": 62, "allowasyncpipelin": 62, "async": 62, "priority_t": 62, "prio": 62, "chose": 62, "ax": [62, 158, 159, 164, 174, 175, 186, 200, 201, 205, 230, 245, 247], "framegraph": [62, 208], "concret": [62, 199], "fine": [62, 158, 161, 185, 195, 197, 199, 205, 245, 269, 288], "tune": [62, 185, 202, 205, 245, 269, 288], "dimension": 62, "ipoint": 62, "reason": [62, 149, 153, 159, 169, 172, 173, 177, 201, 237, 243, 258], "consequ": [62, 201, 229, 270, 289], "ey": [62, 172, 245, 254], "shall": [62, 280], "bitwis": 62, "OR": [62, 66, 68, 280], "pleas": [62, 155, 169, 202, 209, 260, 278, 280, 285, 289], "vram": 62, "screenshot": [62, 118, 159, 164, 181, 185, 197, 200, 201, 202, 205, 224, 239, 243, 253, 256], "cinemat": 62, "ssaa": 62, "spend": [62, 159], "doxygenstruct": 62, "doxygen": [62, 72, 210, 213], "xml": [62, 72], "_build": [62, 72, 210], "breath": [62, 72], "vrsset": 62, "auto_mip_count": 62, "garbag": [62, 235], "ve": [62, 150, 153, 159, 169, 174, 194, 201, 235, 243, 245, 254, 269], "texcf_": 62, "texture3dcreateinfo": 62, "prone": [62, 159], "ongo": 62, "mechan": [62, 68, 159, 160, 169, 172, 214, 289], "figur": 62, "sbcf_": 62, "masquerad": 62, "incomplet": 62, "rrp": 62, "defaultvalu": 62, "resourcerequestpolici": 62, "polici": 62, "incorrectli": [62, 153, 157, 169, 175], "mytexhandl": 62, "rvalu": 62, "smart": [62, 239], "kiss": 62, "basetex": 62, "flippolici": 62, "hasusagetyp": 62, "shader_var_nam": 62, "beforehand": 62, "projector": 62, "blobtyp": 62, "bindasview": 62, "bindasproj": 62, "hasusagestag": 62, "handletyp": 62, "merg": [62, 161, 216, 220, 229, 232, 239, 247, 258, 289], "tricki": 62, "rwvirtualattachmentrequest": 62, "readonli": [62, 87, 91, 100, 124, 129], "colorrwvirtualattachmentrequest": 62, "depthrovirtualattachmentrequest": 62, "ro": [62, 91, 124], "depthroandsvbindvirtualattachmentrequest": 62, "sv": 62, "rovirtualattachmentrequest": 62, "boundari": [62, 157, 159, 172, 181, 190, 193, 201], "synonym": 62, "brace": [62, 159, 250], "prevframemotionrequest": 62, "usabl": [62, 164, 232, 275], "depthroandbindtoshadervar": 62, "guidelin": [62, 157, 166, 169, 209, 286, 289], "recompress": 62, "low": [62, 66, 70, 149, 155, 158, 159, 169, 174, 195, 208, 222, 237, 238, 269, 272, 289], "break": [62, 108, 153, 159, 161, 163, 165, 169, 173, 175, 204, 214, 247, 254, 269, 272, 289], "sparingli": [62, 190, 201, 204], "color_blob": 62, "infer": 62, "vrsrate": 62, "automag": 63, "ownership": [63, 159], "boiler": 64, "plate": [64, 159, 235], "port": [64, 213, 237, 239], "yourself": [64, 227, 230, 235, 243, 245], "concern": 64, "facilit": [64, 164, 230, 231, 250, 289], "dereferenc": 64, "managedresview": 64, "d3dresid": [64, 66, 67, 68], "texhndl": 64, "legacy_cod": 64, "iff": 64, "nullabl": 64, "bad_resid": [64, 66], "integr": [65, 97, 153, 164, 170, 201, 205, 208, 213, 240, 242, 286, 289], "glossari": 66, "log2": 66, "poss": 66, "2x2x2": 66, "commonli": [66, 159, 239, 245, 289], "denot": 66, "32767x32768": 66, "lev": 66, "_lev": 66, "ql": 66, "tql": 66, "preset": [66, 83, 158, 170, 232, 241, 245, 289], "thumbnail": 66, "ultrahigh": 66, "texql": [66, 68], "tql_": 66, "_ql": 66, "lfu": [66, 252], "ordinari": 66, "levdesc": 66, "tql_thumb": 66, "tql_base": 66, "iterate_all_managed_d3dr": 66, "first_managed_d3dr": 66, "bad_d3dresid": [66, 67, 68], "next_managed_d3dr": 66, "min_rc": [66, 68], "refcount": [66, 68], "prev_id": [66, 68], "tql_stub": 66, "1x1": [66, 68], "placehold": [66, 158, 159, 169, 204, 235], "upto": [66, 68], "64x64": 66, "mem": 66, "4k": 66, "tql_high": 66, "hq": [66, 68, 245, 253, 256, 262, 268, 269], "tql_uhq": 66, "ultra": 66, "tql__count": 66, "item": [66, 158, 159, 161, 178, 214, 216, 239, 245], "tql__first": 66, "tql__last": 66, "register_managed_r": [66, 68], "factori": [66, 68], "reach": [66, 68, 155, 165, 172, 175, 196, 243, 285, 289], "evict": [66, 68], "release_managed_r": [66, 68], "release_managed_res_verifi": [66, 68], "del": [66, 68, 239], "insensit": [66, 68], "is_managed_res_factory_set": 66, "acquire_managed_r": 66, "unavail": [66, 143, 220, 230, 285], "check_r": 66, "acquire_managed_tex": 66, "release_managed_tex": 66, "release_managed_tex_verifi": 66, "acquire_managed_buf": 66, "release_managed_buf": 66, "release_managed_buf_verifi": 66, "get_managed_res_nam": 66, "get_managed_res_id": 66, "get_managed_res_refcount": 66, "get_managed_res_lfu": 66, "get_managed_res_cur_tql": 66, "get_managed_res_max_tql": 66, "get_managed_res_maxreq_lev": 66, "get_managed_res_loaded_lev": 66, "enable_res_mgr_mt": [66, 68], "max_res_entry_count": [66, 68], "multithread": [66, 68], "prealloc": [66, 68], "realloc": [66, 68], "after_rid": 66, "min_ref_count": [66, 68], "loop": [66, 68, 87, 100, 165], "represent": [67, 158, 173, 208, 213, 214, 228, 289], "checkmarkerbit": 67, "odd": [67, 200, 285], "fromindex": 67, "backward": [67, 158, 174], "bad_textureid": [67, 68], "iterate_all_managed_textur": 68, "first_managed_textur": 68, "next_managed_textur": 68, "register_managed_tex": 68, "is_managed_tex_factory_set": 68, "get_managed_texture_nam": 68, "get_managed_texture_id": 68, "get_managed_texture_refcount": 68, "enable_tex_mgr_mt": 68, "add_managed_textur": 68, "texturefactori": 68, "add_managed_array_textur": 68, "tex_slice_nm": 68, "compos": [68, 149, 169, 262], "furthermor": 68, "update_managed_array_textur": 68, "reload_managed_array_textures_for_changed_slic": 68, "slice_tex_nam": 68, "evict_managed_tex_id": 68, "uncondition": 68, "check_managed_texture_load": 68, "fq_load": 68, "check_all_managed_textures_load": 68, "ignore_unref_tex": 68, "analog": [68, 205, 243], "change_managed_textur": 68, "new_textur": 68, "discard_unused_managed_textur": 68, "unload": [68, 134], "mark_managed_tex_lfu": 68, "req_lev": 68, "prefetch_managed_textur": 68, "prefetch_managed_textures_by_textag": 68, "textag": 68, "mark_managed_textures_import": 68, "add_import": 68, "min_lev_for_dyn_decreas": 68, "downgrad": [68, 253, 256], "dyn": 68, "reset_managed_textures_streaming_st": 68, "set_default_tex_factori": 68, "tf": 68, "get_default_tex_factori": 68, "get_symbolic_tex_factori": 68, "symbol": [68, 214, 250, 269], "get_stub_tex_factori": 68, "init_managed_textures_streaming_support": 68, "reload_jobmgr_id": 68, "taken": [68, 159, 216, 239, 250], "dgs_get_set": [68, 83, 117], "getblockbynam": [68, 83, 95], "texstream": 68, "jobmanag": 68, "rload_jobmgr_id": 68, "is_managed_textures_streaming_act": 68, "is_managed_textures_streaming_load_on_demand": 68, "demand": [68, 159], "is_managed_texture_incomplet": 68, "bq": 68, "load_anisotropy_from_set": 68, "anisotropi": [68, 149], "add_anisotropy_except": 68, "reset_anisotropi": 68, "tex_name_filt": 68, "substr": 68, "prefetch_and_check_managed_texture_load": 68, "prefetch_and_check_managed_textures_load": 68, "tex_list": 68, "prefetch_and_wait_managed_textures_load": 68, "after_tid": 68, "get_max_managed_texture_id": 68, "highest": [68, 164, 262, 269, 285], "is_managed_texture_id_valid": 68, "validate_valu": 68, "resembl": [68, 231, 289], "get_texture_meta_data": 68, "meta": [68, 118], "get_sampler_info": 68, "texture_meta_data": 68, "get_texture_separate_sampl": 68, "concurr": 68, "set_texture_separate_sampl": 68, "set_add_lod_bias_batch": 68, "lodbiasrul": 68, "lod": [68, 149, 153, 158, 159, 161, 169, 177, 191, 216, 218, 222, 226, 234, 235, 237, 238, 239, 245, 250, 252, 262, 286], "dgs_tex_qual": 68, "dgs_tex_anisotropi": 68, "createtextur": 68, "releasetextur": 68, "texfactoryactivechang": 68, "uninstal": [68, 226], "scheduletexload": 68, "req_ql": 68, "gettextureddsx": 68, "tab": [68, 150, 157, 159, 168, 199, 216, 227, 232, 235, 237, 239, 243, 250, 254, 258, 272, 283], "caution": [68, 172, 216, 232, 245], "out_ddsx": 68, "onunregistertextur": 68, "ispersistenttexnam": 68, "nm": 68, "ontexfactorydelet": 68, "de": [68, 169], "resourceslot": [69, 71, 72], "resource_slot": [69, 72, 73, 74], "nodehandlewithslotsaccess": [69, 70, 71, 72, 74, 75], "register_access": [69, 72], "slotsstat": 69, "action_list": [69, 72], "created_resource_nam": 69, "resourcetocreatefor": [69, 70, 72, 75], "updated_resource_nam": 69, "resourcetoreadfrom": [69, 70, 72, 75], "lower": [69, 72, 159, 164, 168, 173, 181, 188, 189, 196, 200, 201, 202, 205, 222, 225, 229, 243, 247, 252, 262, 285], "intermedi": [69, 155, 190, 201, 285, 289], "actionlist": [70, 72], "proxi": [71, 177, 237, 241, 289], "doxygenfunct": 72, "kept": [72, 185, 269], "resource_nam": 72, "WILL": 72, "update_prior": 72, "read_prior": 72, "default_read_prior": [72, 74], "resolve_access": 73, "storage_id": 73, "some_cpp_bind": 74, "some_struct": 74, "registeraccess": [74, 75], "slotact": [74, 75], "slots_stat": [74, 75], "2147483647": 74, "slot_decl": 74, "some_node_handl": 75, "some_node_output_tex": 75, "some_node_input_tex": 75, "some_shader_var": 75, "some_render": 75, "resource_slot_ec": 75, "postfx_input_slot": 75, "resourceslotecsannot": 75, "resslotecsannotationarg": 75, "dargbox": [76, 77, 79], "danetgamelib": [76, 79, 85, 147, 169], "soundsystem": [76, 79, 141, 148], "get_button_st": 77, "get_mouse_po": 77, "get_joystick_axi": 77, "export": [77, 80, 82, 83, 84, 85, 87, 88, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 141, 142, 143, 144, 145, 146, 148, 149, 151, 153, 158, 159, 162, 166, 167, 170, 174, 177, 200, 208, 213, 217, 221, 224, 225, 226, 230, 232, 234, 236, 237, 240, 241, 247, 253, 255, 256, 258, 259, 260, 262, 267, 268, 275, 286, 288], "integer_or_float": [77, 87, 90, 95, 100, 111, 115, 120, 132, 140], "_undocumented_": [77, 83, 84, 87, 91, 92, 96, 98, 100, 102, 103, 104, 105, 108, 110, 112, 114, 115, 116, 117, 120, 122, 123, 124, 125, 126, 127, 130, 132, 135, 137, 141, 142, 146, 148], "autodoc": [77, 83, 84, 87, 90, 91, 92, 95, 96, 98, 100, 102, 103, 104, 105, 106, 108, 110, 111, 112, 114, 115, 120, 121, 122, 123, 124, 125, 126, 127, 129, 130, 132, 135, 137, 139, 140, 141, 146, 148], "typemask": [77, 83, 84, 87, 90, 91, 92, 95, 96, 98, 100, 102, 103, 104, 105, 106, 108, 110, 111, 112, 114, 115, 120, 121, 122, 123, 124, 125, 126, 127, 129, 130, 132, 135, 137, 139, 140, 141, 146, 148, 213], "paramscheck": [77, 83, 84, 87, 90, 91, 92, 95, 96, 98, 100, 102, 103, 104, 105, 106, 108, 110, 111, 112, 114, 115, 120, 121, 122, 123, 124, 125, 126, 127, 129, 130, 132, 135, 137, 139, 140, 141, 146, 148, 213], "nparamscheck": [77, 83, 84, 87, 90, 91, 92, 95, 96, 98, 100, 102, 103, 104, 105, 106, 108, 109, 110, 111, 112, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 129, 130, 132, 133, 134, 135, 137, 138, 139, 140, 141, 146, 148], "typecheck": [77, 83, 84, 87, 90, 91, 92, 95, 96, 98, 100, 102, 103, 104, 105, 106, 108, 109, 110, 111, 112, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 129, 130, 132, 133, 135, 137, 138, 140, 141, 146, 148], "any_typ": [77, 83, 84, 87, 90, 91, 92, 95, 96, 98, 100, 102, 103, 104, 105, 106, 108, 109, 110, 111, 112, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 130, 132, 133, 135, 137, 138, 139, 140, 141, 146, 148], "faststrmapt": 77, "hotkei": [77, 87, 100, 235, 243, 245, 254], "encodedkei": 77, "buttonsrawslic": 77, "btn_name_map": 77, "getmapraw": 77, "sqrat": [77, 80, 83, 84, 87, 91, 95, 98, 100, 104, 106, 111, 121, 123, 124, 129, 139, 213], "buttonnam": 77, "vm": [77, 91, 95, 98, 104, 106, 108, 111, 114, 120, 121, 124, 127, 129, 139, 214], "buttonid": 77, "setvalu": [77, 82, 94, 97, 98, 136, 138], "freezeself": 77, "module_mgr": [77, 82, 87, 88, 92, 94, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 110, 111, 114, 115, 117, 118, 119, 120, 122, 123, 125, 126, 127, 130, 135, 136, 137, 138, 139, 143, 145, 146], "addnativemodul": [77, 82, 84, 87, 88, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 110, 111, 114, 115, 117, 118, 119, 120, 122, 123, 125, 126, 127, 130, 135, 136, 137, 138, 139, 143, 145, 146, 213], "utlitii": 78, "sandbox": 78, "browser": [79, 131, 173, 213, 220, 237], "daeditorembed": [79, 131], "guiscen": [79, 89, 131], "sceneconfig": [79, 89, 131], "animprop": [79, 89, 131], "scrollhandl": [79, 89, 131], "joystickaxisobserv": [79, 89, 131], "elemgroup": [79, 89, 131], "formattedtext": [79, 89, 131], "igenvideoplay": [79, 89, 131], "igensound": [79, 89, 131], "draganddropst": [79, 89, 131], "eventdatarect": [79, 89, 131], "mouseclickeventdata": [79, 89, 131], "hotkeyeventdata": [79, 89, 131], "hovereventdata": [79, 89, 131], "movetoareatarget": [79, 89, 131], "lottieanim": [79, 89, 131], "elementref": [79, 89, 131], "dacol": [79, 131], "clipboard": [79, 131, 223], "folder": [79, 131, 149, 150, 158, 162, 165, 167, 170, 174, 177, 204, 213, 220, 230, 237, 239, 245, 252, 262, 267, 268, 275, 285], "vrom": [79, 106, 131, 174, 175, 270], "iso8601": [79, 131], "math": [79, 131, 280], "point2": [79, 131, 250], "quat": [79, 131], "memtrac": [79, 131], "perf": [79, 131, 253, 256], "shell": [79, 131, 192, 247, 285], "file_handl": [79, 131], "workcycl": [79, 131], "dainput2": [79, 131], "singlebuttonid": [79, 131], "digitalactionbind": [79, 131], "analogaxisactionbind": [79, 131], "analogstickactionbind": [79, 131], "datacach": [79, 131], "baselist": [79, 93, 131], "listro": [79, 93, 131], "schemelessev": [79, 93, 131], "sqevent": [79, 93, 131], "templatedb": [79, 93, 131], "compobjectro": [79, 93, 131], "comparrai": [79, 93, 131], "comparrayro": [79, 93, 131], "netev": [79, 93, 131], "entity_editor": [79, 131], "eventbu": [79, 108, 131], "frp": [79, 89, 131], "json": [79, 99, 108, 131, 213], "jwt": [79, 131], "nestdb": [79, 131], "pathfind": [79, 131, 155, 258], "regexp2": [79, 131], "rendercanva": [79, 89, 131], "statsd": [79, 131], "sysinfo": [79, 131], "utf8": [79, 131, 139], "win": [79, 131, 277], "yupfile_pars": [79, 131], "gpubenchmark": [79, 86], "sensscal": [79, 81, 121], "videomod": [79, 81], "inputcontrol": 80, "humanaim": 80, "humantpscam": 80, "humanfpscam": 80, "vehiclecam": 80, "planecam": 80, "controlt": 80, "modulemgr": [80, 84, 87, 100], "getvm": [80, 98, 106, 108, 138, 139, 213], "save_config": 80, "reset_to_default": 80, "restore_saved_config": 80, "controls_were_reset": 80, "clear_controls_were_reset": 80, "get_sens_scal": 80, "sens_scal": 80, "netbindsq": [82, 94, 136], "get_user_id": 82, "add_entity_in_net_scop": 82, "get_sync_tim": 82, "get_dasevent_net_vers": 82, "tbl": [82, 83, 85, 91, 94, 97, 122, 124, 136, 138, 213], "existingmodul": [82, 94, 122, 136], "get_setting_by_blk_path": 83, "set_setting_by_blk_path": 83, "set_setting_by_blk_path_and_sav": 83, "remove_setting_by_blk_path": 83, "save_set": 83, "save_changed_set": 83, "are_settings_changes_commit": 83, "commit_settings_chang": 83, "changed_field": [83, 84], "fill_changes_name_map": 83, "fastnamemap": 83, "name_map": 83, "path_so_far": 83, "blockcount": 83, "childblk": 83, "getblock": [83, 95], "getblocknam": 83, "paramcount": 83, "addnameid": 83, "getparamnam": 83, "settings_explorer_window": 83, "search": [83, 159, 169, 174, 175, 213, 220, 235, 237, 239, 269, 272, 285], "editmod": [83, 99], "autoapplyedit": 83, "needcopyset": 83, "applyedit": 83, "beginmenubar": 83, "beginmenu": 83, "menuitem": 83, "dynamicmemgeneralsavecb": 83, "framemem_ptr": [83, 98], "savetotextstream": 83, "endmenu": 83, "checkbox": [83, 161, 177, 191, 196, 220, 221, 222, 223, 228, 229, 230, 232, 235, 237, 239, 243, 258, 285, 289], "samelin": 83, "getwindowwidth": 83, "70": [83, 149, 174, 222, 250], "200": [83, 149, 164, 165, 177, 200, 201, 277, 285], "button": [83, 87, 100, 150, 159, 175, 177, 197, 201, 216, 218, 219, 220, 221, 222, 223, 224, 227, 228, 229, 230, 231, 232, 235, 237, 239, 243, 245, 254, 283, 285, 289], "refresh": [83, 235], "revert": [83, 159, 219, 220, 231, 235, 239, 243, 247, 269], "endmenubar": 83, "settingscopi": 83, "settingschang": 83, "setfrom": [83, 95], "cleardata": 83, "settingschangesthisfram": 83, "imguidagor": 83, "blkedit": 83, "isempti": 83, "merge_data_block_and_save_ord": 83, "merge_data_block": 83, "dgs_apply_config_blk": 83, "changesnamemap": 83, "pathsofar": 83, "apply_settings_chang": 83, "gameparams_explorer_window": 83, "dgs_get_game_param": 83, "gameparam": [83, 262], "register_imgui_window_ex": 83, "explor": [83, 158, 169, 175, 216, 220, 228, 235, 237, 239, 245, 274, 289], "imguiwindowflags_menubar": 83, "dgs_apply_changes_to_config": 83, "config_blk": 83, "need_merge_cmd": 83, "overridefilt": 83, "override_filt": 83, "cmdblk": 83, "dgs_apply_command_line_to_config": 83, "cmd": [83, 98, 116, 175, 262, 266, 269, 277], "presetnam": 83, "getblockbynameex": 83, "getstr": [83, 95, 146, 161], "consolepreset": 83, "dgs_apply_console_preset_param": 83, "preset_nam": 83, "presetslistblocknam": 83, "consolegraphicalpreset": 83, "presetsblk": 83, "presetparamsblk": 83, "uivideomod": 84, "apply_video_set": 84, "get_video_mod": 84, "get_available_monitor": 84, "get_current_window_resolut": 84, "is_fullscreen_en": 84, "get_dlss_stat": 84, "get_fsr_support": 84, "get_dlssg_support_st": 84, "set_dlssg_suppress": 84, "is_dlss_quality_available_at_resolut": 84, "get_performance_display_mode_support": 84, "get_low_latency_mod": 84, "is_inline_rt_support": 84, "is_dx12": 84, "is_vulkan": 84, "is_gui_driver_select_en": 84, "is_upsampl": 84, "change_paper_white_nit": 84, "change_gamma": 84, "is_vrr_support": 84, "get_default_static_resolution_scal": 84, "is_rendinst_tessellation_support": 84, "is_only_low_gi_support": 84, "is_hfr_support": 84, "sqobject": [84, 91, 96, 120, 124, 141, 148], "atabl": 84, "gpu_benchmark": 85, "initgraphicsautodetect": 85, "isgpubenchmarkrun": 85, "startgpubenchmark": 85, "closegraphicsautodetect": 85, "getgpubenchmarkdur": 85, "getpresetfor60fp": 85, "getpresetformaxqu": 85, "getpresetformaxfp": 85, "gpu_benchmark_console_handl": 85, "argv": [85, 98, 117], "argc": [85, 98], "console_check_nam": 85, "benchmark": 85, "run_benchmak": 85, "graphicsautodetect": 85, "get_graphics_autodetect": 85, "make_graphics_autodetect_ent": 85, "selfdestruct": 85, "print_d": [85, 98], "register_console_handl": 85, "ecs_pull_gpu_benchmark_ui": 85, "kbd_bit_caps_lock": [87, 100], "kbd_bit_num_lock": [87, 100], "kbd_bit_scroll_lock": [87, 100], "panel_anchor_non": [87, 100], "panel_anchor_scen": [87, 100], "panel_anchor_vrspac": [87, 100], "panel_anchor_head": [87, 100], "panel_anchor_lefthand": [87, 100], "panel_anchor_righthand": [87, 100], "panel_anchor_ent": [87, 100], "panel_geometry_non": [87, 100], "panel_geometry_rectangl": [87, 100], "panel_rc_non": [87, 100], "panel_rc_face_left_hand": [87, 100], "panel_rc_face_right_hand": [87, 100], "panel_rc_face_head": [87, 100], "panel_rc_face_head_lock_i": [87, 100], "panel_rc_face_ent": [87, 100], "panel_render_cast_shadow": [87, 100], "panel_render_opaqu": [87, 100], "panel_render_always_on_top": [87, 100], "anim_start": [87, 100], "anim_request_stop": [87, 100], "anim_skip": [87, 100], "anim_skip_delai": [87, 100], "set_kb_focu": [87, 100], "capture_kb_focu": [87, 100], "calc_comp_s": [87, 100], "move_mouse_cursor": [87, 100], "get_mouse_cursor_po": [87, 100], "resolve_button_id": [87, 100], "gui_scen": [87, 100], "flow_parent_rel": [87, 100], "flow_horizont": [87, 100], "flow_vert": [87, 100], "align_left": [87, 100], "align_top": [87, 100], "align_right": [87, 100], "align_bottom": [87, 100], "align_cent": [87, 100], "vector_width": [87, 100], "vector_color": [87, 100], "vector_fill_color": [87, 100], "vector_mid_color": [87, 100], "vector_outer_lin": [87, 100], "vector_center_lin": [87, 100], "vector_inner_lin": [87, 100], "vector_tm_offset": [87, 100], "vector_tm_scal": [87, 100], "vector_lin": [87, 100], "vector_line_indent_px": [87, 100], "vector_line_indent_pct": [87, 100], "vector_ellips": [87, 100], "vector_sector": [87, 100], "vector_rectangl": [87, 100], "vector_poli": [87, 100], "vector_inverse_poli": [87, 100], "vector_opac": [87, 100], "vector_line_dash": [87, 100], "vector_nop": [87, 100], "vector_quad": [87, 100], "fft_none": [87, 100], "fft_shadow": [87, 100], "fft_glow": [87, 100], "fft_blur": [87, 100], "fft_outlin": [87, 100], "o_horizont": [87, 100], "o_vert": [87, 100], "toverflow_clip": [87, 100], "toverflow_char": [87, 100], "toverflow_word": [87, 100], "toverflow_lin": [87, 100], "dir_up": [87, 100], "dir_down": [87, 100], "dir_left": [87, 100], "dir_right": [87, 100], "event_break": [87, 100], "event_continu": [87, 100], "gesture_detector_drag": [87, 100], "gesture_detector_pinch": [87, 100], "gesture_detector_rot": [87, 100], "inquad": [87, 100], "outquad": [87, 100], "inoutquad": [87, 100], "incub": [87, 100], "outcub": [87, 100], "inoutcub": [87, 100], "inquint": [87, 100], "outquint": [87, 100], "inoutquint": [87, 100], "inquart": [87, 100], "outquart": [87, 100], "inoutquart": [87, 100], "insin": [87, 100], "outsin": [87, 100], "inoutsin": [87, 100], "incirc": [87, 100], "outcirc": [87, 100], "inoutcirc": [87, 100], "inexp": [87, 100], "outexp": [87, 100], "inoutexp": [87, 100], "inelast": [87, 100], "outelast": [87, 100], "inoutelast": [87, 100], "inback": [87, 100], "outback": [87, 100], "inoutback": [87, 100], "inbounc": [87, 100], "outbounc": [87, 100], "inoutbounc": [87, 100], "inoutbezi": [87, 100], "cosineful": [87, 100], "instep": [87, 100], "outstep": [87, 100], "blink": [87, 100], "doubleblink": [87, 100], "blinksin": [87, 100], "blinkco": [87, 100], "discrete8": [87, 100], "shake4": [87, 100], "shake6": [87, 100], "s_kb_focu": [87, 100], "s_hover": [87, 100], "s_top_hov": [87, 100], "s_activ": [87, 100], "s_mouse_act": [87, 100], "s_kbd_activ": [87, 100], "s_hotkey_act": [87, 100], "s_touch_act": [87, 100], "s_joystick_act": [87, 100], "s_vr_activ": [87, 100], "s_drag": [87, 100], "mr_none": [87, 100], "mr_t": [87, 100], "mr_r": [87, 100], "mr_b": [87, 100], "mr_l": [87, 100], "mr_lt": [87, 100], "mr_rt": [87, 100], "mr_lb": [87, 100], "mr_rb": [87, 100], "mr_area": [87, 100], "fmt_no_wrap": [87, 100], "fmt_keep_spac": [87, 100], "fmt_ignore_tag": [87, 100], "fmt_hide_ellipsi": [87, 100], "fmt_as_i": [87, 100], "devid_keyboard": [87, 100], "devid_mous": [87, 100], "devid_joystick": [87, 100], "devid_touch": [87, 100], "devid_vr": [87, 100], "keep_aspect_non": [87, 100], "keep_aspect_fit": [87, 100], "keep_aspect_fil": [87, 100], "axis_l_thumb_h": [87, 100], "axis_l_thumb_v": [87, 100], "axis_r_thumb_h": [87, 100], "axis_r_thumb_v": [87, 100], "axis_l_trigg": [87, 100], "axis_r_trigg": [87, 100], "axis_lr_trigg": [87, 100], "xmb_stop": [87, 100], "xmb_continu": [87, 100], "r_process": [87, 100], "size_to_cont": [87, 100], "font": [87, 100, 275], "bgcolor": [87, 100], "fgcolor": [87, 100], "fillcolor": [87, 100], "opac": [87, 100, 179, 197, 202, 259], "rotat": [87, 100, 157, 158, 159, 164, 174, 201, 216, 221, 229, 230, 235, 243, 254, 262, 285, 289], "translat": [87, 100, 164, 275], "fvalu": [87, 100, 213], "picsatur": [87, 100], "bright": [87, 100, 157, 158, 172, 173, 174, 185, 188, 189, 193, 194, 197, 199, 201, 204, 231, 262, 285], "sw": [87, 100], "flex": [87, 100], "fonth": [87, 100], "pw": [87, 100], "ph": [87, 100], "elemw": [87, 100], "elemh": [87, 100], "locate_element_sourc": [87, 100], "get_element_info": [87, 100], "get_font_metr": [87, 100], "resolve_button": [87, 100], "setfontdefht": [87, 100], "getfontdefht": [87, 100], "getfontinitialht": [87, 100], "calc_str_box": [87, 100], "closure_and_nativeclosur": [87, 91, 98, 100, 120, 121, 124, 127], "class_inst": [87, 91, 92, 95, 96, 100, 102, 108, 110, 111, 121, 122, 124, 125, 129, 132, 137], "fontid": [87, 100], "fontht": [87, 100], "font_nam": [87, 100], "pix_ht": [87, 100], "element_or_text": [87, 100], "element_or_styl": [87, 100], "setupdatehandl": [87, 100], "setshutdownhandl": [87, 100], "sethotkeysnavhandl": [87, 100], "addpanel": [87, 100], "removepanel": [87, 100], "mark_panel_dirti": [87, 100], "setxmbfocu": [87, 100], "unlimit": [87, 91, 92, 95, 98, 100, 104, 110, 111, 121, 122, 124, 125, 127, 130, 132, 137, 141, 148, 186], "getcompaabbbykei": [87, 100], "setconfigprop": [87, 100], "haveactivecursoronpanel": [87, 100], "cleartim": [87, 100, 120], "getallobserv": [87, 100], "cursorpres": [87, 100], "cursoroverstickscrol": [87, 100], "cursoroverclick": [87, 100], "hoveredclickableinfo": [87, 100], "keyboardlayout": [87, 100], "keyboardlock": [87, 100], "updatecount": [87, 100], "circlebuttonasact": [87, 100], "xmbmode": [87, 100], "getjoystickaxi": [87, 100], "enableinput": [87, 100], "forcecursoract": [87, 100], "noconstructor": [87, 91, 100, 124], "sqsceneconfig": [87, 100], "sqvm": [87, 98, 100], "defaultfont": [87, 100], "squirrelprop": [87, 100], "getdefaultfontid": [87, 100], "setdefaultfontid": [87, 100], "defaultfonts": [87, 100], "getdefaultfonts": [87, 100], "setdefaultfonts": [87, 100], "kbcursorcontrol": [87, 100], "gamepadcursorcontrol": [87, 100], "gamepadcursorspe": [87, 100], "gamepadcursorhovermaxtim": [87, 100], "gamepadcursoraxisv": [87, 100], "gamepadcursoraxish": [87, 100], "gamepadcursorhoverminmul": [87, 100], "gamepadcursorhovermaxmul": [87, 100], "gamepadcursordeadzon": [87, 100], "gamepadcursornonlin": [87, 100], "reportnestedwatchedupd": [87, 100], "joystickscrollaxish": [87, 100], "joystickscrollaxisv": [87, 100], "clickrumbleen": [87, 100], "clickrumblelofreq": [87, 100], "clickrumblehifreq": [87, 100], "clickrumbledur": [87, 100], "dirpadrepeatdelai": [87, 100], "dirpadrepeattim": [87, 100], "usedefaultcursor": [87, 100], "defaultcursor": [87, 100], "clickprior": [87, 100], "actionclickbybehavior": [87, 100], "prop": [87, 100, 129, 167, 170, 197, 213, 239, 269], "defscenebgcolor": [87, 100], "getdefscenebgcolor": [87, 100], "setdefscenebgcolor": [87, 100], "deftextcolor": [87, 100], "getdeftextcolor": [87, 100], "setdeftextcolor": [87, 100], "squirrelfunc": [87, 91, 95, 100, 107, 111, 124, 129, 144], "setclickbutton": [87, 100], "xa": [87, 100], "getclickbutton": [87, 100], "dargmoduleexport": [87, 100], "gesturedetector": [87, 100], "drag": [87, 100, 168, 175, 220, 230, 235, 237, 239, 272], "pinch": [87, 100], "eas": [87, 100, 159, 260], "prebuilt": [87, 100], "keyboard": [87, 100, 254], "focu": [87, 100, 159, 161, 235, 285, 289], "press": [87, 100, 150, 157, 164, 175, 205, 219, 222, 223, 228, 229, 230, 231, 232, 235, 237, 239, 243, 247, 254, 277, 283, 289], "mous": [87, 100, 174, 232, 245], "touch": [87, 100, 169, 197, 225], "joystick": [87, 100], "gamepad": [87, 100], "move_res": [87, 100], "beahvior": [87, 100], "bhv": [87, 100], "bhv_button": [87, 100], "textarea": [87, 100], "bhv_text_area": [87, 100], "textinput": [87, 100], "bhv_text_input": [87, 100], "slider": [87, 100, 239, 254, 272, 285, 289], "bhv_slider": [87, 100], "pannabl": [87, 100], "bhv_pannabl": [87, 100], "pannable2touch": [87, 100], "bhv_pannable_2touch": [87, 100], "swipescrol": [87, 100], "bhv_swipe_scrol": [87, 100], "moveres": [87, 100], "bhv_move_res": [87, 100], "combopopup": [87, 100], "bhv_combo_popup": [87, 100], "smoothscrollstack": [87, 100], "bhv_smooth_scroll_stack": [87, 100], "marque": [87, 100], "bhv_marque": [87, 100], "wheelscrol": [87, 100], "bhv_wheel_scrol": [87, 100], "scrollev": [87, 100], "bhv_scroll_ev": [87, 100], "inspectpick": [87, 100], "bhv_inspect_pick": [87, 100], "rtpropupd": [87, 100], "bhv_rt_prop_upd": [87, 100], "recalchandl": [87, 100], "bhv_recalc_handl": [87, 100], "draganddrop": [87, 100], "bhv_drag_and_drop": [87, 100], "fpsbar": [87, 100], "bhv_fps_bar": [87, 100], "latencybar": [87, 100], "bhv_latency_bar": [87, 100], "overlaytranspar": [87, 100], "bhv_overlay_transpar": [87, 100], "boundtoarea": [87, 100], "tooltip": [87, 100, 216, 239, 254], "cursor": [87, 100, 239], "BUT": [87, 100, 280], "movi": [87, 100], "ivf": [87, 100], "mp3": [87, 100], "video_file_name_with_ext": [87, 100], "enablesound": [87, 100], "plai": [87, 100, 150, 161, 175, 239, 269, 285], "onstart": [87, 100], "onerror": [87, 100], "playback": [87, 100, 165, 285], "onfinish": [87, 100], "termin": [87, 100, 161, 269], "shot": [87, 100], "parallax": [87, 100, 190, 204, 232], "piemenu": [87, 100], "transitions": [87, 100], "trackmous": [87, 100], "movetoarea": [87, 100], "processpointinginput": [87, 100], "processgestur": [87, 100], "eatinput": [87, 100], "textareaedit": [87, 100], "scrolltox": [87, 100], "scrolltoi": [87, 100], "scrolltochildren": [87, 100], "elem": [87, 100], "derivedclass": [87, 91, 100, 124, 129], "baseobserv": [87, 100, 129], "joyaxisobserv": [87, 100], "getvalu": [87, 100, 129], "deadzon": [87, 100], "targetrect": [87, 100], "undef": [87, 94, 95, 97, 100, 111, 117, 136, 138], "defaultalloc": [87, 100], "sqhotkeyeventdata": [87, 100], "gettargetrect": [87, 100], "sqhovereventdata": [87, 100], "alltransitionsconfig": [87, 100], "sqtransital": [87, 100], "transital": [87, 100], "ctor": [87, 100, 144, 213], "editabletext": [87, 100], "bind_script": [87, 100], "bhvmovetoareatarget": [87, 100], "sqbhvmovetoareatarget": [87, 100], "_def_fontht": [87, 100], "font_param": [87, 100], "capsht": [87, 100], "linespac": [87, 100], "ascent": [87, 100], "descent": [87, 100], "lowercaseheight": [87, 100], "register_const": [87, 100], "register_font": [87, 100], "register_anim_prop": [87, 100], "register_std_behavior": [87, 100], "register_rendobj_script_id": [87, 100], "sqelement": [87, 100], "bind_da": [87, 100], "dargdebug": [87, 88, 100, 101], "getcompdesc": [87, 100], "getscreenposx": [87, 100], "getscreenposi": [87, 100], "getwidth": [87, 100], "getheight": [87, 100], "getcontentwidth": [87, 100], "getcontentheight": [87, 100], "getscrolloffsx": [87, 100], "getscrolloffsi": [87, 100], "scriptbind": [88, 101], "requirefontsizeslot": [88, 101], "dbg_set_require_font_size_slot": [88, 101], "reactiv": [89, 208], "gui": [89, 208, 250], "canva": [90, 140, 288], "canvasdraw": [90, 140], "userdata": [90, 140], "comment": [90, 140, 174, 213, 214, 269, 285], "line_dash": [90, 140], "arg4": [90, 91, 124, 137, 140], "fill_poli": [90, 140], "fill_inverse_poli": [90, 140], "ellips": [90, 140], "arg5": [90, 140], "arg6": [90, 140], "arg7": [90, 140], "sector": [90, 140], "arg8": [90, 140], "arg9": [90, 140], "sqcoredaec": [91, 124], "set_callback_tim": [91, 124], "set_callback_timer_rt": [91, 124], "clear_callback_tim": [91, 124], "set_tim": [91, 124], "clear_tim": [91, 124], "comp_flag_repl": [91, 124], "comp_flag_change_ev": [91, 124], "invalid_entity_id": [91, 124], "evcast_unicast": [91, 124], "evcast_broadcast": [91, 124], "_dbg_get_all_comps_inspect": [91, 124], "_dbg_get_comp_val_inspect": [91, 124], "obsolete_dbg_get_comp_v": [91, 124], "get_comp_typ": [91, 124], "obsolete_dbg_set_comp_v": [91, 124], "get_comp_flag": [91, 124], "get_semantic_typ": [91, 124], "calc_hash": [91, 124], "calc_hash_int": [91, 124], "type_nul": [91, 124], "type_str": [91, 124], "type_int8": [91, 124], "type_uint8": [91, 124], "type_int16": [91, 124], "type_uint16": [91, 124], "type_uint": [91, 124], "type_int64": [91, 124], "type_uint64": [91, 124], "type_float": [91, 124], "type_point2": [91, 124], "type_point3": [91, 124], "type_point4": [91, 124], "type_ipoint2": [91, 124], "type_ipoint3": [91, 124], "type_ipoint4": [91, 124], "type_dpoint3": [91, 124], "type_bool": [91, 124], "type_matrix": [91, 124], "type_eid": [91, 124], "type_color": [91, 124], "type_object": [91, 124], "type_arrai": [91, 124], "type_shared_object": [91, 124], "type_shared_arrai": [91, 124], "type_int_list": [91, 124], "type_uint16_list": [91, 124], "type_string_list": [91, 124], "type_eid_list": [91, 124], "type_float_list": [91, 124], "type_point2_list": [91, 124], "type_point3_list": [91, 124], "type_point4_list": [91, 124], "type_ipoint2_list": [91, 124], "type_ipoint3_list": [91, 124], "type_ipoint4_list": [91, 124], "type_bool_list": [91, 124], "type_tmatrix_list": [91, 124], "type_color_list": [91, 124], "type_int64_list": [91, 124], "type_uint64_list": [91, 124], "type_tag": [91, 124], "type_auto": [91, 124], "clear_vm_entity_system": [91, 124], "register_entity_system": [91, 124], "modify_es_list": [91, 124], "start_es_load": [91, 124], "end_es_load": [91, 124], "comp_nam": [91, 124, 126], "component_type_t": [91, 124], "shutdown_tim": [91, 124], "hsquirrelvm": [91, 98, 106, 108, 114, 120, 124, 127, 139], "compintlist": [91, 124], "compuint16list": [91, 124], "compstringlist": [91, 124], "compeidlist": [91, 124], "compfloatlist": [91, 124], "comppoint2list": [91, 124], "comppoint3list": [91, 124], "comppoint4list": [91, 124], "compipoint2list": [91, 124], "compipoint3list": [91, 124], "compboollist": [91, 124], "comptmatrixlist": [91, 124], "compcolorlist": [91, 124], "compint64list": [91, 124], "compuint64list": [91, 124], "_get": [91, 95, 111, 124], "_nexti": [91, 95, 124], "len": [91, 124], "indexof": [91, 124, 144], "getal": [91, 124], "isreadonli": [91, 106, 124], "listtyp": [91, 124], "sqlistclass": [91, 124], "_set": [91, 95, 111, 124, 232], "readonly_method_error": [91, 124], "xi": [91, 124], "insert": [91, 98, 108, 124, 177], "pop": [91, 124, 168, 175, 216, 243, 272], "typerw": [91, 124], "typero": [91, 124], "itemtyp": [91, 124], "bind_list_typ": [91, 124], "fixed_str": [91, 124], "bind_list_class": [91, 124], "gettemplatebynam": [91, 124], "gettemplatemetainfo": [91, 124], "getcomponentmetainfo": [91, 124], "hascomponentmetainfo": [91, 124], "sqeventsdb": [91, 124], "evtdb_get_event_field": [91, 124], "xii": [91, 124], "getnam": [91, 124], "getbas": [91, 124], "getcompv": [91, 124], "getcompvalnul": [91, 124], "hascompon": [91, 124], "getnumparenttempl": [91, 124], "getparenttempl": [91, 124], "getcomponentsnam": [91, 124], "gettag": [91, 124], "removecompfunc": [91, 124], "sqentitymanag": [91, 124], "destroyent": [91, 124], "doesentityexist": [91, 124], "getnument": [91, 124], "getnumcompon": [91, 124], "emgr_send_ev": [91, 124], "xix": [91, 124], "emgr_bcast_ev": [91, 124], "xx": [91, 111, 124, 277, 285], "getentitytempl": [91, 124], "getentitytemplatenam": [91, 124], "getentityfuturetemplatenam": [91, 124], "globalfunc": [91, 124], "gettemplatedb": [91, 124], "emgr_get_tempate_db": [91, 124], "fixm": [91, 124], "emgr_get_events_db": [91, 124], "createent": [91, 124], "create_ent": [91, 124], "xstc": [91, 124], "o": [91, 124, 216, 239], "createentitysync": [91, 124], "create_entity_sync": [91, 124], "xst": [91, 124], "recreateentityfrom": [91, 124], "recreate_ent": [91, 124], "xistc": [91, 124], "createtempl": [91, 124], "create_templ": [91, 124], "xstssi": [91, 124], "getcomponenttyp": [91, 124], "emgr_get_component_typ": [91, 124], "getcomponenttypenam": [91, 124], "emgr_get_component_type_nam": [91, 124], "gettypenam": [91, 124], "emgr_get_type_nam": [91, 124], "curtim": [91, 124], "objectro": [91, 124], "sqcompobjectro": [91, 124], "comp_is_readonli": [91, 124], "comp_obj_get_al": [91, 124], "arrayro": [91, 124], "_newslot": [91, 95, 124, 129], "sqcompobject": [91, 124], "comp_obj_get": [91, 124], "comp_obj_set": [91, 124], "comp_obj_nexti": [91, 124], "comp_obj_eras": [91, 124], "comp_t_len": [91, 124], "sqcomparrai": [91, 124], "comp_arr_get_al": [91, 124], "comp_arr_get": [91, 124], "comp_arr_set": [91, 124], "comp_arr_nexti": [91, 124], "comp_arr_indexof": [91, 124], "comp_arr_append": [91, 124], "comp_arr_insert": [91, 124], "comp_arr_remov": [91, 124], "comp_arr_pop": [91, 124], "comp_arr_clear": [91, 124], "_call": [91, 124, 129], "sqentityid": [91, 124], "squirrelctor": [91, 111, 124, 129], "eid_ctor": [91, 124], "eventdatagett": [91, 124], "sqeventgetterproxi": [91, 124], "sqdata": [91, 124], "tblec": [91, 124], "get_component_name_by_idx": [91, 124], "get_component_name_by_hash": [91, 124], "register_sq_ev": [91, 124], "ii": [91, 124], "netsqev": [92, 125], "server_send_net_sqev": [92, 125], "server_broadcast_net_sqev": [92, 125], "client_request_unicast_net_sqev": [92, 125], "client_request_broadcast_net_sqev": [92, 125], "is_serv": [94, 136], "has_network": [94, 136], "get_replay_proto_vers": [94, 136], "danet_define_disconnection_caus": [94, 136], "eventsbind": [94, 136], "net_ecs_ev": [94, 136], "term_event_t": [94, 136], "bindal": [94, 136], "bindquirrelex": [95, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 130, 138, 139, 144], "sqratdatablock": 95, "formatasstr": 95, "addblock": 95, "addnewblock": 95, "getbool": 95, "getreal": 95, "getpoint4": 95, "getpoint3": 95, "getpoint2": 95, "gete3dcolor": 95, "setstr": 95, "setbool": 95, "setreal": 95, "setpoint4": 95, "setpoint3": 95, "setpoint2": 95, "sete3dcolor": 95, "addstr": 95, "addbool": 95, "addreal": 95, "addpoint3": 95, "addpoint4": 95, "addpoint2": 95, "addtm": 95, "adde3dcolor": 95, "removeparam": 95, "removeparambyid": 95, "removeblock": 95, "removeblockbyid": 95, "__getvers": 95, "findparam": 95, "paramexist": 95, "setparamfrom": 95, "setparamsfrom": 95, "setint": 95, "setint64": 95, "addint": 95, "getipoint3": 95, "setipoint3": 95, "addipoint3": 95, "getparamtypeannot": 95, "getparamvalu": 95, "getint": [95, 146], "_modulo": [95, 111], "loadfromtext": 95, "set_root": 95, "setparseincludesasparam": 95, "getparseincludesasparam": 95, "setparseoverridesnotappli": 95, "getparseoverridesnotappli": 95, "setparseoverridesignor": 95, "getparseoverridesignor": 95, "setparsecommentsasparam": 95, "getparsecommentsasparam": 95, "allow_file_access": 95, "sqdatablock": 95, "blk_load": 95, "tryload": 95, "blk_try_load": 95, "savetotextfil": 95, "blk_savetotextfil": 95, "savetotextfilecompact": 95, "blk_savetotextfilecompact": 95, "classobj": 95, "getobject": [95, 139], "bindquirrel": [95, 96, 97, 102, 103, 105, 107, 108, 110, 111, 115, 117, 118, 119, 120, 123, 130, 137, 138, 143, 145, 146], "encodestr": 96, "decodestr": 96, "encodejson": 96, "encodeblk": 96, "encodeblob": 96, "mgr": [96, 161], "sqwebbrows": [97, 213], "can_use_embeded_brows": [97, 213], "browser_go_back": [97, 213], "browser_reload_pag": [97, 213], "browser_go": 97, "browser_get_current_url": 97, "browser_get_current_titl": 97, "browser_add_window_method": [97, 213], "params_cnt": 97, "embed": [97, 169, 213], "web": [97, 205, 213, 218, 220, 222, 223, 229, 231], "cef": [97, 213], "webbrows": [97, 213], "browser_event_initi": [97, 213], "browser_event_document_readi": [97, 213], "browser_event_fail_loading_fram": 97, "browser_event_cant_download": 97, "browser_event_finish_loading_fram": 97, "browser_event_begin_loading_fram": 97, "browser_event_need_resend_fram": 97, "browser_event_browser_crash": 97, "sq_modules_mgr": [97, 213], "sqconsol": 98, "register_command": 98, "console_register_command": 98, "setobjprintfunc": 98, "setconsoleobjprintfunc": 98, "console_command": 98, "add_con_proc": 98, "clearscriptobject": 98, "scriptcommand": 98, "objprintfunc": 98, "registerclosur": 98, "closureinfo": 98, "closure_info": 98, "processcommand": 98, "executescript": 98, "callscripthandl": 98, "icommandprocessor": 98, "cmdcollector": 98, "collector_cmp": 98, "c_str": [98, 99], "nparam": 98, "argsdescript": 98, "cinfo": 98, "sqparam": 98, "str_to_sqobj_via_json": 98, "hsqobject": 98, "sqarrai": 98, "ot_arrai": 98, "sqprintcollector": 98, "printcollector": 98, "closur": [98, 120], "executedynarg": 98, "execcmd": 98, "sqstackcheck": 98, "stackcheck": 98, "errmsg": 98, "scriptsrc": 98, "printf": [98, 161], "sn": 98, "interactiveenv": 98, "sq_succeed": 98, "sq_compil": 98, "scriptclosur": 98, "sq_getstackobj": 98, "objformatset": 98, "silentmod": 98, "printfn": 98, "make_func_obj": 98, "sq_debug_print_to_output_str": 98, "console_print_collect": 98, "debugtabledatasq": 98, "isnul": 98, "tostr": 98, "stubfunc": 98, "stub_debug_table_data": 98, "stubdebugtabledata": 98, "sq_pop": 98, "sqinteg": [98, 126, 138], "sqregistercommand": 98, "hash_map": 98, "create_script_console_processor": 98, "sqmodul": [98, 106, 134, 138, 139, 213], "sqconsoleprocessor": 98, "sq_console_processor": 98, "ins": 98, "sqcp": 98, "g_assertf": 98, "processor": [98, 285], "destroy_script_console_processor": 98, "eras": [98, 108, 120, 127, 197, 230, 239], "clear_script_console_processor": 98, "sconit": 98, "sq_throwerror": 98, "narg": 98, "sq_gettop": 98, "sq_fail": 98, "sq_getclosureinfo": 98, "nfreevar": 98, "sq_error": 98, "closureobj": 98, "sq_getclosurenam": 98, "closurenam": 98, "anon": 98, "sq_getstr": 98, "g_verifi": 98, "dagor_dbglevel": 98, "sq_isclosur": 98, "argsdesc": 98, "sqfunctionproto": 98, "sq_function_proto": 98, "_unval": 98, "pclosur": 98, "_function": 98, "_nparamet": 98, "sqobjectptr": 98, "_paramet": 98, "sq_isstr": 98, "paramnam": [98, 161], "_stringval": 98, "append_sprintf": 98, "daeditor": [99, 126, 150, 153, 155, 164, 168, 170, 172, 173, 180, 186, 196, 205, 224, 245, 252, 257, 264, 267, 281, 284, 285, 289], "daeditore_sq": 99, "seteditmod": 99, "geteditmod": 99, "isfreecammod": 99, "de4_mode_select": 99, "de4_mode_mov": 99, "de4_mode_move_surf": 99, "de4_mode_rot": 99, "de4_mode_scal": 99, "de4_mode_point_act": 99, "de4_cmd_drop": 99, "de4_cmd_del": 99, "setworkmod": 99, "getworkmod": 99, "setpointactionpreview": 99, "objecteditor": 99, "updatetoolbarbutton": 99, "sqeventbu": [99, 127], "send_ev": 99, "ondesetworkmod": 99, "workmod": 99, "ondeseteditmod": 99, "sqdacol": 102, "rayhit_norm": 102, "traceray_norm": 102, "dir": [102, 116, 213, 253, 256, 262], "nstbl": [102, 104, 108, 111, 119, 120, 123, 137, 143], "dagorclipboard": 103, "set_clipboard_text": 103, "get_clipboard_text": 103, "sqratdagordebug": [104, 112, 113], "fatal": [104, 258], "screenlog": 104, "console_print": 104, "debug_dump_stack": 104, "assertf": 104, "get_log_filenam": 104, "logerr_interceptor_bind_api": 104, "perftbl": [104, 113], "dagorfold": 105, "get_exe_dir": 105, "get_game_dir": 105, "get_temp_dir": 105, "get_gamedata_dir": 105, "get_local_appdata_dir": 105, "get_common_appdata_dir": 105, "get_downloads_dir": 105, "dagorf": [106, 107], "file_exist": 106, "dir_exist": 106, "mkdir": 106, "mkpath": 106, "scan_fold": [106, 161, 285], "find_fil": 106, "read_text_from_fil": 106, "read_text_from_file_on_disk": 106, "stat": [106, 157, 245, 253, 256], "vromf": [106, 158, 264, 267, 268, 275], "realf": 106, "files_suffix": 106, "directories_onli": 106, "file_mask": 106, "filenam": [106, 149, 161, 216, 266, 285], "freez": [106, 175], "fp": [106, 158], "stutter": 106, "scan": [106, 162, 192, 235, 275, 285], "kwarg": [106, 108, 213], "maxcount": 106, "file_info": 106, "isdirectori": 106, "ishidden": 106, "accesstim": 106, "modifytim": 106, "mod": [106, 121], "disk": [106, 159, 252, 269, 272, 280, 285], "file_stat": 106, "atim": 106, "mtime": 106, "ctime": 106, "register_dagor_fs_vrom_modul": 106, "scan_vrom_fold": 107, "sq_scan_vrom_fold": 107, "sqhttpclient": 108, "requesthttp": 108, "httprequest": 108, "httpabort": 108, "httpdownload": 108, "http_success": 108, "http_fail": 108, "http_abort": 108, "http_shutdown": 108, "userag": 108, "respeventid": 108, "timeout_m": 108, "waitabl": 108, "needresponsehead": 108, "request_id": 108, "post": [108, 158, 165, 239, 245, 285], "head": [108, 158, 285], "urlencod": 108, "http_code": 108, "def_request_timeout_m": 108, "app": [108, 175, 253, 256, 258], "abort": [108, 262], "reponc": 108, "http_client_wait_active_request": 108, "active_request": 108, "deadlinetim": 108, "get_time_msec": [108, 119], "find_if": 108, "req": 108, "sleep_msec": 108, "http_client_on_vm_shutdown": 108, "whitelist": 108, "http_set_domains_whitelist": 108, "hash_set": 108, "wl": 108, "http_set_blocking_wait_mod": 108, "blocking_wait_mod": 108, "sqratiso8601tim": 109, "parse_msec": 109, "parse_unix_tim": 109, "format_msec": 109, "format_unix_tim": 109, "iso8601str": 109, "iso": 109, "8601": 109, "timestamp": [109, 119], "unix": [109, 119], "loc": 110, "getloctextforlang": 110, "processhypenationscn": 110, "processhypenationsjp": 110, "doesloctextexist": 110, "getcurrentlanguag": 110, "getforcelanguag": 110, "setlanguagetoset": 110, "initloc": 110, "sqratdagormath": 111, "matrix_to_eul": 111, "euler_to_quat": 111, "dir_to_quat": 111, "quat_to_eul": 111, "quat_to_matrix": 111, "quat_rotation_arc": 111, "qinterp": 111, "cvt": 111, "make_tm_quat": 111, "make_tm_axi": 111, "lengthsq": 111, "_add": 111, "_sub": 111, "_mul": 111, "_unm": 111, "sqpoint3": 111, "math_flt_vector_ctor": 111, "nnn": 111, "op_add": 111, "op_sub": 111, "op_mul": 111, "op_cross": 111, "op_unm": 111, "sqpoint4": 111, "nnnn": 111, "orthonorm": 111, "setcol": 111, "getcol": 111, "sqquat": 111, "quat_ctor": 111, "op_mul_tm": 111, "sqipoint3": 111, "math_int_vector_ctor": 111, "sqe3dcolor": 111, "e3dcolor_ctor": 111, "sqcolor4": 111, "color4_ctor": 111, "c4_set": 111, "cn": 111, "ipoint4": 111, "dpoint3": 111, "color3": 111, "get_quirrel_object_s": 112, "get_quirrel_object_size_as_str": 112, "is_quirrel_object_larger_than": 112, "reset_al": 112, "set_huge_alloc_threshold": 112, "dump_al": 112, "get_memory_allocated_kb": 112, "get_avg_cpu_only_cycle_time_usec": 113, "getavgcpuonlycycletimeusec": 113, "reset_summed_cpu_only_cycle_tim": 113, "workcycleperf": 113, "sqdebugg": 114, "scriptprofil": 114, "reset_valu": 114, "get_total_tim": 114, "detect_slow_cal": 114, "stop_and_save_to_fil": 114, "msec_threshold": 114, "g_perfprofil": 114, "rnd": 115, "frnd": 115, "srnd": 115, "rnd_float": 115, "rnd_int": 115, "set_rnd_se": 115, "get_rnd_se": 115, "gauss_rnd": 115, "uint32_hash": 115, "uint_noise1d": 115, "uint_noise2d": 115, "uint_noise3d": 115, "seed": [115, 158, 159, 164, 245, 254], "dagorshel": 116, "shell_execut": 116, "force_sync": 116, "dagorsystem": 117, "exit": [117, 174, 175, 213, 247, 253, 256, 275], "get_arg_value_by_nam": 117, "get_log_directori": 117, "get_all_arg_values_by_nam": 117, "get_primary_screen_info": 117, "message_box": 117, "set_app_window_titl": 117, "dbglevel": 117, "sanit": 117, "arch_bit": 117, "mb_ok": 117, "mb_ok_cancel": 117, "mb_yes_no": 117, "mb_retry_cancel": 117, "mb_abort_retry_ignor": 117, "mb_yes_no_cancel": 117, "mb_cancel_try_continu": 117, "mb_def_button_1": 117, "mb_def_button_2": 117, "mb_def_button_3": 117, "mb_icon_error": 117, "mb_icon_warn": 117, "mb_icon_quest": 117, "mb_icon_inform": 117, "mb_topmost": 117, "mb_foreground": 117, "mb_native_dlg": 117, "mb_fail": 117, "mb_close": 117, "mb_button_1": 117, "mb_button_2": 117, "mb_button_3": 117, "exit_cod": 117, "mbx_titl": 117, "mbx_text": 117, "mbx_level": 117, "value1": 117, "value2": 117, "gui_const": 117, "dagorsystemfilehandl": 118, "get_meta_info_from_screenshot": 118, "init_file_drop_handl": 118, "cleanup_dagor_system_file_handl": 118, "release_file_drop_handl": 118, "dagortim": 119, "ref_time_tick": 119, "get_time_usec": 119, "get_local_unixtim": 119, "format_unixtim": 119, "unixtime_to_local_timetbl": 119, "local_timetbl_to_unixtim": 119, "unixtime_to_utc_timetbl": 119, "utc_timetbl_to_unixtim": 119, "time_t": 119, "localtimetbl": 119, "utctimetbl": 119, "machin": [119, 177], "clock": 119, "trust": [119, 232], "hi": 119, "utc": 119, "dagorworkcycl": 120, "deferonc": 120, "settimeout": 120, "resettimeout": 120, "setinterv": 120, "time_in_second": 120, "period_in_second": 120, "id_": 120, "timer": [120, 285], "vmnamestr": 120, "vm_name": 120, "run_action_on_main_thread": 120, "au": 120, "auto_update_from_idle_cycl": 120, "vmdata": 120, "autoupdatefromidlecycl": 120, "clear_workcycle_act": 120, "deferredcal": 120, "cleanup_dagor_workcycle_modul": 120, "dainput": 121, "actionsqbind": 121, "devid": 121, "btnid": 121, "ctrlid": 121, "axisctrlthr": 121, "btnctrl": 121, "stickytoggl": 121, "unordcombo": 121, "modcnt": 121, "axisid": 121, "invaxi": 121, "axisrelativev": 121, "instantincdecbtn": 121, "quantizevalonincdecbtn": 121, "minbtn": 121, "maxbtn": 121, "incbtn": 121, "decbtn": 121, "deadzonethr": 121, "nonlin": 121, "maxval": 121, "relincscal": 121, "axisxid": 121, "axisyid": 121, "axisxinv": 121, "axisyinv": 121, "minxbtn": 121, "maxxbtn": 121, "minybtn": 121, "maxybtn": 121, "axissnapangk": 121, "dev_non": 121, "dev_kbd": 121, "dev_point": 121, "dev_gamepad": 121, "dev_joi": 121, "dev_nullstub": 121, "dev_used_mous": 121, "dev_used_kbd": 121, "dev_used_gamepad": 121, "dev_used_touch": 121, "typegrp__mask": 121, "typegrp_digit": 121, "type_button": 121, "typegrp_axi": 121, "type_trigg": 121, "type_steerwheel": 121, "typegrp_stick": 121, "type_sysmous": 121, "type_absmous": 121, "type_stick": 121, "type_stick_delta": 121, "bad_action_handl": 121, "bad_action_set_handl": 121, "axis_null_id": 121, "btn_null_id": 121, "btn_press": 121, "btn_pressed_long": 121, "btn_pressed2": 121, "btn_pressed3": 121, "btn_releas": 121, "btn_released_short": 121, "btn_released_long": 121, "st_in_progress": 121, "st_finish": 121, "st_cancel": 121, "gamepad_vendor_unknown": 121, "gamepad_vendor_microsoft": 121, "gamepad_vendor_soni": 121, "gamepad_vendor_nintendo": 121, "set_long_press_tim": 121, "get_long_press_tim": 121, "set_double_click_tim": 121, "get_double_click_tim": 121, "get_actions_config_vers": 121, "reset_actions_bind": 121, "append_actions_bind": 121, "clear_actions_bind": 121, "load_actions_bind": 121, "save_actions_bind": 121, "get_actions_binding_column": 121, "get_tag_str": 121, "set_actions_binding_column_act": 121, "get_actions_binding_column_act": 121, "get_digital_action_st": 121, "get_analog_axis_action_st": 121, "get_analog_stick_action_st": 121, "set_analog_axis_action_st": 121, "get_digital_action_bind": 121, "get_analog_axis_action_bind": 121, "get_analog_stick_action_bind": 121, "is_action_binding_set": 121, "col": [121, 239], "action_handle_t": 121, "get_analog_stick_action_smooth_valu": 121, "set_analog_stick_action_smooth_valu": 121, "get_action_handl": 121, "get_action_typ": 121, "get_action_nam": 121, "is_action_act": 121, "is_action_intern": 121, "is_action_st": 121, "get_group_tag_for_act": 121, "get_group_tag_str_for_act": 121, "get_action_set_handl": 121, "get_action_set_nam": 121, "get_action_set_act": 121, "setup_action_set": 121, "clear_action_set_act": 121, "reset_action_set_stack": 121, "activate_action_set": 121, "get_action_set_stack_depth": 121, "get_action_set_stack_item": 121, "get_current_action_set": 121, "set_breaking_action_set": 121, "get_action_bind": 121, "set_action_bind": 121, "reset_action_bind": 121, "get_actions_count": 121, "get_action_handle_by_ord": 121, "get_action_sets_count": 121, "get_action_set_handle_by_ord": 121, "start_recording_bind": 121, "start_recording_bindings_for_single_button": 121, "is_recording_in_progress": 121, "is_recording_complet": 121, "finish_recording_bind": 121, "reset_digital_action_sticky_toggl": 121, "get_last_used_device_mask": 121, "get_overall_button_clicks_count": 121, "enable_darg_events_for_button_click": 121, "send_action_ev": 121, "send_action_terminated_ev": 121, "set_digital_event_progress_monitor": 121, "enable_debug_trac": 121, "check_bindings_conflict": 121, "check_bindings_hides_act": 121, "check_bindings_conflicts_on": 121, "get_action_bindings_text": 121, "format_ctrl_nam": 121, "set_main_gamepad_stick_dead_zon": 121, "stick_idx": 121, "dzone": 121, "set_joystick_stick_dead_zon": 121, "get_main_gamepad_stick_dead_zon": 121, "get_joystick_stick_dead_zon": 121, "get_main_gamepad_stick_dead_zone_ab": 121, "get_joystick_stick_dead_zone_ab": 121, "enable_joystick_gyroscop": 121, "set_default_preset_prefix": 121, "get_default_preset_prefix": 121, "load_user_config": 121, "save_user_config": 121, "get_user_config_base_preset": 121, "is_user_config_custom": 121, "reset_user_config_to_preset": 121, "reset_user_config_to_currest_preset": 121, "get_user_prop": 121, "is_user_props_custom": 121, "dump_action_set": 121, "dump_action_sets_stack": 121, "sqsinglebuttonid": 121, "sq_bind_prop": 121, "digitalact": 121, "sq_bind_member_var": 121, "bstate": 121, "bactiv": 121, "bactiveprev": 121, "analogstickact": 121, "daseventssq": 122, "sqdatacach": 123, "init_cach": 123, "request_entri": 123, "abort_request": 123, "del_entri": 123, "get_all_entri": 123, "err_unknown": 123, "err_ok": 123, "err_pend": 123, "err_io": 123, "err_abort": 123, "err_memory_limit": 123, "cache_nam": 123, "entry_kei": 123, "shutdown_datacach": 123, "publicinclud": [126, 174, 262], "editorcommon": 126, "ingameeditor": 126, "inc": 126, "de4_mode_create_ent": 126, "get_saved_compon": 126, "get_template_name_for_ui": 126, "reset_compon": 126, "save_compon": 126, "save_add_templ": 126, "save_del_templ": 126, "is_editor_activ": 126, "is_any_entity_select": 126, "is_asset_wnd_shown": 126, "get_scene_filepath": 126, "clear_entity_save_ord": 126, "add_entity_save_order_comp": 126, "clear_group": 126, "add_group_requir": 126, "add_group_vari": 126, "add_group_variext": 126, "get_ecs_tag": 126, "set_start_work_mod": 126, "get_point_action_op": 126, "get_point_action_mod": 126, "get_point_action_has_po": 126, "get_point_action_po": 126, "get_point_action_ext_id": 126, "get_point_action_ext_nam": 126, "get_point_action_ext_mtx": 126, "get_point_action_ext_sph": 126, "get_point_action_ext_eid": 126, "gather_ri_by_spher": 126, "get_ri_from_ent": 126, "make_cam_spawn_tm": 126, "eid_int": 126, "templ_nam": 126, "comp_name_start": 126, "group_nam": 126, "tsuffix": 126, "idaeditor4embeddedcompon": 126, "get_da_editor4": 126, "daed4": 126, "da_editor4_setup_scen": 126, "fpath": 126, "objed_scenefilepath": 126, "setupnewscen": 126, "eventbus_subscrib": 127, "eventbus_subscribe_onehit": 127, "eventbus_unsubscrib": 127, "eventbus_send": 127, "eventbus_send_foreign": 127, "eventbus_has_listen": 127, "eventbus_has_foreign_listen": 127, "scopedlockwritetempl": 127, "guard": [127, 289], "vmslock": 127, "g_assert": 127, "interlocked_acquire_load": 127, "is_in_send": 127, "clear_on_reload": 127, "scopedlockreadtempl": 127, "itvm": 127, "handlerguard": 127, "handlerslock": 127, "do_with_vm": 127, "set_native_event_handl": 127, "nativeeventhandl": 127, "g_native_event_handl": 127, "is_exports_symbol": 128, "frp_initi": 129, "frp_dont_check_nest": 129, "scriptvalueobserv": 129, "nocopi": 129, "script_ctor": 129, "timechangereq": 129, "gettimechangereq": 129, "timechang": 129, "gettimechang": 129, "sqtrigger": 129, "whitelistmutatorclosur": 129, "updateviamethod": 129, "xc": 129, "updateviacallmm": 129, "_delslot": 129, "_nocomputeerrorfor": 129, "getsourc": 129, "sqcomputedvalu": 129, "set_nested_observable_debug": 129, "make_all_observables_immut": 129, "set_default_def": 129, "bb": 129, "set_recursive_sourc": 129, "set_slow_update_threshold_usec": 129, "recalc_all_computed_valu": 129, "gather_graph_stat": 129, "update_def": 129, "register_stub_observable_class": 129, "observablesgraph": 129, "md5": 130, "sha1": 130, "crc32": 130, "crc32_int": 130, "quirrel_json": 132, "parse_json": 132, "parse_json_from_zstd_stream": 132, "object_to_json_str": 132, "object_to_zstd_json": 132, "ztsd": 132, "compress": [132, 158, 181, 189, 191, 208, 231, 262, 269, 270, 285, 289], "sqjwt": 133, "decod": 133, "jwt_string": 133, "kei": [133, 149, 158, 159, 165, 169, 170, 173, 187, 197, 199, 200, 201, 203, 207, 215, 219, 223, 243, 245, 254, 258, 260, 269, 275, 281, 283, 285], "json_valu": 133, "payload": 133, "jsonvalu": 133, "invalid_token": 133, "wrong_head": 133, "invalid_token_typ": 133, "invalid_token_signature_algorithm": 133, "invalid_payload_compress": 133, "wrong_payload": 133, "signature_verification_fail": 133, "get_native_module_nam": 134, "on_module_unload": 134, "ndbwrite": 135, "ndbread": 135, "ndbtryread": 135, "ndbexist": 135, "ndbdelet": 135, "sqpathfind": 137, "project_to_nearest_navmesh_point": 137, "project_to_nearest_navmesh_point_no_obstacl": 137, "check_path": 137, "find_path": 137, "traceray_navmesh": 137, "polyflag_ground": 137, "polyflag_obstacl": 137, "polyflag_ladd": 137, "polyflag_jump": 137, "polyflag_block": 137, "wish_po": 137, "horz_ext": 137, "start_po": 137, "end_po": 137, "dist_to_path": 137, "platformmisc": 138, "get_locale_lang": 138, "get_locale_countri": 138, "get_platform_string_id": 138, "get_console_model": 138, "get_console_model_revis": 138, "get_default_lang": 138, "is_gdk_us": 138, "ps4_pro": 138, "xboxon": 138, "xboxone_": 138, "xboxone_x": 138, "xbox_lockhart": 138, "xbox_anaconda": 138, "ps5_pro": 138, "nintendo_switch": 138, "consolemodel": 138, "register_platform_modul": 138, "make_platform_export": 138, "bindsqrat": [139, 144], "regexp_str": 139, "fullmatch": 139, "multiextract": 139, "register_utf8": 139, "soundsystemsq": [141, 148], "invalid_sound_handl": [141, 148], "sound_stream_error": [141, 148], "sound_stream_clos": [141, 148], "sound_stream_open": [141, 148], "sound_stream_connect": [141, 148], "sound_stream_buff": [141, 148], "sound_stream_stop": [141, 148], "sound_stream_paus": [141, 148], "sound_stream_plai": [141, 148], "sound_debug_trac": [141, 148], "sound_play_one_shot_3d": [141, 148], "sound_play_one_shot": [141, 148], "sound_release_all_inst": [141, 148], "sound_plai": [141, 148], "sound_set_volum": [141, 148], "sound_init_ev": [141, 148], "sound_release_ev": [141, 148], "sound_set_3d_attr": [141, 148], "sound_set_var": [141, 148], "sound_get_length": [141, 148], "sound_set_timeline_po": [141, 148], "sound_get_timeline_po": [141, 148], "sound_start": [141, 148], "sound_keyoff": [141, 148], "sound_abandon": [141, 148], "sound_is_plai": [141, 148], "sound_init_stream": [141, 148], "sound_open_stream": [141, 148], "sound_close_stream": [141, 148], "sound_set_stream_po": [141, 148], "sound_release_stream": [141, 148], "sound_get_stream_st": [141, 148], "sound_get_stream_state_nam": [141, 148], "sound_get_output_devic": [141, 148], "sound_get_record_devic": [141, 148], "sound_set_output_devic": [141, 148], "sound_set_callback": [141, 148], "snd": [141, 148], "sound_handle_t": [141, 148], "sndsy": [141, 148], "var_nam": [141, 148], "min_max_dist": [141, 148], "stream_handl": [141, 148], "streamstat": [141, 148], "dev_id": [141, 148], "callbacks_": [141, 148], "soundtbl": [141, 148], "sqstatsd": 142, "send_count": 142, "send_gaug": 142, "send_gauge_dec": 142, "send_gauge_inc": 142, "send_profil": 142, "send_histogram": 142, "metric_nam": 142, "metric": [142, 158, 245, 252], "sqsysinfo": 143, "get_user_system_info": 143, "inline_raytracing_avail": 143, "get_batteri": 143, "is_charg": 143, "get_thermal_st": 143, "get_battery_capacity_mah": 143, "get_network_connection_typ": 143, "ts_normal": 143, "ts_light": 143, "ts_moder": 143, "ts_sever": 143, "ts_critic": 143, "ts_emerg": 143, "ts_shutdown": 143, "batteri": 143, "charg": 143, "capac": 143, "cellular": 143, "wi": 143, "fi": [143, 169], "thermal": 143, "_tostr": 144, "charcount": 144, "strtr": 144, "utf8_slic": 144, "utf8_indexof": 144, "win_registri": 145, "regkeyexist": 145, "regvalueexist": 145, "getregstr": 145, "getregint": 145, "deleteregkei": 145, "deleteregvalu": 145, "setregstr": 145, "setregint": 145, "hkey_classes_root": 145, "hkey_current_config": 145, "hkey_current_us": 145, "hkey_local_machin": 145, "hkey_us": 145, "classifi": 149, "prefab": [149, 158, 159, 164, 180, 199, 207, 208, 235, 245, 269], "spline": [149, 162, 167, 174, 175, 216, 256, 258, 264, 275], "grp": [149, 150, 161, 169, 245, 262, 269, 285], "asset_nam": [149, 174, 275], "classnam": [149, 159, 161, 165, 169, 174, 177, 262, 269, 285], "my_hous": 149, "rendinst": [149, 157, 158, 159, 161, 173, 177, 191, 201, 205, 206, 230, 235, 239, 243, 253, 254, 256, 258, 260, 262, 275, 289], "minim": [149, 153, 159, 168, 172, 177, 181, 185, 188, 189, 200, 201, 269, 275, 285, 289], "dd": [149, 158, 161, 191, 201, 205, 229, 245, 252], "skeleton": [149, 158, 161, 162, 167, 169, 286], "flexibl": [149, 160, 161, 208, 235, 285, 289], "suffici": [149, 155, 159, 161, 172, 173, 194, 201, 206, 245, 289], "numer": [149, 161, 214, 230, 232, 235, 260, 269, 285, 289], "dxt1": [149, 161, 269, 275], "dxt5": [149, 161, 269, 275], "mipmaptyp": 149, "mipmapgener": 149, "mipfilt": [149, 262, 269], "filterkais": [149, 262, 269], "mipfilteralpha": [149, 262, 269], "mipfilterstretch": [149, 262, 269], "addru": [149, 174, 262, 269], "addrv": [149, 174, 262, 269], "swizzleargb": [149, 158, 161, 262], "rag0": [149, 161], "hqmip": [149, 158, 161, 262, 269], "mqmip": [149, 158, 262, 269], "lqmip": [149, 158, 262, 269], "gamma": [149, 158, 180, 181, 189, 192, 201, 204, 205, 262], "colorpad": 149, "alphacoveragethresmip9": 149, "alphacoverag": 149, "rtmipgen": 149, "anifunc": 149, "ab": [149, 164], "psd": [149, 190], "argb": 149, "l8": [149, 174], "a8l8": 149, "l16": 149, "mipmapuseexist": 149, "mipmapnon": 149, "filterbox": 149, "filtercub": 149, "medium": [149, 158], "fname": [149, 250, 252, 262, 285], "lod00": [149, 157, 159, 161, 163, 169, 177, 216, 220, 235, 239, 245, 260, 262, 285, 289], "lod01": [149, 169, 216, 218, 228, 235, 239, 245, 250, 262, 285], "lod02": [149, 216, 228, 239, 245, 285], "4000": [149, 275], "lod03": [149, 216, 245], "ref_skeleton": [149, 169, 285], "1_skeleton": 149, "texref_prefix": 149, "low_": [149, 161], "all_anim": 149, "lod_numb": 149, "tank": [149, 150, 163, 245, 257, 269, 283, 288], "turret": [149, 163], "gun": [149, 163, 177], "tank_bodi": [149, 163], "attachsubskel": [149, 163], "attach_to": [149, 163], "bone_turret": [149, 163], "skel_fil": [149, 163], "turret_a": [149, 163], "skel_nod": [149, 163], "bone_gun_a": [149, 163], "gun_a": [149, 163], "bone_gun_b": [149, 163], "gun_b": [149, 163], "add_prefix": [149, 163], "g1": [149, 163], "bone_gun_c": [149, 163], "g2": [149, 163], "turret_b": [149, 163], "parent": [149, 158, 159, 161, 163, 168, 175, 187, 213, 222, 229, 232, 235, 237], "bone": [149, 158, 163, 165, 286], "hierarchi": [149, 161, 162, 163, 175, 189, 196, 216, 229, 236, 239, 241, 243, 245, 269, 285, 289], "worri": [149, 159, 199, 235, 266], "theoret": [149, 165, 216], "simpler": [149, 163, 174, 200, 201, 239, 285, 289], "necess": [149, 163], "papa": [149, 163], "bone_papa": [149, 163], "bone_child": [149, 163], "layer01": [149, 163], "layer02": [149, 163], "layer03": [149, 163], "layer04": [149, 163], "guid": [150, 159, 167, 168, 170, 211, 213, 215, 275, 281, 284, 287, 289], "made": [150, 159, 164, 169, 174, 177, 185, 199, 200, 201, 213, 225, 228, 239, 247, 252], "collis": [150, 153, 157, 158, 159, 161, 164, 175, 218, 226, 230, 234, 235, 245, 249, 252, 254, 258, 264, 285, 288], "uncertainti": 150, "subfold": [150, 239], "landscap": [150, 153, 158, 159, 164, 175, 180, 188, 199, 252, 255, 259, 283], "confirm": [150, 175, 227, 243, 289], "dialog": [150, 168, 254, 269], "launcher": 150, "z_enlisted_launch": 150, "bat": [150, 269, 275, 289], "mission": [150, 172, 173, 186, 205, 269, 281, 287, 289], "dropdown": [150, 213, 235, 239, 283, 285], "click": [150, 168, 175, 177, 216, 218, 220, 221, 223, 224, 227, 228, 229, 231, 235, 237, 239, 243, 245, 247, 254, 269, 283, 285, 289], "notepad": 150, "ex": [150, 159, 160, 231, 250, 260, 262, 266, 269, 270, 275, 277], "gamedata": [150, 169, 173, 174, 178, 194, 201, 205, 283, 289], "your_scene_path": 150, "disablemenu": 150, "haven": [150, 245, 269], "modseditor": 150, "wrench": 150, "doubl": [150, 191, 207, 239, 243], "vehicl": [150, 158, 159, 178, 193, 269, 281, 283, 287], "armada": [150, 283], "aircraft": [150, 161, 199, 206], "tankmodel": [150, 283], "ship": [150, 177, 258, 283], "playabl": [150, 283], "air": [150, 159, 183, 208, 254], "land": [150, 158, 201, 208, 253, 256, 259, 289], "panel": [150, 159, 174, 177, 218, 222, 223, 229, 230, 231, 235, 237, 239, 243, 246, 254, 258, 275, 283, 285, 289], "weapon": [150, 158, 159, 190, 275, 283], "bullet": [150, 201, 208, 214, 280], "he": [150, 283], "armi": [150, 283], "parti": [150, 208, 216], "pvp": [150, 283], "deselect": 150, "wing": [150, 283], "inset": 150, "singlemiss": [150, 283], "water": [150, 155, 159, 202, 230, 253, 254, 256, 258, 275], "gamebas": [150, 169, 173, 174, 178, 194, 245, 258, 268, 269, 283, 289], "Be": [150, 165, 169, 185, 216, 229, 245], "autosav": 150, "workflow": [151, 152, 159, 164, 170, 216, 235, 239, 246, 249, 255, 256, 263, 264, 289], "launch": [151, 168, 175, 213, 260, 269, 283, 289], "overview": [152, 154, 156, 170, 176, 179, 198, 226, 238, 241, 244, 246, 248, 249, 253, 255, 256, 257, 261, 263, 264, 265, 269, 279, 281, 288], "Their": [152, 169, 201, 205, 289], "ladder": [152, 159, 167], "climbabl": [152, 154], "infantri": [152, 153, 154], "navmesh": [152, 153, 154, 257], "technologi": [153, 169, 201, 205, 231], "climb": [153, 155, 289], "visual": [153, 159, 164, 169, 170, 174, 175, 191, 192, 196, 201, 204, 205, 221, 228, 235, 239, 244, 249, 252, 269, 275, 285, 289], "gameobj": [153, 159, 169, 170, 175, 201, 235], "distinct": [153, 158, 169, 188, 189, 201, 204, 245, 272, 275, 285, 289], "straightforward": [153, 169, 201, 235, 258, 269, 285], "observ": [153, 157, 159, 185, 245, 285, 289], "evenli": [153, 164, 197, 237], "hand": [153, 158, 190, 231], "feet": [153, 285], "wall_hol": [153, 159], "indoor": [153, 159, 169, 172, 190, 235, 243], "wall": [153, 159, 172, 173, 174, 177, 190, 194, 200, 201, 235, 258], "volumetyp": [153, 155, 169], "geometr": [153, 173, 199], "convex": [153, 180, 200, 221, 245], "shape": [153, 159, 162, 186, 204, 228, 245, 247, 289], "boxsz": [153, 155], "center": [153, 159, 164, 169, 174, 200, 201, 216, 220, 222, 243, 245, 247, 259, 262, 289], "1m": [153, 208], "isladd": [153, 155], "ladderstepscount": [153, 155], "foot": [153, 158], "proport": [153, 272], "necessarili": 153, "alter": [153, 188, 189, 190, 197, 201, 216, 230, 239], "suit": [153, 192, 197, 201, 245], "decid": [153, 159, 169, 187, 205], "adjust": [153, 155, 157, 158, 159, 162, 164, 165, 168, 169, 172, 173, 174, 175, 188, 191, 192, 196, 197, 200, 201, 204, 205, 216, 221, 222, 235, 239, 243, 245, 247, 252, 254, 258, 262, 266, 269, 283, 285], "matter": [153, 157, 159, 181, 190, 201, 245, 285], "standalon": 153, "alongsid": [153, 159, 169, 245, 247, 260, 285], "collid": [153, 157, 159, 162, 165, 235, 239, 247, 285, 289], "capsul": [153, 221, 285], "incorrect": [153, 157, 159, 169, 186, 189, 190, 194, 200, 201, 224, 235, 239, 245, 254, 289], "wood_ladder_a": 153, "shown": [153, 157, 159, 169, 174, 175, 201, 204, 205, 214, 216, 218, 219, 220, 222, 223, 224, 229, 231, 243, 245, 252, 285, 289], "juli": 153, "2023": [153, 222, 280], "1x1x1m": 153, "pivot": [153, 159, 168, 169, 175, 216, 222, 223, 226, 230, 234, 235, 245, 254, 260, 289], "dag2rir": [153, 264, 281], "articl": [154, 155, 168, 169, 172, 173, 174, 175, 200, 201, 205, 218, 222, 225, 228, 229, 230, 231, 243, 245, 254, 269, 289], "outlin": [155, 168, 169, 181, 189, 209, 235, 237, 239, 244, 278, 280, 289], "behind": [155, 157, 159, 173, 183, 184, 190, 200, 258], "prevent": [155, 157, 159, 169, 172, 173, 174, 177, 183, 192, 194, 197, 201, 216, 223, 230, 235, 245, 258, 262, 269, 285, 289], "carefulli": [155, 173, 185, 190, 216, 222, 232, 266, 275, 285, 289], "altern": [155, 158, 164, 169, 174, 175, 185, 216, 230, 269, 285], "nuanc": [155, 162], "ai": [155, 258, 275], "navig": [155, 158, 159, 168, 175, 218, 219, 221, 222, 224, 225, 228, 229, 230, 231, 232, 239, 243, 246, 255, 256, 264, 266, 272, 277, 285, 289], "ladder_templ": 155, "analyz": [155, 212, 285], "polygon": [155, 157, 164, 190, 237, 239, 245, 275], "5m": 155, "met": [155, 280], "examin": [155, 159, 200, 201, 202, 205, 269, 285], "insuffici": [155, 200, 289], "consecut": [155, 164], "junction": 155, "segment": [155, 164, 186, 228, 247, 259, 285, 289], "obstruct": 155, "experi": [155, 235, 269, 272, 289], "adjac": [155, 214], "lead": [155, 159, 169, 174, 185, 201, 235, 247, 259, 269, 289], "obstacl": [155, 258, 289], "nearbi": [155, 245], "technic": [155, 159, 169, 191, 200, 201, 239, 243, 269], "isn": [155, 159, 169, 190, 200, 201, 205, 235, 245, 254, 258, 269], "ceil": [155, 174, 200], "attic": 155, "floor": [155, 159, 174, 200], "suitabl": [155, 159, 169, 172, 174, 197, 199, 201, 237, 275], "plan": [155, 159, 186, 190, 239, 277, 285], "steep": [155, 201], "unsuit": [155, 201], "overli": [155, 172, 197, 239, 258, 289], "angl": [155, 158, 159, 174, 190, 195, 201, 205, 219, 230, 239, 258, 262], "rail": [155, 289], "far": [155, 158, 159, 165, 175, 199, 200, 260, 289], "nearest": [155, 161, 269], "deeper": [155, 245, 289], "2m": 155, "account": [155, 159, 163, 169, 172, 173, 186, 201, 237, 259], "overabund": 155, "middl": [155, 159, 164, 189, 200, 214, 258, 283], "ramp": 155, "obscur": 157, "partial": [157, 159, 191, 197, 201, 222, 239, 269, 289], "stai": [157, 201, 205], "beyond": [157, 159, 216, 229, 245, 258, 272, 285], "reappear": 157, "occluder_box": [157, 245, 289], "dagorrat": [157, 232, 285, 289], "gi_black": [157, 158, 228, 235, 239], "contrast": [157, 169, 180, 185, 197, 199, 204, 272, 285], "uncheck": [157, 175, 177, 221, 225, 228, 229, 235, 239, 285], "cast_shadow": [157, 285], "poli": [157, 190, 195, 216, 218, 228, 230, 237, 289], "aptli": 157, "regardless": [157, 159, 164, 191, 200, 205, 216, 239, 250], "discourag": [157, 285], "unrot": 157, "retain": [157, 228, 235, 239, 245, 280], "misalign": [157, 201, 289], "disappear": [157, 159, 169, 270], "late": 157, "recheck": 157, "encount": [157, 161, 189, 194, 202, 205, 216, 220, 224, 230, 232, 243, 250, 258, 266, 285, 289], "occludedv": 157, "not_occlud": 157, "check_occlus": 157, "usedynrend": 158, "supportsropt": 158, "vsm": 158, "varianc": 158, "ambient": [158, 199, 207, 226, 231, 234, 239, 245], "ssr": [158, 280], "sun": [158, 200, 245, 252], "amb": [158, 177, 207], "envi": [158, 245, 253, 256], "refl": 158, "transp": 158, "environment": [158, 159, 172], "defaultropt": 158, "dbgshow": 158, "rough": [158, 164, 201, 253, 256, 289], "base_color": 158, "ao": [158, 218, 262], "albedo_ao": [158, 245], "final_ao": 158, "preshadow": [158, 262], "transluc": [158, 204], "translucency_color": 158, "ssr_strength": 158, "strength": [158, 170, 186, 187, 190, 191, 192, 195, 196, 197, 200, 201, 202, 205, 206, 222, 245], "scenefmt": 158, "postfxfmt": 158, "ssaofmt": 158, "postfx_srgb_backbuf_writ": 158, "gbufcount": 158, "gbuffmt0": 158, "gbuffmt1": 158, "gbuffmt2": 158, "shadowpreset": 158, "csmsize": 158, "cascad": [158, 252], "csm": 158, "csmmaxdist": 158, "vsmsize": 158, "vsmmaxdist": 158, "hdrmode": 158, "vsmallow": 158, "grasstransluc": 158, "grass": [158, 180], "terrain": [158, 199, 201, 202, 205, 208, 254, 275], "sides": 158, "stackcount": 158, "texels": 158, "finals": 158, "cachecnt": 158, "buffercnt": 158, "cache_tex0": 158, "cache_tex1": 158, "cache_tex2": 158, "buf_tex0": 158, "buf_tex1": 158, "buf_tex2": 158, "useuavfeedback": 158, "usetoroidalheightmap": 158, "feedback": [158, 159], "toroid": 158, "ps3": [158, 161, 253, 256], "kit": [158, 159, 284], "sdk_folder": 158, "levels_fold": 158, "daeditor3x_additional_plugin": 158, "exclude_dl": 158, "regex": [158, 245], "dll": 158, "allow_debug_bitmap_dump": 158, "bitmap": [158, 225], "levelexpsha1tag": 158, "sha": 158, "associ": [158, 169, 172, 174, 214, 228, 269, 275, 285], "game_fold": [158, 262], "levels_bin_fold": 158, "physmat": 158, "car_param": 158, "texstreamingfil": 158, "texstreamingblock": 158, "navmesh_lay": [158, 258], "useexportbinpath": 158, "impostor": [158, 208, 264, 281], "fx": [158, 275, 289], "usecache2fast": 158, "dedicatedserv": [158, 268], "strip_d3d_r": 158, "direct3d": 158, "collapse_pack": 158, "collaps": [158, 159, 216, 239], "reject_exp": 158, "reject": 158, "allow_patch": [158, 268], "patch": [158, 160, 201, 268, 270], "destgrphdrcach": 158, "packag": [158, 161, 245, 262, 266, 267, 275, 285], "forceexplicitlist": 158, "outer_spac": [158, 161], "outerspac": 158, "outer_space_hq": 158, "stripprefix": 158, "strip": [158, 205], "addtexprefix": 158, "packlist": 158, "maintain": [158, 163, 174, 200, 209, 232, 235, 269, 285, 289], "defaultddsxtexpack": 158, "directdraw": 158, "surfac": [158, 159, 164, 173, 174, 180, 181, 185, 189, 190, 199, 200, 201, 202, 204, 205, 221, 222, 230, 239, 241, 252, 254, 258], "rtmipgenallow": 158, "folderdefault": 158, "ddsxtexpack": [158, 161, 269, 285], "gamerespack": [158, 161, 169, 269, 285], "pertypedest": 158, "tifmask": 158, "data_fold": [158, 262], "aobright": [158, 262], "aofalloffstart": [158, 262], "falloff": 158, "aofalloffstop": [158, 262], "preshadowen": 158, "texturequalitylevel": [158, 262], "qualitylevel": [158, 262], "minheight": [158, 262], "textureheight": [158, 174, 262], "maxjob": 158, "stategraph": 158, "cppoutdir": 158, "dynmodel": [158, 161, 239, 275, 286], "desclistoutpath": [158, 285], "separatemodelmattodescbin": [158, 285], "ignoremappinginpreparebillboardmesh": [158, 285], "prepar": [158, 159, 170, 173, 206, 220, 221, 239, 275, 285, 288], "billboard": 158, "enablemeshnodecollaps": [158, 285], "maxbonescount": [158, 285], "skelet": [158, 208], "setbonepervertex": [158, 285], "maxvprconst": 158, "usedirectbon": 158, "remapshad": 158, "deni": 158, "denyshad": 158, "bat_shad": 158, "rendinst_simpl": [158, 179, 188, 194, 198, 206, 237, 238, 239, 289], "rendinst_simple_glass": [158, 172, 179, 198], "glass": [158, 185, 188, 190, 193], "glass_refract": 158, "dynamic_simpl": [158, 165, 285, 289], "dynamic_nul": 158, "propeller_front": 158, "propeller_sid": 158, "dynamic_glass_chrom": 158, "dynamic_masked_chrom": 158, "dynamic_masked_glass_chrom": 158, "dynamic_illum": 158, "dynamic_mirror": 158, "dynamic_alpha_blend": 158, "glass_crack": 158, "collim": 158, "aces_weapon_fir": 158, "land_mesh_combin": [158, 198, 245, 289], "land_mesh_combined_2x": 158, "random_grass": 158, "tracer_head": 158, "impostorparamsoutpath": 158, "forceriextra": 158, "inclus": [158, 285], "processmat": 158, "preferzstd": 158, "zstd": [158, 280], "writeprecookedfmt": 158, "cook": 158, "a2d": [158, 165, 285], "defmaxtexsz": 158, "physobj": [158, 239, 275, 285, 289], "ragdol": 158, "def_dens": 158, "densiti": [158, 199, 205, 228, 239, 285, 289], "def_masstyp": 158, "def_colltyp": 158, "name_ful": 158, "constraint": [158, 258, 285], "name_tail": 158, "joint": 158, "pelvi": 158, "minlimit": 158, "maxlimit": 158, "damp": 158, "quickli": [158, 159, 186, 219, 239, 241, 243, 269, 285], "motion": [158, 208], "twist": [158, 259], "movement": [158, 165, 201, 235, 245, 254, 285, 289], "spine1": 158, "calf": 158, "clone": [158, 159, 172, 210, 260, 277], "swaplimz": 158, "swap": [158, 159, 164, 194, 216, 235], "neck": [158, 289], "def_help": 158, "animated_nod": [158, 165, 239, 285, 289], "twist_ctrl": 158, "rig": [158, 252, 285], "node0": 158, "node1": 158, "twistnod": 158, "enhanc": [158, 174, 189, 196, 197, 201, 204, 205, 228, 277], "refin": [158, 159, 201, 216], "angdiff": 158, "angular": [158, 289], "lshader": 158, "subgraph": 158, "subgraphsfold": 158, "preferzlib": 158, "zlib": [158, 280], "writeddsxtexpackv": 158, "writegamerespackv": 158, "whole_level": 158, "textures_s": 158, "level_s": 158, "textures_count": 158, "pertain": 158, "max_siz": 158, "max_triangl": 158, "environ": [158, 159, 169, 172, 177, 185, 190, 191, 193, 200, 205, 206, 208, 210, 232, 235, 245, 252, 254, 269, 289], "max_fac": 158, "znear_min": 158, "plane": [158, 159, 164, 174, 195, 200, 201, 205, 216, 237, 283], "znear_max": 158, "zfar_min": 158, "zfar_max": 158, "z_ratio_max": 158, "ratio": [158, 164, 205, 222, 262], "precomput": 158, "cub5": 158, "perlight": 158, "wide": [158, 164, 172, 189, 201, 222, 262], "disablegrass": 158, "gpugrass": 158, "rimgr": 158, "gridcells": 158, "grid": [158, 159, 214, 252, 254, 258, 272], "cell": [158, 200, 201, 214, 245, 258, 272], "subgrids": 158, "mingridcells": 158, "mingridcellcount": 158, "writeopttre": 158, "tree": [158, 164, 191, 196, 201, 222, 228, 229, 239, 243, 245, 247, 258, 262, 275, 285], "packedribb": 158, "tminst12x32bit": 158, "maxrigenpercel": 158, "perinstdatadword": 158, "perinstdatausese": 158, "prefabmgr": 158, "reusabl": [158, 275], "clipmapshaderr": 158, "sky": [158, 245, 283], "weather": [158, 245, 252, 269], "znear": 158, "zfar": 158, "skiesfilepathprefix": 158, "skiesweathertyp": 158, "skiespreset": 158, "skiesglob": 158, "daskiesdepthtex": 158, "ski": [158, 253, 256], "envinam": 158, "morn": 158, "dai": [158, 173, 200, 245, 252], "night": [158, 172, 185, 200], "hmap": [158, 258], "scnexport": 158, "removeinsidefac": 158, "inner": [158, 159, 169], "assetview": [158, 245, 275, 289], "anti": 158, "caption": 158, "label": [158, 165, 214, 225], "show_no_aa": 158, "elev": [158, 205, 222, 258], "usemeshsurfac": 158, "requiretiletex": 158, "hascolortex": 158, "haslightmaptex": 158, "storenxzinltmaptex": 158, "nxz": 158, "genfwdradiu": 158, "forward": [158, 174], "genbackradiu": 158, "gendiscardradiu": 158, "landclasslay": 158, "attr": [158, 239], "lightmapcvtprop": 158, "addr": 158, "maxtracedist": 158, "shader_var": [158, 205], "blur_lod": 158, "blur": [158, 172, 190, 197, 199], "bound_with_camera": 158, "camera": [158, 173, 175, 185, 190, 196, 205, 216, 243, 245, 253, 254, 256, 285], "particularli": [158, 159, 201, 216, 231, 245, 266, 269, 270, 285], "freecamera": [158, 175], "move_step": 158, "strife_step": 158, "strafe": 158, "control_multipli": 158, "maxcamera": 158, "precis": [158, 162, 164, 196, 201, 205, 206, 222, 228, 231, 266, 285, 289], "grain": [158, 245], "person": [158, 159, 208], "shooter": [158, 159, 208], "weapon_mod_st": 158, "weapon_select": 158, "vehicle_select": 158, "seat_typ": 158, "seat": [158, 289], "heal_item_select": 158, "heal": 158, "weap_stat": 158, "pos_stat": 158, "move_st": 158, "move_ang": 158, "pers_cours": 158, "cours": [158, 177, 201, 262], "aim_pitch": 158, "torso_lean": 158, "torso": [158, 285], "lean": 158, "torso_rot": 158, "bolt_act": 158, "progress": [158, 181, 218, 219, 221, 222, 275, 285], "bolt": 158, "trackbar": 158, "reload_progress": 158, "reload_styl": 158, "single_reload_progress": 158, "single_reload_st": 158, "device_progress": 158, "device_st": 158, "deflection_progress": 158, "deflect": 158, "deflect_angl": 158, "hand_ik_mul": 158, "ik": [158, 285], "changeweapon_progress": 158, "throw_progress": 158, "action_progress": 158, "recover_progress": 158, "gesture_progress": 158, "gestur": 158, "fps_view": 158, "scenario": [158, 159, 169, 181, 185, 200, 201, 205, 269, 270], "camof": 158, "camaxi": 158, "camupaxi": 158, "fixed_dir": 158, "pitch_param": 158, "yaw_param": 158, "yaw": 158, "Near": 158, "hidenod": 158, "_cmp": [159, 175], "_random": 159, "_gameobj": 159, "assembl": [159, 175, 200, 235, 245, 277, 285], "hous": [159, 164, 201, 237, 243, 245, 254, 289], "interior": [159, 193, 201, 235], "sole": [159, 201, 205, 243, 254], "arrang": [159, 239], "obj_nam": 159, "curli": [159, 250], "namesak": [159, 239], "table_a": [159, 243], "Or": [159, 189, 200, 201, 245], "table_a_plates_cmp": 159, "earlier": [159, 169, 175, 201, 243, 247, 285, 289], "priorit": [159, 289], "alphabet": 159, "subdirectori": [159, 161, 239, 245, 275, 285], "rearrang": [159, 214], "compositor": 159, "infinit": [159, 202], "is_table_a_dinner_chairs_cmp": 159, "dine": 159, "chair": 159, "is_book_case_shelf_0_7m_a_cmp": 159, "meter": [159, 164, 169, 172, 180, 197, 199, 201, 202, 219, 235, 245, 259, 262, 285], "shelf": 159, "bookcas": 159, "year": [159, 252], "becam": [159, 200, 201], "degre": [159, 172, 174, 195, 200, 201, 247, 262, 289], "percent": 159, "ent": [159, 243], "obj_name1": 159, "weight": [159, 164, 197, 205, 216, 222, 235, 239, 243, 285], "obj_name2": 159, "familiar": [159, 225, 228, 243], "0001": 159, "1000": [159, 164, 191, 201, 206, 262], "neighbor": [159, 200], "perceiv": 159, "rest": [159, 169, 186, 189, 191, 197, 216, 239], "semicolon": [159, 250], "jump": [159, 201, 235, 257], "tabul": 159, "indent": [159, 213, 214], "reinforc": 159, "obj_name0": 159, "absenc": [159, 185], "obj_name3": 159, "rot_x": [159, 164, 230], "rot_i": [159, 164, 230], "rot_z": [159, 164, 230], "yscale": [159, 164, 230], "offset_": 159, "letter": [159, 181, 214, 239, 245, 250, 254], "deviat": [159, 186, 235], "unspecifi": 159, "rot_": 159, "180": [159, 174, 200, 239], "upward": [159, 189, 201, 231], "inconveni": 159, "varieti": [159, 181, 197, 200, 201, 232, 289], "shutter": [159, 194], "cumbersom": [159, 214, 232], "peopl": 159, "_rot": 159, "_offset": 159, "_transform": 159, "_l": 159, "_r": [159, 199], "_shutter_rot_l": 159, "_shutter_rot_r": 159, "name_city_house_window_shutter_1200x1900_a_l_cmp": 159, "name_city_house_window_shutter_1200x1900_a_l": 159, "elsewher": [159, 185], "feasibl": [159, 200, 270], "blind": 159, "fly": [159, 175, 285], "inattent": 159, "thing": [159, 169, 200, 213], "90": [159, 165, 172, 174, 178, 195, 201, 222, 230], "stick": [159, 205, 235], "frequent": [159, 200, 201, 216, 232, 245, 252, 260], "harder": 159, "didn": [159, 197], "imagin": [159, 201], "tall": [159, 195, 258, 262], "cup": 159, "shift": [159, 164, 168, 175, 186, 190, 192, 195, 200, 201, 223, 230, 231, 237, 239, 259, 272, 289], "perhap": [159, 213], "table_b": [159, 243], "05": [159, 186, 194, 289], "cup_a": [159, 243], "cup_b": 159, "tabletop": [159, 190], "subcomposit": [159, 235, 243], "shelv": [159, 235], "cabinet": [159, 235], "car": [159, 188, 190, 197, 206, 226, 269, 289], "door": [159, 190, 194, 239, 289], "windshield": [159, 289], "modular": [159, 191, 201, 205, 208], "health": 159, "ammunit": [159, 283], "equip": 159, "loot_box": 159, "horizont": [159, 174, 190, 192, 195, 200, 201, 202, 204, 205, 207, 214, 245, 289], "clariti": [159, 197, 201, 209, 235, 272, 289], "indoor_wal": 159, "envi_prob": [159, 172, 173, 190, 193], "children": [159, 235, 239], "subsequ": [159, 269, 272, 285, 289], "rigid": [159, 288], "urn": 159, "amphora": 159, "spike": 159, "ambigu": 159, "circl": [159, 235], "contact": [159, 208, 218, 219, 220, 221, 222, 223, 225, 228, 229, 230, 231, 289], "overus": [159, 191], "difficult": [159, 201, 289], "barrel": 159, "took": 159, "tent": [159, 289], "crate": 159, "forget": [159, 169, 173, 201, 235, 239], "emphas": [159, 188, 200, 201], "vast": [159, 245, 254], "decor": [159, 201], "vase": [159, 197], "arbitrarili": 159, "mindlessli": 159, "magic": [159, 200], "mere": [159, 169, 201], "cupboard": 159, "wil": 159, "lie": [159, 216, 239], "closet": 159, "upsid": 159, "shoebox": 159, "lid": 159, "shoe": 159, "thick": [159, 164, 179, 185, 201, 245, 272, 289], "neglect": 159, "quit": [159, 201], "basin": 159, "wardrob": 159, "artist": [159, 169, 174, 177, 204, 205], "impress": [159, 200], "permiss": [159, 160, 277, 280], "rational": 159, "truli": 159, "inevit": [159, 201, 272], "revis": 159, "sake": 159, "aris": [159, 200, 201, 206, 235, 239, 280], "seek": 159, "illus": [159, 200], "scatter": [159, 164, 197, 275], "painstakingli": 159, "involv": [159, 165, 169, 172, 200, 205, 247, 285, 289], "sit": [159, 259], "ground": [159, 164, 172, 199, 202, 205, 222, 245, 254, 258, 283], "imposs": [159, 200], "mind": [159, 169, 172, 173, 174, 201, 205, 235, 243, 245, 262], "autom": [159, 174, 201, 220, 269, 285], "tweak": [159, 177, 181, 269], "utterli": 159, "impract": [159, 199], "sift": 159, "unread": [159, 245, 272], "tangl": 159, "furnish": 159, "cram": 159, "enorm": [159, 200], "leverag": 159, "everyon": [159, 161], "hour": [159, 193, 269], "stori": 159, "toward": [159, 200, 247], "thought": [159, 235], "homeown": 159, "love": 159, "admir": 159, "favorit": 159, "seamlessli": [159, 174, 199], "poorli": 159, "disrupt": [159, 173, 216, 260], "massiv": 159, "headach": 159, "colleagu": 159, "wast": [159, 214, 269], "propag": 159, "inabl": 159, "spent": 159, "adher": [159, 209, 230, 275, 280], "variat": [159, 164, 169, 186, 188, 197, 201, 205, 230], "exterior": [159, 193, 194, 200, 201], "furnitur": 159, "dishwar": 159, "fixabl": 159, "few": [159, 169, 201, 232, 235, 239, 262, 269, 272, 289], "unobtrus": 159, "chapter": [159, 214], "aren": [159, 196, 201, 269], "is_": 159, "mistakenli": 159, "outdoor": [159, 169, 172, 173, 190], "sink": 159, "pai": [159, 169, 175, 232, 289], "attent": [159, 169, 175, 213, 232, 289], "is_table_abc_random": 159, "themat": 159, "ancient": 159, "unknowingli": 159, "futurist": 159, "place_typ": [159, 230, 235], "fachwerk_horse_cart_a_cmp": 159, "999018": 159, "0443057": 159, "7688": 159, "0028134": 159, "22241": 159, "haystack_i": 159, "020657": 159, "999787": 159, "92909": 159, "47888": 159, "dagger": 159, "pole": [159, 164, 174, 258], "pile": [159, 201, 202, 205, 235], "debri": [159, 202, 228, 289], "unaffect": [159, 205], "tilt": [159, 164, 235, 254, 289], "conform": [159, 181, 209, 245, 289], "bucket": 159, "bicycl": 159, "bbox": [159, 230, 239, 241, 254, 289], "undul": 159, "haystack": 159, "board": 159, "cart": [159, 258], "foundat": [159, 201, 202, 230, 237, 239, 254], "outermost": 159, "floatabl": [159, 254], "struggl": 159, "unclear": [159, 175, 250, 272], "recal": [159, 201, 230], "millimet": 159, "perfectli": [159, 174, 200, 202], "dp": [159, 239], "displac": [159, 180, 186, 192, 196, 205, 221], "paint": [159, 178, 179, 186, 187, 188, 191, 192, 201, 204, 239, 245, 254, 289], "hung": 159, "drift": 159, "quantizetm": 159, "almost": [159, 169, 181, 185, 201, 205], "sheer_cliff_a": 159, "sheer_cliff_a_prefab_collis": 159, "pro": 159, "con": 159, "toi": 159, "dish": 159, "uniformli": [159, 164, 174, 186, 200, 201, 205, 230], "fabric": [159, 187, 197, 288], "shop": 159, "wear": [159, 189, 197, 199, 201], "ignoreparentinstse": 159, "piec": [159, 200, 285, 289], "is_high_heel_shoe_a": 159, "0888685": 159, "939605": 159, "205868": 159, "49344": 159, "244331": 159, "902145": 159, "896062": 159, "0213662": 159, "484326": 159, "40811": 159, "9364": 159, "31": [159, 204], "9424": 159, "is_high_heel_shoebox_a_open": 159, "0765914": 159, "997063": 159, "67105": 159, "93796": 159, "24": [159, 189], "8412": 159, "city_1_department_store_shops_stuff_cmp": 159, "misplac": 159, "unexpectedli": [159, 195, 289], "monitor": [159, 235, 239, 245, 252, 285], "unfinish": 159, "theori": [159, 269, 280], "delv": [159, 269], "disadvantag": 159, "elabor": 159, "challeng": [159, 200, 289], "central": [159, 254, 281], "workaround": [159, 216, 245], "instant": 159, "snap": [159, 241, 245, 254], "digit": [159, 230, 250, 260], "_000": [159, 260], "table_a_000": 159, "table_a_001": 159, "table_a_002": 159, "_origin": [159, 260], "table_origin": 159, "_dag2rir": 159, "simple_dag": [159, 260], "no_tex": 159, "remind": 159, "thousand": [159, 174, 222, 243], "undo": [159, 289], "lose": [159, 177], "unsav": [159, 165], "gizmo": [159, 243], "intuit": 159, "decompos": [159, 247], "hole": [159, 201, 235], "probe": [159, 190, 235], "wherea": 159, "assembli": [159, 169, 245, 289], "dresser": 159, "chairs_abc_random": 159, "dgs_set": 160, "fundament": [160, 177], "upon": [160, 201, 216, 224, 231, 239, 260, 262, 275], "__allowedconfigoverrid": 160, "overridden": [160, 161, 169, 178, 201, 235, 250], "watchdog": 160, "robust": 160, "tif": [161, 177, 189, 190, 197, 199, 200, 201, 207, 237, 262, 272, 275, 285], "inert": 161, "hangar_watch_tower_d": 161, "hangar_watch_tower_d_collis": 161, "airfield_workshop_a_overlai": 161, "my_asset": 161, "stopprocess": [161, 169, 285], "my_textur": 161, "my_model": 161, "inherit_rul": 161, "scan_asset": [161, 285], "commit": [161, 209, 252, 262, 268, 278], "nest": [161, 201, 214, 216, 235, 236, 243, 245, 275, 285], "pack_nam": 161, "combat_suit": 161, "name_src": [161, 269], "ddsxtexpackprefix": [161, 269], "gamerespackprefix": 161, "path_src": 161, "dir_1": 161, "dir_2": 161, "260": 161, "stricmp": 161, "fidx": 161, "getfold": 161, "parentidx": 161, "exportprop": 161, "def_val": 161, "continu": [161, 165, 171, 186, 201, 208, 214, 239, 259, 269, 285], "foldernam": 161, "pack_suffix": 161, "src_fidx": 161, "makerelfolderpath": 161, "buf2": 161, "virtual_res_blk": [161, 165, 169, 174, 177, 262, 269, 275, 285], "_nm": 161, "warthund": [161, 180, 270], "abc": [161, 164], "ttt": 161, "my_dynmodel": 161, "txt": [161, 210, 237, 239, 280], "dag_my_dynmodel": 161, "export_pc": 161, "_ps4": 161, "_and": 161, "_mask": 161, "_tex_m": [161, 189], "preced": [161, 201, 243, 289], "escap": [161, 212], "reprocess": [161, 169], "_n": [161, 262], "_dmg": [161, 239], "_expl": 161, "_insid": 161, "dynamicdef": 162, "clipmap": [162, 180, 202, 256], "hdr_mode": 162, "sdk": [162, 277], "levelsblkprefix": 162, "level_metr": 162, "genobjtyp": 162, "dagored_visibility_tag": 162, "dagored_disabled_plugin": 162, "daeditorexportord": 162, "projectdefault": 162, "shader_glob_vars_schem": 162, "heightmap": [162, 164, 180, 187, 188, 202, 204, 252, 258, 259], "additional_platform": 162, "assetlight": 162, "defprojectloc": 162, "animcharview": 162, "chain": [162, 163, 259], "regexp": [162, 213, 222], "loft": [162, 180, 256], "node_flag": 162, "obj_gener": 162, "hda": 162, "randomopacitymulacross": 164, "randomopacitymulalong": 164, "reduct": [164, 272], "delta": [164, 258], "road": [164, 259], "sidewalk": 164, "sand": [164, 199, 201], "afg_road_c": 164, "matnam": 164, "loftlayerord": [164, 259], "subdivcount": 164, "subdivis": 164, "smoother": [164, 186, 196, 201, 222, 285], "shapesubdivcount": 164, "flipuv": 164, "uvw": 164, "vtile": 164, "usiz": 164, "extrud": 164, "gain": 164, "cullcw": 164, "invert": [164, 185, 187, 188, 189, 194, 197, 205, 231, 289], "placeaboveht": 164, "bake": [164, 169, 190, 193, 199, 218, 231, 237, 241, 258, 263, 264, 289], "minut": [164, 221], "roadbehavior": 164, "onto": [164, 200, 202, 222, 254, 289], "95": [164, 201], "htteststep": 164, "followhil": 164, "followhollow": 164, "beneath": [164, 188, 237], "hill": [164, 254], "lift": [164, 214], "depress": 164, "maxherr": 164, "clarif": 164, "roadtestwidth": 164, "curvaturestrength": 164, "curvatur": [164, 197], "minstep": 164, "maxstep": 164, "subdivid": 164, "interpol": [164, 174, 187, 197, 205], "integral_mapping_length": 164, "arc": [164, 280], "sweepwidth": [164, 259], "landclass": 164, "riverbank": 164, "addfuzzysweephalfwidth": [164, 259], "50": [164, 169, 185, 188, 189, 197, 200, 201, 205, 221, 222, 228, 269], "sweep2width": [164, 259], "objgen": 164, "asphalt": [164, 199], "avenu": 164, "dirt": [164, 189, 199, 201], "cross": [164, 175, 258, 269, 275, 285], "pt": 164, "p4": [164, 178, 250, 262], "opposit": 164, "curv": [164, 190, 199, 200, 259, 289], "differenti": [164, 188], "75": [164, 169, 172, 201, 216, 269], "rel_to_collis": 164, "move_to_min": 164, "drop": [164, 220, 230, 254], "sgeometri": 164, "rseed": 164, "111": 164, "setseedtoent": 164, "repeatedli": 164, "placeatpoint": 164, "citi": 164, "subtract": [164, 187, 192, 197, 202], "gentag": 164, "widest": 164, "startpad": [164, 259], "endpad": [164, 259], "fence_norm": [164, 259], "tightfenceori": [164, 259], "chord": 164, "shorter": 164, "gap": [164, 169, 201, 258, 289], "filler": 164, "integral_end_ent": 164, "tightfenceintegr": 164, "irregular": [164, 259], "contour": [164, 228, 289], "placeatverystart": 164, "placeatveryend": 164, "repetit": 164, "17": [164, 169, 220, 225, 228], "modern_siding_suburb_building_a": 164, "gentagseq": 164, "aaaaaaa": 164, "abbccaccabcca": 164, "quarter": 164, "xzscale": 164, "dgr_shape_to_loft": 164, "mat": [164, 180, 216, 228], "render_landmesh_combin": 164, "ctrl": [164, 175, 223, 230, 235, 237, 239, 247, 289], "unhidden": 165, "dope": 165, "sheet": [165, 201], "key_start": [165, 285], "key_end": [165, 285], "discrep": [165, 185, 285], "studio": [165, 277], "skin": [165, 275, 286], "alt": [165, 175, 235, 289], "cautiou": [165, 201, 205], "534": 165, "enlist": [165, 168, 175, 208, 262, 285], "masstyp": [165, 239, 285, 289], "crsed": 165, "question": [165, 201, 252, 285, 289], "author": [165, 214, 221, 222, 225, 229, 285, 289], "vlasov": [165, 285, 289], "war": [165, 180, 195, 198, 201, 208, 232, 237, 239, 245, 269, 281, 285, 287, 289], "thunder": [165, 180, 195, 198, 201, 208, 232, 237, 239, 245, 269, 281, 285, 287, 289], "animblendnodeleaf": [165, 285], "animation_fil": 165, "animation_nam": 165, "durat": [165, 169, 222, 285], "own_tim": [165, 285], "eoa_irq": [165, 285], "addmovedirh": 165, "addmovedist": 165, "hub": [165, 281], "dabuild": [165, 174, 245, 247, 262, 264, 267, 275, 285], "opt": [165, 285], "posep": [165, 285], "01": [165, 169, 190, 201, 205, 262, 272, 285], "rotep": [165, 285], "sclep": [165, 285], "animtre": [166, 286], "photometr": [167, 169, 170, 172, 173], "fixtur": [167, 169, 170, 175], "catalog": [167, 170], "proxymat": [167, 176, 237, 239], "rendinst_interior_map": [167, 198], "rendinst_lay": [167, 188, 198, 203], "rendinst_layered_lightmap": [167, 198], "rendinst_parallax_ic": [167, 198], "rendinst_perlin_lay": [167, 188, 197, 198, 201, 204, 232, 237], "rendinst_simple_emiss": [167, 198], "simple_aces_detail": [167, 198], "famili": [167, 198, 252], "land_mesh_combined_dec": [167, 198], "streamlin": [168, 236, 289], "battl": [168, 208], "berlin": [168, 175], "goebbels_villa": 168, "easiest": 168, "importantli": 168, "arrow": [168, 192], "is_chandelier_h_tall_double_on_cmp": 168, "prompt": [168, 175, 220, 254], "industrial_lamp_steel_wall_a": 169, "lamp": [169, 172, 173, 174, 192, 193], "industrial_lamp_steel_wall_a_bas": 169, "detach": [169, 216, 289], "computation": [169, 190, 201, 205], "cheaper": [169, 191, 197], "industrial_lamp_steel_wall_a_flicker_dynmodel": 169, "glow": [169, 185, 200, 204], "industrial_lamp_steel_wall_a_flicker_char": 169, "industrial_lamp_steel_wall_a_flicker_skeleton": 169, "industrial_lamp_steel_wall_a_flicker_8m_light": 169, "gamer": [169, 172, 173, 245, 253, 256, 262, 285], "industrial_lamp_steel_wall_a_flicker_8m_mesh": 169, "industrial_lamp_steel_wall_a_flicker_8m_cmp": 169, "industrial_lamp_steel_wall_a_flicker_8m_templ": 169, "highlight": [169, 175, 188, 197, 219, 225, 228, 230, 235, 245, 247, 275, 285, 289], "industrial_lamp_steel_wall_a_": 169, "flicker_8m_light": 169, "divid": [169, 188, 194, 200, 201, 205, 222, 231, 235, 239, 243, 258, 269, 285, 289], "damag": [169, 188, 226, 230, 234, 239, 280, 289], "major": [169, 193], "industrial_lamp_steel_wall_a_on": 169, "constantli": 169, "illumin": [169, 172, 173, 185, 203, 207, 208, 222], "bulb": [169, 172, 174, 175, 185, 190, 206], "intens": [169, 172, 174, 181, 183, 185, 188, 189, 192, 194, 197, 201, 205, 206, 231, 289], "interest": [169, 175, 216, 243], "flat": [169, 190, 204, 289], "uninterest": 169, "dynamic_emiss": [169, 172], "vanish": 169, "destroyable_with_rendinst": [169, 173], "_destr": 169, "rendinst_dmg": [169, 289], "abruptli": 169, "dmg": [169, 239], "consider": [169, 170, 201, 277, 286], "rendinst_emiss": [169, 172, 177, 179, 193, 198], "sci": 169, "wish": [169, 245], "awar": [169, 205], "unsur": [169, 177], "philosophi": 169, "_dynmodel": [169, 286], "80": [169, 222, 262], "allowproxymat": [169, 177, 262], "2_skeleton": [169, 285], "_skeleton": 169, "addskinnod": [169, 285], "reducenod": [169, 285], "2_dynmodel": [169, 285], "_dynmodel_skeleton": 169, "_dynmodel_dynmodel": 169, "_ri_collision_lod1": 169, "dm": 169, "hybrid": 169, "renderinst": 169, "game_log": 169, "defcollid": 169, "abstract": [169, 201], "essenc": [169, 269, 285], "_char": [169, 286], "dummi": 169, "sfx": 169, "ref_dynmodel": [169, 172, 173], "sidewai": 169, "961074": 169, "27629": 169, "08593e": 169, "08": [169, 214], "25591e": 169, "54979e": 169, "624191": 169, "270539": 169, "0204315": 169, "light_flick": 169, "paus": [169, 252, 289], "proxim": 169, "_use": 169, "light_flicker_with_spark": 169, "light_flicker__attack_tim": 169, "light_flicker__on_tim": 169, "light_flicker__release_tim": 169, "light_flicker__off_tim": 169, "light_flicker__on_bright": 169, "light__bright": 169, "light_flicker__off_bright": 169, "light_flicker__noise_brightness_on": 169, "amplitud": [169, 186, 187, 195, 253, 256], "light_flicker__noise_brightness_off": 169, "light_flicker__noise_tim": 169, "spark": 169, "ignit": 169, "lit": [169, 173, 262], "fade": [169, 174, 185, 197, 199, 201, 202, 206, 262], "determinist": 169, "light_flicker_with_sparks_nightli": 169, "nighttim": [169, 173, 185, 206], "chanc": [169, 178, 189, 201], "light_flicker__sparkseffectspawnch": 169, "envir_sparks_burst_tiny_smok": 169, "spot_light_little_b": 169, "light_flicker_updater_light": 169, "light_flicker_updater__templ": 169, "light__max_radiu": 169, "light__color": 169, "208": 169, "191": 169, "152": [169, 174], "121": 169, "light__nightli": [169, 173], "elimin": [169, 201, 289], "ti": [169, 175, 235], "hallwai": 169, "light_flicker_updater_mesh": 169, "animchar__r": 169, "omni": [170, 172, 173], "photometri": 170, "workspac": [170, 252, 254], "identif": [170, 219], "bunker_lamp_ceiling_b_on": 171, "is_chandelier_m_onoff_cmp": 171, "is_chandelier_m_damaged_onoff_cmp": 171, "is_chandelier_m_damaged_on_cmp": 171, "town_lamp_a_on": 171, "is_african_lamp_a_glass_on": 171, "is_lamp_ceiling_a_on_cmp": 171, "is_lamp_ceiling_b_on_cmp": 171, "normandy_railway_bunker_a_projector_a_on_cmp": 171, "factory_lamp_c_d_on_cmp": 171, "garage_floor_lamp_b_on": 171, "factory_lamp_a_d_on_cmp": 171, "factory_lamp_a_e_on_cmp": 171, "factory_warning_lamp_a_on_cmp": 171, "hangar_projector_a_on_cmp": 171, "us_ammunition_bunker_lamp_ceiling_a_on": 171, "factory_lamp_b_a_on_cmp": 171, "factory_lamp_b_b_on_cmp": 171, "factory_lamp_b_c_on_cmp": 171, "factory_lamp_b_d_on_cmp": 171, "factory_lamp_c_a_on_cmp": 171, "factory_lamp_c_b_on_cmp": 171, "factory_lamp_c_c_on_cmp": 171, "is_troglodyte_lamp_a_on_cmp": 171, "is_troglodyte_lamp_b_on_cmp": 171, "is_troglodyte_lamp_c_on_cmp": 171, "is_troglodyte_lamp_d_on_cmp": 171, "is_troglodyte_lamp_e_on_cmp": 171, "is_troglodyte_lamp_f_on_cmp": 171, "is_troglodyte_lamp_g_on_cmp": 171, "factory_lamp_c_on_cmp": 171, "factory_lamp_e_a_on_cmp": 171, "factory_lamp_d_a_on_cmp": 171, "factory_lamp_d_b_on_cmp": 171, "factory_lamp_d_c_on_cmp": 171, "factory_lamp_e_b_on_cmp": 171, "factory_lamp_f_c_on_cmp": 171, "factory_lamp_e_c_on_cmp": 171, "factory_lamp_f_a_on_cmp": 171, "factory_lamp_f_b_on_cmp": 171, "industrial_lamp_steel_floor_a_far_on_cmp": 171, "industrial_lamp_steel_wall_a_far_on_cmp": 171, "factory_lamp_g_on_cmp": 171, "lamppost_q_on_cmp": 171, "is_lamp_wall_f_on": 171, "wall_lamp_a_onoff_b_cmp": 171, "berlin_lamp_c_on_cmp": 171, "lamp_wall_e_a_on_cmp": 171, "is_lamp_wall_e_sh_on_cmp": 171, "bunker_lamp_wall_a_on": 171, "is_lamp_wall_g_on_cmp": 171, "150cm_flak_sw_37_on_cmp": 171, "garage_floor_lamp_a_b_on": 171, "cdk_lamp_a_on_cmp": 171, "150cm_flak_sw_37_statick_on_cmp": 171, "bunker_lamp_oil_a_on_hook_cmp": 171, "is_lamp_celling_a_b_on_cmp": 171, "is_lamp_celling_a_on_cmp": 171, "is_lamp_celling_c_on_cmp": 171, "is_chandelier_h_tall_on_cmp": 171, "is_lamp_celling_b_a_dmg_on_cmp": 171, "is_chandelier_a_on_cmp": 171, "is_lamp_celling_b_b_dmg_on_cmp": 171, "is_chandelier_b_on_cmp": 171, "is_lantern_hanging_a_on": 171, "is_lantern_hanging_ceiling_a_on": 171, "is_lantern_hanging_wall_a_on": 171, "is_lamp_wall_a_on_cmp": 171, "is_lamp_celling_b_on_cmp": 171, "is_chandelier_h_on_cmp": 171, "wooden_power_pole_d_on_cmp": 171, "wooden_power_pole_f_on_cmp": 171, "wooden_power_pole_d_glass_on": 171, "lamppost_a_on_cmp": 171, "lamppost_b_on_cmp": 171, "lamppost_c_on_cmp": 171, "lamppost_d_on_cmp": 171, "lamppost_e_on_cmp": 171, "lamppost_f_on_cmp": 171, "lamppost_g_on_cmp": 171, "lamppost_h_on_cmp": 171, "lamppost_i_on_cmp": 171, "lamppost_j_on_cmp": 171, "lamppost_k_on_cmp": 171, "lamppost_l_on_always_cmp": 171, "lamppost_m_on_cmp": 171, "wall_lamp_a_on_cmp": 171, "lamppost_huge_a_on_cmp": 171, "lamppost_huge_b_on_cmp": 171, "lamppost_huge_c_on_cmp": 171, "lamppost_huge_a_glass_on": 171, "lamppost_a_glass_on": 171, "lamppost_b_glass_on": 171, "lamppost_c_glass_on": 171, "lamppost_d_glass_on": 171, "lamppost_f_glass_on": 171, "lamppost_g_glass_on": 171, "lamppost_i_glass_on": 171, "lamppost_j_glass_on": 171, "lamppost_k_glass_on": 171, "lamppost_l_glass_always_on": 171, "lamppost_l_glass_on": 171, "lamppost_m_glass_on": 171, "wall_lamp_a_glass_on": 171, "bonfire_a_vfx_cmp": 171, "is_lamp_table_a": 171, "is_lamp_floor_a": 171, "is_table_lamp_b": 171, "is_table_lamp_a": 171, "is_lamp_wall_b": 171, "is_lamp_wall_c": 171, "is_lamp_wall_d": 171, "f12": [172, 173, 175, 205], "spot": [172, 173, 174, 197], "cone": 172, "chandeli": [172, 175, 185], "five": 172, "eight": [172, 201], "realiti": [172, 201], "room": [172, 173, 185], "stronger": [172, 185, 190, 197, 201, 289], "spotlight": [172, 173, 175, 206], "six": [172, 200, 247], "whenev": [172, 177], "unintention": 172, "standpoint": 172, "hesit": [172, 173], "conjunct": [172, 275], "degrad": [172, 173, 223, 272], "balanc": [172, 173, 285, 289], "natur": [172, 197, 200, 205, 221, 231, 237, 254, 289], "torch": [172, 173], "candl": 172, "kerosen": [172, 174], "campfir": 172, "yellow": [172, 185, 245, 258], "orang": [172, 202], "gradient": [172, 191, 192, 197, 201, 202, 204], "inward": [172, 237, 247], "percentag": [172, 228, 247], "radii": 172, "harm": 172, "minor": [172, 231, 260, 285, 289], "desk": 172, "sconc": [172, 174], "decim": [172, 200], "sharper": [172, 189, 190, 201, 205], "sharp": [172, 190, 195, 197, 200, 201, 205, 237, 239, 289], "manmade_common": [172, 174, 245], "feel": 172, "ies_": [172, 174], "ies_barsed_lamp_b": 172, "ruin": [172, 201], "subtl": [172, 197, 201], "gameobject": [172, 173, 262], "template_nam": 172, "name_of_dynmodel": 172, "omni_light_restriction_box": [172, 173], "omni_light": [172, 174, 175], "inappropri": 173, "guardhous": 173, "hangar": [173, 200, 245, 269], "light__use_box": 173, "street": [173, 258], "emerg": [173, 174], "lamppost_d_glass_flicker_dynmodel": 173, "cut": [173, 181, 191, 200, 201, 228, 289], "factory_lamp_a_flicker_10m_cmp": 173, "hall": 173, "immers": 173, "tradit": 174, "distribut": [174, 188, 200, 201, 262, 269], "download": [174, 190, 210, 219, 221, 222, 229, 231, 269, 270, 277, 285, 289], "internet": [174, 213], "manufactur": 174, "lath": 174, "suffic": [174, 228, 272], "fole": 174, "buildi": 174, "texturewidth": [174, 262], "128x128": 174, "_light": 174, "light_sconce_medium": 174, "max_radiu": 174, "p3": [174, 250], "contact_shadow": 174, "ies_doublelamp_sconce_a": 174, "iesgen": 174, "ies_multilamp_sconce_a": 174, "ies_singlelamp_sconce_a": 174, "ies_singlelamp_sconce_b": 174, "ies_hand_lantern_a": 174, "ies_monitor_a": 174, "certainli": 174, "harsh": [174, 199], "radiat": 174, "compromis": 174, "eman": 174, "nevertheless": 174, "ansi": 174, "lm": 174, "63": [174, 239], "19": [174, 202, 207, 220, 228], "lifewir": 174, "blurradiu": 174, "phimin": 174, "phimax": 174, "360": [174, 252], "thetamin": 174, "thetamax": 174, "edgefadeout": 174, "concentr": 174, "ies_flashlight_a": 174, "iesscal": 174, "iesrot": 174, "loss": [174, 228, 235, 247, 280], "mitig": 174, "theta": 174, "fadeout": [174, 200], "bleed": 174, "backlight": [174, 218], "leakag": 174, "93": [174, 181], "_templat": [174, 194], "octahedr": 174, "fold": [174, 197, 252, 289], "halv": 174, "mainten": 174, "downward": [174, 202], "freeli": 174, "phi": 174, "pi": 174, "whichev": 174, "perpendicular": [174, 245], "proce": [174, 175], "dens": [174, 197, 199, 258], "spars": [174, 201, 259], "engine_root": [174, 175, 266, 268, 269, 272, 285, 289], "renderlight": 174, "uncom": 174, "use_octahedral_map": 174, "scenetool": 174, "assetexp": 174, "texexp": 174, "iesread": 174, "imagedata": 174, "generateoctahedr": 174, "generatespher": 174, "photometry_file_test2": 174, "photometry_file_t8_06nw": 174, "your_driv": 175, "battle_of_berlin": 175, "dot": [175, 237], "toolbar": [175, 223, 243], "hidden": [175, 216, 235, 237, 239, 272, 285, 289], "f11": 175, "spacebar": 175, "wasd": 175, "lmb": [175, 239], "reichchancelleri": 175, "reichchancellery_cmp": 175, "daview": 175, "reveal": [175, 181, 188, 199, 201, 205, 237, 289], "drive": [175, 239, 277, 289], "f7": 175, "light_chandelier_big": 175, "local_omni_light": 175, "asset_test_level": 175, "clean": [175, 177, 216, 226, 262], "unwant": [175, 201, 202], "toggler": 175, "light_": 175, "_big": 175, "unchang": [175, 188, 194, 202, 204, 205, 231, 239, 245], "z_enlisted_launcher_prog": 175, "timespe": 175, "reassembl": [175, 235], "reopen": [175, 223, 230], "blender": [176, 208, 236, 237, 240, 260, 264, 281], "rebuilt": 177, "wise": 177, "brick_wal": 177, "simplest": [177, 199, 285], "enclos": [177, 190, 250], "bracket": [177, 289], "stz_workshop_brick_plaster_wal": 177, "tex16support": [177, 207], "twosid": [177, 207], "emissive_color": [177, 185], "tex0": [177, 178, 185, 191, 194, 195, 197, 199, 204, 207], "emissive_a_tex_d": 177, "tex2": [177, 178, 185, 191, 192, 194, 197, 199, 204, 207], "emissive_a_tex_n": 177, "berlin_town_buildings_wall_brick_plaster_a": 177, "brick_plaster_wall_a": 177, "j": [177, 214], "inadvert": 177, "leftov": 177, "dagormat": [177, 216, 234, 239, 242], "ip3": [177, 207, 250, 262], "diff": [177, 207, 232, 250], "spec": [177, 207], "emi": [177, 207], "Of": [177, 201], "checkbbox": 177, "apex_interior_materi": 177, "tex4": [178, 197, 199, 204], "grayscal": [178, 192, 201], "tex5": [178, 197, 199, 204], "camouflag": 178, "primary_color": 178, "secondary_color": 178, "vehicle_color_smoking_r": 178, "105": 178, "117": 178, "vehicle_color_vampire_r": 178, "419": 178, "039": 178, "074": 178, "vehicle_color_canyon_copp": 178, "807": 178, "341": 178, "184": 178, "ar_paint": 178, "car_paint": 178, "possiblecolor": 178, "vehicle_color_battleship_grai": 178, "vehicle_color_dark_grai": 178, "vehicle_color_thundercloud": 178, "vehicle_color_military_green": 178, "dynamic_painted_by_mask": [179, 198], "land_mesh_height_dec": [179, 198], "rendinst_blend_diffuse_dec": [179, 183, 198], "rendinst_blend_normal_dec": [179, 198], "rendinst_deferred_dec": [179, 198], "rendinst_deferred_modulate2x_dec": [179, 198], "rendinst_flag_color": [179, 187, 198], "wind": [179, 187, 229, 245, 252], "rendinst_flag_lay": [179, 198], "rendinst_mask_lay": [179, 197, 198, 204, 205, 237], "rendinst_modulate2x_diffuse_dec": [179, 184, 198], "rendinst_refract": [179, 198], "isshel": 179, "is_window": [179, 193], "simple_ac": [179, 198, 205, 206, 289], "rendinst_simple_emissive_anim": [179, 198], "dynamic_illum_anim": [179, 198], "rendinst_simple_paint": [179, 186, 188, 198, 205], "rendinst_tree_color": [179, 198], "rendinst_tree_perlin_lay": [179, 198], "rendinst_vcolor_lay": [179, 187, 198], "alpha_threshold": 180, "height_abov": 180, "vertex_gamma": 180, "concav": [180, 200], "diffuse_threshold": 180, "hmap_soft": 180, "norm_soft": 180, "r_soft": 180, "microdetail": [180, 181, 186, 188, 191, 194, 199, 245], "attenuation_from_heightmap_height": 180, "height_scal": 180, "height_offset": 180, "grass_decal_id": 180, "vertex_opac": 180, "color_mul_add": 180, "picker": 180, "lighter": [181, 189, 194, 201, 206, 239], "gamma_mask": 181, "micro_detail_lay": [181, 186, 187, 191, 205, 232], "micro_detail_layer_uv_scal": [181, 186, 187, 191, 205, 232], "micro_detail_layer_v_scal": [181, 186, 187, 191, 205, 232], "faint": 181, "grai": [181, 188, 189, 194, 197, 201, 205, 231, 289], "stroke": 181, "thicken": 181, "appar": [181, 200, 201], "corrug": 181, "genuin": 181, "wider": 181, "use_alpha_for_emission_mask": 185, "emission_albedo_mult": 185, "nightli": 185, "emit": [185, 192, 206], "widespread": 185, "simul": [185, 186, 190, 197, 202, 204, 208, 231, 252], "blindli": 185, "grei": [185, 230], "multicolor": [185, 199], "stain": [185, 189, 201], "underscor": [185, 250], "bare": 185, "promin": [185, 188, 190], "unnatur": [185, 289], "interf": 185, "thicker": 185, "lantern": [185, 190], "thinner": [185, 272], "thin": 185, "slight": [185, 289], "photoshop": [185, 189, 192, 197, 201, 237], "drastic": 185, "cloth": [186, 197], "frequency_amplitud": [186, 187], "wave_length": [186, 187], "wind_direct": [186, 187], "use_paint": [186, 191, 201, 205, 289], "paint_palette_row": [186, 194], "paint_white_point": [186, 194], "paint_black_point": [186, 194], "paint_mult": [186, 194], "sinusoid": 186, "denser": 186, "oscil": [186, 195], "wavelength": [186, 187], "1st": [186, 189, 197, 201], "2nd": [186, 189, 197, 201], "3rd": [186, 189, 197, 206, 216], "4th": [186, 189, 197, 206, 229], "wind_typ": 186, "emitt": 186, "wind_strength": 186, "flagpol": 186, "flagpole_pos_0": 186, "flagpole_pos_1": 186, "stationari": 186, "flag_length": 186, "flag_movement_scal": 186, "bend": [186, 289], "stiff": 186, "resist": 186, "sway_spe": 186, "equilibrium": 186, "details_til": [187, 197, 205, 232], "invert_height": [187, 197, 232], "fraction": [187, 188, 197, 200, 201, 205, 252], "paint_detail": [187, 188, 194, 197, 205, 232], "overlay_color_from": [187, 197], "lerp": [187, 197, 205], "overlay_color_to": [187, 197], "micro": [187, 204, 205], "details_alphatest": [187, 188, 197], "overlai": [187, 188, 189, 199, 202, 203, 245, 258], "li": [187, 200, 205], "modulate2x": [188, 205], "detail_til": 188, "invert_height1": 188, "detail1": [188, 197, 205], "invert_height2": 188, "detail2": [188, 197], "paint_point": 188, "invis": 188, "dirti": [188, 189, 197, 201, 213], "leak": [188, 201], "matt": 188, "bumper": [188, 289], "glossi": [188, 204, 262], "headlight": [188, 206, 289], "stucco": [188, 201, 205], "operand": [188, 205], "wood": [188, 201, 205, 289], "desatur": 189, "danetifm": 189, "smoothness_met": 189, "draw_ord": 189, "darker": [189, 191, 194, 201, 262], "darken": [189, 197, 205], "brighten": 189, "wall_dirt_spots_decal_a_tex_m": 189, "oil": 189, "brighter": [189, 201], "23": 189, "37": 189, "soot": [189, 201], "fight": [189, 235], "seam": [189, 192, 200, 201, 202], "untouch": [189, 205, 230, 235], "fresher": 189, "surround": [189, 199], "refract": [190, 200, 204], "awai": [190, 199, 200, 245, 289], "vise": 190, "crystal": 190, "palac": 190, "sightlin": 190, "_tex_d": 190, "_tex_n": 190, "max_thick": 190, "min_thick": 190, "illustr": [190, 197, 200, 201, 202, 228, 231, 269, 275, 289], "001": [190, 231, 235, 237, 239, 285], "bottl": 190, "jar": 190, "accuraci": [190, 209, 222, 231, 258, 285], "enviro": 190, "glasswar": [190, 193], "archiv": [190, 275, 285, 289], "rendinst_": 191, "imperfectli": 191, "cutoff": [191, 228], "threshold": [191, 285, 289], "127": [191, 202, 231, 285], "palett": [191, 194, 197, 201, 205, 237, 239, 262], "stripe": [191, 205], "skyscrap": [191, 201, 205, 206], "paint_color": [191, 201, 205], "colorize_textur": [191, 201, 205], "painting_lin": [191, 201, 289], "infin": [191, 206, 232], "illum_scroll_spe": 192, "scroll": [192, 201], "revers": [192, 216, 235], "use_additive_blend": 192, "diffuse_map_tex_d": 192, "normal_map_tex_n": 192, "program_map_program": 192, "shift_map_shift": 192, "overshadow": 192, "2x": [192, 194, 201], "artifact": [192, 201, 204, 231, 237], "banner": 192, "text_anim_tex_d": 192, "text_anim_program": 192, "text_anim_shift": 192, "poor": [192, 199], "subpar": 192, "dynamic_simple_glass": 193, "dark": [193, 194, 289], "hardcod": [194, 269], "paint_const_color": 194, "02": [194, 277], "trim": [194, 235, 247], "paint_details_tex": 194, "tunisia": 194, "e_tunisia": 194, "tunisia_city_assault": 194, "tunisia_wall_color_tex_palett": 194, "quot": [195, 214, 239, 250], "plant": 195, "bush": [195, 262], "interaction_strength": 195, "angle_dissolv": 195, "dissolv": 195, "spherical_norm": 195, "jitter": 195, "fidel": 196, "pn_triangul": 196, "rendinst_clipmap": [196, 245], "incorpor": [196, 280, 289], "material_pn_triangul": 196, "max_tessellation_factor": 196, "rendinst_displacement_min": 196, "rendinst_displacement_max": 196, "rendinst_displacement_lod": 196, "nois": [196, 201, 202, 204, 245, 289], "rendinst_displacement_mod": 196, "is_pivot": 196, "trunk": [196, 228], "yzw": 196, "hierarch": [196, 229, 285, 289], "satisfactori": 196, "pn": [196, 245], "triangul": [196, 245], "neutral": [197, 201], "5th": [197, 206], "tex3": [197, 199, 204, 207], "detail3": [197, 205], "tex6": [197, 199, 204], "tatter": 197, "paper": [197, 214], "alon": [197, 253, 256, 258], "crack": [197, 199, 201, 289], "stone": [197, 201, 202, 205], "mid": [197, 285], "brush": 197, "strongli": [197, 205, 243], "tarp": 197, "fabric_tarpaulin_a_tex_d": 197, "fabric_shabby_a_tex_d": 197, "fabric_tarpaulin_a_tex_n": 197, "fabric_shabby_a_tex_n": 197, "tint": [197, 218, 289], "yellowish": 197, "protrud": [197, 205], "145": 197, "spread": 197, "pronounc": [197, 200], "wherev": [197, 262], "549": 197, "239": 197, "140": 197, "61": 197, "burnt": 197, "showcas": [197, 275], "caviti": 197, "clai": 197, "dynamic_lay": 198, "rendinst_layered_atest": 198, "rendinst_layered_hmap_blend": 198, "dynamic_combined_dec": 198, "land_mesh_combined_detailed_dec": 198, "dynamic_combined_detailed_dec": 198, "land_mesh_combined_mixed_dec": 198, "dynamic_combined_mixed_dec": 198, "airfield": 199, "moreov": 199, "wouldn": 199, "snowi": 199, "desert": 199, "boil": 199, "simplic": [199, 204], "missioneditor": 199, "airfield_sid": 199, "norway_herdla_airfield_empty_alpha": 199, "manchett": 199, "explanatori": [199, 235, 237], "emboss": 199, "detail1_size_of": 199, "smolensk_aero_south": 199, "smolensk_aero_south_tex": 199, "tex1": [199, 204], "detail_soil_cracked_tex_d": 199, "detail_soil_cracked_tex_r": 199, "rut": 199, "pathwai": 199, "semi": 199, "runwai": 199, "rock": [199, 201, 202, 205], "slab": [199, 289], "dust": 199, "detail2_size_of": 199, "detail3_size_of": 199, "detail4_size_of": 199, "markup_1": 199, "afghan_airfield_bagram_tex": 199, "afghan_airfield_bagram_tex_mask": 199, "detail_asphalt_a_tex_d": 199, "detail_asphalt_a_tex_r": 199, "detail_concrete_tex_d": 199, "detail_concrete_tex_r": 199, "tex7": [199, 204, 207], "tex8": 199, "detail_asphalt_cracks_tex_r": 199, "tex9": 199, "detail_sand_ground_tex_d": 199, "tex10": 199, "detail_sand_ground_tex_r": 199, "fade_color": 200, "188": 200, "224": 200, "259": 200, "room_depth": 200, "room_siz": 200, "tile_spac": 200, "tile_space_color": 200, "58": 200, "216": 200, "62": 200, "room_selfillum": 200, "illum_random": 200, "illum_only_at_night": 200, "convexity_slop": 200, "07": 200, "contortion_til": 200, "leftmost": 200, "smoothness_metalness_reflect": 200, "shadow_cast": 200, "unwrap": [200, 201, 237], "screencap": 200, "take_screenshot_360": 200, "disproportion": 200, "48": 200, "57": 200, "66": 200, "brought": 200, "curtain": 200, "parallelepip": 200, "asymmetr": 200, "slowli": 200, "distfad": 200, "smoothli": 200, "glint": 200, "hundredth": 200, "tenth": 200, "panoram": 200, "03": [200, 258], "exagger": [200, 204], "thank": 200, "techniqu": [200, 201, 205, 222, 285], "pane": 200, "huge": [200, 208], "vent": 200, "farther": [200, 205], "compens": [200, 208], "roughli": 200, "flaw": 200, "obviou": [200, 243], "uv1": 201, "uv3": 201, "uv2": 201, "tear": 201, "bollard": 201, "chamfer": 201, "worn": 201, "moss": [201, 202, 205], "cobbleston": 201, "modern_brick_brown_dirt_d": 201, "stucco_new_d": 201, "brickwork": 201, "fresh": 201, "heavier": [201, 239, 245], "domin": [201, 205], "seamless": [201, 202, 240], "3x3x3": 201, "multiply2x": 201, "live": [201, 239], "plasticki": 201, "buildings_overlay_tex_d": 201, "conceptu": 201, "wallpap": 201, "55x55": 201, "flatten": 201, "evolv": [201, 230], "emploi": 201, "site": [201, 218, 219, 220, 222, 223, 229, 231], "rot": 201, "church": 201, "mix": [201, 204, 237, 285], "boringli": 201, "somewhat": 201, "dirtier": 201, "gray": 201, "brick_stucco_m": 201, "occupi": 201, "insignific": 201, "seemingli": 201, "dictat": [201, 205, 285], "summar": 201, "reassembli": [201, 235], "reposit": [201, 235, 272, 289], "peel": [201, 205], "did": [201, 227, 235, 285], "medieval_brick_d": 201, "moss_different_d": 201, "masonri": 201, "overpow": 201, "saw": [201, 262], "gypsum_m": 201, "reced": 201, "concis": [201, 275], "blurri": 201, "finer": [201, 228, 289], "atlas_first_til": 201, "atlas_last_til": 201, "atlas_tile_u": 201, "atlas_tile_v": 201, "detail_tile_u": 201, "detail_scroll_u": 201, "mask_gamma_start": 201, "mask_tile_u": 201, "mask_scroll_u": 201, "draw_grass": 201, "growth": [201, 202], "detail2_color": 201, "paint1stdetail": 201, "detail2_combined_norm": 201, "micro_detail_layer1": [201, 204], "micro_detail_layer2": [201, 204], "micro_detail_layer1_uv_scal": [201, 204], "micro_detail_layer2_uv_scal": [201, 204], "material_shadow_influ": [201, 205], "material_shadow_scal": [201, 205], "intervent": 201, "125": 201, "2_tile_u": 201, "2_tile_v": 201, "brown": [201, 289], "1024x1024": 201, "512x512": 201, "54": 201, "inconsist": [201, 285, 289], "scroll_v": 201, "tire": [201, 289], "dusti": 201, "detail1_scroll_u": 201, "2_scroll_v": 201, "detail1_scroll_v": 201, "unusu": 201, "mask_gamma_end": 201, "9898": 201, "gentl": 201, "mask_tile_v": 201, "narrow": [201, 258], "taller": 201, "mask_scroll_v": 201, "revisit": 201, "nd": 201, "snow": 201, "sine": 201, "flatter": 201, "grayish": 201, "cliff": [201, 202, 205], "enable_hmap_blend": [201, 205], "hmap_blend_height": [201, 205], "ri_hmap_min_blend_angl": 201, "ri_hmap_max_blend_angl": 201, "ri_hmap_blend_angle_vertex_normal_amount": 201, "ri_hmap_blend_check_hol": 201, "band": 201, "ground_hol": 201, "underground": 201, "blk2": 201, "shader_vars__var": [201, 205], "ri_hmap_blend_sharp": [201, 205], "ri_hmap_perlin_tex_scal": [201, 205], "perlin": [201, 202, 204], "ri_hmap_min_height": [201, 205], "ri_hmap_blend_sharpness_mul": [201, 205], "ri_hmap_perlin_tex_scale_mul": [201, 205], "ri_hmap_min_height_mul": [201, 205], "ri_hmap": 201, "blend_sharp": [201, 205], "md": [201, 277, 280], "recolor": 201, "detail2_tile_u": 201, "detail2_tile_v": 201, "glanc": 201, "inspect": [201, 231, 270, 285, 289], "unnot": [201, 270], "fulfil": 201, "plank": [201, 289], "bronz": 201, "smear": 201, "tar": 201, "destr": 202, "blended_atest": 202, "detail1_atest_weight": 202, "detail2_atest_weight": 202, "hmp_blend_height": 202, "land_blend_dist": 202, "land_perlin_height": 202, "land_perlin_scal": 202, "coarser": 202, "land_perlin_blend": 202, "land_blend_perlin_height": 202, "land_blend_perlin_blend": 202, "land_blend_normal_start": 202, "land_blend_normal_end": 202, "waterlin": 202, "rust": 202, "alga": 202, "albedoao": 202, "saltsedimentsstart": 202, "saltsedimentsend": 202, "saltsedimentstil": 202, "saltsedimentstex": 202, "waterline_grdnt_a_tex_d": 202, "salt_sediments_opac": 202, "8th": [203, 235], "7th": 203, "ic": 204, "frozen": 204, "lake": 204, "sculpt": 204, "iceberg": 204, "organ": [204, 235, 237, 245, 275], "glitch": [204, 216], "d1": 204, "d2": 204, "vertexcolor": 204, "inner_layer_depth": 204, "inner_layer_mul": 204, "inner_layer_pow": 204, "expon": 204, "mul": [204, 252], "realist": [204, 205, 208, 289], "vcol_masked_mul": 204, "vcol_masked_pow": 204, "ior": 204, "weaken": 204, "intensifi": 204, "bring": [204, 213], "inner_layer_tile_uv": 204, "inner_layer_u_offset": 204, "inner_layer_v_offset": 204, "detail1_tile_uv": 204, "detail1_u_offset": 204, "detail1_v_offset": 204, "modify_detail1_mask_uv": 204, "detail2_tile_uv": 204, "detail2_u_offset": 204, "detail2_v_offset": 204, "modify_detail2_mask_uv": 204, "mask_gamma": [204, 232], "heightmaps_invert": 204, "rectangular": 205, "mask_by_norm": 205, "perlin_noise_offset": 205, "paint_points_black": 205, "paint_points_whit": 205, "palette_index": 205, "detail0_const_color": 205, "detail1_const_color": 205, "detail2_const_color": 205, "details1": 205, "perlin_lay": 205, "meanwhil": 205, "weaker": 205, "absent": 205, "lighten": 205, "explan": [205, 207, 216, 289], "underneath": [205, 289], "crumbl": 205, "formula": 205, "relief": [205, 232], "depict": 205, "rusti": 205, "371": 205, "exec": 205, "ri_hmap_min_angl": 205, "ri_hmap_max_angl": 205, "ri_hmap_min_angle_mul": 205, "ri_hmap_max_angle_mul": 205, "primarili": [206, 237, 239, 269, 275], "emission_only_at_night": 206, "emission_fadeout": 206, "5000": 206, "emission_strength": 206, "emission_color": 206, "94": 206, "6th": 206, "paintabl": 206, "colormap": 207, "detail_scale_u": 207, "detail_scale_v": 207, "karelia_cliff_a_b_tex_d": 207, "karelia_cliff_a_b_tex_n": 207, "rock_detail_a_tex_n": 207, "rock_detail_a_tex_d": 207, "shini": [207, 232], "2002": 208, "vehicular": 208, "combat": 208, "sea": 208, "era": 208, "squad": 208, "wwii": 208, "industri": 208, "jolt": 208, "dagi": 208, "bounc": 208, "gdc": [208, 222], "talk": [208, 262], "acycl": 208, "audio": [208, 275], "daslang": 208, "toolset": [208, 217, 226, 239, 274], "particl": [208, 289], "baker": [208, 226, 234, 239, 241, 242, 262, 264, 281], "maya": 208, "subsystem": [208, 227], "latenc": 208, "multiplay": [208, 274], "tcp": 208, "udp": 208, "lag": [208, 269], "fmod": [208, 277], "dsp": 208, "morph": [208, 231, 285], "fork": [209, 278], "repositori": [209, 210, 247, 276, 277, 278], "github": [209, 214, 276, 277, 278], "submiss": 209, "tone": 209, "submit": [209, 278], "pr": 209, "commun": 209, "sphinx": [210, 213], "pip": [210, 213], "administr": [210, 277], "privileg": 210, "env": 210, "doxygen_installation_dir": 210, "dagorengin": [210, 277], "_doc": [210, 213, 275], "python3": [210, 277], "build_all_doc": 210, "py": [210, 213, 277], "html": [210, 213, 214], "qdox": [211, 215], "rst": [211, 212, 213], "cheatsheet": [211, 212], "autodocument": 212, "restructuredtext": [212, 214], "markup": 212, "backslash": 212, "credit": 212, "restrcturedtext": 213, "dependeci": 213, "inspir": 213, "luadox": 213, "lua": 213, "unreferenc": 213, "multiscop": 213, "baz": 213, "handi": [213, 216, 245, 272], "multilin": 213, "goal": [213, 275, 285, 289], "parser": [213, 250], "bind_webbrows": 213, "can_use_embedded_brows": 213, "go_back": 213, "add_window_method": 213, "collect": [213, 232, 235, 237, 240, 241, 269], "leaf": 213, "tip": [213, 267], "seealso": 213, "alert": 213, "tag_nam": 213, "mymodul": 213, "myclass": 213, "paramsnum": 213, "paramat": 213, "vargv": 213, "messagebox": 213, "fieldnam": 213, "defvalu": 213, "writeabl": 213, "ftype": 213, "resetscop": 213, "till": 213, "skiplin": 213, "skipnext": 213, "autodocu": 213, "addten": 213, "bindfuncnam": 213, "cppfuncnam": 213, "nice": 213, "reader": 213, "seriou": 213, "threat": 213, "spoiler": 213, "preformat": 213, "some_nam": 213, "lang": 213, "doc_chapt": 213, "quirrel_gamelib": 213, "chapter_desc": 213, "chapter_titl": 213, "exclude_dirs_r": 213, "exclude_files_r": 213, "myst": 213, "myst_pars": 213, "sphinx_rtd_them": 213, "autobuild": 213, "commandlin": 213, "qdoc_main": 213, "doctre": 213, "autorebuild": 213, "8080": 213, "localhost": 213, "doclin": 213, "restructur": 213, "rtfm": 213, "sphix": 213, "emphasi": [213, 214], "goodi": 213, "wow": 213, "colour": 213, "ital": 214, "boldfac": 214, "hyperlink": 214, "reference_": 214, "_": [214, 237], "anonymous__": 214, "footnot": 214, "citat": 214, "cit2002": 214, "docutil": 214, "sf": 214, "blank": [214, 225], "whitespac": 214, "arab": [214, 225], "roman": 214, "formatt": 214, "honour": 214, "paragraph": 214, "toni": 214, "tib": 214, "ibb": 214, "david": 214, "goodger": 214, "2001": 214, "father": 214, "underlin": 214, "nonalphanumer": 214, "lone": 214, "alphanumer": 214, "overlin": 214, "subsect": 214, "subsubsect": 214, "colon": [214, 237], "newlin": 214, "tack": 214, "unind": 214, "email": 214, "haskel": 214, "vers": 214, "adorn": 214, "doctest": [214, 280], "punctuat": 214, "autonumb": 214, "third_": 214, "fourth_": 214, "journal": 214, "hyphen": 214, "fullstop": 214, "this_": 214, "python_": 214, "_python": 214, "www": [214, 277], "org": [214, 277], "crossrefer": 214, "example_": 214, "_exampl": 214, "favourit": 214, "__": 214, "implict": 214, "gd": 214, "2ecqh": 214, "magnet": 214, "40pt": 214, "biohazard": 214, "dispos": 214, "medic": 214, "ralsina": 214, "master": [214, 287], "dagor_cdk": [216, 232], "x86_64": [216, 232], "3dsmax": [216, 227, 232], "hid": 216, "sel": [216, 239], "lt": 216, "cam": 216, "hlp": 216, "mopt": 216, "spl": 216, "merit": 216, "criteria": [216, 219], "asset_a": [216, 239], "asset_b": 216, "asset_c": 216, "asset_": 216, "bevel": 216, "belong": [216, 262], "166": 216, "presenc": [216, 239, 250, 275], "degener": [216, 220, 226, 234, 245, 289], "unsmooth": 216, "accident": [216, 235, 254, 262], "dagormat1": [216, 232], "dagormat2": [216, 232], "stdmat": 216, "imperfect": 216, "kill": 216, "copybuff": 216, "pastebuff": 216, "thoroughli": [216, 285], "newer": [218, 219, 220, 221, 222, 223, 224, 225, 228, 229, 230, 231], "visit": [218, 219, 220, 222, 223, 225, 229, 231], "tolearn": 218, "tree_ao_test_2021": 218, "tree_vitellaria_wide_c": 218, "growfx": [218, 228, 229], "2014": 219, "check_deg_faces_00": 219, "gif": [219, 222, 230, 231], "checker": [219, 239], "degenerated_triangles_test_2021": 219, "2021": [219, 228, 229, 230, 289], "inch": 219, "learningweb": 219, "stalingrad_water_tower_roof_lod01_col_tra_wood": 219, "tailor": [220, 228, 289], "dagor2_export_custom_group": 220, "dagor2_toolbox": [220, 227], "2013": [220, 221, 224, 225], "xform": 220, "obj_01": 220, "cls_": 220, "proceed": [220, 243, 285, 289], "18": [220, 228, 247, 258], "dmg_exampl": 221, "speedtre": 222, "guerrilla": 222, "gilbert": 222, "sander": 222, "horizon": 222, "dawn": 222, "noor": 222, "editing_normals_00": 222, "tree_exampl": 222, "2024": [222, 231, 285, 289], "palm": [222, 228, 262], "2500": 222, "editnorm": 222, "crown": [222, 239], "bark": [222, 228], "unedit": 222, "vital": [222, 270], "beam": 222, "rerun": 222, "psurfac": 222, "tension": 222, "maxim": 222, "bulg": [222, 289], "tight": [222, 258, 259], "conif": 222, "exponenti": 222, "2008": 222, "steal": 222, "mimick": 222, "2012": 223, "ON": [223, 280], "quick": [223, 228, 230, 239, 245, 263, 264, 269, 270, 275], "gaijintool": [225, 227], "utf": 225, "hieroglyph": 225, "slavic": 225, "latin": [225, 250, 277], "russian": 225, "websit": 225, "painter": [226, 234], "prototyp": 226, "unreal": 226, "gj_tool": 227, "mcr": 227, "usermarco": 227, "user_nam": 227, "appdata": [227, 237, 239], "autodesk": 227, "your_3ds_max_vers": 227, "enu": 227, "usermacro": 227, "superior": 228, "multir": 228, "prooptim": 228, "knot": 228, "convei": 228, "newli": [228, 235, 243], "tree_cocos_nucifera": 228, "comma": [228, 235, 250], "fruit": 228, "fromtop": 228, "cl": 228, "twig": 228, "2015": 229, "tree_oak_test_2021": 229, "tree_oak_large_a": 229, "pivot_po": 229, "pivot_dir": 229, "houdini": [229, 235], "disregard": 229, "toolbox": 230, "dagor2_cmp_generatorsimpl": 230, "dagor2": [230, 262, 285], "flootabl": 230, "aboveht": 230, "simple_cmp_preserving_unsup_prop": 230, "matrix3": 230, "ancient_statue_c_dmg_056_dmg": 230, "606621": 230, "0105886": 230, "000184797": 230, "010587": 230, "606528": 230, "211369": 230, "01566": 230, "255796": 230, "decis": 230, "discret": [230, 247, 262], "gross": 230, "ancient_statue_c_dmg_087": 230, "ancient_statue_c_dmg_": 230, "ancient_statue_c_dmg_cmp": 230, "transfor": 230, "seven": 230, "mentor": [230, 285], "simple_cmp_ed_prop_edit_rot_02": 230, "abovehit": 230, "strang": [230, 237], "2010": 231, "vcolor": [231, 289], "vcolormorphdemo": 231, "deform": [231, 281, 287], "126": 231, "startmorph": 231, "endmorph": 231, "undeform": [231, 289], "vertexpo": 231, "27": 231, "cardeformexamplewin64x": 231, "cardeformexampl": 231, "transfer_vertex_05": 231, "newdestrcartest": 231, "zip": [231, 239, 275, 277, 285, 289], "002": [231, 235], "dent": 231, "undamag": 231, "wheel": [231, 289], "inconspicu": 231, "slate": 232, "f10": 232, "scanlin": 232, "friendli": 232, "dagorshad": [232, 239], "tex1_nam": 232, "tex2_nam": 232, "tex3_nam": 232, "normalmap": 232, "tex4_nam": 232, "tex5_nam": 232, "glossmap": 232, "tex6_nam": 232, "tex7_nam": 232, "tex8_nam": 232, "_global_param": 232, "vltmap": 232, "scene_emiss": 232, "reflection_multipli": 232, "radio": 232, "blend_norm": 232, "ps50": 232, "shdump": 232, "consolid": 232, "exercis": 232, "occasion": [232, 254, 269], "appl": 235, "tech_stuff": 235, "transfer_collect": 235, "switcher": 235, "safeguard": 235, "hinder": 235, "trash": [235, 237], "lodnn": 235, "cleaner": 235, "distract": 235, "establish": [235, 285], "recalcul": [235, 239], "dagobject": 235, "alemb": 235, "fbx": 235, "disassembl": 235, "altogeth": [235, 285], "mainli": [235, 239], "indoor_stuff": [235, 245], "heavi": [237, 238, 239, 243, 245, 289], "bsdf": 237, "glb": 237, "gltf": 237, "upcom": 237, "noisi": 237, "lowpoli": 237, "highpoli": 237, "_dp": [237, 239], "cage": 237, "extrus": 237, "inflat": 237, "lp": 237, "eyedropp": 237, "tex_d": [237, 272], "tex_n": 237, "neither": [237, 280], "dirpath": 237, "interrupt": [237, 269, 280, 285], "uvmap": 237, "unsatisfactori": 237, "undon": 237, "cleanup": [237, 239, 260], "_tex_d_rgb": 237, "_tex_d_alpha": 237, "_tex_met_gloss": 237, "_tex_mask": 237, "reassign": 237, "usernam": [237, 239], "roam": [237, 239], "addon": [237, 239, 268, 269], "_uv": 237, "truncat": [237, 239, 250], "my_materi": 237, "my_material_tex_d": 237, "001_tex_d": 237, "popup": 237, "eleg": 237, "ons": [239, 264, 269, 270, 281], "objprop": 239, "hover": [239, 245], "dag4blend2": 239, "role": [239, 285], "backspac": [239, 245], "subtab": 239, "single_sid": 239, "backfac": 239, "props_temp": 239, "vnormal": 239, "applymod": 239, "tmp": 239, "join": [239, 270], "subcollect": 239, "exportorphan": 239, "cube_temp": 239, "scenecollect": 239, "soviet_town_building_5_floors_a_join": 239, "rmb": 239, "unlink": 239, "overflow": 239, "subpath": 239, "yet_another_subfold": 239, "composit_part": 239, "rendinst_1lod": 239, "realiz": 239, "discov": 239, "solv": 239, "sg": 239, "subpanel": 239, "meaningfulli": 239, "wrangler": 239, "damage_part": 239, "bulk": [239, 289], "cautious": 239, "lod0": 239, "asset_b_dp": 239, "unrespons": 239, "clutter": 239, "autosmooth": 239, "longest": 239, "orphan": 239, "materialnam": [239, 289], "colltyp": 239, "silhouett": 239, "dag4blend": [241, 242], "explod": 241, "risk": 243, "cancel": 243, "zoom": [243, 283], "q": [243, 269], "carri": [245, 254, 275], "surpris": 245, "servic": [245, 270, 280], "dive": 245, "snapshot": 245, "background": 245, "beaufort": 245, "gust": 245, "2022": 245, "honest": 245, "round": [245, 289], "numpad": 245, "numdel": 245, "submateri": 245, "tier": 245, "ri": [245, 252], "fov": 245, "phy": [245, 247, 280], "trackbal": 245, "orthograph": [245, 252], "entail": 245, "apex": 245, "_apex": 245, "_collis": 245, "choic": 245, "terrain_decor": 245, "city_1": 245, "city_2": 245, "couldn": 245, "logger": 245, "logerr_to_con": [245, 289], "include_r": 245, "exclude_r": [245, 289], "tri": [245, 289], "polytop": 247, "traceabl": 247, "26": 247, "shrunk": 247, "govern": [247, 269], "rougher": 247, "vert": 247, "kdop": 247, "convexcomput": 247, "convexvhacd": 247, "replacenod": 247, "isphyscollid": 247, "istrac": 247, "refnod": 247, "kdoppreset": 247, "kdopsegmentsx": 247, "kdopsegmentsi": 247, "kdoprotx": 247, "kdoproti": 247, "kdoprotz": 247, "cutoffthreshold": 247, "convexdepth": 247, "maxconvexhul": 247, "maxconvexvert": 247, "convexresolut": 247, "ini": 250, "proprietari": 250, "block_nam": 250, "parameter_nam": 250, "lf": 250, "cr": [250, 266], "trail": 250, "3x4": 250, "tild": 250, "param1": 250, "43": [250, 258, 289], "param2": 250, "parameter1": 250, "parameter2": 250, "parameter3": 250, "file_nam": 250, "param_nam": 250, "10000": 250, "billboard_octagon_impostor": [250, 262], "paramcnt": 250, "paramnameid_1": 250, "paramtype_1": 250, "param_1": 250, "paramnameid_cnt": 250, "paramtype_cnt": 250, "param_cnt": 250, "blockcnt": 250, "block1": 250, "paramtypecnt_1": 250, "block1_1": 250, "block1_2": 250, "block1_cnt": 250, "block_cnt": 250, "dagor3_cdk": [250, 262, 266, 269], "binblk": 250, "blkdiff": 250, "syntact": 250, "blkeditor": 250, "x_up": 252, "y_up": 252, "z_up": 252, "envi_nam": 252, "month": 252, "lattitud": 252, "longtitud": 252, "save_project": 252, "file_path": 252, "builtscen": 252, "landmesh": [252, 258], "level_name_pc": 252, "level_name_xbox": 252, "level_name_ps3": 252, "level_name_": 252, "level_nam": 252, "tegra": 252, "supress": 252, "verbos": 252, "nodlg": 252, "application_blk_path": 252, "name_substr": 252, "foam": 252, "hats_mul": 252, "hats_threshold": 252, "hats_fold": 252, "turbul": 252, "generation_threshold": 252, "generation_amount": 252, "dissipation_spe": 252, "falloff_spe": 252, "wind_depend": 252, "facet": 252, "a01234": 252, "a0": 252, "a1": 252, "a2": 252, "a3": 252, "a4": 252, "smallwavefract": 252, "cascadesbas": 252, "fft": 252, "spectra": 252, "bf_scale": 252, "phillip": 252, "unified_direct": 252, "rendin": 252, "tname": 252, "unitedv": 252, "sun_from_tim": [253, 256], "commit_chang": [253, 256], "ltmap": [253, 256], "rebuild_color": [253, 256], "tex_metr": [253, 256], "ortho": [253, 256], "set_workspac": [253, 256], "shaderblk": [253, 256], "tex_ref": [253, 256], "save_tex": [253, 256], "save_all_tex": [253, 256], "hang_devic": [253, 256], "send_gpu_dump": [253, 256], "reload_shad": [253, 256], "use_f": [253, 256], "shaders_bindump_nam": [253, 256], "foam_hat": [253, 256], "surface_folding_foam": [253, 256], "foam_turbul": [253, 256], "dependency_wind": [253, 256], "alignment_wind": [253, 256], "choppi": [253, 256], "facet_s": [253, 256], "small_wave_fract": [253, 256], "cascade_window_length": [253, 256], "cascade_facet_s": [253, 256], "fft_resolut": [253, 256], "fft_period": [253, 256], "spectrum": [253, 256], "vs_sampler": [253, 256], "reset_rend": [253, 256], "num_cascad": [253, 256], "debug_mesh": [253, 256], "convert_weather_blk_to_ent": [253, 256], "hide_object": [253, 256], "verify_lod": [253, 256], "ri_gpu_object": [253, 256], "rigrid": [253, 256], "shaded_collis": [253, 256], "with_visu": [253, 256], "alone_diff": [253, 256], "with_visual_diff": [253, 256], "face_orient": [253, 256], "update_pack": [253, 256], "list_missing_for_r": [253, 256], "list_missing_for_tex": [253, 256], "list_missing_for_all_tex": [253, 256], "riunitedvdata": [253, 256], "dumpmem": [253, 256], "perfstat": [253, 256], "dmunitedvdata": [253, 256], "setmaxlev": [253, 256], "addref": [253, 256], "delref": [253, 256], "marklfu": [253, 256], "dagoreditor": 254, "accomplish": 254, "malfunct": 254, "bot": 258, "bridg": [258, 259], "af_conveyor": 258, "underwat": 258, "inaccess": 258, "imprecis": 258, "constrain": 258, "navmesh2": 258, "debug_nav": 258, "skyquak": 258, "5191": 258, "acesapp": 258, "dojob": 258, "isload": 258, "strstr": 258, "levelfilenam": 258, "avg_": 258, "avn_": 258, "nav": 258, "purpl": [258, 289], "addfuzzysweep2halfwidth": 259, "storesegsforgen": 259, "useloftseg": 259, "delanoi": 259, "layerord": 259, "straight": 259, "objgener": 259, "spline_up": 259, "world_xz": 259, "normal_xz": 259, "zeroopacitydistatend": 259, "pdb": [260, 277], "accumul": [260, 285], "routin": 260, "research": 260, "databas": 260, "test_geometry_001": 260, "test_geometry_127": 260, "test_geometry_origin": 260, "test_geometri": 260, "p_rendinst": 260, "riimpostor": 262, "content_fold": 262, "package_fold": 262, "dynamic_impost": 262, "daimpostor": 262, "trees_foldernam": 262, "_impostor": 262, "impostor_data": 262, "impostordata": 262, "impostor_data_fold": 262, "upload": 262, "cv": 262, "trees_fold": 262, "compact": 262, "mq": [262, 269], "lq": [262, 269], "impostorbak": [262, 275], "bin64": [262, 269], "rootdir": 262, "assest_name1": 262, "asset_name2": 262, "pack_name1": 262, "pack_name2": 262, "folderblk": 262, "dont_replac": 262, "av": 262, "dualiti": 262, "doabl": 262, "tree_tropic_large_": 262, "rotationpalettes": 262, "mipcount": 262, "autodetect": 262, "120": 262, "240": 262, "preshadowsen": 262, "crowncenteroffset1": 262, "transmitt": 262, "ellipsoid": 262, "crownradoffset1": 262, "crowncenter2": 262, "crownrad2": 262, "mipoffsets_hq_mq_lq": 262, "mobilemipoffsets_hq_mq_lq": 262, "impostortexturemgr": 262, "splitat": 262, "defaulttextureheight": 262, "mobilemipoffset": 262, "normalmipoffset": 262, "normal_transluc": 262, "aosmoothnessmipoffset": 262, "ao_smooth": 262, "enableimpostortexturemanag": 262, "enableimpostorpreshadowcompress": 262, "cascade0": 262, "treecrowntransmitt": 262, "falloffstart": 262, "falloffstop": 262, "whitish": 262, "mipfad": 262, "oliv": 262, "foliag": 262, "bc7": 262, "rebuild_bc67": 262, "stubtextag": 262, "smooth0_nx_metal0_ni": 262, "ragb": 262, "mipfadecolor": 262, "mipfadestart": 262, "mipfadeend": 262, "tree_autumn_": 262, "160": 262, "1500": 262, "transition_lod": 262, "impostornormalmip": [263, 264], "hack": [263, 264], "dep": [264, 281], "substanc": [264, 281], "util64": 266, "752": 266, "legend": 266, "wxh": 266, "memsz": 266, "256x256": 266, "85k": 266, "african_fabric_cover_d_tex_d": 266, "debris_clothes_f": 266, "african_fabric_cover_h_tex_d": 266, "debris_clothes_": 266, "african_fabric_cover_tex_n": 266, "874m": 266, "3428": 266, "1704": 266, "resvb": 266, "uniquetex": 266, "1345k": 266, "0k": 266, "88mm_flak_36_canon_a": 266, "flak_36_set_tex_d": 266, "flak_36_set_tex_n": 266, "88mm_flak_36_canon_a_collis": 266, "88mm_flak_36_canon_b": 266, "88mm_flak_36_canon_b_collis": 266, "71k": 266, "170k": 266, "wooden_power_pole_a": 266, "insulator_tex_d": 266, "insulator_tex_n": 266, "decal_modulate_leaks_bottom_tex_m": 266, "322": 266, "4m": 266, "dbldutil": 266, "build_dep": 266, "game_env": 266, "nxf": 266, "cr_menu_background": 266, "pkg_dev": [268, 269], "destsuffix": 268, "always_commit": 268, "pkg_cockpit": [268, 269], "cockpit": 268, "pkg": 268, "_pc": [268, 269], "addons_no_check": [268, 269], "exploit": 269, "unintend": 269, "kaiser": 269, "sharpen": 269, "forcepackag": 269, "ac": 269, "splitnotsepar": 269, "downscal": 269, "512px": 269, "sooner": 269, "bundl": 269, "enjoi": 269, "week": 269, "conclud": 269, "sell": 269, "upfront": [269, 289], "purchas": 269, "mb": 269, "defens": 269, "pillbox": 269, "trench": 269, "bunker": 269, "barricad": 269, "fortif": 269, "buse": 269, "truck": [269, 289], "dabuild_test": 269, "heavili": 269, "slip": 269, "halt": 269, "keep_building_after_error": 269, "vehicles_modern": 269, "main_vehicl": 269, "packs_r": 269, "usa_gm": 269, "gm_lvl_asset": 269, "pkg_main": 269, "tomo": 269, "countri": 269, "package_nam": 269, "package_name_hq": 269, "package_and_dep": 269, "hq_tex": 269, "pkg_china": 269, "pkg_china_hq": 269, "pkg_dev_hq": 269, "hc_pacif": 269, "pkg_user": 269, "pkg_local": 269, "tomoe_hq": 269, "uhq_vehicl": 269, "uhq_aircraft": 269, "uhq_environ": 269, "out_fil": 269, "unpredict": 269, "deliv": [269, 275], "offlinebinari": 269, "disablenetwork": 269, "create_vrsrom": 269, "log_vrom": 269, "aces_dev": 269, "vromfsprior": 269, "trackenvchang": 269, "linger": 269, "cryptograph": 270, "vromfspack": [270, 275], "some_config": 270, "drawback": 270, "mount": [270, 289], "useaddonvromsrc": 270, "phone": 270, "queue": 270, "substance_librari": 272, "tex_d_mip": 272, "7x13": 272, "exaggeratedli": 272, "tex_d_offset": 272, "mip02": 272, "midpoint": 272, "perimet": 272, "mip05": 272, "4x8": 272, "crop": 272, "distant": 272, "cluster": 272, "solid": [272, 289], "unclutt": 272, "misinterpret": 272, "barbwire_tex_d": 272, "_srgbx_with_mip": 272, "dagorenginerootdirectori": 275, "encompass": 275, "broad": 275, "wip": 275, "codebas": 275, "rewritten": 275, "host": [275, 276], "peer": 275, "fir": 275, "focus": [275, 285], "testabl": 275, "encourag": 275, "likelihood": 275, "create_vfsrom": [275, 289], "vf": 275, "rom": 275, "mk": 275, "daeditorx": 275, "asset_typ": 275, "dsc2": 275, "spirv": [275, 280], "packer": 275, "3000": [275, 285], "assetviewer2": 275, "fastphi": 275, "daeditor3x": 275, "csvutil2": 275, "csv": 275, "crowdin": 275, "craft": 275, "tutori": [275, 281], "experienc": 275, "valuabl": 275, "insight": [275, 289], "offici": 276, "toolkit": 277, "x64": 277, "hdd": 277, "ssd": 277, "git": [277, 278], "scm": 277, "cd": 277, "gaijinentertain": 277, "make_devtool": 277, "devtool": 277, "grant": 277, "gdevtool": 277, "fidelityfx_sc": 277, "llvm": 277, "clang": 277, "nasm": 277, "max2024": 277, "2004": 277, "openxr": 277, "vc2019_16": 277, "msvc": 277, "81": 277, "ducibl": 277, "portabl": 277, "pe": 277, "reproduc": [277, 280], "pdbdump": 277, "7z": 277, "precompil": 277, "skiessampl": 277, "testgi": 277, "build_al": 277, "welcom": [278, 281], "checkout": 278, "licens": [279, 281], "entertain": 280, "redistribut": 280, "permit": 280, "disclaim": 280, "contributor": 280, "endors": 280, "prior": 280, "BY": 280, "AND": 280, "AS": 280, "warranti": 280, "OF": 280, "merchant": 280, "FOR": 280, "IN": 280, "BE": 280, "liabl": 280, "incident": 280, "exemplari": 280, "consequenti": 280, "procur": 280, "profit": 280, "busi": 280, "liabil": 280, "contract": 280, "tort": 280, "SUCH": 280, "1stpartylib": 280, "dastest": 280, "dasimgui": 280, "dasquirrel": 280, "dasstddlg": 280, "oblig": 280, "whatsoev": 280, "compli": 280, "agre": 280, "indemnifi": 280, "defend": 280, "harmless": 280, "claim": 280, "debt": 280, "attornei": 280, "fee": 280, "consult": [280, 285], "guidanc": 280, "3rdpartylib": 280, "brotli": 280, "fastlz": 280, "libzip": 280, "lz4": 280, "lzma": 280, "unzip": 280, "ng": 280, "assimp": 280, "contrib": 280, "poly2tri": 280, "binpack2d": 280, "breakpad": 280, "cachesim": 280, "cef3": 280, "v4896": 280, "libcef_dl": 280, "v4951": 280, "codec": 280, "dav1d": 280, "libogg": 280, "libtheora": 280, "speexdsp": 280, "detex": 280, "fastdxt": 280, "nvtt": 280, "cpu_featur": 280, "detour": 280, "enet": 280, "fast_float": 280, "filewatch": 280, "flatbuff": 280, "freetyp": 280, "harfbuzz": 280, "fsr2": 280, "blake3": 280, "avif": 280, "imageresampl": 280, "jpeg": 280, "6b": 280, "libpng": 280, "psdread": 280, "license_imgui": 280, "license_implot": 280, "imguizmo": 280, "jsoncpp": 280, "jsonsl": 280, "libb64": 280, "libcurl": 280, "libev": 280, "libunwind": 280, "lotti": 280, "carv": 280, "clipper": 280, "delaunaytriangul": 280, "misc": 280, "vhacd": 280, "meshoptim": 280, "glslang": 280, "lsp": 280, "spirv2met": 280, "mimalloc": 280, "miniupnpc": 280, "mit": 280, "hrtf": 280, "lib": 280, "mongoos": 280, "nanosvg": 280, "openssl": 280, "ozz": 280, "pcre": 280, "convexdecomposit": 280, "inversedynam": 280, "gtest": 280, "joltphys": 280, "poisson": 280, "rapidjson": 280, "reachabl": 280, "recast": 280, "udis86": 280, "unittest": 280, "uripars": 280, "hlslcc": 280, "cbstring": 280, "smol": 280, "home": 281, "airplan": 283, "forgot": 283, "quantiti": [283, 289], "faction": 283, "player_teama": 283, "ocean": 283, "cdk": 284, "limb": 285, "3dsmax2024fil": 285, "fish": 285, "crow": 285, "crow_detailed_tpos": 285, "pose": 285, "programm": 285, "dual": 285, "quaternion": 285, "2000": 285, "bip": 285, "dynmodeldesc": 285, "318": 285, "ineffect": 285, "crow_bas": 285, "versatil": 285, "pbr": 285, "crow_body_a_tex_d": 285, "crow_body_a_tex_n": 285, "feather": 285, "lodxx": 285, "00": 285, "crow_detailed_a": 285, "customiz": 285, "crow_detailed_a_dynmodel": 285, "crow_lo_a_dynmodel": 285, "crow_detailed_idle_b": 285, "idl": 285, "195": 285, "150": [285, 289], "timelin": 285, "slide": 285, "5x": 285, "breakdown": 285, "crow_skeleton": 285, "notabl": 285, "crow_detailed_a_char": 285, "no_anim_dist": 285, "no_render_dist": 285, "usechardep": 285, "rootnod": 285, "crow_detailed_a_skeleton": 285, "crow_detailed_a_animbnl": 285, "crow_detailed_a_phobj": 285, "ref_stat": 285, "stand_ground": 285, "daanim": 285, "fifo3": 285, "defaultforeignanim": 285, "foreign": 285, "nodemask": 285, "bip01": 285, "statedesc": 285, "defmorphtim": 285, "defnodenam": 285, "chan": 285, "cond_target": 285, "fifo3_root": 285, "crow_a_fly_turn_right": 285, "crow_detailed_fly_turn_right": 285, "fly_turn_right_start": 285, "keyfram": 285, "fly_turn_right_end": 285, "animblendctrl": 285, "varnam": 285, "fifo3_var": 285, "root_ctrl": 285, "checkpoint": 285, "228": 285, "unexpect": 285, "eof": 285, "unmatch": 285, "deepli": 285, "209": 285, "sdfsd": 285, "datablockpars": 285, "pitfal": 285, "creatur": 286, "_animbnl": 286, "auxiliari": 288, "plastic": 288, "thorough": 289, "preemptiv": 289, "rayfir": 289, "52": 289, "dynamic_deform": 289, "biggest": 289, "m123_truck": 289, "cars_modern": 289, "deformstart": 289, "deformend": 289, "rigidobj": 289, "realism": 289, "wood_solid": 289, "250": 289, "diamet": 289, "cylind": 289, "inaccuraci": 289, "lens": 289, "mudguard": 289, "necessit": 289, "fuel": 289, "arch": 289, "fender": 289, "cab": 289, "cm": 289, "strike": 289, "sacrif": 289, "roll": 289, "300": 289, "400": 289, "crumpl": 289, "broader": 289, "fragil": 289, "brittl": 289, "vibrant": 289, "15500": 289, "500": 289, "passeng": 289, "respond": 289, "dispers": 289, "outward": 289, "cabin": 289, "rear": 289, "diagon": 289, "fractur": 289, "m123_truck_destr": 289, "m123_truck_destr_deform": 289, "unresolv": 289, "suppress": 289, "physr": 289, "m123_truck_destr_phobj": 289, "impulsethreshold": 289, "dmpreset": 289, "metal_light_explosive_prop": 289, "ad_car_wreck": 289, "fxscale": 289, "impuls": 289, "explos": 289, "vfsrom": 289, "avg_proto": 289, "apex_test_scen": 289, "test_01_car": 289, "diffuse_tex_scal": 289, "normals_tex_scal": 289, "diffuse_pow": 289, "normals_pow": 289, "max_height": 289, "springback": 289, "expand_atten": 289, "expand_atten_pow": 289, "noise_scal": 289, "noise_pow": 289, "amplifi": 289, "crumple_rnd": 289, "crumple_forc": 289, "crumple_dist": 289, "counterpart": 289, "shatter": 289, "radial": 289, "breakag": 289, "rendinst_pbr_glass": 289, "dynamic_pbr_glass": 289, "m123_truck_destr_deform_fin": 289, "zis_6_bz": 289, "crush": 289, "assess": 289, "fdd": 289, "creas": 289, "eject": 289, "deliber": 289, "ruptur": 289, "invest": 289, "zis_6_bz_deform_modif": 289, "zis_6_bz_deform": 289, "spring": 289, "stress": 289, "arctic_tayga_patrul_551": 289, "redon": 289, "visor": 289, "intric": 289, "breakup": 289, "cleanli": 289, "arctic_tayga_patrul_551_deform_rigid_body_don": 289, "coher": 289, "dashboard": 289, "arctic_tayga_patrul_551_deform": 289, "renault_ahn": 289, "exceedingli": 289, "seatback": 289, "mimic": 289, "splinter": 289, "hing": 289, "sturdier": 289, "disc": 289, "circular": 289, "renault_ahn_a_deform_ready_to_deform": 289, "renault_ahn_a_deform_ffd_don": 289, "renault_ahn_a_deform_all_deformation_don": 289, "renault_ahn_a_deform": 289}, "objects": {"": [[45, 0, 1, "c.CMP", "CMP"], [53, 0, 1, "c.D3D_HAS_QUADS", "D3D_HAS_QUADS"], [59, 0, 1, "c.DABFG_PP_NODE_SRC", "DABFG_PP_NODE_SRC"], [45, 0, 1, "c.EQU", "EQU"], [34, 0, 1, "c.FIELD_MATCHES", "FIELD_MATCHES"], [45, 0, 1, "c.FOR_EACH_FIELD", "FOR_EACH_FIELD"], [52, 0, 1, "c.GET_VSDREG", "GET_VSDREG"], [52, 0, 1, "c.GET_VSDSKIP", "GET_VSDSKIP"], [52, 0, 1, "c.GET_VSDSTREAM", "GET_VSDSTREAM"], [52, 0, 1, "c.MAKE_VSDREG", "MAKE_VSDREG"], [52, 0, 1, "c.MAKE_VSDSTREAM", "MAKE_VSDSTREAM"], [56, 0, 1, "c.USE_STAGING_MULTIDRAW_BUF", "USE_STAGING_MULTIDRAW_BUF"], [52, 0, 1, "c.VSDOP_INPUT", "VSDOP_INPUT"], [52, 0, 1, "c.VSDOP_MASK", "VSDOP_MASK"], [52, 0, 1, "c.VSDOP_STREAM", "VSDOP_STREAM"], [52, 0, 1, "c.VSDR_BLENDIND", "VSDR_BLENDIND"], [52, 0, 1, "c.VSDR_BLENDW", "VSDR_BLENDW"], [52, 0, 1, "c.VSDR_DIFF", "VSDR_DIFF"], [52, 0, 1, "c.VSDR_MASK", "VSDR_MASK"], [52, 0, 1, "c.VSDR_NORM", "VSDR_NORM"], [52, 0, 1, "c.VSDR_NORM2", "VSDR_NORM2"], [52, 0, 1, "c.VSDR_POS", "VSDR_POS"], [52, 0, 1, "c.VSDR_POS2", "VSDR_POS2"], [52, 0, 1, "c.VSDR_PSIZE", "VSDR_PSIZE"], [52, 0, 1, "c.VSDR_SPEC", "VSDR_SPEC"], [52, 0, 1, "c.VSDR_TEXC0", "VSDR_TEXC0"], [52, 0, 1, "c.VSDR_TEXC1", "VSDR_TEXC1"], [52, 0, 1, "c.VSDR_TEXC10", "VSDR_TEXC10"], [52, 0, 1, "c.VSDR_TEXC11", "VSDR_TEXC11"], [52, 0, 1, "c.VSDR_TEXC12", "VSDR_TEXC12"], [52, 0, 1, "c.VSDR_TEXC13", "VSDR_TEXC13"], [52, 0, 1, "c.VSDR_TEXC14", "VSDR_TEXC14"], [52, 0, 1, "c.VSDR_TEXC15", "VSDR_TEXC15"], [52, 0, 1, "c.VSDR_TEXC2", "VSDR_TEXC2"], [52, 0, 1, "c.VSDR_TEXC3", "VSDR_TEXC3"], [52, 0, 1, "c.VSDR_TEXC4", "VSDR_TEXC4"], [52, 0, 1, "c.VSDR_TEXC5", "VSDR_TEXC5"], [52, 0, 1, "c.VSDR_TEXC6", "VSDR_TEXC6"], [52, 0, 1, "c.VSDR_TEXC7", "VSDR_TEXC7"], [52, 0, 1, "c.VSDR_TEXC8", "VSDR_TEXC8"], [52, 0, 1, "c.VSDR_TEXC9", "VSDR_TEXC9"], [52, 0, 1, "c.VSDS_MASK", "VSDS_MASK"], [52, 0, 1, "c.VSDS_PER_INSTANCE_DATA", "VSDS_PER_INSTANCE_DATA"], [52, 0, 1, "c.VSDT_DEC3N", "VSDT_DEC3N"], [52, 0, 1, "c.VSDT_E3DCOLOR", "VSDT_E3DCOLOR"], [52, 0, 1, "c.VSDT_FLOAT1", "VSDT_FLOAT1"], [52, 0, 1, "c.VSDT_FLOAT2", "VSDT_FLOAT2"], [52, 0, 1, "c.VSDT_FLOAT3", "VSDT_FLOAT3"], [52, 0, 1, "c.VSDT_FLOAT4", "VSDT_FLOAT4"], [52, 0, 1, "c.VSDT_HALF2", "VSDT_HALF2"], [52, 0, 1, "c.VSDT_HALF4", "VSDT_HALF4"], [52, 0, 1, "c.VSDT_INT1", "VSDT_INT1"], [52, 0, 1, "c.VSDT_INT2", "VSDT_INT2"], [52, 0, 1, "c.VSDT_INT3", "VSDT_INT3"], [52, 0, 1, "c.VSDT_INT4", "VSDT_INT4"], [52, 0, 1, "c.VSDT_MASK", "VSDT_MASK"], [52, 0, 1, "c.VSDT_SHORT2", "VSDT_SHORT2"], [52, 0, 1, "c.VSDT_SHORT2N", "VSDT_SHORT2N"], [52, 0, 1, "c.VSDT_SHORT4", "VSDT_SHORT4"], [52, 0, 1, "c.VSDT_SHORT4N", "VSDT_SHORT4N"], [52, 0, 1, "c.VSDT_UBYTE4", "VSDT_UBYTE4"], [52, 0, 1, "c.VSDT_UDEC3", "VSDT_UDEC3"], [52, 0, 1, "c.VSDT_UINT1", "VSDT_UINT1"], [52, 0, 1, "c.VSDT_UINT2", "VSDT_UINT2"], [52, 0, 1, "c.VSDT_UINT3", "VSDT_UINT3"], [52, 0, 1, "c.VSDT_UINT4", "VSDT_UINT4"], [52, 0, 1, "c.VSDT_USHORT2N", "VSDT_USHORT2N"], [52, 0, 1, "c.VSDT_USHORT4N", "VSDT_USHORT4N"], [52, 0, 1, "c.VSD_END", "VSD_END"], [52, 0, 1, "c.VSD_REG", "VSD_REG"], [52, 0, 1, "c.VSD_SKIP", "VSD_SKIP"], [52, 0, 1, "c.VSD_SKIPFLG", "VSD_SKIPFLG"], [52, 0, 1, "c.VSD_STREAM", "VSD_STREAM"], [52, 0, 1, "c.VSD_STREAM_PER_INSTANCE_DATA", "VSD_STREAM_PER_INSTANCE_DATA"], [52, 0, 1, "c.VSD_STREAM_PER_VERTEX_DATA", "VSD_STREAM_PER_VERTEX_DATA"], [52, 0, 1, "c.VSTREAMSRC_INDEXED_DATA", "VSTREAMSRC_INDEXED_DATA"], [52, 0, 1, "c.VSTREAMSRC_INSTANCE_DATA", "VSTREAMSRC_INSTANCE_DATA"], [52, 0, 1, "c.VSTREAMSRC_NORMAL_DATA", "VSTREAMSRC_NORMAL_DATA"], [53, 0, 1, "c.d3d_err", "d3d_err"], [53, 0, 1, "c.d3derr", "d3derr"], [30, 1, 1, "_CPPv4Ut1_1", "[anonymous]"], [30, 2, 1, "_CPPv4NUt1_119DRV3D_CPU_FREQ_NSECE", "[anonymous]::DRV3D_CPU_FREQ_NSEC"], [30, 2, 1, "_CPPv4NUt1_127DRV3D_CPU_FREQ_TYPE_PROFILEE", "[anonymous]::DRV3D_CPU_FREQ_TYPE_PROFILE"], [30, 2, 1, "_CPPv4NUt1_123DRV3D_CPU_FREQ_TYPE_QPCE", "[anonymous]::DRV3D_CPU_FREQ_TYPE_QPC"], [30, 2, 1, "_CPPv4NUt1_123DRV3D_CPU_FREQ_TYPE_REFE", "[anonymous]::DRV3D_CPU_FREQ_TYPE_REF"], [30, 2, 1, "_CPPv4NUt1_127DRV3D_CPU_FREQ_TYPE_UNKNOWNE", "[anonymous]::DRV3D_CPU_FREQ_TYPE_UNKNOWN"], [54, 1, 1, "_CPPv4Ut2_37", "[anonymous]"], [54, 2, 1, "_CPPv4NUt2_3720TEXLOCK_COPY_STAGINGE", "[anonymous]::TEXLOCK_COPY_STAGING"], [54, 2, 1, "_CPPv4NUt2_3715TEXLOCK_DEFAULTE", "[anonymous]::TEXLOCK_DEFAULT"], [54, 2, 1, "_CPPv4NUt2_3721TEXLOCK_DELSYSMEMCOPYE", "[anonymous]::TEXLOCK_DELSYSMEMCOPY"], [54, 2, 1, "_CPPv4NUt2_3715TEXLOCK_DISCARDE", "[anonymous]::TEXLOCK_DISCARD"], [54, 2, 1, "_CPPv4NUt2_3733TEXLOCK_DONOTUPDATEON9EXBYDEFAULTE", "[anonymous]::TEXLOCK_DONOTUPDATEON9EXBYDEFAULT"], [54, 2, 1, "_CPPv4NUt2_3719TEXLOCK_NOOVERWRITEE", "[anonymous]::TEXLOCK_NOOVERWRITE"], [54, 2, 1, "_CPPv4NUt2_3717TEXLOCK_NOSYSLOCKE", "[anonymous]::TEXLOCK_NOSYSLOCK"], [54, 2, 1, "_CPPv4NUt2_3723TEXLOCK_NO_DIRTY_UPDATEE", "[anonymous]::TEXLOCK_NO_DIRTY_UPDATE"], [54, 2, 1, "_CPPv4NUt2_3715TEXLOCK_RAWDATAE", "[anonymous]::TEXLOCK_RAWDATA"], [54, 2, 1, "_CPPv4NUt2_3712TEXLOCK_READE", "[anonymous]::TEXLOCK_READ"], [54, 2, 1, "_CPPv4NUt2_3717TEXLOCK_READWRITEE", "[anonymous]::TEXLOCK_READWRITE"], [54, 2, 1, "_CPPv4NUt2_3714TEXLOCK_RWMASKE", "[anonymous]::TEXLOCK_RWMASK"], [54, 2, 1, "_CPPv4NUt2_3718TEXLOCK_SYSTEXLOCKE", "[anonymous]::TEXLOCK_SYSTEXLOCK"], [54, 2, 1, "_CPPv4NUt2_3724TEXLOCK_UPDATEFROMSYSTEXE", "[anonymous]::TEXLOCK_UPDATEFROMSYSTEX"], [54, 2, 1, "_CPPv4NUt2_3713TEXLOCK_WRITEE", "[anonymous]::TEXLOCK_WRITE"], [54, 1, 1, "_CPPv4Ut2_38", "[anonymous]"], [54, 2, 1, "_CPPv4NUt2_3817TEXLF_CALCMIPMAPSE", "[anonymous]::TEXLF_CALCMIPMAPS"], [54, 1, 1, "_CPPv4Ut2_39", "[anonymous]"], [54, 2, 1, "_CPPv4NUt2_3913CUBEFACE_NEGXE", "[anonymous]::CUBEFACE_NEGX"], [54, 2, 1, "_CPPv4NUt2_3913CUBEFACE_NEGYE", "[anonymous]::CUBEFACE_NEGY"], [54, 2, 1, "_CPPv4NUt2_3913CUBEFACE_NEGZE", "[anonymous]::CUBEFACE_NEGZ"], [54, 2, 1, "_CPPv4NUt2_3913CUBEFACE_POSXE", "[anonymous]::CUBEFACE_POSX"], [54, 2, 1, "_CPPv4NUt2_3913CUBEFACE_POSYE", "[anonymous]::CUBEFACE_POSY"], [54, 2, 1, "_CPPv4NUt2_3913CUBEFACE_POSZE", "[anonymous]::CUBEFACE_POSZ"], [52, 1, 1, "_CPPv4Ut2_40", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_4011MAXSAMPLERSE", "[anonymous]::MAXSAMPLERS"], [52, 2, 1, "_CPPv4NUt2_4014MAXSAMPLERS_VSE", "[anonymous]::MAXSAMPLERS_VS"], [52, 2, 1, "_CPPv4NUt2_4010MAXSTREAMSE", "[anonymous]::MAXSTREAMS"], [52, 2, 1, "_CPPv4NUt2_4012MAX_SLI_AFRSE", "[anonymous]::MAX_SLI_AFRS"], [52, 1, 1, "_CPPv4Ut2_41", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_4117VDECLUSAGE_BINORME", "[anonymous]::VDECLUSAGE_BINORM"], [52, 2, 1, "_CPPv4NUt2_4119VDECLUSAGE_BLENDINDE", "[anonymous]::VDECLUSAGE_BLENDIND"], [52, 2, 1, "_CPPv4NUt2_4117VDECLUSAGE_BLENDWE", "[anonymous]::VDECLUSAGE_BLENDW"], [52, 2, 1, "_CPPv4NUt2_4116VDECLUSAGE_COLORE", "[anonymous]::VDECLUSAGE_COLOR"], [52, 2, 1, "_CPPv4NUt2_4116VDECLUSAGE_DEPTHE", "[anonymous]::VDECLUSAGE_DEPTH"], [52, 2, 1, "_CPPv4NUt2_4114VDECLUSAGE_FOGE", "[anonymous]::VDECLUSAGE_FOG"], [52, 2, 1, "_CPPv4NUt2_4115VDECLUSAGE_NORME", "[anonymous]::VDECLUSAGE_NORM"], [52, 2, 1, "_CPPv4NUt2_4114VDECLUSAGE_POSE", "[anonymous]::VDECLUSAGE_POS"], [52, 2, 1, "_CPPv4NUt2_4116VDECLUSAGE_PSIZEE", "[anonymous]::VDECLUSAGE_PSIZE"], [52, 2, 1, "_CPPv4NUt2_4117VDECLUSAGE_SAMPLEE", "[anonymous]::VDECLUSAGE_SAMPLE"], [52, 2, 1, "_CPPv4NUt2_4115VDECLUSAGE_TANGE", "[anonymous]::VDECLUSAGE_TANG"], [52, 2, 1, "_CPPv4NUt2_4113VDECLUSAGE_TCE", "[anonymous]::VDECLUSAGE_TC"], [52, 2, 1, "_CPPv4NUt2_4121VDECLUSAGE_TESSFACTORE", "[anonymous]::VDECLUSAGE_TESSFACTOR"], [52, 2, 1, "_CPPv4NUt2_4115VDECLUSAGE_TPOSE", "[anonymous]::VDECLUSAGE_TPOS"], [52, 1, 1, "_CPPv4Ut2_42", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_4212SBCF_ALIGN16E", "[anonymous]::SBCF_ALIGN16"], [52, 2, 1, "_CPPv4NUt2_4218SBCF_BIND_CONSTANTE", "[anonymous]::SBCF_BIND_CONSTANT"], [52, 2, 1, "_CPPv4NUt2_4215SBCF_BIND_INDEXE", "[anonymous]::SBCF_BIND_INDEX"], [52, 2, 1, "_CPPv4NUt2_4214SBCF_BIND_MASKE", "[anonymous]::SBCF_BIND_MASK"], [52, 2, 1, "_CPPv4NUt2_4220SBCF_BIND_SHADER_RESE", "[anonymous]::SBCF_BIND_SHADER_RES"], [52, 2, 1, "_CPPv4NUt2_4219SBCF_BIND_UNORDEREDE", "[anonymous]::SBCF_BIND_UNORDERED"], [52, 2, 1, "_CPPv4NUt2_4216SBCF_BIND_VERTEXE", "[anonymous]::SBCF_BIND_VERTEX"], [52, 2, 1, "_CPPv4NUt2_4217SBCF_CB_ONE_FRAMEE", "[anonymous]::SBCF_CB_ONE_FRAME"], [52, 2, 1, "_CPPv4NUt2_4218SBCF_CB_PERSISTENTE", "[anonymous]::SBCF_CB_PERSISTENT"], [52, 2, 1, "_CPPv4NUt2_4220SBCF_CPU_ACCESS_MASKE", "[anonymous]::SBCF_CPU_ACCESS_MASK"], [52, 2, 1, "_CPPv4NUt2_4220SBCF_CPU_ACCESS_READE", "[anonymous]::SBCF_CPU_ACCESS_READ"], [52, 2, 1, "_CPPv4NUt2_4221SBCF_CPU_ACCESS_WRITEE", "[anonymous]::SBCF_CPU_ACCESS_WRITE"], [52, 2, 1, "_CPPv4NUt2_4212SBCF_DYNAMICE", "[anonymous]::SBCF_DYNAMIC"], [52, 2, 1, "_CPPv4NUt2_4213SBCF_FRAMEMEME", "[anonymous]::SBCF_FRAMEMEM"], [52, 2, 1, "_CPPv4NUt2_4212SBCF_INDEX32E", "[anonymous]::SBCF_INDEX32"], [52, 2, 1, "_CPPv4NUt2_4213SBCF_INDIRECTE", "[anonymous]::SBCF_INDIRECT"], [52, 2, 1, "_CPPv4NUt2_4219SBCF_MISC_ALLOW_RAWE", "[anonymous]::SBCF_MISC_ALLOW_RAW"], [52, 2, 1, "_CPPv4NUt2_4222SBCF_MISC_DRAWINDIRECTE", "[anonymous]::SBCF_MISC_DRAWINDIRECT"], [52, 2, 1, "_CPPv4NUt2_4220SBCF_MISC_ESRAM_ONLYE", "[anonymous]::SBCF_MISC_ESRAM_ONLY"], [52, 2, 1, "_CPPv4NUt2_4214SBCF_MISC_MASKE", "[anonymous]::SBCF_MISC_MASK"], [52, 2, 1, "_CPPv4NUt2_4220SBCF_MISC_STRUCTUREDE", "[anonymous]::SBCF_MISC_STRUCTURED"], [52, 2, 1, "_CPPv4NUt2_4219SBCF_STAGING_BUFFERE", "[anonymous]::SBCF_STAGING_BUFFER"], [52, 2, 1, "_CPPv4NUt2_4220SBCF_UA_BYTE_ADDRESSE", "[anonymous]::SBCF_UA_BYTE_ADDRESS"], [52, 2, 1, "_CPPv4NUt2_4229SBCF_UA_BYTE_ADDRESS_READBACKE", "[anonymous]::SBCF_UA_BYTE_ADDRESS_READBACK"], [52, 2, 1, "_CPPv4NUt2_4216SBCF_UA_INDIRECTE", "[anonymous]::SBCF_UA_INDIRECT"], [52, 2, 1, "_CPPv4NUt2_4223SBCF_UA_SR_BYTE_ADDRESSE", "[anonymous]::SBCF_UA_SR_BYTE_ADDRESS"], [52, 2, 1, "_CPPv4NUt2_4221SBCF_UA_SR_STRUCTUREDE", "[anonymous]::SBCF_UA_SR_STRUCTURED"], [52, 2, 1, "_CPPv4NUt2_4218SBCF_UA_STRUCTUREDE", "[anonymous]::SBCF_UA_STRUCTURED"], [52, 2, 1, "_CPPv4NUt2_4227SBCF_UA_STRUCTURED_READBACKE", "[anonymous]::SBCF_UA_STRUCTURED_READBACK"], [52, 2, 1, "_CPPv4NUt2_4254SBCF_USAGE_ACCELLERATION_STRUCTURE_BUILD_SCRATCH_SPACEE", "[anonymous]::SBCF_USAGE_ACCELLERATION_STRUCTURE_BUILD_SCRATCH_SPACE"], [52, 2, 1, "_CPPv4NUt2_4220SBCF_USAGE_READ_BACKE", "[anonymous]::SBCF_USAGE_READ_BACK"], [52, 2, 1, "_CPPv4NUt2_4231SBCF_USAGE_SHADER_BINDING_TABLEE", "[anonymous]::SBCF_USAGE_SHADER_BINDING_TABLE"], [52, 2, 1, "_CPPv4NUt2_4212SBCF_ZEROMEME", "[anonymous]::SBCF_ZEROMEM"], [52, 1, 1, "_CPPv4Ut2_43", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_4311WRAP_COORD0E", "[anonymous]::WRAP_COORD0"], [52, 2, 1, "_CPPv4NUt2_4311WRAP_COORD1E", "[anonymous]::WRAP_COORD1"], [52, 2, 1, "_CPPv4NUt2_4311WRAP_COORD2E", "[anonymous]::WRAP_COORD2"], [52, 2, 1, "_CPPv4NUt2_4311WRAP_COORD3E", "[anonymous]::WRAP_COORD3"], [52, 1, 1, "_CPPv4Ut2_44", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_4410VCDEST_AMBE", "[anonymous]::VCDEST_AMB"], [52, 2, 1, "_CPPv4NUt2_4415VCDEST_AMB_DIFFE", "[anonymous]::VCDEST_AMB_DIFF"], [52, 2, 1, "_CPPv4NUt2_4411VCDEST_DIFFE", "[anonymous]::VCDEST_DIFF"], [52, 2, 1, "_CPPv4NUt2_4411VCDEST_EMISE", "[anonymous]::VCDEST_EMIS"], [52, 2, 1, "_CPPv4NUt2_4411VCDEST_NONEE", "[anonymous]::VCDEST_NONE"], [52, 2, 1, "_CPPv4NUt2_4411VCDEST_SPECE", "[anonymous]::VCDEST_SPEC"], [52, 1, 1, "_CPPv4Ut2_45", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_4513WRITEMASK_ALLE", "[anonymous]::WRITEMASK_ALL"], [52, 2, 1, "_CPPv4NUt2_4515WRITEMASK_ALPHAE", "[anonymous]::WRITEMASK_ALPHA"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_ALPHA0E", "[anonymous]::WRITEMASK_ALPHA0"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_ALPHA1E", "[anonymous]::WRITEMASK_ALPHA1"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_ALPHA2E", "[anonymous]::WRITEMASK_ALPHA2"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_ALPHA3E", "[anonymous]::WRITEMASK_ALPHA3"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_ALPHA4E", "[anonymous]::WRITEMASK_ALPHA4"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_ALPHA5E", "[anonymous]::WRITEMASK_ALPHA5"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_ALPHA6E", "[anonymous]::WRITEMASK_ALPHA6"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_ALPHA7E", "[anonymous]::WRITEMASK_ALPHA7"], [52, 2, 1, "_CPPv4NUt2_4514WRITEMASK_BLUEE", "[anonymous]::WRITEMASK_BLUE"], [52, 2, 1, "_CPPv4NUt2_4515WRITEMASK_BLUE0E", "[anonymous]::WRITEMASK_BLUE0"], [52, 2, 1, "_CPPv4NUt2_4515WRITEMASK_BLUE1E", "[anonymous]::WRITEMASK_BLUE1"], [52, 2, 1, "_CPPv4NUt2_4515WRITEMASK_BLUE2E", "[anonymous]::WRITEMASK_BLUE2"], [52, 2, 1, "_CPPv4NUt2_4515WRITEMASK_BLUE3E", "[anonymous]::WRITEMASK_BLUE3"], [52, 2, 1, "_CPPv4NUt2_4515WRITEMASK_BLUE4E", "[anonymous]::WRITEMASK_BLUE4"], [52, 2, 1, "_CPPv4NUt2_4515WRITEMASK_BLUE5E", "[anonymous]::WRITEMASK_BLUE5"], [52, 2, 1, "_CPPv4NUt2_4515WRITEMASK_BLUE6E", "[anonymous]::WRITEMASK_BLUE6"], [52, 2, 1, "_CPPv4NUt2_4515WRITEMASK_BLUE7E", "[anonymous]::WRITEMASK_BLUE7"], [52, 2, 1, "_CPPv4NUt2_4517WRITEMASK_DEFAULTE", "[anonymous]::WRITEMASK_DEFAULT"], [52, 2, 1, "_CPPv4NUt2_4515WRITEMASK_GREENE", "[anonymous]::WRITEMASK_GREEN"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_GREEN0E", "[anonymous]::WRITEMASK_GREEN0"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_GREEN1E", "[anonymous]::WRITEMASK_GREEN1"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_GREEN2E", "[anonymous]::WRITEMASK_GREEN2"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_GREEN3E", "[anonymous]::WRITEMASK_GREEN3"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_GREEN4E", "[anonymous]::WRITEMASK_GREEN4"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_GREEN5E", "[anonymous]::WRITEMASK_GREEN5"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_GREEN6E", "[anonymous]::WRITEMASK_GREEN6"], [52, 2, 1, "_CPPv4NUt2_4516WRITEMASK_GREEN7E", "[anonymous]::WRITEMASK_GREEN7"], [52, 2, 1, "_CPPv4NUt2_4513WRITEMASK_REDE", "[anonymous]::WRITEMASK_RED"], [52, 2, 1, "_CPPv4NUt2_4514WRITEMASK_RED0E", "[anonymous]::WRITEMASK_RED0"], [52, 2, 1, "_CPPv4NUt2_4514WRITEMASK_RED1E", "[anonymous]::WRITEMASK_RED1"], [52, 2, 1, "_CPPv4NUt2_4514WRITEMASK_RED2E", "[anonymous]::WRITEMASK_RED2"], [52, 2, 1, "_CPPv4NUt2_4514WRITEMASK_RED3E", "[anonymous]::WRITEMASK_RED3"], [52, 2, 1, "_CPPv4NUt2_4514WRITEMASK_RED4E", "[anonymous]::WRITEMASK_RED4"], [52, 2, 1, "_CPPv4NUt2_4514WRITEMASK_RED5E", "[anonymous]::WRITEMASK_RED5"], [52, 2, 1, "_CPPv4NUt2_4514WRITEMASK_RED6E", "[anonymous]::WRITEMASK_RED6"], [52, 2, 1, "_CPPv4NUt2_4514WRITEMASK_RED7E", "[anonymous]::WRITEMASK_RED7"], [52, 2, 1, "_CPPv4NUt2_4513WRITEMASK_RGBE", "[anonymous]::WRITEMASK_RGB"], [52, 1, 1, "_CPPv4Ut2_46", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_4642DRV3D_FRAMERATE_LIMITED_BY_GPU_UTILIZATIONE", "[anonymous]::DRV3D_FRAMERATE_LIMITED_BY_GPU_UTILIZATION"], [52, 2, 1, "_CPPv4NUt2_4634DRV3D_FRAMERATE_LIMITED_BY_NOTHINGE", "[anonymous]::DRV3D_FRAMERATE_LIMITED_BY_NOTHING"], [52, 2, 1, "_CPPv4NUt2_4643DRV3D_FRAMERATE_LIMITED_BY_REPLAY_UNDERFEEDE", "[anonymous]::DRV3D_FRAMERATE_LIMITED_BY_REPLAY_UNDERFEED"], [52, 2, 1, "_CPPv4NUt2_4638DRV3D_FRAMERATE_LIMITED_BY_REPLAY_WAITE", "[anonymous]::DRV3D_FRAMERATE_LIMITED_BY_REPLAY_WAIT"], [45, 1, 1, "_CPPv4Ut2_47", "[anonymous]"], [45, 2, 1, "_CPPv4NUt2_4717TEXMIPMAP_DEFAULTE", "[anonymous]::TEXMIPMAP_DEFAULT"], [45, 2, 1, "_CPPv4NUt2_4716TEXMIPMAP_LINEARE", "[anonymous]::TEXMIPMAP_LINEAR"], [45, 2, 1, "_CPPv4NUt2_4714TEXMIPMAP_NONEE", "[anonymous]::TEXMIPMAP_NONE"], [45, 2, 1, "_CPPv4NUt2_4715TEXMIPMAP_POINTE", "[anonymous]::TEXMIPMAP_POINT"], [52, 1, 1, "_CPPv4Ut2_48", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_4814VBLOCK_DISCARDE", "[anonymous]::VBLOCK_DISCARD"], [52, 2, 1, "_CPPv4NUt2_4818VBLOCK_NOOVERWRITEE", "[anonymous]::VBLOCK_NOOVERWRITE"], [52, 2, 1, "_CPPv4NUt2_4816VBLOCK_NOSYSLOCKE", "[anonymous]::VBLOCK_NOSYSLOCK"], [52, 2, 1, "_CPPv4NUt2_4815VBLOCK_READONLYE", "[anonymous]::VBLOCK_READONLY"], [52, 2, 1, "_CPPv4NUt2_4816VBLOCK_WRITEONLYE", "[anonymous]::VBLOCK_WRITEONLY"], [52, 1, 1, "_CPPv4Ut2_49", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_4921PRIM_4_CONTROL_POINTSE", "[anonymous]::PRIM_4_CONTROL_POINTS"], [52, 2, 1, "_CPPv4NUt2_4910PRIM_COUNTE", "[anonymous]::PRIM_COUNT"], [52, 2, 1, "_CPPv4NUt2_4913PRIM_LINELISTE", "[anonymous]::PRIM_LINELIST"], [52, 2, 1, "_CPPv4NUt2_4914PRIM_LINESTRIPE", "[anonymous]::PRIM_LINESTRIP"], [52, 2, 1, "_CPPv4NUt2_4914PRIM_POINTLISTE", "[anonymous]::PRIM_POINTLIST"], [52, 2, 1, "_CPPv4NUt2_4911PRIM_TRIFANE", "[anonymous]::PRIM_TRIFAN"], [52, 2, 1, "_CPPv4NUt2_4912PRIM_TRILISTE", "[anonymous]::PRIM_TRILIST"], [52, 2, 1, "_CPPv4NUt2_4913PRIM_TRISTRIPE", "[anonymous]::PRIM_TRISTRIP"], [52, 1, 1, "_CPPv4Ut2_50", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_509TM_GLOBALE", "[anonymous]::TM_GLOBAL"], [52, 2, 1, "_CPPv4NUt2_5013TM_LOCAL2VIEWE", "[anonymous]::TM_LOCAL2VIEW"], [52, 2, 1, "_CPPv4NUt2_507TM_PROJE", "[anonymous]::TM_PROJ"], [52, 2, 1, "_CPPv4NUt2_507TM_VIEWE", "[anonymous]::TM_VIEW"], [52, 2, 1, "_CPPv4NUt2_5013TM_VIEW2LOCALE", "[anonymous]::TM_VIEW2LOCAL"], [52, 2, 1, "_CPPv4NUt2_508TM_WORLDE", "[anonymous]::TM_WORLD"], [52, 2, 1, "_CPPv4NUt2_507TM__NUME", "[anonymous]::TM__NUM"], [52, 1, 1, "_CPPv4Ut2_51", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_5113CLEAR_DISCARDE", "[anonymous]::CLEAR_DISCARD"], [52, 2, 1, "_CPPv4NUt2_5121CLEAR_DISCARD_STENCILE", "[anonymous]::CLEAR_DISCARD_STENCIL"], [52, 2, 1, "_CPPv4NUt2_5120CLEAR_DISCARD_TARGETE", "[anonymous]::CLEAR_DISCARD_TARGET"], [52, 2, 1, "_CPPv4NUt2_5121CLEAR_DISCARD_ZBUFFERE", "[anonymous]::CLEAR_DISCARD_ZBUFFER"], [52, 2, 1, "_CPPv4NUt2_5113CLEAR_STENCILE", "[anonymous]::CLEAR_STENCIL"], [52, 2, 1, "_CPPv4NUt2_5112CLEAR_TARGETE", "[anonymous]::CLEAR_TARGET"], [52, 2, 1, "_CPPv4NUt2_5113CLEAR_ZBUFFERE", "[anonymous]::CLEAR_ZBUFFER"], [52, 1, 1, "_CPPv4Ut2_52", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_5212STNCLOP_DECRE", "[anonymous]::STNCLOP_DECR"], [52, 2, 1, "_CPPv4NUt2_5215STNCLOP_DECRSATE", "[anonymous]::STNCLOP_DECRSAT"], [52, 2, 1, "_CPPv4NUt2_5212STNCLOP_INCRE", "[anonymous]::STNCLOP_INCR"], [52, 2, 1, "_CPPv4NUt2_5215STNCLOP_INCRSATE", "[anonymous]::STNCLOP_INCRSAT"], [52, 2, 1, "_CPPv4NUt2_5214STNCLOP_INVERTE", "[anonymous]::STNCLOP_INVERT"], [52, 2, 1, "_CPPv4NUt2_5212STNCLOP_KEEPE", "[anonymous]::STNCLOP_KEEP"], [52, 2, 1, "_CPPv4NUt2_5215STNCLOP_REPLACEE", "[anonymous]::STNCLOP_REPLACE"], [52, 2, 1, "_CPPv4NUt2_5212STNCLOP_ZEROE", "[anonymous]::STNCLOP_ZERO"], [52, 1, 1, "_CPPv4Ut2_53", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_5314TEXADDR_BORDERE", "[anonymous]::TEXADDR_BORDER"], [52, 2, 1, "_CPPv4NUt2_5313TEXADDR_CLAMPE", "[anonymous]::TEXADDR_CLAMP"], [52, 2, 1, "_CPPv4NUt2_5314TEXADDR_MIRRORE", "[anonymous]::TEXADDR_MIRROR"], [52, 2, 1, "_CPPv4NUt2_5318TEXADDR_MIRRORONCEE", "[anonymous]::TEXADDR_MIRRORONCE"], [52, 2, 1, "_CPPv4NUt2_5312TEXADDR_WRAPE", "[anonymous]::TEXADDR_WRAP"], [52, 1, 1, "_CPPv4Ut2_54", "[anonymous]"], [52, 2, 1, "_CPPv4NUt2_5414TEXFILTER_BESTE", "[anonymous]::TEXFILTER_BEST"], [52, 2, 1, "_CPPv4NUt2_5417TEXFILTER_COMPAREE", "[anonymous]::TEXFILTER_COMPARE"], [52, 2, 1, "_CPPv4NUt2_5417TEXFILTER_DEFAULTE", "[anonymous]::TEXFILTER_DEFAULT"], [52, 2, 1, "_CPPv4NUt2_5416TEXFILTER_LINEARE", "[anonymous]::TEXFILTER_LINEAR"], [52, 2, 1, "_CPPv4NUt2_5414TEXFILTER_NONEE", "[anonymous]::TEXFILTER_NONE"], [52, 2, 1, "_CPPv4NUt2_5415TEXFILTER_POINTE", "[anonymous]::TEXFILTER_POINT"], [35, 1, 1, "_CPPv410APISupport", "APISupport"], [35, 2, 1, "_CPPv4N10APISupport18BLACKLISTED_DRIVERE", "APISupport::BLACKLISTED_DRIVER"], [35, 2, 1, "_CPPv4N10APISupport12FULL_SUPPORTE", "APISupport::FULL_SUPPORT"], [35, 2, 1, "_CPPv4N10APISupport15NO_DEVICE_FOUNDE", "APISupport::NO_DEVICE_FOUND"], [35, 2, 1, "_CPPv4N10APISupport15OUTDATED_DRIVERE", "APISupport::OUTDATED_DRIVER"], [34, 3, 1, "_CPPv435ArrayCubeTextureResourceDescription", "ArrayCubeTextureResourceDescription"], [34, 4, 1, "_CPPv4N35ArrayCubeTextureResourceDescription5cubesE", "ArrayCubeTextureResourceDescription::cubes"], [54, 5, 1, "_CPPv412ArrayTexture", "ArrayTexture"], [34, 3, 1, "_CPPv431ArrayTextureResourceDescription", "ArrayTextureResourceDescription"], [34, 4, 1, "_CPPv4N31ArrayTextureResourceDescription11arrayLayersE", "ArrayTextureResourceDescription::arrayLayers"], [67, 4, 1, "_CPPv412BAD_D3DRESID", "BAD_D3DRESID"], [52, 4, 1, "_CPPv411BAD_FSHADER", "BAD_FSHADER"], [52, 4, 1, "_CPPv418BAD_GPUFENCEHANDLE", "BAD_GPUFENCEHANDLE"], [52, 4, 1, "_CPPv49BAD_PALID", "BAD_PALID"], [52, 4, 1, "_CPPv411BAD_PROGRAM", "BAD_PROGRAM"], [67, 4, 1, "_CPPv413BAD_TEXTUREID", "BAD_TEXTUREID"], [52, 4, 1, "_CPPv49BAD_VDECL", "BAD_VDECL"], [52, 4, 1, "_CPPv49BAD_VPROG", "BAD_VPROG"], [52, 1, 1, "_CPPv47BLENDOP", "BLENDOP"], [52, 2, 1, "_CPPv4N7BLENDOP11BLENDOP_ADDE", "BLENDOP::BLENDOP_ADD"], [52, 2, 1, "_CPPv4N7BLENDOP11BLENDOP_MAXE", "BLENDOP::BLENDOP_MAX"], [52, 2, 1, "_CPPv4N7BLENDOP11BLENDOP_MINE", "BLENDOP::BLENDOP_MIN"], [52, 2, 1, "_CPPv4N7BLENDOP19BLENDOP_REVSUBTRACTE", "BLENDOP::BLENDOP_REVSUBTRACT"], [52, 2, 1, "_CPPv4N7BLENDOP16BLENDOP_SUBTRACTE", "BLENDOP::BLENDOP_SUBTRACT"], [52, 2, 1, "_CPPv4N7BLENDOP11BLENDOP_ADDE", "BLENDOP_ADD"], [52, 2, 1, "_CPPv4N7BLENDOP11BLENDOP_MAXE", "BLENDOP_MAX"], [52, 2, 1, "_CPPv4N7BLENDOP11BLENDOP_MINE", "BLENDOP_MIN"], [52, 2, 1, "_CPPv4N7BLENDOP19BLENDOP_REVSUBTRACTE", "BLENDOP_REVSUBTRACT"], [52, 2, 1, "_CPPv4N7BLENDOP16BLENDOP_SUBTRACTE", "BLENDOP_SUBTRACT"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR17BLEND_BLENDFACTORE", "BLEND_BLENDFACTOR"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR21BLEND_BOTHINVSRCALPHAE", "BLEND_BOTHINVSRCALPHA"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR15BLEND_DESTALPHAE", "BLEND_DESTALPHA"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR15BLEND_DESTCOLORE", "BLEND_DESTCOLOR"], [52, 1, 1, "_CPPv412BLEND_FACTOR", "BLEND_FACTOR"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR17BLEND_BLENDFACTORE", "BLEND_FACTOR::BLEND_BLENDFACTOR"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR21BLEND_BOTHINVSRCALPHAE", "BLEND_FACTOR::BLEND_BOTHINVSRCALPHA"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR15BLEND_DESTALPHAE", "BLEND_FACTOR::BLEND_DESTALPHA"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR15BLEND_DESTCOLORE", "BLEND_FACTOR::BLEND_DESTCOLOR"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR20BLEND_INVBLENDFACTORE", "BLEND_FACTOR::BLEND_INVBLENDFACTOR"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR18BLEND_INVDESTALPHAE", "BLEND_FACTOR::BLEND_INVDESTALPHA"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR18BLEND_INVDESTCOLORE", "BLEND_FACTOR::BLEND_INVDESTCOLOR"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR17BLEND_INVSRCALPHAE", "BLEND_FACTOR::BLEND_INVSRCALPHA"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR17BLEND_INVSRCCOLORE", "BLEND_FACTOR::BLEND_INVSRCCOLOR"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR9BLEND_ONEE", "BLEND_FACTOR::BLEND_ONE"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR14BLEND_SRCALPHAE", "BLEND_FACTOR::BLEND_SRCALPHA"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR17BLEND_SRCALPHASATE", "BLEND_FACTOR::BLEND_SRCALPHASAT"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR14BLEND_SRCCOLORE", "BLEND_FACTOR::BLEND_SRCCOLOR"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR10BLEND_ZEROE", "BLEND_FACTOR::BLEND_ZERO"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR20BLEND_INVBLENDFACTORE", "BLEND_INVBLENDFACTOR"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR18BLEND_INVDESTALPHAE", "BLEND_INVDESTALPHA"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR18BLEND_INVDESTCOLORE", "BLEND_INVDESTCOLOR"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR17BLEND_INVSRCALPHAE", "BLEND_INVSRCALPHA"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR17BLEND_INVSRCCOLORE", "BLEND_INVSRCCOLOR"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR9BLEND_ONEE", "BLEND_ONE"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR14BLEND_SRCALPHAE", "BLEND_SRCALPHA"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR17BLEND_SRCALPHASATE", "BLEND_SRCALPHASAT"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR14BLEND_SRCCOLORE", "BLEND_SRCCOLOR"], [52, 2, 1, "_CPPv4N12BLEND_FACTOR10BLEND_ZEROE", "BLEND_ZERO"], [54, 3, 1, "_CPPv411BaseTexture", "BaseTexture"], [54, 6, 1, "_CPPv4N11BaseTexture11BaseTextureERR11BaseTexture", "BaseTexture::BaseTexture"], [54, 6, 1, "_CPPv4N11BaseTexture11BaseTextureEv", "BaseTexture::BaseTexture"], [54, 3, 1, "_CPPv4N11BaseTexture11IReloadDataE", "BaseTexture::IReloadData"], [54, 6, 1, "_CPPv4N11BaseTexture11IReloadData11destroySelfEv", "BaseTexture::IReloadData::destroySelf"], [54, 6, 1, "_CPPv4N11BaseTexture11IReloadData12reloadD3dResEP11BaseTexture", "BaseTexture::IReloadData::reloadD3dRes"], [54, 7, 1, "_CPPv4N11BaseTexture11IReloadData12reloadD3dResEP11BaseTexture", "BaseTexture::IReloadData::reloadD3dRes::t"], [54, 6, 1, "_CPPv4N11BaseTexture11IReloadDataD0Ev", "BaseTexture::IReloadData::~IReloadData"], [54, 4, 1, "_CPPv4N11BaseTexture10TEX_COPIEDE", "BaseTexture::TEX_COPIED"], [54, 6, 1, "_CPPv4N11BaseTexture11allocateTexEv", "BaseTexture::allocateTex"], [54, 6, 1, "_CPPv4N11BaseTexture13calcSubResIdxEiii", "BaseTexture::calcSubResIdx"], [54, 6, 1, "_CPPv4NK11BaseTexture13calcSubResIdxEii", "BaseTexture::calcSubResIdx"], [54, 7, 1, "_CPPv4N11BaseTexture13calcSubResIdxEiii", "BaseTexture::calcSubResIdx::level"], [54, 7, 1, "_CPPv4NK11BaseTexture13calcSubResIdxEii", "BaseTexture::calcSubResIdx::level"], [54, 7, 1, "_CPPv4N11BaseTexture13calcSubResIdxEiii", "BaseTexture::calcSubResIdx::mip_levels"], [54, 7, 1, "_CPPv4N11BaseTexture13calcSubResIdxEiii", "BaseTexture::calcSubResIdx::slice"], [54, 7, 1, "_CPPv4NK11BaseTexture13calcSubResIdxEii", "BaseTexture::calcSubResIdx::slice"], [54, 6, 1, "_CPPv4N11BaseTexture14disableSamplerEv", "BaseTexture::disableSampler"], [54, 6, 1, "_CPPv4N11BaseTexture10discardTexEv", "BaseTexture::discardTex"], [54, 6, 1, "_CPPv4N11BaseTexture8downSizeEiiiijj", "BaseTexture::downSize"], [54, 7, 1, "_CPPv4N11BaseTexture8downSizeEiiiijj", "BaseTexture::downSize::depth"], [54, 7, 1, "_CPPv4N11BaseTexture8downSizeEiiiijj", "BaseTexture::downSize::height"], [54, 7, 1, "_CPPv4N11BaseTexture8downSizeEiiiijj", "BaseTexture::downSize::level_offset"], [54, 7, 1, "_CPPv4N11BaseTexture8downSizeEiiiijj", "BaseTexture::downSize::mips"], [54, 7, 1, "_CPPv4N11BaseTexture8downSizeEiiiijj", "BaseTexture::downSize::start_src_level"], [54, 7, 1, "_CPPv4N11BaseTexture8downSizeEiiiijj", "BaseTexture::downSize::width"], [54, 6, 1, "_CPPv4N11BaseTexture12generateMipsEv", "BaseTexture::generateMips"], [54, 6, 1, "_CPPv4NK11BaseTexture6getTIDEv", "BaseTexture::getTID"], [54, 6, 1, "_CPPv4NK11BaseTexture10getTexNameEv", "BaseTexture::getTexName"], [54, 6, 1, "_CPPv4NK11BaseTexture7getinfoER11TextureInfoi", "BaseTexture::getinfo"], [54, 7, 1, "_CPPv4NK11BaseTexture7getinfoER11TextureInfoi", "BaseTexture::getinfo::info"], [54, 7, 1, "_CPPv4NK11BaseTexture7getinfoER11TextureInfoi", "BaseTexture::getinfo::level"], [54, 6, 1, "_CPPv4NK11BaseTexture11isCubeArrayEv", "BaseTexture::isCubeArray"], [54, 6, 1, "_CPPv4N11BaseTexture16isSamplerEnabledEv", "BaseTexture::isSamplerEnabled"], [54, 6, 1, "_CPPv4NK11BaseTexture11level_countEv", "BaseTexture::level_count"], [54, 6, 1, "_CPPv4N11BaseTexture7lockboxEPPvRiRiij", "BaseTexture::lockbox"], [54, 6, 1, "_CPPv4N11BaseTexture7lockimgEPPvRiiij", "BaseTexture::lockimg"], [54, 6, 1, "_CPPv4N11BaseTexture7lockimgEPPvRiij", "BaseTexture::lockimg"], [54, 7, 1, "_CPPv4N11BaseTexture7lockimgEPPvRiiij", "BaseTexture::lockimg::flags"], [54, 7, 1, "_CPPv4N11BaseTexture7lockimgEPPvRiij", "BaseTexture::lockimg::flags"], [54, 7, 1, "_CPPv4N11BaseTexture7lockimgEPPvRiiij", "BaseTexture::lockimg::layer"], [54, 7, 1, "_CPPv4N11BaseTexture7lockimgEPPvRiiij", "BaseTexture::lockimg::level"], [54, 7, 1, "_CPPv4N11BaseTexture7lockimgEPPvRiij", "BaseTexture::lockimg::level"], [54, 7, 1, "_CPPv4N11BaseTexture7lockimgEPPvRiiij", "BaseTexture::lockimg::stride_bytes"], [54, 7, 1, "_CPPv4N11BaseTexture7lockimgEPPvRiij", "BaseTexture::lockimg::stride_bytes"], [54, 6, 1, "_CPPv4I0EN11BaseTexture9lockimgExEiPP1TRiij", "BaseTexture::lockimgEx"], [54, 8, 1, "_CPPv4I0EN11BaseTexture9lockimgExEiPP1TRiij", "BaseTexture::lockimgEx::T"], [54, 7, 1, "_CPPv4I0EN11BaseTexture9lockimgExEiPP1TRiij", "BaseTexture::lockimgEx::flags"], [54, 7, 1, "_CPPv4I0EN11BaseTexture9lockimgExEiPP1TRiij", "BaseTexture::lockimgEx::level"], [54, 7, 1, "_CPPv4I0EN11BaseTexture9lockimgExEiPP1TRiij", "BaseTexture::lockimgEx::p"], [54, 7, 1, "_CPPv4I0EN11BaseTexture9lockimgExEiPP1TRiij", "BaseTexture::lockimgEx::stride_bytes"], [54, 6, 1, "_CPPv4N11BaseTexture17makeTmpTexResCopyEiiiib", "BaseTexture::makeTmpTexResCopy"], [54, 6, 1, "_CPPv4N11BaseTextureaSERR11BaseTexture", "BaseTexture::operator="], [54, 6, 1, "_CPPv4N11BaseTexture19replaceTexResObjectERP11BaseTexture", "BaseTexture::replaceTexResObject"], [54, 7, 1, "_CPPv4N11BaseTexture19replaceTexResObjectERP11BaseTexture", "BaseTexture::replaceTexResObject::new_tex"], [54, 4, 1, "_CPPv4N11BaseTexture14samplerEnabledE", "BaseTexture::samplerEnabled"], [54, 6, 1, "_CPPv4N11BaseTexture13setAnisotropyEi", "BaseTexture::setAnisotropy"], [54, 7, 1, "_CPPv4N11BaseTexture13setAnisotropyEi", "BaseTexture::setAnisotropy::level"], [54, 6, 1, "_CPPv4N11BaseTexture17setAnisotropyImplEi", "BaseTexture::setAnisotropyImpl"], [54, 7, 1, "_CPPv4N11BaseTexture17setAnisotropyImplEi", "BaseTexture::setAnisotropyImpl::level"], [54, 6, 1, "_CPPv4N11BaseTexture14setReadStencilEb", "BaseTexture::setReadStencil"], [54, 6, 1, "_CPPv4N11BaseTexture17setReloadCallbackEP11IReloadData", "BaseTexture::setReloadCallback"], [54, 6, 1, "_CPPv4NK11BaseTexture13setResApiNameEPKc", "BaseTexture::setResApiName"], [54, 6, 1, "_CPPv4N11BaseTexture6setTIDE9TEXTUREID", "BaseTexture::setTID"], [54, 6, 1, "_CPPv4N11BaseTexture7texaddrEi", "BaseTexture::texaddr"], [54, 7, 1, "_CPPv4N11BaseTexture7texaddrEi", "BaseTexture::texaddr::addrmode"], [54, 6, 1, "_CPPv4N11BaseTexture11texaddrImplEi", "BaseTexture::texaddrImpl"], [54, 7, 1, "_CPPv4N11BaseTexture11texaddrImplEi", "BaseTexture::texaddrImpl::addrmode"], [54, 6, 1, "_CPPv4N11BaseTexture8texaddruEi", "BaseTexture::texaddru"], [54, 7, 1, "_CPPv4N11BaseTexture8texaddruEi", "BaseTexture::texaddru::addrmode"], [54, 6, 1, "_CPPv4N11BaseTexture12texaddruImplEi", "BaseTexture::texaddruImpl"], [54, 7, 1, "_CPPv4N11BaseTexture12texaddruImplEi", "BaseTexture::texaddruImpl::addrmode"], [54, 6, 1, "_CPPv4N11BaseTexture8texaddrvEi", "BaseTexture::texaddrv"], [54, 7, 1, "_CPPv4N11BaseTexture8texaddrvEi", "BaseTexture::texaddrv::addrmode"], [54, 6, 1, "_CPPv4N11BaseTexture12texaddrvImplEi", "BaseTexture::texaddrvImpl"], [54, 7, 1, "_CPPv4N11BaseTexture12texaddrvImplEi", "BaseTexture::texaddrvImpl::addrmode"], [54, 6, 1, "_CPPv4N11BaseTexture8texaddrwEi", "BaseTexture::texaddrw"], [54, 7, 1, "_CPPv4N11BaseTexture8texaddrwEi", "BaseTexture::texaddrw::addrmode"], [54, 6, 1, "_CPPv4N11BaseTexture12texaddrwImplEi", "BaseTexture::texaddrwImpl"], [54, 6, 1, "_CPPv4N11BaseTexture14texbordercolorE8E3DCOLOR", "BaseTexture::texbordercolor"], [54, 7, 1, "_CPPv4N11BaseTexture14texbordercolorE8E3DCOLOR", "BaseTexture::texbordercolor::color"], [54, 6, 1, "_CPPv4N11BaseTexture18texbordercolorImplE8E3DCOLOR", "BaseTexture::texbordercolorImpl"], [54, 6, 1, "_CPPv4N11BaseTexture9texfilterEi", "BaseTexture::texfilter"], [54, 7, 1, "_CPPv4N11BaseTexture9texfilterEi", "BaseTexture::texfilter::filtermode"], [54, 6, 1, "_CPPv4N11BaseTexture13texfilterImplEi", "BaseTexture::texfilterImpl"], [54, 7, 1, "_CPPv4N11BaseTexture13texfilterImplEi", "BaseTexture::texfilterImpl::filtermode"], [54, 6, 1, "_CPPv4N11BaseTexture6texlodEf", "BaseTexture::texlod"], [54, 7, 1, "_CPPv4N11BaseTexture6texlodEf", "BaseTexture::texlod::mipmaplod"], [54, 6, 1, "_CPPv4N11BaseTexture10texlodImplEf", "BaseTexture::texlodImpl"], [54, 7, 1, "_CPPv4N11BaseTexture10texlodImplEf", "BaseTexture::texlodImpl::mipmaplod"], [54, 6, 1, "_CPPv4N11BaseTexture11texmiplevelEii", "BaseTexture::texmiplevel"], [54, 7, 1, "_CPPv4N11BaseTexture11texmiplevelEii", "BaseTexture::texmiplevel::maxlevel"], [54, 7, 1, "_CPPv4N11BaseTexture11texmiplevelEii", "BaseTexture::texmiplevel::minlevel"], [54, 6, 1, "_CPPv4N11BaseTexture9texmipmapEi", "BaseTexture::texmipmap"], [54, 7, 1, "_CPPv4N11BaseTexture9texmipmapEi", "BaseTexture::texmipmap::mipmapmode"], [54, 6, 1, "_CPPv4N11BaseTexture13texmipmapImplEi", "BaseTexture::texmipmapImpl"], [54, 7, 1, "_CPPv4N11BaseTexture13texmipmapImplEi", "BaseTexture::texmipmapImpl::mipmapmode"], [54, 6, 1, "_CPPv4N11BaseTexture6unlockEv", "BaseTexture::unlock"], [54, 6, 1, "_CPPv4N11BaseTexture9unlockboxEv", "BaseTexture::unlockbox"], [54, 6, 1, "_CPPv4N11BaseTexture9unlockimgEv", "BaseTexture::unlockimg"], [54, 6, 1, "_CPPv4N11BaseTexture6upSizeEiiiijj", "BaseTexture::upSize"], [54, 7, 1, "_CPPv4N11BaseTexture6upSizeEiiiijj", "BaseTexture::upSize::depth"], [54, 7, 1, "_CPPv4N11BaseTexture6upSizeEiiiijj", "BaseTexture::upSize::height"], [54, 7, 1, "_CPPv4N11BaseTexture6upSizeEiiiijj", "BaseTexture::upSize::level_offset"], [54, 7, 1, "_CPPv4N11BaseTexture6upSizeEiiiijj", "BaseTexture::upSize::mips"], [54, 7, 1, "_CPPv4N11BaseTexture6upSizeEiiiijj", "BaseTexture::upSize::start_src_level"], [54, 7, 1, "_CPPv4N11BaseTexture6upSizeEiiiijj", "BaseTexture::upSize::width"], [54, 6, 1, "_CPPv4N11BaseTexture6updateEP11BaseTexture", "BaseTexture::update"], [54, 7, 1, "_CPPv4N11BaseTexture6updateEP11BaseTexture", "BaseTexture::update::src"], [54, 6, 1, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegion"], [54, 7, 1, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegion::dest_subres_idx"], [54, 7, 1, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegion::dest_x"], [54, 7, 1, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegion::dest_y"], [54, 7, 1, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegion::dest_z"], [54, 7, 1, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegion::src"], [54, 7, 1, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegion::src_d"], [54, 7, 1, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegion::src_h"], [54, 7, 1, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegion::src_subres_idx"], [54, 7, 1, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegion::src_w"], [54, 7, 1, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegion::src_x"], [54, 7, 1, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegion::src_y"], [54, 7, 1, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegion::src_z"], [54, 6, 1, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegionNoOrder"], [54, 7, 1, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegionNoOrder::dest_subres_idx"], [54, 7, 1, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegionNoOrder::dest_x"], [54, 7, 1, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegionNoOrder::dest_y"], [54, 7, 1, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegionNoOrder::dest_z"], [54, 7, 1, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegionNoOrder::src"], [54, 7, 1, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegionNoOrder::src_d"], [54, 7, 1, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegionNoOrder::src_h"], [54, 7, 1, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegionNoOrder::src_subres_idx"], [54, 7, 1, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegionNoOrder::src_w"], [54, 7, 1, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegionNoOrder::src_x"], [54, 7, 1, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegionNoOrder::src_y"], [54, 7, 1, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii", "BaseTexture::updateSubRegionNoOrder::src_z"], [54, 6, 1, "_CPPv4N11BaseTextureD0Ev", "BaseTexture::~BaseTexture"], [34, 3, 1, "_CPPv424BasicResourceDescription", "BasicResourceDescription"], [34, 4, 1, "_CPPv4N24BasicResourceDescription10activationE", "BasicResourceDescription::activation"], [34, 4, 1, "_CPPv4N24BasicResourceDescription6cFlagsE", "BasicResourceDescription::cFlags"], [34, 4, 1, "_CPPv4N24BasicResourceDescription10clearValueE", "BasicResourceDescription::clearValue"], [34, 3, 1, "_CPPv431BasicTextureResourceDescription", "BasicTextureResourceDescription"], [34, 4, 1, "_CPPv4N31BasicTextureResourceDescription9mipLevelsE", "BasicTextureResourceDescription::mipLevels"], [34, 3, 1, "_CPPv425BufferResourceDescription", "BufferResourceDescription"], [34, 4, 1, "_CPPv4N25BufferResourceDescription12elementCountE", "BufferResourceDescription::elementCount"], [34, 4, 1, "_CPPv4N25BufferResourceDescription18elementSizeInBytesE", "BufferResourceDescription::elementSizeInBytes"], [34, 4, 1, "_CPPv4N25BufferResourceDescription10viewFormatE", "BufferResourceDescription::viewFormat"], [52, 1, 1, "_CPPv44CMPF", "CMPF"], [52, 2, 1, "_CPPv4N4CMPF11CMPF_ALWAYSE", "CMPF::CMPF_ALWAYS"], [52, 2, 1, "_CPPv4N4CMPF10CMPF_EQUALE", "CMPF::CMPF_EQUAL"], [52, 2, 1, "_CPPv4N4CMPF12CMPF_GREATERE", "CMPF::CMPF_GREATER"], [52, 2, 1, "_CPPv4N4CMPF17CMPF_GREATEREQUALE", "CMPF::CMPF_GREATEREQUAL"], [52, 2, 1, "_CPPv4N4CMPF9CMPF_LESSE", "CMPF::CMPF_LESS"], [52, 2, 1, "_CPPv4N4CMPF14CMPF_LESSEQUALE", "CMPF::CMPF_LESSEQUAL"], [52, 2, 1, "_CPPv4N4CMPF10CMPF_NEVERE", "CMPF::CMPF_NEVER"], [52, 2, 1, "_CPPv4N4CMPF13CMPF_NOTEQUALE", "CMPF::CMPF_NOTEQUAL"], [52, 2, 1, "_CPPv4N4CMPF11CMPF_ALWAYSE", "CMPF_ALWAYS"], [52, 2, 1, "_CPPv4N4CMPF10CMPF_EQUALE", "CMPF_EQUAL"], [52, 2, 1, "_CPPv4N4CMPF12CMPF_GREATERE", "CMPF_GREATER"], [52, 2, 1, "_CPPv4N4CMPF17CMPF_GREATEREQUALE", "CMPF_GREATEREQUAL"], [52, 2, 1, "_CPPv4N4CMPF9CMPF_LESSE", "CMPF_LESS"], [52, 2, 1, "_CPPv4N4CMPF14CMPF_LESSEQUALE", "CMPF_LESSEQUAL"], [52, 2, 1, "_CPPv4N4CMPF10CMPF_NEVERE", "CMPF_NEVER"], [52, 2, 1, "_CPPv4N4CMPF13CMPF_NOTEQUALE", "CMPF_NOTEQUAL"], [52, 1, 1, "_CPPv411CSPreloaded", "CSPreloaded"], [52, 2, 1, "_CPPv4N11CSPreloaded2NoE", "CSPreloaded::No"], [52, 2, 1, "_CPPv4N11CSPreloaded3YesE", "CSPreloaded::Yes"], [52, 2, 1, "_CPPv4N9CULL_TYPE8CULL_CCWE", "CULL_CCW"], [52, 2, 1, "_CPPv4N9CULL_TYPE7CULL_CWE", "CULL_CW"], [52, 2, 1, "_CPPv4N9CULL_TYPE9CULL_NONEE", "CULL_NONE"], [52, 1, 1, "_CPPv49CULL_TYPE", "CULL_TYPE"], [52, 2, 1, "_CPPv4N9CULL_TYPE8CULL_CCWE", "CULL_TYPE::CULL_CCW"], [52, 2, 1, "_CPPv4N9CULL_TYPE7CULL_CWE", "CULL_TYPE::CULL_CW"], [52, 2, 1, "_CPPv4N9CULL_TYPE9CULL_NONEE", "CULL_TYPE::CULL_NONE"], [54, 1, 1, "_CPPv412ChannelDType", "ChannelDType"], [54, 2, 1, "_CPPv4N12ChannelDType4NONEE", "ChannelDType::NONE"], [54, 2, 1, "_CPPv4N12ChannelDType6SFLOATE", "ChannelDType::SFLOAT"], [54, 2, 1, "_CPPv4N12ChannelDType4SINTE", "ChannelDType::SINT"], [54, 2, 1, "_CPPv4N12ChannelDType5SNORME", "ChannelDType::SNORM"], [54, 2, 1, "_CPPv4N12ChannelDType6UFLOATE", "ChannelDType::UFLOAT"], [54, 2, 1, "_CPPv4N12ChannelDType4UINTE", "ChannelDType::UINT"], [54, 2, 1, "_CPPv4N12ChannelDType5UNORME", "ChannelDType::UNORM"], [30, 3, 1, "_CPPv418CompilePipelineSet", "CompilePipelineSet"], [30, 4, 1, "_CPPv4N18CompilePipelineSet18computePipelineSetE", "CompilePipelineSet::computePipelineSet"], [30, 4, 1, "_CPPv4N18CompilePipelineSet10computeSetE", "CompilePipelineSet::computeSet"], [30, 4, 1, "_CPPv4N18CompilePipelineSet13defaultFormatE", "CompilePipelineSet::defaultFormat"], [30, 4, 1, "_CPPv4N18CompilePipelineSet10featureSetE", "CompilePipelineSet::featureSet"], [30, 4, 1, "_CPPv4N18CompilePipelineSet28graphicsNullPixelOverrideSetE", "CompilePipelineSet::graphicsNullPixelOverrideSet"], [30, 4, 1, "_CPPv4N18CompilePipelineSet19graphicsPipelineSetE", "CompilePipelineSet::graphicsPipelineSet"], [30, 4, 1, "_CPPv4N18CompilePipelineSet24graphicsPixelOverrideSetE", "CompilePipelineSet::graphicsPixelOverrideSet"], [30, 4, 1, "_CPPv4N18CompilePipelineSet11graphicsSetE", "CompilePipelineSet::graphicsSet"], [30, 4, 1, "_CPPv4N18CompilePipelineSet14inputLayoutSetE", "CompilePipelineSet::inputLayoutSet"], [30, 4, 1, "_CPPv4N18CompilePipelineSet15meshPipelineSetE", "CompilePipelineSet::meshPipelineSet"], [30, 4, 1, "_CPPv4N18CompilePipelineSet15outputFormatSetE", "CompilePipelineSet::outputFormatSet"], [30, 4, 1, "_CPPv4N18CompilePipelineSet14renderStateSetE", "CompilePipelineSet::renderStateSet"], [30, 4, 1, "_CPPv4N18CompilePipelineSet9signatureE", "CompilePipelineSet::signature"], [54, 5, 1, "_CPPv411CubeTexture", "CubeTexture"], [34, 3, 1, "_CPPv430CubeTextureResourceDescription", "CubeTextureResourceDescription"], [34, 4, 1, "_CPPv4N30CubeTextureResourceDescription6extentE", "CubeTextureResourceDescription::extent"], [67, 3, 1, "_CPPv48D3DRESID", "D3DRESID"], [67, 6, 1, "_CPPv4N8D3DRESID8D3DRESIDERK8D3DRESID", "D3DRESID::D3DRESID"], [67, 6, 1, "_CPPv4N8D3DRESID8D3DRESIDERR8D3DRESID", "D3DRESID::D3DRESID"], [67, 6, 1, "_CPPv4N8D3DRESID8D3DRESIDEj", "D3DRESID::D3DRESID"], [67, 6, 1, "_CPPv4N8D3DRESID8D3DRESIDEv", "D3DRESID::D3DRESID"], [67, 7, 1, "_CPPv4N8D3DRESID8D3DRESIDEj", "D3DRESID::D3DRESID::h"], [67, 7, 1, "_CPPv4N8D3DRESID8D3DRESIDERK8D3DRESID", "D3DRESID::D3DRESID::rhs"], [67, 7, 1, "_CPPv4N8D3DRESID8D3DRESIDERR8D3DRESID", "D3DRESID::D3DRESID::rhs"], [67, 6, 1, "_CPPv4NK8D3DRESID14checkMarkerBitEv", "D3DRESID::checkMarkerBit"], [67, 6, 1, "_CPPv4N8D3DRESID9fromIndexEj", "D3DRESID::fromIndex"], [67, 7, 1, "_CPPv4N8D3DRESID9fromIndexEj", "D3DRESID::fromIndex::index"], [67, 6, 1, "_CPPv4NK8D3DRESID10generationEv", "D3DRESID::generation"], [67, 6, 1, "_CPPv4NK8D3DRESID5indexEv", "D3DRESID::index"], [67, 6, 1, "_CPPv4N8D3DRESID4makeEjj", "D3DRESID::make"], [67, 7, 1, "_CPPv4N8D3DRESID4makeEjj", "D3DRESID::make::gen"], [67, 7, 1, "_CPPv4N8D3DRESID4makeEjj", "D3DRESID::make::index"], [67, 6, 1, "_CPPv4NK8D3DRESIDcvbEv", "D3DRESID::operator bool"], [67, 6, 1, "_CPPv4NK8D3DRESIDcvjEv", "D3DRESID::operator unsigned"], [67, 6, 1, "_CPPv4NK8D3DRESIDneERK8D3DRESID", "D3DRESID::operator!="], [67, 7, 1, "_CPPv4NK8D3DRESIDneERK8D3DRESID", "D3DRESID::operator!=::rhs"], [67, 6, 1, "_CPPv4NK8D3DRESIDltERK8D3DRESID", "D3DRESID::operator<"], [67, 7, 1, "_CPPv4NK8D3DRESIDltERK8D3DRESID", "D3DRESID::operator<::rhs"], [67, 6, 1, "_CPPv4N8D3DRESIDaSERK8D3DRESID", "D3DRESID::operator="], [67, 6, 1, "_CPPv4N8D3DRESIDaSERR8D3DRESID", "D3DRESID::operator="], [67, 6, 1, "_CPPv4NK8D3DRESIDeqERK8D3DRESID", "D3DRESID::operator=="], [67, 7, 1, "_CPPv4NK8D3DRESIDeqERK8D3DRESID", "D3DRESID::operator==::rhs"], [67, 6, 1, "_CPPv4NK8D3DRESIDgtERK8D3DRESID", "D3DRESID::operator>"], [67, 7, 1, "_CPPv4NK8D3DRESIDgtERK8D3DRESID", "D3DRESID::operator>::rhs"], [67, 6, 1, "_CPPv4N8D3DRESID5resetEv", "D3DRESID::reset"], [52, 2, 1, "_CPPv4N16DepthResolveMode26DEPTH_RESOLVE_MODE_AVERAGEE", "DEPTH_RESOLVE_MODE_AVERAGE"], [52, 2, 1, "_CPPv4N16DepthResolveMode22DEPTH_RESOLVE_MODE_MAXE", "DEPTH_RESOLVE_MODE_MAX"], [52, 2, 1, "_CPPv4N16DepthResolveMode22DEPTH_RESOLVE_MODE_MINE", "DEPTH_RESOLVE_MODE_MIN"], [52, 2, 1, "_CPPv4N16DepthResolveMode23DEPTH_RESOLVE_MODE_NONEE", "DEPTH_RESOLVE_MODE_NONE"], [52, 2, 1, "_CPPv4N16DepthResolveMode30DEPTH_RESOLVE_MODE_SAMPLE_ZEROE", "DEPTH_RESOLVE_MODE_SAMPLE_ZERO"], [41, 1, 1, "_CPPv411DepthAccess", "DepthAccess"], [41, 2, 1, "_CPPv4N11DepthAccess2RWE", "DepthAccess::RW"], [41, 2, 1, "_CPPv4N11DepthAccess9SampledROE", "DepthAccess::SampledRO"], [52, 1, 1, "_CPPv416DepthResolveMode", "DepthResolveMode"], [52, 2, 1, "_CPPv4N16DepthResolveMode26DEPTH_RESOLVE_MODE_AVERAGEE", "DepthResolveMode::DEPTH_RESOLVE_MODE_AVERAGE"], [52, 2, 1, "_CPPv4N16DepthResolveMode22DEPTH_RESOLVE_MODE_MAXE", "DepthResolveMode::DEPTH_RESOLVE_MODE_MAX"], [52, 2, 1, "_CPPv4N16DepthResolveMode22DEPTH_RESOLVE_MODE_MINE", "DepthResolveMode::DEPTH_RESOLVE_MODE_MIN"], [52, 2, 1, "_CPPv4N16DepthResolveMode23DEPTH_RESOLVE_MODE_NONEE", "DepthResolveMode::DEPTH_RESOLVE_MODE_NONE"], [52, 2, 1, "_CPPv4N16DepthResolveMode30DEPTH_RESOLVE_MODE_SAMPLE_ZEROE", "DepthResolveMode::DEPTH_RESOLVE_MODE_SAMPLE_ZERO"], [52, 5, 1, "_CPPv424DeviceDriverCapabilities", "DeviceDriverCapabilities"], [52, 3, 1, "_CPPv431DeviceDriverCapabilitiesAndroid", "DeviceDriverCapabilitiesAndroid"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid33castingFullyTypedFormatsSupportedE", "DeviceDriverCapabilitiesAndroid::castingFullyTypedFormatsSupported"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid9hasATIApiE", "DeviceDriverCapabilitiesAndroid::hasATIApi"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid28hasAcceleratedViewInstancingE", "DeviceDriverCapabilitiesAndroid::hasAcceleratedViewInstancing"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid18hasAliasedTexturesE", "DeviceDriverCapabilitiesAndroid::hasAliasedTextures"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid16hasAlphaCoverageE", "DeviceDriverCapabilitiesAndroid::hasAlphaCoverage"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid15hasAsyncComputeE", "DeviceDriverCapabilitiesAndroid::hasAsyncCompute"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid12hasAsyncCopyE", "DeviceDriverCapabilitiesAndroid::hasAsyncCopy"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid20hasBaseVertexSupportE", "DeviceDriverCapabilitiesAndroid::hasBaseVertexSupport"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid22hasBasicViewInstancingE", "DeviceDriverCapabilitiesAndroid::hasBasicViewInstancing"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid20hasBufferOverlapCopyE", "DeviceDriverCapabilitiesAndroid::hasBufferOverlapCopy"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid27hasBufferOverlapRegionsCopyE", "DeviceDriverCapabilitiesAndroid::hasBufferOverlapRegionsCopy"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid17hasCompareSamplerE", "DeviceDriverCapabilitiesAndroid::hasCompareSampler"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid20hasConstBufferOffsetE", "DeviceDriverCapabilitiesAndroid::hasConstBufferOffset"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid7hasDLSSE", "DeviceDriverCapabilitiesAndroid::hasDLSS"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid16hasDepthReadOnlyE", "DeviceDriverCapabilitiesAndroid::hasDepthReadOnly"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid9hasDrawIDE", "DeviceDriverCapabilitiesAndroid::hasDrawID"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid21hasForcedSamplerCountE", "DeviceDriverCapabilitiesAndroid::hasForcedSamplerCount"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid10hasGather4E", "DeviceDriverCapabilitiesAndroid::hasGather4"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid18hasIndirectSupportE", "DeviceDriverCapabilitiesAndroid::hasIndirectSupport"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid13hasMeshShaderE", "DeviceDriverCapabilitiesAndroid::hasMeshShader"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid8hasNVApiE", "DeviceDriverCapabilitiesAndroid::hasNVApi"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid28hasNativeRenderPassSubPassesE", "DeviceDriverCapabilitiesAndroid::hasNativeRenderPassSubPasses"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid37hasNoOverwriteOnShaderResourceBuffersE", "DeviceDriverCapabilitiesAndroid::hasNoOverwriteOnShaderResourceBuffers"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid17hasOcclusionQueryE", "DeviceDriverCapabilitiesAndroid::hasOcclusionQuery"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid26hasOptimizedViewInstancingE", "DeviceDriverCapabilitiesAndroid::hasOptimizedViewInstancing"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid24hasReadMultisampledDepthE", "DeviceDriverCapabilitiesAndroid::hasReadMultisampledDepth"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid25hasResourceCopyConversionE", "DeviceDriverCapabilitiesAndroid::hasResourceCopyConversion"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid30hasShader64BitIntegerResourcesE", "DeviceDriverCapabilitiesAndroid::hasShader64BitIntegerResources"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid18hasStereoExpansionE", "DeviceDriverCapabilitiesAndroid::hasStereoExpansion"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid20hasStructuredBuffersE", "DeviceDriverCapabilitiesAndroid::hasStructuredBuffers"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid19hasTiled2DResourcesE", "DeviceDriverCapabilitiesAndroid::hasTiled2DResources"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid19hasTiled3DResourcesE", "DeviceDriverCapabilitiesAndroid::hasTiled3DResources"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid22hasTiledMemoryAliasingE", "DeviceDriverCapabilitiesAndroid::hasTiledMemoryAliasing"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid27hasTiledSafeResourcesAccessE", "DeviceDriverCapabilitiesAndroid::hasTiledSafeResourcesAccess"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid18hasUAVOnEveryStageE", "DeviceDriverCapabilitiesAndroid::hasUAVOnEveryStage"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid22hasVariableRateShadingE", "DeviceDriverCapabilitiesAndroid::hasVariableRateShading"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid25hasVariableRateShadingBy4E", "DeviceDriverCapabilitiesAndroid::hasVariableRateShadingBy4"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid31hasVariableRateShadingCombinersE", "DeviceDriverCapabilitiesAndroid::hasVariableRateShadingCombiners"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid34hasVariableRateShadingShaderOutputE", "DeviceDriverCapabilitiesAndroid::hasVariableRateShadingShaderOutput"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid29hasVariableRateShadingTextureE", "DeviceDriverCapabilitiesAndroid::hasVariableRateShadingTexture"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid12hasVolMipMapE", "DeviceDriverCapabilitiesAndroid::hasVolMipMap"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesAndroid7hasXESSE", "DeviceDriverCapabilitiesAndroid::hasXESS"], [52, 3, 1, "_CPPv428DeviceDriverCapabilitiesBase", "DeviceDriverCapabilitiesBase"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase33castingFullyTypedFormatsSupportedE", "DeviceDriverCapabilitiesBase::castingFullyTypedFormatsSupported"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase9hasATIApiE", "DeviceDriverCapabilitiesBase::hasATIApi"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase28hasAcceleratedViewInstancingE", "DeviceDriverCapabilitiesBase::hasAcceleratedViewInstancing"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase18hasAliasedTexturesE", "DeviceDriverCapabilitiesBase::hasAliasedTextures"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase16hasAlphaCoverageE", "DeviceDriverCapabilitiesBase::hasAlphaCoverage"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase20hasAnisotropicFilterE", "DeviceDriverCapabilitiesBase::hasAnisotropicFilter"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase15hasAsyncComputeE", "DeviceDriverCapabilitiesBase::hasAsyncCompute"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase12hasAsyncCopyE", "DeviceDriverCapabilitiesBase::hasAsyncCopy"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase20hasBaseVertexSupportE", "DeviceDriverCapabilitiesBase::hasBaseVertexSupport"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase22hasBasicViewInstancingE", "DeviceDriverCapabilitiesBase::hasBasicViewInstancing"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase11hasBindlessE", "DeviceDriverCapabilitiesBase::hasBindless"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase20hasBufferOverlapCopyE", "DeviceDriverCapabilitiesBase::hasBufferOverlapCopy"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase27hasBufferOverlapRegionsCopyE", "DeviceDriverCapabilitiesBase::hasBufferOverlapRegionsCopy"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase17hasCompareSamplerE", "DeviceDriverCapabilitiesBase::hasCompareSampler"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase20hasConditionalRenderE", "DeviceDriverCapabilitiesBase::hasConditionalRender"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase29hasConservativeRassterizationE", "DeviceDriverCapabilitiesBase::hasConservativeRassterization"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase20hasConstBufferOffsetE", "DeviceDriverCapabilitiesBase::hasConstBufferOffset"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase7hasDLSSE", "DeviceDriverCapabilitiesBase::hasDLSS"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase18hasDepthBoundsTestE", "DeviceDriverCapabilitiesBase::hasDepthBoundsTest"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase16hasDepthReadOnlyE", "DeviceDriverCapabilitiesBase::hasDepthReadOnly"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase9hasDrawIDE", "DeviceDriverCapabilitiesBase::hasDrawID"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase21hasForcedSamplerCountE", "DeviceDriverCapabilitiesBase::hasForcedSamplerCount"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase10hasGather4E", "DeviceDriverCapabilitiesBase::hasGather4"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase42hasGeometryIndexInRayAccelerationStructureE", "DeviceDriverCapabilitiesBase::hasGeometryIndexInRayAccelerationStructure"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase22hasIndirectRayDispatchE", "DeviceDriverCapabilitiesBase::hasIndirectRayDispatch"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase18hasIndirectSupportE", "DeviceDriverCapabilitiesBase::hasIndirectSupport"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase13hasInstanceIDE", "DeviceDriverCapabilitiesBase::hasInstanceID"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase13hasLazyMemoryE", "DeviceDriverCapabilitiesBase::hasLazyMemory"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase13hasMeshShaderE", "DeviceDriverCapabilitiesBase::hasMeshShader"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase8hasNVApiE", "DeviceDriverCapabilitiesBase::hasNVApi"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase34hasNativeRayTracePipelineExpansionE", "DeviceDriverCapabilitiesBase::hasNativeRayTracePipelineExpansion"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase28hasNativeRenderPassSubPassesE", "DeviceDriverCapabilitiesBase::hasNativeRenderPassSubPasses"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase37hasNoOverwriteOnShaderResourceBuffersE", "DeviceDriverCapabilitiesBase::hasNoOverwriteOnShaderResourceBuffers"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase17hasOcclusionQueryE", "DeviceDriverCapabilitiesBase::hasOcclusionQuery"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase26hasOptimizedViewInstancingE", "DeviceDriverCapabilitiesBase::hasOptimizedViewInstancing"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase19hasQuadTessellationE", "DeviceDriverCapabilitiesBase::hasQuadTessellation"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase27hasRayAccelerationStructureE", "DeviceDriverCapabilitiesBase::hasRayAccelerationStructure"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase14hasRayDispatchE", "DeviceDriverCapabilitiesBase::hasRayDispatch"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase11hasRayQueryE", "DeviceDriverCapabilitiesBase::hasRayQuery"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase24hasReadMultisampledDepthE", "DeviceDriverCapabilitiesBase::hasReadMultisampledDepth"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase25hasRenderPassDepthResolveE", "DeviceDriverCapabilitiesBase::hasRenderPassDepthResolve"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase25hasResourceCopyConversionE", "DeviceDriverCapabilitiesBase::hasResourceCopyConversion"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase16hasResourceHeapsE", "DeviceDriverCapabilitiesBase::hasResourceHeaps"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase30hasShader64BitIntegerResourcesE", "DeviceDriverCapabilitiesBase::hasShader64BitIntegerResources"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase23hasShaderFloat16SupportE", "DeviceDriverCapabilitiesBase::hasShaderFloat16Support"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase39hasSkipPrimitiveTypeInRayTracingShadersE", "DeviceDriverCapabilitiesBase::hasSkipPrimitiveTypeInRayTracingShaders"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase18hasStereoExpansionE", "DeviceDriverCapabilitiesBase::hasStereoExpansion"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase20hasStructuredBuffersE", "DeviceDriverCapabilitiesBase::hasStructuredBuffers"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase24hasTileBasedArchitectureE", "DeviceDriverCapabilitiesBase::hasTileBasedArchitecture"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase19hasTiled2DResourcesE", "DeviceDriverCapabilitiesBase::hasTiled2DResources"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase19hasTiled3DResourcesE", "DeviceDriverCapabilitiesBase::hasTiled3DResources"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase22hasTiledMemoryAliasingE", "DeviceDriverCapabilitiesBase::hasTiledMemoryAliasing"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase27hasTiledSafeResourcesAccessE", "DeviceDriverCapabilitiesBase::hasTiledSafeResourcesAccess"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase18hasUAVOnEveryStageE", "DeviceDriverCapabilitiesBase::hasUAVOnEveryStage"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase27hasUAVOnlyForcedSampleCountE", "DeviceDriverCapabilitiesBase::hasUAVOnlyForcedSampleCount"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase22hasVariableRateShadingE", "DeviceDriverCapabilitiesBase::hasVariableRateShading"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase25hasVariableRateShadingBy4E", "DeviceDriverCapabilitiesBase::hasVariableRateShadingBy4"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase31hasVariableRateShadingCombinersE", "DeviceDriverCapabilitiesBase::hasVariableRateShadingCombiners"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase34hasVariableRateShadingShaderOutputE", "DeviceDriverCapabilitiesBase::hasVariableRateShadingShaderOutput"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase29hasVariableRateShadingTextureE", "DeviceDriverCapabilitiesBase::hasVariableRateShadingTexture"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase12hasVolMipMapE", "DeviceDriverCapabilitiesBase::hasVolMipMap"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase10hasWaveOpsE", "DeviceDriverCapabilitiesBase::hasWaveOps"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase24hasWellSupportedIndirectE", "DeviceDriverCapabilitiesBase::hasWellSupportedIndirect"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesBase7hasXESSE", "DeviceDriverCapabilitiesBase::hasXESS"], [52, 3, 1, "_CPPv427DeviceDriverCapabilitiesIOS", "DeviceDriverCapabilitiesIOS"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS33castingFullyTypedFormatsSupportedE", "DeviceDriverCapabilitiesIOS::castingFullyTypedFormatsSupported"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS9hasATIApiE", "DeviceDriverCapabilitiesIOS::hasATIApi"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS28hasAcceleratedViewInstancingE", "DeviceDriverCapabilitiesIOS::hasAcceleratedViewInstancing"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS18hasAliasedTexturesE", "DeviceDriverCapabilitiesIOS::hasAliasedTextures"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS16hasAlphaCoverageE", "DeviceDriverCapabilitiesIOS::hasAlphaCoverage"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS20hasAnisotropicFilterE", "DeviceDriverCapabilitiesIOS::hasAnisotropicFilter"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS15hasAsyncComputeE", "DeviceDriverCapabilitiesIOS::hasAsyncCompute"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS12hasAsyncCopyE", "DeviceDriverCapabilitiesIOS::hasAsyncCopy"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS22hasBasicViewInstancingE", "DeviceDriverCapabilitiesIOS::hasBasicViewInstancing"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS11hasBindlessE", "DeviceDriverCapabilitiesIOS::hasBindless"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS20hasBufferOverlapCopyE", "DeviceDriverCapabilitiesIOS::hasBufferOverlapCopy"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS27hasBufferOverlapRegionsCopyE", "DeviceDriverCapabilitiesIOS::hasBufferOverlapRegionsCopy"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS20hasConditionalRenderE", "DeviceDriverCapabilitiesIOS::hasConditionalRender"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS29hasConservativeRassterizationE", "DeviceDriverCapabilitiesIOS::hasConservativeRassterization"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS20hasConstBufferOffsetE", "DeviceDriverCapabilitiesIOS::hasConstBufferOffset"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS7hasDLSSE", "DeviceDriverCapabilitiesIOS::hasDLSS"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS18hasDepthBoundsTestE", "DeviceDriverCapabilitiesIOS::hasDepthBoundsTest"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS16hasDepthReadOnlyE", "DeviceDriverCapabilitiesIOS::hasDepthReadOnly"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS9hasDrawIDE", "DeviceDriverCapabilitiesIOS::hasDrawID"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS21hasForcedSamplerCountE", "DeviceDriverCapabilitiesIOS::hasForcedSamplerCount"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS10hasGather4E", "DeviceDriverCapabilitiesIOS::hasGather4"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS22hasIndirectRayDispatchE", "DeviceDriverCapabilitiesIOS::hasIndirectRayDispatch"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS13hasInstanceIDE", "DeviceDriverCapabilitiesIOS::hasInstanceID"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS13hasLazyMemoryE", "DeviceDriverCapabilitiesIOS::hasLazyMemory"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS13hasMeshShaderE", "DeviceDriverCapabilitiesIOS::hasMeshShader"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS8hasNVApiE", "DeviceDriverCapabilitiesIOS::hasNVApi"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS28hasNativeRenderPassSubPassesE", "DeviceDriverCapabilitiesIOS::hasNativeRenderPassSubPasses"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS37hasNoOverwriteOnShaderResourceBuffersE", "DeviceDriverCapabilitiesIOS::hasNoOverwriteOnShaderResourceBuffers"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS17hasOcclusionQueryE", "DeviceDriverCapabilitiesIOS::hasOcclusionQuery"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS26hasOptimizedViewInstancingE", "DeviceDriverCapabilitiesIOS::hasOptimizedViewInstancing"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS19hasQuadTessellationE", "DeviceDriverCapabilitiesIOS::hasQuadTessellation"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS14hasRayDispatchE", "DeviceDriverCapabilitiesIOS::hasRayDispatch"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS24hasReadMultisampledDepthE", "DeviceDriverCapabilitiesIOS::hasReadMultisampledDepth"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS25hasResourceCopyConversionE", "DeviceDriverCapabilitiesIOS::hasResourceCopyConversion"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS16hasResourceHeapsE", "DeviceDriverCapabilitiesIOS::hasResourceHeaps"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS30hasShader64BitIntegerResourcesE", "DeviceDriverCapabilitiesIOS::hasShader64BitIntegerResources"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS23hasShaderFloat16SupportE", "DeviceDriverCapabilitiesIOS::hasShaderFloat16Support"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS18hasStereoExpansionE", "DeviceDriverCapabilitiesIOS::hasStereoExpansion"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS20hasStructuredBuffersE", "DeviceDriverCapabilitiesIOS::hasStructuredBuffers"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS24hasTileBasedArchitectureE", "DeviceDriverCapabilitiesIOS::hasTileBasedArchitecture"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS19hasTiled2DResourcesE", "DeviceDriverCapabilitiesIOS::hasTiled2DResources"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS19hasTiled3DResourcesE", "DeviceDriverCapabilitiesIOS::hasTiled3DResources"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS22hasTiledMemoryAliasingE", "DeviceDriverCapabilitiesIOS::hasTiledMemoryAliasing"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS27hasTiledSafeResourcesAccessE", "DeviceDriverCapabilitiesIOS::hasTiledSafeResourcesAccess"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS18hasUAVOnEveryStageE", "DeviceDriverCapabilitiesIOS::hasUAVOnEveryStage"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS27hasUAVOnlyForcedSampleCountE", "DeviceDriverCapabilitiesIOS::hasUAVOnlyForcedSampleCount"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS22hasVariableRateShadingE", "DeviceDriverCapabilitiesIOS::hasVariableRateShading"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS25hasVariableRateShadingBy4E", "DeviceDriverCapabilitiesIOS::hasVariableRateShadingBy4"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS31hasVariableRateShadingCombinersE", "DeviceDriverCapabilitiesIOS::hasVariableRateShadingCombiners"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS34hasVariableRateShadingShaderOutputE", "DeviceDriverCapabilitiesIOS::hasVariableRateShadingShaderOutput"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS29hasVariableRateShadingTextureE", "DeviceDriverCapabilitiesIOS::hasVariableRateShadingTexture"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS12hasVolMipMapE", "DeviceDriverCapabilitiesIOS::hasVolMipMap"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS10hasWaveOpsE", "DeviceDriverCapabilitiesIOS::hasWaveOps"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS24hasWellSupportedIndirectE", "DeviceDriverCapabilitiesIOS::hasWellSupportedIndirect"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesIOS7hasXESSE", "DeviceDriverCapabilitiesIOS::hasXESS"], [52, 3, 1, "_CPPv429DeviceDriverCapabilitiesLinux", "DeviceDriverCapabilitiesLinux"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux33castingFullyTypedFormatsSupportedE", "DeviceDriverCapabilitiesLinux::castingFullyTypedFormatsSupported"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux9hasATIApiE", "DeviceDriverCapabilitiesLinux::hasATIApi"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux28hasAcceleratedViewInstancingE", "DeviceDriverCapabilitiesLinux::hasAcceleratedViewInstancing"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux18hasAliasedTexturesE", "DeviceDriverCapabilitiesLinux::hasAliasedTextures"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux16hasAlphaCoverageE", "DeviceDriverCapabilitiesLinux::hasAlphaCoverage"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux20hasAnisotropicFilterE", "DeviceDriverCapabilitiesLinux::hasAnisotropicFilter"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux15hasAsyncComputeE", "DeviceDriverCapabilitiesLinux::hasAsyncCompute"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux12hasAsyncCopyE", "DeviceDriverCapabilitiesLinux::hasAsyncCopy"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux20hasBaseVertexSupportE", "DeviceDriverCapabilitiesLinux::hasBaseVertexSupport"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux22hasBasicViewInstancingE", "DeviceDriverCapabilitiesLinux::hasBasicViewInstancing"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux20hasBufferOverlapCopyE", "DeviceDriverCapabilitiesLinux::hasBufferOverlapCopy"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux27hasBufferOverlapRegionsCopyE", "DeviceDriverCapabilitiesLinux::hasBufferOverlapRegionsCopy"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux17hasCompareSamplerE", "DeviceDriverCapabilitiesLinux::hasCompareSampler"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux20hasConstBufferOffsetE", "DeviceDriverCapabilitiesLinux::hasConstBufferOffset"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux7hasDLSSE", "DeviceDriverCapabilitiesLinux::hasDLSS"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux16hasDepthReadOnlyE", "DeviceDriverCapabilitiesLinux::hasDepthReadOnly"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux9hasDrawIDE", "DeviceDriverCapabilitiesLinux::hasDrawID"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux21hasForcedSamplerCountE", "DeviceDriverCapabilitiesLinux::hasForcedSamplerCount"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux10hasGather4E", "DeviceDriverCapabilitiesLinux::hasGather4"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux18hasIndirectSupportE", "DeviceDriverCapabilitiesLinux::hasIndirectSupport"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux13hasLazyMemoryE", "DeviceDriverCapabilitiesLinux::hasLazyMemory"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux13hasMeshShaderE", "DeviceDriverCapabilitiesLinux::hasMeshShader"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux8hasNVApiE", "DeviceDriverCapabilitiesLinux::hasNVApi"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux28hasNativeRenderPassSubPassesE", "DeviceDriverCapabilitiesLinux::hasNativeRenderPassSubPasses"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux37hasNoOverwriteOnShaderResourceBuffersE", "DeviceDriverCapabilitiesLinux::hasNoOverwriteOnShaderResourceBuffers"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux17hasOcclusionQueryE", "DeviceDriverCapabilitiesLinux::hasOcclusionQuery"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux26hasOptimizedViewInstancingE", "DeviceDriverCapabilitiesLinux::hasOptimizedViewInstancing"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux24hasReadMultisampledDepthE", "DeviceDriverCapabilitiesLinux::hasReadMultisampledDepth"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux25hasResourceCopyConversionE", "DeviceDriverCapabilitiesLinux::hasResourceCopyConversion"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux30hasShader64BitIntegerResourcesE", "DeviceDriverCapabilitiesLinux::hasShader64BitIntegerResources"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux18hasStereoExpansionE", "DeviceDriverCapabilitiesLinux::hasStereoExpansion"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux20hasStructuredBuffersE", "DeviceDriverCapabilitiesLinux::hasStructuredBuffers"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux19hasTiled2DResourcesE", "DeviceDriverCapabilitiesLinux::hasTiled2DResources"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux19hasTiled3DResourcesE", "DeviceDriverCapabilitiesLinux::hasTiled3DResources"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux22hasTiledMemoryAliasingE", "DeviceDriverCapabilitiesLinux::hasTiledMemoryAliasing"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux27hasTiledSafeResourcesAccessE", "DeviceDriverCapabilitiesLinux::hasTiledSafeResourcesAccess"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux18hasUAVOnEveryStageE", "DeviceDriverCapabilitiesLinux::hasUAVOnEveryStage"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux22hasVariableRateShadingE", "DeviceDriverCapabilitiesLinux::hasVariableRateShading"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux25hasVariableRateShadingBy4E", "DeviceDriverCapabilitiesLinux::hasVariableRateShadingBy4"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux31hasVariableRateShadingCombinersE", "DeviceDriverCapabilitiesLinux::hasVariableRateShadingCombiners"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux34hasVariableRateShadingShaderOutputE", "DeviceDriverCapabilitiesLinux::hasVariableRateShadingShaderOutput"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux29hasVariableRateShadingTextureE", "DeviceDriverCapabilitiesLinux::hasVariableRateShadingTexture"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux12hasVolMipMapE", "DeviceDriverCapabilitiesLinux::hasVolMipMap"], [52, 4, 1, "_CPPv4N29DeviceDriverCapabilitiesLinux7hasXESSE", "DeviceDriverCapabilitiesLinux::hasXESS"], [52, 3, 1, "_CPPv430DeviceDriverCapabilitiesMacOSX", "DeviceDriverCapabilitiesMacOSX"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX33castingFullyTypedFormatsSupportedE", "DeviceDriverCapabilitiesMacOSX::castingFullyTypedFormatsSupported"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX9hasATIApiE", "DeviceDriverCapabilitiesMacOSX::hasATIApi"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX28hasAcceleratedViewInstancingE", "DeviceDriverCapabilitiesMacOSX::hasAcceleratedViewInstancing"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX18hasAliasedTexturesE", "DeviceDriverCapabilitiesMacOSX::hasAliasedTextures"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX16hasAlphaCoverageE", "DeviceDriverCapabilitiesMacOSX::hasAlphaCoverage"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX20hasAnisotropicFilterE", "DeviceDriverCapabilitiesMacOSX::hasAnisotropicFilter"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX15hasAsyncComputeE", "DeviceDriverCapabilitiesMacOSX::hasAsyncCompute"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX12hasAsyncCopyE", "DeviceDriverCapabilitiesMacOSX::hasAsyncCopy"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX22hasBasicViewInstancingE", "DeviceDriverCapabilitiesMacOSX::hasBasicViewInstancing"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX20hasBufferOverlapCopyE", "DeviceDriverCapabilitiesMacOSX::hasBufferOverlapCopy"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX27hasBufferOverlapRegionsCopyE", "DeviceDriverCapabilitiesMacOSX::hasBufferOverlapRegionsCopy"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX17hasCompareSamplerE", "DeviceDriverCapabilitiesMacOSX::hasCompareSampler"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX20hasConditionalRenderE", "DeviceDriverCapabilitiesMacOSX::hasConditionalRender"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX29hasConservativeRassterizationE", "DeviceDriverCapabilitiesMacOSX::hasConservativeRassterization"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX20hasConstBufferOffsetE", "DeviceDriverCapabilitiesMacOSX::hasConstBufferOffset"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX7hasDLSSE", "DeviceDriverCapabilitiesMacOSX::hasDLSS"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX18hasDepthBoundsTestE", "DeviceDriverCapabilitiesMacOSX::hasDepthBoundsTest"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX16hasDepthReadOnlyE", "DeviceDriverCapabilitiesMacOSX::hasDepthReadOnly"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX21hasForcedSamplerCountE", "DeviceDriverCapabilitiesMacOSX::hasForcedSamplerCount"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX10hasGather4E", "DeviceDriverCapabilitiesMacOSX::hasGather4"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX22hasIndirectRayDispatchE", "DeviceDriverCapabilitiesMacOSX::hasIndirectRayDispatch"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX18hasIndirectSupportE", "DeviceDriverCapabilitiesMacOSX::hasIndirectSupport"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX13hasInstanceIDE", "DeviceDriverCapabilitiesMacOSX::hasInstanceID"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX13hasLazyMemoryE", "DeviceDriverCapabilitiesMacOSX::hasLazyMemory"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX13hasMeshShaderE", "DeviceDriverCapabilitiesMacOSX::hasMeshShader"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX8hasNVApiE", "DeviceDriverCapabilitiesMacOSX::hasNVApi"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX28hasNativeRenderPassSubPassesE", "DeviceDriverCapabilitiesMacOSX::hasNativeRenderPassSubPasses"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX37hasNoOverwriteOnShaderResourceBuffersE", "DeviceDriverCapabilitiesMacOSX::hasNoOverwriteOnShaderResourceBuffers"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX17hasOcclusionQueryE", "DeviceDriverCapabilitiesMacOSX::hasOcclusionQuery"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX26hasOptimizedViewInstancingE", "DeviceDriverCapabilitiesMacOSX::hasOptimizedViewInstancing"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX19hasQuadTessellationE", "DeviceDriverCapabilitiesMacOSX::hasQuadTessellation"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX14hasRayDispatchE", "DeviceDriverCapabilitiesMacOSX::hasRayDispatch"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX24hasReadMultisampledDepthE", "DeviceDriverCapabilitiesMacOSX::hasReadMultisampledDepth"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX25hasResourceCopyConversionE", "DeviceDriverCapabilitiesMacOSX::hasResourceCopyConversion"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX16hasResourceHeapsE", "DeviceDriverCapabilitiesMacOSX::hasResourceHeaps"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX30hasShader64BitIntegerResourcesE", "DeviceDriverCapabilitiesMacOSX::hasShader64BitIntegerResources"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX23hasShaderFloat16SupportE", "DeviceDriverCapabilitiesMacOSX::hasShaderFloat16Support"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX18hasStereoExpansionE", "DeviceDriverCapabilitiesMacOSX::hasStereoExpansion"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX20hasStructuredBuffersE", "DeviceDriverCapabilitiesMacOSX::hasStructuredBuffers"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX24hasTileBasedArchitectureE", "DeviceDriverCapabilitiesMacOSX::hasTileBasedArchitecture"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX19hasTiled2DResourcesE", "DeviceDriverCapabilitiesMacOSX::hasTiled2DResources"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX19hasTiled3DResourcesE", "DeviceDriverCapabilitiesMacOSX::hasTiled3DResources"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX22hasTiledMemoryAliasingE", "DeviceDriverCapabilitiesMacOSX::hasTiledMemoryAliasing"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX27hasTiledSafeResourcesAccessE", "DeviceDriverCapabilitiesMacOSX::hasTiledSafeResourcesAccess"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX18hasUAVOnEveryStageE", "DeviceDriverCapabilitiesMacOSX::hasUAVOnEveryStage"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX22hasVariableRateShadingE", "DeviceDriverCapabilitiesMacOSX::hasVariableRateShading"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX25hasVariableRateShadingBy4E", "DeviceDriverCapabilitiesMacOSX::hasVariableRateShadingBy4"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX31hasVariableRateShadingCombinersE", "DeviceDriverCapabilitiesMacOSX::hasVariableRateShadingCombiners"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX34hasVariableRateShadingShaderOutputE", "DeviceDriverCapabilitiesMacOSX::hasVariableRateShadingShaderOutput"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX29hasVariableRateShadingTextureE", "DeviceDriverCapabilitiesMacOSX::hasVariableRateShadingTexture"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX12hasVolMipMapE", "DeviceDriverCapabilitiesMacOSX::hasVolMipMap"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX10hasWaveOpsE", "DeviceDriverCapabilitiesMacOSX::hasWaveOps"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX24hasWellSupportedIndirectE", "DeviceDriverCapabilitiesMacOSX::hasWellSupportedIndirect"], [52, 4, 1, "_CPPv4N30DeviceDriverCapabilitiesMacOSX7hasXESSE", "DeviceDriverCapabilitiesMacOSX::hasXESS"], [52, 3, 1, "_CPPv438DeviceDriverCapabilitiesNintendoSwitch", "DeviceDriverCapabilitiesNintendoSwitch"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch33castingFullyTypedFormatsSupportedE", "DeviceDriverCapabilitiesNintendoSwitch::castingFullyTypedFormatsSupported"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch9hasATIApiE", "DeviceDriverCapabilitiesNintendoSwitch::hasATIApi"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch28hasAcceleratedViewInstancingE", "DeviceDriverCapabilitiesNintendoSwitch::hasAcceleratedViewInstancing"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch18hasAliasedTexturesE", "DeviceDriverCapabilitiesNintendoSwitch::hasAliasedTextures"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch16hasAlphaCoverageE", "DeviceDriverCapabilitiesNintendoSwitch::hasAlphaCoverage"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch20hasAnisotropicFilterE", "DeviceDriverCapabilitiesNintendoSwitch::hasAnisotropicFilter"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch15hasAsyncComputeE", "DeviceDriverCapabilitiesNintendoSwitch::hasAsyncCompute"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch12hasAsyncCopyE", "DeviceDriverCapabilitiesNintendoSwitch::hasAsyncCopy"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch20hasBaseVertexSupportE", "DeviceDriverCapabilitiesNintendoSwitch::hasBaseVertexSupport"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch22hasBasicViewInstancingE", "DeviceDriverCapabilitiesNintendoSwitch::hasBasicViewInstancing"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch20hasBufferOverlapCopyE", "DeviceDriverCapabilitiesNintendoSwitch::hasBufferOverlapCopy"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch27hasBufferOverlapRegionsCopyE", "DeviceDriverCapabilitiesNintendoSwitch::hasBufferOverlapRegionsCopy"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch17hasCompareSamplerE", "DeviceDriverCapabilitiesNintendoSwitch::hasCompareSampler"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch29hasConservativeRassterizationE", "DeviceDriverCapabilitiesNintendoSwitch::hasConservativeRassterization"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch20hasConstBufferOffsetE", "DeviceDriverCapabilitiesNintendoSwitch::hasConstBufferOffset"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch7hasDLSSE", "DeviceDriverCapabilitiesNintendoSwitch::hasDLSS"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch18hasDepthBoundsTestE", "DeviceDriverCapabilitiesNintendoSwitch::hasDepthBoundsTest"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch16hasDepthReadOnlyE", "DeviceDriverCapabilitiesNintendoSwitch::hasDepthReadOnly"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch9hasDrawIDE", "DeviceDriverCapabilitiesNintendoSwitch::hasDrawID"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch21hasForcedSamplerCountE", "DeviceDriverCapabilitiesNintendoSwitch::hasForcedSamplerCount"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch10hasGather4E", "DeviceDriverCapabilitiesNintendoSwitch::hasGather4"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch42hasGeometryIndexInRayAccelerationStructureE", "DeviceDriverCapabilitiesNintendoSwitch::hasGeometryIndexInRayAccelerationStructure"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch22hasIndirectRayDispatchE", "DeviceDriverCapabilitiesNintendoSwitch::hasIndirectRayDispatch"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch18hasIndirectSupportE", "DeviceDriverCapabilitiesNintendoSwitch::hasIndirectSupport"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch13hasInstanceIDE", "DeviceDriverCapabilitiesNintendoSwitch::hasInstanceID"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch13hasLazyMemoryE", "DeviceDriverCapabilitiesNintendoSwitch::hasLazyMemory"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch13hasMeshShaderE", "DeviceDriverCapabilitiesNintendoSwitch::hasMeshShader"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch8hasNVApiE", "DeviceDriverCapabilitiesNintendoSwitch::hasNVApi"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch34hasNativeRayTracePipelineExpansionE", "DeviceDriverCapabilitiesNintendoSwitch::hasNativeRayTracePipelineExpansion"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch28hasNativeRenderPassSubPassesE", "DeviceDriverCapabilitiesNintendoSwitch::hasNativeRenderPassSubPasses"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch37hasNoOverwriteOnShaderResourceBuffersE", "DeviceDriverCapabilitiesNintendoSwitch::hasNoOverwriteOnShaderResourceBuffers"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch17hasOcclusionQueryE", "DeviceDriverCapabilitiesNintendoSwitch::hasOcclusionQuery"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch26hasOptimizedViewInstancingE", "DeviceDriverCapabilitiesNintendoSwitch::hasOptimizedViewInstancing"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch19hasQuadTessellationE", "DeviceDriverCapabilitiesNintendoSwitch::hasQuadTessellation"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch27hasRayAccelerationStructureE", "DeviceDriverCapabilitiesNintendoSwitch::hasRayAccelerationStructure"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch14hasRayDispatchE", "DeviceDriverCapabilitiesNintendoSwitch::hasRayDispatch"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch11hasRayQueryE", "DeviceDriverCapabilitiesNintendoSwitch::hasRayQuery"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch24hasReadMultisampledDepthE", "DeviceDriverCapabilitiesNintendoSwitch::hasReadMultisampledDepth"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch25hasResourceCopyConversionE", "DeviceDriverCapabilitiesNintendoSwitch::hasResourceCopyConversion"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch16hasResourceHeapsE", "DeviceDriverCapabilitiesNintendoSwitch::hasResourceHeaps"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch30hasShader64BitIntegerResourcesE", "DeviceDriverCapabilitiesNintendoSwitch::hasShader64BitIntegerResources"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch39hasSkipPrimitiveTypeInRayTracingShadersE", "DeviceDriverCapabilitiesNintendoSwitch::hasSkipPrimitiveTypeInRayTracingShaders"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch18hasStereoExpansionE", "DeviceDriverCapabilitiesNintendoSwitch::hasStereoExpansion"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch20hasStructuredBuffersE", "DeviceDriverCapabilitiesNintendoSwitch::hasStructuredBuffers"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch24hasTileBasedArchitectureE", "DeviceDriverCapabilitiesNintendoSwitch::hasTileBasedArchitecture"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch19hasTiled2DResourcesE", "DeviceDriverCapabilitiesNintendoSwitch::hasTiled2DResources"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch19hasTiled3DResourcesE", "DeviceDriverCapabilitiesNintendoSwitch::hasTiled3DResources"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch22hasTiledMemoryAliasingE", "DeviceDriverCapabilitiesNintendoSwitch::hasTiledMemoryAliasing"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch27hasTiledSafeResourcesAccessE", "DeviceDriverCapabilitiesNintendoSwitch::hasTiledSafeResourcesAccess"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch18hasUAVOnEveryStageE", "DeviceDriverCapabilitiesNintendoSwitch::hasUAVOnEveryStage"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch27hasUAVOnlyForcedSampleCountE", "DeviceDriverCapabilitiesNintendoSwitch::hasUAVOnlyForcedSampleCount"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch22hasVariableRateShadingE", "DeviceDriverCapabilitiesNintendoSwitch::hasVariableRateShading"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch25hasVariableRateShadingBy4E", "DeviceDriverCapabilitiesNintendoSwitch::hasVariableRateShadingBy4"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch31hasVariableRateShadingCombinersE", "DeviceDriverCapabilitiesNintendoSwitch::hasVariableRateShadingCombiners"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch34hasVariableRateShadingShaderOutputE", "DeviceDriverCapabilitiesNintendoSwitch::hasVariableRateShadingShaderOutput"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch29hasVariableRateShadingTextureE", "DeviceDriverCapabilitiesNintendoSwitch::hasVariableRateShadingTexture"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch12hasVolMipMapE", "DeviceDriverCapabilitiesNintendoSwitch::hasVolMipMap"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch24hasWellSupportedIndirectE", "DeviceDriverCapabilitiesNintendoSwitch::hasWellSupportedIndirect"], [52, 4, 1, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch7hasXESSE", "DeviceDriverCapabilitiesNintendoSwitch::hasXESS"], [52, 3, 1, "_CPPv427DeviceDriverCapabilitiesPS4", "DeviceDriverCapabilitiesPS4"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS433castingFullyTypedFormatsSupportedE", "DeviceDriverCapabilitiesPS4::castingFullyTypedFormatsSupported"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS49hasATIApiE", "DeviceDriverCapabilitiesPS4::hasATIApi"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS428hasAcceleratedViewInstancingE", "DeviceDriverCapabilitiesPS4::hasAcceleratedViewInstancing"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS418hasAliasedTexturesE", "DeviceDriverCapabilitiesPS4::hasAliasedTextures"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS416hasAlphaCoverageE", "DeviceDriverCapabilitiesPS4::hasAlphaCoverage"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS420hasAnisotropicFilterE", "DeviceDriverCapabilitiesPS4::hasAnisotropicFilter"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS412hasAsyncCopyE", "DeviceDriverCapabilitiesPS4::hasAsyncCopy"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS420hasBaseVertexSupportE", "DeviceDriverCapabilitiesPS4::hasBaseVertexSupport"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS422hasBasicViewInstancingE", "DeviceDriverCapabilitiesPS4::hasBasicViewInstancing"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS411hasBindlessE", "DeviceDriverCapabilitiesPS4::hasBindless"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS420hasBufferOverlapCopyE", "DeviceDriverCapabilitiesPS4::hasBufferOverlapCopy"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS427hasBufferOverlapRegionsCopyE", "DeviceDriverCapabilitiesPS4::hasBufferOverlapRegionsCopy"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS417hasCompareSamplerE", "DeviceDriverCapabilitiesPS4::hasCompareSampler"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS420hasConditionalRenderE", "DeviceDriverCapabilitiesPS4::hasConditionalRender"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS429hasConservativeRassterizationE", "DeviceDriverCapabilitiesPS4::hasConservativeRassterization"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS420hasConstBufferOffsetE", "DeviceDriverCapabilitiesPS4::hasConstBufferOffset"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS47hasDLSSE", "DeviceDriverCapabilitiesPS4::hasDLSS"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS418hasDepthBoundsTestE", "DeviceDriverCapabilitiesPS4::hasDepthBoundsTest"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS416hasDepthReadOnlyE", "DeviceDriverCapabilitiesPS4::hasDepthReadOnly"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS49hasDrawIDE", "DeviceDriverCapabilitiesPS4::hasDrawID"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS421hasForcedSamplerCountE", "DeviceDriverCapabilitiesPS4::hasForcedSamplerCount"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS410hasGather4E", "DeviceDriverCapabilitiesPS4::hasGather4"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS442hasGeometryIndexInRayAccelerationStructureE", "DeviceDriverCapabilitiesPS4::hasGeometryIndexInRayAccelerationStructure"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS422hasIndirectRayDispatchE", "DeviceDriverCapabilitiesPS4::hasIndirectRayDispatch"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS418hasIndirectSupportE", "DeviceDriverCapabilitiesPS4::hasIndirectSupport"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS413hasInstanceIDE", "DeviceDriverCapabilitiesPS4::hasInstanceID"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS413hasLazyMemoryE", "DeviceDriverCapabilitiesPS4::hasLazyMemory"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS413hasMeshShaderE", "DeviceDriverCapabilitiesPS4::hasMeshShader"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS48hasNVApiE", "DeviceDriverCapabilitiesPS4::hasNVApi"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS434hasNativeRayTracePipelineExpansionE", "DeviceDriverCapabilitiesPS4::hasNativeRayTracePipelineExpansion"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS428hasNativeRenderPassSubPassesE", "DeviceDriverCapabilitiesPS4::hasNativeRenderPassSubPasses"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS437hasNoOverwriteOnShaderResourceBuffersE", "DeviceDriverCapabilitiesPS4::hasNoOverwriteOnShaderResourceBuffers"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS417hasOcclusionQueryE", "DeviceDriverCapabilitiesPS4::hasOcclusionQuery"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS426hasOptimizedViewInstancingE", "DeviceDriverCapabilitiesPS4::hasOptimizedViewInstancing"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS419hasQuadTessellationE", "DeviceDriverCapabilitiesPS4::hasQuadTessellation"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS427hasRayAccelerationStructureE", "DeviceDriverCapabilitiesPS4::hasRayAccelerationStructure"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS414hasRayDispatchE", "DeviceDriverCapabilitiesPS4::hasRayDispatch"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS411hasRayQueryE", "DeviceDriverCapabilitiesPS4::hasRayQuery"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS424hasReadMultisampledDepthE", "DeviceDriverCapabilitiesPS4::hasReadMultisampledDepth"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS425hasRenderPassDepthResolveE", "DeviceDriverCapabilitiesPS4::hasRenderPassDepthResolve"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS425hasResourceCopyConversionE", "DeviceDriverCapabilitiesPS4::hasResourceCopyConversion"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS430hasShader64BitIntegerResourcesE", "DeviceDriverCapabilitiesPS4::hasShader64BitIntegerResources"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS423hasShaderFloat16SupportE", "DeviceDriverCapabilitiesPS4::hasShaderFloat16Support"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS439hasSkipPrimitiveTypeInRayTracingShadersE", "DeviceDriverCapabilitiesPS4::hasSkipPrimitiveTypeInRayTracingShaders"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS418hasStereoExpansionE", "DeviceDriverCapabilitiesPS4::hasStereoExpansion"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS420hasStructuredBuffersE", "DeviceDriverCapabilitiesPS4::hasStructuredBuffers"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS424hasTileBasedArchitectureE", "DeviceDriverCapabilitiesPS4::hasTileBasedArchitecture"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS419hasTiled2DResourcesE", "DeviceDriverCapabilitiesPS4::hasTiled2DResources"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS419hasTiled3DResourcesE", "DeviceDriverCapabilitiesPS4::hasTiled3DResources"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS422hasTiledMemoryAliasingE", "DeviceDriverCapabilitiesPS4::hasTiledMemoryAliasing"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS427hasTiledSafeResourcesAccessE", "DeviceDriverCapabilitiesPS4::hasTiledSafeResourcesAccess"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS418hasUAVOnEveryStageE", "DeviceDriverCapabilitiesPS4::hasUAVOnEveryStage"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS427hasUAVOnlyForcedSampleCountE", "DeviceDriverCapabilitiesPS4::hasUAVOnlyForcedSampleCount"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS422hasVariableRateShadingE", "DeviceDriverCapabilitiesPS4::hasVariableRateShading"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS425hasVariableRateShadingBy4E", "DeviceDriverCapabilitiesPS4::hasVariableRateShadingBy4"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS431hasVariableRateShadingCombinersE", "DeviceDriverCapabilitiesPS4::hasVariableRateShadingCombiners"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS434hasVariableRateShadingShaderOutputE", "DeviceDriverCapabilitiesPS4::hasVariableRateShadingShaderOutput"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS429hasVariableRateShadingTextureE", "DeviceDriverCapabilitiesPS4::hasVariableRateShadingTexture"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS412hasVolMipMapE", "DeviceDriverCapabilitiesPS4::hasVolMipMap"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS410hasWaveOpsE", "DeviceDriverCapabilitiesPS4::hasWaveOps"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS424hasWellSupportedIndirectE", "DeviceDriverCapabilitiesPS4::hasWellSupportedIndirect"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS47hasXESSE", "DeviceDriverCapabilitiesPS4::hasXESS"], [52, 3, 1, "_CPPv427DeviceDriverCapabilitiesPS5", "DeviceDriverCapabilitiesPS5"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS542hasGeometryIndexInRayAccelerationStructureE", "DeviceDriverCapabilitiesPS5::hasGeometryIndexInRayAccelerationStructure"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS522hasIndirectRayDispatchE", "DeviceDriverCapabilitiesPS5::hasIndirectRayDispatch"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS527hasRayAccelerationStructureE", "DeviceDriverCapabilitiesPS5::hasRayAccelerationStructure"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS514hasRayDispatchE", "DeviceDriverCapabilitiesPS5::hasRayDispatch"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS511hasRayQueryE", "DeviceDriverCapabilitiesPS5::hasRayQuery"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS539hasSkipPrimitiveTypeInRayTracingShadersE", "DeviceDriverCapabilitiesPS5::hasSkipPrimitiveTypeInRayTracingShaders"], [52, 4, 1, "_CPPv4N27DeviceDriverCapabilitiesPS518hasStereoExpansionE", "DeviceDriverCapabilitiesPS5::hasStereoExpansion"], [52, 3, 1, "_CPPv432DeviceDriverCapabilitiesScarlett", "DeviceDriverCapabilitiesScarlett"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett33castingFullyTypedFormatsSupportedE", "DeviceDriverCapabilitiesScarlett::castingFullyTypedFormatsSupported"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett20hasBaseVertexSupportE", "DeviceDriverCapabilitiesScarlett::hasBaseVertexSupport"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett29hasConservativeRassterizationE", "DeviceDriverCapabilitiesScarlett::hasConservativeRassterization"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett42hasGeometryIndexInRayAccelerationStructureE", "DeviceDriverCapabilitiesScarlett::hasGeometryIndexInRayAccelerationStructure"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett22hasIndirectRayDispatchE", "DeviceDriverCapabilitiesScarlett::hasIndirectRayDispatch"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett13hasMeshShaderE", "DeviceDriverCapabilitiesScarlett::hasMeshShader"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett34hasNativeRayTracePipelineExpansionE", "DeviceDriverCapabilitiesScarlett::hasNativeRayTracePipelineExpansion"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett27hasRayAccelerationStructureE", "DeviceDriverCapabilitiesScarlett::hasRayAccelerationStructure"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett14hasRayDispatchE", "DeviceDriverCapabilitiesScarlett::hasRayDispatch"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett11hasRayQueryE", "DeviceDriverCapabilitiesScarlett::hasRayQuery"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett30hasShader64BitIntegerResourcesE", "DeviceDriverCapabilitiesScarlett::hasShader64BitIntegerResources"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett39hasSkipPrimitiveTypeInRayTracingShadersE", "DeviceDriverCapabilitiesScarlett::hasSkipPrimitiveTypeInRayTracingShaders"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett22hasVariableRateShadingE", "DeviceDriverCapabilitiesScarlett::hasVariableRateShading"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett31hasVariableRateShadingCombinersE", "DeviceDriverCapabilitiesScarlett::hasVariableRateShadingCombiners"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett34hasVariableRateShadingShaderOutputE", "DeviceDriverCapabilitiesScarlett::hasVariableRateShadingShaderOutput"], [52, 4, 1, "_CPPv4N32DeviceDriverCapabilitiesScarlett29hasVariableRateShadingTextureE", "DeviceDriverCapabilitiesScarlett::hasVariableRateShadingTexture"], [52, 3, 1, "_CPPv428DeviceDriverCapabilitiesTVOS", "DeviceDriverCapabilitiesTVOS"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS33castingFullyTypedFormatsSupportedE", "DeviceDriverCapabilitiesTVOS::castingFullyTypedFormatsSupported"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS9hasATIApiE", "DeviceDriverCapabilitiesTVOS::hasATIApi"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS28hasAcceleratedViewInstancingE", "DeviceDriverCapabilitiesTVOS::hasAcceleratedViewInstancing"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS18hasAliasedTexturesE", "DeviceDriverCapabilitiesTVOS::hasAliasedTextures"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS16hasAlphaCoverageE", "DeviceDriverCapabilitiesTVOS::hasAlphaCoverage"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS20hasAnisotropicFilterE", "DeviceDriverCapabilitiesTVOS::hasAnisotropicFilter"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS15hasAsyncComputeE", "DeviceDriverCapabilitiesTVOS::hasAsyncCompute"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS12hasAsyncCopyE", "DeviceDriverCapabilitiesTVOS::hasAsyncCopy"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS22hasBasicViewInstancingE", "DeviceDriverCapabilitiesTVOS::hasBasicViewInstancing"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS11hasBindlessE", "DeviceDriverCapabilitiesTVOS::hasBindless"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS20hasBufferOverlapCopyE", "DeviceDriverCapabilitiesTVOS::hasBufferOverlapCopy"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS27hasBufferOverlapRegionsCopyE", "DeviceDriverCapabilitiesTVOS::hasBufferOverlapRegionsCopy"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS20hasConditionalRenderE", "DeviceDriverCapabilitiesTVOS::hasConditionalRender"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS29hasConservativeRassterizationE", "DeviceDriverCapabilitiesTVOS::hasConservativeRassterization"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS20hasConstBufferOffsetE", "DeviceDriverCapabilitiesTVOS::hasConstBufferOffset"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS7hasDLSSE", "DeviceDriverCapabilitiesTVOS::hasDLSS"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS18hasDepthBoundsTestE", "DeviceDriverCapabilitiesTVOS::hasDepthBoundsTest"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS16hasDepthReadOnlyE", "DeviceDriverCapabilitiesTVOS::hasDepthReadOnly"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS9hasDrawIDE", "DeviceDriverCapabilitiesTVOS::hasDrawID"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS21hasForcedSamplerCountE", "DeviceDriverCapabilitiesTVOS::hasForcedSamplerCount"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS10hasGather4E", "DeviceDriverCapabilitiesTVOS::hasGather4"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS22hasIndirectRayDispatchE", "DeviceDriverCapabilitiesTVOS::hasIndirectRayDispatch"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS13hasInstanceIDE", "DeviceDriverCapabilitiesTVOS::hasInstanceID"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS13hasLazyMemoryE", "DeviceDriverCapabilitiesTVOS::hasLazyMemory"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS13hasMeshShaderE", "DeviceDriverCapabilitiesTVOS::hasMeshShader"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS8hasNVApiE", "DeviceDriverCapabilitiesTVOS::hasNVApi"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS28hasNativeRenderPassSubPassesE", "DeviceDriverCapabilitiesTVOS::hasNativeRenderPassSubPasses"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS37hasNoOverwriteOnShaderResourceBuffersE", "DeviceDriverCapabilitiesTVOS::hasNoOverwriteOnShaderResourceBuffers"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS17hasOcclusionQueryE", "DeviceDriverCapabilitiesTVOS::hasOcclusionQuery"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS26hasOptimizedViewInstancingE", "DeviceDriverCapabilitiesTVOS::hasOptimizedViewInstancing"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS19hasQuadTessellationE", "DeviceDriverCapabilitiesTVOS::hasQuadTessellation"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS14hasRayDispatchE", "DeviceDriverCapabilitiesTVOS::hasRayDispatch"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS24hasReadMultisampledDepthE", "DeviceDriverCapabilitiesTVOS::hasReadMultisampledDepth"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS25hasResourceCopyConversionE", "DeviceDriverCapabilitiesTVOS::hasResourceCopyConversion"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS16hasResourceHeapsE", "DeviceDriverCapabilitiesTVOS::hasResourceHeaps"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS30hasShader64BitIntegerResourcesE", "DeviceDriverCapabilitiesTVOS::hasShader64BitIntegerResources"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS23hasShaderFloat16SupportE", "DeviceDriverCapabilitiesTVOS::hasShaderFloat16Support"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS18hasStereoExpansionE", "DeviceDriverCapabilitiesTVOS::hasStereoExpansion"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS20hasStructuredBuffersE", "DeviceDriverCapabilitiesTVOS::hasStructuredBuffers"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS24hasTileBasedArchitectureE", "DeviceDriverCapabilitiesTVOS::hasTileBasedArchitecture"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS19hasTiled2DResourcesE", "DeviceDriverCapabilitiesTVOS::hasTiled2DResources"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS19hasTiled3DResourcesE", "DeviceDriverCapabilitiesTVOS::hasTiled3DResources"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS22hasTiledMemoryAliasingE", "DeviceDriverCapabilitiesTVOS::hasTiledMemoryAliasing"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS27hasTiledSafeResourcesAccessE", "DeviceDriverCapabilitiesTVOS::hasTiledSafeResourcesAccess"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS18hasUAVOnEveryStageE", "DeviceDriverCapabilitiesTVOS::hasUAVOnEveryStage"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS27hasUAVOnlyForcedSampleCountE", "DeviceDriverCapabilitiesTVOS::hasUAVOnlyForcedSampleCount"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS22hasVariableRateShadingE", "DeviceDriverCapabilitiesTVOS::hasVariableRateShading"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS25hasVariableRateShadingBy4E", "DeviceDriverCapabilitiesTVOS::hasVariableRateShadingBy4"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS31hasVariableRateShadingCombinersE", "DeviceDriverCapabilitiesTVOS::hasVariableRateShadingCombiners"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS34hasVariableRateShadingShaderOutputE", "DeviceDriverCapabilitiesTVOS::hasVariableRateShadingShaderOutput"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS29hasVariableRateShadingTextureE", "DeviceDriverCapabilitiesTVOS::hasVariableRateShadingTexture"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS12hasVolMipMapE", "DeviceDriverCapabilitiesTVOS::hasVolMipMap"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS10hasWaveOpsE", "DeviceDriverCapabilitiesTVOS::hasWaveOps"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS24hasWellSupportedIndirectE", "DeviceDriverCapabilitiesTVOS::hasWellSupportedIndirect"], [52, 4, 1, "_CPPv4N28DeviceDriverCapabilitiesTVOS7hasXESSE", "DeviceDriverCapabilitiesTVOS::hasXESS"], [52, 3, 1, "_CPPv431DeviceDriverCapabilitiesWindows", "DeviceDriverCapabilitiesWindows"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesWindows16hasAlphaCoverageE", "DeviceDriverCapabilitiesWindows::hasAlphaCoverage"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesWindows20hasAnisotropicFilterE", "DeviceDriverCapabilitiesWindows::hasAnisotropicFilter"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesWindows12hasAsyncCopyE", "DeviceDriverCapabilitiesWindows::hasAsyncCopy"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesWindows20hasBaseVertexSupportE", "DeviceDriverCapabilitiesWindows::hasBaseVertexSupport"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesWindows17hasCompareSamplerE", "DeviceDriverCapabilitiesWindows::hasCompareSampler"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesWindows18hasIndirectSupportE", "DeviceDriverCapabilitiesWindows::hasIndirectSupport"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesWindows13hasLazyMemoryE", "DeviceDriverCapabilitiesWindows::hasLazyMemory"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesWindows18hasStereoExpansionE", "DeviceDriverCapabilitiesWindows::hasStereoExpansion"], [52, 3, 1, "_CPPv431DeviceDriverCapabilitiesXboxOne", "DeviceDriverCapabilitiesXboxOne"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne33castingFullyTypedFormatsSupportedE", "DeviceDriverCapabilitiesXboxOne::castingFullyTypedFormatsSupported"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne9hasATIApiE", "DeviceDriverCapabilitiesXboxOne::hasATIApi"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne28hasAcceleratedViewInstancingE", "DeviceDriverCapabilitiesXboxOne::hasAcceleratedViewInstancing"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne18hasAliasedTexturesE", "DeviceDriverCapabilitiesXboxOne::hasAliasedTextures"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne16hasAlphaCoverageE", "DeviceDriverCapabilitiesXboxOne::hasAlphaCoverage"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne20hasAnisotropicFilterE", "DeviceDriverCapabilitiesXboxOne::hasAnisotropicFilter"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne15hasAsyncComputeE", "DeviceDriverCapabilitiesXboxOne::hasAsyncCompute"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne12hasAsyncCopyE", "DeviceDriverCapabilitiesXboxOne::hasAsyncCopy"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne20hasBaseVertexSupportE", "DeviceDriverCapabilitiesXboxOne::hasBaseVertexSupport"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne22hasBasicViewInstancingE", "DeviceDriverCapabilitiesXboxOne::hasBasicViewInstancing"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne11hasBindlessE", "DeviceDriverCapabilitiesXboxOne::hasBindless"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne20hasBufferOverlapCopyE", "DeviceDriverCapabilitiesXboxOne::hasBufferOverlapCopy"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne27hasBufferOverlapRegionsCopyE", "DeviceDriverCapabilitiesXboxOne::hasBufferOverlapRegionsCopy"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne17hasCompareSamplerE", "DeviceDriverCapabilitiesXboxOne::hasCompareSampler"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne20hasConditionalRenderE", "DeviceDriverCapabilitiesXboxOne::hasConditionalRender"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne29hasConservativeRassterizationE", "DeviceDriverCapabilitiesXboxOne::hasConservativeRassterization"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne20hasConstBufferOffsetE", "DeviceDriverCapabilitiesXboxOne::hasConstBufferOffset"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne7hasDLSSE", "DeviceDriverCapabilitiesXboxOne::hasDLSS"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne18hasDepthBoundsTestE", "DeviceDriverCapabilitiesXboxOne::hasDepthBoundsTest"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne16hasDepthReadOnlyE", "DeviceDriverCapabilitiesXboxOne::hasDepthReadOnly"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne9hasDrawIDE", "DeviceDriverCapabilitiesXboxOne::hasDrawID"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne21hasForcedSamplerCountE", "DeviceDriverCapabilitiesXboxOne::hasForcedSamplerCount"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne10hasGather4E", "DeviceDriverCapabilitiesXboxOne::hasGather4"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne42hasGeometryIndexInRayAccelerationStructureE", "DeviceDriverCapabilitiesXboxOne::hasGeometryIndexInRayAccelerationStructure"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne22hasIndirectRayDispatchE", "DeviceDriverCapabilitiesXboxOne::hasIndirectRayDispatch"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne18hasIndirectSupportE", "DeviceDriverCapabilitiesXboxOne::hasIndirectSupport"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne13hasInstanceIDE", "DeviceDriverCapabilitiesXboxOne::hasInstanceID"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne13hasLazyMemoryE", "DeviceDriverCapabilitiesXboxOne::hasLazyMemory"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne13hasMeshShaderE", "DeviceDriverCapabilitiesXboxOne::hasMeshShader"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne8hasNVApiE", "DeviceDriverCapabilitiesXboxOne::hasNVApi"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne34hasNativeRayTracePipelineExpansionE", "DeviceDriverCapabilitiesXboxOne::hasNativeRayTracePipelineExpansion"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne28hasNativeRenderPassSubPassesE", "DeviceDriverCapabilitiesXboxOne::hasNativeRenderPassSubPasses"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne37hasNoOverwriteOnShaderResourceBuffersE", "DeviceDriverCapabilitiesXboxOne::hasNoOverwriteOnShaderResourceBuffers"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne17hasOcclusionQueryE", "DeviceDriverCapabilitiesXboxOne::hasOcclusionQuery"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne26hasOptimizedViewInstancingE", "DeviceDriverCapabilitiesXboxOne::hasOptimizedViewInstancing"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne19hasQuadTessellationE", "DeviceDriverCapabilitiesXboxOne::hasQuadTessellation"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne27hasRayAccelerationStructureE", "DeviceDriverCapabilitiesXboxOne::hasRayAccelerationStructure"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne14hasRayDispatchE", "DeviceDriverCapabilitiesXboxOne::hasRayDispatch"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne11hasRayQueryE", "DeviceDriverCapabilitiesXboxOne::hasRayQuery"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne24hasReadMultisampledDepthE", "DeviceDriverCapabilitiesXboxOne::hasReadMultisampledDepth"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne25hasRenderPassDepthResolveE", "DeviceDriverCapabilitiesXboxOne::hasRenderPassDepthResolve"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne25hasResourceCopyConversionE", "DeviceDriverCapabilitiesXboxOne::hasResourceCopyConversion"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne16hasResourceHeapsE", "DeviceDriverCapabilitiesXboxOne::hasResourceHeaps"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne30hasShader64BitIntegerResourcesE", "DeviceDriverCapabilitiesXboxOne::hasShader64BitIntegerResources"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne23hasShaderFloat16SupportE", "DeviceDriverCapabilitiesXboxOne::hasShaderFloat16Support"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne39hasSkipPrimitiveTypeInRayTracingShadersE", "DeviceDriverCapabilitiesXboxOne::hasSkipPrimitiveTypeInRayTracingShaders"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne18hasStereoExpansionE", "DeviceDriverCapabilitiesXboxOne::hasStereoExpansion"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne20hasStructuredBuffersE", "DeviceDriverCapabilitiesXboxOne::hasStructuredBuffers"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne24hasTileBasedArchitectureE", "DeviceDriverCapabilitiesXboxOne::hasTileBasedArchitecture"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne19hasTiled2DResourcesE", "DeviceDriverCapabilitiesXboxOne::hasTiled2DResources"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne19hasTiled3DResourcesE", "DeviceDriverCapabilitiesXboxOne::hasTiled3DResources"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne22hasTiledMemoryAliasingE", "DeviceDriverCapabilitiesXboxOne::hasTiledMemoryAliasing"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne27hasTiledSafeResourcesAccessE", "DeviceDriverCapabilitiesXboxOne::hasTiledSafeResourcesAccess"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne18hasUAVOnEveryStageE", "DeviceDriverCapabilitiesXboxOne::hasUAVOnEveryStage"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne27hasUAVOnlyForcedSampleCountE", "DeviceDriverCapabilitiesXboxOne::hasUAVOnlyForcedSampleCount"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne22hasVariableRateShadingE", "DeviceDriverCapabilitiesXboxOne::hasVariableRateShading"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne25hasVariableRateShadingBy4E", "DeviceDriverCapabilitiesXboxOne::hasVariableRateShadingBy4"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne31hasVariableRateShadingCombinersE", "DeviceDriverCapabilitiesXboxOne::hasVariableRateShadingCombiners"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne34hasVariableRateShadingShaderOutputE", "DeviceDriverCapabilitiesXboxOne::hasVariableRateShadingShaderOutput"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne29hasVariableRateShadingTextureE", "DeviceDriverCapabilitiesXboxOne::hasVariableRateShadingTexture"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne12hasVolMipMapE", "DeviceDriverCapabilitiesXboxOne::hasVolMipMap"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne10hasWaveOpsE", "DeviceDriverCapabilitiesXboxOne::hasWaveOps"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne24hasWellSupportedIndirectE", "DeviceDriverCapabilitiesXboxOne::hasWellSupportedIndirect"], [52, 4, 1, "_CPPv4N31DeviceDriverCapabilitiesXboxOne7hasXESSE", "DeviceDriverCapabilitiesXboxOne::hasXESS"], [52, 5, 1, "_CPPv418DeviceDriverIssues", "DeviceDriverIssues"], [52, 3, 1, "_CPPv425DeviceDriverIssuesAndroid", "DeviceDriverIssuesAndroid"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesAndroid16hasClearColorBugE", "DeviceDriverIssuesAndroid::hasClearColorBug"], [52, 3, 1, "_CPPv422DeviceDriverIssuesBase", "DeviceDriverIssuesBase"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase23hasBrokenBaseInstanceIDE", "DeviceDriverIssuesBase::hasBrokenBaseInstanceID"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase31hasBrokenComputeFormattedOutputE", "DeviceDriverIssuesBase::hasBrokenComputeFormattedOutput"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase24hasBrokenMTRecreateImageE", "DeviceDriverIssuesBase::hasBrokenMTRecreateImage"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase29hasBrokenSRGBConverionWithMRTE", "DeviceDriverIssuesBase::hasBrokenSRGBConverionWithMRT"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase30hasBrokenShadersAfterAppSwitchE", "DeviceDriverIssuesBase::hasBrokenShadersAfterAppSwitch"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase18hasBrokenSubpassesE", "DeviceDriverIssuesBase::hasBrokenSubpasses"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase16hasClearColorBugE", "DeviceDriverIssuesBase::hasClearColorBug"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase26hasComputeCanNotWrite3DTexE", "DeviceDriverIssuesBase::hasComputeCanNotWrite3DTex"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase21hasComputeTimeLimitedE", "DeviceDriverIssuesBase::hasComputeTimeLimited"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase19hasIgnoreDeviceLostE", "DeviceDriverIssuesBase::hasIgnoreDeviceLost"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase32hasMultisampledAndInstancingHangE", "DeviceDriverIssuesBase::hasMultisampledAndInstancingHang"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase19hasPollDeviceFencesE", "DeviceDriverIssuesBase::hasPollDeviceFences"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase26hasRenderPassClearDataRaceE", "DeviceDriverIssuesBase::hasRenderPassClearDataRace"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase22hasSmallSampledBuffersE", "DeviceDriverIssuesBase::hasSmallSampledBuffers"], [52, 4, 1, "_CPPv4N22DeviceDriverIssuesBase25hasStrictRenderPassesOnlyE", "DeviceDriverIssuesBase::hasStrictRenderPassesOnly"], [52, 3, 1, "_CPPv426DeviceDriverIssuesNoIssues", "DeviceDriverIssuesNoIssues"], [52, 4, 1, "_CPPv4N26DeviceDriverIssuesNoIssues16hasClearColorBugE", "DeviceDriverIssuesNoIssues::hasClearColorBug"], [52, 3, 1, "_CPPv425DeviceDriverIssuesWindows", "DeviceDriverIssuesWindows"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows23hasBrokenBaseInstanceIDE", "DeviceDriverIssuesWindows::hasBrokenBaseInstanceID"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows31hasBrokenComputeFormattedOutputE", "DeviceDriverIssuesWindows::hasBrokenComputeFormattedOutput"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows24hasBrokenMTRecreateImageE", "DeviceDriverIssuesWindows::hasBrokenMTRecreateImage"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows29hasBrokenSRGBConverionWithMRTE", "DeviceDriverIssuesWindows::hasBrokenSRGBConverionWithMRT"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows30hasBrokenShadersAfterAppSwitchE", "DeviceDriverIssuesWindows::hasBrokenShadersAfterAppSwitch"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows18hasBrokenSubpassesE", "DeviceDriverIssuesWindows::hasBrokenSubpasses"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows26hasComputeCanNotWrite3DTexE", "DeviceDriverIssuesWindows::hasComputeCanNotWrite3DTex"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows21hasComputeTimeLimitedE", "DeviceDriverIssuesWindows::hasComputeTimeLimited"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows19hasIgnoreDeviceLostE", "DeviceDriverIssuesWindows::hasIgnoreDeviceLost"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows32hasMultisampledAndInstancingHangE", "DeviceDriverIssuesWindows::hasMultisampledAndInstancingHang"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows19hasPollDeviceFencesE", "DeviceDriverIssuesWindows::hasPollDeviceFences"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows26hasRenderPassClearDataRaceE", "DeviceDriverIssuesWindows::hasRenderPassClearDataRace"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows22hasSmallSampledBuffersE", "DeviceDriverIssuesWindows::hasSmallSampledBuffers"], [52, 4, 1, "_CPPv4N25DeviceDriverIssuesWindows25hasStrictRenderPassesOnlyE", "DeviceDriverIssuesWindows::hasStrictRenderPassesOnly"], [52, 3, 1, "_CPPv430DeviceDriverRaytraceProperties", "DeviceDriverRaytraceProperties"], [52, 4, 1, "_CPPv4N30DeviceDriverRaytraceProperties54accelerationStructureBuildScratchBufferOffsetAlignmentE", "DeviceDriverRaytraceProperties::accelerationStructureBuildScratchBufferOffsetAlignment"], [52, 4, 1, "_CPPv4N30DeviceDriverRaytraceProperties17maxRecursionDepthE", "DeviceDriverRaytraceProperties::maxRecursionDepth"], [52, 4, 1, "_CPPv4N30DeviceDriverRaytraceProperties43topAccelerationStructureInstanceElementSizeE", "DeviceDriverRaytraceProperties::topAccelerationStructureInstanceElementSize"], [52, 5, 1, "_CPPv430DeviceDriverShaderModelVersion", "DeviceDriverShaderModelVersion"], [30, 3, 1, "_CPPv423DeviceResetEventHandler", "DeviceResetEventHandler"], [30, 6, 1, "_CPPv4N23DeviceResetEventHandler11preRecoveryEv", "DeviceResetEventHandler::preRecovery"], [30, 6, 1, "_CPPv4N23DeviceResetEventHandler8recoveryEv", "DeviceResetEventHandler::recovery"], [30, 6, 1, "_CPPv4N23DeviceResetEventHandlerD0Ev", "DeviceResetEventHandler::~DeviceResetEventHandler"], [52, 3, 1, "_CPPv412Driver3dDesc", "Driver3dDesc"], [52, 4, 1, "_CPPv4N12Driver3dDesc8acmpfuncE", "Driver3dDesc::acmpfunc"], [52, 4, 1, "_CPPv4N12Driver3dDesc4capsE", "Driver3dDesc::caps"], [52, 4, 1, "_CPPv4N12Driver3dDesc6dblendE", "Driver3dDesc::dblend"], [52, 4, 1, "_CPPv4N12Driver3dDesc17depthResolveModesE", "Driver3dDesc::depthResolveModes"], [52, 4, 1, "_CPPv4N12Driver3dDesc29is20ArbitrarySwizzleAvailableE", "Driver3dDesc::is20ArbitrarySwizzleAvailable"], [52, 4, 1, "_CPPv4N12Driver3dDesc6issuesE", "Driver3dDesc::issues"], [52, 4, 1, "_CPPv4N12Driver3dDesc8maxSimRTE", "Driver3dDesc::maxSimRT"], [52, 4, 1, "_CPPv4N12Driver3dDesc11maxWarpSizeE", "Driver3dDesc::maxWarpSize"], [52, 4, 1, "_CPPv4N12Driver3dDesc13maxclipplanesE", "Driver3dDesc::maxclipplanes"], [52, 4, 1, "_CPPv4N12Driver3dDesc11maxcubesizeE", "Driver3dDesc::maxcubesize"], [52, 4, 1, "_CPPv4N12Driver3dDesc8maxprimsE", "Driver3dDesc::maxprims"], [52, 4, 1, "_CPPv4N12Driver3dDesc9maxsimtexE", "Driver3dDesc::maxsimtex"], [52, 4, 1, "_CPPv4N12Driver3dDesc10maxstreamsE", "Driver3dDesc::maxstreams"], [52, 4, 1, "_CPPv4N12Driver3dDesc12maxstreamstrE", "Driver3dDesc::maxstreamstr"], [52, 4, 1, "_CPPv4N12Driver3dDesc12maxtexaspectE", "Driver3dDesc::maxtexaspect"], [52, 4, 1, "_CPPv4N12Driver3dDesc11maxtexcoordE", "Driver3dDesc::maxtexcoord"], [52, 4, 1, "_CPPv4N12Driver3dDesc7maxtexhE", "Driver3dDesc::maxtexh"], [52, 4, 1, "_CPPv4N12Driver3dDesc7maxtexwE", "Driver3dDesc::maxtexw"], [52, 4, 1, "_CPPv4N12Driver3dDesc17maxvertexsamplersE", "Driver3dDesc::maxvertexsamplers"], [52, 4, 1, "_CPPv4N12Driver3dDesc10maxvertindE", "Driver3dDesc::maxvertind"], [52, 4, 1, "_CPPv4N12Driver3dDesc10maxvolsizeE", "Driver3dDesc::maxvolsize"], [52, 4, 1, "_CPPv4N12Driver3dDesc11maxvpconstsE", "Driver3dDesc::maxvpconsts"], [52, 4, 1, "_CPPv4N12Driver3dDesc11minWarpSizeE", "Driver3dDesc::minWarpSize"], [52, 4, 1, "_CPPv4N12Driver3dDesc11mincubesizeE", "Driver3dDesc::mincubesize"], [52, 4, 1, "_CPPv4N12Driver3dDesc7mintexhE", "Driver3dDesc::mintexh"], [52, 4, 1, "_CPPv4N12Driver3dDesc7mintexwE", "Driver3dDesc::mintexw"], [52, 4, 1, "_CPPv4N12Driver3dDesc10minvolsizeE", "Driver3dDesc::minvolsize"], [52, 4, 1, "_CPPv4N12Driver3dDesc8raytraceE", "Driver3dDesc::raytrace"], [52, 4, 1, "_CPPv4N12Driver3dDesc6sblendE", "Driver3dDesc::sblend"], [52, 4, 1, "_CPPv4N12Driver3dDesc11shaderModelE", "Driver3dDesc::shaderModel"], [52, 4, 1, "_CPPv4N12Driver3dDesc7upixofsE", "Driver3dDesc::upixofs"], [52, 4, 1, "_CPPv4N12Driver3dDesc28variableRateTextureTileSizeXE", "Driver3dDesc::variableRateTextureTileSizeX"], [52, 4, 1, "_CPPv4N12Driver3dDesc28variableRateTextureTileSizeYE", "Driver3dDesc::variableRateTextureTileSizeY"], [52, 4, 1, "_CPPv4N12Driver3dDesc7vpixofsE", "Driver3dDesc::vpixofs"], [52, 4, 1, "_CPPv4N12Driver3dDesc8zcmpfuncE", "Driver3dDesc::zcmpfunc"], [35, 3, 1, "_CPPv420Driver3dInitCallback", "Driver3dInitCallback"], [35, 5, 1, "_CPPv4N20Driver3dInitCallback20NeedStereoRenderFuncE", "Driver3dInitCallback::NeedStereoRenderFunc"], [35, 3, 1, "_CPPv4N20Driver3dInitCallback10RenderSizeE", "Driver3dInitCallback::RenderSize"], [35, 4, 1, "_CPPv4N20Driver3dInitCallback10RenderSize6heightE", "Driver3dInitCallback::RenderSize::height"], [35, 4, 1, "_CPPv4N20Driver3dInitCallback10RenderSize5widthE", "Driver3dInitCallback::RenderSize::width"], [35, 5, 1, "_CPPv4N20Driver3dInitCallback23StereoRenderAdapterFuncE", "Driver3dInitCallback::StereoRenderAdapterFunc"], [35, 5, 1, "_CPPv4N20Driver3dInitCallback25StereoRenderDimensionFuncE", "Driver3dInitCallback::StereoRenderDimensionFunc"], [35, 5, 1, "_CPPv4N20Driver3dInitCallback26StereoRenderExtensionsFuncE", "Driver3dInitCallback::StereoRenderExtensionsFunc"], [35, 5, 1, "_CPPv4N20Driver3dInitCallback24StereoRenderVersionsFuncE", "Driver3dInitCallback::StereoRenderVersionsFunc"], [35, 3, 1, "_CPPv4N20Driver3dInitCallback12VersionRangeE", "Driver3dInitCallback::VersionRange"], [35, 4, 1, "_CPPv4N20Driver3dInitCallback12VersionRange10maxVersionE", "Driver3dInitCallback::VersionRange::maxVersion"], [35, 4, 1, "_CPPv4N20Driver3dInitCallback12VersionRange10minVersionE", "Driver3dInitCallback::VersionRange::minVersion"], [35, 6, 1, "_CPPv4NK20Driver3dInitCallback11compareDescER12Driver3dDescR12Driver3dDesc", "Driver3dInitCallback::compareDesc"], [35, 7, 1, "_CPPv4NK20Driver3dInitCallback11compareDescER12Driver3dDescR12Driver3dDesc", "Driver3dInitCallback::compareDesc::A"], [35, 7, 1, "_CPPv4NK20Driver3dInitCallback11compareDescER12Driver3dDescR12Driver3dDesc", "Driver3dInitCallback::compareDesc::B"], [35, 6, 1, "_CPPv4NK20Driver3dInitCallback14desiredAdapterEv", "Driver3dInitCallback::desiredAdapter"], [35, 6, 1, "_CPPv4NK20Driver3dInitCallback31desiredRendererDeviceExtensionsEv", "Driver3dInitCallback::desiredRendererDeviceExtensions"], [35, 6, 1, "_CPPv4NK20Driver3dInitCallback33desiredRendererInstanceExtensionsEv", "Driver3dInitCallback::desiredRendererInstanceExtensions"], [35, 6, 1, "_CPPv4NK20Driver3dInitCallback19desiredRendererSizeEv", "Driver3dInitCallback::desiredRendererSize"], [35, 6, 1, "_CPPv4NK20Driver3dInitCallback27desiredRendererVersionRangeEv", "Driver3dInitCallback::desiredRendererVersionRange"], [35, 6, 1, "_CPPv4NK20Driver3dInitCallback19desiredStereoRenderEv", "Driver3dInitCallback::desiredStereoRender"], [35, 6, 1, "_CPPv4NK20Driver3dInitCallback12validateDescER12Driver3dDesc", "Driver3dInitCallback::validateDesc"], [35, 7, 1, "_CPPv4NK20Driver3dInitCallback12validateDescER12Driver3dDesc", "Driver3dInitCallback::validateDesc::desc"], [35, 6, 1, "_CPPv4NK20Driver3dInitCallback24verifyResolutionSettingsERiRiiib", "Driver3dInitCallback::verifyResolutionSettings"], [35, 7, 1, "_CPPv4NK20Driver3dInitCallback24verifyResolutionSettingsERiRiiib", "Driver3dInitCallback::verifyResolutionSettings::base_scr_hgt"], [35, 7, 1, "_CPPv4NK20Driver3dInitCallback24verifyResolutionSettingsERiRiiib", "Driver3dInitCallback::verifyResolutionSettings::base_scr_wdt"], [35, 7, 1, "_CPPv4NK20Driver3dInitCallback24verifyResolutionSettingsERiRiiib", "Driver3dInitCallback::verifyResolutionSettings::ref_scr_hgt"], [35, 7, 1, "_CPPv4NK20Driver3dInitCallback24verifyResolutionSettingsERiRiiib", "Driver3dInitCallback::verifyResolutionSettings::ref_scr_wdt"], [35, 7, 1, "_CPPv4NK20Driver3dInitCallback24verifyResolutionSettingsERiRiiib", "Driver3dInitCallback::verifyResolutionSettings::window_mode"], [30, 1, 1, "_CPPv412Drv3dCommand", "Drv3dCommand"], [30, 2, 1, "_CPPv4N12Drv3dCommand15ACQUIRE_LOADINGE", "Drv3dCommand::ACQUIRE_LOADING"], [30, 2, 1, "_CPPv4N12Drv3dCommand17ACQUIRE_OWNERSHIPE", "Drv3dCommand::ACQUIRE_OWNERSHIP"], [30, 2, 1, "_CPPv4N12Drv3dCommand29ADD_DEBUG_BREAK_STRING_SEARCHE", "Drv3dCommand::ADD_DEBUG_BREAK_STRING_SEARCH"], [30, 2, 1, "_CPPv4N12Drv3dCommand16AFTERMATH_MARKERE", "Drv3dCommand::AFTERMATH_MARKER"], [30, 2, 1, "_CPPv4N12Drv3dCommand41ASYNC_PIPELINE_COMPILATION_FEEDBACK_BEGINE", "Drv3dCommand::ASYNC_PIPELINE_COMPILATION_FEEDBACK_BEGIN"], [30, 2, 1, "_CPPv4N12Drv3dCommand39ASYNC_PIPELINE_COMPILATION_FEEDBACK_ENDE", "Drv3dCommand::ASYNC_PIPELINE_COMPILATION_FEEDBACK_END"], [30, 2, 1, "_CPPv4N12Drv3dCommand21BEGIN_EXTERNAL_ACCESSE", "Drv3dCommand::BEGIN_EXTERNAL_ACCESS"], [30, 2, 1, "_CPPv4N12Drv3dCommand24BEGIN_MRT_CLEAR_SEQUENCEE", "Drv3dCommand::BEGIN_MRT_CLEAR_SEQUENCE"], [30, 2, 1, "_CPPv4N12Drv3dCommand12CHANGE_QUEUEE", "Drv3dCommand::CHANGE_QUEUE"], [30, 2, 1, "_CPPv4N12Drv3dCommand16COMPILE_PIPELINEE", "Drv3dCommand::COMPILE_PIPELINE"], [30, 2, 1, "_CPPv4N12Drv3dCommand20COMPILE_PIPELINE_SETE", "Drv3dCommand::COMPILE_PIPELINE_SET"], [30, 2, 1, "_CPPv4N12Drv3dCommand13CONTINUE_SYNCE", "Drv3dCommand::CONTINUE_SYNC"], [30, 2, 1, "_CPPv4N12Drv3dCommand9D3D_FLUSHE", "Drv3dCommand::D3D_FLUSH"], [30, 2, 1, "_CPPv4N12Drv3dCommand11DEBUG_BREAKE", "Drv3dCommand::DEBUG_BREAK"], [30, 2, 1, "_CPPv4N12Drv3dCommand13DEBUG_MESSAGEE", "Drv3dCommand::DEBUG_MESSAGE"], [30, 2, 1, "_CPPv4N12Drv3dCommand10DELAY_SYNCE", "Drv3dCommand::DELAY_SYNC"], [30, 2, 1, "_CPPv4N12Drv3dCommand23DISABLE_IMMEDIATE_FLUSHE", "Drv3dCommand::DISABLE_IMMEDIATE_FLUSH"], [30, 2, 1, "_CPPv4N12Drv3dCommand22ENABLE_IMMEDIATE_FLUSHE", "Drv3dCommand::ENABLE_IMMEDIATE_FLUSH"], [30, 2, 1, "_CPPv4N12Drv3dCommand30ENABLE_WORKER_LOW_LATENCY_MODEE", "Drv3dCommand::ENABLE_WORKER_LOW_LATENCY_MODE"], [30, 2, 1, "_CPPv4N12Drv3dCommand19END_EXTERNAL_ACCESSE", "Drv3dCommand::END_EXTERNAL_ACCESS"], [30, 2, 1, "_CPPv4N12Drv3dCommand22END_MRT_CLEAR_SEQUENCEE", "Drv3dCommand::END_MRT_CLEAR_SEQUENCE"], [30, 2, 1, "_CPPv4N12Drv3dCommand12EXECUTE_DLSSE", "Drv3dCommand::EXECUTE_DLSS"], [30, 2, 1, "_CPPv4N12Drv3dCommand14EXECUTE_DLSS_GE", "Drv3dCommand::EXECUTE_DLSS_G"], [30, 2, 1, "_CPPv4N12Drv3dCommand11EXECUTE_FSRE", "Drv3dCommand::EXECUTE_FSR"], [30, 2, 1, "_CPPv4N12Drv3dCommand12EXECUTE_FSR2E", "Drv3dCommand::EXECUTE_FSR2"], [30, 2, 1, "_CPPv4N12Drv3dCommand23EXECUTE_METALFX_UPSCALEE", "Drv3dCommand::EXECUTE_METALFX_UPSCALE"], [30, 2, 1, "_CPPv4N12Drv3dCommand12EXECUTE_PSSRE", "Drv3dCommand::EXECUTE_PSSR"], [30, 2, 1, "_CPPv4N12Drv3dCommand12EXECUTE_XESSE", "Drv3dCommand::EXECUTE_XESS"], [30, 2, 1, "_CPPv4N12Drv3dCommand12FLUSH_STATESE", "Drv3dCommand::FLUSH_STATES"], [30, 2, 1, "_CPPv4N12Drv3dCommand18GETVISIBILITYBEGINE", "Drv3dCommand::GETVISIBILITYBEGIN"], [30, 2, 1, "_CPPv4N12Drv3dCommand18GETVISIBILITYCOUNTE", "Drv3dCommand::GETVISIBILITYCOUNT"], [30, 2, 1, "_CPPv4N12Drv3dCommand16GETVISIBILITYENDE", "Drv3dCommand::GETVISIBILITYEND"], [30, 2, 1, "_CPPv4N12Drv3dCommand22GET_BUFFER_GPU_ADDRESSE", "Drv3dCommand::GET_BUFFER_GPU_ADDRESS"], [30, 2, 1, "_CPPv4N12Drv3dCommand22GET_CONSOLE_HFR_STATUSE", "Drv3dCommand::GET_CONSOLE_HFR_STATUS"], [30, 2, 1, "_CPPv4N12Drv3dCommand25GET_CONSOLE_HFR_SUPPORTEDE", "Drv3dCommand::GET_CONSOLE_HFR_SUPPORTED"], [30, 2, 1, "_CPPv4N12Drv3dCommand8GET_DLSSE", "Drv3dCommand::GET_DLSS"], [30, 2, 1, "_CPPv4N12Drv3dCommand29GET_FRAMERATE_LIMITING_FACTORE", "Drv3dCommand::GET_FRAMERATE_LIMITING_FACTOR"], [30, 2, 1, "_CPPv4N12Drv3dCommand19GET_FSR2_RESOLUTIONE", "Drv3dCommand::GET_FSR2_RESOLUTION"], [30, 2, 1, "_CPPv4N12Drv3dCommand14GET_FSR2_STATEE", "Drv3dCommand::GET_FSR2_STATE"], [30, 2, 1, "_CPPv4N12Drv3dCommand18GET_GPU_FRAME_TIMEE", "Drv3dCommand::GET_GPU_FRAME_TIME"], [30, 2, 1, "_CPPv4N12Drv3dCommand12GET_INSTANCEE", "Drv3dCommand::GET_INSTANCE"], [30, 2, 1, "_CPPv4N12Drv3dCommand13GET_LUMINANCEE", "Drv3dCommand::GET_LUMINANCE"], [30, 2, 1, "_CPPv4N12Drv3dCommand25GET_METALFX_UPSCALE_STATEE", "Drv3dCommand::GET_METALFX_UPSCALE_STATE"], [30, 2, 1, "_CPPv4N12Drv3dCommand12GET_MONITORSE", "Drv3dCommand::GET_MONITORS"], [30, 2, 1, "_CPPv4N12Drv3dCommand16GET_MONITOR_INFOE", "Drv3dCommand::GET_MONITOR_INFO"], [30, 2, 1, "_CPPv4N12Drv3dCommand19GET_PHYSICAL_DEVICEE", "Drv3dCommand::GET_PHYSICAL_DEVICE"], [30, 2, 1, "_CPPv4N12Drv3dCommand37GET_PIPELINE_COMPILATION_QUEUE_LENGTHE", "Drv3dCommand::GET_PIPELINE_COMPILATION_QUEUE_LENGTH"], [30, 2, 1, "_CPPv4N12Drv3dCommand19GET_PS5_PSSR_STATUSE", "Drv3dCommand::GET_PS5_PSSR_STATUS"], [30, 2, 1, "_CPPv4N12Drv3dCommand22GET_QUEUE_FAMILY_INDEXE", "Drv3dCommand::GET_QUEUE_FAMILY_INDEX"], [30, 2, 1, "_CPPv4N12Drv3dCommand15GET_QUEUE_INDEXE", "Drv3dCommand::GET_QUEUE_INDEX"], [30, 2, 1, "_CPPv4N12Drv3dCommand49GET_RAYTRACE_ACCELERATION_STRUCTURES_MEMORY_USAGEE", "Drv3dCommand::GET_RAYTRACE_ACCELERATION_STRUCTURES_MEMORY_USAGE"], [30, 2, 1, "_CPPv4N12Drv3dCommand10GET_REFLEXE", "Drv3dCommand::GET_REFLEX"], [30, 2, 1, "_CPPv4N12Drv3dCommand27GET_RENDERING_COMMAND_QUEUEE", "Drv3dCommand::GET_RENDERING_COMMAND_QUEUE"], [30, 2, 1, "_CPPv4N12Drv3dCommand28GET_RESOLUTIONS_FROM_MONITORE", "Drv3dCommand::GET_RESOLUTIONS_FROM_MONITOR"], [30, 2, 1, "_CPPv4N12Drv3dCommand23GET_RESOURCE_STATISTICSE", "Drv3dCommand::GET_RESOURCE_STATISTICS"], [30, 2, 1, "_CPPv4N12Drv3dCommand24GET_SECONDARY_BACKBUFFERE", "Drv3dCommand::GET_SECONDARY_BACKBUFFER"], [30, 2, 1, "_CPPv4N12Drv3dCommand10GET_SHADERE", "Drv3dCommand::GET_SHADER"], [30, 2, 1, "_CPPv4N12Drv3dCommand21GET_SHADER_CACHE_UUIDE", "Drv3dCommand::GET_SHADER_CACHE_UUID"], [30, 2, 1, "_CPPv4N12Drv3dCommand18GET_TEXTURE_HANDLEE", "Drv3dCommand::GET_TEXTURE_HANDLE"], [30, 2, 1, "_CPPv4N12Drv3dCommand11GET_TIMINGSE", "Drv3dCommand::GET_TIMINGS"], [30, 2, 1, "_CPPv4N12Drv3dCommand10GET_VENDORE", "Drv3dCommand::GET_VENDOR"], [30, 2, 1, "_CPPv4N12Drv3dCommand23GET_VIDEO_MEMORY_BUDGETE", "Drv3dCommand::GET_VIDEO_MEMORY_BUDGET"], [30, 2, 1, "_CPPv4N12Drv3dCommand22GET_VSYNC_REFRESH_RATEE", "Drv3dCommand::GET_VSYNC_REFRESH_RATE"], [30, 2, 1, "_CPPv4N12Drv3dCommand19GET_WORKER_CPU_COREE", "Drv3dCommand::GET_WORKER_CPU_CORE"], [30, 2, 1, "_CPPv4N12Drv3dCommand19GET_XESS_RESOLUTIONE", "Drv3dCommand::GET_XESS_RESOLUTION"], [30, 2, 1, "_CPPv4N12Drv3dCommand14GET_XESS_STATEE", "Drv3dCommand::GET_XESS_STATE"], [30, 2, 1, "_CPPv4N12Drv3dCommand16GET_XESS_VERSIONE", "Drv3dCommand::GET_XESS_VERSION"], [30, 2, 1, "_CPPv4N12Drv3dCommand15HDR_OUTPUT_MODEE", "Drv3dCommand::HDR_OUTPUT_MODE"], [30, 2, 1, "_CPPv4N12Drv3dCommand16INT10_HDR_BUFFERE", "Drv3dCommand::INT10_HDR_BUFFER"], [30, 2, 1, "_CPPv4N12Drv3dCommand19IS_DEFRAG_REQUESTEDE", "Drv3dCommand::IS_DEFRAG_REQUESTED"], [30, 2, 1, "_CPPv4N12Drv3dCommand16IS_HDR_AVAILABLEE", "Drv3dCommand::IS_HDR_AVAILABLE"], [30, 2, 1, "_CPPv4N12Drv3dCommand14IS_HDR_ENABLEDE", "Drv3dCommand::IS_HDR_ENABLED"], [30, 2, 1, "_CPPv4N12Drv3dCommand39IS_XESS_QUALITY_AVAILABLE_AT_RESOLUTIONE", "Drv3dCommand::IS_XESS_QUALITY_AVAILABLE_AT_RESOLUTION"], [30, 2, 1, "_CPPv4N12Drv3dCommand19LOAD_PIPELINE_CACHEE", "Drv3dCommand::LOAD_PIPELINE_CACHE"], [30, 2, 1, "_CPPv4N12Drv3dCommand14LOGERR_ON_SYNCE", "Drv3dCommand::LOGERR_ON_SYNC"], [30, 2, 1, "_CPPv4N12Drv3dCommand12MAKE_TEXTUREE", "Drv3dCommand::MAKE_TEXTURE"], [30, 2, 1, "_CPPv4N12Drv3dCommand8MEM_STATE", "Drv3dCommand::MEM_STAT"], [30, 2, 1, "_CPPv4N12Drv3dCommand29OVERRIDE_MAX_ANISOTROPY_LEVELE", "Drv3dCommand::OVERRIDE_MAX_ANISOTROPY_LEVEL"], [30, 2, 1, "_CPPv4N12Drv3dCommand21PIX_GPU_BEGIN_CAPTUREE", "Drv3dCommand::PIX_GPU_BEGIN_CAPTURE"], [30, 2, 1, "_CPPv4N12Drv3dCommand33PIX_GPU_CAPTURE_AFTER_LONG_FRAMESE", "Drv3dCommand::PIX_GPU_CAPTURE_AFTER_LONG_FRAMES"], [30, 2, 1, "_CPPv4N12Drv3dCommand27PIX_GPU_CAPTURE_NEXT_FRAMESE", "Drv3dCommand::PIX_GPU_CAPTURE_NEXT_FRAMES"], [30, 2, 1, "_CPPv4N12Drv3dCommand19PIX_GPU_END_CAPTUREE", "Drv3dCommand::PIX_GPU_END_CAPTURE"], [30, 2, 1, "_CPPv4N12Drv3dCommand35PREPARE_TEXTURES_FOR_VR_CONSUMPTIONE", "Drv3dCommand::PREPARE_TEXTURES_FOR_VR_CONSUMPTION"], [30, 2, 1, "_CPPv4N12Drv3dCommand15PRE_ROTATE_PASSE", "Drv3dCommand::PRE_ROTATE_PASS"], [30, 2, 1, "_CPPv4N12Drv3dCommand27PROCESS_APP_INACTIVE_UPDATEE", "Drv3dCommand::PROCESS_APP_INACTIVE_UPDATE"], [30, 2, 1, "_CPPv4N12Drv3dCommand31PROCESS_PENDING_DEFRAG_REQUESTSE", "Drv3dCommand::PROCESS_PENDING_DEFRAG_REQUESTS"], [30, 2, 1, "_CPPv4N12Drv3dCommand32PROCESS_PENDING_RESOURCE_UPDATEDE", "Drv3dCommand::PROCESS_PENDING_RESOURCE_UPDATED"], [30, 2, 1, "_CPPv4N12Drv3dCommand35REGISTER_DEVICE_RESET_EVENT_HANDLERE", "Drv3dCommand::REGISTER_DEVICE_RESET_EVENT_HANDLER"], [30, 2, 1, "_CPPv4N12Drv3dCommand31REGISTER_FRAME_COMPLETION_EVENTE", "Drv3dCommand::REGISTER_FRAME_COMPLETION_EVENT"], [30, 2, 1, "_CPPv4N12Drv3dCommand49REGISTER_ONE_TIME_FRAME_EXECUTION_EVENT_CALLBACKSE", "Drv3dCommand::REGISTER_ONE_TIME_FRAME_EXECUTION_EVENT_CALLBACKS"], [30, 2, 1, "_CPPv4N12Drv3dCommand20REGISTER_SHADER_DUMPE", "Drv3dCommand::REGISTER_SHADER_DUMP"], [30, 2, 1, "_CPPv4N12Drv3dCommand15RELEASE_LOADINGE", "Drv3dCommand::RELEASE_LOADING"], [30, 2, 1, "_CPPv4N12Drv3dCommand17RELEASE_OWNERSHIPE", "Drv3dCommand::RELEASE_OWNERSHIP"], [30, 2, 1, "_CPPv4N12Drv3dCommand13RELEASE_QUERYE", "Drv3dCommand::RELEASE_QUERY"], [30, 2, 1, "_CPPv4N12Drv3dCommand32REMOVE_DEBUG_BREAK_STRING_SEARCHE", "Drv3dCommand::REMOVE_DEBUG_BREAK_STRING_SEARCH"], [30, 2, 1, "_CPPv4N12Drv3dCommand33REPORT_RESOURCE_STATE_TRANSITIONSE", "Drv3dCommand::REPORT_RESOURCE_STATE_TRANSITIONS"], [30, 2, 1, "_CPPv4N12Drv3dCommand19SAVE_PIPELINE_CACHEE", "Drv3dCommand::SAVE_PIPELINE_CACHE"], [30, 2, 1, "_CPPv4N12Drv3dCommand19SEND_GPU_CRASH_DUMPE", "Drv3dCommand::SEND_GPU_CRASH_DUMP"], [30, 2, 1, "_CPPv4N12Drv3dCommand12SET_APP_INFOE", "Drv3dCommand::SET_APP_INFO"], [30, 2, 1, "_CPPv4N12Drv3dCommand26SET_DRIVER_NETWORD_MANAGERE", "Drv3dCommand::SET_DRIVER_NETWORD_MANAGER"], [30, 2, 1, "_CPPv4N12Drv3dCommand14SET_FREQ_LEVELE", "Drv3dCommand::SET_FREQ_LEVEL"], [30, 2, 1, "_CPPv4N12Drv3dCommand7SET_HDRE", "Drv3dCommand::SET_HDR"], [30, 2, 1, "_CPPv4N12Drv3dCommand36SET_PIPELINE_COMPILATION_TIME_BUDGETE", "Drv3dCommand::SET_PIPELINE_COMPILATION_TIME_BUDGET"], [30, 2, 1, "_CPPv4N12Drv3dCommand16SET_PS5_FSR_VIEWE", "Drv3dCommand::SET_PS5_FSR_VIEW"], [30, 2, 1, "_CPPv4N12Drv3dCommand17SET_PS_DEBUG_INFOE", "Drv3dCommand::SET_PS_DEBUG_INFO"], [30, 2, 1, "_CPPv4N12Drv3dCommand17SET_VS_DEBUG_INFOE", "Drv3dCommand::SET_VS_DEBUG_INFO"], [30, 2, 1, "_CPPv4N12Drv3dCommand23SET_XESS_VELOCITY_SCALEE", "Drv3dCommand::SET_XESS_VELOCITY_SCALE"], [30, 2, 1, "_CPPv4N12Drv3dCommand19START_CAPTURE_FRAMEE", "Drv3dCommand::START_CAPTURE_FRAME"], [30, 2, 1, "_CPPv4N12Drv3dCommand20TIMECLOCKCALIBRATIONE", "Drv3dCommand::TIMECLOCKCALIBRATION"], [30, 2, 1, "_CPPv4N12Drv3dCommand13TIMESTAMPFREQE", "Drv3dCommand::TIMESTAMPFREQ"], [30, 2, 1, "_CPPv4N12Drv3dCommand12TIMESTAMPGETE", "Drv3dCommand::TIMESTAMPGET"], [30, 2, 1, "_CPPv4N12Drv3dCommand14TIMESTAMPISSUEE", "Drv3dCommand::TIMESTAMPISSUE"], [30, 2, 1, "_CPPv4N12Drv3dCommand37UNREGISTER_DEVICE_RESET_EVENT_HANDLERE", "Drv3dCommand::UNREGISTER_DEVICE_RESET_EVENT_HANDLER"], [30, 2, 1, "_CPPv4N12Drv3dCommand4USERE", "Drv3dCommand::USER"], [30, 3, 1, "_CPPv422Drv3dMakeTextureParams", "Drv3dMakeTextureParams"], [30, 4, 1, "_CPPv4N22Drv3dMakeTextureParams12currentStateE", "Drv3dMakeTextureParams::currentState"], [30, 4, 1, "_CPPv4N22Drv3dMakeTextureParams3flgE", "Drv3dMakeTextureParams::flg"], [30, 4, 1, "_CPPv4N22Drv3dMakeTextureParams1hE", "Drv3dMakeTextureParams::h"], [30, 4, 1, "_CPPv4N22Drv3dMakeTextureParams6layersE", "Drv3dMakeTextureParams::layers"], [30, 4, 1, "_CPPv4N22Drv3dMakeTextureParams4mipsE", "Drv3dMakeTextureParams::mips"], [30, 4, 1, "_CPPv4N22Drv3dMakeTextureParams4nameE", "Drv3dMakeTextureParams::name"], [30, 4, 1, "_CPPv4N22Drv3dMakeTextureParams3texE", "Drv3dMakeTextureParams::tex"], [30, 4, 1, "_CPPv4N22Drv3dMakeTextureParams1wE", "Drv3dMakeTextureParams::w"], [30, 3, 1, "_CPPv412Drv3dTimings", "Drv3dTimings"], [30, 4, 1, "_CPPv4N12Drv3dTimings25backbufferAcquireDurationE", "Drv3dTimings::backbufferAcquireDuration"], [30, 4, 1, "_CPPv4N12Drv3dTimings27backendFrontendWaitDurationE", "Drv3dTimings::backendFrontendWaitDuration"], [30, 4, 1, "_CPPv4N12Drv3dTimings27frontendBackendWaitDurationE", "Drv3dTimings::frontendBackendWaitDuration"], [30, 4, 1, "_CPPv4N12Drv3dTimings36frontendToBackendUpdateScreenLatencyE", "Drv3dTimings::frontendToBackendUpdateScreenLatency"], [30, 4, 1, "_CPPv4N12Drv3dTimings28frontendUpdateScreenIntervalE", "Drv3dTimings::frontendUpdateScreenInterval"], [30, 4, 1, "_CPPv4N12Drv3dTimings32frontendWaitForSwapchainDurationE", "Drv3dTimings::frontendWaitForSwapchainDuration"], [30, 4, 1, "_CPPv4N12Drv3dTimings15gpuWaitDurationE", "Drv3dTimings::gpuWaitDuration"], [30, 4, 1, "_CPPv4N12Drv3dTimings15presentDurationE", "Drv3dTimings::presentDuration"], [52, 5, 1, "_CPPv47FSHADER", "FSHADER"], [52, 5, 1, "_CPPv47FSHTYPE", "FSHTYPE"], [30, 3, 1, "_CPPv411FrameEvents", "FrameEvents"], [30, 6, 1, "_CPPv4N11FrameEvents15beginFrameEventEv", "FrameEvents::beginFrameEvent"], [30, 6, 1, "_CPPv4N11FrameEvents13endFrameEventEv", "FrameEvents::endFrameEvent"], [30, 6, 1, "_CPPv4N11FrameEventsD0Ev", "FrameEvents::~FrameEvents"], [52, 1, 1, "_CPPv49Fsr2State", "Fsr2State"], [52, 2, 1, "_CPPv4N9Fsr2State10INIT_ERRORE", "Fsr2State::INIT_ERROR"], [52, 2, 1, "_CPPv4N9Fsr2State11NOT_CHECKEDE", "Fsr2State::NOT_CHECKED"], [52, 2, 1, "_CPPv4N9Fsr2State5READYE", "Fsr2State::READY"], [52, 2, 1, "_CPPv4N9Fsr2State9SUPPORTEDE", "Fsr2State::SUPPORTED"], [52, 5, 1, "_CPPv414GPUFENCEHANDLE", "GPUFENCEHANDLE"], [52, 1, 1, "_CPPv411GpuPipeline", "GpuPipeline"], [52, 2, 1, "_CPPv4N11GpuPipeline13ASYNC_COMPUTEE", "GpuPipeline::ASYNC_COMPUTE"], [52, 2, 1, "_CPPv4N11GpuPipeline8GRAPHICSE", "GpuPipeline::GRAPHICS"], [52, 2, 1, "_CPPv4N11GpuPipeline8TRANSFERE", "GpuPipeline::TRANSFER"], [52, 1, 1, "_CPPv413HdrOutputMode", "HdrOutputMode"], [52, 2, 1, "_CPPv4N13HdrOutputMode13HDR10_AND_SDRE", "HdrOutputMode::HDR10_AND_SDR"], [52, 2, 1, "_CPPv4N13HdrOutputMode10HDR10_ONLYE", "HdrOutputMode::HDR10_ONLY"], [52, 2, 1, "_CPPv4N13HdrOutputMode8HDR_ONLYE", "HdrOutputMode::HDR_ONLY"], [52, 2, 1, "_CPPv4N13HdrOutputMode8SDR_ONLYE", "HdrOutputMode::SDR_ONLY"], [50, 5, 1, "_CPPv47Ibuffer", "Ibuffer"], [68, 3, 1, "_CPPv411LODBiasRule", "LODBiasRule"], [68, 4, 1, "_CPPv4N11LODBiasRule4biasE", "LODBiasRule::bias"], [68, 4, 1, "_CPPv4N11LODBiasRule9substringE", "LODBiasRule::substring"], [52, 4, 1, "_CPPv416MAX_SURVEY_INDEX", "MAX_SURVEY_INDEX"], [37, 5, 1, "_CPPv48Matrix44", "Matrix44"], [52, 1, 1, "_CPPv417MtlfxUpscaleState", "MtlfxUpscaleState"], [52, 2, 1, "_CPPv4N17MtlfxUpscaleState5READYE", "MtlfxUpscaleState::READY"], [52, 2, 1, "_CPPv4N17MtlfxUpscaleState11UNSUPPORTEDE", "MtlfxUpscaleState::UNSUPPORTED"], [56, 3, 1, "_CPPv4I0E16MultidrawContext", "MultidrawContext"], [56, 6, 1, "_CPPv4N16MultidrawContext16MultidrawContextEPKc", "MultidrawContext::MultidrawContext"], [56, 6, 1, "_CPPv4N16MultidrawContext16MultidrawContextER16MultidrawContext", "MultidrawContext::MultidrawContext"], [56, 6, 1, "_CPPv4N16MultidrawContext16MultidrawContextERR16MultidrawContext", "MultidrawContext::MultidrawContext"], [56, 7, 1, "_CPPv4N16MultidrawContext16MultidrawContextEPKc", "MultidrawContext::MultidrawContext::name"], [56, 3, 1, "_CPPv4N16MultidrawContext23MultidrawRenderExecutorE", "MultidrawContext::MultidrawRenderExecutor"], [56, 6, 1, "_CPPv4N16MultidrawContext23MultidrawRenderExecutor23MultidrawRenderExecutorEPK16MultidrawContext", "MultidrawContext::MultidrawRenderExecutor::MultidrawRenderExecutor"], [56, 6, 1, "_CPPv4N16MultidrawContext23MultidrawRenderExecutor23MultidrawRenderExecutorER23MultidrawRenderExecutor", "MultidrawContext::MultidrawRenderExecutor::MultidrawRenderExecutor"], [56, 6, 1, "_CPPv4N16MultidrawContext23MultidrawRenderExecutor23MultidrawRenderExecutorERR23MultidrawRenderExecutor", "MultidrawContext::MultidrawRenderExecutor::MultidrawRenderExecutor"], [56, 6, 1, "_CPPv4N16MultidrawContext23MultidrawRenderExecutor23MultidrawRenderExecutorEv", "MultidrawContext::MultidrawRenderExecutor::MultidrawRenderExecutor"], [56, 7, 1, "_CPPv4N16MultidrawContext23MultidrawRenderExecutor23MultidrawRenderExecutorEPK16MultidrawContext", "MultidrawContext::MultidrawRenderExecutor::MultidrawRenderExecutor::context"], [56, 4, 1, "_CPPv4N16MultidrawContext23MultidrawRenderExecutor7contextE", "MultidrawContext::MultidrawRenderExecutor::context"], [56, 6, 1, "_CPPv4N16MultidrawContext23MultidrawRenderExecutoraSER23MultidrawRenderExecutor", "MultidrawContext::MultidrawRenderExecutor::operator="], [56, 6, 1, "_CPPv4N16MultidrawContext23MultidrawRenderExecutoraSERR23MultidrawRenderExecutor", "MultidrawContext::MultidrawRenderExecutor::operator="], [56, 6, 1, "_CPPv4NK16MultidrawContext23MultidrawRenderExecutor6renderE8uint32_t8uint32_t8uint32_t", "MultidrawContext::MultidrawRenderExecutor::render"], [56, 7, 1, "_CPPv4NK16MultidrawContext23MultidrawRenderExecutor6renderE8uint32_t8uint32_t8uint32_t", "MultidrawContext::MultidrawRenderExecutor::render::drawcalls_count"], [56, 7, 1, "_CPPv4NK16MultidrawContext23MultidrawRenderExecutor6renderE8uint32_t8uint32_t8uint32_t", "MultidrawContext::MultidrawRenderExecutor::render::first_drawcall"], [56, 7, 1, "_CPPv4NK16MultidrawContext23MultidrawRenderExecutor6renderE8uint32_t8uint32_t8uint32_t", "MultidrawContext::MultidrawRenderExecutor::render::primitive_type"], [56, 8, 1, "_CPPv4I0E16MultidrawContext", "MultidrawContext::PerDrawDataT"], [56, 4, 1, "_CPPv4N16MultidrawContext11actualStartE", "MultidrawContext::actualStart"], [56, 4, 1, "_CPPv4N16MultidrawContext26allocatedDrawcallsInBufferE", "MultidrawContext::allocatedDrawcallsInBuffer"], [56, 6, 1, "_CPPv4N16MultidrawContext5closeEv", "MultidrawContext::close"], [56, 6, 1, "_CPPv4I0EN16MultidrawContext11fillBuffersE23MultidrawRenderExecutor8uint32_tRK1T", "MultidrawContext::fillBuffers"], [56, 8, 1, "_CPPv4I0EN16MultidrawContext11fillBuffersE23MultidrawRenderExecutor8uint32_tRK1T", "MultidrawContext::fillBuffers::T"], [56, 7, 1, "_CPPv4I0EN16MultidrawContext11fillBuffersE23MultidrawRenderExecutor8uint32_tRK1T", "MultidrawContext::fillBuffers::drawcalls_count"], [56, 7, 1, "_CPPv4I0EN16MultidrawContext11fillBuffersE23MultidrawRenderExecutor8uint32_tRK1T", "MultidrawContext::fillBuffers::set_cb"], [56, 6, 1, "_CPPv4NK16MultidrawContext24getPerDrawArgsBufferNameEv", "MultidrawContext::getPerDrawArgsBufferName"], [56, 4, 1, "_CPPv4N16MultidrawContext18multidrawArgumentsE", "MultidrawContext::multidrawArguments"], [56, 4, 1, "_CPPv4N16MultidrawContext4nameE", "MultidrawContext::name"], [56, 6, 1, "_CPPv4N16MultidrawContext23needPerDrawParamsBufferEv", "MultidrawContext::needPerDrawParamsBuffer"], [56, 6, 1, "_CPPv4N16MultidrawContextaSER16MultidrawContext", "MultidrawContext::operator="], [56, 6, 1, "_CPPv4N16MultidrawContextaSERR16MultidrawContext", "MultidrawContext::operator="], [56, 4, 1, "_CPPv4N16MultidrawContext17perDrawArgsBufferE", "MultidrawContext::perDrawArgsBuffer"], [52, 5, 1, "_CPPv45PALID", "PALID"], [52, 5, 1, "_CPPv47PROGRAM", "PROGRAM"], [52, 2, 1, "_CPPv4N15ResourceBarrier12RB_ALIAS_ALLE", "RB_ALIAS_ALL"], [52, 2, 1, "_CPPv4N15ResourceBarrier13RB_ALIAS_FROME", "RB_ALIAS_FROM"], [52, 2, 1, "_CPPv4N15ResourceBarrier11RB_ALIAS_TOE", "RB_ALIAS_TO"], [52, 2, 1, "_CPPv4N15ResourceBarrier23RB_ALIAS_TO_AND_DISCARDE", "RB_ALIAS_TO_AND_DISCARD"], [52, 2, 1, "_CPPv4N15ResourceBarrier34RB_FLAG_ACQUIRE_PIPELINE_OWNERSHIPE", "RB_FLAG_ACQUIRE_PIPELINE_OWNERSHIP"], [52, 2, 1, "_CPPv4N15ResourceBarrier29RB_FLAG_DONT_PRESERVE_CONTENTE", "RB_FLAG_DONT_PRESERVE_CONTENT"], [52, 2, 1, "_CPPv4N15ResourceBarrier34RB_FLAG_RELEASE_PIPELINE_OWNERSHIPE", "RB_FLAG_RELEASE_PIPELINE_OWNERSHIP"], [52, 2, 1, "_CPPv4N15ResourceBarrier27RB_FLAG_SPLIT_BARRIER_BEGINE", "RB_FLAG_SPLIT_BARRIER_BEGIN"], [52, 2, 1, "_CPPv4N15ResourceBarrier25RB_FLAG_SPLIT_BARRIER_ENDE", "RB_FLAG_SPLIT_BARRIER_END"], [52, 2, 1, "_CPPv4N15ResourceBarrier48RB_FLUSH_RAYTRACE_ACCELERATION_BUILD_SCRATCH_USEE", "RB_FLUSH_RAYTRACE_ACCELERATION_BUILD_SCRATCH_USE"], [52, 2, 1, "_CPPv4N15ResourceBarrier12RB_FLUSH_UAVE", "RB_FLUSH_UAV"], [52, 2, 1, "_CPPv4N15ResourceBarrier7RB_NONEE", "RB_NONE"], [52, 2, 1, "_CPPv4N15ResourceBarrier17RB_RO_BLIT_SOURCEE", "RB_RO_BLIT_SOURCE"], [52, 2, 1, "_CPPv4N15ResourceBarrier21RB_RO_CONSTANT_BUFFERE", "RB_RO_CONSTANT_BUFFER"], [52, 2, 1, "_CPPv4N15ResourceBarrier35RB_RO_CONSTANT_DEPTH_STENCIL_TARGETE", "RB_RO_CONSTANT_DEPTH_STENCIL_TARGET"], [52, 2, 1, "_CPPv4N15ResourceBarrier17RB_RO_COPY_SOURCEE", "RB_RO_COPY_SOURCE"], [52, 2, 1, "_CPPv4N15ResourceBarrier25RB_RO_GENERIC_READ_BUFFERE", "RB_RO_GENERIC_READ_BUFFER"], [52, 2, 1, "_CPPv4N15ResourceBarrier26RB_RO_GENERIC_READ_TEXTUREE", "RB_RO_GENERIC_READ_TEXTURE"], [52, 2, 1, "_CPPv4N15ResourceBarrier18RB_RO_INDEX_BUFFERE", "RB_RO_INDEX_BUFFER"], [52, 2, 1, "_CPPv4N15ResourceBarrier21RB_RO_INDIRECT_BUFFERE", "RB_RO_INDIRECT_BUFFER"], [52, 2, 1, "_CPPv4N15ResourceBarrier40RB_RO_RAYTRACE_ACCELERATION_BUILD_SOURCEE", "RB_RO_RAYTRACE_ACCELERATION_BUILD_SOURCE"], [52, 2, 1, "_CPPv4N15ResourceBarrier26RB_RO_SHADER_BINDING_TABLEE", "RB_RO_SHADER_BINDING_TABLE"], [52, 2, 1, "_CPPv4N15ResourceBarrier9RB_RO_SRVE", "RB_RO_SRV"], [52, 2, 1, "_CPPv4N15ResourceBarrier35RB_RO_VARIABLE_RATE_SHADING_TEXTUREE", "RB_RO_VARIABLE_RATE_SHADING_TEXTURE"], [52, 2, 1, "_CPPv4N15ResourceBarrier19RB_RO_VERTEX_BUFFERE", "RB_RO_VERTEX_BUFFER"], [52, 2, 1, "_CPPv4N15ResourceBarrier15RB_RW_BLIT_DESTE", "RB_RW_BLIT_DEST"], [52, 2, 1, "_CPPv4N15ResourceBarrier15RB_RW_COPY_DESTE", "RB_RW_COPY_DEST"], [52, 2, 1, "_CPPv4N15ResourceBarrier26RB_RW_DEPTH_STENCIL_TARGETE", "RB_RW_DEPTH_STENCIL_TARGET"], [52, 2, 1, "_CPPv4N15ResourceBarrier19RB_RW_RENDER_TARGETE", "RB_RW_RENDER_TARGET"], [52, 2, 1, "_CPPv4N15ResourceBarrier9RB_RW_UAVE", "RB_RW_UAV"], [52, 2, 1, "_CPPv4N15ResourceBarrier28RB_SOURCE_STAGE_ALL_GRAPHICSE", "RB_SOURCE_STAGE_ALL_GRAPHICS"], [52, 2, 1, "_CPPv4N15ResourceBarrier27RB_SOURCE_STAGE_ALL_SHADERSE", "RB_SOURCE_STAGE_ALL_SHADERS"], [52, 2, 1, "_CPPv4N15ResourceBarrier23RB_SOURCE_STAGE_COMPUTEE", "RB_SOURCE_STAGE_COMPUTE"], [52, 2, 1, "_CPPv4N15ResourceBarrier21RB_SOURCE_STAGE_PIXELE", "RB_SOURCE_STAGE_PIXEL"], [52, 2, 1, "_CPPv4N15ResourceBarrier24RB_SOURCE_STAGE_RAYTRACEE", "RB_SOURCE_STAGE_RAYTRACE"], [52, 2, 1, "_CPPv4N15ResourceBarrier22RB_SOURCE_STAGE_VERTEXE", "RB_SOURCE_STAGE_VERTEX"], [52, 2, 1, "_CPPv4N15ResourceBarrier21RB_STAGE_ALL_GRAPHICSE", "RB_STAGE_ALL_GRAPHICS"], [52, 2, 1, "_CPPv4N15ResourceBarrier20RB_STAGE_ALL_SHADERSE", "RB_STAGE_ALL_SHADERS"], [52, 2, 1, "_CPPv4N15ResourceBarrier16RB_STAGE_COMPUTEE", "RB_STAGE_COMPUTE"], [52, 2, 1, "_CPPv4N15ResourceBarrier14RB_STAGE_PIXELE", "RB_STAGE_PIXEL"], [52, 2, 1, "_CPPv4N15ResourceBarrier17RB_STAGE_RAYTRACEE", "RB_STAGE_RAYTRACE"], [52, 2, 1, "_CPPv4N15ResourceBarrier15RB_STAGE_VERTEXE", "RB_STAGE_VERTEX"], [34, 2, 1, "_CPPv4N22ResourceHeapCreateFlag9RHCF_NONEE", "RHCF_NONE"], [34, 2, 1, "_CPPv4N22ResourceHeapCreateFlag28RHCF_REQUIRES_DEDICATED_HEAPE", "RHCF_REQUIRES_DEDICATED_HEAP"], [39, 2, 1, "_CPPv4N22RenderPassExtraIndexes15RP_INDEX_NORMALE", "RP_INDEX_NORMAL"], [39, 2, 1, "_CPPv4N22RenderPassExtraIndexes21RP_SLOT_DEPTH_STENCILE", "RP_SLOT_DEPTH_STENCIL"], [39, 2, 1, "_CPPv4N22RenderPassExtraIndexes23RP_SUBPASS_EXTERNAL_ENDE", "RP_SUBPASS_EXTERNAL_END"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction16RP_TA_LOAD_CLEARE", "RP_TA_LOAD_CLEAR"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction15RP_TA_LOAD_MASKE", "RP_TA_LOAD_MASK"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction18RP_TA_LOAD_NO_CAREE", "RP_TA_LOAD_NO_CARE"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction15RP_TA_LOAD_READE", "RP_TA_LOAD_READ"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction10RP_TA_NONEE", "RP_TA_NONE"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction16RP_TA_STORE_MASKE", "RP_TA_STORE_MASK"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction16RP_TA_STORE_NONEE", "RP_TA_STORE_NONE"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction19RP_TA_STORE_NO_CAREE", "RP_TA_STORE_NO_CARE"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction17RP_TA_STORE_WRITEE", "RP_TA_STORE_WRITE"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_KEEPE", "RP_TA_SUBPASS_KEEP"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_MASKE", "RP_TA_SUBPASS_MASK"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_READE", "RP_TA_SUBPASS_READ"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction21RP_TA_SUBPASS_RESOLVEE", "RP_TA_SUBPASS_RESOLVE"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction19RP_TA_SUBPASS_WRITEE", "RP_TA_SUBPASS_WRITE"], [52, 4, 1, "_CPPv417RT_TRANSFORM_SIZE", "RT_TRANSFORM_SIZE"], [39, 3, 1, "_CPPv414RenderPassArea", "RenderPassArea"], [39, 4, 1, "_CPPv4N14RenderPassArea6heightE", "RenderPassArea::height"], [39, 4, 1, "_CPPv4N14RenderPassArea4leftE", "RenderPassArea::left"], [39, 4, 1, "_CPPv4N14RenderPassArea4maxZE", "RenderPassArea::maxZ"], [39, 4, 1, "_CPPv4N14RenderPassArea4minZE", "RenderPassArea::minZ"], [39, 4, 1, "_CPPv4N14RenderPassArea3topE", "RenderPassArea::top"], [39, 4, 1, "_CPPv4N14RenderPassArea5widthE", "RenderPassArea::width"], [39, 3, 1, "_CPPv414RenderPassBind", "RenderPassBind"], [39, 4, 1, "_CPPv4N14RenderPassBind6actionE", "RenderPassBind::action"], [39, 4, 1, "_CPPv4N14RenderPassBind17dependencyBarrierE", "RenderPassBind::dependencyBarrier"], [39, 4, 1, "_CPPv4N14RenderPassBind4slotE", "RenderPassBind::slot"], [39, 4, 1, "_CPPv4N14RenderPassBind7subpassE", "RenderPassBind::subpass"], [39, 4, 1, "_CPPv4N14RenderPassBind6targetE", "RenderPassBind::target"], [39, 3, 1, "_CPPv414RenderPassDesc", "RenderPassDesc"], [39, 4, 1, "_CPPv4N14RenderPassDesc9bindCountE", "RenderPassDesc::bindCount"], [39, 4, 1, "_CPPv4N14RenderPassDesc5bindsE", "RenderPassDesc::binds"], [39, 4, 1, "_CPPv4N14RenderPassDesc9debugNameE", "RenderPassDesc::debugName"], [39, 4, 1, "_CPPv4N14RenderPassDesc20subpassBindingOffsetE", "RenderPassDesc::subpassBindingOffset"], [39, 4, 1, "_CPPv4N14RenderPassDesc11targetCountE", "RenderPassDesc::targetCount"], [39, 4, 1, "_CPPv4N14RenderPassDesc11targetsDescE", "RenderPassDesc::targetsDesc"], [39, 1, 1, "_CPPv422RenderPassExtraIndexes", "RenderPassExtraIndexes"], [52, 1, 1, "_CPPv422RenderPassExtraIndexes", "RenderPassExtraIndexes"], [39, 2, 1, "_CPPv4N22RenderPassExtraIndexes15RP_INDEX_NORMALE", "RenderPassExtraIndexes::RP_INDEX_NORMAL"], [52, 2, 1, "_CPPv4N22RenderPassExtraIndexes15RP_INDEX_NORMALE", "RenderPassExtraIndexes::RP_INDEX_NORMAL"], [39, 2, 1, "_CPPv4N22RenderPassExtraIndexes21RP_SLOT_DEPTH_STENCILE", "RenderPassExtraIndexes::RP_SLOT_DEPTH_STENCIL"], [52, 2, 1, "_CPPv4N22RenderPassExtraIndexes21RP_SLOT_DEPTH_STENCILE", "RenderPassExtraIndexes::RP_SLOT_DEPTH_STENCIL"], [39, 2, 1, "_CPPv4N22RenderPassExtraIndexes23RP_SUBPASS_EXTERNAL_ENDE", "RenderPassExtraIndexes::RP_SUBPASS_EXTERNAL_END"], [52, 2, 1, "_CPPv4N22RenderPassExtraIndexes23RP_SUBPASS_EXTERNAL_ENDE", "RenderPassExtraIndexes::RP_SUBPASS_EXTERNAL_END"], [39, 3, 1, "_CPPv416RenderPassTarget", "RenderPassTarget"], [39, 4, 1, "_CPPv4N16RenderPassTarget10clearValueE", "RenderPassTarget::clearValue"], [39, 4, 1, "_CPPv4N16RenderPassTarget8resourceE", "RenderPassTarget::resource"], [39, 1, 1, "_CPPv422RenderPassTargetAction", "RenderPassTargetAction"], [52, 1, 1, "_CPPv422RenderPassTargetAction", "RenderPassTargetAction"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction16RP_TA_LOAD_CLEARE", "RenderPassTargetAction::RP_TA_LOAD_CLEAR"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction16RP_TA_LOAD_CLEARE", "RenderPassTargetAction::RP_TA_LOAD_CLEAR"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction15RP_TA_LOAD_MASKE", "RenderPassTargetAction::RP_TA_LOAD_MASK"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction15RP_TA_LOAD_MASKE", "RenderPassTargetAction::RP_TA_LOAD_MASK"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction18RP_TA_LOAD_NO_CAREE", "RenderPassTargetAction::RP_TA_LOAD_NO_CARE"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction18RP_TA_LOAD_NO_CAREE", "RenderPassTargetAction::RP_TA_LOAD_NO_CARE"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction15RP_TA_LOAD_READE", "RenderPassTargetAction::RP_TA_LOAD_READ"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction15RP_TA_LOAD_READE", "RenderPassTargetAction::RP_TA_LOAD_READ"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction10RP_TA_NONEE", "RenderPassTargetAction::RP_TA_NONE"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction10RP_TA_NONEE", "RenderPassTargetAction::RP_TA_NONE"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction16RP_TA_STORE_MASKE", "RenderPassTargetAction::RP_TA_STORE_MASK"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction16RP_TA_STORE_MASKE", "RenderPassTargetAction::RP_TA_STORE_MASK"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction16RP_TA_STORE_NONEE", "RenderPassTargetAction::RP_TA_STORE_NONE"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction16RP_TA_STORE_NONEE", "RenderPassTargetAction::RP_TA_STORE_NONE"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction19RP_TA_STORE_NO_CAREE", "RenderPassTargetAction::RP_TA_STORE_NO_CARE"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction19RP_TA_STORE_NO_CAREE", "RenderPassTargetAction::RP_TA_STORE_NO_CARE"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction17RP_TA_STORE_WRITEE", "RenderPassTargetAction::RP_TA_STORE_WRITE"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction17RP_TA_STORE_WRITEE", "RenderPassTargetAction::RP_TA_STORE_WRITE"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_KEEPE", "RenderPassTargetAction::RP_TA_SUBPASS_KEEP"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_KEEPE", "RenderPassTargetAction::RP_TA_SUBPASS_KEEP"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_MASKE", "RenderPassTargetAction::RP_TA_SUBPASS_MASK"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_MASKE", "RenderPassTargetAction::RP_TA_SUBPASS_MASK"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_READE", "RenderPassTargetAction::RP_TA_SUBPASS_READ"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_READE", "RenderPassTargetAction::RP_TA_SUBPASS_READ"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction21RP_TA_SUBPASS_RESOLVEE", "RenderPassTargetAction::RP_TA_SUBPASS_RESOLVE"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction21RP_TA_SUBPASS_RESOLVEE", "RenderPassTargetAction::RP_TA_SUBPASS_RESOLVE"], [39, 2, 1, "_CPPv4N22RenderPassTargetAction19RP_TA_SUBPASS_WRITEE", "RenderPassTargetAction::RP_TA_SUBPASS_WRITE"], [52, 2, 1, "_CPPv4N22RenderPassTargetAction19RP_TA_SUBPASS_WRITEE", "RenderPassTargetAction::RP_TA_SUBPASS_WRITE"], [39, 3, 1, "_CPPv420RenderPassTargetDesc", "RenderPassTargetDesc"], [39, 4, 1, "_CPPv4N20RenderPassTargetDesc7aliasedE", "RenderPassTargetDesc::aliased"], [39, 4, 1, "_CPPv4N20RenderPassTargetDesc16templateResourceE", "RenderPassTargetDesc::templateResource"], [39, 4, 1, "_CPPv4N20RenderPassTargetDesc5texcfE", "RenderPassTargetDesc::texcf"], [41, 3, 1, "_CPPv412RenderTarget", "RenderTarget"], [41, 4, 1, "_CPPv4N12RenderTarget5layerE", "RenderTarget::layer"], [41, 4, 1, "_CPPv4N12RenderTarget9mip_levelE", "RenderTarget::mip_level"], [41, 4, 1, "_CPPv4N12RenderTarget3texE", "RenderTarget::tex"], [34, 1, 1, "_CPPv424ResourceActivationAction", "ResourceActivationAction"], [34, 2, 1, "_CPPv4N24ResourceActivationAction16CLEAR_AS_RTV_DSVE", "ResourceActivationAction::CLEAR_AS_RTV_DSV"], [34, 2, 1, "_CPPv4N24ResourceActivationAction14CLEAR_F_AS_UAVE", "ResourceActivationAction::CLEAR_F_AS_UAV"], [34, 2, 1, "_CPPv4N24ResourceActivationAction14CLEAR_I_AS_UAVE", "ResourceActivationAction::CLEAR_I_AS_UAV"], [34, 2, 1, "_CPPv4N24ResourceActivationAction18DISCARD_AS_RTV_DSVE", "ResourceActivationAction::DISCARD_AS_RTV_DSV"], [34, 2, 1, "_CPPv4N24ResourceActivationAction14DISCARD_AS_UAVE", "ResourceActivationAction::DISCARD_AS_UAV"], [34, 2, 1, "_CPPv4N24ResourceActivationAction27REWRITE_AS_COPY_DESTINATIONE", "ResourceActivationAction::REWRITE_AS_COPY_DESTINATION"], [34, 2, 1, "_CPPv4N24ResourceActivationAction18REWRITE_AS_RTV_DSVE", "ResourceActivationAction::REWRITE_AS_RTV_DSV"], [34, 2, 1, "_CPPv4N24ResourceActivationAction14REWRITE_AS_UAVE", "ResourceActivationAction::REWRITE_AS_UAV"], [34, 3, 1, "_CPPv428ResourceAllocationProperties", "ResourceAllocationProperties"], [34, 4, 1, "_CPPv4N28ResourceAllocationProperties9heapGroupE", "ResourceAllocationProperties::heapGroup"], [34, 4, 1, "_CPPv4N28ResourceAllocationProperties15offsetAlignmentE", "ResourceAllocationProperties::offsetAlignment"], [34, 4, 1, "_CPPv4N28ResourceAllocationProperties11sizeInBytesE", "ResourceAllocationProperties::sizeInBytes"], [52, 1, 1, "_CPPv415ResourceBarrier", "ResourceBarrier"], [52, 2, 1, "_CPPv4N15ResourceBarrier12RB_ALIAS_ALLE", "ResourceBarrier::RB_ALIAS_ALL"], [52, 2, 1, "_CPPv4N15ResourceBarrier13RB_ALIAS_FROME", "ResourceBarrier::RB_ALIAS_FROM"], [52, 2, 1, "_CPPv4N15ResourceBarrier11RB_ALIAS_TOE", "ResourceBarrier::RB_ALIAS_TO"], [52, 2, 1, "_CPPv4N15ResourceBarrier23RB_ALIAS_TO_AND_DISCARDE", "ResourceBarrier::RB_ALIAS_TO_AND_DISCARD"], [52, 2, 1, "_CPPv4N15ResourceBarrier34RB_FLAG_ACQUIRE_PIPELINE_OWNERSHIPE", "ResourceBarrier::RB_FLAG_ACQUIRE_PIPELINE_OWNERSHIP"], [52, 2, 1, "_CPPv4N15ResourceBarrier29RB_FLAG_DONT_PRESERVE_CONTENTE", "ResourceBarrier::RB_FLAG_DONT_PRESERVE_CONTENT"], [52, 2, 1, "_CPPv4N15ResourceBarrier34RB_FLAG_RELEASE_PIPELINE_OWNERSHIPE", "ResourceBarrier::RB_FLAG_RELEASE_PIPELINE_OWNERSHIP"], [52, 2, 1, "_CPPv4N15ResourceBarrier27RB_FLAG_SPLIT_BARRIER_BEGINE", "ResourceBarrier::RB_FLAG_SPLIT_BARRIER_BEGIN"], [52, 2, 1, "_CPPv4N15ResourceBarrier25RB_FLAG_SPLIT_BARRIER_ENDE", "ResourceBarrier::RB_FLAG_SPLIT_BARRIER_END"], [52, 2, 1, "_CPPv4N15ResourceBarrier48RB_FLUSH_RAYTRACE_ACCELERATION_BUILD_SCRATCH_USEE", "ResourceBarrier::RB_FLUSH_RAYTRACE_ACCELERATION_BUILD_SCRATCH_USE"], [52, 2, 1, "_CPPv4N15ResourceBarrier12RB_FLUSH_UAVE", "ResourceBarrier::RB_FLUSH_UAV"], [52, 2, 1, "_CPPv4N15ResourceBarrier7RB_NONEE", "ResourceBarrier::RB_NONE"], [52, 2, 1, "_CPPv4N15ResourceBarrier17RB_RO_BLIT_SOURCEE", "ResourceBarrier::RB_RO_BLIT_SOURCE"], [52, 2, 1, "_CPPv4N15ResourceBarrier21RB_RO_CONSTANT_BUFFERE", "ResourceBarrier::RB_RO_CONSTANT_BUFFER"], [52, 2, 1, "_CPPv4N15ResourceBarrier35RB_RO_CONSTANT_DEPTH_STENCIL_TARGETE", "ResourceBarrier::RB_RO_CONSTANT_DEPTH_STENCIL_TARGET"], [52, 2, 1, "_CPPv4N15ResourceBarrier17RB_RO_COPY_SOURCEE", "ResourceBarrier::RB_RO_COPY_SOURCE"], [52, 2, 1, "_CPPv4N15ResourceBarrier25RB_RO_GENERIC_READ_BUFFERE", "ResourceBarrier::RB_RO_GENERIC_READ_BUFFER"], [52, 2, 1, "_CPPv4N15ResourceBarrier26RB_RO_GENERIC_READ_TEXTUREE", "ResourceBarrier::RB_RO_GENERIC_READ_TEXTURE"], [52, 2, 1, "_CPPv4N15ResourceBarrier18RB_RO_INDEX_BUFFERE", "ResourceBarrier::RB_RO_INDEX_BUFFER"], [52, 2, 1, "_CPPv4N15ResourceBarrier21RB_RO_INDIRECT_BUFFERE", "ResourceBarrier::RB_RO_INDIRECT_BUFFER"], [52, 2, 1, "_CPPv4N15ResourceBarrier40RB_RO_RAYTRACE_ACCELERATION_BUILD_SOURCEE", "ResourceBarrier::RB_RO_RAYTRACE_ACCELERATION_BUILD_SOURCE"], [52, 2, 1, "_CPPv4N15ResourceBarrier26RB_RO_SHADER_BINDING_TABLEE", "ResourceBarrier::RB_RO_SHADER_BINDING_TABLE"], [52, 2, 1, "_CPPv4N15ResourceBarrier9RB_RO_SRVE", "ResourceBarrier::RB_RO_SRV"], [52, 2, 1, "_CPPv4N15ResourceBarrier35RB_RO_VARIABLE_RATE_SHADING_TEXTUREE", "ResourceBarrier::RB_RO_VARIABLE_RATE_SHADING_TEXTURE"], [52, 2, 1, "_CPPv4N15ResourceBarrier19RB_RO_VERTEX_BUFFERE", "ResourceBarrier::RB_RO_VERTEX_BUFFER"], [52, 2, 1, "_CPPv4N15ResourceBarrier15RB_RW_BLIT_DESTE", "ResourceBarrier::RB_RW_BLIT_DEST"], [52, 2, 1, "_CPPv4N15ResourceBarrier15RB_RW_COPY_DESTE", "ResourceBarrier::RB_RW_COPY_DEST"], [52, 2, 1, "_CPPv4N15ResourceBarrier26RB_RW_DEPTH_STENCIL_TARGETE", "ResourceBarrier::RB_RW_DEPTH_STENCIL_TARGET"], [52, 2, 1, "_CPPv4N15ResourceBarrier19RB_RW_RENDER_TARGETE", "ResourceBarrier::RB_RW_RENDER_TARGET"], [52, 2, 1, "_CPPv4N15ResourceBarrier9RB_RW_UAVE", "ResourceBarrier::RB_RW_UAV"], [52, 2, 1, "_CPPv4N15ResourceBarrier28RB_SOURCE_STAGE_ALL_GRAPHICSE", "ResourceBarrier::RB_SOURCE_STAGE_ALL_GRAPHICS"], [52, 2, 1, "_CPPv4N15ResourceBarrier27RB_SOURCE_STAGE_ALL_SHADERSE", "ResourceBarrier::RB_SOURCE_STAGE_ALL_SHADERS"], [52, 2, 1, "_CPPv4N15ResourceBarrier23RB_SOURCE_STAGE_COMPUTEE", "ResourceBarrier::RB_SOURCE_STAGE_COMPUTE"], [52, 2, 1, "_CPPv4N15ResourceBarrier21RB_SOURCE_STAGE_PIXELE", "ResourceBarrier::RB_SOURCE_STAGE_PIXEL"], [52, 2, 1, "_CPPv4N15ResourceBarrier24RB_SOURCE_STAGE_RAYTRACEE", "ResourceBarrier::RB_SOURCE_STAGE_RAYTRACE"], [52, 2, 1, "_CPPv4N15ResourceBarrier22RB_SOURCE_STAGE_VERTEXE", "ResourceBarrier::RB_SOURCE_STAGE_VERTEX"], [52, 2, 1, "_CPPv4N15ResourceBarrier21RB_STAGE_ALL_GRAPHICSE", "ResourceBarrier::RB_STAGE_ALL_GRAPHICS"], [52, 2, 1, "_CPPv4N15ResourceBarrier20RB_STAGE_ALL_SHADERSE", "ResourceBarrier::RB_STAGE_ALL_SHADERS"], [52, 2, 1, "_CPPv4N15ResourceBarrier16RB_STAGE_COMPUTEE", "ResourceBarrier::RB_STAGE_COMPUTE"], [52, 2, 1, "_CPPv4N15ResourceBarrier14RB_STAGE_PIXELE", "ResourceBarrier::RB_STAGE_PIXEL"], [52, 2, 1, "_CPPv4N15ResourceBarrier17RB_STAGE_RAYTRACEE", "ResourceBarrier::RB_STAGE_RAYTRACE"], [52, 2, 1, "_CPPv4N15ResourceBarrier15RB_STAGE_VERTEXE", "ResourceBarrier::RB_STAGE_VERTEX"], [27, 3, 1, "_CPPv419ResourceBarrierDesc", "ResourceBarrierDesc"], [27, 4, 1, "_CPPv4N19ResourceBarrierDescUt2_10E", "ResourceBarrierDesc::[anonymous]"], [27, 4, 1, "_CPPv4N19ResourceBarrierDescUt2_12E", "ResourceBarrierDesc::[anonymous]"], [27, 4, 1, "_CPPv4N19ResourceBarrierDescUt2_14E", "ResourceBarrierDesc::[anonymous]"], [27, 4, 1, "_CPPv4N19ResourceBarrierDescUt2_16E", "ResourceBarrierDesc::[anonymous]"], [27, 4, 1, "_CPPv4N19ResourceBarrierDescUt1_4E", "ResourceBarrierDesc::[anonymous]"], [27, 4, 1, "_CPPv4N19ResourceBarrierDescUt1_6E", "ResourceBarrierDesc::[anonymous]"], [27, 4, 1, "_CPPv4N19ResourceBarrierDescUt1_8E", "ResourceBarrierDesc::[anonymous]"], [27, 6, 1, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P11BaseTextureRA1N_15ResourceBarrierRA1N_jRA1N_j", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P35RaytraceBottomAccelerationStructure", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P7SbufferRA1N_15ResourceBarrier", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescE15ResourceBarrier", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP35RaytraceBottomAccelerationStructureEE", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP7SbufferEENSt16initializer_listI15ResourceBarrierEE", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP7SbufferEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP35RaytraceBottomAccelerationStructure", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrier", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC35RaytraceBottomAccelerationStructurej", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierj", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescERK19ResourceBarrierDesc", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 6, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEv", "ResourceBarrierDesc::ResourceBarrierDesc"], [27, 8, 1, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P11BaseTextureRA1N_15ResourceBarrierRA1N_jRA1N_j", "ResourceBarrierDesc::ResourceBarrierDesc::N"], [27, 8, 1, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P35RaytraceBottomAccelerationStructure", "ResourceBarrierDesc::ResourceBarrierDesc::N"], [27, 8, 1, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P7SbufferRA1N_15ResourceBarrier", "ResourceBarrierDesc::ResourceBarrierDesc::N"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::b_count"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::b_count"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::b_rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::b_rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::b_rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::b_rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP35RaytraceBottomAccelerationStructure", "ResourceBarrierDesc::ResourceBarrierDesc::blas"], [27, 7, 1, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P35RaytraceBottomAccelerationStructure", "ResourceBarrierDesc::ResourceBarrierDesc::blases"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP35RaytraceBottomAccelerationStructureEE", "ResourceBarrierDesc::ResourceBarrierDesc::blases"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC35RaytraceBottomAccelerationStructurej", "ResourceBarrierDesc::ResourceBarrierDesc::blases"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrier", "ResourceBarrierDesc::ResourceBarrierDesc::buf"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::buf"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::buf"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP7SbufferEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE", "ResourceBarrierDesc::ResourceBarrierDesc::buf_rb"], [27, 7, 1, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P7SbufferRA1N_15ResourceBarrier", "ResourceBarrierDesc::ResourceBarrierDesc::bufs"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP7SbufferEENSt16initializer_listI15ResourceBarrierEE", "ResourceBarrierDesc::ResourceBarrierDesc::bufs"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP7SbufferEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE", "ResourceBarrierDesc::ResourceBarrierDesc::bufs"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierj", "ResourceBarrierDesc::ResourceBarrierDesc::bufs"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::bufs"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::bufs"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::count"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC35RaytraceBottomAccelerationStructurej", "ResourceBarrierDesc::ResourceBarrierDesc::count"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierj", "ResourceBarrierDesc::ResourceBarrierDesc::count"], [27, 7, 1, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P11BaseTextureRA1N_15ResourceBarrierRA1N_jRA1N_j", "ResourceBarrierDesc::ResourceBarrierDesc::rb"], [27, 7, 1, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P7SbufferRA1N_15ResourceBarrier", "ResourceBarrierDesc::ResourceBarrierDesc::rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescE15ResourceBarrier", "ResourceBarrierDesc::ResourceBarrierDesc::rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE", "ResourceBarrierDesc::ResourceBarrierDesc::rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP7SbufferEENSt16initializer_listI15ResourceBarrierEE", "ResourceBarrierDesc::ResourceBarrierDesc::rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrier", "ResourceBarrierDesc::ResourceBarrierDesc::rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierj", "ResourceBarrierDesc::ResourceBarrierDesc::rb"], [27, 7, 1, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P11BaseTextureRA1N_15ResourceBarrierRA1N_jRA1N_j", "ResourceBarrierDesc::ResourceBarrierDesc::sub_res_index"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE", "ResourceBarrierDesc::ResourceBarrierDesc::sub_res_index"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP7SbufferEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE", "ResourceBarrierDesc::ResourceBarrierDesc::sub_res_index"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::sub_res_index"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::sub_res_index"], [27, 7, 1, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P11BaseTextureRA1N_15ResourceBarrierRA1N_jRA1N_j", "ResourceBarrierDesc::ResourceBarrierDesc::sub_res_range"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE", "ResourceBarrierDesc::ResourceBarrierDesc::sub_res_range"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP7SbufferEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE", "ResourceBarrierDesc::ResourceBarrierDesc::sub_res_range"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::sub_res_range"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::sub_res_range"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_count"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_count"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_rb"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_sub_res_index"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_sub_res_index"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_sub_res_index"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_sub_res_index"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_sub_res_range"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_sub_res_range"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_sub_res_range"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::t_sub_res_range"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::tex"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::tex"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjP11BaseTexture15ResourceBarrierjj", "ResourceBarrierDesc::ResourceBarrierDesc::tex"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP7SbufferEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE", "ResourceBarrierDesc::ResourceBarrierDesc::tex_rb"], [27, 7, 1, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P11BaseTextureRA1N_15ResourceBarrierRA1N_jRA1N_j", "ResourceBarrierDesc::ResourceBarrierDesc::texs"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE", "ResourceBarrierDesc::ResourceBarrierDesc::texs"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP7SbufferEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE", "ResourceBarrierDesc::ResourceBarrierDesc::texs"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::texs"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::texs"], [27, 7, 1, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjPPC11BaseTexturePK15ResourceBarrierPKjPKjj", "ResourceBarrierDesc::ResourceBarrierDesc::texs"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc4blasE", "ResourceBarrierDesc::blas"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc9blasCountE", "ResourceBarrierDesc::blasCount"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc6blasesE", "ResourceBarrierDesc::blases"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc6bufferE", "ResourceBarrierDesc::buffer"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc11bufferCountE", "ResourceBarrierDesc::bufferCount"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc11bufferStateE", "ResourceBarrierDesc::bufferState"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc12bufferStatesE", "ResourceBarrierDesc::bufferStates"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc7buffersE", "ResourceBarrierDesc::buffers"], [27, 6, 1, "_CPPv4I0EN19ResourceBarrierDesc21enumerateBlasBarriersEv1T", "ResourceBarrierDesc::enumerateBlasBarriers"], [27, 8, 1, "_CPPv4I0EN19ResourceBarrierDesc21enumerateBlasBarriersEv1T", "ResourceBarrierDesc::enumerateBlasBarriers::T"], [27, 7, 1, "_CPPv4I0EN19ResourceBarrierDesc21enumerateBlasBarriersEv1T", "ResourceBarrierDesc::enumerateBlasBarriers::clb"], [27, 6, 1, "_CPPv4I0EN19ResourceBarrierDesc23enumerateBufferBarriersEv1T", "ResourceBarrierDesc::enumerateBufferBarriers"], [27, 8, 1, "_CPPv4I0EN19ResourceBarrierDesc23enumerateBufferBarriersEv1T", "ResourceBarrierDesc::enumerateBufferBarriers::T"], [27, 7, 1, "_CPPv4I0EN19ResourceBarrierDesc23enumerateBufferBarriersEv1T", "ResourceBarrierDesc::enumerateBufferBarriers::clb"], [27, 6, 1, "_CPPv4I0EN19ResourceBarrierDesc24enumerateTextureBarriersEv1T", "ResourceBarrierDesc::enumerateTextureBarriers"], [27, 8, 1, "_CPPv4I0EN19ResourceBarrierDesc24enumerateTextureBarriersEv1T", "ResourceBarrierDesc::enumerateTextureBarriers::T"], [27, 7, 1, "_CPPv4I0EN19ResourceBarrierDesc24enumerateTextureBarriersEv1T", "ResourceBarrierDesc::enumerateTextureBarriers::clb"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc20single_element_countE", "ResourceBarrierDesc::single_element_count"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc7textureE", "ResourceBarrierDesc::texture"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc12textureCountE", "ResourceBarrierDesc::textureCount"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc12textureStateE", "ResourceBarrierDesc::textureState"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc13textureStatesE", "ResourceBarrierDesc::textureStates"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc18textureSubResIndexE", "ResourceBarrierDesc::textureSubResIndex"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc20textureSubResIndicesE", "ResourceBarrierDesc::textureSubResIndices"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc18textureSubResRangeE", "ResourceBarrierDesc::textureSubResRange"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc19textureSubResRangesE", "ResourceBarrierDesc::textureSubResRanges"], [27, 4, 1, "_CPPv4N19ResourceBarrierDesc8texturesE", "ResourceBarrierDesc::textures"], [43, 9, 1, "_CPPv418ResourceClearValue", "ResourceClearValue"], [43, 4, 1, "_CPPv4N18ResourceClearValueUt2_28E", "ResourceClearValue::[anonymous]"], [43, 4, 1, "_CPPv4N18ResourceClearValueUt2_30E", "ResourceClearValue::[anonymous]"], [43, 4, 1, "_CPPv4N18ResourceClearValueUt2_32E", "ResourceClearValue::[anonymous]"], [43, 4, 1, "_CPPv4N18ResourceClearValueUt2_34E", "ResourceClearValue::[anonymous]"], [43, 4, 1, "_CPPv4N18ResourceClearValue7asDepthE", "ResourceClearValue::asDepth"], [43, 4, 1, "_CPPv4N18ResourceClearValue7asFloatE", "ResourceClearValue::asFloat"], [43, 4, 1, "_CPPv4N18ResourceClearValue5asIntE", "ResourceClearValue::asInt"], [43, 4, 1, "_CPPv4N18ResourceClearValue9asStencilE", "ResourceClearValue::asStencil"], [43, 4, 1, "_CPPv4N18ResourceClearValue6asUintE", "ResourceClearValue::asUint"], [34, 3, 1, "_CPPv419ResourceDescription", "ResourceDescription"], [34, 4, 1, "_CPPv4N19ResourceDescriptionUt2_22E", "ResourceDescription::[anonymous]"], [34, 5, 1, "_CPPv4N19ResourceDescription5HashTE", "ResourceDescription::HashT"], [34, 6, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionERK19ResourceDescription", "ResourceDescription::ResourceDescription"], [34, 6, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionERK25BufferResourceDescription", "ResourceDescription::ResourceDescription"], [34, 6, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionERK26TextureResourceDescription", "ResourceDescription::ResourceDescription"], [34, 6, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionERK29VolTextureResourceDescription", "ResourceDescription::ResourceDescription"], [34, 6, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionERK30CubeTextureResourceDescription", "ResourceDescription::ResourceDescription"], [34, 6, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionERK31ArrayTextureResourceDescription", "ResourceDescription::ResourceDescription"], [34, 6, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionERK35ArrayCubeTextureResourceDescription", "ResourceDescription::ResourceDescription"], [34, 6, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionEv", "ResourceDescription::ResourceDescription"], [34, 7, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionERK25BufferResourceDescription", "ResourceDescription::ResourceDescription::buf"], [34, 7, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionERK26TextureResourceDescription", "ResourceDescription::ResourceDescription::tex"], [34, 7, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionERK29VolTextureResourceDescription", "ResourceDescription::ResourceDescription::tex"], [34, 7, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionERK30CubeTextureResourceDescription", "ResourceDescription::ResourceDescription::tex"], [34, 7, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionERK31ArrayTextureResourceDescription", "ResourceDescription::ResourceDescription::tex"], [34, 7, 1, "_CPPv4N19ResourceDescription19ResourceDescriptionERK35ArrayCubeTextureResourceDescription", "ResourceDescription::ResourceDescription::tex"], [34, 4, 1, "_CPPv4N19ResourceDescription17asArrayCubeTexResE", "ResourceDescription::asArrayCubeTexRes"], [34, 4, 1, "_CPPv4N19ResourceDescription13asArrayTexResE", "ResourceDescription::asArrayTexRes"], [34, 4, 1, "_CPPv4N19ResourceDescription10asBasicResE", "ResourceDescription::asBasicRes"], [34, 4, 1, "_CPPv4N19ResourceDescription13asBasicTexResE", "ResourceDescription::asBasicTexRes"], [34, 4, 1, "_CPPv4N19ResourceDescription11asBufferResE", "ResourceDescription::asBufferRes"], [34, 4, 1, "_CPPv4N19ResourceDescription12asCubeTexResE", "ResourceDescription::asCubeTexRes"], [34, 4, 1, "_CPPv4N19ResourceDescription8asTexResE", "ResourceDescription::asTexRes"], [34, 4, 1, "_CPPv4N19ResourceDescription11asVolTexResE", "ResourceDescription::asVolTexRes"], [34, 6, 1, "_CPPv4NK19ResourceDescription4hashEv", "ResourceDescription::hash"], [34, 6, 1, "_CPPv4I0DpENK19ResourceDescription8hashPackE5HashTRK1TDpRK2Ts", "ResourceDescription::hashPack"], [34, 6, 1, "_CPPv4NK19ResourceDescription8hashPackEv", "ResourceDescription::hashPack"], [34, 8, 1, "_CPPv4I0DpENK19ResourceDescription8hashPackE5HashTRK1TDpRK2Ts", "ResourceDescription::hashPack::T"], [34, 8, 1, "_CPPv4I0DpENK19ResourceDescription8hashPackE5HashTRK1TDpRK2Ts", "ResourceDescription::hashPack::Ts"], [34, 7, 1, "_CPPv4I0DpENK19ResourceDescription8hashPackE5HashTRK1TDpRK2Ts", "ResourceDescription::hashPack::first"], [34, 7, 1, "_CPPv4I0DpENK19ResourceDescription8hashPackE5HashTRK1TDpRK2Ts", "ResourceDescription::hashPack::other"], [34, 6, 1, "_CPPv4N19ResourceDescriptionaSERK19ResourceDescription", "ResourceDescription::operator="], [34, 6, 1, "_CPPv4NK19ResourceDescriptioneqERK19ResourceDescription", "ResourceDescription::operator=="], [34, 7, 1, "_CPPv4NK19ResourceDescriptioneqERK19ResourceDescription", "ResourceDescription::operator==::r"], [34, 4, 1, "_CPPv4N19ResourceDescription7resTypeE", "ResourceDescription::resType"], [34, 1, 1, "_CPPv422ResourceHeapCreateFlag", "ResourceHeapCreateFlag"], [34, 2, 1, "_CPPv4N22ResourceHeapCreateFlag9RHCF_NONEE", "ResourceHeapCreateFlag::RHCF_NONE"], [34, 2, 1, "_CPPv4N22ResourceHeapCreateFlag28RHCF_REQUIRES_DEDICATED_HEAPE", "ResourceHeapCreateFlag::RHCF_REQUIRES_DEDICATED_HEAP"], [34, 5, 1, "_CPPv423ResourceHeapCreateFlags", "ResourceHeapCreateFlags"], [34, 3, 1, "_CPPv427ResourceHeapGroupProperties", "ResourceHeapGroupProperties"], [34, 4, 1, "_CPPv4N27ResourceHeapGroupPropertiesUt2_24E", "ResourceHeapGroupProperties::[anonymous]"], [34, 4, 1, "_CPPv4N27ResourceHeapGroupProperties5flagsE", "ResourceHeapGroupProperties::flags"], [34, 4, 1, "_CPPv4N27ResourceHeapGroupProperties12isCPUVisibleE", "ResourceHeapGroupProperties::isCPUVisible"], [34, 4, 1, "_CPPv4N27ResourceHeapGroupProperties10isGPULocalE", "ResourceHeapGroupProperties::isGPULocal"], [34, 4, 1, "_CPPv4N27ResourceHeapGroupProperties8isOnChipE", "ResourceHeapGroupProperties::isOnChip"], [34, 4, 1, "_CPPv4N27ResourceHeapGroupProperties11maxHeapSizeE", "ResourceHeapGroupProperties::maxHeapSize"], [34, 4, 1, "_CPPv4N27ResourceHeapGroupProperties15maxResourceSizeE", "ResourceHeapGroupProperties::maxResourceSize"], [34, 4, 1, "_CPPv4N27ResourceHeapGroupProperties18optimalMaxHeapSizeE", "ResourceHeapGroupProperties::optimalMaxHeapSize"], [52, 2, 1, "_CPPv4N11ShaderStage8STAGE_CSE", "STAGE_CS"], [52, 2, 1, "_CPPv4N11ShaderStage20STAGE_CS_ASYNC_STATEE", "STAGE_CS_ASYNC_STATE"], [52, 2, 1, "_CPPv4N11ShaderStage9STAGE_MAXE", "STAGE_MAX"], [52, 2, 1, "_CPPv4N11ShaderStage13STAGE_MAX_EXTE", "STAGE_MAX_EXT"], [52, 2, 1, "_CPPv4N11ShaderStage8STAGE_PSE", "STAGE_PS"], [52, 2, 1, "_CPPv4N11ShaderStage14STAGE_RAYTRACEE", "STAGE_RAYTRACE"], [52, 2, 1, "_CPPv4N11ShaderStage8STAGE_VSE", "STAGE_VS"], [29, 3, 1, "_CPPv47Sbuffer", "Sbuffer"], [29, 3, 1, "_CPPv4N7Sbuffer11IReloadDataE", "Sbuffer::IReloadData"], [29, 6, 1, "_CPPv4N7Sbuffer11IReloadData11destroySelfEv", "Sbuffer::IReloadData::destroySelf"], [29, 6, 1, "_CPPv4N7Sbuffer11IReloadData12reloadD3dResEP7Sbuffer", "Sbuffer::IReloadData::reloadD3dRes"], [29, 7, 1, "_CPPv4N7Sbuffer11IReloadData12reloadD3dResEP7Sbuffer", "Sbuffer::IReloadData::reloadD3dRes::sb"], [29, 6, 1, "_CPPv4N7Sbuffer11IReloadDataD0Ev", "Sbuffer::IReloadData::~IReloadData"], [29, 6, 1, "_CPPv4N7Sbuffer6copyToEP7Sbuffer", "Sbuffer::copyTo"], [29, 6, 1, "_CPPv4N7Sbuffer6copyToEP7Sbuffer8uint32_t8uint32_t8uint32_t", "Sbuffer::copyTo"], [29, 7, 1, "_CPPv4N7Sbuffer6copyToEP7Sbuffer", "Sbuffer::copyTo::dest"], [29, 7, 1, "_CPPv4N7Sbuffer6copyToEP7Sbuffer8uint32_t8uint32_t8uint32_t", "Sbuffer::copyTo::dest"], [29, 7, 1, "_CPPv4N7Sbuffer6copyToEP7Sbuffer8uint32_t8uint32_t8uint32_t", "Sbuffer::copyTo::dst_ofs_bytes"], [29, 7, 1, "_CPPv4N7Sbuffer6copyToEP7Sbuffer8uint32_t8uint32_t8uint32_t", "Sbuffer::copyTo::size_bytes"], [29, 7, 1, "_CPPv4N7Sbuffer6copyToEP7Sbuffer8uint32_t8uint32_t8uint32_t", "Sbuffer::copyTo::src_ofs_bytes"], [29, 6, 1, "_CPPv4NK7Sbuffer10getBufNameEv", "Sbuffer::getBufName"], [29, 6, 1, "_CPPv4NK7Sbuffer14getElementSizeEv", "Sbuffer::getElementSize"], [29, 6, 1, "_CPPv4NK7Sbuffer8getFlagsEv", "Sbuffer::getFlags"], [29, 6, 1, "_CPPv4NK7Sbuffer14getNumElementsEv", "Sbuffer::getNumElements"], [29, 6, 1, "_CPPv4N7Sbuffer4lockE8uint32_t8uint32_tPP8uint16_ti", "Sbuffer::lock"], [29, 6, 1, "_CPPv4N7Sbuffer4lockE8uint32_t8uint32_tPPvi", "Sbuffer::lock"], [29, 6, 1, "_CPPv4N7Sbuffer6lock32E8uint32_t8uint32_tPP8uint32_ti", "Sbuffer::lock32"], [29, 7, 1, "_CPPv4N7Sbuffer6lock32E8uint32_t8uint32_tPP8uint32_ti", "Sbuffer::lock32::flags"], [29, 7, 1, "_CPPv4N7Sbuffer6lock32E8uint32_t8uint32_tPP8uint32_ti", "Sbuffer::lock32::ofs_bytes"], [29, 7, 1, "_CPPv4N7Sbuffer6lock32E8uint32_t8uint32_tPP8uint32_ti", "Sbuffer::lock32::p"], [29, 7, 1, "_CPPv4N7Sbuffer6lock32E8uint32_t8uint32_tPP8uint32_ti", "Sbuffer::lock32::size_bytes"], [29, 7, 1, "_CPPv4N7Sbuffer4lockE8uint32_t8uint32_tPP8uint16_ti", "Sbuffer::lock::flags"], [29, 7, 1, "_CPPv4N7Sbuffer4lockE8uint32_t8uint32_tPPvi", "Sbuffer::lock::flags"], [29, 7, 1, "_CPPv4N7Sbuffer4lockE8uint32_t8uint32_tPP8uint16_ti", "Sbuffer::lock::ofs_bytes"], [29, 7, 1, "_CPPv4N7Sbuffer4lockE8uint32_t8uint32_tPPvi", "Sbuffer::lock::ofs_bytes"], [29, 7, 1, "_CPPv4N7Sbuffer4lockE8uint32_t8uint32_tPP8uint16_ti", "Sbuffer::lock::p"], [29, 7, 1, "_CPPv4N7Sbuffer4lockE8uint32_t8uint32_tPPvi", "Sbuffer::lock::p"], [29, 7, 1, "_CPPv4N7Sbuffer4lockE8uint32_t8uint32_tPP8uint16_ti", "Sbuffer::lock::size_bytes"], [29, 7, 1, "_CPPv4N7Sbuffer4lockE8uint32_t8uint32_tPPvi", "Sbuffer::lock::size_bytes"], [29, 6, 1, "_CPPv4I0EN7Sbuffer6lockExEi8uint32_t8uint32_tPP1Ti", "Sbuffer::lockEx"], [29, 8, 1, "_CPPv4I0EN7Sbuffer6lockExEi8uint32_t8uint32_tPP1Ti", "Sbuffer::lockEx::T"], [29, 7, 1, "_CPPv4I0EN7Sbuffer6lockExEi8uint32_t8uint32_tPP1Ti", "Sbuffer::lockEx::flags"], [29, 7, 1, "_CPPv4I0EN7Sbuffer6lockExEi8uint32_t8uint32_tPP1Ti", "Sbuffer::lockEx::ofs_bytes"], [29, 7, 1, "_CPPv4I0EN7Sbuffer6lockExEi8uint32_t8uint32_tPP1Ti", "Sbuffer::lockEx::p"], [29, 7, 1, "_CPPv4I0EN7Sbuffer6lockExEi8uint32_t8uint32_tPP1Ti", "Sbuffer::lockEx::size_bytes"], [29, 6, 1, "_CPPv4NK7Sbuffer7restypeEv", "Sbuffer::restype"], [29, 6, 1, "_CPPv4N7Sbuffer17setReloadCallbackEP11IReloadData", "Sbuffer::setReloadCallback"], [29, 6, 1, "_CPPv4N7Sbuffer6unlockEv", "Sbuffer::unlock"], [29, 6, 1, "_CPPv4N7Sbuffer10updateDataE8uint32_t8uint32_tPKv8uint32_t", "Sbuffer::updateData"], [29, 7, 1, "_CPPv4N7Sbuffer10updateDataE8uint32_t8uint32_tPKv8uint32_t", "Sbuffer::updateData::lockFlags"], [29, 7, 1, "_CPPv4N7Sbuffer10updateDataE8uint32_t8uint32_tPKv8uint32_t", "Sbuffer::updateData::ofs_bytes"], [29, 7, 1, "_CPPv4N7Sbuffer10updateDataE8uint32_t8uint32_tPKv8uint32_t", "Sbuffer::updateData::size_bytes"], [29, 7, 1, "_CPPv4N7Sbuffer10updateDataE8uint32_t8uint32_tPKv8uint32_t", "Sbuffer::updateData::src"], [29, 6, 1, "_CPPv4N7Sbuffer18updateDataWithLockE8uint32_t8uint32_tPKvi", "Sbuffer::updateDataWithLock"], [29, 7, 1, "_CPPv4N7Sbuffer18updateDataWithLockE8uint32_t8uint32_tPKvi", "Sbuffer::updateDataWithLock::lockFlags"], [29, 7, 1, "_CPPv4N7Sbuffer18updateDataWithLockE8uint32_t8uint32_tPKvi", "Sbuffer::updateDataWithLock::ofs_bytes"], [29, 7, 1, "_CPPv4N7Sbuffer18updateDataWithLockE8uint32_t8uint32_tPKvi", "Sbuffer::updateDataWithLock::size_bytes"], [29, 7, 1, "_CPPv4N7Sbuffer18updateDataWithLockE8uint32_t8uint32_tPKvi", "Sbuffer::updateDataWithLock::src"], [29, 6, 1, "_CPPv4N7SbufferD0Ev", "Sbuffer::~Sbuffer"], [52, 1, 1, "_CPPv411ShaderStage", "ShaderStage"], [52, 2, 1, "_CPPv4N11ShaderStage8STAGE_CSE", "ShaderStage::STAGE_CS"], [52, 2, 1, "_CPPv4N11ShaderStage20STAGE_CS_ASYNC_STATEE", "ShaderStage::STAGE_CS_ASYNC_STATE"], [52, 2, 1, "_CPPv4N11ShaderStage9STAGE_MAXE", "ShaderStage::STAGE_MAX"], [52, 2, 1, "_CPPv4N11ShaderStage13STAGE_MAX_EXTE", "ShaderStage::STAGE_MAX_EXT"], [52, 2, 1, "_CPPv4N11ShaderStage8STAGE_PSE", "ShaderStage::STAGE_PS"], [52, 2, 1, "_CPPv4N11ShaderStage14STAGE_RAYTRACEE", "ShaderStage::STAGE_RAYTRACE"], [52, 2, 1, "_CPPv4N11ShaderStage8STAGE_VSE", "ShaderStage::STAGE_VS"], [67, 5, 1, "_CPPv49TEXTUREID", "TEXTUREID"], [66, 2, 1, "_CPPv4N5TexQL10TQL__COUNTE", "TQL__COUNT"], [66, 2, 1, "_CPPv4N5TexQL10TQL__FIRSTE", "TQL__FIRST"], [66, 2, 1, "_CPPv4N5TexQL9TQL__LASTE", "TQL__LAST"], [66, 2, 1, "_CPPv4N5TexQL8TQL_baseE", "TQL_base"], [66, 2, 1, "_CPPv4N5TexQL8TQL_highE", "TQL_high"], [66, 2, 1, "_CPPv4N5TexQL8TQL_stubE", "TQL_stub"], [66, 2, 1, "_CPPv4N5TexQL9TQL_thumbE", "TQL_thumb"], [66, 2, 1, "_CPPv4N5TexQL7TQL_uhqE", "TQL_uhq"], [54, 1, 1, "_CPPv410TexLoadRes", "TexLoadRes"], [54, 2, 1, "_CPPv4N10TexLoadRes3ERRE", "TexLoadRes::ERR"], [54, 2, 1, "_CPPv4N10TexLoadRes7ERR_RUBE", "TexLoadRes::ERR_RUB"], [54, 2, 1, "_CPPv4N10TexLoadRes2OKE", "TexLoadRes::OK"], [66, 1, 1, "_CPPv45TexQL", "TexQL"], [66, 2, 1, "_CPPv4N5TexQL10TQL__COUNTE", "TexQL::TQL__COUNT"], [66, 2, 1, "_CPPv4N5TexQL10TQL__FIRSTE", "TexQL::TQL__FIRST"], [66, 2, 1, "_CPPv4N5TexQL9TQL__LASTE", "TexQL::TQL__LAST"], [66, 2, 1, "_CPPv4N5TexQL8TQL_baseE", "TexQL::TQL_base"], [66, 2, 1, "_CPPv4N5TexQL8TQL_highE", "TexQL::TQL_high"], [66, 2, 1, "_CPPv4N5TexQL8TQL_stubE", "TexQL::TQL_stub"], [66, 2, 1, "_CPPv4N5TexQL9TQL_thumbE", "TexQL::TQL_thumb"], [66, 2, 1, "_CPPv4N5TexQL7TQL_uhqE", "TexQL::TQL_uhq"], [41, 5, 1, "_CPPv47Texture", "Texture"], [54, 5, 1, "_CPPv47Texture", "Texture"], [54, 3, 1, "_CPPv424TextureChannelFormatDesc", "TextureChannelFormatDesc"], [54, 4, 1, "_CPPv4N24TextureChannelFormatDesc4bitsE", "TextureChannelFormatDesc::bits"], [54, 4, 1, "_CPPv4N24TextureChannelFormatDesc12isFloatPointE", "TextureChannelFormatDesc::isFloatPoint"], [54, 4, 1, "_CPPv4N24TextureChannelFormatDesc12isNormalizedE", "TextureChannelFormatDesc::isNormalized"], [54, 4, 1, "_CPPv4N24TextureChannelFormatDesc8isSignedE", "TextureChannelFormatDesc::isSigned"], [54, 4, 1, "_CPPv4N24TextureChannelFormatDesc6offsetE", "TextureChannelFormatDesc::offset"], [68, 3, 1, "_CPPv414TextureFactory", "TextureFactory"], [68, 6, 1, "_CPPv4N14TextureFactory14TextureFactoryERR14TextureFactory", "TextureFactory::TextureFactory"], [68, 6, 1, "_CPPv4N14TextureFactory14TextureFactoryEv", "TextureFactory::TextureFactory"], [68, 6, 1, "_CPPv4N14TextureFactory13createTextureE9TEXTUREID", "TextureFactory::createTexture"], [68, 7, 1, "_CPPv4N14TextureFactory13createTextureE9TEXTUREID", "TextureFactory::createTexture::id"], [68, 6, 1, "_CPPv4N14TextureFactory14getTextureDDSxE9TEXTUREIDR3TabIcE", "TextureFactory::getTextureDDSx"], [68, 6, 1, "_CPPv4N14TextureFactory19isPersistentTexNameEPKc", "TextureFactory::isPersistentTexName"], [68, 6, 1, "_CPPv4N14TextureFactory19onTexFactoryDeletedEP14TextureFactory", "TextureFactory::onTexFactoryDeleted"], [68, 7, 1, "_CPPv4N14TextureFactory19onTexFactoryDeletedEP14TextureFactory", "TextureFactory::onTexFactoryDeleted::f"], [68, 6, 1, "_CPPv4N14TextureFactory19onUnregisterTextureE9TEXTUREID", "TextureFactory::onUnregisterTexture"], [68, 6, 1, "_CPPv4N14TextureFactoryaSERR14TextureFactory", "TextureFactory::operator="], [68, 6, 1, "_CPPv4N14TextureFactory14releaseTextureEP11BaseTexture9TEXTUREID", "TextureFactory::releaseTexture"], [68, 7, 1, "_CPPv4N14TextureFactory14releaseTextureEP11BaseTexture9TEXTUREID", "TextureFactory::releaseTexture::id"], [68, 7, 1, "_CPPv4N14TextureFactory14releaseTextureEP11BaseTexture9TEXTUREID", "TextureFactory::releaseTexture::texture"], [68, 6, 1, "_CPPv4N14TextureFactory18scheduleTexLoadingE9TEXTUREID5TexQL", "TextureFactory::scheduleTexLoading"], [68, 6, 1, "_CPPv4N14TextureFactory23texFactoryActiveChangedEb", "TextureFactory::texFactoryActiveChanged"], [68, 6, 1, "_CPPv4N14TextureFactoryD0Ev", "TextureFactory::~TextureFactory"], [54, 3, 1, "_CPPv417TextureFormatDesc", "TextureFormatDesc"], [54, 4, 1, "_CPPv4N17TextureFormatDesc1aE", "TextureFormatDesc::a"], [54, 4, 1, "_CPPv4N17TextureFormatDesc1bE", "TextureFormatDesc::b"], [54, 4, 1, "_CPPv4N17TextureFormatDesc15bytesPerElementE", "TextureFormatDesc::bytesPerElement"], [54, 6, 1, "_CPPv4NK17TextureFormatDesc13channelsCountEv", "TextureFormatDesc::channelsCount"], [54, 4, 1, "_CPPv4N17TextureFormatDesc18dagorTextureFormatE", "TextureFormatDesc::dagorTextureFormat"], [54, 4, 1, "_CPPv4N17TextureFormatDesc5depthE", "TextureFormatDesc::depth"], [54, 4, 1, "_CPPv4N17TextureFormatDesc13elementHeightE", "TextureFormatDesc::elementHeight"], [54, 4, 1, "_CPPv4N17TextureFormatDesc12elementWidthE", "TextureFormatDesc::elementWidth"], [54, 4, 1, "_CPPv4N17TextureFormatDesc1gE", "TextureFormatDesc::g"], [54, 6, 1, "_CPPv4NK17TextureFormatDesc8hasAlphaEv", "TextureFormatDesc::hasAlpha"], [54, 4, 1, "_CPPv4N17TextureFormatDesc13isBlockFormatE", "TextureFormatDesc::isBlockFormat"], [54, 6, 1, "_CPPv4NK17TextureFormatDesc7isDepthEv", "TextureFormatDesc::isDepth"], [54, 4, 1, "_CPPv4N17TextureFormatDesc16mainChannelsTypeE", "TextureFormatDesc::mainChannelsType"], [54, 4, 1, "_CPPv4N17TextureFormatDesc1rE", "TextureFormatDesc::r"], [54, 6, 1, "_CPPv4NK17TextureFormatDesc17rgbaChannelsCountEv", "TextureFormatDesc::rgbaChannelsCount"], [54, 4, 1, "_CPPv4N17TextureFormatDesc7stencilE", "TextureFormatDesc::stencil"], [54, 4, 1, "_CPPv4N17TextureFormatDesc18stencilChannelTypeE", "TextureFormatDesc::stencilChannelType"], [54, 3, 1, "_CPPv411TextureInfo", "TextureInfo"], [54, 4, 1, "_CPPv4N11TextureInfo1aE", "TextureInfo::a"], [54, 4, 1, "_CPPv4N11TextureInfo4cflgE", "TextureInfo::cflg"], [54, 4, 1, "_CPPv4N11TextureInfo1dE", "TextureInfo::d"], [54, 4, 1, "_CPPv4N11TextureInfo1hE", "TextureInfo::h"], [54, 4, 1, "_CPPv4N11TextureInfo9mipLevelsE", "TextureInfo::mipLevels"], [54, 4, 1, "_CPPv4N11TextureInfo7resTypeE", "TextureInfo::resType"], [54, 4, 1, "_CPPv4N11TextureInfo1wE", "TextureInfo::w"], [34, 3, 1, "_CPPv426TextureResourceDescription", "TextureResourceDescription"], [34, 4, 1, "_CPPv4N26TextureResourceDescription6heightE", "TextureResourceDescription::height"], [34, 4, 1, "_CPPv4N26TextureResourceDescription5widthE", "TextureResourceDescription::width"], [48, 3, 1, "_CPPv417TextureTilingInfo", "TextureTilingInfo"], [48, 4, 1, "_CPPv4N17TextureTilingInfo20firstPackedTileIndexE", "TextureTilingInfo::firstPackedTileIndex"], [48, 4, 1, "_CPPv4N17TextureTilingInfo13numPackedMipsE", "TextureTilingInfo::numPackedMips"], [48, 4, 1, "_CPPv4N17TextureTilingInfo27numTilesNeededForPackedMipsE", "TextureTilingInfo::numTilesNeededForPackedMips"], [48, 4, 1, "_CPPv4N17TextureTilingInfo15numUnpackedMipsE", "TextureTilingInfo::numUnpackedMips"], [48, 4, 1, "_CPPv4N17TextureTilingInfo23subresourceDepthInTilesE", "TextureTilingInfo::subresourceDepthInTiles"], [48, 4, 1, "_CPPv4N17TextureTilingInfo24subresourceHeightInTilesE", "TextureTilingInfo::subresourceHeightInTiles"], [48, 4, 1, "_CPPv4N17TextureTilingInfo25subresourceStartTileIndexE", "TextureTilingInfo::subresourceStartTileIndex"], [48, 4, 1, "_CPPv4N17TextureTilingInfo23subresourceWidthInTilesE", "TextureTilingInfo::subresourceWidthInTiles"], [48, 4, 1, "_CPPv4N17TextureTilingInfo17tileDepthInPixelsE", "TextureTilingInfo::tileDepthInPixels"], [48, 4, 1, "_CPPv4N17TextureTilingInfo18tileHeightInPixelsE", "TextureTilingInfo::tileHeightInPixels"], [48, 4, 1, "_CPPv4N17TextureTilingInfo14tileMemorySizeE", "TextureTilingInfo::tileMemorySize"], [48, 4, 1, "_CPPv4N17TextureTilingInfo17tileWidthInPixelsE", "TextureTilingInfo::tileWidthInPixels"], [48, 4, 1, "_CPPv4N17TextureTilingInfo18totalNumberOfTilesE", "TextureTilingInfo::totalNumberOfTiles"], [48, 3, 1, "_CPPv411TileMapping", "TileMapping"], [48, 4, 1, "_CPPv4N11TileMapping13heapTileIndexE", "TileMapping::heapTileIndex"], [48, 4, 1, "_CPPv4N11TileMapping12heapTileSpanE", "TileMapping::heapTileSpan"], [48, 4, 1, "_CPPv4N11TileMapping14texSubresourceE", "TileMapping::texSubresource"], [48, 4, 1, "_CPPv4N11TileMapping4texXE", "TileMapping::texX"], [48, 4, 1, "_CPPv4N11TileMapping4texYE", "TileMapping::texY"], [48, 4, 1, "_CPPv4N11TileMapping4texZE", "TileMapping::texZ"], [52, 5, 1, "_CPPv45VDECL", "VDECL"], [52, 5, 1, "_CPPv45VPROG", "VPROG"], [52, 5, 1, "_CPPv47VPRTYPE", "VPRTYPE"], [52, 5, 1, "_CPPv47VSDTYPE", "VSDTYPE"], [52, 1, 1, "_CPPv427VariableRateShadingCombiner", "VariableRateShadingCombiner"], [52, 2, 1, "_CPPv4N27VariableRateShadingCombiner7VRS_MAXE", "VariableRateShadingCombiner::VRS_MAX"], [52, 2, 1, "_CPPv4N27VariableRateShadingCombiner7VRS_MINE", "VariableRateShadingCombiner::VRS_MIN"], [52, 2, 1, "_CPPv4N27VariableRateShadingCombiner12VRS_OVERRIDEE", "VariableRateShadingCombiner::VRS_OVERRIDE"], [52, 2, 1, "_CPPv4N27VariableRateShadingCombiner15VRS_PASSTHROUGHE", "VariableRateShadingCombiner::VRS_PASSTHROUGH"], [52, 2, 1, "_CPPv4N27VariableRateShadingCombiner7VRS_SUME", "VariableRateShadingCombiner::VRS_SUM"], [50, 5, 1, "_CPPv47Vbuffer", "Vbuffer"], [54, 5, 1, "_CPPv410VolTexture", "VolTexture"], [34, 3, 1, "_CPPv429VolTextureResourceDescription", "VolTextureResourceDescription"], [34, 4, 1, "_CPPv4N29VolTextureResourceDescription5depthE", "VolTextureResourceDescription::depth"], [52, 1, 1, "_CPPv49XessState", "XessState"], [52, 2, 1, "_CPPv4N9XessState8DISABLEDE", "XessState::DISABLED"], [52, 2, 1, "_CPPv4N9XessState18INIT_ERROR_UNKNOWNE", "XessState::INIT_ERROR_UNKNOWN"], [52, 2, 1, "_CPPv4N9XessState5READYE", "XessState::READY"], [52, 2, 1, "_CPPv4N9XessState9SUPPORTEDE", "XessState::SUPPORTED"], [52, 2, 1, "_CPPv4N9XessState18UNSUPPORTED_DEVICEE", "XessState::UNSUPPORTED_DEVICE"], [52, 2, 1, "_CPPv4N9XessState18UNSUPPORTED_DRIVERE", "XessState::UNSUPPORTED_DRIVER"], [66, 6, 1, "_CPPv419acquire_managed_buf8D3DRESID", "acquire_managed_buf"], [66, 7, 1, "_CPPv419acquire_managed_buf8D3DRESID", "acquire_managed_buf::id"], [66, 6, 1, "_CPPv419acquire_managed_res8D3DRESID", "acquire_managed_res"], [66, 7, 1, "_CPPv419acquire_managed_res8D3DRESID", "acquire_managed_res::id"], [66, 6, 1, "_CPPv419acquire_managed_tex8D3DRESID", "acquire_managed_tex"], [66, 7, 1, "_CPPv419acquire_managed_tex8D3DRESID", "acquire_managed_tex::id"], [34, 6, 1, "_CPPv415activate_bufferP7Sbuffer24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "activate_buffer"], [34, 7, 1, "_CPPv415activate_bufferP7Sbuffer24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "activate_buffer::action"], [34, 7, 1, "_CPPv415activate_bufferP7Sbuffer24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "activate_buffer::buf"], [34, 7, 1, "_CPPv415activate_bufferP7Sbuffer24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "activate_buffer::gpu_pipeline"], [34, 7, 1, "_CPPv415activate_bufferP7Sbuffer24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "activate_buffer::value"], [34, 6, 1, "_CPPv416activate_textureP11BaseTexture24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "activate_texture"], [34, 7, 1, "_CPPv416activate_textureP11BaseTexture24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "activate_texture::action"], [34, 7, 1, "_CPPv416activate_textureP11BaseTexture24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "activate_texture::gpu_pipeline"], [34, 7, 1, "_CPPv416activate_textureP11BaseTexture24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "activate_texture::tex"], [34, 7, 1, "_CPPv416activate_textureP11BaseTexture24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "activate_texture::value"], [68, 6, 1, "_CPPv424add_anisotropy_exception9TEXTUREID", "add_anisotropy_exception"], [68, 7, 1, "_CPPv424add_anisotropy_exception9TEXTUREID", "add_anisotropy_exception::id"], [68, 6, 1, "_CPPv425add_managed_array_texturePKcN3dag9ConstSpanIPKcEE", "add_managed_array_texture"], [68, 7, 1, "_CPPv425add_managed_array_texturePKcN3dag9ConstSpanIPKcEE", "add_managed_array_texture::name"], [68, 7, 1, "_CPPv425add_managed_array_texturePKcN3dag9ConstSpanIPKcEE", "add_managed_array_texture::tex_slice_nm"], [68, 6, 1, "_CPPv419add_managed_texturePKcP14TextureFactory", "add_managed_texture"], [68, 7, 1, "_CPPv419add_managed_texturePKcP14TextureFactory", "add_managed_texture::factory"], [68, 7, 1, "_CPPv419add_managed_texturePKcP14TextureFactory", "add_managed_texture::name"], [39, 6, 1, "_CPPv429allow_render_pass_target_loadv", "allow_render_pass_target_load"], [54, 6, 1, "_CPPv419apply_gen_tex_propsP11BaseTextureRK15TextureMetaDatab", "apply_gen_tex_props"], [54, 7, 1, "_CPPv419apply_gen_tex_propsP11BaseTextureRK15TextureMetaDatab", "apply_gen_tex_props::force_addr_from_tmd"], [54, 7, 1, "_CPPv419apply_gen_tex_propsP11BaseTextureRK15TextureMetaDatab", "apply_gen_tex_props::t"], [54, 7, 1, "_CPPv419apply_gen_tex_propsP11BaseTextureRK15TextureMetaDatab", "apply_gen_tex_props::tmd"], [54, 6, 1, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t", "auto_mip_levels_count"], [54, 6, 1, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t8uint32_t", "auto_mip_levels_count"], [54, 6, 1, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t8uint32_t8uint32_t", "auto_mip_levels_count"], [54, 7, 1, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t8uint32_t8uint32_t", "auto_mip_levels_count::d"], [54, 7, 1, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t8uint32_t", "auto_mip_levels_count::h"], [54, 7, 1, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t8uint32_t8uint32_t", "auto_mip_levels_count::h"], [54, 7, 1, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t", "auto_mip_levels_count::min_size"], [54, 7, 1, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t8uint32_t", "auto_mip_levels_count::min_size"], [54, 7, 1, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t8uint32_t8uint32_t", "auto_mip_levels_count::min_size"], [54, 7, 1, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t", "auto_mip_levels_count::w"], [54, 7, 1, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t8uint32_t", "auto_mip_levels_count::w"], [54, 7, 1, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t8uint32_t8uint32_t", "auto_mip_levels_count::w"], [39, 6, 1, "_CPPv417begin_render_passP10RenderPassK14RenderPassAreaPK16RenderPassTarget", "begin_render_pass"], [39, 7, 1, "_CPPv417begin_render_passP10RenderPassK14RenderPassAreaPK16RenderPassTarget", "begin_render_pass::area"], [39, 7, 1, "_CPPv417begin_render_passP10RenderPassK14RenderPassAreaPK16RenderPassTarget", "begin_render_pass::rp"], [39, 7, 1, "_CPPv417begin_render_passP10RenderPassK14RenderPassAreaPK16RenderPassTarget", "begin_render_pass::targets"], [68, 6, 1, "_CPPv422change_managed_texture9TEXTUREIDP11BaseTextureP14TextureFactory", "change_managed_texture"], [68, 7, 1, "_CPPv422change_managed_texture9TEXTUREIDP11BaseTextureP14TextureFactory", "change_managed_texture::factory"], [68, 7, 1, "_CPPv422change_managed_texture9TEXTUREIDP11BaseTextureP14TextureFactory", "change_managed_texture::id"], [68, 7, 1, "_CPPv422change_managed_texture9TEXTUREIDP11BaseTextureP14TextureFactory", "change_managed_texture::new_texture"], [54, 6, 1, "_CPPv421channel_bits_to_float8uint32_t12ChannelDTypeRK24TextureChannelFormatDesc", "channel_bits_to_float"], [54, 7, 1, "_CPPv421channel_bits_to_float8uint32_t12ChannelDTypeRK24TextureChannelFormatDesc", "channel_bits_to_float::bits"], [54, 7, 1, "_CPPv421channel_bits_to_float8uint32_t12ChannelDTypeRK24TextureChannelFormatDesc", "channel_bits_to_float::channel"], [54, 7, 1, "_CPPv421channel_bits_to_float8uint32_t12ChannelDTypeRK24TextureChannelFormatDesc", "channel_bits_to_float::type"], [68, 6, 1, "_CPPv433check_all_managed_textures_loadedN3dag9ConstSpanI9TEXTUREIDEEbb", "check_all_managed_textures_loaded"], [68, 7, 1, "_CPPv433check_all_managed_textures_loadedN3dag9ConstSpanI9TEXTUREIDEEbb", "check_all_managed_textures_loaded::fq_loaded"], [68, 7, 1, "_CPPv433check_all_managed_textures_loadedN3dag9ConstSpanI9TEXTUREIDEEbb", "check_all_managed_textures_loaded::id"], [68, 7, 1, "_CPPv433check_all_managed_textures_loadedN3dag9ConstSpanI9TEXTUREIDEEbb", "check_all_managed_textures_loaded::ignore_unref_tex"], [68, 6, 1, "_CPPv428check_managed_texture_loaded9TEXTUREIDb", "check_managed_texture_loaded"], [68, 7, 1, "_CPPv428check_managed_texture_loaded9TEXTUREIDb", "check_managed_texture_loaded::fq_loaded"], [68, 7, 1, "_CPPv428check_managed_texture_loaded9TEXTUREIDb", "check_managed_texture_loaded::id"], [54, 6, 1, "_CPPv418convert_image_linePKviiibPviibb", "convert_image_line"], [54, 7, 1, "_CPPv418convert_image_linePKviiibPviibb", "convert_image_line::in_bits_per_channel"], [54, 7, 1, "_CPPv418convert_image_linePKviiibPviibb", "convert_image_line::in_channels"], [54, 7, 1, "_CPPv418convert_image_linePKviiibPviibb", "convert_image_line::in_float"], [54, 7, 1, "_CPPv418convert_image_linePKviiibPviibb", "convert_image_line::input"], [54, 7, 1, "_CPPv418convert_image_linePKviiibPviibb", "convert_image_line::out_bits_per_channel"], [54, 7, 1, "_CPPv418convert_image_linePKviiibPviibb", "convert_image_line::out_channels"], [54, 7, 1, "_CPPv418convert_image_linePKviiibPviibb", "convert_image_line::out_float"], [54, 7, 1, "_CPPv418convert_image_linePKviiibPviibb", "convert_image_line::output"], [54, 7, 1, "_CPPv418convert_image_linePKviiibPviibb", "convert_image_line::swap_rb"], [54, 7, 1, "_CPPv418convert_image_linePKviiibPviibb", "convert_image_line::width"], [39, 6, 1, "_CPPv418create_render_passRK14RenderPassDesc", "create_render_pass"], [39, 7, 1, "_CPPv418create_render_passRK14RenderPassDesc", "create_render_pass::rp_desc"], [34, 6, 1, "_CPPv420create_resource_heapP17ResourceHeapGroup6size_t23ResourceHeapCreateFlags", "create_resource_heap"], [34, 7, 1, "_CPPv420create_resource_heapP17ResourceHeapGroup6size_t23ResourceHeapCreateFlags", "create_resource_heap::flags"], [34, 7, 1, "_CPPv420create_resource_heapP17ResourceHeapGroup6size_t23ResourceHeapCreateFlags", "create_resource_heap::heap_group"], [34, 7, 1, "_CPPv420create_resource_heapP17ResourceHeapGroup6size_t23ResourceHeapCreateFlags", "create_resource_heap::size"], [28, 5, 1, "_CPPv43d3d", "d3d"], [29, 5, 1, "_CPPv43d3d", "d3d"], [30, 5, 1, "_CPPv43d3d", "d3d"], [31, 5, 1, "_CPPv43d3d", "d3d"], [32, 5, 1, "_CPPv43d3d", "d3d"], [33, 5, 1, "_CPPv43d3d", "d3d"], [34, 5, 1, "_CPPv43d3d", "d3d"], [35, 5, 1, "_CPPv43d3d", "d3d"], [36, 5, 1, "_CPPv43d3d", "d3d"], [37, 5, 1, "_CPPv43d3d", "d3d"], [38, 5, 1, "_CPPv43d3d", "d3d"], [40, 5, 1, "_CPPv43d3d", "d3d"], [41, 5, 1, "_CPPv43d3d", "d3d"], [42, 5, 1, "_CPPv43d3d", "d3d"], [44, 5, 1, "_CPPv43d3d", "d3d"], [45, 5, 1, "_CPPv43d3d", "d3d"], [46, 5, 1, "_CPPv43d3d", "d3d"], [47, 5, 1, "_CPPv43d3d", "d3d"], [48, 5, 1, "_CPPv43d3d", "d3d"], [49, 5, 1, "_CPPv43d3d", "d3d"], [50, 5, 1, "_CPPv43d3d", "d3d"], [51, 5, 1, "_CPPv43d3d", "d3d"], [53, 5, 1, "_CPPv43d3d", "d3d"], [54, 5, 1, "_CPPv43d3d", "d3d"], [53, 1, 1, "_CPPv4N3d3dUt2_35E", "d3d::[anonymous]"], [53, 2, 1, "_CPPv4N3d3dUt2_3517USAGE_AUTOGENMIPSE", "d3d::[anonymous]::USAGE_AUTOGENMIPS"], [53, 2, 1, "_CPPv4N3d3dUt2_3511USAGE_BLENDE", "d3d::[anonymous]::USAGE_BLEND"], [53, 2, 1, "_CPPv4N3d3dUt2_3511USAGE_DEPTHE", "d3d::[anonymous]::USAGE_DEPTH"], [53, 2, 1, "_CPPv4N3d3dUt2_3512USAGE_FILTERE", "d3d::[anonymous]::USAGE_FILTER"], [53, 2, 1, "_CPPv4N3d3dUt2_3518USAGE_PIXREADWRITEE", "d3d::[anonymous]::USAGE_PIXREADWRITE"], [53, 2, 1, "_CPPv4N3d3dUt2_3513USAGE_RTARGETE", "d3d::[anonymous]::USAGE_RTARGET"], [53, 2, 1, "_CPPv4N3d3dUt2_3515USAGE_SAMPLECMPE", "d3d::[anonymous]::USAGE_SAMPLECMP"], [53, 2, 1, "_CPPv4N3d3dUt2_3514USAGE_SRGBREADE", "d3d::[anonymous]::USAGE_SRGBREAD"], [53, 2, 1, "_CPPv4N3d3dUt2_3515USAGE_SRGBWRITEE", "d3d::[anonymous]::USAGE_SRGBWRITE"], [53, 2, 1, "_CPPv4N3d3dUt2_3513USAGE_TEXTUREE", "d3d::[anonymous]::USAGE_TEXTURE"], [53, 2, 1, "_CPPv4N3d3dUt2_3511USAGE_TILEDE", "d3d::[anonymous]::USAGE_TILED"], [53, 2, 1, "_CPPv4N3d3dUt2_3515USAGE_UNORDEREDE", "d3d::[anonymous]::USAGE_UNORDERED"], [53, 2, 1, "_CPPv4N3d3dUt2_3520USAGE_UNORDERED_LOADE", "d3d::[anonymous]::USAGE_UNORDERED_LOAD"], [53, 2, 1, "_CPPv4N3d3dUt2_3519USAGE_VERTEXTEXTUREE", "d3d::[anonymous]::USAGE_VERTEXTEXTURE"], [53, 1, 1, "_CPPv4N3d3dUt2_36E", "d3d::[anonymous]"], [53, 2, 1, "_CPPv4N3d3dUt2_3613CAPFMT_R5G6B5E", "d3d::[anonymous]::CAPFMT_R5G6B5"], [53, 2, 1, "_CPPv4N3d3dUt2_3613CAPFMT_R8G8B8E", "d3d::[anonymous]::CAPFMT_R8G8B8"], [53, 2, 1, "_CPPv4N3d3dUt2_3615CAPFMT_X1R5G5B5E", "d3d::[anonymous]::CAPFMT_X1R5G5B5"], [53, 2, 1, "_CPPv4N3d3dUt2_3615CAPFMT_X8R8G8B8E", "d3d::[anonymous]::CAPFMT_X8R8G8B8"], [45, 1, 1, "_CPPv4N3d3d11AddressModeE", "d3d::AddressMode"], [45, 2, 1, "_CPPv4N3d3d11AddressMode6BorderE", "d3d::AddressMode::Border"], [45, 2, 1, "_CPPv4N3d3d11AddressMode5ClampE", "d3d::AddressMode::Clamp"], [45, 2, 1, "_CPPv4N3d3d11AddressMode6MirrorE", "d3d::AddressMode::Mirror"], [45, 2, 1, "_CPPv4N3d3d11AddressMode10MirrorOnceE", "d3d::AddressMode::MirrorOnce"], [45, 2, 1, "_CPPv4N3d3d11AddressMode4WrapE", "d3d::AddressMode::Wrap"], [45, 3, 1, "_CPPv4N3d3d11BorderColorE", "d3d::BorderColor"], [45, 6, 1, "_CPPv4N3d3d11BorderColor11BorderColorE5Color", "d3d::BorderColor::BorderColor"], [45, 7, 1, "_CPPv4N3d3d11BorderColor11BorderColorE5Color", "d3d::BorderColor::BorderColor::color"], [45, 1, 1, "_CPPv4N3d3d11BorderColor5ColorE", "d3d::BorderColor::Color"], [45, 2, 1, "_CPPv4N3d3d11BorderColor5Color11OpaqueBlackE", "d3d::BorderColor::Color::OpaqueBlack"], [45, 2, 1, "_CPPv4N3d3d11BorderColor5Color11OpaqueWhiteE", "d3d::BorderColor::Color::OpaqueWhite"], [45, 2, 1, "_CPPv4N3d3d11BorderColor5Color16TransparentBlackE", "d3d::BorderColor::Color::TransparentBlack"], [45, 5, 1, "_CPPv4N3d3d11BorderColor11UnderlyingTE", "d3d::BorderColor::UnderlyingT"], [45, 4, 1, "_CPPv4N3d3d11BorderColor5colorE", "d3d::BorderColor::color"], [45, 6, 1, "_CPPv4NK3d3d11BorderColorcv8E3DCOLOREv", "d3d::BorderColor::operator E3DCOLOR"], [45, 6, 1, "_CPPv4NK3d3d11BorderColorcv11UnderlyingTEv", "d3d::BorderColor::operator UnderlyingT"], [38, 5, 1, "_CPPv4N3d3d10EventQueryE", "d3d::EventQuery"], [45, 1, 1, "_CPPv4N3d3d10FilterModeE", "d3d::FilterMode"], [45, 2, 1, "_CPPv4N3d3d10FilterMode4BestE", "d3d::FilterMode::Best"], [45, 2, 1, "_CPPv4N3d3d10FilterMode7CompareE", "d3d::FilterMode::Compare"], [45, 2, 1, "_CPPv4N3d3d10FilterMode7DefaultE", "d3d::FilterMode::Default"], [45, 2, 1, "_CPPv4N3d3d10FilterMode8DisabledE", "d3d::FilterMode::Disabled"], [45, 2, 1, "_CPPv4N3d3d10FilterMode6LinearE", "d3d::FilterMode::Linear"], [45, 2, 1, "_CPPv4N3d3d10FilterMode5PointE", "d3d::FilterMode::Point"], [36, 3, 1, "_CPPv4N3d3d16GPUWorkloadSplitE", "d3d::GPUWorkloadSplit"], [36, 6, 1, "_CPPv4N3d3d16GPUWorkloadSplit16GPUWorkloadSplitEbbPKc", "d3d::GPUWorkloadSplit::GPUWorkloadSplit"], [36, 7, 1, "_CPPv4N3d3d16GPUWorkloadSplit16GPUWorkloadSplitEbbPKc", "d3d::GPUWorkloadSplit::GPUWorkloadSplit::do_split"], [36, 7, 1, "_CPPv4N3d3d16GPUWorkloadSplit16GPUWorkloadSplitEbbPKc", "d3d::GPUWorkloadSplit::GPUWorkloadSplit::marker"], [36, 7, 1, "_CPPv4N3d3d16GPUWorkloadSplit16GPUWorkloadSplitEbbPKc", "d3d::GPUWorkloadSplit::GPUWorkloadSplit::split_at_end"], [36, 4, 1, "_CPPv4N3d3d16GPUWorkloadSplit14needSplitAtEndE", "d3d::GPUWorkloadSplit::needSplitAtEnd"], [36, 6, 1, "_CPPv4N3d3d16GPUWorkloadSplitD0Ev", "d3d::GPUWorkloadSplit::~GPUWorkloadSplit"], [36, 3, 1, "_CPPv4N3d3d11GpuAutoLockE", "d3d::GpuAutoLock"], [36, 6, 1, "_CPPv4N3d3d11GpuAutoLock11GpuAutoLockEv", "d3d::GpuAutoLock::GpuAutoLock"], [36, 6, 1, "_CPPv4N3d3d11GpuAutoLockD0Ev", "d3d::GpuAutoLock::~GpuAutoLock"], [36, 3, 1, "_CPPv4N3d3d15LoadingAutoLockE", "d3d::LoadingAutoLock"], [36, 6, 1, "_CPPv4N3d3d15LoadingAutoLock15LoadingAutoLockEv", "d3d::LoadingAutoLock::LoadingAutoLock"], [36, 6, 1, "_CPPv4N3d3d15LoadingAutoLockD0Ev", "d3d::LoadingAutoLock::~LoadingAutoLock"], [45, 1, 1, "_CPPv4N3d3d10MipMapModeE", "d3d::MipMapMode"], [45, 2, 1, "_CPPv4N3d3d10MipMapMode7DefaultE", "d3d::MipMapMode::Default"], [45, 2, 1, "_CPPv4N3d3d10MipMapMode8DisabledE", "d3d::MipMapMode::Disabled"], [45, 2, 1, "_CPPv4N3d3d10MipMapMode6LinearE", "d3d::MipMapMode::Linear"], [45, 2, 1, "_CPPv4N3d3d10MipMapMode5PointE", "d3d::MipMapMode::Point"], [53, 4, 1, "_CPPv4N3d3d21RENDER_TO_WHOLE_ARRAYE", "d3d::RENDER_TO_WHOLE_ARRAY"], [45, 3, 1, "_CPPv4N3d3d11SamplerInfoE", "d3d::SamplerInfo"], [45, 4, 1, "_CPPv4N3d3d11SamplerInfo14address_mode_uE", "d3d::SamplerInfo::address_mode_u"], [45, 4, 1, "_CPPv4N3d3d11SamplerInfo14address_mode_vE", "d3d::SamplerInfo::address_mode_v"], [45, 4, 1, "_CPPv4N3d3d11SamplerInfo14address_mode_wE", "d3d::SamplerInfo::address_mode_w"], [45, 4, 1, "_CPPv4N3d3d11SamplerInfo15anisotropic_maxE", "d3d::SamplerInfo::anisotropic_max"], [45, 4, 1, "_CPPv4N3d3d11SamplerInfo12border_colorE", "d3d::SamplerInfo::border_color"], [45, 4, 1, "_CPPv4N3d3d11SamplerInfo11filter_modeE", "d3d::SamplerInfo::filter_mode"], [45, 4, 1, "_CPPv4N3d3d11SamplerInfo12mip_map_biasE", "d3d::SamplerInfo::mip_map_bias"], [45, 4, 1, "_CPPv4N3d3d11SamplerInfo12mip_map_modeE", "d3d::SamplerInfo::mip_map_mode"], [45, 6, 1, "_CPPv4NK3d3d11SamplerInfoneERK11SamplerInfo", "d3d::SamplerInfo::operator!="], [45, 7, 1, "_CPPv4NK3d3d11SamplerInfoneERK11SamplerInfo", "d3d::SamplerInfo::operator!=::rhs"], [45, 6, 1, "_CPPv4NK3d3d11SamplerInfoltERK11SamplerInfo", "d3d::SamplerInfo::operator<"], [45, 7, 1, "_CPPv4NK3d3d11SamplerInfoltERK11SamplerInfo", "d3d::SamplerInfo::operator<::rhs"], [45, 6, 1, "_CPPv4NK3d3d11SamplerInfoeqERK11SamplerInfo", "d3d::SamplerInfo::operator=="], [45, 7, 1, "_CPPv4NK3d3d11SamplerInfoeqERK11SamplerInfo", "d3d::SamplerInfo::operator==::rhs"], [34, 6, 1, "_CPPv4N3d3d15activate_bufferEP7Sbuffer24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "d3d::activate_buffer"], [34, 7, 1, "_CPPv4N3d3d15activate_bufferEP7Sbuffer24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "d3d::activate_buffer::action"], [34, 7, 1, "_CPPv4N3d3d15activate_bufferEP7Sbuffer24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "d3d::activate_buffer::buf"], [34, 7, 1, "_CPPv4N3d3d15activate_bufferEP7Sbuffer24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "d3d::activate_buffer::gpu_pipeline"], [34, 7, 1, "_CPPv4N3d3d15activate_bufferEP7Sbuffer24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "d3d::activate_buffer::value"], [34, 6, 1, "_CPPv4N3d3d16activate_textureEP11BaseTexture24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "d3d::activate_texture"], [34, 7, 1, "_CPPv4N3d3d16activate_textureEP11BaseTexture24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "d3d::activate_texture::action"], [34, 7, 1, "_CPPv4N3d3d16activate_textureEP11BaseTexture24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "d3d::activate_texture::gpu_pipeline"], [34, 7, 1, "_CPPv4N3d3d16activate_textureEP11BaseTexture24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "d3d::activate_texture::tex"], [34, 7, 1, "_CPPv4N3d3d16activate_textureEP11BaseTexture24ResourceActivationActionRK18ResourceClearValue11GpuPipeline", "d3d::activate_texture::value"], [54, 6, 1, "_CPPv4N3d3d15alias_array_texEP11BaseTextureiiiiiPKc", "d3d::alias_array_tex"], [54, 7, 1, "_CPPv4N3d3d15alias_array_texEP11BaseTextureiiiiiPKc", "d3d::alias_array_tex::baseTexture"], [54, 7, 1, "_CPPv4N3d3d15alias_array_texEP11BaseTextureiiiiiPKc", "d3d::alias_array_tex::d"], [54, 7, 1, "_CPPv4N3d3d15alias_array_texEP11BaseTextureiiiiiPKc", "d3d::alias_array_tex::flg"], [54, 7, 1, "_CPPv4N3d3d15alias_array_texEP11BaseTextureiiiiiPKc", "d3d::alias_array_tex::h"], [54, 7, 1, "_CPPv4N3d3d15alias_array_texEP11BaseTextureiiiiiPKc", "d3d::alias_array_tex::levels"], [54, 7, 1, "_CPPv4N3d3d15alias_array_texEP11BaseTextureiiiiiPKc", "d3d::alias_array_tex::stat_name"], [54, 7, 1, "_CPPv4N3d3d15alias_array_texEP11BaseTextureiiiiiPKc", "d3d::alias_array_tex::w"], [54, 6, 1, "_CPPv4N3d3d20alias_cube_array_texEP11BaseTextureiiiiPKc", "d3d::alias_cube_array_tex"], [54, 7, 1, "_CPPv4N3d3d20alias_cube_array_texEP11BaseTextureiiiiPKc", "d3d::alias_cube_array_tex::baseTexture"], [54, 7, 1, "_CPPv4N3d3d20alias_cube_array_texEP11BaseTextureiiiiPKc", "d3d::alias_cube_array_tex::d"], [54, 7, 1, "_CPPv4N3d3d20alias_cube_array_texEP11BaseTextureiiiiPKc", "d3d::alias_cube_array_tex::flg"], [54, 7, 1, "_CPPv4N3d3d20alias_cube_array_texEP11BaseTextureiiiiPKc", "d3d::alias_cube_array_tex::levels"], [54, 7, 1, "_CPPv4N3d3d20alias_cube_array_texEP11BaseTextureiiiiPKc", "d3d::alias_cube_array_tex::side"], [54, 7, 1, "_CPPv4N3d3d20alias_cube_array_texEP11BaseTextureiiiiPKc", "d3d::alias_cube_array_tex::stat_name"], [54, 6, 1, "_CPPv4N3d3d13alias_cubetexEP11BaseTextureiiiPKc", "d3d::alias_cubetex"], [54, 7, 1, "_CPPv4N3d3d13alias_cubetexEP11BaseTextureiiiPKc", "d3d::alias_cubetex::baseTexture"], [54, 7, 1, "_CPPv4N3d3d13alias_cubetexEP11BaseTextureiiiPKc", "d3d::alias_cubetex::flg"], [54, 7, 1, "_CPPv4N3d3d13alias_cubetexEP11BaseTextureiiiPKc", "d3d::alias_cubetex::levels"], [54, 7, 1, "_CPPv4N3d3d13alias_cubetexEP11BaseTextureiiiPKc", "d3d::alias_cubetex::size"], [54, 7, 1, "_CPPv4N3d3d13alias_cubetexEP11BaseTextureiiiPKc", "d3d::alias_cubetex::stat_name"], [54, 6, 1, "_CPPv4N3d3d9alias_texEP11BaseTextureP10TexImage32iiiiPKc", "d3d::alias_tex"], [54, 7, 1, "_CPPv4N3d3d9alias_texEP11BaseTextureP10TexImage32iiiiPKc", "d3d::alias_tex::baseTexture"], [54, 7, 1, "_CPPv4N3d3d9alias_texEP11BaseTextureP10TexImage32iiiiPKc", "d3d::alias_tex::flg"], [54, 7, 1, "_CPPv4N3d3d9alias_texEP11BaseTextureP10TexImage32iiiiPKc", "d3d::alias_tex::h"], [54, 7, 1, "_CPPv4N3d3d9alias_texEP11BaseTextureP10TexImage32iiiiPKc", "d3d::alias_tex::img"], [54, 7, 1, "_CPPv4N3d3d9alias_texEP11BaseTextureP10TexImage32iiiiPKc", "d3d::alias_tex::levels"], [54, 7, 1, "_CPPv4N3d3d9alias_texEP11BaseTextureP10TexImage32iiiiPKc", "d3d::alias_tex::stat_name"], [54, 7, 1, "_CPPv4N3d3d9alias_texEP11BaseTextureP10TexImage32iiiiPKc", "d3d::alias_tex::w"], [54, 6, 1, "_CPPv4N3d3d12alias_voltexEP11BaseTextureiiiiiPKc", "d3d::alias_voltex"], [54, 7, 1, "_CPPv4N3d3d12alias_voltexEP11BaseTextureiiiiiPKc", "d3d::alias_voltex::baseTexture"], [54, 7, 1, "_CPPv4N3d3d12alias_voltexEP11BaseTextureiiiiiPKc", "d3d::alias_voltex::d"], [54, 7, 1, "_CPPv4N3d3d12alias_voltexEP11BaseTextureiiiiiPKc", "d3d::alias_voltex::flg"], [54, 7, 1, "_CPPv4N3d3d12alias_voltexEP11BaseTextureiiiiiPKc", "d3d::alias_voltex::h"], [54, 7, 1, "_CPPv4N3d3d12alias_voltexEP11BaseTextureiiiiiPKc", "d3d::alias_voltex::levels"], [54, 7, 1, "_CPPv4N3d3d12alias_voltexEP11BaseTextureiiiiiPKc", "d3d::alias_voltex::stat_name"], [54, 7, 1, "_CPPv4N3d3d12alias_voltexEP11BaseTextureiiiiiPKc", "d3d::alias_voltex::w"], [54, 6, 1, "_CPPv4N3d3d14alloc_ddsx_texERKN4ddsx6HeaderEiiiPKci", "d3d::alloc_ddsx_tex"], [54, 7, 1, "_CPPv4N3d3d14alloc_ddsx_texERKN4ddsx6HeaderEiiiPKci", "d3d::alloc_ddsx_tex::flg"], [54, 7, 1, "_CPPv4N3d3d14alloc_ddsx_texERKN4ddsx6HeaderEiiiPKci", "d3d::alloc_ddsx_tex::hdr"], [54, 7, 1, "_CPPv4N3d3d14alloc_ddsx_texERKN4ddsx6HeaderEiiiPKci", "d3d::alloc_ddsx_tex::levels"], [54, 7, 1, "_CPPv4N3d3d14alloc_ddsx_texERKN4ddsx6HeaderEiiiPKci", "d3d::alloc_ddsx_tex::quality_id"], [54, 7, 1, "_CPPv4N3d3d14alloc_ddsx_texERKN4ddsx6HeaderEiiiPKci", "d3d::alloc_ddsx_tex::stat_name"], [54, 7, 1, "_CPPv4N3d3d14alloc_ddsx_texERKN4ddsx6HeaderEiiiPKci", "d3d::alloc_ddsx_tex::stub_tex_idx"], [28, 6, 1, "_CPPv4N3d3d32allocate_bindless_resource_rangeE8uint32_t8uint32_t", "d3d::allocate_bindless_resource_range"], [28, 7, 1, "_CPPv4N3d3d32allocate_bindless_resource_rangeE8uint32_t8uint32_t", "d3d::allocate_bindless_resource_range::count"], [28, 7, 1, "_CPPv4N3d3d32allocate_bindless_resource_rangeE8uint32_t8uint32_t", "d3d::allocate_bindless_resource_range::resource_type"], [42, 6, 1, "_CPPv4N3d3d30allocate_update_buffer_for_texEP11BaseTextureii", "d3d::allocate_update_buffer_for_tex"], [42, 7, 1, "_CPPv4N3d3d30allocate_update_buffer_for_texEP11BaseTextureii", "d3d::allocate_update_buffer_for_tex::dest_mip"], [42, 7, 1, "_CPPv4N3d3d30allocate_update_buffer_for_texEP11BaseTextureii", "d3d::allocate_update_buffer_for_tex::dest_slice"], [42, 7, 1, "_CPPv4N3d3d30allocate_update_buffer_for_texEP11BaseTextureii", "d3d::allocate_update_buffer_for_tex::dest_tex"], [42, 6, 1, "_CPPv4N3d3d37allocate_update_buffer_for_tex_regionEP11BaseTexturejjjjjjjj", "d3d::allocate_update_buffer_for_tex_region"], [42, 7, 1, "_CPPv4N3d3d37allocate_update_buffer_for_tex_regionEP11BaseTexturejjjjjjjj", "d3d::allocate_update_buffer_for_tex_region::depth"], [42, 7, 1, "_CPPv4N3d3d37allocate_update_buffer_for_tex_regionEP11BaseTexturejjjjjjjj", "d3d::allocate_update_buffer_for_tex_region::dest_base_texture"], [42, 7, 1, "_CPPv4N3d3d37allocate_update_buffer_for_tex_regionEP11BaseTexturejjjjjjjj", "d3d::allocate_update_buffer_for_tex_region::dest_mip"], [42, 7, 1, "_CPPv4N3d3d37allocate_update_buffer_for_tex_regionEP11BaseTexturejjjjjjjj", "d3d::allocate_update_buffer_for_tex_region::dest_slice"], [42, 7, 1, "_CPPv4N3d3d37allocate_update_buffer_for_tex_regionEP11BaseTexturejjjjjjjj", "d3d::allocate_update_buffer_for_tex_region::height"], [42, 7, 1, "_CPPv4N3d3d37allocate_update_buffer_for_tex_regionEP11BaseTexturejjjjjjjj", "d3d::allocate_update_buffer_for_tex_region::offset_x"], [42, 7, 1, "_CPPv4N3d3d37allocate_update_buffer_for_tex_regionEP11BaseTexturejjjjjjjj", "d3d::allocate_update_buffer_for_tex_region::offset_y"], [42, 7, 1, "_CPPv4N3d3d37allocate_update_buffer_for_tex_regionEP11BaseTexturejjjjjjjj", "d3d::allocate_update_buffer_for_tex_region::offset_z"], [42, 7, 1, "_CPPv4N3d3d37allocate_update_buffer_for_tex_regionEP11BaseTexturejjjjjjjj", "d3d::allocate_update_buffer_for_tex_region::width"], [53, 6, 1, "_CPPv4N3d3d10beginEventEPKc", "d3d::beginEvent"], [53, 6, 1, "_CPPv4N3d3d24begin_conditional_renderEi", "d3d::begin_conditional_render"], [53, 7, 1, "_CPPv4N3d3d24begin_conditional_renderEi", "d3d::begin_conditional_render::id"], [53, 6, 1, "_CPPv4N3d3d12begin_surveyEi", "d3d::begin_survey"], [53, 7, 1, "_CPPv4N3d3d12begin_surveyEi", "d3d::begin_survey::id"], [29, 5, 1, "_CPPv4N3d3d7buffersE", "d3d::buffers"], [29, 4, 1, "_CPPv4N3d3d7buffers25BYTE_ADDRESS_ELEMENT_SIZEE", "d3d::buffers::BYTE_ADDRESS_ELEMENT_SIZE"], [29, 4, 1, "_CPPv4N3d3d7buffers21CBUFFER_REGISTER_SIZEE", "d3d::buffers::CBUFFER_REGISTER_SIZE"], [29, 1, 1, "_CPPv4N3d3d7buffers8IndirectE", "d3d::buffers::Indirect"], [29, 2, 1, "_CPPv4N3d3d7buffers8Indirect8DispatchE", "d3d::buffers::Indirect::Dispatch"], [29, 2, 1, "_CPPv4N3d3d7buffers8Indirect4DrawE", "d3d::buffers::Indirect::Draw"], [29, 2, 1, "_CPPv4N3d3d7buffers8Indirect11DrawIndexedE", "d3d::buffers::Indirect::DrawIndexed"], [29, 1, 1, "_CPPv4N3d3d7buffers4InitE", "d3d::buffers::Init"], [29, 2, 1, "_CPPv4N3d3d7buffers4Init2NoE", "d3d::buffers::Init::No"], [29, 2, 1, "_CPPv4N3d3d7buffers4Init4ZeroE", "d3d::buffers::Init::Zero"], [29, 6, 1, "_CPPv4I0EN3d3d7buffers18cb_array_reg_countE8uint32_t8uint32_t", "d3d::buffers::cb_array_reg_count"], [29, 8, 1, "_CPPv4I0EN3d3d7buffers18cb_array_reg_countE8uint32_t8uint32_t", "d3d::buffers::cb_array_reg_count::T"], [29, 7, 1, "_CPPv4I0EN3d3d7buffers18cb_array_reg_countE8uint32_t8uint32_t", "d3d::buffers::cb_array_reg_count::array_size"], [29, 6, 1, "_CPPv4I0EN3d3d7buffers19cb_struct_reg_countE8uint32_tv", "d3d::buffers::cb_struct_reg_count"], [29, 8, 1, "_CPPv4I0EN3d3d7buffers19cb_struct_reg_countE8uint32_tv", "d3d::buffers::cb_struct_reg_count::T"], [29, 6, 1, "_CPPv4N3d3d7buffers15create_indirectE8Indirect8uint32_tPKc", "d3d::buffers::create_indirect"], [29, 7, 1, "_CPPv4N3d3d7buffers15create_indirectE8Indirect8uint32_tPKc", "d3d::buffers::create_indirect::indirect_type"], [29, 7, 1, "_CPPv4N3d3d7buffers15create_indirectE8Indirect8uint32_tPKc", "d3d::buffers::create_indirect::name"], [29, 7, 1, "_CPPv4N3d3d7buffers15create_indirectE8Indirect8uint32_tPKc", "d3d::buffers::create_indirect::records_count"], [29, 6, 1, "_CPPv4N3d3d7buffers19create_one_frame_cbE8uint32_tPKc", "d3d::buffers::create_one_frame_cb"], [29, 7, 1, "_CPPv4N3d3d7buffers19create_one_frame_cbE8uint32_tPKc", "d3d::buffers::create_one_frame_cb::name"], [29, 7, 1, "_CPPv4N3d3d7buffers19create_one_frame_cbE8uint32_tPKc", "d3d::buffers::create_one_frame_cb::registers_count"], [29, 6, 1, "_CPPv4N3d3d7buffers32create_one_frame_sr_byte_addressE8uint32_tPKc", "d3d::buffers::create_one_frame_sr_byte_address"], [29, 7, 1, "_CPPv4N3d3d7buffers32create_one_frame_sr_byte_addressE8uint32_tPKc", "d3d::buffers::create_one_frame_sr_byte_address::name"], [29, 7, 1, "_CPPv4N3d3d7buffers32create_one_frame_sr_byte_addressE8uint32_tPKc", "d3d::buffers::create_one_frame_sr_byte_address::size_in_dwords"], [29, 6, 1, "_CPPv4N3d3d7buffers30create_one_frame_sr_structuredE8uint32_t8uint32_tPKc", "d3d::buffers::create_one_frame_sr_structured"], [29, 7, 1, "_CPPv4N3d3d7buffers30create_one_frame_sr_structuredE8uint32_t8uint32_tPKc", "d3d::buffers::create_one_frame_sr_structured::elements_count"], [29, 7, 1, "_CPPv4N3d3d7buffers30create_one_frame_sr_structuredE8uint32_t8uint32_tPKc", "d3d::buffers::create_one_frame_sr_structured::name"], [29, 7, 1, "_CPPv4N3d3d7buffers30create_one_frame_sr_structuredE8uint32_t8uint32_tPKc", "d3d::buffers::create_one_frame_sr_structured::structure_size"], [29, 6, 1, "_CPPv4N3d3d7buffers24create_one_frame_sr_tbufE8uint32_t8uint32_tPKc", "d3d::buffers::create_one_frame_sr_tbuf"], [29, 7, 1, "_CPPv4N3d3d7buffers24create_one_frame_sr_tbufE8uint32_t8uint32_tPKc", "d3d::buffers::create_one_frame_sr_tbuf::elements_count"], [29, 7, 1, "_CPPv4N3d3d7buffers24create_one_frame_sr_tbufE8uint32_t8uint32_tPKc", "d3d::buffers::create_one_frame_sr_tbuf::format"], [29, 7, 1, "_CPPv4N3d3d7buffers24create_one_frame_sr_tbufE8uint32_t8uint32_tPKc", "d3d::buffers::create_one_frame_sr_tbuf::name"], [29, 6, 1, "_CPPv4N3d3d7buffers20create_persistent_cbE8uint32_tPKc", "d3d::buffers::create_persistent_cb"], [29, 7, 1, "_CPPv4N3d3d7buffers20create_persistent_cbE8uint32_tPKc", "d3d::buffers::create_persistent_cb::name"], [29, 7, 1, "_CPPv4N3d3d7buffers20create_persistent_cbE8uint32_tPKc", "d3d::buffers::create_persistent_cb::registers_count"], [29, 6, 1, "_CPPv4N3d3d7buffers33create_persistent_sr_byte_addressE8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_byte_address"], [29, 7, 1, "_CPPv4N3d3d7buffers33create_persistent_sr_byte_addressE8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_byte_address::buffer_init"], [29, 7, 1, "_CPPv4N3d3d7buffers33create_persistent_sr_byte_addressE8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_byte_address::name"], [29, 7, 1, "_CPPv4N3d3d7buffers33create_persistent_sr_byte_addressE8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_byte_address::size_in_dwords"], [29, 6, 1, "_CPPv4N3d3d7buffers31create_persistent_sr_structuredE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_structured"], [29, 7, 1, "_CPPv4N3d3d7buffers31create_persistent_sr_structuredE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_structured::buffer_init"], [29, 7, 1, "_CPPv4N3d3d7buffers31create_persistent_sr_structuredE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_structured::elements_count"], [29, 7, 1, "_CPPv4N3d3d7buffers31create_persistent_sr_structuredE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_structured::name"], [29, 7, 1, "_CPPv4N3d3d7buffers31create_persistent_sr_structuredE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_structured::structure_size"], [29, 6, 1, "_CPPv4N3d3d7buffers25create_persistent_sr_tbufE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_tbuf"], [29, 7, 1, "_CPPv4N3d3d7buffers25create_persistent_sr_tbufE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_tbuf::buffer_init"], [29, 7, 1, "_CPPv4N3d3d7buffers25create_persistent_sr_tbufE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_tbuf::elements_count"], [29, 7, 1, "_CPPv4N3d3d7buffers25create_persistent_sr_tbufE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_tbuf::format"], [29, 7, 1, "_CPPv4N3d3d7buffers25create_persistent_sr_tbufE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_persistent_sr_tbuf::name"], [29, 6, 1, "_CPPv4N3d3d7buffers30create_raytrace_scratch_bufferE8uint32_tPKc", "d3d::buffers::create_raytrace_scratch_buffer"], [29, 7, 1, "_CPPv4N3d3d7buffers30create_raytrace_scratch_bufferE8uint32_tPKc", "d3d::buffers::create_raytrace_scratch_buffer::name"], [29, 7, 1, "_CPPv4N3d3d7buffers30create_raytrace_scratch_bufferE8uint32_tPKc", "d3d::buffers::create_raytrace_scratch_buffer::size_in_bytes"], [29, 6, 1, "_CPPv4N3d3d7buffers14create_stagingE8uint32_tPKc", "d3d::buffers::create_staging"], [29, 7, 1, "_CPPv4N3d3d7buffers14create_stagingE8uint32_tPKc", "d3d::buffers::create_staging::name"], [29, 7, 1, "_CPPv4N3d3d7buffers14create_stagingE8uint32_tPKc", "d3d::buffers::create_staging::size_in_bytes"], [29, 6, 1, "_CPPv4N3d3d7buffers22create_ua_byte_addressE8uint32_tPKc", "d3d::buffers::create_ua_byte_address"], [29, 7, 1, "_CPPv4N3d3d7buffers22create_ua_byte_addressE8uint32_tPKc", "d3d::buffers::create_ua_byte_address::name"], [29, 7, 1, "_CPPv4N3d3d7buffers22create_ua_byte_addressE8uint32_tPKc", "d3d::buffers::create_ua_byte_address::size_in_dwords"], [29, 6, 1, "_CPPv4N3d3d7buffers31create_ua_byte_address_readbackE8uint32_tPKc4Init", "d3d::buffers::create_ua_byte_address_readback"], [29, 7, 1, "_CPPv4N3d3d7buffers31create_ua_byte_address_readbackE8uint32_tPKc4Init", "d3d::buffers::create_ua_byte_address_readback::buffer_init"], [29, 7, 1, "_CPPv4N3d3d7buffers31create_ua_byte_address_readbackE8uint32_tPKc4Init", "d3d::buffers::create_ua_byte_address_readback::name"], [29, 7, 1, "_CPPv4N3d3d7buffers31create_ua_byte_address_readbackE8uint32_tPKc4Init", "d3d::buffers::create_ua_byte_address_readback::size_in_dwords"], [29, 6, 1, "_CPPv4N3d3d7buffers18create_ua_indirectE8Indirect8uint32_tPKc", "d3d::buffers::create_ua_indirect"], [29, 7, 1, "_CPPv4N3d3d7buffers18create_ua_indirectE8Indirect8uint32_tPKc", "d3d::buffers::create_ua_indirect::indirect_type"], [29, 7, 1, "_CPPv4N3d3d7buffers18create_ua_indirectE8Indirect8uint32_tPKc", "d3d::buffers::create_ua_indirect::name"], [29, 7, 1, "_CPPv4N3d3d7buffers18create_ua_indirectE8Indirect8uint32_tPKc", "d3d::buffers::create_ua_indirect::records_count"], [29, 6, 1, "_CPPv4N3d3d7buffers25create_ua_sr_byte_addressE8uint32_tPKc4Init", "d3d::buffers::create_ua_sr_byte_address"], [29, 7, 1, "_CPPv4N3d3d7buffers25create_ua_sr_byte_addressE8uint32_tPKc4Init", "d3d::buffers::create_ua_sr_byte_address::buffer_init"], [29, 7, 1, "_CPPv4N3d3d7buffers25create_ua_sr_byte_addressE8uint32_tPKc4Init", "d3d::buffers::create_ua_sr_byte_address::name"], [29, 7, 1, "_CPPv4N3d3d7buffers25create_ua_sr_byte_addressE8uint32_tPKc4Init", "d3d::buffers::create_ua_sr_byte_address::size_in_dwords"], [29, 6, 1, "_CPPv4N3d3d7buffers23create_ua_sr_structuredE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_ua_sr_structured"], [29, 7, 1, "_CPPv4N3d3d7buffers23create_ua_sr_structuredE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_ua_sr_structured::buffer_init"], [29, 7, 1, "_CPPv4N3d3d7buffers23create_ua_sr_structuredE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_ua_sr_structured::elements_count"], [29, 7, 1, "_CPPv4N3d3d7buffers23create_ua_sr_structuredE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_ua_sr_structured::name"], [29, 7, 1, "_CPPv4N3d3d7buffers23create_ua_sr_structuredE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_ua_sr_structured::structure_size"], [29, 6, 1, "_CPPv4N3d3d7buffers20create_ua_structuredE8uint32_t8uint32_tPKc", "d3d::buffers::create_ua_structured"], [29, 7, 1, "_CPPv4N3d3d7buffers20create_ua_structuredE8uint32_t8uint32_tPKc", "d3d::buffers::create_ua_structured::elements_count"], [29, 7, 1, "_CPPv4N3d3d7buffers20create_ua_structuredE8uint32_t8uint32_tPKc", "d3d::buffers::create_ua_structured::name"], [29, 7, 1, "_CPPv4N3d3d7buffers20create_ua_structuredE8uint32_t8uint32_tPKc", "d3d::buffers::create_ua_structured::structure_size"], [29, 6, 1, "_CPPv4N3d3d7buffers29create_ua_structured_readbackE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_ua_structured_readback"], [29, 7, 1, "_CPPv4N3d3d7buffers29create_ua_structured_readbackE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_ua_structured_readback::buffer_init"], [29, 7, 1, "_CPPv4N3d3d7buffers29create_ua_structured_readbackE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_ua_structured_readback::elements_count"], [29, 7, 1, "_CPPv4N3d3d7buffers29create_ua_structured_readbackE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_ua_structured_readback::name"], [29, 7, 1, "_CPPv4N3d3d7buffers29create_ua_structured_readbackE8uint32_t8uint32_tPKc4Init", "d3d::buffers::create_ua_structured_readback::structure_size"], [29, 6, 1, "_CPPv4N3d3d7buffers20dword_count_per_callE8Indirect", "d3d::buffers::dword_count_per_call"], [29, 7, 1, "_CPPv4N3d3d7buffers20dword_count_per_callE8Indirect", "d3d::buffers::dword_count_per_call::indirect_type"], [37, 6, 1, "_CPPv4N3d3d10calcglobtmERK6mat44fRK19Driver3dPerspectiveR6mat44f", "d3d::calcglobtm"], [37, 6, 1, "_CPPv4N3d3d10calcglobtmERK6mat44fRK6mat44fR6mat44f", "d3d::calcglobtm"], [37, 6, 1, "_CPPv4N3d3d10calcglobtmERK7TMatrixRK19Driver3dPerspectiveR8TMatrix4", "d3d::calcglobtm"], [37, 6, 1, "_CPPv4N3d3d10calcglobtmERK7TMatrixRK8TMatrix4R8TMatrix4", "d3d::calcglobtm"], [37, 7, 1, "_CPPv4N3d3d10calcglobtmERK6mat44fRK19Driver3dPerspectiveR6mat44f", "d3d::calcglobtm::persp"], [37, 7, 1, "_CPPv4N3d3d10calcglobtmERK7TMatrixRK19Driver3dPerspectiveR8TMatrix4", "d3d::calcglobtm::persp"], [37, 7, 1, "_CPPv4N3d3d10calcglobtmERK6mat44fRK6mat44fR6mat44f", "d3d::calcglobtm::proj_tm"], [37, 7, 1, "_CPPv4N3d3d10calcglobtmERK7TMatrixRK8TMatrix4R8TMatrix4", "d3d::calcglobtm::proj_tm"], [37, 7, 1, "_CPPv4N3d3d10calcglobtmERK6mat44fRK19Driver3dPerspectiveR6mat44f", "d3d::calcglobtm::result"], [37, 7, 1, "_CPPv4N3d3d10calcglobtmERK6mat44fRK6mat44fR6mat44f", "d3d::calcglobtm::result"], [37, 7, 1, "_CPPv4N3d3d10calcglobtmERK7TMatrixRK19Driver3dPerspectiveR8TMatrix4", "d3d::calcglobtm::result"], [37, 7, 1, "_CPPv4N3d3d10calcglobtmERK7TMatrixRK8TMatrix4R8TMatrix4", "d3d::calcglobtm::result"], [37, 7, 1, "_CPPv4N3d3d10calcglobtmERK6mat44fRK19Driver3dPerspectiveR6mat44f", "d3d::calcglobtm::view_tm"], [37, 7, 1, "_CPPv4N3d3d10calcglobtmERK6mat44fRK6mat44fR6mat44f", "d3d::calcglobtm::view_tm"], [37, 7, 1, "_CPPv4N3d3d10calcglobtmERK7TMatrixRK19Driver3dPerspectiveR8TMatrix4", "d3d::calcglobtm::view_tm"], [37, 7, 1, "_CPPv4N3d3d10calcglobtmERK7TMatrixRK8TMatrix4R8TMatrix4", "d3d::calcglobtm::view_tm"], [37, 6, 1, "_CPPv4N3d3d8calcprojERK19Driver3dPerspectiveR6mat44f", "d3d::calcproj"], [37, 6, 1, "_CPPv4N3d3d8calcprojERK19Driver3dPerspectiveR8TMatrix4", "d3d::calcproj"], [37, 7, 1, "_CPPv4N3d3d8calcprojERK19Driver3dPerspectiveR6mat44f", "d3d::calcproj::p"], [37, 7, 1, "_CPPv4N3d3d8calcprojERK19Driver3dPerspectiveR8TMatrix4", "d3d::calcproj::p"], [37, 7, 1, "_CPPv4N3d3d8calcprojERK19Driver3dPerspectiveR6mat44f", "d3d::calcproj::proj_tm"], [37, 7, 1, "_CPPv4N3d3d8calcprojERK19Driver3dPerspectiveR8TMatrix4", "d3d::calcproj::proj_tm"], [53, 6, 1, "_CPPv4N3d3d14capture_screenERiRiRi", "d3d::capture_screen"], [53, 7, 1, "_CPPv4N3d3d14capture_screenERiRiRi", "d3d::capture_screen::h"], [53, 7, 1, "_CPPv4N3d3d14capture_screenERiRiRi", "d3d::capture_screen::stride_bytes"], [53, 7, 1, "_CPPv4N3d3d14capture_screenERiRiRi", "d3d::capture_screen::w"], [53, 6, 1, "_CPPv4N3d3d26change_screen_aspect_ratioEf", "d3d::change_screen_aspect_ratio"], [53, 7, 1, "_CPPv4N3d3d26change_screen_aspect_ratioEf", "d3d::change_screen_aspect_ratio::ar"], [54, 6, 1, "_CPPv4N3d3d19check_cubetexformatEi", "d3d::check_cubetexformat"], [54, 7, 1, "_CPPv4N3d3d19check_cubetexformatEi", "d3d::check_cubetexformat::cflg"], [54, 6, 1, "_CPPv4N3d3d15check_texformatEi", "d3d::check_texformat"], [54, 7, 1, "_CPPv4N3d3d15check_texformatEi", "d3d::check_texformat::cflg"], [54, 6, 1, "_CPPv4N3d3d18check_voltexformatEi", "d3d::check_voltexformat"], [54, 7, 1, "_CPPv4N3d3d18check_voltexformatEi", "d3d::check_voltexformat::cflg"], [40, 6, 1, "_CPPv4N3d3d19clear_render_statesEv", "d3d::clear_render_states"], [41, 6, 1, "_CPPv4N3d3d8clear_rtERK12RenderTargetRK18ResourceClearValue", "d3d::clear_rt"], [41, 7, 1, "_CPPv4N3d3d8clear_rtERK12RenderTargetRK18ResourceClearValue", "d3d::clear_rt::clear_val"], [41, 7, 1, "_CPPv4N3d3d8clear_rtERK12RenderTargetRK18ResourceClearValue", "d3d::clear_rt::rt"], [44, 6, 1, "_CPPv4N3d3d12clear_rwbuffEP7SbufferAL4E_Kf", "d3d::clear_rwbuff"], [44, 7, 1, "_CPPv4N3d3d12clear_rwbuffEP7SbufferAL4E_Kf", "d3d::clear_rwbuff::buf"], [44, 7, 1, "_CPPv4N3d3d12clear_rwbuffEP7SbufferAL4E_Kf", "d3d::clear_rwbuff::val"], [44, 6, 1, "_CPPv4N3d3d12clear_rwbufiEP7SbufferAL4E_K8uint32_t", "d3d::clear_rwbufi"], [44, 7, 1, "_CPPv4N3d3d12clear_rwbufiEP7SbufferAL4E_K8uint32_t", "d3d::clear_rwbufi::buf"], [44, 7, 1, "_CPPv4N3d3d12clear_rwbufiEP7SbufferAL4E_K8uint32_t", "d3d::clear_rwbufi::val"], [44, 6, 1, "_CPPv4N3d3d12clear_rwtexfEP11BaseTextureAL4E_Kf8uint32_t8uint32_t", "d3d::clear_rwtexf"], [44, 7, 1, "_CPPv4N3d3d12clear_rwtexfEP11BaseTextureAL4E_Kf8uint32_t8uint32_t", "d3d::clear_rwtexf::face"], [44, 7, 1, "_CPPv4N3d3d12clear_rwtexfEP11BaseTextureAL4E_Kf8uint32_t8uint32_t", "d3d::clear_rwtexf::mip_level"], [44, 7, 1, "_CPPv4N3d3d12clear_rwtexfEP11BaseTextureAL4E_Kf8uint32_t8uint32_t", "d3d::clear_rwtexf::tex"], [44, 7, 1, "_CPPv4N3d3d12clear_rwtexfEP11BaseTextureAL4E_Kf8uint32_t8uint32_t", "d3d::clear_rwtexf::val"], [44, 6, 1, "_CPPv4N3d3d12clear_rwtexiEP11BaseTextureAL4E_K8uint32_t8uint32_t8uint32_t", "d3d::clear_rwtexi"], [44, 7, 1, "_CPPv4N3d3d12clear_rwtexiEP11BaseTextureAL4E_K8uint32_t8uint32_t8uint32_t", "d3d::clear_rwtexi::face"], [44, 7, 1, "_CPPv4N3d3d12clear_rwtexiEP11BaseTextureAL4E_K8uint32_t8uint32_t8uint32_t", "d3d::clear_rwtexi::mip_level"], [44, 7, 1, "_CPPv4N3d3d12clear_rwtexiEP11BaseTextureAL4E_K8uint32_t8uint32_t8uint32_t", "d3d::clear_rwtexi::tex"], [44, 7, 1, "_CPPv4N3d3d12clear_rwtexiEP11BaseTextureAL4E_K8uint32_t8uint32_t8uint32_t", "d3d::clear_rwtexi::val"], [41, 6, 1, "_CPPv4N3d3d9clearviewEi8E3DCOLORf8uint32_t", "d3d::clearview"], [41, 7, 1, "_CPPv4N3d3d9clearviewEi8E3DCOLORf8uint32_t", "d3d::clearview::c"], [41, 7, 1, "_CPPv4N3d3d9clearviewEi8E3DCOLORf8uint32_t", "d3d::clearview::stencil"], [41, 7, 1, "_CPPv4N3d3d9clearviewEi8E3DCOLORf8uint32_t", "d3d::clearview::what"], [41, 7, 1, "_CPPv4N3d3d9clearviewEi8E3DCOLORf8uint32_t", "d3d::clearview::z"], [41, 6, 1, "_CPPv4N3d3d31copy_from_current_render_targetEP11BaseTexture", "d3d::copy_from_current_render_target"], [41, 7, 1, "_CPPv4N3d3d31copy_from_current_render_targetEP11BaseTexture", "d3d::copy_from_current_render_target::to_tex"], [54, 6, 1, "_CPPv4N3d3d16create_array_texEiiiiiPKc", "d3d::create_array_tex"], [54, 7, 1, "_CPPv4N3d3d16create_array_texEiiiiiPKc", "d3d::create_array_tex::d"], [54, 7, 1, "_CPPv4N3d3d16create_array_texEiiiiiPKc", "d3d::create_array_tex::flg"], [54, 7, 1, "_CPPv4N3d3d16create_array_texEiiiiiPKc", "d3d::create_array_tex::h"], [54, 7, 1, "_CPPv4N3d3d16create_array_texEiiiiiPKc", "d3d::create_array_tex::levels"], [54, 7, 1, "_CPPv4N3d3d16create_array_texEiiiiiPKc", "d3d::create_array_tex::stat_name"], [54, 7, 1, "_CPPv4N3d3d16create_array_texEiiiiiPKc", "d3d::create_array_tex::w"], [54, 6, 1, "_CPPv4N3d3d21create_cube_array_texEiiiiPKc", "d3d::create_cube_array_tex"], [54, 7, 1, "_CPPv4N3d3d21create_cube_array_texEiiiiPKc", "d3d::create_cube_array_tex::d"], [54, 7, 1, "_CPPv4N3d3d21create_cube_array_texEiiiiPKc", "d3d::create_cube_array_tex::flg"], [54, 7, 1, "_CPPv4N3d3d21create_cube_array_texEiiiiPKc", "d3d::create_cube_array_tex::levels"], [54, 7, 1, "_CPPv4N3d3d21create_cube_array_texEiiiiPKc", "d3d::create_cube_array_tex::side"], [54, 7, 1, "_CPPv4N3d3d21create_cube_array_texEiiiiPKc", "d3d::create_cube_array_tex::stat_name"], [54, 6, 1, "_CPPv4N3d3d14create_cubetexEiiiPKc", "d3d::create_cubetex"], [54, 7, 1, "_CPPv4N3d3d14create_cubetexEiiiPKc", "d3d::create_cubetex::flg"], [54, 7, 1, "_CPPv4N3d3d14create_cubetexEiiiPKc", "d3d::create_cubetex::levels"], [54, 7, 1, "_CPPv4N3d3d14create_cubetexEiiiPKc", "d3d::create_cubetex::size"], [54, 7, 1, "_CPPv4N3d3d14create_cubetexEiiiPKc", "d3d::create_cubetex::stat_name"], [54, 6, 1, "_CPPv4N3d3d15create_ddsx_texER8IGenLoadiiiPKc", "d3d::create_ddsx_tex"], [54, 7, 1, "_CPPv4N3d3d15create_ddsx_texER8IGenLoadiiiPKc", "d3d::create_ddsx_tex::crd"], [54, 7, 1, "_CPPv4N3d3d15create_ddsx_texER8IGenLoadiiiPKc", "d3d::create_ddsx_tex::flg"], [54, 7, 1, "_CPPv4N3d3d15create_ddsx_texER8IGenLoadiiiPKc", "d3d::create_ddsx_tex::levels"], [54, 7, 1, "_CPPv4N3d3d15create_ddsx_texER8IGenLoadiiiPKc", "d3d::create_ddsx_tex::quality_id"], [54, 7, 1, "_CPPv4N3d3d15create_ddsx_texER8IGenLoadiiiPKc", "d3d::create_ddsx_tex::stat_name"], [38, 6, 1, "_CPPv4N3d3d18create_event_queryEv", "d3d::create_event_query"], [50, 6, 1, "_CPPv4N3d3d9create_ibEiiPKc", "d3d::create_ib"], [50, 7, 1, "_CPPv4N3d3d9create_ibEiiPKc", "d3d::create_ib::flags"], [50, 7, 1, "_CPPv4N3d3d9create_ibEiiPKc", "d3d::create_ib::size_bytes"], [50, 7, 1, "_CPPv4N3d3d9create_ibEiiPKc", "d3d::create_ib::stat_name"], [46, 6, 1, "_CPPv4N3d3d19create_pixel_shaderEPK8uint32_t", "d3d::create_pixel_shader"], [46, 7, 1, "_CPPv4N3d3d19create_pixel_shaderEPK8uint32_t", "d3d::create_pixel_shader::native_code"], [53, 6, 1, "_CPPv4N3d3d16create_predicateEv", "d3d::create_predicate"], [46, 6, 1, "_CPPv4N3d3d14create_programE5VPROG7FSHADER5VDECLPjj", "d3d::create_program"], [46, 6, 1, "_CPPv4N3d3d14create_programEPK8uint32_tPK8uint32_t5VDECLPjj", "d3d::create_program"], [46, 7, 1, "_CPPv4N3d3d14create_programE5VPROG7FSHADER5VDECLPjj", "d3d::create_program::fsh"], [46, 7, 1, "_CPPv4N3d3d14create_programEPK8uint32_tPK8uint32_t5VDECLPjj", "d3d::create_program::fsh_native"], [46, 7, 1, "_CPPv4N3d3d14create_programE5VPROG7FSHADER5VDECLPjj", "d3d::create_program::streams"], [46, 7, 1, "_CPPv4N3d3d14create_programEPK8uint32_tPK8uint32_t5VDECLPjj", "d3d::create_program::streams"], [46, 7, 1, "_CPPv4N3d3d14create_programE5VPROG7FSHADER5VDECLPjj", "d3d::create_program::strides"], [46, 7, 1, "_CPPv4N3d3d14create_programEPK8uint32_tPK8uint32_t5VDECLPjj", "d3d::create_program::strides"], [46, 7, 1, "_CPPv4N3d3d14create_programE5VPROG7FSHADER5VDECLPjj", "d3d::create_program::vdecl"], [46, 7, 1, "_CPPv4N3d3d14create_programEPK8uint32_tPK8uint32_t5VDECLPjj", "d3d::create_program::vdecl"], [46, 7, 1, "_CPPv4N3d3d14create_programEPK8uint32_tPK8uint32_t5VDECLPjj", "d3d::create_program::vpr_native"], [46, 7, 1, "_CPPv4N3d3d14create_programE5VPROG7FSHADER5VDECLPjj", "d3d::create_program::vprog"], [46, 6, 1, "_CPPv4N3d3d17create_program_csEPK8uint32_t11CSPreloaded", "d3d::create_program_cs"], [46, 7, 1, "_CPPv4N3d3d17create_program_csEPK8uint32_t11CSPreloaded", "d3d::create_program_cs::cs_native"], [46, 7, 1, "_CPPv4N3d3d17create_program_csEPK8uint32_t11CSPreloaded", "d3d::create_program_cs::preloaded"], [40, 6, 1, "_CPPv4N3d3d19create_render_stateERKN7shaders11RenderStateE", "d3d::create_render_state"], [40, 7, 1, "_CPPv4N3d3d19create_render_stateERKN7shaders11RenderStateE", "d3d::create_render_state::state"], [34, 6, 1, "_CPPv4N3d3d20create_resource_heapEP17ResourceHeapGroup6size_t23ResourceHeapCreateFlags", "d3d::create_resource_heap"], [34, 7, 1, "_CPPv4N3d3d20create_resource_heapEP17ResourceHeapGroup6size_t23ResourceHeapCreateFlags", "d3d::create_resource_heap::flags"], [34, 7, 1, "_CPPv4N3d3d20create_resource_heapEP17ResourceHeapGroup6size_t23ResourceHeapCreateFlags", "d3d::create_resource_heap::heap_group"], [34, 7, 1, "_CPPv4N3d3d20create_resource_heapEP17ResourceHeapGroup6size_t23ResourceHeapCreateFlags", "d3d::create_resource_heap::size"], [29, 6, 1, "_CPPv4N3d3d14create_sbufferEiijjPKc", "d3d::create_sbuffer"], [29, 7, 1, "_CPPv4N3d3d14create_sbufferEiijjPKc", "d3d::create_sbuffer::elements"], [29, 7, 1, "_CPPv4N3d3d14create_sbufferEiijjPKc", "d3d::create_sbuffer::flags"], [29, 7, 1, "_CPPv4N3d3d14create_sbufferEiijjPKc", "d3d::create_sbuffer::name"], [29, 7, 1, "_CPPv4N3d3d14create_sbufferEiijjPKc", "d3d::create_sbuffer::struct_size"], [29, 7, 1, "_CPPv4N3d3d14create_sbufferEiijjPKc", "d3d::create_sbuffer::texfmt"], [54, 6, 1, "_CPPv4N3d3d10create_texEP10TexImage32iiiiPKc", "d3d::create_tex"], [54, 7, 1, "_CPPv4N3d3d10create_texEP10TexImage32iiiiPKc", "d3d::create_tex::flg"], [54, 7, 1, "_CPPv4N3d3d10create_texEP10TexImage32iiiiPKc", "d3d::create_tex::h"], [54, 7, 1, "_CPPv4N3d3d10create_texEP10TexImage32iiiiPKc", "d3d::create_tex::img"], [54, 7, 1, "_CPPv4N3d3d10create_texEP10TexImage32iiiiPKc", "d3d::create_tex::levels"], [54, 7, 1, "_CPPv4N3d3d10create_texEP10TexImage32iiiiPKc", "d3d::create_tex::stat_name"], [54, 7, 1, "_CPPv4N3d3d10create_texEP10TexImage32iiiiPKc", "d3d::create_tex::w"], [50, 6, 1, "_CPPv4N3d3d9create_vbEiiPKc", "d3d::create_vb"], [50, 7, 1, "_CPPv4N3d3d9create_vbEiiPKc", "d3d::create_vb::flags"], [50, 7, 1, "_CPPv4N3d3d9create_vbEiiPKc", "d3d::create_vb::name"], [50, 7, 1, "_CPPv4N3d3d9create_vbEiiPKc", "d3d::create_vb::size_bytes"], [50, 6, 1, "_CPPv4N3d3d12create_vdeclEP7VSDTYPE", "d3d::create_vdecl"], [50, 7, 1, "_CPPv4N3d3d12create_vdeclEP7VSDTYPE", "d3d::create_vdecl::vsd"], [46, 6, 1, "_CPPv4N3d3d20create_vertex_shaderEPK8uint32_t", "d3d::create_vertex_shader"], [46, 7, 1, "_CPPv4N3d3d20create_vertex_shaderEPK8uint32_t", "d3d::create_vertex_shader::native_code"], [54, 6, 1, "_CPPv4N3d3d13create_voltexEiiiiiPKc", "d3d::create_voltex"], [54, 7, 1, "_CPPv4N3d3d13create_voltexEiiiiiPKc", "d3d::create_voltex::d"], [54, 7, 1, "_CPPv4N3d3d13create_voltexEiiiiiPKc", "d3d::create_voltex::flg"], [54, 7, 1, "_CPPv4N3d3d13create_voltexEiiiiiPKc", "d3d::create_voltex::h"], [54, 7, 1, "_CPPv4N3d3d13create_voltexEiiiiiPKc", "d3d::create_voltex::levels"], [54, 7, 1, "_CPPv4N3d3d13create_voltexEiiiiiPKc", "d3d::create_voltex::stat_name"], [54, 7, 1, "_CPPv4N3d3d13create_voltexEiiiiiPKc", "d3d::create_voltex::w"], [34, 6, 1, "_CPPv4N3d3d17deactivate_bufferEP7Sbuffer11GpuPipeline", "d3d::deactivate_buffer"], [34, 7, 1, "_CPPv4N3d3d17deactivate_bufferEP7Sbuffer11GpuPipeline", "d3d::deactivate_buffer::buf"], [34, 7, 1, "_CPPv4N3d3d17deactivate_bufferEP7Sbuffer11GpuPipeline", "d3d::deactivate_buffer::gpu_pipeline"], [34, 6, 1, "_CPPv4N3d3d18deactivate_textureEP11BaseTexture11GpuPipeline", "d3d::deactivate_texture"], [34, 7, 1, "_CPPv4N3d3d18deactivate_textureEP11BaseTexture11GpuPipeline", "d3d::deactivate_texture::gpu_pipeline"], [34, 7, 1, "_CPPv4N3d3d18deactivate_textureEP11BaseTexture11GpuPipeline", "d3d::deactivate_texture::tex"], [46, 6, 1, "_CPPv4N3d3d19delete_pixel_shaderE7FSHADER", "d3d::delete_pixel_shader"], [46, 7, 1, "_CPPv4N3d3d19delete_pixel_shaderE7FSHADER", "d3d::delete_pixel_shader::ps"], [46, 6, 1, "_CPPv4N3d3d14delete_programE7PROGRAM", "d3d::delete_program"], [46, 7, 1, "_CPPv4N3d3d14delete_programE7PROGRAM", "d3d::delete_program::program"], [50, 6, 1, "_CPPv4N3d3d12delete_vdeclE5VDECL", "d3d::delete_vdecl"], [50, 7, 1, "_CPPv4N3d3d12delete_vdeclE5VDECL", "d3d::delete_vdecl::vdecl"], [46, 6, 1, "_CPPv4N3d3d20delete_vertex_shaderE5VPROG", "d3d::delete_vertex_shader"], [46, 7, 1, "_CPPv4N3d3d20delete_vertex_shaderE5VPROG", "d3d::delete_vertex_shader::vs"], [34, 6, 1, "_CPPv4N3d3d21destroy_resource_heapEP12ResourceHeap", "d3d::destroy_resource_heap"], [34, 7, 1, "_CPPv4N3d3d21destroy_resource_heapEP12ResourceHeap", "d3d::destroy_resource_heap::heap"], [53, 6, 1, "_CPPv4N3d3d11device_lostEPb", "d3d::device_lost"], [53, 7, 1, "_CPPv4N3d3d11device_lostEPb", "d3d::device_lost::can_reset_now"], [35, 6, 1, "_CPPv4N3d3d11disable_sliEv", "d3d::disable_sli"], [31, 6, 1, "_CPPv4N3d3d8dispatchE8uint32_t8uint32_t8uint32_t11GpuPipeline", "d3d::dispatch"], [31, 7, 1, "_CPPv4N3d3d8dispatchE8uint32_t8uint32_t8uint32_t11GpuPipeline", "d3d::dispatch::gpu_pipeline"], [31, 7, 1, "_CPPv4N3d3d8dispatchE8uint32_t8uint32_t8uint32_t11GpuPipeline", "d3d::dispatch::thread_group_x"], [31, 7, 1, "_CPPv4N3d3d8dispatchE8uint32_t8uint32_t8uint32_t11GpuPipeline", "d3d::dispatch::thread_group_y"], [31, 7, 1, "_CPPv4N3d3d8dispatchE8uint32_t8uint32_t8uint32_t11GpuPipeline", "d3d::dispatch::thread_group_z"], [31, 6, 1, "_CPPv4N3d3d17dispatch_indirectEP7Sbuffer8uint32_t11GpuPipeline", "d3d::dispatch_indirect"], [31, 7, 1, "_CPPv4N3d3d17dispatch_indirectEP7Sbuffer8uint32_t11GpuPipeline", "d3d::dispatch_indirect::args"], [31, 7, 1, "_CPPv4N3d3d17dispatch_indirectEP7Sbuffer8uint32_t11GpuPipeline", "d3d::dispatch_indirect::byte_offset"], [31, 7, 1, "_CPPv4N3d3d17dispatch_indirectEP7Sbuffer8uint32_t11GpuPipeline", "d3d::dispatch_indirect::gpu_pipeline"], [32, 6, 1, "_CPPv4N3d3d13dispatch_meshE8uint32_t8uint32_t8uint32_t", "d3d::dispatch_mesh"], [32, 7, 1, "_CPPv4N3d3d13dispatch_meshE8uint32_t8uint32_t8uint32_t", "d3d::dispatch_mesh::thread_group_x"], [32, 7, 1, "_CPPv4N3d3d13dispatch_meshE8uint32_t8uint32_t8uint32_t", "d3d::dispatch_mesh::thread_group_y"], [32, 7, 1, "_CPPv4N3d3d13dispatch_meshE8uint32_t8uint32_t8uint32_t", "d3d::dispatch_mesh::thread_group_z"], [32, 6, 1, "_CPPv4N3d3d22dispatch_mesh_indirectEP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::dispatch_mesh_indirect"], [32, 7, 1, "_CPPv4N3d3d22dispatch_mesh_indirectEP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::dispatch_mesh_indirect::args"], [32, 7, 1, "_CPPv4N3d3d22dispatch_mesh_indirectEP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::dispatch_mesh_indirect::byte_offset"], [32, 7, 1, "_CPPv4N3d3d22dispatch_mesh_indirectEP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::dispatch_mesh_indirect::dispatch_count"], [32, 7, 1, "_CPPv4N3d3d22dispatch_mesh_indirectEP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::dispatch_mesh_indirect::stride_bytes"], [32, 6, 1, "_CPPv4N3d3d28dispatch_mesh_indirect_countEP7Sbuffer8uint32_t8uint32_tP7Sbuffer8uint32_t8uint32_t", "d3d::dispatch_mesh_indirect_count"], [32, 7, 1, "_CPPv4N3d3d28dispatch_mesh_indirect_countEP7Sbuffer8uint32_t8uint32_tP7Sbuffer8uint32_t8uint32_t", "d3d::dispatch_mesh_indirect_count::args"], [32, 7, 1, "_CPPv4N3d3d28dispatch_mesh_indirect_countEP7Sbuffer8uint32_t8uint32_tP7Sbuffer8uint32_t8uint32_t", "d3d::dispatch_mesh_indirect_count::args_byte_offset"], [32, 7, 1, "_CPPv4N3d3d28dispatch_mesh_indirect_countEP7Sbuffer8uint32_t8uint32_tP7Sbuffer8uint32_t8uint32_t", "d3d::dispatch_mesh_indirect_count::args_stride_bytes"], [32, 7, 1, "_CPPv4N3d3d28dispatch_mesh_indirect_countEP7Sbuffer8uint32_t8uint32_tP7Sbuffer8uint32_t8uint32_t", "d3d::dispatch_mesh_indirect_count::count"], [32, 7, 1, "_CPPv4N3d3d28dispatch_mesh_indirect_countEP7Sbuffer8uint32_t8uint32_tP7Sbuffer8uint32_t8uint32_t", "d3d::dispatch_mesh_indirect_count::count_byte_offset"], [32, 7, 1, "_CPPv4N3d3d28dispatch_mesh_indirect_countEP7Sbuffer8uint32_t8uint32_tP7Sbuffer8uint32_t8uint32_t", "d3d::dispatch_mesh_indirect_count::max_count"], [33, 6, 1, "_CPPv4N3d3d4drawEiii", "d3d::draw"], [33, 7, 1, "_CPPv4N3d3d4drawEiii", "d3d::draw::numprim"], [33, 7, 1, "_CPPv4N3d3d4drawEiii", "d3d::draw::start"], [33, 7, 1, "_CPPv4N3d3d4drawEiii", "d3d::draw::type"], [33, 6, 1, "_CPPv4N3d3d9draw_baseEiii8uint32_t8uint32_t", "d3d::draw_base"], [33, 7, 1, "_CPPv4N3d3d9draw_baseEiii8uint32_t8uint32_t", "d3d::draw_base::num_instances"], [33, 7, 1, "_CPPv4N3d3d9draw_baseEiii8uint32_t8uint32_t", "d3d::draw_base::numprim"], [33, 7, 1, "_CPPv4N3d3d9draw_baseEiii8uint32_t8uint32_t", "d3d::draw_base::start"], [33, 7, 1, "_CPPv4N3d3d9draw_baseEiii8uint32_t8uint32_t", "d3d::draw_base::start_instance"], [33, 7, 1, "_CPPv4N3d3d9draw_baseEiii8uint32_t8uint32_t", "d3d::draw_base::type"], [33, 6, 1, "_CPPv4N3d3d21draw_indexed_indirectEiP7Sbuffer8uint32_t", "d3d::draw_indexed_indirect"], [33, 7, 1, "_CPPv4N3d3d21draw_indexed_indirectEiP7Sbuffer8uint32_t", "d3d::draw_indexed_indirect::args"], [33, 7, 1, "_CPPv4N3d3d21draw_indexed_indirectEiP7Sbuffer8uint32_t", "d3d::draw_indexed_indirect::byte_offset"], [33, 7, 1, "_CPPv4N3d3d21draw_indexed_indirectEiP7Sbuffer8uint32_t", "d3d::draw_indexed_indirect::type"], [33, 6, 1, "_CPPv4N3d3d13draw_indirectEiP7Sbuffer8uint32_t", "d3d::draw_indirect"], [33, 7, 1, "_CPPv4N3d3d13draw_indirectEiP7Sbuffer8uint32_t", "d3d::draw_indirect::args"], [33, 7, 1, "_CPPv4N3d3d13draw_indirectEiP7Sbuffer8uint32_t", "d3d::draw_indirect::byte_offset"], [33, 7, 1, "_CPPv4N3d3d13draw_indirectEiP7Sbuffer8uint32_t", "d3d::draw_indirect::type"], [33, 6, 1, "_CPPv4N3d3d14draw_instancedEiii8uint32_t8uint32_t", "d3d::draw_instanced"], [33, 7, 1, "_CPPv4N3d3d14draw_instancedEiii8uint32_t8uint32_t", "d3d::draw_instanced::num_instances"], [33, 7, 1, "_CPPv4N3d3d14draw_instancedEiii8uint32_t8uint32_t", "d3d::draw_instanced::numprim"], [33, 7, 1, "_CPPv4N3d3d14draw_instancedEiii8uint32_t8uint32_t", "d3d::draw_instanced::start"], [33, 7, 1, "_CPPv4N3d3d14draw_instancedEiii8uint32_t8uint32_t", "d3d::draw_instanced::start_instance"], [33, 7, 1, "_CPPv4N3d3d14draw_instancedEiii8uint32_t8uint32_t", "d3d::draw_instanced::type"], [33, 6, 1, "_CPPv4N3d3d7draw_upEiiPKvi", "d3d::draw_up"], [33, 7, 1, "_CPPv4N3d3d7draw_upEiiPKvi", "d3d::draw_up::numprim"], [33, 7, 1, "_CPPv4N3d3d7draw_upEiiPKvi", "d3d::draw_up::ptr"], [33, 7, 1, "_CPPv4N3d3d7draw_upEiiPKvi", "d3d::draw_up::stride_bytes"], [33, 7, 1, "_CPPv4N3d3d7draw_upEiiPKvi", "d3d::draw_up::type"], [33, 6, 1, "_CPPv4N3d3d7drawindEiiii", "d3d::drawind"], [33, 7, 1, "_CPPv4N3d3d7drawindEiiii", "d3d::drawind::base_vertex"], [33, 7, 1, "_CPPv4N3d3d7drawindEiiii", "d3d::drawind::numprim"], [33, 7, 1, "_CPPv4N3d3d7drawindEiiii", "d3d::drawind::startind"], [33, 7, 1, "_CPPv4N3d3d7drawindEiiii", "d3d::drawind::type"], [33, 6, 1, "_CPPv4N3d3d12drawind_baseEiiii8uint32_t8uint32_t", "d3d::drawind_base"], [33, 7, 1, "_CPPv4N3d3d12drawind_baseEiiii8uint32_t8uint32_t", "d3d::drawind_base::base_vertex"], [33, 7, 1, "_CPPv4N3d3d12drawind_baseEiiii8uint32_t8uint32_t", "d3d::drawind_base::num_instances"], [33, 7, 1, "_CPPv4N3d3d12drawind_baseEiiii8uint32_t8uint32_t", "d3d::drawind_base::numprim"], [33, 7, 1, "_CPPv4N3d3d12drawind_baseEiiii8uint32_t8uint32_t", "d3d::drawind_base::start_instance"], [33, 7, 1, "_CPPv4N3d3d12drawind_baseEiiii8uint32_t8uint32_t", "d3d::drawind_base::startind"], [33, 7, 1, "_CPPv4N3d3d12drawind_baseEiiii8uint32_t8uint32_t", "d3d::drawind_base::type"], [33, 6, 1, "_CPPv4N3d3d17drawind_instancedEiiii8uint32_t8uint32_t", "d3d::drawind_instanced"], [33, 7, 1, "_CPPv4N3d3d17drawind_instancedEiiii8uint32_t8uint32_t", "d3d::drawind_instanced::base_vertex"], [33, 7, 1, "_CPPv4N3d3d17drawind_instancedEiiii8uint32_t8uint32_t", "d3d::drawind_instanced::num_instances"], [33, 7, 1, "_CPPv4N3d3d17drawind_instancedEiiii8uint32_t8uint32_t", "d3d::drawind_instanced::numprim"], [33, 7, 1, "_CPPv4N3d3d17drawind_instancedEiiii8uint32_t8uint32_t", "d3d::drawind_instanced::start_instance"], [33, 7, 1, "_CPPv4N3d3d17drawind_instancedEiiii8uint32_t8uint32_t", "d3d::drawind_instanced::startind"], [33, 7, 1, "_CPPv4N3d3d17drawind_instancedEiiii8uint32_t8uint32_t", "d3d::drawind_instanced::type"], [33, 6, 1, "_CPPv4N3d3d10drawind_upEiiiiPK8uint16_tPKvi", "d3d::drawind_up"], [33, 7, 1, "_CPPv4N3d3d10drawind_upEiiiiPK8uint16_tPKvi", "d3d::drawind_up::ind"], [33, 7, 1, "_CPPv4N3d3d10drawind_upEiiiiPK8uint16_tPKvi", "d3d::drawind_up::minvert"], [33, 7, 1, "_CPPv4N3d3d10drawind_upEiiiiPK8uint16_tPKvi", "d3d::drawind_up::numprim"], [33, 7, 1, "_CPPv4N3d3d10drawind_upEiiiiPK8uint16_tPKvi", "d3d::drawind_up::numvert"], [33, 7, 1, "_CPPv4N3d3d10drawind_upEiiiiPK8uint16_tPKvi", "d3d::drawind_up::ptr"], [33, 7, 1, "_CPPv4N3d3d10drawind_upEiiiiPK8uint16_tPKvi", "d3d::drawind_up::stride_bytes"], [33, 7, 1, "_CPPv4N3d3d10drawind_upEiiiiPK8uint16_tPKvi", "d3d::drawind_up::type"], [30, 6, 1, "_CPPv4N3d3d14driver_commandE12Drv3dCommandPvPvPv", "d3d::driver_command"], [30, 7, 1, "_CPPv4N3d3d14driver_commandE12Drv3dCommandPvPvPv", "d3d::driver_command::command"], [30, 7, 1, "_CPPv4N3d3d14driver_commandE12Drv3dCommandPvPvPv", "d3d::driver_command::par1"], [30, 7, 1, "_CPPv4N3d3d14driver_commandE12Drv3dCommandPvPvPv", "d3d::driver_command::par2"], [30, 7, 1, "_CPPv4N3d3d14driver_commandE12Drv3dCommandPvPvPv", "d3d::driver_command::par3"], [53, 6, 1, "_CPPv4N3d3d12enable_vsyncEb", "d3d::enable_vsync"], [53, 7, 1, "_CPPv4N3d3d12enable_vsyncEb", "d3d::enable_vsync::enable"], [53, 6, 1, "_CPPv4N3d3d8endEventEv", "d3d::endEvent"], [53, 6, 1, "_CPPv4N3d3d22end_conditional_renderEi", "d3d::end_conditional_render"], [53, 7, 1, "_CPPv4N3d3d22end_conditional_renderEi", "d3d::end_conditional_render::id"], [53, 6, 1, "_CPPv4N3d3d23end_fast_capture_screenEv", "d3d::end_fast_capture_screen"], [53, 6, 1, "_CPPv4N3d3d10end_surveyEi", "d3d::end_survey"], [53, 7, 1, "_CPPv4N3d3d10end_surveyEi", "d3d::end_survey::id"], [53, 6, 1, "_CPPv4N3d3d19fast_capture_screenERiRiRiRi", "d3d::fast_capture_screen"], [53, 7, 1, "_CPPv4N3d3d19fast_capture_screenERiRiRiRi", "d3d::fast_capture_screen::format"], [53, 7, 1, "_CPPv4N3d3d19fast_capture_screenERiRiRiRi", "d3d::fast_capture_screen::h"], [53, 7, 1, "_CPPv4N3d3d19fast_capture_screenERiRiRiRi", "d3d::fast_capture_screen::stride_bytes"], [53, 7, 1, "_CPPv4N3d3d19fast_capture_screenERiRiRiRi", "d3d::fast_capture_screen::w"], [53, 6, 1, "_CPPv4N3d3d20fill_interface_tableER17D3dInterfaceTable", "d3d::fill_interface_table"], [53, 7, 1, "_CPPv4N3d3d20fill_interface_tableER17D3dInterfaceTable", "d3d::fill_interface_table::d3dit"], [28, 6, 1, "_CPPv4N3d3d28free_bindless_resource_rangeE8uint32_t8uint32_t8uint32_t", "d3d::free_bindless_resource_range"], [28, 7, 1, "_CPPv4N3d3d28free_bindless_resource_rangeE8uint32_t8uint32_t8uint32_t", "d3d::free_bindless_resource_range::count"], [28, 7, 1, "_CPPv4N3d3d28free_bindless_resource_rangeE8uint32_t8uint32_t8uint32_t", "d3d::free_bindless_resource_range::index"], [28, 7, 1, "_CPPv4N3d3d28free_bindless_resource_rangeE8uint32_t8uint32_t8uint32_t", "d3d::free_bindless_resource_range::resource_type"], [53, 6, 1, "_CPPv4N3d3d14free_predicateEi", "d3d::free_predicate"], [53, 7, 1, "_CPPv4N3d3d14free_predicateEi", "d3d::free_predicate::id"], [41, 6, 1, "_CPPv4N3d3d18get_backbuffer_texEv", "d3d::get_backbuffer_tex"], [35, 6, 1, "_CPPv4N3d3d11get_contextEv", "d3d::get_context"], [35, 6, 1, "_CPPv4N3d3d25get_current_gpu_memory_kbEP8uint32_tP8uint32_t", "d3d::get_current_gpu_memory_kb"], [35, 7, 1, "_CPPv4N3d3d25get_current_gpu_memory_kbEP8uint32_tP8uint32_t", "d3d::get_current_gpu_memory_kb::dedicated_free"], [35, 7, 1, "_CPPv4N3d3d25get_current_gpu_memory_kbEP8uint32_tP8uint32_t", "d3d::get_current_gpu_memory_kb::dedicated_total"], [46, 6, 1, "_CPPv4N3d3d17get_debug_programEv", "d3d::get_debug_program"], [35, 6, 1, "_CPPv4N3d3d32get_dedicated_gpu_memory_size_kbEv", "d3d::get_dedicated_gpu_memory_size_kb"], [35, 6, 1, "_CPPv4N3d3d10get_deviceEv", "d3d::get_device"], [35, 6, 1, "_CPPv4N3d3d25get_device_driver_versionEv", "d3d::get_device_driver_version"], [35, 6, 1, "_CPPv4N3d3d15get_device_nameEv", "d3d::get_device_name"], [35, 6, 1, "_CPPv4N3d3d17get_display_scaleEv", "d3d::get_display_scale"], [35, 6, 1, "_CPPv4N3d3d15get_driver_codeEv", "d3d::get_driver_code"], [35, 6, 1, "_CPPv4N3d3d15get_driver_descEv", "d3d::get_driver_desc"], [35, 6, 1, "_CPPv4N3d3d15get_driver_nameEv", "d3d::get_driver_name"], [38, 6, 1, "_CPPv4N3d3d22get_event_query_statusEP10EventQueryb", "d3d::get_event_query_status"], [38, 7, 1, "_CPPv4N3d3d22get_event_query_statusEP10EventQueryb", "d3d::get_event_query_status::force_flush"], [38, 7, 1, "_CPPv4N3d3d22get_event_query_statusEP10EventQueryb", "d3d::get_event_query_status::query"], [35, 6, 1, "_CPPv4N3d3d37get_free_dedicated_gpu_memory_size_kbEv", "d3d::get_free_dedicated_gpu_memory_size_kb"], [35, 6, 1, "_CPPv4N3d3d19get_gpu_driver_dateEi", "d3d::get_gpu_driver_date"], [35, 7, 1, "_CPPv4N3d3d19get_gpu_driver_dateEi", "d3d::get_gpu_driver_date::vendor"], [35, 6, 1, "_CPPv4N3d3d12get_gpu_freqER6String", "d3d::get_gpu_freq"], [35, 7, 1, "_CPPv4N3d3d12get_gpu_freqER6String", "d3d::get_gpu_freq::out_freq"], [35, 6, 1, "_CPPv4N3d3d19get_gpu_temperatureEv", "d3d::get_gpu_temperature"], [35, 6, 1, "_CPPv4N3d3d14get_last_errorEv", "d3d::get_last_error"], [35, 6, 1, "_CPPv4N3d3d19get_last_error_codeEv", "d3d::get_last_error_code"], [54, 6, 1, "_CPPv4N3d3d20get_max_sample_countEi", "d3d::get_max_sample_count"], [54, 7, 1, "_CPPv4N3d3d20get_max_sample_countEi", "d3d::get_max_sample_count::cflg"], [41, 6, 1, "_CPPv4N3d3d17get_render_targetER20Driver3dRenderTarget", "d3d::get_render_target"], [41, 7, 1, "_CPPv4N3d3d17get_render_targetER20Driver3dRenderTarget", "d3d::get_render_target::out_rt"], [41, 6, 1, "_CPPv4N3d3d22get_render_target_sizeERiRiP11BaseTexture7uint8_t", "d3d::get_render_target_size"], [41, 7, 1, "_CPPv4N3d3d22get_render_target_sizeERiRiP11BaseTexture7uint8_t", "d3d::get_render_target_size::h"], [41, 7, 1, "_CPPv4N3d3d22get_render_target_sizeERiRiP11BaseTexture7uint8_t", "d3d::get_render_target_size::level"], [41, 7, 1, "_CPPv4N3d3d22get_render_target_sizeERiRiP11BaseTexture7uint8_t", "d3d::get_render_target_size::rt_tex"], [41, 7, 1, "_CPPv4N3d3d22get_render_target_sizeERiRiP11BaseTexture7uint8_t", "d3d::get_render_target_size::w"], [34, 6, 1, "_CPPv4N3d3d34get_resource_allocation_propertiesERK19ResourceDescription", "d3d::get_resource_allocation_properties"], [34, 7, 1, "_CPPv4N3d3d34get_resource_allocation_propertiesERK19ResourceDescription", "d3d::get_resource_allocation_properties::desc"], [34, 6, 1, "_CPPv4N3d3d34get_resource_heap_group_propertiesEP17ResourceHeapGroup", "d3d::get_resource_heap_group_properties"], [34, 7, 1, "_CPPv4N3d3d34get_resource_heap_group_propertiesEP17ResourceHeapGroup", "d3d::get_resource_heap_group_properties::heap_group"], [53, 6, 1, "_CPPv4N3d3d23get_screen_aspect_ratioEv", "d3d::get_screen_aspect_ratio"], [41, 6, 1, "_CPPv4N3d3d15get_screen_sizeERiRi", "d3d::get_screen_size"], [41, 7, 1, "_CPPv4N3d3d15get_screen_sizeERiRi", "d3d::get_screen_size::h"], [41, 7, 1, "_CPPv4N3d3d15get_screen_sizeERiRi", "d3d::get_screen_size::w"], [41, 6, 1, "_CPPv4N3d3d28get_secondary_backbuffer_texEv", "d3d::get_secondary_backbuffer_tex"], [41, 6, 1, "_CPPv4N3d3d15get_target_sizeERiRi", "d3d::get_target_size"], [41, 7, 1, "_CPPv4N3d3d15get_target_sizeERiRi", "d3d::get_target_size::h"], [41, 7, 1, "_CPPv4N3d3d15get_target_sizeERiRi", "d3d::get_target_size::w"], [54, 6, 1, "_CPPv4N3d3d19get_texformat_usageEii", "d3d::get_texformat_usage"], [54, 7, 1, "_CPPv4N3d3d19get_texformat_usageEii", "d3d::get_texformat_usage::cflg"], [54, 7, 1, "_CPPv4N3d3d19get_texformat_usageEii", "d3d::get_texformat_usage::restype"], [54, 6, 1, "_CPPv4N3d3d22get_texture_statisticsEP8uint32_tP8uint64_tP6String", "d3d::get_texture_statistics"], [54, 7, 1, "_CPPv4N3d3d22get_texture_statisticsEP8uint32_tP8uint64_tP6String", "d3d::get_texture_statistics::num_textures"], [54, 7, 1, "_CPPv4N3d3d22get_texture_statisticsEP8uint32_tP8uint64_tP6String", "d3d::get_texture_statistics::out_dump"], [54, 7, 1, "_CPPv4N3d3d22get_texture_statisticsEP8uint32_tP8uint64_tP6String", "d3d::get_texture_statistics::total_mem"], [48, 6, 1, "_CPPv4N3d3d23get_texture_tiling_infoEP11BaseTexture6size_t", "d3d::get_texture_tiling_info"], [48, 7, 1, "_CPPv4N3d3d23get_texture_tiling_infoEP11BaseTexture6size_t", "d3d::get_texture_tiling_info::subresource"], [48, 7, 1, "_CPPv4N3d3d23get_texture_tiling_infoEP11BaseTexture6size_t", "d3d::get_texture_tiling_info::tex"], [42, 6, 1, "_CPPv4N3d3d32get_update_buffer_addr_for_writeEP15ResUpdateBuffer", "d3d::get_update_buffer_addr_for_write"], [42, 7, 1, "_CPPv4N3d3d32get_update_buffer_addr_for_writeEP15ResUpdateBuffer", "d3d::get_update_buffer_addr_for_write::rub"], [42, 6, 1, "_CPPv4N3d3d23get_update_buffer_pitchEP15ResUpdateBuffer", "d3d::get_update_buffer_pitch"], [42, 7, 1, "_CPPv4N3d3d23get_update_buffer_pitchEP15ResUpdateBuffer", "d3d::get_update_buffer_pitch::rub"], [42, 6, 1, "_CPPv4N3d3d22get_update_buffer_sizeEP15ResUpdateBuffer", "d3d::get_update_buffer_size"], [42, 7, 1, "_CPPv4N3d3d22get_update_buffer_sizeEP15ResUpdateBuffer", "d3d::get_update_buffer_size::rub"], [42, 6, 1, "_CPPv4N3d3d29get_update_buffer_slice_pitchEP15ResUpdateBuffer", "d3d::get_update_buffer_slice_pitch"], [42, 7, 1, "_CPPv4N3d3d29get_update_buffer_slice_pitchEP15ResUpdateBuffer", "d3d::get_update_buffer_slice_pitch::rub"], [35, 6, 1, "_CPPv4N3d3d20get_video_vendor_strER6String", "d3d::get_video_vendor_str"], [35, 7, 1, "_CPPv4N3d3d20get_video_vendor_strER6String", "d3d::get_video_vendor_str::out_str"], [53, 6, 1, "_CPPv4N3d3d17get_vrr_supportedEv", "d3d::get_vrr_supported"], [53, 6, 1, "_CPPv4N3d3d17get_vsync_enabledEv", "d3d::get_vsync_enabled"], [37, 6, 1, "_CPPv4N3d3d9getglobtmER6mat44f", "d3d::getglobtm"], [37, 6, 1, "_CPPv4N3d3d9getglobtmER8Matrix44", "d3d::getglobtm"], [37, 7, 1, "_CPPv4N3d3d9getglobtmER6mat44f", "d3d::getglobtm::out"], [37, 7, 1, "_CPPv4N3d3d9getglobtmER8Matrix44", "d3d::getglobtm::out"], [37, 6, 1, "_CPPv4N3d3d8getm2vtmER7TMatrix", "d3d::getm2vtm"], [37, 7, 1, "_CPPv4N3d3d8getm2vtmER7TMatrix", "d3d::getm2vtm::out_m2v"], [37, 6, 1, "_CPPv4N3d3d8getperspER19Driver3dPerspective", "d3d::getpersp"], [37, 7, 1, "_CPPv4N3d3d8getperspER19Driver3dPerspective", "d3d::getpersp::p"], [37, 6, 1, "_CPPv4N3d3d5gettmEiP8Matrix44", "d3d::gettm"], [37, 6, 1, "_CPPv4N3d3d5gettmEiR6mat44f", "d3d::gettm"], [37, 6, 1, "_CPPv4N3d3d5gettmEiR7TMatrix", "d3d::gettm"], [37, 7, 1, "_CPPv4N3d3d5gettmEiP8Matrix44", "d3d::gettm::out_tm"], [37, 7, 1, "_CPPv4N3d3d5gettmEiR6mat44f", "d3d::gettm::out_tm"], [37, 7, 1, "_CPPv4N3d3d5gettmEiR7TMatrix", "d3d::gettm::out_tm"], [37, 7, 1, "_CPPv4N3d3d5gettmEiP8Matrix44", "d3d::gettm::which"], [37, 7, 1, "_CPPv4N3d3d5gettmEiR6mat44f", "d3d::gettm::which"], [37, 7, 1, "_CPPv4N3d3d5gettmEiR7TMatrix", "d3d::gettm::which"], [37, 6, 1, "_CPPv4N3d3d10gettm_crefEi", "d3d::gettm_cref"], [37, 7, 1, "_CPPv4N3d3d10gettm_crefEi", "d3d::gettm_cref::which"], [51, 6, 1, "_CPPv4N3d3d7getviewERiRiRiRiRfRf", "d3d::getview"], [51, 7, 1, "_CPPv4N3d3d7getviewERiRiRiRiRfRf", "d3d::getview::h"], [51, 7, 1, "_CPPv4N3d3d7getviewERiRiRiRiRfRf", "d3d::getview::maxz"], [51, 7, 1, "_CPPv4N3d3d7getviewERiRiRiRiRfRf", "d3d::getview::minz"], [51, 7, 1, "_CPPv4N3d3d7getviewERiRiRiRiRfRf", "d3d::getview::w"], [51, 7, 1, "_CPPv4N3d3d7getviewERiRiRiRiRfRf", "d3d::getview::x"], [51, 7, 1, "_CPPv4N3d3d7getviewERiRiRiRiRfRf", "d3d::getview::y"], [53, 6, 1, "_CPPv4N3d3d16gpu_latency_waitEv", "d3d::gpu_latency_wait"], [35, 6, 1, "_CPPv4N3d3d16guess_gpu_vendorEP6StringP8uint32_tP13DagorDateTimeP8uint32_t", "d3d::guess_gpu_vendor"], [35, 7, 1, "_CPPv4N3d3d16guess_gpu_vendorEP6StringP8uint32_tP13DagorDateTimeP8uint32_t", "d3d::guess_gpu_vendor::device_id"], [35, 7, 1, "_CPPv4N3d3d16guess_gpu_vendorEP6StringP8uint32_tP13DagorDateTimeP8uint32_t", "d3d::guess_gpu_vendor::out_drv_date"], [35, 7, 1, "_CPPv4N3d3d16guess_gpu_vendorEP6StringP8uint32_tP13DagorDateTimeP8uint32_t", "d3d::guess_gpu_vendor::out_drv_ver"], [35, 7, 1, "_CPPv4N3d3d16guess_gpu_vendorEP6StringP8uint32_tP13DagorDateTimeP8uint32_t", "d3d::guess_gpu_vendor::out_gpu_desc"], [53, 6, 1, "_CPPv4N3d3d11init_driverEv", "d3d::init_driver"], [53, 6, 1, "_CPPv4N3d3d10init_videoEPvP10main_wnd_fPKciRPvPvPvPKcP20Driver3dInitCallback", "d3d::init_video"], [53, 7, 1, "_CPPv4N3d3d10init_videoEPvP10main_wnd_fPKciRPvPvPvPKcP20Driver3dInitCallback", "d3d::init_video::cb"], [53, 7, 1, "_CPPv4N3d3d10init_videoEPvP10main_wnd_fPKciRPvPvPvPKcP20Driver3dInitCallback", "d3d::init_video::hicon"], [53, 7, 1, "_CPPv4N3d3d10init_videoEPvP10main_wnd_fPKciRPvPvPvPKcP20Driver3dInitCallback", "d3d::init_video::hinst"], [53, 7, 1, "_CPPv4N3d3d10init_videoEPvP10main_wnd_fPKciRPvPvPvPKcP20Driver3dInitCallback", "d3d::init_video::mainwnd"], [53, 7, 1, "_CPPv4N3d3d10init_videoEPvP10main_wnd_fPKciRPvPvPvPKcP20Driver3dInitCallback", "d3d::init_video::ncmdshow"], [53, 7, 1, "_CPPv4N3d3d10init_videoEPvP10main_wnd_fPKciRPvPvPvPKcP20Driver3dInitCallback", "d3d::init_video::renderwnd"], [53, 7, 1, "_CPPv4N3d3d10init_videoEPvP10main_wnd_fPKciRPvPvPvPKcP20Driver3dInitCallback", "d3d::init_video::title"], [53, 7, 1, "_CPPv4N3d3d10init_videoEPvP10main_wnd_fPKciRPvPvPvPKcP20Driver3dInitCallback", "d3d::init_video::wcname"], [53, 6, 1, "_CPPv4N3d3d12insert_fenceE11GpuPipeline", "d3d::insert_fence"], [53, 7, 1, "_CPPv4N3d3d12insert_fenceE11GpuPipeline", "d3d::insert_fence::gpu_pipeline"], [53, 6, 1, "_CPPv4N3d3d20insert_wait_on_fenceER14GPUFENCEHANDLE11GpuPipeline", "d3d::insert_wait_on_fence"], [53, 7, 1, "_CPPv4N3d3d20insert_wait_on_fenceER14GPUFENCEHANDLE11GpuPipeline", "d3d::insert_wait_on_fence::fence"], [53, 7, 1, "_CPPv4N3d3d20insert_wait_on_fenceER14GPUFENCEHANDLE11GpuPipeline", "d3d::insert_wait_on_fence::gpu_pipeline"], [35, 6, 1, "_CPPv4N3d3d22is_in_device_reset_nowEv", "d3d::is_in_device_reset_now"], [53, 6, 1, "_CPPv4N3d3d9is_initedEv", "d3d::is_inited"], [35, 6, 1, "_CPPv4N3d3d14is_stub_driverEv", "d3d::is_stub_driver"], [35, 6, 1, "_CPPv4N3d3d18is_window_occludedEv", "d3d::is_window_occluded"], [54, 6, 1, "_CPPv4N3d3d16issame_texformatEii", "d3d::issame_texformat"], [54, 7, 1, "_CPPv4N3d3d16issame_texformatEii", "d3d::issame_texformat::cflg1"], [54, 7, 1, "_CPPv4N3d3d16issame_texformatEii", "d3d::issame_texformat::cflg2"], [38, 6, 1, "_CPPv4N3d3d17issue_event_queryEP10EventQuery", "d3d::issue_event_query"], [38, 7, 1, "_CPPv4N3d3d17issue_event_queryEP10EventQuery", "d3d::issue_event_query::query"], [54, 6, 1, "_CPPv4N3d3d22load_ddsx_tex_contentsEP11BaseTextureRKN4ddsx6HeaderER8IGenLoadi", "d3d::load_ddsx_tex_contents"], [54, 7, 1, "_CPPv4N3d3d22load_ddsx_tex_contentsEP11BaseTextureRKN4ddsx6HeaderER8IGenLoadi", "d3d::load_ddsx_tex_contents::crd"], [54, 7, 1, "_CPPv4N3d3d22load_ddsx_tex_contentsEP11BaseTextureRKN4ddsx6HeaderER8IGenLoadi", "d3d::load_ddsx_tex_contents::hdr"], [54, 7, 1, "_CPPv4N3d3d22load_ddsx_tex_contentsEP11BaseTextureRKN4ddsx6HeaderER8IGenLoadi", "d3d::load_ddsx_tex_contents::q_id"], [54, 7, 1, "_CPPv4N3d3d22load_ddsx_tex_contentsEP11BaseTextureRKN4ddsx6HeaderER8IGenLoadi", "d3d::load_ddsx_tex_contents::t"], [48, 6, 1, "_CPPv4N3d3d20map_tile_to_resourceEP11BaseTextureP12ResourceHeapPK11TileMapping6size_t", "d3d::map_tile_to_resource"], [48, 7, 1, "_CPPv4N3d3d20map_tile_to_resourceEP11BaseTextureP12ResourceHeapPK11TileMapping6size_t", "d3d::map_tile_to_resource::heap"], [48, 7, 1, "_CPPv4N3d3d20map_tile_to_resourceEP11BaseTextureP12ResourceHeapPK11TileMapping6size_t", "d3d::map_tile_to_resource::mapping"], [48, 7, 1, "_CPPv4N3d3d20map_tile_to_resourceEP11BaseTextureP12ResourceHeapPK11TileMapping6size_t", "d3d::map_tile_to_resource::mapping_count"], [48, 7, 1, "_CPPv4N3d3d20map_tile_to_resourceEP11BaseTextureP12ResourceHeapPK11TileMapping6size_t", "d3d::map_tile_to_resource::tex"], [33, 6, 1, "_CPPv4N3d3d27multi_draw_indexed_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::multi_draw_indexed_indirect"], [33, 7, 1, "_CPPv4N3d3d27multi_draw_indexed_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::multi_draw_indexed_indirect::args"], [33, 7, 1, "_CPPv4N3d3d27multi_draw_indexed_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::multi_draw_indexed_indirect::byte_offset"], [33, 7, 1, "_CPPv4N3d3d27multi_draw_indexed_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::multi_draw_indexed_indirect::draw_count"], [33, 7, 1, "_CPPv4N3d3d27multi_draw_indexed_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::multi_draw_indexed_indirect::prim_type"], [33, 7, 1, "_CPPv4N3d3d27multi_draw_indexed_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::multi_draw_indexed_indirect::stride_bytes"], [33, 6, 1, "_CPPv4N3d3d19multi_draw_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::multi_draw_indirect"], [33, 7, 1, "_CPPv4N3d3d19multi_draw_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::multi_draw_indirect::args"], [33, 7, 1, "_CPPv4N3d3d19multi_draw_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::multi_draw_indirect::byte_offset"], [33, 7, 1, "_CPPv4N3d3d19multi_draw_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::multi_draw_indirect::draw_count"], [33, 7, 1, "_CPPv4N3d3d19multi_draw_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::multi_draw_indirect::prim_type"], [33, 7, 1, "_CPPv4N3d3d19multi_draw_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t", "d3d::multi_draw_indirect::stride_bytes"], [34, 6, 1, "_CPPv4N3d3d29place_buffer_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "d3d::place_buffer_in_resource_heap"], [34, 7, 1, "_CPPv4N3d3d29place_buffer_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "d3d::place_buffer_in_resource_heap::alloc_info"], [34, 7, 1, "_CPPv4N3d3d29place_buffer_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "d3d::place_buffer_in_resource_heap::desc"], [34, 7, 1, "_CPPv4N3d3d29place_buffer_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "d3d::place_buffer_in_resource_heap::heap"], [34, 7, 1, "_CPPv4N3d3d29place_buffer_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "d3d::place_buffer_in_resource_heap::name"], [34, 7, 1, "_CPPv4N3d3d29place_buffer_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "d3d::place_buffer_in_resource_heap::offset"], [34, 6, 1, "_CPPv4N3d3d30place_texture_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "d3d::place_texture_in_resource_heap"], [34, 7, 1, "_CPPv4N3d3d30place_texture_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "d3d::place_texture_in_resource_heap::alloc_info"], [34, 7, 1, "_CPPv4N3d3d30place_texture_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "d3d::place_texture_in_resource_heap::desc"], [34, 7, 1, "_CPPv4N3d3d30place_texture_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "d3d::place_texture_in_resource_heap::heap"], [34, 7, 1, "_CPPv4N3d3d30place_texture_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "d3d::place_texture_in_resource_heap::name"], [34, 7, 1, "_CPPv4N3d3d30place_texture_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "d3d::place_texture_in_resource_heap::offset"], [53, 6, 1, "_CPPv4N3d3d25prefetch_movable_texturesEv", "d3d::prefetch_movable_textures"], [53, 6, 1, "_CPPv4N3d3d19prepare_for_destroyEv", "d3d::prepare_for_destroy"], [53, 6, 1, "_CPPv4N3d3d41register_before_window_destroyed_callbackEN5eastl8functionIFvvEEE", "d3d::register_before_window_destroyed_callback"], [53, 7, 1, "_CPPv4N3d3d41register_before_window_destroyed_callbackEN5eastl8functionIFvvEEE", "d3d::register_before_window_destroyed_callback::callback"], [28, 6, 1, "_CPPv4N3d3d25register_bindless_samplerE13SamplerHandle", "d3d::register_bindless_sampler"], [28, 6, 1, "_CPPv4N3d3d25register_bindless_samplerEP11BaseTexture", "d3d::register_bindless_sampler"], [28, 7, 1, "_CPPv4N3d3d25register_bindless_samplerE13SamplerHandle", "d3d::register_bindless_sampler::sampler"], [28, 7, 1, "_CPPv4N3d3d25register_bindless_samplerEP11BaseTexture", "d3d::register_bindless_sampler::texture"], [53, 6, 1, "_CPPv4N3d3d22release_capture_bufferEv", "d3d::release_capture_buffer"], [47, 6, 1, "_CPPv4N3d3d16release_cb0_dataEj", "d3d::release_cb0_data"], [47, 7, 1, "_CPPv4N3d3d16release_cb0_dataEj", "d3d::release_cb0_data::stage"], [53, 6, 1, "_CPPv4N3d3d14release_driverEv", "d3d::release_driver"], [38, 6, 1, "_CPPv4N3d3d19release_event_queryEP10EventQuery", "d3d::release_event_query"], [38, 7, 1, "_CPPv4N3d3d19release_event_queryEP10EventQuery", "d3d::release_event_query::query"], [42, 6, 1, "_CPPv4N3d3d21release_update_bufferERP15ResUpdateBuffer", "d3d::release_update_buffer"], [42, 7, 1, "_CPPv4N3d3d21release_update_bufferERP15ResUpdateBuffer", "d3d::release_update_buffer::rub"], [45, 6, 1, "_CPPv4N3d3d15request_samplerERK11SamplerInfo", "d3d::request_sampler"], [45, 7, 1, "_CPPv4N3d3d15request_samplerERK11SamplerInfo", "d3d::request_sampler::sampler_info"], [53, 6, 1, "_CPPv4N3d3d12reset_deviceEv", "d3d::reset_device"], [53, 6, 1, "_CPPv4N3d3d18reset_esram_layoutEv", "d3d::reset_esram_layout"], [28, 6, 1, "_CPPv4N3d3d30resize_bindless_resource_rangeE8uint32_t8uint32_t8uint32_t8uint32_t", "d3d::resize_bindless_resource_range"], [28, 7, 1, "_CPPv4N3d3d30resize_bindless_resource_rangeE8uint32_t8uint32_t8uint32_t8uint32_t", "d3d::resize_bindless_resource_range::current_count"], [28, 7, 1, "_CPPv4N3d3d30resize_bindless_resource_rangeE8uint32_t8uint32_t8uint32_t8uint32_t", "d3d::resize_bindless_resource_range::index"], [28, 7, 1, "_CPPv4N3d3d30resize_bindless_resource_rangeE8uint32_t8uint32_t8uint32_t8uint32_t", "d3d::resize_bindless_resource_range::new_count"], [28, 7, 1, "_CPPv4N3d3d30resize_bindless_resource_rangeE8uint32_t8uint32_t8uint32_t8uint32_t", "d3d::resize_bindless_resource_range::resource_type"], [53, 6, 1, "_CPPv4N3d3d16resource_barrierE19ResourceBarrierDesc11GpuPipeline", "d3d::resource_barrier"], [53, 7, 1, "_CPPv4N3d3d16resource_barrierE19ResourceBarrierDesc11GpuPipeline", "d3d::resource_barrier::desc"], [53, 7, 1, "_CPPv4N3d3d16resource_barrierE19ResourceBarrierDesc11GpuPipeline", "d3d::resource_barrier::gpu_pipeline"], [53, 6, 1, "_CPPv4N3d3d17resummarize_htileEP11BaseTexture", "d3d::resummarize_htile"], [40, 6, 1, "_CPPv4N3d3d16set_blend_factorE8E3DCOLOR", "d3d::set_blend_factor"], [40, 7, 1, "_CPPv4N3d3d16set_blend_factorE8E3DCOLOR", "d3d::set_blend_factor::color"], [29, 6, 1, "_CPPv4N3d3d10set_bufferEjjP7Sbuffer", "d3d::set_buffer"], [29, 7, 1, "_CPPv4N3d3d10set_bufferEjjP7Sbuffer", "d3d::set_buffer::buffer"], [29, 7, 1, "_CPPv4N3d3d10set_bufferEjjP7Sbuffer", "d3d::set_buffer::shader_stage"], [29, 7, 1, "_CPPv4N3d3d10set_bufferEjjP7Sbuffer", "d3d::set_buffer::slot"], [47, 6, 1, "_CPPv4N3d3d12set_cb0_dataEjPKfj", "d3d::set_cb0_data"], [47, 7, 1, "_CPPv4N3d3d12set_cb0_dataEjPKfj", "d3d::set_cb0_data::data"], [47, 7, 1, "_CPPv4N3d3d12set_cb0_dataEjPKfj", "d3d::set_cb0_data::num_regs"], [47, 7, 1, "_CPPv4N3d3d12set_cb0_dataEjPKfj", "d3d::set_cb0_data::stage"], [47, 6, 1, "_CPPv4N3d3d9set_constEjjPKvj", "d3d::set_const"], [47, 7, 1, "_CPPv4N3d3d9set_constEjjPKvj", "d3d::set_const::data"], [47, 7, 1, "_CPPv4N3d3d9set_constEjjPKvj", "d3d::set_const::num_regs"], [47, 7, 1, "_CPPv4N3d3d9set_constEjjPKvj", "d3d::set_const::reg_base"], [47, 7, 1, "_CPPv4N3d3d9set_constEjjPKvj", "d3d::set_const::stage"], [47, 6, 1, "_CPPv4N3d3d16set_const_bufferEjjP7Sbuffer8uint32_t8uint32_t", "d3d::set_const_buffer"], [47, 6, 1, "_CPPv4N3d3d16set_const_bufferEjjPKfj", "d3d::set_const_buffer"], [47, 7, 1, "_CPPv4N3d3d16set_const_bufferEjjP7Sbuffer8uint32_t8uint32_t", "d3d::set_const_buffer::buffer"], [47, 7, 1, "_CPPv4N3d3d16set_const_bufferEjjP7Sbuffer8uint32_t8uint32_t", "d3d::set_const_buffer::consts_offset"], [47, 7, 1, "_CPPv4N3d3d16set_const_bufferEjjP7Sbuffer8uint32_t8uint32_t", "d3d::set_const_buffer::consts_size"], [47, 7, 1, "_CPPv4N3d3d16set_const_bufferEjjPKfj", "d3d::set_const_buffer::data"], [47, 7, 1, "_CPPv4N3d3d16set_const_bufferEjjPKfj", "d3d::set_const_buffer::num_regs"], [47, 7, 1, "_CPPv4N3d3d16set_const_bufferEjjP7Sbuffer8uint32_t8uint32_t", "d3d::set_const_buffer::slot"], [47, 7, 1, "_CPPv4N3d3d16set_const_bufferEjjPKfj", "d3d::set_const_buffer::slot"], [47, 7, 1, "_CPPv4N3d3d16set_const_bufferEjjP7Sbuffer8uint32_t8uint32_t", "d3d::set_const_buffer::stage"], [47, 7, 1, "_CPPv4N3d3d16set_const_bufferEjjPKfj", "d3d::set_const_buffer::stage"], [47, 6, 1, "_CPPv4N3d3d12set_cs_constEjPKvj", "d3d::set_cs_const"], [47, 7, 1, "_CPPv4N3d3d12set_cs_constEjPKvj", "d3d::set_cs_const::data"], [47, 7, 1, "_CPPv4N3d3d12set_cs_constEjPKvj", "d3d::set_cs_const::num_regs"], [47, 7, 1, "_CPPv4N3d3d12set_cs_constEjPKvj", "d3d::set_cs_const::reg_base"], [47, 6, 1, "_CPPv4N3d3d23set_cs_constbuffer_sizeEi", "d3d::set_cs_constbuffer_size"], [47, 7, 1, "_CPPv4N3d3d23set_cs_constbuffer_sizeEi", "d3d::set_cs_constbuffer_size::required_size"], [41, 6, 1, "_CPPv4N3d3d9set_depthEP11BaseTexture11DepthAccess", "d3d::set_depth"], [41, 6, 1, "_CPPv4N3d3d9set_depthEP11BaseTexturei11DepthAccess", "d3d::set_depth"], [41, 7, 1, "_CPPv4N3d3d9set_depthEP11BaseTexture11DepthAccess", "d3d::set_depth::access"], [41, 7, 1, "_CPPv4N3d3d9set_depthEP11BaseTexturei11DepthAccess", "d3d::set_depth::access"], [41, 7, 1, "_CPPv4N3d3d9set_depthEP11BaseTexturei11DepthAccess", "d3d::set_depth::layer"], [41, 7, 1, "_CPPv4N3d3d9set_depthEP11BaseTexture11DepthAccess", "d3d::set_depth::tex"], [41, 7, 1, "_CPPv4N3d3d9set_depthEP11BaseTexturei11DepthAccess", "d3d::set_depth::tex"], [40, 6, 1, "_CPPv4N3d3d16set_depth_boundsEff", "d3d::set_depth_bounds"], [40, 7, 1, "_CPPv4N3d3d16set_depth_boundsEff", "d3d::set_depth_bounds::zmax"], [40, 7, 1, "_CPPv4N3d3d16set_depth_boundsEff", "d3d::set_depth_bounds::zmin"], [53, 6, 1, "_CPPv4N3d3d16set_esram_layoutEPKw", "d3d::set_esram_layout"], [47, 6, 1, "_CPPv4N3d3d19set_immediate_constEjPK8uint32_tj", "d3d::set_immediate_const"], [47, 7, 1, "_CPPv4N3d3d19set_immediate_constEjPK8uint32_tj", "d3d::set_immediate_const::data"], [47, 7, 1, "_CPPv4N3d3d19set_immediate_constEjPK8uint32_tj", "d3d::set_immediate_const::num_words"], [47, 7, 1, "_CPPv4N3d3d19set_immediate_constEjPK8uint32_tj", "d3d::set_immediate_const::stage"], [46, 6, 1, "_CPPv4N3d3d11set_programE7PROGRAM", "d3d::set_program"], [46, 7, 1, "_CPPv4N3d3d11set_programE7PROGRAM", "d3d::set_program::program"], [47, 6, 1, "_CPPv4N3d3d12set_ps_constEjPKvj", "d3d::set_ps_const"], [47, 6, 1, "_CPPv4N3d3d13set_ps_const1Ejffff", "d3d::set_ps_const1"], [47, 7, 1, "_CPPv4N3d3d13set_ps_const1Ejffff", "d3d::set_ps_const1::reg"], [47, 7, 1, "_CPPv4N3d3d13set_ps_const1Ejffff", "d3d::set_ps_const1::v0"], [47, 7, 1, "_CPPv4N3d3d13set_ps_const1Ejffff", "d3d::set_ps_const1::v1"], [47, 7, 1, "_CPPv4N3d3d13set_ps_const1Ejffff", "d3d::set_ps_const1::v2"], [47, 7, 1, "_CPPv4N3d3d13set_ps_const1Ejffff", "d3d::set_ps_const1::v3"], [47, 7, 1, "_CPPv4N3d3d12set_ps_constEjPKvj", "d3d::set_ps_const::data"], [47, 7, 1, "_CPPv4N3d3d12set_ps_constEjPKvj", "d3d::set_ps_const::num_regs"], [47, 7, 1, "_CPPv4N3d3d12set_ps_constEjPKvj", "d3d::set_ps_const::reg_base"], [40, 6, 1, "_CPPv4N3d3d16set_render_stateEN7shaders19DriverRenderStateIdE", "d3d::set_render_state"], [40, 7, 1, "_CPPv4N3d3d16set_render_stateEN7shaders19DriverRenderStateIdE", "d3d::set_render_state::state_id"], [41, 6, 1, "_CPPv4N3d3d17set_render_targetE12RenderTarget11DepthAccessKNSt16initializer_listI12RenderTargetEE", "d3d::set_render_target"], [41, 6, 1, "_CPPv4N3d3d17set_render_targetE12RenderTarget11DepthAccessN3dag9ConstSpanI12RenderTargetEE", "d3d::set_render_target"], [41, 6, 1, "_CPPv4N3d3d17set_render_targetEP11BaseTexture7uint8_t", "d3d::set_render_target"], [41, 6, 1, "_CPPv4N3d3d17set_render_targetEP11BaseTexturei7uint8_t", "d3d::set_render_target"], [41, 6, 1, "_CPPv4N3d3d17set_render_targetERK20Driver3dRenderTarget", "d3d::set_render_target"], [41, 6, 1, "_CPPv4N3d3d17set_render_targetEiP11BaseTexture7uint8_t", "d3d::set_render_target"], [41, 6, 1, "_CPPv4N3d3d17set_render_targetEiP11BaseTexturei7uint8_t", "d3d::set_render_target"], [41, 6, 1, "_CPPv4N3d3d17set_render_targetEv", "d3d::set_render_target"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetE12RenderTarget11DepthAccessKNSt16initializer_listI12RenderTargetEE", "d3d::set_render_target::colors"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetE12RenderTarget11DepthAccessN3dag9ConstSpanI12RenderTargetEE", "d3d::set_render_target::colors"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetE12RenderTarget11DepthAccessKNSt16initializer_listI12RenderTargetEE", "d3d::set_render_target::depth"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetE12RenderTarget11DepthAccessN3dag9ConstSpanI12RenderTargetEE", "d3d::set_render_target::depth"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetE12RenderTarget11DepthAccessKNSt16initializer_listI12RenderTargetEE", "d3d::set_render_target::depth_access"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetE12RenderTarget11DepthAccessN3dag9ConstSpanI12RenderTargetEE", "d3d::set_render_target::depth_access"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetEP11BaseTexturei7uint8_t", "d3d::set_render_target::fc"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetEiP11BaseTexturei7uint8_t", "d3d::set_render_target::fc"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetEP11BaseTexture7uint8_t", "d3d::set_render_target::level"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetEP11BaseTexturei7uint8_t", "d3d::set_render_target::level"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetEiP11BaseTexture7uint8_t", "d3d::set_render_target::level"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetEiP11BaseTexturei7uint8_t", "d3d::set_render_target::level"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetERK20Driver3dRenderTarget", "d3d::set_render_target::rt"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetEiP11BaseTexture7uint8_t", "d3d::set_render_target::rt_index"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetEiP11BaseTexturei7uint8_t", "d3d::set_render_target::rt_index"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetEP11BaseTexture7uint8_t", "d3d::set_render_target::t"], [41, 7, 1, "_CPPv4N3d3d17set_render_targetEP11BaseTexturei7uint8_t", "d3d::set_render_target::t"], [29, 6, 1, "_CPPv4N3d3d12set_rwbufferEjjP7Sbuffer", "d3d::set_rwbuffer"], [29, 7, 1, "_CPPv4N3d3d12set_rwbufferEjjP7Sbuffer", "d3d::set_rwbuffer::buffer"], [29, 7, 1, "_CPPv4N3d3d12set_rwbufferEjjP7Sbuffer", "d3d::set_rwbuffer::shader_stage"], [29, 7, 1, "_CPPv4N3d3d12set_rwbufferEjjP7Sbuffer", "d3d::set_rwbuffer::slot"], [44, 6, 1, "_CPPv4N3d3d9set_rwtexE8uint32_t8uint32_tP11BaseTexture8uint32_t8uint32_tb", "d3d::set_rwtex"], [44, 7, 1, "_CPPv4N3d3d9set_rwtexE8uint32_t8uint32_tP11BaseTexture8uint32_t8uint32_tb", "d3d::set_rwtex::as_uint"], [44, 7, 1, "_CPPv4N3d3d9set_rwtexE8uint32_t8uint32_tP11BaseTexture8uint32_t8uint32_tb", "d3d::set_rwtex::face"], [44, 7, 1, "_CPPv4N3d3d9set_rwtexE8uint32_t8uint32_tP11BaseTexture8uint32_t8uint32_tb", "d3d::set_rwtex::mip_level"], [44, 7, 1, "_CPPv4N3d3d9set_rwtexE8uint32_t8uint32_tP11BaseTexture8uint32_t8uint32_tb", "d3d::set_rwtex::shader_stage"], [44, 7, 1, "_CPPv4N3d3d9set_rwtexE8uint32_t8uint32_tP11BaseTexture8uint32_t8uint32_tb", "d3d::set_rwtex::slot"], [44, 7, 1, "_CPPv4N3d3d9set_rwtexE8uint32_t8uint32_tP11BaseTexture8uint32_t8uint32_tb", "d3d::set_rwtex::tex"], [45, 6, 1, "_CPPv4N3d3d11set_samplerEjj13SamplerHandle", "d3d::set_sampler"], [45, 7, 1, "_CPPv4N3d3d11set_samplerEjj13SamplerHandle", "d3d::set_sampler::sampler"], [45, 7, 1, "_CPPv4N3d3d11set_samplerEjj13SamplerHandle", "d3d::set_sampler::shader_stage"], [45, 7, 1, "_CPPv4N3d3d11set_samplerEjj13SamplerHandle", "d3d::set_sampler::slot"], [53, 6, 1, "_CPPv4N3d3d25set_srgb_backbuffer_writeEb", "d3d::set_srgb_backbuffer_write"], [54, 6, 1, "_CPPv4N3d3d7set_texEjjP11BaseTextureb", "d3d::set_tex"], [54, 7, 1, "_CPPv4N3d3d7set_texEjjP11BaseTextureb", "d3d::set_tex::shader_stage"], [54, 7, 1, "_CPPv4N3d3d7set_texEjjP11BaseTextureb", "d3d::set_tex::slot"], [54, 7, 1, "_CPPv4N3d3d7set_texEjjP11BaseTextureb", "d3d::set_tex::tex"], [54, 7, 1, "_CPPv4N3d3d7set_texEjjP11BaseTextureb", "d3d::set_tex::use_sampler"], [49, 6, 1, "_CPPv4N3d3d25set_variable_rate_shadingEjj27VariableRateShadingCombiner27VariableRateShadingCombiner", "d3d::set_variable_rate_shading"], [49, 7, 1, "_CPPv4N3d3d25set_variable_rate_shadingEjj27VariableRateShadingCombiner27VariableRateShadingCombiner", "d3d::set_variable_rate_shading::pixel_combiner"], [49, 7, 1, "_CPPv4N3d3d25set_variable_rate_shadingEjj27VariableRateShadingCombiner27VariableRateShadingCombiner", "d3d::set_variable_rate_shading::rate_x"], [49, 7, 1, "_CPPv4N3d3d25set_variable_rate_shadingEjj27VariableRateShadingCombiner27VariableRateShadingCombiner", "d3d::set_variable_rate_shading::rate_y"], [49, 7, 1, "_CPPv4N3d3d25set_variable_rate_shadingEjj27VariableRateShadingCombiner27VariableRateShadingCombiner", "d3d::set_variable_rate_shading::vertex_combiner"], [49, 6, 1, "_CPPv4N3d3d33set_variable_rate_shading_textureEP11BaseTexture", "d3d::set_variable_rate_shading_texture"], [49, 7, 1, "_CPPv4N3d3d33set_variable_rate_shading_textureEP11BaseTexture", "d3d::set_variable_rate_shading_texture::rate_texture"], [47, 6, 1, "_CPPv4N3d3d12set_vs_constEjPKvj", "d3d::set_vs_const"], [47, 6, 1, "_CPPv4N3d3d13set_vs_const1Ejffff", "d3d::set_vs_const1"], [47, 7, 1, "_CPPv4N3d3d13set_vs_const1Ejffff", "d3d::set_vs_const1::reg"], [47, 7, 1, "_CPPv4N3d3d13set_vs_const1Ejffff", "d3d::set_vs_const1::v0"], [47, 7, 1, "_CPPv4N3d3d13set_vs_const1Ejffff", "d3d::set_vs_const1::v1"], [47, 7, 1, "_CPPv4N3d3d13set_vs_const1Ejffff", "d3d::set_vs_const1::v2"], [47, 7, 1, "_CPPv4N3d3d13set_vs_const1Ejffff", "d3d::set_vs_const1::v3"], [47, 7, 1, "_CPPv4N3d3d12set_vs_constEjPKvj", "d3d::set_vs_const::data"], [47, 7, 1, "_CPPv4N3d3d12set_vs_constEjPKvj", "d3d::set_vs_const::num_regs"], [47, 7, 1, "_CPPv4N3d3d12set_vs_constEjPKvj", "d3d::set_vs_const::reg_base"], [47, 6, 1, "_CPPv4N3d3d23set_vs_constbuffer_sizeEi", "d3d::set_vs_constbuffer_size"], [47, 7, 1, "_CPPv4N3d3d23set_vs_constbuffer_sizeEi", "d3d::set_vs_constbuffer_size::required_size"], [53, 6, 1, "_CPPv4N3d3d8setgammaEf", "d3d::setgamma"], [37, 6, 1, "_CPPv4N3d3d9setglobtmER8Matrix44", "d3d::setglobtm"], [37, 6, 1, "_CPPv4N3d3d9setglobtmERK6mat44f", "d3d::setglobtm"], [37, 7, 1, "_CPPv4N3d3d9setglobtmER8Matrix44", "d3d::setglobtm::globtm"], [37, 7, 1, "_CPPv4N3d3d9setglobtmERK6mat44f", "d3d::setglobtm::globtm"], [50, 6, 1, "_CPPv4N3d3d6setindEP7Sbuffer", "d3d::setind"], [50, 7, 1, "_CPPv4N3d3d6setindEP7Sbuffer", "d3d::setind::ib"], [37, 6, 1, "_CPPv4N3d3d8setperspERK19Driver3dPerspectiveP8TMatrix4", "d3d::setpersp"], [37, 7, 1, "_CPPv4N3d3d8setperspERK19Driver3dPerspectiveP8TMatrix4", "d3d::setpersp::p"], [37, 7, 1, "_CPPv4N3d3d8setperspERK19Driver3dPerspectiveP8TMatrix4", "d3d::setpersp::proj_tm"], [51, 6, 1, "_CPPv4N3d3d10setscissorEiiii", "d3d::setscissor"], [51, 7, 1, "_CPPv4N3d3d10setscissorEiiii", "d3d::setscissor::h"], [51, 7, 1, "_CPPv4N3d3d10setscissorEiiii", "d3d::setscissor::w"], [51, 7, 1, "_CPPv4N3d3d10setscissorEiiii", "d3d::setscissor::x"], [51, 7, 1, "_CPPv4N3d3d10setscissorEiiii", "d3d::setscissor::y"], [51, 6, 1, "_CPPv4N3d3d11setscissorsEN3dag9ConstSpanI11ScissorRectEE", "d3d::setscissors"], [51, 7, 1, "_CPPv4N3d3d11setscissorsEN3dag9ConstSpanI11ScissorRectEE", "d3d::setscissors::scissorRects"], [40, 6, 1, "_CPPv4N3d3d10setstencilE8uint32_t", "d3d::setstencil"], [40, 7, 1, "_CPPv4N3d3d10setstencilE8uint32_t", "d3d::setstencil::ref"], [54, 6, 1, "_CPPv4N3d3d6settexEiP11BaseTexture", "d3d::settex"], [54, 7, 1, "_CPPv4N3d3d6settexEiP11BaseTexture", "d3d::settex::slot"], [54, 7, 1, "_CPPv4N3d3d6settexEiP11BaseTexture", "d3d::settex::tex"], [54, 6, 1, "_CPPv4N3d3d9settex_vsEiP11BaseTexture", "d3d::settex_vs"], [54, 7, 1, "_CPPv4N3d3d9settex_vsEiP11BaseTexture", "d3d::settex_vs::slot"], [54, 7, 1, "_CPPv4N3d3d9settex_vsEiP11BaseTexture", "d3d::settex_vs::tex"], [37, 6, 1, "_CPPv4N3d3d5settmEiPK8Matrix44", "d3d::settm"], [37, 6, 1, "_CPPv4N3d3d5settmEiRK6mat44f", "d3d::settm"], [37, 6, 1, "_CPPv4N3d3d5settmEiRK7TMatrix", "d3d::settm"], [37, 7, 1, "_CPPv4N3d3d5settmEiPK8Matrix44", "d3d::settm::tm"], [37, 7, 1, "_CPPv4N3d3d5settmEiRK6mat44f", "d3d::settm::tm"], [37, 7, 1, "_CPPv4N3d3d5settmEiRK7TMatrix", "d3d::settm::tm"], [37, 7, 1, "_CPPv4N3d3d5settmEiPK8Matrix44", "d3d::settm::which"], [37, 7, 1, "_CPPv4N3d3d5settmEiRK6mat44f", "d3d::settm::which"], [37, 7, 1, "_CPPv4N3d3d5settmEiRK7TMatrix", "d3d::settm::which"], [50, 6, 1, "_CPPv4N3d3d8setvdeclE5VDECL", "d3d::setvdecl"], [50, 7, 1, "_CPPv4N3d3d8setvdeclE5VDECL", "d3d::setvdecl::vdecl"], [51, 6, 1, "_CPPv4N3d3d7setviewEiiiiff", "d3d::setview"], [51, 7, 1, "_CPPv4N3d3d7setviewEiiiiff", "d3d::setview::h"], [51, 7, 1, "_CPPv4N3d3d7setviewEiiiiff", "d3d::setview::maxz"], [51, 7, 1, "_CPPv4N3d3d7setviewEiiiiff", "d3d::setview::minz"], [51, 7, 1, "_CPPv4N3d3d7setviewEiiiiff", "d3d::setview::w"], [51, 7, 1, "_CPPv4N3d3d7setviewEiiiiff", "d3d::setview::x"], [51, 7, 1, "_CPPv4N3d3d7setviewEiiiiff", "d3d::setview::y"], [51, 6, 1, "_CPPv4N3d3d8setviewsEN3dag9ConstSpanI8ViewportEE", "d3d::setviews"], [51, 7, 1, "_CPPv4N3d3d8setviewsEN3dag9ConstSpanI8ViewportEE", "d3d::setviews::viewports"], [50, 6, 1, "_CPPv4N3d3d7setvsrcEiP7Sbufferi", "d3d::setvsrc"], [50, 7, 1, "_CPPv4N3d3d7setvsrcEiP7Sbufferi", "d3d::setvsrc::stream"], [50, 7, 1, "_CPPv4N3d3d7setvsrcEiP7Sbufferi", "d3d::setvsrc::stride_bytes"], [50, 7, 1, "_CPPv4N3d3d7setvsrcEiP7Sbufferi", "d3d::setvsrc::vb"], [50, 6, 1, "_CPPv4N3d3d10setvsrc_exEiP7Sbufferii", "d3d::setvsrc_ex"], [50, 7, 1, "_CPPv4N3d3d10setvsrc_exEiP7Sbufferii", "d3d::setvsrc_ex::offset"], [50, 7, 1, "_CPPv4N3d3d10setvsrc_exEiP7Sbufferii", "d3d::setvsrc_ex::stream"], [50, 7, 1, "_CPPv4N3d3d10setvsrc_exEiP7Sbufferii", "d3d::setvsrc_ex::stride_bytes"], [50, 7, 1, "_CPPv4N3d3d10setvsrc_exEiP7Sbufferii", "d3d::setvsrc_ex::vb"], [40, 6, 1, "_CPPv4N3d3d7setwireEb", "d3d::setwire"], [40, 7, 1, "_CPPv4N3d3d7setwireEb", "d3d::setwire::in"], [35, 6, 1, "_CPPv4N3d3d39should_use_compute_for_image_processingENSt16initializer_listIjEE", "d3d::should_use_compute_for_image_processing"], [35, 7, 1, "_CPPv4N3d3d39should_use_compute_for_image_processingENSt16initializer_listIjEE", "d3d::should_use_compute_for_image_processing::formats"], [54, 6, 1, "_CPPv4N3d3d12stretch_rectEP11BaseTextureP11BaseTextureP7RectIntP7RectInt", "d3d::stretch_rect"], [54, 7, 1, "_CPPv4N3d3d12stretch_rectEP11BaseTextureP11BaseTextureP7RectIntP7RectInt", "d3d::stretch_rect::dst"], [54, 7, 1, "_CPPv4N3d3d12stretch_rectEP11BaseTextureP11BaseTextureP7RectIntP7RectInt", "d3d::stretch_rect::rdst"], [54, 7, 1, "_CPPv4N3d3d12stretch_rectEP11BaseTextureP11BaseTextureP7RectIntP7RectInt", "d3d::stretch_rect::rsrc"], [54, 7, 1, "_CPPv4N3d3d12stretch_rectEP11BaseTextureP11BaseTextureP7RectIntP7RectInt", "d3d::stretch_rect::src"], [53, 6, 1, "_CPPv4N3d3d43unregister_before_window_destroyed_callbackEP27BeforeWindowDestroyedCookie", "d3d::unregister_before_window_destroyed_callback"], [53, 7, 1, "_CPPv4N3d3d43unregister_before_window_destroyed_callbackEP27BeforeWindowDestroyedCookie", "d3d::unregister_before_window_destroyed_callback::cookie"], [53, 6, 1, "_CPPv4N3d3d18unset_esram_layoutEv", "d3d::unset_esram_layout"], [28, 6, 1, "_CPPv4N3d3d24update_bindless_resourceE8uint32_tP11D3dResource", "d3d::update_bindless_resource"], [28, 7, 1, "_CPPv4N3d3d24update_bindless_resourceE8uint32_tP11D3dResource", "d3d::update_bindless_resource::index"], [28, 7, 1, "_CPPv4N3d3d24update_bindless_resourceE8uint32_tP11D3dResource", "d3d::update_bindless_resource::res"], [28, 6, 1, "_CPPv4N3d3d33update_bindless_resources_to_nullE8uint32_t8uint32_t8uint32_t", "d3d::update_bindless_resources_to_null"], [28, 7, 1, "_CPPv4N3d3d33update_bindless_resources_to_nullE8uint32_t8uint32_t8uint32_t", "d3d::update_bindless_resources_to_null::count"], [28, 7, 1, "_CPPv4N3d3d33update_bindless_resources_to_nullE8uint32_t8uint32_t8uint32_t", "d3d::update_bindless_resources_to_null::index"], [28, 7, 1, "_CPPv4N3d3d33update_bindless_resources_to_nullE8uint32_t8uint32_t8uint32_t", "d3d::update_bindless_resources_to_null::resource_type"], [53, 6, 1, "_CPPv4N3d3d13update_screenEb", "d3d::update_screen"], [53, 7, 1, "_CPPv4N3d3d13update_screenEb", "d3d::update_screen::app_active"], [42, 6, 1, "_CPPv4N3d3d40update_texture_and_release_update_bufferERP15ResUpdateBuffer", "d3d::update_texture_and_release_update_buffer"], [42, 7, 1, "_CPPv4N3d3d40update_texture_and_release_update_bufferERP15ResUpdateBuffer", "d3d::update_texture_and_release_update_buffer::src_rub"], [53, 6, 1, "_CPPv4N3d3d18update_window_modeEv", "d3d::update_window_mode"], [37, 6, 1, "_CPPv4N3d3d13validateperspERK19Driver3dPerspective", "d3d::validatepersp"], [37, 7, 1, "_CPPv4N3d3d13validateperspERK19Driver3dPerspective", "d3d::validatepersp::p"], [53, 6, 1, "_CPPv4N3d3d22wait_for_async_presentEb", "d3d::wait_for_async_present"], [53, 7, 1, "_CPPv4N3d3d22wait_for_async_presentEb", "d3d::wait_for_async_present::force"], [53, 6, 1, "_CPPv4N3d3d16window_destroyedEPv", "d3d::window_destroyed"], [53, 7, 1, "_CPPv4N3d3d16window_destroyedEPv", "d3d::window_destroyed::hwnd"], [53, 6, 1, "_CPPv4N3d3d26writeback_movable_texturesEv", "d3d::writeback_movable_textures"], [54, 6, 1, "_CPPv426d3d_load_ddsx_tex_contentsP11BaseTexture9TEXTUREID9TEXTUREIDRKN4ddsx6HeaderER8IGenLoadiij24on_tex_slice_loaded_cb_t", "d3d_load_ddsx_tex_contents"], [54, 7, 1, "_CPPv426d3d_load_ddsx_tex_contentsP11BaseTexture9TEXTUREID9TEXTUREIDRKN4ddsx6HeaderER8IGenLoadiij24on_tex_slice_loaded_cb_t", "d3d_load_ddsx_tex_contents::crd"], [54, 7, 1, "_CPPv426d3d_load_ddsx_tex_contentsP11BaseTexture9TEXTUREID9TEXTUREIDRKN4ddsx6HeaderER8IGenLoadiij24on_tex_slice_loaded_cb_t", "d3d_load_ddsx_tex_contents::hdr"], [54, 7, 1, "_CPPv426d3d_load_ddsx_tex_contentsP11BaseTexture9TEXTUREID9TEXTUREIDRKN4ddsx6HeaderER8IGenLoadiij24on_tex_slice_loaded_cb_t", "d3d_load_ddsx_tex_contents::on_tex_slice_loaded_cb"], [54, 7, 1, "_CPPv426d3d_load_ddsx_tex_contentsP11BaseTexture9TEXTUREID9TEXTUREIDRKN4ddsx6HeaderER8IGenLoadiij24on_tex_slice_loaded_cb_t", "d3d_load_ddsx_tex_contents::paired_tid"], [54, 7, 1, "_CPPv426d3d_load_ddsx_tex_contentsP11BaseTexture9TEXTUREID9TEXTUREIDRKN4ddsx6HeaderER8IGenLoadiij24on_tex_slice_loaded_cb_t", "d3d_load_ddsx_tex_contents::q_id"], [54, 7, 1, "_CPPv426d3d_load_ddsx_tex_contentsP11BaseTexture9TEXTUREID9TEXTUREIDRKN4ddsx6HeaderER8IGenLoadiij24on_tex_slice_loaded_cb_t", "d3d_load_ddsx_tex_contents::start_lev"], [54, 7, 1, "_CPPv426d3d_load_ddsx_tex_contentsP11BaseTexture9TEXTUREID9TEXTUREIDRKN4ddsx6HeaderER8IGenLoadiij24on_tex_slice_loaded_cb_t", "d3d_load_ddsx_tex_contents::tex"], [54, 7, 1, "_CPPv426d3d_load_ddsx_tex_contentsP11BaseTexture9TEXTUREID9TEXTUREIDRKN4ddsx6HeaderER8IGenLoadiij24on_tex_slice_loaded_cb_t", "d3d_load_ddsx_tex_contents::tex_ld_lev"], [54, 7, 1, "_CPPv426d3d_load_ddsx_tex_contentsP11BaseTexture9TEXTUREID9TEXTUREIDRKN4ddsx6HeaderER8IGenLoadiij24on_tex_slice_loaded_cb_t", "d3d_load_ddsx_tex_contents::tid"], [54, 4, 1, "_CPPv431d3d_load_ddsx_tex_contents_impl", "d3d_load_ddsx_tex_contents_impl"], [54, 4, 1, "_CPPv422d3d_load_ddsx_to_slice", "d3d_load_ddsx_to_slice"], [53, 6, 1, "_CPPv422d3derr_in_device_resetPKc", "d3derr_in_device_reset"], [53, 7, 1, "_CPPv422d3derr_in_device_resetPKc", "d3derr_in_device_reset::msg"], [62, 5, 1, "_CPPv45dabfg", "dabfg"], [62, 4, 1, "_CPPv4N5dabfg14AUTO_MIP_COUNTE", "dabfg::AUTO_MIP_COUNT"], [62, 3, 1, "_CPPv4I_iEN5dabfg21AutoResolutionRequestE", "dabfg::AutoResolutionRequest"], [62, 8, 1, "_CPPv4I_iEN5dabfg21AutoResolutionRequestE", "dabfg::AutoResolutionRequest::D"], [62, 6, 1, "_CPPv4NK5dabfg21AutoResolutionRequest3getEv", "dabfg::AutoResolutionRequest::get"], [62, 3, 1, "_CPPv4N5dabfg16BufferCreateInfoE", "dabfg::BufferCreateInfo"], [62, 4, 1, "_CPPv4N5dabfg16BufferCreateInfo12elementCountE", "dabfg::BufferCreateInfo::elementCount"], [62, 4, 1, "_CPPv4N5dabfg16BufferCreateInfo11elementSizeE", "dabfg::BufferCreateInfo::elementSize"], [62, 4, 1, "_CPPv4N5dabfg16BufferCreateInfo5flagsE", "dabfg::BufferCreateInfo::flags"], [62, 4, 1, "_CPPv4N5dabfg16BufferCreateInfo6formatE", "dabfg::BufferCreateInfo::format"], [59, 3, 1, "_CPPv4N5dabfg13ExternalStateE", "dabfg::ExternalState"], [59, 4, 1, "_CPPv4N5dabfg13ExternalState10vrsEnabledE", "dabfg::ExternalState::vrsEnabled"], [59, 4, 1, "_CPPv4N5dabfg13ExternalState20wireframeModeEnabledE", "dabfg::ExternalState::wireframeModeEnabled"], [59, 3, 1, "_CPPv4N5dabfg9NameSpaceE", "dabfg::NameSpace"], [59, 6, 1, "_CPPv4N5dabfg9NameSpace8fillSlotE9NamedSlot9NameSpacePKc", "dabfg::NameSpace::fillSlot"], [59, 7, 1, "_CPPv4N5dabfg9NameSpace8fillSlotE9NamedSlot9NameSpacePKc", "dabfg::NameSpace::fillSlot::res_name"], [59, 7, 1, "_CPPv4N5dabfg9NameSpace8fillSlotE9NamedSlot9NameSpacePKc", "dabfg::NameSpace::fillSlot::res_name_space"], [59, 7, 1, "_CPPv4N5dabfg9NameSpace8fillSlotE9NamedSlot9NameSpacePKc", "dabfg::NameSpace::fillSlot::slot"], [59, 6, 1, "_CPPv4N5dabfg9NameSpace30markResourceExternallyConsumedEPKc", "dabfg::NameSpace::markResourceExternallyConsumed"], [59, 7, 1, "_CPPv4N5dabfg9NameSpace30markResourceExternallyConsumedEPKc", "dabfg::NameSpace::markResourceExternallyConsumed::res_name"], [59, 6, 1, "_CPPv4NK5dabfg9NameSpacedvEPKc", "dabfg::NameSpace::operator/"], [59, 7, 1, "_CPPv4NK5dabfg9NameSpacedvEPKc", "dabfg::NameSpace::operator/::child_name"], [59, 6, 1, "_CPPv4I0ENK5dabfg9NameSpace12registerNodeE10NodeHandlePKcPKcRR1F", "dabfg::NameSpace::registerNode"], [59, 8, 1, "_CPPv4I0ENK5dabfg9NameSpace12registerNodeE10NodeHandlePKcPKcRR1F", "dabfg::NameSpace::registerNode::F"], [59, 7, 1, "_CPPv4I0ENK5dabfg9NameSpace12registerNodeE10NodeHandlePKcPKcRR1F", "dabfg::NameSpace::registerNode::declaration_callback"], [59, 7, 1, "_CPPv4I0ENK5dabfg9NameSpace12registerNodeE10NodeHandlePKcPKcRR1F", "dabfg::NameSpace::registerNode::name"], [59, 7, 1, "_CPPv4I0ENK5dabfg9NameSpace12registerNodeE10NodeHandlePKcPKcRR1F", "dabfg::NameSpace::registerNode::source_location"], [59, 6, 1, "_CPPv4I0EN5dabfg9NameSpace20setDynamicResolutionEvPKc1T", "dabfg::NameSpace::setDynamicResolution"], [59, 8, 1, "_CPPv4I0EN5dabfg9NameSpace20setDynamicResolutionEvPKc1T", "dabfg::NameSpace::setDynamicResolution::T"], [59, 7, 1, "_CPPv4I0EN5dabfg9NameSpace20setDynamicResolutionEvPKc1T", "dabfg::NameSpace::setDynamicResolution::type_name"], [59, 7, 1, "_CPPv4I0EN5dabfg9NameSpace20setDynamicResolutionEvPKc1T", "dabfg::NameSpace::setDynamicResolution::value"], [59, 6, 1, "_CPPv4I0EN5dabfg9NameSpace13setResolutionEvPKc1T", "dabfg::NameSpace::setResolution"], [59, 8, 1, "_CPPv4I0EN5dabfg9NameSpace13setResolutionEvPKc1T", "dabfg::NameSpace::setResolution::T"], [59, 7, 1, "_CPPv4I0EN5dabfg9NameSpace13setResolutionEvPKc1T", "dabfg::NameSpace::setResolution::type_name"], [59, 7, 1, "_CPPv4I0EN5dabfg9NameSpace13setResolutionEvPKc1T", "dabfg::NameSpace::setResolution::value"], [59, 6, 1, "_CPPv4N5dabfg9NameSpace32unmarkResourceExternallyConsumedEPKc", "dabfg::NameSpace::unmarkResourceExternallyConsumed"], [59, 7, 1, "_CPPv4N5dabfg9NameSpace32unmarkResourceExternallyConsumedEPKc", "dabfg::NameSpace::unmarkResourceExternallyConsumed::res_name"], [59, 6, 1, "_CPPv4N5dabfg9NameSpace35updateExternallyConsumedResourceSetEN5eastl4spanIPCKcEE", "dabfg::NameSpace::updateExternallyConsumedResourceSet"], [59, 6, 1, "_CPPv4N5dabfg9NameSpace35updateExternallyConsumedResourceSetENSt16initializer_listIPKcEE", "dabfg::NameSpace::updateExternallyConsumedResourceSet"], [59, 7, 1, "_CPPv4N5dabfg9NameSpace35updateExternallyConsumedResourceSetEN5eastl4spanIPCKcEE", "dabfg::NameSpace::updateExternallyConsumedResourceSet::res_names"], [59, 7, 1, "_CPPv4N5dabfg9NameSpace35updateExternallyConsumedResourceSetENSt16initializer_listIPKcEE", "dabfg::NameSpace::updateExternallyConsumedResourceSet::res_names"], [62, 3, 1, "_CPPv4N5dabfg16NameSpaceRequestE", "dabfg::NameSpaceRequest"], [62, 6, 1, "_CPPv4I_iENK5dabfg16NameSpaceRequest13getResolutionE21AutoResolutionRequestI1DEPKcf", "dabfg::NameSpaceRequest::getResolution"], [62, 8, 1, "_CPPv4I_iENK5dabfg16NameSpaceRequest13getResolutionE21AutoResolutionRequestI1DEPKcf", "dabfg::NameSpaceRequest::getResolution::D"], [62, 7, 1, "_CPPv4I_iENK5dabfg16NameSpaceRequest13getResolutionE21AutoResolutionRequestI1DEPKcf", "dabfg::NameSpaceRequest::getResolution::multiplier"], [62, 7, 1, "_CPPv4I_iENK5dabfg16NameSpaceRequest13getResolutionE21AutoResolutionRequestI1DEPKcf", "dabfg::NameSpaceRequest::getResolution::type_name"], [62, 6, 1, "_CPPv4NK5dabfg16NameSpaceRequest10historyForEPKc", "dabfg::NameSpaceRequest::historyFor"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest10historyForEPKc", "dabfg::NameSpaceRequest::historyFor::name"], [62, 6, 1, "_CPPv4NK5dabfg16NameSpaceRequest6modifyE9NamedSlot", "dabfg::NameSpaceRequest::modify"], [62, 6, 1, "_CPPv4NK5dabfg16NameSpaceRequest6modifyEPKc", "dabfg::NameSpaceRequest::modify"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest6modifyEPKc", "dabfg::NameSpaceRequest::modify::name"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest6modifyE9NamedSlot", "dabfg::NameSpaceRequest::modify::slot_name"], [62, 6, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest10modifyBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKc", "dabfg::NameSpaceRequest::modifyBlob"], [62, 8, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest10modifyBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKc", "dabfg::NameSpaceRequest::modifyBlob::T"], [62, 7, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest10modifyBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKc", "dabfg::NameSpaceRequest::modifyBlob::name"], [62, 6, 1, "_CPPv4NK5dabfg16NameSpaceRequest13modifyTextureE9NamedSlot", "dabfg::NameSpaceRequest::modifyTexture"], [62, 6, 1, "_CPPv4NK5dabfg16NameSpaceRequest13modifyTextureEPKc", "dabfg::NameSpaceRequest::modifyTexture"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest13modifyTextureEPKc", "dabfg::NameSpaceRequest::modifyTexture::name"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest13modifyTextureE9NamedSlot", "dabfg::NameSpaceRequest::modifyTexture::slot_name"], [62, 6, 1, "_CPPv4NK5dabfg16NameSpaceRequestdvEPKc", "dabfg::NameSpaceRequest::operator/"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequestdvEPKc", "dabfg::NameSpaceRequest::operator/::child_name"], [62, 6, 1, "_CPPv4NK5dabfg16NameSpaceRequest4readE9NamedSlot", "dabfg::NameSpaceRequest::read"], [62, 6, 1, "_CPPv4NK5dabfg16NameSpaceRequest4readEPKc", "dabfg::NameSpaceRequest::read"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest4readEPKc", "dabfg::NameSpaceRequest::read::name"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest4readE9NamedSlot", "dabfg::NameSpaceRequest::read::slot_name"], [62, 6, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest8readBlobE18VirtualBlobRequestI1T18NewRoRequestPolicyEPKc", "dabfg::NameSpaceRequest::readBlob"], [62, 8, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest8readBlobE18VirtualBlobRequestI1T18NewRoRequestPolicyEPKc", "dabfg::NameSpaceRequest::readBlob::T"], [62, 7, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest8readBlobE18VirtualBlobRequestI1T18NewRoRequestPolicyEPKc", "dabfg::NameSpaceRequest::readBlob::name"], [62, 6, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest15readBlobHistoryE18VirtualBlobRequestI1T20NewHistRequestPolicyEPKc", "dabfg::NameSpaceRequest::readBlobHistory"], [62, 8, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest15readBlobHistoryE18VirtualBlobRequestI1T20NewHistRequestPolicyEPKc", "dabfg::NameSpaceRequest::readBlobHistory::T"], [62, 7, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest15readBlobHistoryE18VirtualBlobRequestI1T20NewHistRequestPolicyEPKc", "dabfg::NameSpaceRequest::readBlobHistory::name"], [62, 6, 1, "_CPPv4NK5dabfg16NameSpaceRequest11readTextureE9NamedSlot", "dabfg::NameSpaceRequest::readTexture"], [62, 6, 1, "_CPPv4NK5dabfg16NameSpaceRequest11readTextureEPKc", "dabfg::NameSpaceRequest::readTexture"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest11readTextureEPKc", "dabfg::NameSpaceRequest::readTexture::name"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest11readTextureE9NamedSlot", "dabfg::NameSpaceRequest::readTexture::slot_name"], [62, 6, 1, "_CPPv4NK5dabfg16NameSpaceRequest18readTextureHistoryEPKc", "dabfg::NameSpaceRequest::readTextureHistory"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest18readTextureHistoryEPKc", "dabfg::NameSpaceRequest::readTextureHistory::name"], [62, 6, 1, "_CPPv4NK5dabfg16NameSpaceRequest6renameEPKcPKc7History", "dabfg::NameSpaceRequest::rename"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest6renameEPKcPKc7History", "dabfg::NameSpaceRequest::rename::from"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest6renameEPKcPKc7History", "dabfg::NameSpaceRequest::rename::history"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest6renameEPKcPKc7History", "dabfg::NameSpaceRequest::rename::to"], [62, 6, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest10renameBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKcPKc7History", "dabfg::NameSpaceRequest::renameBlob"], [62, 8, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest10renameBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKcPKc7History", "dabfg::NameSpaceRequest::renameBlob::T"], [62, 7, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest10renameBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKcPKc7History", "dabfg::NameSpaceRequest::renameBlob::from"], [62, 7, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest10renameBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKcPKc7History", "dabfg::NameSpaceRequest::renameBlob::history"], [62, 7, 1, "_CPPv4I0ENK5dabfg16NameSpaceRequest10renameBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKcPKc7History", "dabfg::NameSpaceRequest::renameBlob::to"], [62, 6, 1, "_CPPv4NK5dabfg16NameSpaceRequest13renameTextureEPKcPKc7History", "dabfg::NameSpaceRequest::renameTexture"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest13renameTextureEPKcPKc7History", "dabfg::NameSpaceRequest::renameTexture::from"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest13renameTextureEPKcPKc7History", "dabfg::NameSpaceRequest::renameTexture::history"], [62, 7, 1, "_CPPv4NK5dabfg16NameSpaceRequest13renameTextureEPKcPKc7History", "dabfg::NameSpaceRequest::renameTexture::to"], [62, 3, 1, "_CPPv4N5dabfg9NamedSlotE", "dabfg::NamedSlot"], [62, 6, 1, "_CPPv4N5dabfg9NamedSlot9NamedSlotEPKc", "dabfg::NamedSlot::NamedSlot"], [62, 7, 1, "_CPPv4N5dabfg9NamedSlot9NamedSlotEPKc", "dabfg::NamedSlot::NamedSlot::slot_name"], [62, 4, 1, "_CPPv4N5dabfg9NamedSlot4nameE", "dabfg::NamedSlot::name"], [63, 3, 1, "_CPPv4N5dabfg10NodeHandleE", "dabfg::NodeHandle"], [63, 6, 1, "_CPPv4N5dabfg10NodeHandle10NodeHandleERR10NodeHandle", "dabfg::NodeHandle::NodeHandle"], [63, 6, 1, "_CPPv4N5dabfg10NodeHandle10NodeHandleEv", "dabfg::NodeHandle::NodeHandle"], [63, 7, 1, "_CPPv4N5dabfg10NodeHandle10NodeHandleERR10NodeHandle", "dabfg::NodeHandle::NodeHandle::other"], [63, 6, 1, "_CPPv4NK5dabfg10NodeHandlecvbEv", "dabfg::NodeHandle::operator bool"], [63, 6, 1, "_CPPv4N5dabfg10NodeHandleaSERR10NodeHandle", "dabfg::NodeHandle::operator="], [63, 7, 1, "_CPPv4N5dabfg10NodeHandleaSERR10NodeHandle", "dabfg::NodeHandle::operator=::other"], [63, 6, 1, "_CPPv4NK5dabfg10NodeHandle5validEv", "dabfg::NodeHandle::valid"], [62, 3, 1, "_CPPv4N5dabfg8RegistryE", "dabfg::Registry"], [62, 6, 1, "_CPPv4N5dabfg8Registry19allowAsyncPipelinesEv", "dabfg::Registry::allowAsyncPipelines"], [62, 6, 1, "_CPPv4N5dabfg8Registry6createEPKc7History", "dabfg::Registry::create"], [62, 7, 1, "_CPPv4N5dabfg8Registry6createEPKc7History", "dabfg::Registry::create::history"], [62, 7, 1, "_CPPv4N5dabfg8Registry6createEPKc7History", "dabfg::Registry::create::name"], [62, 6, 1, "_CPPv4I0EN5dabfg8Registry10createBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKc7History", "dabfg::Registry::createBlob"], [62, 8, 1, "_CPPv4I0EN5dabfg8Registry10createBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKc7History", "dabfg::Registry::createBlob::T"], [62, 7, 1, "_CPPv4I0EN5dabfg8Registry10createBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKc7History", "dabfg::Registry::createBlob::history"], [62, 7, 1, "_CPPv4I0EN5dabfg8Registry10createBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKc7History", "dabfg::Registry::createBlob::name"], [62, 6, 1, "_CPPv4N5dabfg8Registry15createTexture2dEPKc7History19Texture2dCreateInfo", "dabfg::Registry::createTexture2d"], [62, 7, 1, "_CPPv4N5dabfg8Registry15createTexture2dEPKc7History19Texture2dCreateInfo", "dabfg::Registry::createTexture2d::history"], [62, 7, 1, "_CPPv4N5dabfg8Registry15createTexture2dEPKc7History19Texture2dCreateInfo", "dabfg::Registry::createTexture2d::info"], [62, 7, 1, "_CPPv4N5dabfg8Registry15createTexture2dEPKc7History19Texture2dCreateInfo", "dabfg::Registry::createTexture2d::name"], [62, 6, 1, "_CPPv4N5dabfg8Registry13currNameSpaceEv", "dabfg::Registry::currNameSpace"], [62, 6, 1, "_CPPv4N5dabfg8Registry12executionHasE11SideEffects", "dabfg::Registry::executionHas"], [62, 7, 1, "_CPPv4N5dabfg8Registry12executionHasE11SideEffects", "dabfg::Registry::executionHas::side_effect"], [62, 6, 1, "_CPPv4I_iENK5dabfg8Registry13getResolutionE21AutoResolutionRequestI1DEPKcf", "dabfg::Registry::getResolution"], [62, 8, 1, "_CPPv4I_iENK5dabfg8Registry13getResolutionE21AutoResolutionRequestI1DEPKcf", "dabfg::Registry::getResolution::D"], [62, 7, 1, "_CPPv4I_iENK5dabfg8Registry13getResolutionE21AutoResolutionRequestI1DEPKcf", "dabfg::Registry::getResolution::multiplier"], [62, 7, 1, "_CPPv4I_iENK5dabfg8Registry13getResolutionE21AutoResolutionRequestI1DEPKcf", "dabfg::Registry::getResolution::type_name"], [62, 6, 1, "_CPPv4NK5dabfg8Registry10historyForEPKc", "dabfg::Registry::historyFor"], [62, 7, 1, "_CPPv4NK5dabfg8Registry10historyForEPKc", "dabfg::Registry::historyFor::name"], [62, 6, 1, "_CPPv4NK5dabfg8Registry6modifyE9NamedSlot", "dabfg::Registry::modify"], [62, 6, 1, "_CPPv4NK5dabfg8Registry6modifyEPKc", "dabfg::Registry::modify"], [62, 7, 1, "_CPPv4NK5dabfg8Registry6modifyEPKc", "dabfg::Registry::modify::name"], [62, 7, 1, "_CPPv4NK5dabfg8Registry6modifyE9NamedSlot", "dabfg::Registry::modify::slot_name"], [62, 6, 1, "_CPPv4I0ENK5dabfg8Registry10modifyBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKc", "dabfg::Registry::modifyBlob"], [62, 8, 1, "_CPPv4I0ENK5dabfg8Registry10modifyBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKc", "dabfg::Registry::modifyBlob::T"], [62, 7, 1, "_CPPv4I0ENK5dabfg8Registry10modifyBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKc", "dabfg::Registry::modifyBlob::name"], [62, 6, 1, "_CPPv4NK5dabfg8Registry13modifyTextureE9NamedSlot", "dabfg::Registry::modifyTexture"], [62, 6, 1, "_CPPv4NK5dabfg8Registry13modifyTextureEPKc", "dabfg::Registry::modifyTexture"], [62, 7, 1, "_CPPv4NK5dabfg8Registry13modifyTextureEPKc", "dabfg::Registry::modifyTexture::name"], [62, 7, 1, "_CPPv4NK5dabfg8Registry13modifyTextureE9NamedSlot", "dabfg::Registry::modifyTexture::slot_name"], [62, 6, 1, "_CPPv4N5dabfg8Registry9multiplexEN12multiplexing4ModeE", "dabfg::Registry::multiplex"], [62, 7, 1, "_CPPv4N5dabfg8Registry9multiplexEN12multiplexing4ModeE", "dabfg::Registry::multiplex::mode"], [62, 6, 1, "_CPPv4N5dabfg8Registry12orderMeAfterENSt16initializer_listIPKcEE", "dabfg::Registry::orderMeAfter"], [62, 6, 1, "_CPPv4N5dabfg8Registry12orderMeAfterEPKc", "dabfg::Registry::orderMeAfter"], [62, 7, 1, "_CPPv4N5dabfg8Registry12orderMeAfterEPKc", "dabfg::Registry::orderMeAfter::name"], [62, 7, 1, "_CPPv4N5dabfg8Registry12orderMeAfterENSt16initializer_listIPKcEE", "dabfg::Registry::orderMeAfter::names"], [62, 6, 1, "_CPPv4N5dabfg8Registry13orderMeBeforeENSt16initializer_listIPKcEE", "dabfg::Registry::orderMeBefore"], [62, 6, 1, "_CPPv4N5dabfg8Registry13orderMeBeforeEPKc", "dabfg::Registry::orderMeBefore"], [62, 7, 1, "_CPPv4N5dabfg8Registry13orderMeBeforeEPKc", "dabfg::Registry::orderMeBefore::name"], [62, 7, 1, "_CPPv4N5dabfg8Registry13orderMeBeforeENSt16initializer_listIPKcEE", "dabfg::Registry::orderMeBefore::names"], [62, 6, 1, "_CPPv4NK5dabfg8Registry4readE9NamedSlot", "dabfg::Registry::read"], [62, 6, 1, "_CPPv4NK5dabfg8Registry4readEPKc", "dabfg::Registry::read"], [62, 7, 1, "_CPPv4NK5dabfg8Registry4readEPKc", "dabfg::Registry::read::name"], [62, 7, 1, "_CPPv4NK5dabfg8Registry4readE9NamedSlot", "dabfg::Registry::read::slot_name"], [62, 6, 1, "_CPPv4I0ENK5dabfg8Registry8readBlobE18VirtualBlobRequestI1T18NewRoRequestPolicyEPKc", "dabfg::Registry::readBlob"], [62, 8, 1, "_CPPv4I0ENK5dabfg8Registry8readBlobE18VirtualBlobRequestI1T18NewRoRequestPolicyEPKc", "dabfg::Registry::readBlob::T"], [62, 7, 1, "_CPPv4I0ENK5dabfg8Registry8readBlobE18VirtualBlobRequestI1T18NewRoRequestPolicyEPKc", "dabfg::Registry::readBlob::name"], [62, 6, 1, "_CPPv4I0ENK5dabfg8Registry15readBlobHistoryE18VirtualBlobRequestI1T20NewHistRequestPolicyEPKc", "dabfg::Registry::readBlobHistory"], [62, 8, 1, "_CPPv4I0ENK5dabfg8Registry15readBlobHistoryE18VirtualBlobRequestI1T20NewHistRequestPolicyEPKc", "dabfg::Registry::readBlobHistory::T"], [62, 7, 1, "_CPPv4I0ENK5dabfg8Registry15readBlobHistoryE18VirtualBlobRequestI1T20NewHistRequestPolicyEPKc", "dabfg::Registry::readBlobHistory::name"], [62, 6, 1, "_CPPv4NK5dabfg8Registry11readTextureE9NamedSlot", "dabfg::Registry::readTexture"], [62, 6, 1, "_CPPv4NK5dabfg8Registry11readTextureEPKc", "dabfg::Registry::readTexture"], [62, 7, 1, "_CPPv4NK5dabfg8Registry11readTextureEPKc", "dabfg::Registry::readTexture::name"], [62, 7, 1, "_CPPv4NK5dabfg8Registry11readTextureE9NamedSlot", "dabfg::Registry::readTexture::slot_name"], [62, 6, 1, "_CPPv4NK5dabfg8Registry18readTextureHistoryEPKc", "dabfg::Registry::readTextureHistory"], [62, 7, 1, "_CPPv4NK5dabfg8Registry18readTextureHistoryEPKc", "dabfg::Registry::readTextureHistory::name"], [62, 6, 1, "_CPPv4N5dabfg8Registry18registerBackBufferEPKc", "dabfg::Registry::registerBackBuffer"], [62, 7, 1, "_CPPv4N5dabfg8Registry18registerBackBufferEPKc", "dabfg::Registry::registerBackBuffer::name"], [62, 6, 1, "_CPPv4I0EN5dabfg8Registry14registerBufferE20VirtualBufferRequestI18NewRwRequestPolicyEPKcRR1F", "dabfg::Registry::registerBuffer"], [62, 8, 1, "_CPPv4I0EN5dabfg8Registry14registerBufferE20VirtualBufferRequestI18NewRwRequestPolicyEPKcRR1F", "dabfg::Registry::registerBuffer::F"], [62, 7, 1, "_CPPv4I0EN5dabfg8Registry14registerBufferE20VirtualBufferRequestI18NewRwRequestPolicyEPKcRR1F", "dabfg::Registry::registerBuffer::buffer_provider_callback"], [62, 7, 1, "_CPPv4I0EN5dabfg8Registry14registerBufferE20VirtualBufferRequestI18NewRwRequestPolicyEPKcRR1F", "dabfg::Registry::registerBuffer::name"], [62, 6, 1, "_CPPv4I0EN5dabfg8Registry17registerTexture2dE21VirtualTextureRequestI18NewRwRequestPolicyEPKcRR1F", "dabfg::Registry::registerTexture2d"], [62, 8, 1, "_CPPv4I0EN5dabfg8Registry17registerTexture2dE21VirtualTextureRequestI18NewRwRequestPolicyEPKcRR1F", "dabfg::Registry::registerTexture2d::F"], [62, 7, 1, "_CPPv4I0EN5dabfg8Registry17registerTexture2dE21VirtualTextureRequestI18NewRwRequestPolicyEPKcRR1F", "dabfg::Registry::registerTexture2d::name"], [62, 7, 1, "_CPPv4I0EN5dabfg8Registry17registerTexture2dE21VirtualTextureRequestI18NewRwRequestPolicyEPKcRR1F", "dabfg::Registry::registerTexture2d::texture_provider_callback"], [62, 6, 1, "_CPPv4NK5dabfg8Registry6renameEPKcPKc7History", "dabfg::Registry::rename"], [62, 7, 1, "_CPPv4NK5dabfg8Registry6renameEPKcPKc7History", "dabfg::Registry::rename::from"], [62, 7, 1, "_CPPv4NK5dabfg8Registry6renameEPKcPKc7History", "dabfg::Registry::rename::history"], [62, 7, 1, "_CPPv4NK5dabfg8Registry6renameEPKcPKc7History", "dabfg::Registry::rename::to"], [62, 6, 1, "_CPPv4I0ENK5dabfg8Registry10renameBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKcPKc7History", "dabfg::Registry::renameBlob"], [62, 8, 1, "_CPPv4I0ENK5dabfg8Registry10renameBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKcPKc7History", "dabfg::Registry::renameBlob::T"], [62, 7, 1, "_CPPv4I0ENK5dabfg8Registry10renameBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKcPKc7History", "dabfg::Registry::renameBlob::from"], [62, 7, 1, "_CPPv4I0ENK5dabfg8Registry10renameBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKcPKc7History", "dabfg::Registry::renameBlob::history"], [62, 7, 1, "_CPPv4I0ENK5dabfg8Registry10renameBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKcPKc7History", "dabfg::Registry::renameBlob::to"], [62, 6, 1, "_CPPv4NK5dabfg8Registry13renameTextureEPKcPKc7History", "dabfg::Registry::renameTexture"], [62, 7, 1, "_CPPv4NK5dabfg8Registry13renameTextureEPKcPKc7History", "dabfg::Registry::renameTexture::from"], [62, 7, 1, "_CPPv4NK5dabfg8Registry13renameTextureEPKcPKc7History", "dabfg::Registry::renameTexture::history"], [62, 7, 1, "_CPPv4NK5dabfg8Registry13renameTextureEPKcPKc7History", "dabfg::Registry::renameTexture::to"], [62, 6, 1, "_CPPv4N5dabfg8Registry17requestRenderPassEv", "dabfg::Registry::requestRenderPass"], [62, 6, 1, "_CPPv4N5dabfg8Registry12requestStateEv", "dabfg::Registry::requestState"], [62, 6, 1, "_CPPv4NK5dabfg8Registry4rootEv", "dabfg::Registry::root"], [62, 6, 1, "_CPPv4N5dabfg8Registry11setPriorityE10priority_t", "dabfg::Registry::setPriority"], [62, 7, 1, "_CPPv4N5dabfg8Registry11setPriorityE10priority_t", "dabfg::Registry::setPriority::prio"], [62, 3, 1, "_CPPv4N5dabfg12StateRequestE", "dabfg::StateRequest"], [62, 6, 1, "_CPPv4NO5dabfg12StateRequest14allowWireframeEv", "dabfg::StateRequest::allowWireframe"], [62, 6, 1, "_CPPv4NO5dabfg12StateRequest14enableOverrideEN7shaders13OverrideStateE", "dabfg::StateRequest::enableOverride"], [62, 7, 1, "_CPPv4NO5dabfg12StateRequest14enableOverrideEN7shaders13OverrideStateE", "dabfg::StateRequest::enableOverride::override"], [62, 6, 1, "_CPPv4NO5dabfg12StateRequest13setFrameBlockEPKc", "dabfg::StateRequest::setFrameBlock"], [62, 7, 1, "_CPPv4NO5dabfg12StateRequest13setFrameBlockEPKc", "dabfg::StateRequest::setFrameBlock::block"], [62, 6, 1, "_CPPv4NO5dabfg12StateRequest14setObjectBlockEPKc", "dabfg::StateRequest::setObjectBlock"], [62, 7, 1, "_CPPv4NO5dabfg12StateRequest14setObjectBlockEPKc", "dabfg::StateRequest::setObjectBlock::block"], [62, 6, 1, "_CPPv4NO5dabfg12StateRequest13setSceneBlockEPKc", "dabfg::StateRequest::setSceneBlock"], [62, 7, 1, "_CPPv4NO5dabfg12StateRequest13setSceneBlockEPKc", "dabfg::StateRequest::setSceneBlock::block"], [62, 6, 1, "_CPPv4NO5dabfg12StateRequest3vrsE11VrsSettings", "dabfg::StateRequest::vrs"], [62, 7, 1, "_CPPv4NO5dabfg12StateRequest3vrsE11VrsSettings", "dabfg::StateRequest::vrs::vrs"], [62, 3, 1, "_CPPv4N5dabfg19Texture2dCreateInfoE", "dabfg::Texture2dCreateInfo"], [62, 4, 1, "_CPPv4N5dabfg19Texture2dCreateInfo13creationFlagsE", "dabfg::Texture2dCreateInfo::creationFlags"], [62, 4, 1, "_CPPv4N5dabfg19Texture2dCreateInfo9mipLevelsE", "dabfg::Texture2dCreateInfo::mipLevels"], [62, 4, 1, "_CPPv4N5dabfg19Texture2dCreateInfo10resolutionE", "dabfg::Texture2dCreateInfo::resolution"], [62, 3, 1, "_CPPv4N5dabfg19Texture3dCreateInfoE", "dabfg::Texture3dCreateInfo"], [62, 4, 1, "_CPPv4N5dabfg19Texture3dCreateInfo13creationFlagsE", "dabfg::Texture3dCreateInfo::creationFlags"], [62, 4, 1, "_CPPv4N5dabfg19Texture3dCreateInfo9mipLevelsE", "dabfg::Texture3dCreateInfo::mipLevels"], [62, 4, 1, "_CPPv4N5dabfg19Texture3dCreateInfo10resolutionE", "dabfg::Texture3dCreateInfo::resolution"], [62, 3, 1, "_CPPv4N5dabfg18VirtualPassRequestE", "dabfg::VirtualPassRequest"], [62, 5, 1, "_CPPv4N5dabfg18VirtualPassRequest31ColorRwVirtualAttachmentRequestE", "dabfg::VirtualPassRequest::ColorRwVirtualAttachmentRequest"], [62, 5, 1, "_CPPv4N5dabfg18VirtualPassRequest40DepthRoAndSvBindVirtualAttachmentRequestE", "dabfg::VirtualPassRequest::DepthRoAndSvBindVirtualAttachmentRequest"], [62, 5, 1, "_CPPv4N5dabfg18VirtualPassRequest31DepthRoVirtualAttachmentRequestE", "dabfg::VirtualPassRequest::DepthRoVirtualAttachmentRequest"], [62, 5, 1, "_CPPv4N5dabfg18VirtualPassRequest26RoVirtualAttachmentRequestE", "dabfg::VirtualPassRequest::RoVirtualAttachmentRequest"], [62, 5, 1, "_CPPv4N5dabfg18VirtualPassRequest26RwVirtualAttachmentRequestE", "dabfg::VirtualPassRequest::RwVirtualAttachmentRequest"], [62, 6, 1, "_CPPv4I_DaENO5dabfg18VirtualPassRequest5clearE18VirtualPassRequest26RwVirtualAttachmentRequestPKc", "dabfg::VirtualPassRequest::clear"], [62, 6, 1, "_CPPv4NO5dabfg18VirtualPassRequest5clearE26RwVirtualAttachmentRequest18ResourceClearValue", "dabfg::VirtualPassRequest::clear"], [62, 6, 1, "_CPPv4NO5dabfg18VirtualPassRequest5clearE26RwVirtualAttachmentRequestPKc", "dabfg::VirtualPassRequest::clear"], [62, 7, 1, "_CPPv4I_DaENO5dabfg18VirtualPassRequest5clearE18VirtualPassRequest26RwVirtualAttachmentRequestPKc", "dabfg::VirtualPassRequest::clear::attachment"], [62, 7, 1, "_CPPv4NO5dabfg18VirtualPassRequest5clearE26RwVirtualAttachmentRequest18ResourceClearValue", "dabfg::VirtualPassRequest::clear::attachment"], [62, 7, 1, "_CPPv4NO5dabfg18VirtualPassRequest5clearE26RwVirtualAttachmentRequestPKc", "dabfg::VirtualPassRequest::clear::attachment"], [62, 7, 1, "_CPPv4NO5dabfg18VirtualPassRequest5clearE26RwVirtualAttachmentRequest18ResourceClearValue", "dabfg::VirtualPassRequest::clear::color"], [62, 7, 1, "_CPPv4I_DaENO5dabfg18VirtualPassRequest5clearE18VirtualPassRequest26RwVirtualAttachmentRequestPKc", "dabfg::VirtualPassRequest::clear::color_blob"], [62, 7, 1, "_CPPv4NO5dabfg18VirtualPassRequest5clearE26RwVirtualAttachmentRequestPKc", "dabfg::VirtualPassRequest::clear::color_blob"], [62, 8, 1, "_CPPv4I_DaENO5dabfg18VirtualPassRequest5clearE18VirtualPassRequest26RwVirtualAttachmentRequestPKc", "dabfg::VirtualPassRequest::clear::projector"], [62, 6, 1, "_CPPv4NO5dabfg18VirtualPassRequest5colorENSt16initializer_listI31ColorRwVirtualAttachmentRequestEE", "dabfg::VirtualPassRequest::color"], [62, 7, 1, "_CPPv4NO5dabfg18VirtualPassRequest5colorENSt16initializer_listI31ColorRwVirtualAttachmentRequestEE", "dabfg::VirtualPassRequest::color::attachments"], [62, 6, 1, "_CPPv4NO5dabfg18VirtualPassRequest26depthRoAndBindToShaderVarsE40DepthRoAndSvBindVirtualAttachmentRequestNSt16initializer_listIPKcEE", "dabfg::VirtualPassRequest::depthRoAndBindToShaderVars"], [62, 7, 1, "_CPPv4NO5dabfg18VirtualPassRequest26depthRoAndBindToShaderVarsE40DepthRoAndSvBindVirtualAttachmentRequestNSt16initializer_listIPKcEE", "dabfg::VirtualPassRequest::depthRoAndBindToShaderVars::attachment"], [62, 7, 1, "_CPPv4NO5dabfg18VirtualPassRequest26depthRoAndBindToShaderVarsE40DepthRoAndSvBindVirtualAttachmentRequestNSt16initializer_listIPKcEE", "dabfg::VirtualPassRequest::depthRoAndBindToShaderVars::shader_var_names"], [62, 6, 1, "_CPPv4NO5dabfg18VirtualPassRequest7depthRwE26RwVirtualAttachmentRequest", "dabfg::VirtualPassRequest::depthRw"], [62, 7, 1, "_CPPv4NO5dabfg18VirtualPassRequest7depthRwE26RwVirtualAttachmentRequest", "dabfg::VirtualPassRequest::depthRw::attachment"], [62, 6, 1, "_CPPv4NO5dabfg18VirtualPassRequest7resolveE26RwVirtualAttachmentRequest26RwVirtualAttachmentRequest", "dabfg::VirtualPassRequest::resolve"], [62, 7, 1, "_CPPv4NO5dabfg18VirtualPassRequest7resolveE26RwVirtualAttachmentRequest26RwVirtualAttachmentRequest", "dabfg::VirtualPassRequest::resolve::from"], [62, 7, 1, "_CPPv4NO5dabfg18VirtualPassRequest7resolveE26RwVirtualAttachmentRequest26RwVirtualAttachmentRequest", "dabfg::VirtualPassRequest::resolve::to"], [62, 6, 1, "_CPPv4NO5dabfg18VirtualPassRequest7vrsRateE26RoVirtualAttachmentRequest", "dabfg::VirtualPassRequest::vrsRate"], [62, 7, 1, "_CPPv4NO5dabfg18VirtualPassRequest7vrsRateE26RoVirtualAttachmentRequest", "dabfg::VirtualPassRequest::vrsRate::attachment"], [62, 3, 1, "_CPPv4N5dabfg34VirtualResourceCreationSemiRequestE", "dabfg::VirtualResourceCreationSemiRequest"], [62, 6, 1, "_CPPv4I0ENO5dabfg34VirtualResourceCreationSemiRequest4blobE22VirtualResourceRequestI1TN3RRP4NoneEEK1T", "dabfg::VirtualResourceCreationSemiRequest::blob"], [62, 6, 1, "_CPPv4I0ENO5dabfg34VirtualResourceCreationSemiRequest4blobE22VirtualResourceRequestI1TN3RRP4NoneEEv", "dabfg::VirtualResourceCreationSemiRequest::blob"], [62, 8, 1, "_CPPv4I0ENO5dabfg34VirtualResourceCreationSemiRequest4blobE22VirtualResourceRequestI1TN3RRP4NoneEEK1T", "dabfg::VirtualResourceCreationSemiRequest::blob::T"], [62, 8, 1, "_CPPv4I0ENO5dabfg34VirtualResourceCreationSemiRequest4blobE22VirtualResourceRequestI1TN3RRP4NoneEEv", "dabfg::VirtualResourceCreationSemiRequest::blob::T"], [62, 7, 1, "_CPPv4I0ENO5dabfg34VirtualResourceCreationSemiRequest4blobE22VirtualResourceRequestI1TN3RRP4NoneEEK1T", "dabfg::VirtualResourceCreationSemiRequest::blob::defaultValue"], [62, 6, 1, "_CPPv4NO5dabfg34VirtualResourceCreationSemiRequest6bufferERK16BufferCreateInfo", "dabfg::VirtualResourceCreationSemiRequest::buffer"], [62, 7, 1, "_CPPv4NO5dabfg34VirtualResourceCreationSemiRequest6bufferERK16BufferCreateInfo", "dabfg::VirtualResourceCreationSemiRequest::buffer::info"], [62, 6, 1, "_CPPv4NO5dabfg34VirtualResourceCreationSemiRequest7textureERK19Texture2dCreateInfo", "dabfg::VirtualResourceCreationSemiRequest::texture"], [62, 6, 1, "_CPPv4NO5dabfg34VirtualResourceCreationSemiRequest7textureERK19Texture3dCreateInfo", "dabfg::VirtualResourceCreationSemiRequest::texture"], [62, 7, 1, "_CPPv4NO5dabfg34VirtualResourceCreationSemiRequest7textureERK19Texture2dCreateInfo", "dabfg::VirtualResourceCreationSemiRequest::texture::info"], [62, 7, 1, "_CPPv4NO5dabfg34VirtualResourceCreationSemiRequest7textureERK19Texture3dCreateInfo", "dabfg::VirtualResourceCreationSemiRequest::texture::info"], [64, 3, 1, "_CPPv4I0_b_bEN5dabfg21VirtualResourceHandleE", "dabfg::VirtualResourceHandle"], [64, 8, 1, "_CPPv4I0_b_bEN5dabfg21VirtualResourceHandleE", "dabfg::VirtualResourceHandle::Res"], [64, 6, 1, "_CPPv4NKR5dabfg21VirtualResourceHandle8d3dResIdEv", "dabfg::VirtualResourceHandle::d3dResId"], [64, 6, 1, "_CPPv4NKR5dabfg21VirtualResourceHandle3getEv", "dabfg::VirtualResourceHandle::get"], [64, 8, 1, "_CPPv4I0_b_bEN5dabfg21VirtualResourceHandleE", "dabfg::VirtualResourceHandle::gpu"], [64, 8, 1, "_CPPv4I0_b_bEN5dabfg21VirtualResourceHandleE", "dabfg::VirtualResourceHandle::optional"], [64, 6, 1, "_CPPv4NKR5dabfg21VirtualResourceHandle3refEv", "dabfg::VirtualResourceHandle::ref"], [64, 6, 1, "_CPPv4NKR5dabfg21VirtualResourceHandle4viewEv", "dabfg::VirtualResourceHandle::view"], [62, 3, 1, "_CPPv4I0_N6detail21ResourceRequestPolicyEEN5dabfg22VirtualResourceRequestE", "dabfg::VirtualResourceRequest"], [62, 8, 1, "_CPPv4I0_N6detail21ResourceRequestPolicyEEN5dabfg22VirtualResourceRequestE", "dabfg::VirtualResourceRequest::Res"], [62, 6, 1, "_CPPv4NO5dabfg22VirtualResourceRequest7atStageE5Stage", "dabfg::VirtualResourceRequest::atStage"], [62, 7, 1, "_CPPv4NO5dabfg22VirtualResourceRequest7atStageE5Stage", "dabfg::VirtualResourceRequest::atStage::stage"], [62, 6, 1, "_CPPv4I_Da0ENO5dabfg22VirtualResourceRequest10bindAsProjE22VirtualResourceRequestI3Res6policyEv", "dabfg::VirtualResourceRequest::bindAsProj"], [62, 6, 1, "_CPPv4NO5dabfg22VirtualResourceRequest10bindAsProjEv", "dabfg::VirtualResourceRequest::bindAsProj"], [62, 8, 1, "_CPPv4I_Da0ENO5dabfg22VirtualResourceRequest10bindAsProjE22VirtualResourceRequestI3Res6policyEv", "dabfg::VirtualResourceRequest::bindAsProj::projector"], [62, 6, 1, "_CPPv4I_Da0ENO5dabfg22VirtualResourceRequest10bindAsViewE22VirtualResourceRequestI3Res6policyEv", "dabfg::VirtualResourceRequest::bindAsView"], [62, 6, 1, "_CPPv4NO5dabfg22VirtualResourceRequest10bindAsViewEv", "dabfg::VirtualResourceRequest::bindAsView"], [62, 8, 1, "_CPPv4I_Da0ENO5dabfg22VirtualResourceRequest10bindAsViewE22VirtualResourceRequestI3Res6policyEv", "dabfg::VirtualResourceRequest::bindAsView::projector"], [62, 6, 1, "_CPPv4I_Da0ENO5dabfg22VirtualResourceRequest15bindToShaderVarE22VirtualResourceRequestI3Res6policyEPKc", "dabfg::VirtualResourceRequest::bindToShaderVar"], [62, 6, 1, "_CPPv4NO5dabfg22VirtualResourceRequest15bindToShaderVarEPKc", "dabfg::VirtualResourceRequest::bindToShaderVar"], [62, 8, 1, "_CPPv4I_Da0ENO5dabfg22VirtualResourceRequest15bindToShaderVarE22VirtualResourceRequestI3Res6policyEPKc", "dabfg::VirtualResourceRequest::bindToShaderVar::projector"], [62, 7, 1, "_CPPv4I_Da0ENO5dabfg22VirtualResourceRequest15bindToShaderVarE22VirtualResourceRequestI3Res6policyEPKc", "dabfg::VirtualResourceRequest::bindToShaderVar::shader_var_name"], [62, 7, 1, "_CPPv4NO5dabfg22VirtualResourceRequest15bindToShaderVarEPKc", "dabfg::VirtualResourceRequest::bindToShaderVar::shader_var_name"], [62, 6, 1, "_CPPv4NO5dabfg22VirtualResourceRequest6handleEv", "dabfg::VirtualResourceRequest::handle"], [62, 6, 1, "_CPPv4NO5dabfg22VirtualResourceRequest8optionalEv", "dabfg::VirtualResourceRequest::optional"], [62, 8, 1, "_CPPv4I0_N6detail21ResourceRequestPolicyEEN5dabfg22VirtualResourceRequestE", "dabfg::VirtualResourceRequest::policy"], [62, 6, 1, "_CPPv4NO5dabfg22VirtualResourceRequest5useAsE5Usage", "dabfg::VirtualResourceRequest::useAs"], [62, 7, 1, "_CPPv4NO5dabfg22VirtualResourceRequest5useAsE5Usage", "dabfg::VirtualResourceRequest::useAs::type"], [62, 3, 1, "_CPPv4I_N6detail21ResourceRequestPolicyEEN5dabfg26VirtualResourceSemiRequestE", "dabfg::VirtualResourceSemiRequest"], [62, 6, 1, "_CPPv4I0ENO5dabfg26VirtualResourceSemiRequest4blobE22VirtualResourceRequestI1T6policyEv", "dabfg::VirtualResourceSemiRequest::blob"], [62, 8, 1, "_CPPv4I0ENO5dabfg26VirtualResourceSemiRequest4blobE22VirtualResourceRequestI1T6policyEv", "dabfg::VirtualResourceSemiRequest::blob::T"], [62, 6, 1, "_CPPv4NO5dabfg26VirtualResourceSemiRequest6bufferEv", "dabfg::VirtualResourceSemiRequest::buffer"], [62, 8, 1, "_CPPv4I_N6detail21ResourceRequestPolicyEEN5dabfg26VirtualResourceSemiRequestE", "dabfg::VirtualResourceSemiRequest::policy"], [62, 6, 1, "_CPPv4NO5dabfg26VirtualResourceSemiRequest7textureEv", "dabfg::VirtualResourceSemiRequest::texture"], [62, 5, 1, "_CPPv4N5dabfg12multiplexingE", "dabfg::multiplexing"], [62, 3, 1, "_CPPv4N5dabfg12multiplexing7ExtentsE", "dabfg::multiplexing::Extents"], [62, 4, 1, "_CPPv4N5dabfg12multiplexing7Extents10subSamplesE", "dabfg::multiplexing::Extents::subSamples"], [62, 4, 1, "_CPPv4N5dabfg12multiplexing7Extents12superSamplesE", "dabfg::multiplexing::Extents::superSamples"], [62, 4, 1, "_CPPv4N5dabfg12multiplexing7Extents9viewportsE", "dabfg::multiplexing::Extents::viewports"], [62, 3, 1, "_CPPv4N5dabfg12multiplexing5IndexE", "dabfg::multiplexing::Index"], [62, 6, 1, "_CPPv4N5dabfg12multiplexing5IndexeqERK5Index", "dabfg::multiplexing::Index::operator=="], [62, 7, 1, "_CPPv4N5dabfg12multiplexing5IndexeqERK5Index", "dabfg::multiplexing::Index::operator==::other"], [62, 4, 1, "_CPPv4N5dabfg12multiplexing5Index9subSampleE", "dabfg::multiplexing::Index::subSample"], [62, 4, 1, "_CPPv4N5dabfg12multiplexing5Index11superSampleE", "dabfg::multiplexing::Index::superSample"], [62, 4, 1, "_CPPv4N5dabfg12multiplexing5Index8viewportE", "dabfg::multiplexing::Index::viewport"], [62, 1, 1, "_CPPv4N5dabfg12multiplexing4ModeE", "dabfg::multiplexing::Mode"], [62, 2, 1, "_CPPv4N5dabfg12multiplexing4Mode13FullMultiplexE", "dabfg::multiplexing::Mode::FullMultiplex"], [62, 2, 1, "_CPPv4N5dabfg12multiplexing4Mode4NoneE", "dabfg::multiplexing::Mode::None"], [62, 2, 1, "_CPPv4N5dabfg12multiplexing4Mode11SubSamplingE", "dabfg::multiplexing::Mode::SubSampling"], [62, 2, 1, "_CPPv4N5dabfg12multiplexing4Mode13SuperSamplingE", "dabfg::multiplexing::Mode::SuperSampling"], [62, 2, 1, "_CPPv4N5dabfg12multiplexing4Mode8ViewportE", "dabfg::multiplexing::Mode::Viewport"], [62, 6, 1, "_CPPv4N5dabfg12multiplexingorE4Mode4Mode", "dabfg::multiplexing::operator|"], [62, 7, 1, "_CPPv4N5dabfg12multiplexingorE4Mode4Mode", "dabfg::multiplexing::operator|::a"], [62, 7, 1, "_CPPv4N5dabfg12multiplexingorE4Mode4Mode", "dabfg::multiplexing::operator|::b"], [53, 4, 1, "_CPPv428dagor_d3d_force_driver_reset", "dagor_d3d_force_driver_reset"], [54, 5, 1, "_CPPv44ddsx", "ddsx"], [34, 6, 1, "_CPPv417deactivate_bufferP7Sbuffer11GpuPipeline", "deactivate_buffer"], [34, 7, 1, "_CPPv417deactivate_bufferP7Sbuffer11GpuPipeline", "deactivate_buffer::buf"], [34, 7, 1, "_CPPv417deactivate_bufferP7Sbuffer11GpuPipeline", "deactivate_buffer::gpu_pipeline"], [34, 6, 1, "_CPPv418deactivate_textureP11BaseTexture11GpuPipeline", "deactivate_texture"], [34, 7, 1, "_CPPv418deactivate_textureP11BaseTexture11GpuPipeline", "deactivate_texture::gpu_pipeline"], [34, 7, 1, "_CPPv418deactivate_textureP11BaseTexture11GpuPipeline", "deactivate_texture::tex"], [39, 6, 1, "_CPPv418delete_render_passP10RenderPass", "delete_render_pass"], [39, 7, 1, "_CPPv418delete_render_passP10RenderPass", "delete_render_pass::rp"], [34, 6, 1, "_CPPv421destroy_resource_heapP12ResourceHeap", "destroy_resource_heap"], [34, 7, 1, "_CPPv421destroy_resource_heapP12ResourceHeap", "destroy_resource_heap::heap"], [68, 4, 1, "_CPPv418dgs_tex_anisotropy", "dgs_tex_anisotropy"], [68, 4, 1, "_CPPv415dgs_tex_quality", "dgs_tex_quality"], [68, 6, 1, "_CPPv430discard_unused_managed_texture9TEXTUREID", "discard_unused_managed_texture"], [68, 7, 1, "_CPPv430discard_unused_managed_texture9TEXTUREID", "discard_unused_managed_texture::id"], [68, 6, 1, "_CPPv431discard_unused_managed_texturesv", "discard_unused_managed_textures"], [34, 5, 1, "_CPPv45eastl", "eastl"], [34, 3, 1, "_CPPv4IEN5eastl4hashI19ResourceDescriptionEE", "eastl::hash<ResourceDescription>"], [34, 6, 1, "_CPPv4NK5eastl4hashI19ResourceDescriptionEclERK19ResourceDescription", "eastl::hash<ResourceDescription>::operator()"], [34, 7, 1, "_CPPv4NK5eastl4hashI19ResourceDescriptionEclERK19ResourceDescription", "eastl::hash<ResourceDescription>::operator()::desc"], [66, 6, 1, "_CPPv417enable_res_mgr_mtbi", "enable_res_mgr_mt"], [66, 7, 1, "_CPPv417enable_res_mgr_mtbi", "enable_res_mgr_mt::enable"], [66, 7, 1, "_CPPv417enable_res_mgr_mtbi", "enable_res_mgr_mt::max_res_entry_count"], [68, 6, 1, "_CPPv417enable_tex_mgr_mtbi", "enable_tex_mgr_mt"], [68, 7, 1, "_CPPv417enable_tex_mgr_mtbi", "enable_tex_mgr_mt::enable"], [68, 7, 1, "_CPPv417enable_tex_mgr_mtbi", "enable_tex_mgr_mt::max_res_entry_count"], [39, 6, 1, "_CPPv415end_render_passv", "end_render_pass"], [68, 6, 1, "_CPPv420evict_managed_tex_idR9TEXTUREID", "evict_managed_tex_id"], [68, 7, 1, "_CPPv420evict_managed_tex_idR9TEXTUREID", "evict_managed_tex_id::id"], [59, 6, 1, "_CPPv49fill_slot9NamedSlotPKc", "fill_slot"], [59, 7, 1, "_CPPv49fill_slot9NamedSlotPKc", "fill_slot::res_name"], [59, 7, 1, "_CPPv49fill_slot9NamedSlotPKc", "fill_slot::slot"], [66, 6, 1, "_CPPv420first_managed_d3dresi", "first_managed_d3dres"], [66, 7, 1, "_CPPv420first_managed_d3dresi", "first_managed_d3dres::min_rc"], [68, 6, 1, "_CPPv421first_managed_texturei", "first_managed_texture"], [68, 7, 1, "_CPPv421first_managed_texturei", "first_managed_texture::min_rc"], [54, 6, 1, "_CPPv421float_to_channel_bitsf12ChannelDTypeRK24TextureChannelFormatDesc", "float_to_channel_bits"], [54, 7, 1, "_CPPv421float_to_channel_bitsf12ChannelDTypeRK24TextureChannelFormatDesc", "float_to_channel_bits::channel"], [54, 7, 1, "_CPPv421float_to_channel_bitsf12ChannelDTypeRK24TextureChannelFormatDesc", "float_to_channel_bits::type"], [54, 7, 1, "_CPPv421float_to_channel_bitsf12ChannelDTypeRK24TextureChannelFormatDesc", "float_to_channel_bits::value"], [68, 6, 1, "_CPPv423get_default_tex_factoryv", "get_default_tex_factory"], [66, 6, 1, "_CPPv423get_managed_res_cur_tql8D3DRESID", "get_managed_res_cur_tql"], [66, 7, 1, "_CPPv423get_managed_res_cur_tql8D3DRESID", "get_managed_res_cur_tql::id"], [66, 6, 1, "_CPPv418get_managed_res_idPKc", "get_managed_res_id"], [66, 7, 1, "_CPPv418get_managed_res_idPKc", "get_managed_res_id::res_name"], [66, 6, 1, "_CPPv419get_managed_res_lfu8D3DRESID", "get_managed_res_lfu"], [66, 7, 1, "_CPPv419get_managed_res_lfu8D3DRESID", "get_managed_res_lfu::id"], [66, 6, 1, "_CPPv426get_managed_res_loaded_lev8D3DRESID", "get_managed_res_loaded_lev"], [66, 7, 1, "_CPPv426get_managed_res_loaded_lev8D3DRESID", "get_managed_res_loaded_lev::id"], [66, 6, 1, "_CPPv423get_managed_res_max_tql8D3DRESID", "get_managed_res_max_tql"], [66, 7, 1, "_CPPv423get_managed_res_max_tql8D3DRESID", "get_managed_res_max_tql::id"], [66, 6, 1, "_CPPv426get_managed_res_maxreq_lev8D3DRESID", "get_managed_res_maxreq_lev"], [66, 7, 1, "_CPPv426get_managed_res_maxreq_lev8D3DRESID", "get_managed_res_maxreq_lev::id"], [66, 6, 1, "_CPPv420get_managed_res_name8D3DRESID", "get_managed_res_name"], [66, 7, 1, "_CPPv420get_managed_res_name8D3DRESID", "get_managed_res_name::id"], [66, 6, 1, "_CPPv424get_managed_res_refcount8D3DRESID", "get_managed_res_refcount"], [66, 7, 1, "_CPPv424get_managed_res_refcount8D3DRESID", "get_managed_res_refcount::id"], [68, 6, 1, "_CPPv422get_managed_texture_idPKc", "get_managed_texture_id"], [68, 7, 1, "_CPPv422get_managed_texture_idPKc", "get_managed_texture_id::res_name"], [68, 6, 1, "_CPPv424get_managed_texture_name8D3DRESID", "get_managed_texture_name"], [68, 7, 1, "_CPPv424get_managed_texture_name8D3DRESID", "get_managed_texture_name::id"], [68, 6, 1, "_CPPv428get_managed_texture_refcount8D3DRESID", "get_managed_texture_refcount"], [68, 7, 1, "_CPPv428get_managed_texture_refcount8D3DRESID", "get_managed_texture_refcount::id"], [68, 6, 1, "_CPPv426get_max_managed_texture_idv", "get_max_managed_texture_id"], [34, 6, 1, "_CPPv434get_resource_allocation_propertiesRK19ResourceDescription", "get_resource_allocation_properties"], [34, 7, 1, "_CPPv434get_resource_allocation_propertiesRK19ResourceDescription", "get_resource_allocation_properties::desc"], [34, 6, 1, "_CPPv434get_resource_heap_group_propertiesP17ResourceHeapGroup", "get_resource_heap_group_properties"], [34, 7, 1, "_CPPv434get_resource_heap_group_propertiesP17ResourceHeapGroup", "get_resource_heap_group_properties::heap_group"], [68, 6, 1, "_CPPv416get_sampler_infoRK15TextureMetaDatab", "get_sampler_info"], [68, 7, 1, "_CPPv416get_sampler_infoRK15TextureMetaDatab", "get_sampler_info::force_addr_from_tmd"], [68, 7, 1, "_CPPv416get_sampler_infoRK15TextureMetaDatab", "get_sampler_info::texture_meta_data"], [68, 6, 1, "_CPPv420get_stub_tex_factoryv", "get_stub_tex_factory"], [68, 6, 1, "_CPPv424get_symbolic_tex_factoryv", "get_symbolic_tex_factory"], [54, 6, 1, "_CPPv421get_tex_channel_valuePKvRK24TextureChannelFormatDesc", "get_tex_channel_value"], [54, 7, 1, "_CPPv421get_tex_channel_valuePKvRK24TextureChannelFormatDesc", "get_tex_channel_value::channel"], [54, 7, 1, "_CPPv421get_tex_channel_valuePKvRK24TextureChannelFormatDesc", "get_tex_channel_value::pixel"], [54, 6, 1, "_CPPv419get_tex_format_desc8uint32_t", "get_tex_format_desc"], [54, 7, 1, "_CPPv419get_tex_format_desc8uint32_t", "get_tex_format_desc::fmt"], [54, 6, 1, "_CPPv419get_tex_format_name8uint32_t", "get_tex_format_name"], [54, 7, 1, "_CPPv419get_tex_format_name8uint32_t", "get_tex_format_name::fmt"], [68, 6, 1, "_CPPv421get_texture_meta_data9TEXTUREID", "get_texture_meta_data"], [68, 7, 1, "_CPPv421get_texture_meta_data9TEXTUREID", "get_texture_meta_data::id"], [68, 6, 1, "_CPPv428get_texture_separate_sampler9TEXTUREID", "get_texture_separate_sampler"], [68, 7, 1, "_CPPv428get_texture_separate_sampler9TEXTUREID", "get_texture_separate_sampler::id"], [68, 6, 1, "_CPPv439init_managed_textures_streaming_supporti", "init_managed_textures_streaming_support"], [68, 7, 1, "_CPPv439init_managed_textures_streaming_supporti", "init_managed_textures_streaming_support::reload_jobmgr_id"], [59, 6, 1, "_CPPv418invalidate_historyv", "invalidate_history"], [54, 6, 1, "_CPPv418is_alpha_texformatj", "is_alpha_texformat"], [54, 7, 1, "_CPPv418is_alpha_texformatj", "is_alpha_texformat::flags"], [54, 6, 1, "_CPPv415is_bc_texformatj", "is_bc_texformat"], [54, 7, 1, "_CPPv415is_bc_texformatj", "is_bc_texformat::flags"], [66, 6, 1, "_CPPv426is_managed_res_factory_set8D3DRESID", "is_managed_res_factory_set"], [66, 7, 1, "_CPPv426is_managed_res_factory_set8D3DRESID", "is_managed_res_factory_set::id"], [68, 6, 1, "_CPPv426is_managed_tex_factory_set8D3DRESID", "is_managed_tex_factory_set"], [68, 7, 1, "_CPPv426is_managed_tex_factory_set8D3DRESID", "is_managed_tex_factory_set::id"], [68, 6, 1, "_CPPv427is_managed_texture_id_valid9TEXTUREIDb", "is_managed_texture_id_valid"], [68, 7, 1, "_CPPv427is_managed_texture_id_valid9TEXTUREIDb", "is_managed_texture_id_valid::tid"], [68, 7, 1, "_CPPv427is_managed_texture_id_valid9TEXTUREIDb", "is_managed_texture_id_valid::validate_value"], [68, 6, 1, "_CPPv429is_managed_texture_incomplete9TEXTUREID", "is_managed_texture_incomplete"], [68, 7, 1, "_CPPv429is_managed_texture_incomplete9TEXTUREID", "is_managed_texture_incomplete::id"], [68, 6, 1, "_CPPv436is_managed_textures_streaming_activev", "is_managed_textures_streaming_active"], [68, 6, 1, "_CPPv444is_managed_textures_streaming_load_on_demandv", "is_managed_textures_streaming_load_on_demand"], [66, 6, 1, "_CPPv426iterate_all_managed_d3dres8D3DRESIDi", "iterate_all_managed_d3dres"], [66, 7, 1, "_CPPv426iterate_all_managed_d3dres8D3DRESIDi", "iterate_all_managed_d3dres::after_rid"], [66, 7, 1, "_CPPv426iterate_all_managed_d3dres8D3DRESIDi", "iterate_all_managed_d3dres::min_ref_count"], [68, 6, 1, "_CPPv428iterate_all_managed_textures9TEXTUREIDi", "iterate_all_managed_textures"], [68, 7, 1, "_CPPv428iterate_all_managed_textures9TEXTUREIDi", "iterate_all_managed_textures::after_tid"], [68, 7, 1, "_CPPv428iterate_all_managed_textures9TEXTUREIDi", "iterate_all_managed_textures::min_ref_count"], [68, 6, 1, "_CPPv429load_anisotropy_from_settingsv", "load_anisotropy_from_settings"], [53, 5, 1, "_CPPv410main_wnd_f", "main_wnd_f"], [43, 6, 1, "_CPPv416make_clear_value7int32_t7int32_t7int32_t7int32_t", "make_clear_value"], [43, 6, 1, "_CPPv416make_clear_value8uint32_t8uint32_t8uint32_t8uint32_t", "make_clear_value"], [43, 6, 1, "_CPPv416make_clear_valuef7uint8_t", "make_clear_value"], [43, 6, 1, "_CPPv416make_clear_valueffff", "make_clear_value"], [43, 7, 1, "_CPPv416make_clear_value7int32_t7int32_t7int32_t7int32_t", "make_clear_value::a"], [43, 7, 1, "_CPPv416make_clear_value8uint32_t8uint32_t8uint32_t8uint32_t", "make_clear_value::a"], [43, 7, 1, "_CPPv416make_clear_valueffff", "make_clear_value::a"], [43, 7, 1, "_CPPv416make_clear_value7int32_t7int32_t7int32_t7int32_t", "make_clear_value::b"], [43, 7, 1, "_CPPv416make_clear_value8uint32_t8uint32_t8uint32_t8uint32_t", "make_clear_value::b"], [43, 7, 1, "_CPPv416make_clear_valueffff", "make_clear_value::b"], [43, 7, 1, "_CPPv416make_clear_valuef7uint8_t", "make_clear_value::d"], [43, 7, 1, "_CPPv416make_clear_value7int32_t7int32_t7int32_t7int32_t", "make_clear_value::g"], [43, 7, 1, "_CPPv416make_clear_value8uint32_t8uint32_t8uint32_t8uint32_t", "make_clear_value::g"], [43, 7, 1, "_CPPv416make_clear_valueffff", "make_clear_value::g"], [43, 7, 1, "_CPPv416make_clear_value7int32_t7int32_t7int32_t7int32_t", "make_clear_value::r"], [43, 7, 1, "_CPPv416make_clear_value8uint32_t8uint32_t8uint32_t8uint32_t", "make_clear_value::r"], [43, 7, 1, "_CPPv416make_clear_valueffff", "make_clear_value::r"], [43, 7, 1, "_CPPv416make_clear_valuef7uint8_t", "make_clear_value::s"], [59, 6, 1, "_CPPv437mark_external_resource_for_validationPK11D3dResource", "mark_external_resource_for_validation"], [59, 7, 1, "_CPPv437mark_external_resource_for_validationPK11D3dResource", "mark_external_resource_for_validation::resource"], [68, 6, 1, "_CPPv420mark_managed_tex_lfu9TEXTUREIDj", "mark_managed_tex_lfu"], [68, 7, 1, "_CPPv420mark_managed_tex_lfu9TEXTUREIDj", "mark_managed_tex_lfu::id"], [68, 7, 1, "_CPPv420mark_managed_tex_lfu9TEXTUREIDj", "mark_managed_tex_lfu::req_lev"], [68, 6, 1, "_CPPv431mark_managed_textures_importantN3dag9ConstSpanI9TEXTUREIDEEji", "mark_managed_textures_important"], [68, 7, 1, "_CPPv431mark_managed_textures_importantN3dag9ConstSpanI9TEXTUREIDEEji", "mark_managed_textures_important::add_importance"], [68, 7, 1, "_CPPv431mark_managed_textures_importantN3dag9ConstSpanI9TEXTUREIDEEji", "mark_managed_textures_important::id"], [68, 7, 1, "_CPPv431mark_managed_textures_importantN3dag9ConstSpanI9TEXTUREIDEEji", "mark_managed_textures_important::min_lev_for_dyn_decrease"], [59, 6, 1, "_CPPv433mark_resource_externally_consumedPKc", "mark_resource_externally_consumed"], [59, 7, 1, "_CPPv433mark_resource_externally_consumedPKc", "mark_resource_externally_consumed::res_name"], [66, 6, 1, "_CPPv419next_managed_d3dres8D3DRESIDi", "next_managed_d3dres"], [66, 7, 1, "_CPPv419next_managed_d3dres8D3DRESIDi", "next_managed_d3dres::min_rc"], [66, 7, 1, "_CPPv419next_managed_d3dres8D3DRESIDi", "next_managed_d3dres::prev_id"], [68, 6, 1, "_CPPv420next_managed_texture9TEXTUREIDi", "next_managed_texture"], [68, 7, 1, "_CPPv420next_managed_texture9TEXTUREIDi", "next_managed_texture::min_rc"], [68, 7, 1, "_CPPv420next_managed_texture9TEXTUREIDi", "next_managed_texture::prev_id"], [39, 6, 1, "_CPPv412next_subpassv", "next_subpass"], [54, 5, 1, "_CPPv424on_tex_slice_loaded_cb_t", "on_tex_slice_loaded_cb_t"], [52, 6, 1, "_CPPv4an15ResourceBarrier15ResourceBarrier", "operator&"], [52, 7, 1, "_CPPv4an15ResourceBarrier15ResourceBarrier", "operator&::l"], [52, 7, 1, "_CPPv4an15ResourceBarrier15ResourceBarrier", "operator&::r"], [52, 6, 1, "_CPPv4eo15ResourceBarrier15ResourceBarrier", "operator^"], [52, 7, 1, "_CPPv4eo15ResourceBarrier15ResourceBarrier", "operator^::l"], [52, 7, 1, "_CPPv4eo15ResourceBarrier15ResourceBarrier", "operator^::r"], [39, 6, 1, "_CPPv4or22RenderPassTargetAction22RenderPassTargetAction", "operator|"], [52, 6, 1, "_CPPv4or15ResourceBarrier15ResourceBarrier", "operator|"], [52, 6, 1, "_CPPv4or22RenderPassTargetAction22RenderPassTargetAction", "operator|"], [39, 7, 1, "_CPPv4or22RenderPassTargetAction22RenderPassTargetAction", "operator|::l"], [52, 7, 1, "_CPPv4or15ResourceBarrier15ResourceBarrier", "operator|::l"], [52, 7, 1, "_CPPv4or22RenderPassTargetAction22RenderPassTargetAction", "operator|::l"], [39, 7, 1, "_CPPv4or22RenderPassTargetAction22RenderPassTargetAction", "operator|::r"], [52, 7, 1, "_CPPv4or15ResourceBarrier15ResourceBarrier", "operator|::r"], [52, 7, 1, "_CPPv4or22RenderPassTargetAction22RenderPassTargetAction", "operator|::r"], [54, 6, 1, "_CPPv416parse_tex_formatPKc8uint32_t", "parse_tex_format"], [54, 7, 1, "_CPPv416parse_tex_formatPKc8uint32_t", "parse_tex_format::default_fmt"], [54, 7, 1, "_CPPv416parse_tex_formatPKc8uint32_t", "parse_tex_format::name"], [34, 6, 1, "_CPPv429place_buffer_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "place_buffer_in_resource_heap"], [34, 7, 1, "_CPPv429place_buffer_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "place_buffer_in_resource_heap::alloc_info"], [34, 7, 1, "_CPPv429place_buffer_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "place_buffer_in_resource_heap::desc"], [34, 7, 1, "_CPPv429place_buffer_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "place_buffer_in_resource_heap::heap"], [34, 7, 1, "_CPPv429place_buffer_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "place_buffer_in_resource_heap::name"], [34, 7, 1, "_CPPv429place_buffer_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "place_buffer_in_resource_heap::offset"], [34, 6, 1, "_CPPv430place_texture_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "place_texture_in_resource_heap"], [34, 7, 1, "_CPPv430place_texture_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "place_texture_in_resource_heap::alloc_info"], [34, 7, 1, "_CPPv430place_texture_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "place_texture_in_resource_heap::desc"], [34, 7, 1, "_CPPv430place_texture_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "place_texture_in_resource_heap::heap"], [34, 7, 1, "_CPPv430place_texture_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "place_texture_in_resource_heap::name"], [34, 7, 1, "_CPPv430place_texture_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc", "place_texture_in_resource_heap::offset"], [68, 6, 1, "_CPPv441prefetch_and_check_managed_texture_loaded9TEXTUREIDb", "prefetch_and_check_managed_texture_loaded"], [68, 7, 1, "_CPPv441prefetch_and_check_managed_texture_loaded9TEXTUREIDb", "prefetch_and_check_managed_texture_loaded::fq_loaded"], [68, 7, 1, "_CPPv441prefetch_and_check_managed_texture_loaded9TEXTUREIDb", "prefetch_and_check_managed_texture_loaded::id"], [68, 6, 1, "_CPPv442prefetch_and_check_managed_textures_loadedN3dag9ConstSpanI9TEXTUREIDEEb", "prefetch_and_check_managed_textures_loaded"], [68, 7, 1, "_CPPv442prefetch_and_check_managed_textures_loadedN3dag9ConstSpanI9TEXTUREIDEEb", "prefetch_and_check_managed_textures_loaded::fq_loaded"], [68, 7, 1, "_CPPv442prefetch_and_check_managed_textures_loadedN3dag9ConstSpanI9TEXTUREIDEEb", "prefetch_and_check_managed_textures_loaded::tex_list"], [68, 6, 1, "_CPPv441prefetch_and_wait_managed_textures_loadedN3dag9ConstSpanI9TEXTUREIDEEb", "prefetch_and_wait_managed_textures_loaded"], [68, 7, 1, "_CPPv441prefetch_and_wait_managed_textures_loadedN3dag9ConstSpanI9TEXTUREIDEEb", "prefetch_and_wait_managed_textures_loaded::fq_loaded"], [68, 7, 1, "_CPPv441prefetch_and_wait_managed_textures_loadedN3dag9ConstSpanI9TEXTUREIDEEb", "prefetch_and_wait_managed_textures_loaded::tex_list"], [68, 6, 1, "_CPPv424prefetch_managed_texture9TEXTUREID", "prefetch_managed_texture"], [68, 7, 1, "_CPPv424prefetch_managed_texture9TEXTUREID", "prefetch_managed_texture::id"], [68, 6, 1, "_CPPv425prefetch_managed_texturesN3dag9ConstSpanI9TEXTUREIDEE", "prefetch_managed_textures"], [68, 7, 1, "_CPPv425prefetch_managed_texturesN3dag9ConstSpanI9TEXTUREIDEE", "prefetch_managed_textures::id"], [68, 6, 1, "_CPPv435prefetch_managed_textures_by_textagi", "prefetch_managed_textures_by_textag"], [68, 7, 1, "_CPPv435prefetch_managed_textures_by_textagi", "prefetch_managed_textures_by_textag::textag"], [66, 6, 1, "_CPPv420register_managed_resPKcP11D3dResource", "register_managed_res"], [66, 7, 1, "_CPPv420register_managed_resPKcP11D3dResource", "register_managed_res::name"], [66, 7, 1, "_CPPv420register_managed_resPKcP11D3dResource", "register_managed_res::res"], [68, 6, 1, "_CPPv420register_managed_texPKcP11BaseTexture", "register_managed_tex"], [68, 7, 1, "_CPPv420register_managed_texPKcP11BaseTexture", "register_managed_tex::name"], [68, 7, 1, "_CPPv420register_managed_texPKcP11BaseTexture", "register_managed_tex::res"], [59, 6, 1, "_CPPv4I0E13register_node10NodeHandlePKcPKcRR1F", "register_node"], [59, 8, 1, "_CPPv4I0E13register_node10NodeHandlePKcPKcRR1F", "register_node::F"], [59, 7, 1, "_CPPv4I0E13register_node10NodeHandlePKcPKcRR1F", "register_node::declaration_callback"], [59, 7, 1, "_CPPv4I0E13register_node10NodeHandlePKcPKcRR1F", "register_node::name"], [59, 7, 1, "_CPPv4I0E13register_node10NodeHandlePKcPKcRR1F", "register_node::source_location"], [66, 6, 1, "_CPPv419release_managed_buf8D3DRESID", "release_managed_buf"], [66, 7, 1, "_CPPv419release_managed_buf8D3DRESID", "release_managed_buf::id"], [66, 6, 1, "_CPPv4I0E28release_managed_buf_verifiedvR8D3DRESIDR1T", "release_managed_buf_verified"], [66, 8, 1, "_CPPv4I0E28release_managed_buf_verifiedvR8D3DRESIDR1T", "release_managed_buf_verified::T"], [66, 7, 1, "_CPPv4I0E28release_managed_buf_verifiedvR8D3DRESIDR1T", "release_managed_buf_verified::buf"], [66, 7, 1, "_CPPv4I0E28release_managed_buf_verifiedvR8D3DRESIDR1T", "release_managed_buf_verified::id"], [66, 6, 1, "_CPPv419release_managed_res8D3DRESID", "release_managed_res"], [66, 7, 1, "_CPPv419release_managed_res8D3DRESID", "release_managed_res::id"], [66, 6, 1, "_CPPv428release_managed_res_verifiedR8D3DRESIDP11D3dResource", "release_managed_res_verified"], [66, 7, 1, "_CPPv428release_managed_res_verifiedR8D3DRESIDP11D3dResource", "release_managed_res_verified::check_res"], [66, 7, 1, "_CPPv428release_managed_res_verifiedR8D3DRESIDP11D3dResource", "release_managed_res_verified::id"], [66, 6, 1, "_CPPv419release_managed_tex8D3DRESID", "release_managed_tex"], [66, 7, 1, "_CPPv419release_managed_tex8D3DRESID", "release_managed_tex::id"], [66, 6, 1, "_CPPv4I0E28release_managed_tex_verifiedvR8D3DRESIDR1T", "release_managed_tex_verified"], [66, 8, 1, "_CPPv4I0E28release_managed_tex_verifiedvR8D3DRESIDR1T", "release_managed_tex_verified::T"], [66, 7, 1, "_CPPv4I0E28release_managed_tex_verifiedvR8D3DRESIDR1T", "release_managed_tex_verified::id"], [66, 7, 1, "_CPPv4I0E28release_managed_tex_verifiedvR8D3DRESIDR1T", "release_managed_tex_verified::tex"], [68, 6, 1, "_CPPv447reload_managed_array_textures_for_changed_slicePKc", "reload_managed_array_textures_for_changed_slice"], [68, 7, 1, "_CPPv447reload_managed_array_textures_for_changed_slicePKc", "reload_managed_array_textures_for_changed_slice::slice_tex_name"], [68, 6, 1, "_CPPv416reset_anisotropyPKc", "reset_anisotropy"], [68, 7, 1, "_CPPv416reset_anisotropyPKc", "reset_anisotropy::tex_name_filter"], [68, 6, 1, "_CPPv438reset_managed_textures_streaming_statev", "reset_managed_textures_streaming_state"], [72, 3, 1, "_CPPv4N13resource_slot6CreateE", "resource_slot::Create"], [72, 6, 1, "_CPPv4N13resource_slot6Create6CreateEPKcPKc", "resource_slot::Create::Create"], [72, 7, 1, "_CPPv4N13resource_slot6Create6CreateEPKcPKc", "resource_slot::Create::Create::resource_name"], [72, 7, 1, "_CPPv4N13resource_slot6Create6CreateEPKcPKc", "resource_slot::Create::Create::slot_name"], [71, 3, 1, "_CPPv4N13resource_slot25NodeHandleWithSlotsAccessE", "resource_slot::NodeHandleWithSlotsAccess"], [71, 6, 1, "_CPPv4N13resource_slot25NodeHandleWithSlotsAccess5resetEv", "resource_slot::NodeHandleWithSlotsAccess::reset"], [71, 6, 1, "_CPPv4NK13resource_slot25NodeHandleWithSlotsAccess5validEv", "resource_slot::NodeHandleWithSlotsAccess::valid"], [71, 6, 1, "_CPPv4N13resource_slot25NodeHandleWithSlotsAccessD0Ev", "resource_slot::NodeHandleWithSlotsAccess::~NodeHandleWithSlotsAccess"], [72, 3, 1, "_CPPv4N13resource_slot4ReadE", "resource_slot::Read"], [72, 6, 1, "_CPPv4N13resource_slot4Read4ReadEPKci", "resource_slot::Read::Read"], [72, 7, 1, "_CPPv4N13resource_slot4Read4ReadEPKci", "resource_slot::Read::Read::read_priority"], [72, 7, 1, "_CPPv4N13resource_slot4Read4ReadEPKci", "resource_slot::Read::Read::slot_name"], [72, 3, 1, "_CPPv4N13resource_slot5StateE", "resource_slot::State"], [72, 6, 1, "_CPPv4NK13resource_slot5State19resourceToCreateForEPKc", "resource_slot::State::resourceToCreateFor"], [72, 7, 1, "_CPPv4NK13resource_slot5State19resourceToCreateForEPKc", "resource_slot::State::resourceToCreateFor::slot_name"], [72, 6, 1, "_CPPv4NK13resource_slot5State18resourceToReadFromEPKc", "resource_slot::State::resourceToReadFrom"], [72, 7, 1, "_CPPv4NK13resource_slot5State18resourceToReadFromEPKc", "resource_slot::State::resourceToReadFrom::slot_name"], [72, 3, 1, "_CPPv4N13resource_slot6UpdateE", "resource_slot::Update"], [72, 6, 1, "_CPPv4N13resource_slot6Update6UpdateEPKcPKci", "resource_slot::Update::Update"], [72, 7, 1, "_CPPv4N13resource_slot6Update6UpdateEPKcPKci", "resource_slot::Update::Update::resource_name"], [72, 7, 1, "_CPPv4N13resource_slot6Update6UpdateEPKcPKci", "resource_slot::Update::Update::slot_name"], [72, 7, 1, "_CPPv4N13resource_slot6Update6UpdateEPKcPKci", "resource_slot::Update::Update::update_priority"], [73, 6, 1, "_CPPv4N13resource_slot14resolve_accessEv", "resource_slot::resolve_access"], [59, 6, 1, "_CPPv44rootv", "root"], [59, 6, 1, "_CPPv49run_nodesv", "run_nodes"], [68, 6, 1, "_CPPv422set_add_lod_bias_batchN3dag4SpanIK11LODBiasRuleEE", "set_add_lod_bias_batch"], [68, 7, 1, "_CPPv422set_add_lod_bias_batchN3dag4SpanIK11LODBiasRuleEE", "set_add_lod_bias_batch::rules"], [68, 6, 1, "_CPPv423set_default_tex_factoryP14TextureFactory", "set_default_tex_factory"], [68, 7, 1, "_CPPv423set_default_tex_factoryP14TextureFactory", "set_default_tex_factory::tf"], [59, 6, 1, "_CPPv4I0E22set_dynamic_resolutionvPKc1T", "set_dynamic_resolution"], [59, 8, 1, "_CPPv4I0E22set_dynamic_resolutionvPKc1T", "set_dynamic_resolution::T"], [59, 7, 1, "_CPPv4I0E22set_dynamic_resolutionvPKc1T", "set_dynamic_resolution::typeName"], [59, 7, 1, "_CPPv4I0E22set_dynamic_resolutionvPKc1T", "set_dynamic_resolution::value"], [59, 6, 1, "_CPPv424set_multiplexing_extentsN12multiplexing7ExtentsE", "set_multiplexing_extents"], [59, 7, 1, "_CPPv424set_multiplexing_extentsN12multiplexing7ExtentsE", "set_multiplexing_extents::extents"], [59, 6, 1, "_CPPv4I0E14set_resolutionvPKc1T", "set_resolution"], [59, 8, 1, "_CPPv4I0E14set_resolutionvPKc1T", "set_resolution::T"], [59, 7, 1, "_CPPv4I0E14set_resolutionvPKc1T", "set_resolution::typeName"], [59, 7, 1, "_CPPv4I0E14set_resolutionvPKc1T", "set_resolution::value"], [54, 6, 1, "_CPPv421set_tex_channel_valuePvRK24TextureChannelFormatDesc8uint32_t", "set_tex_channel_value"], [54, 7, 1, "_CPPv421set_tex_channel_valuePvRK24TextureChannelFormatDesc8uint32_t", "set_tex_channel_value::bits"], [54, 7, 1, "_CPPv421set_tex_channel_valuePvRK24TextureChannelFormatDesc8uint32_t", "set_tex_channel_value::channel"], [54, 7, 1, "_CPPv421set_tex_channel_valuePvRK24TextureChannelFormatDesc8uint32_t", "set_tex_channel_value::pixel"], [68, 6, 1, "_CPPv428set_texture_separate_sampler9TEXTUREIDRKN3d3d11SamplerInfoE", "set_texture_separate_sampler"], [68, 7, 1, "_CPPv428set_texture_separate_sampler9TEXTUREIDRKN3d3d11SamplerInfoE", "set_texture_separate_sampler::id"], [68, 7, 1, "_CPPv428set_texture_separate_sampler9TEXTUREIDRKN3d3d11SamplerInfoE", "set_texture_separate_sampler::sampler_info"], [40, 5, 1, "_CPPv47shaders", "shaders"], [40, 5, 1, "_CPPv47shaders", "shaders"], [40, 5, 1, "_CPPv4N7shaders19DriverRenderStateIdE", "shaders::DriverRenderStateId"], [40, 3, 1, "_CPPv4N7shaders24DriverRenderStateIdDummyE", "shaders::DriverRenderStateIdDummy"], [40, 3, 1, "_CPPv4N7shaders11RenderStateE", "shaders::RenderState"], [40, 3, 1, "_CPPv4N7shaders11RenderState12BlendFactorsE", "shaders::RenderState::BlendFactors"], [40, 4, 1, "_CPPv4N7shaders11RenderState12BlendFactors3dstE", "shaders::RenderState::BlendFactors::dst"], [40, 4, 1, "_CPPv4N7shaders11RenderState12BlendFactors3srcE", "shaders::RenderState::BlendFactors::src"], [40, 3, 1, "_CPPv4N7shaders11RenderState11BlendParamsE", "shaders::RenderState::BlendParams"], [40, 4, 1, "_CPPv4N7shaders11RenderState11BlendParams6ablendE", "shaders::RenderState::BlendParams::ablend"], [40, 4, 1, "_CPPv4N7shaders11RenderState11BlendParams13ablendFactorsE", "shaders::RenderState::BlendParams::ablendFactors"], [40, 4, 1, "_CPPv4N7shaders11RenderState11BlendParams7blendOpE", "shaders::RenderState::BlendParams::blendOp"], [40, 4, 1, "_CPPv4N7shaders11RenderState11BlendParams9sepablendE", "shaders::RenderState::BlendParams::sepablend"], [40, 4, 1, "_CPPv4N7shaders11RenderState11BlendParams16sepablendFactorsE", "shaders::RenderState::BlendParams::sepablendFactors"], [40, 4, 1, "_CPPv4N7shaders11RenderState11BlendParams11sepablendOpE", "shaders::RenderState::BlendParams::sepablendOp"], [40, 4, 1, "_CPPv4N7shaders11RenderState29NumIndependentBlendParametersE", "shaders::RenderState::NumIndependentBlendParameters"], [40, 6, 1, "_CPPv4N7shaders11RenderState11RenderStateEv", "shaders::RenderState::RenderState"], [40, 4, 1, "_CPPv4N7shaders11RenderState11blendParamsE", "shaders::RenderState::blendParams"], [40, 6, 1, "_CPPv4NK7shaders11RenderStateneERK11RenderState", "shaders::RenderState::operator!="], [40, 7, 1, "_CPPv4NK7shaders11RenderStateneERK11RenderState", "shaders::RenderState::operator!=::s"], [40, 6, 1, "_CPPv4NK7shaders11RenderStateeqERK11RenderState", "shaders::RenderState::operator=="], [40, 7, 1, "_CPPv4NK7shaders11RenderStateeqERK11RenderState", "shaders::RenderState::operator==::s"], [40, 3, 1, "_CPPv4N7shaders15RenderStateBitsE", "shaders::RenderStateBits"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits15alphaToCoverageE", "shaders::RenderStateBits::alphaToCoverage"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits7colorWrE", "shaders::RenderStateBits::colorWr"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits18conservativeRasterE", "shaders::RenderStateBits::conservativeRaster"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits4cullE", "shaders::RenderStateBits::cull"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits17depthBoundsEnableE", "shaders::RenderStateBits::depthBoundsEnable"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits17forcedSampleCountE", "shaders::RenderStateBits::forcedSampleCount"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits23independentBlendEnabledE", "shaders::RenderStateBits::independentBlendEnabled"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits14scissorEnabledE", "shaders::RenderStateBits::scissorEnabled"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits10slopeZBiasE", "shaders::RenderStateBits::slopeZBias"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits7stencilE", "shaders::RenderStateBits::stencil"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits10stencilRefE", "shaders::RenderStateBits::stencilRef"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits17viewInstanceCountE", "shaders::RenderStateBits::viewInstanceCount"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits5zBiasE", "shaders::RenderStateBits::zBias"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits5zClipE", "shaders::RenderStateBits::zClip"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits5zFuncE", "shaders::RenderStateBits::zFunc"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits5ztestE", "shaders::RenderStateBits::ztest"], [40, 4, 1, "_CPPv4N7shaders15RenderStateBits6zwriteE", "shaders::RenderStateBits::zwrite"], [40, 1, 1, "_CPPv4N7shaders13RenderStateIdE", "shaders::RenderStateId"], [40, 2, 1, "_CPPv4N7shaders13RenderStateId7InvalidE", "shaders::RenderStateId::Invalid"], [59, 6, 1, "_CPPv48shutdownv", "shutdown"], [59, 6, 1, "_CPPv47startupv", "startup"], [59, 6, 1, "_CPPv435unmark_resource_externally_consumedPKc", "unmark_resource_externally_consumed"], [59, 7, 1, "_CPPv435unmark_resource_externally_consumedPKc", "unmark_resource_externally_consumed::res_name"], [59, 6, 1, "_CPPv421update_external_state13ExternalState", "update_external_state"], [59, 7, 1, "_CPPv421update_external_state13ExternalState", "update_external_state::state"], [59, 6, 1, "_CPPv439update_externally_consumed_resource_setN5eastl4spanIPCKcEE", "update_externally_consumed_resource_set"], [59, 6, 1, "_CPPv439update_externally_consumed_resource_setNSt16initializer_listIPKcEE", "update_externally_consumed_resource_set"], [59, 7, 1, "_CPPv439update_externally_consumed_resource_setN5eastl4spanIPCKcEE", "update_externally_consumed_resource_set::res_names"], [59, 7, 1, "_CPPv439update_externally_consumed_resource_setNSt16initializer_listIPKcEE", "update_externally_consumed_resource_set::res_names"], [68, 6, 1, "_CPPv428update_managed_array_texturePKcN3dag9ConstSpanIPKcEE", "update_managed_array_texture"], [68, 7, 1, "_CPPv428update_managed_array_texturePKcN3dag9ConstSpanIPKcEE", "update_managed_array_texture::name"], [68, 7, 1, "_CPPv428update_managed_array_texturePKcN3dag9ConstSpanIPKcEE", "update_managed_array_texture::tex_slice_nm"], [60, 10, 1, "", "Access"], [70, 10, 1, "", "ActionList"], [60, 10, 1, "", "ArrayCubeTextureResourceDescription"], [60, 10, 1, "", "ArrayTextureResourceDescription"], [60, 10, 1, "", "AutoResTypeNameId"], [60, 10, 1, "", "AutoResolutionData"], [61, 10, 1, "", "AutoResolutionRequest"], [58, 10, 1, "", "BfgEcsNodeAnnotation : AstFunctionAnnotation"], [60, 10, 1, "", "Binding"], [60, 10, 1, "", "BindingType"], [60, 10, 1, "", "BindingsMap = fixedVectorMap`int`Binding`8"], [61, 10, 1, "", "BufferCreateInfo"], [60, 10, 1, "", "BufferResourceDescription"], [74, 10, 1, "", "Create"], [60, 10, 1, "", "CubeTextureResourceDescription"], [74, 10, 1, "", "DEFAULT_READ_PRIORITY = 2147483647"], [60, 10, 1, "", "History"], [60, 10, 1, "", "InternalRegistry"], [60, 10, 1, "", "MultiplexingMode"], [61, 10, 1, "", "NameSpace"], [60, 10, 1, "", "NameSpaceNameId"], [61, 10, 1, "", "NameSpaceRequest"], [61, 10, 1, "", "NamedSlot"], [60, 10, 1, "", "NodeData"], [60, 10, 1, "", "NodeHandle"], [70, 10, 1, "", "NodeHandleWithSlotsAccess"], [60, 10, 1, "", "NodeNameId"], [60, 10, 1, "", "NodeStateRequirements"], [60, 10, 1, "", "NodeTracker"], [74, 10, 1, "", "Read"], [61, 10, 1, "", "Registry"], [60, 10, 1, "", "ResNameId"], [61, 10, 1, "", "ResUid"], [60, 10, 1, "", "ResourceActivationAction"], [60, 10, 1, "", "ResourceData"], [60, 10, 1, "", "ResourceProvider"], [60, 10, 1, "", "ResourceRequest"], [75, 10, 1, "", "ResourceSlotEcsAnnotation : AstFunctionAnnotation"], [60, 10, 1, "", "ResourceType"], [60, 10, 1, "", "ResourceUsage"], [60, 10, 1, "", "ShaderBlockLayersInfo"], [60, 10, 1, "", "SideEffect"], [74, 10, 1, "", "SlotActions"], [60, 10, 1, "", "Stage"], [70, 10, 1, "", "State"], [61, 10, 1, "", "StateRequest"], [61, 10, 1, "", "Texture2dCreateInfo"], [61, 10, 1, "", "TextureResolution is a variant type"], [60, 10, 1, "", "TextureResourceDescription"], [74, 10, 1, "", "Update"], [60, 10, 1, "", "Usage"], [60, 10, 1, "", "VariableRateShadingCombiner"], [61, 10, 1, "", "VirtualAttachmentRequest"], [61, 10, 1, "", "VirtualAttachmentResource is a variant type"], [61, 10, 1, "", "VirtualBufferHandle"], [61, 10, 1, "", "VirtualBufferRequest"], [61, 10, 1, "", "VirtualPassRequest"], [60, 10, 1, "", "VirtualPassRequirements"], [61, 10, 1, "", "VirtualResourceCreationSemiRequest"], [61, 10, 1, "", "VirtualResourceHandle"], [61, 10, 1, "", "VirtualResourceRequest"], [61, 10, 1, "", "VirtualResourceRequestBase"], [61, 10, 1, "", "VirtualResourceSemiRequest"], [60, 10, 1, "", "VirtualSubresourceRef"], [61, 10, 1, "", "VirtualTextureHandle"], [61, 10, 1, "", "VirtualTextureRequest"], [60, 10, 1, "", "VolTextureResourceDescription"], [61, 10, 1, "", "VrsRateTexture is a variant type"], [61, 10, 1, "", "VrsRequirements"], [60, 10, 1, "", "VrsStateRequirements"], [61, 11, 1, "", "allowVrs"], [61, 11, 1, "", "allowWireFrame"], [61, 11, 1, "", "atStage"], [58, 10, 1, "", "bfg_ecs_node"], [61, 11, 1, "", "bindToShaderVar"], [61, 11, 1, "", "blob"], [61, 11, 1, "", "buffer"], [61, 11, 1, "", "color"], [61, 11, 1, "", "create"], [61, 11, 1, "", "depthRo"], [61, 11, 1, "", "depthRw"], [61, 11, 1, "", "enableOverride"], [61, 11, 1, "", "executionHas"], [61, 11, 1, "", "fillSlot"], [60, 11, 1, "", "fill_slot"], [61, 11, 1, "", "get"], [61, 11, 1, "", "getResolution"], [60, 11, 1, "", "get_shader_variable_id"], [61, 11, 1, "", "handle"], [61, 11, 1, "", "history"], [61, 11, 1, "", "modify"], [61, 11, 1, "", "modifyRequest"], [61, 11, 1, "", "multiplex"], [61, 11, 1, "", "operator /"], [61, 11, 1, "", "optional"], [61, 11, 1, "", "orderMeAfter"], [61, 11, 1, "", "orderMeBefore"], [61, 11, 1, "", "read"], [74, 11, 1, "", "registerAccess"], [61, 11, 1, "", "registerNode"], [61, 11, 1, "", "rename"], [61, 11, 1, "", "requestRenderPass"], [61, 11, 1, "", "requestState"], [70, 11, 1, "", "reset"], [60, 11, 1, "", "resetNode"], [70, 11, 1, "", "resourceToCreateFor"], [70, 11, 1, "", "resourceToReadFrom"], [75, 10, 1, "", "resource_slot_ecs"], [61, 11, 1, "", "root"], [61, 11, 1, "", "setFrameBlock"], [61, 11, 1, "", "setObjectBlock"], [61, 11, 1, "", "setPriority"], [61, 11, 1, "", "setSceneBlock"], [61, 11, 1, "", "texture"], [61, 11, 1, "", "useAs"], [61, 11, 1, "", "view"], [124, 12, 1, "", "BaseList"], [124, 13, 1, "", "COMP_FLAG_CHANGE_EVENT"], [124, 13, 1, "", "COMP_FLAG_REPLICATED"], [129, 12, 1, "", "Computed"], [99, 13, 1, "", "DE4_CMD_DEL"], [99, 13, 1, "", "DE4_CMD_DROP"], [126, 13, 1, "", "DE4_MODE_CREATE_ENTITY"], [99, 13, 1, "", "DE4_MODE_MOVE"], [99, 13, 1, "", "DE4_MODE_MOVE_SURF"], [99, 13, 1, "", "DE4_MODE_POINT_ACTION"], [99, 13, 1, "", "DE4_MODE_ROTATE"], [99, 13, 1, "", "DE4_MODE_SCALE"], [99, 13, 1, "", "DE4_MODE_SELECT"], [95, 12, 1, "", "DataBlock"], [111, 12, 1, "", "E3DCOLOR"], [123, 13, 1, "", "ERR_ABORTED"], [123, 13, 1, "", "ERR_IO"], [123, 13, 1, "", "ERR_MEMORY_LIMIT"], [123, 13, 1, "", "ERR_OK"], [123, 13, 1, "", "ERR_PENDING"], [123, 13, 1, "", "ERR_UNKNOWN"], [124, 13, 1, "", "EVCAST_BROADCAST"], [124, 13, 1, "", "EVCAST_UNICAST"], [100, 13, 1, "", "Fonts"], [145, 13, 1, "", "HKEY_CLASSES_ROOT"], [145, 13, 1, "", "HKEY_CURRENT_CONFIG"], [145, 13, 1, "", "HKEY_CURRENT_USER"], [145, 13, 1, "", "HKEY_LOCAL_MACHINE"], [145, 13, 1, "", "HKEY_USERS"], [108, 13, 1, "", "HTTP_ABORTED"], [108, 13, 1, "", "HTTP_FAILED"], [108, 13, 1, "", "HTTP_SHUTDOWN"], [108, 13, 1, "", "HTTP_SUCCESS"], [136, 13, 1, "", "INVALID_CONNECTION_ID"], [124, 13, 1, "", "INVALID_ENTITY_ID"], [148, 13, 1, "", "INVALID_SOUND_HANDLE"], [111, 12, 1, "", "IPoint3"], [100, 12, 1, "", "Immediate"], [100, 12, 1, "", "LottieAnimation"], [137, 13, 1, "", "POLYFLAG_BLOCKED"], [137, 13, 1, "", "POLYFLAG_GROUND"], [137, 13, 1, "", "POLYFLAG_JUMP"], [137, 13, 1, "", "POLYFLAG_LADDER"], [137, 13, 1, "", "POLYFLAG_OBSTACLE"], [100, 12, 1, "", "Picture"], [111, 12, 1, "", "Point2"], [111, 12, 1, "", "Point3"], [111, 12, 1, "", "Point4"], [111, 12, 1, "", "Quat"], [148, 13, 1, "", "SOUND_STREAM_BUFFERING"], [148, 13, 1, "", "SOUND_STREAM_CLOSED"], [148, 13, 1, "", "SOUND_STREAM_CONNECTING"], [148, 13, 1, "", "SOUND_STREAM_ERROR"], [148, 13, 1, "", "SOUND_STREAM_OPENED"], [148, 13, 1, "", "SOUND_STREAM_PAUSED"], [148, 13, 1, "", "SOUND_STREAM_PLAYING"], [148, 13, 1, "", "SOUND_STREAM_STOPPED"], [124, 12, 1, "", "SQEvent"], [124, 12, 1, "", "SchemelessEvent"], [100, 12, 1, "", "ScrollHandler"], [124, 12, 1, "", "SqQuery"], [143, 13, 1, "", "TS_CRITICAL"], [143, 13, 1, "", "TS_EMERGENCY"], [143, 13, 1, "", "TS_LIGHT"], [143, 13, 1, "", "TS_MODERATE"], [143, 13, 1, "", "TS_NORMAL"], [143, 13, 1, "", "TS_SEVERE"], [143, 13, 1, "", "TS_SHUTDOWN"], [124, 13, 1, "", "TYPE_NULL"], [100, 13, 1, "", "bgColor"], [100, 13, 1, "", "borderColor"], [100, 13, 1, "", "brightness"], [100, 13, 1, "", "color"], [100, 13, 1, "", "const ALIGN_BOTTOM = ALIGN_BOTTOM"], [100, 13, 1, "", "const ALIGN_CENTER = ALIGN_CENTER"], [100, 13, 1, "", "const ALIGN_LEFT = ALIGN_LEFT"], [100, 13, 1, "", "const ALIGN_RIGHT = ALIGN_RIGHT"], [100, 13, 1, "", "const ALIGN_TOP = ALIGN_TOP"], [117, 13, 1, "", "const ARCH_BITS"], [100, 13, 1, "", "const AXIS_LR_TRIGGER"], [100, 13, 1, "", "const AXIS_L_THUMB_H"], [100, 13, 1, "", "const AXIS_L_THUMB_V"], [100, 13, 1, "", "const AXIS_L_TRIGGER"], [100, 13, 1, "", "const AXIS_R_THUMB_H"], [100, 13, 1, "", "const AXIS_R_THUMB_V"], [100, 13, 1, "", "const AXIS_R_TRIGGER"], [100, 13, 1, "", "const Blink"], [100, 13, 1, "", "const BlinkCos"], [100, 13, 1, "", "const BlinkSin"], [100, 13, 1, "", "const CosineFull"], [117, 13, 1, "", "const DBGLEVEL"], [100, 13, 1, "", "const DEVID_JOYSTICK"], [100, 13, 1, "", "const DEVID_KEYBOARD"], [100, 13, 1, "", "const DEVID_MOUSE"], [100, 13, 1, "", "const DEVID_TOUCH"], [100, 13, 1, "", "const DEVID_VR"], [100, 13, 1, "", "const DIR_DOWN"], [100, 13, 1, "", "const DIR_LEFT"], [100, 13, 1, "", "const DIR_RIGHT"], [100, 13, 1, "", "const DIR_UP"], [100, 13, 1, "", "const Discrete8"], [100, 13, 1, "", "const DoubleBlink"], [100, 13, 1, "", "const EVENT_BREAK = GuiScene::EVENT_BREAK"], [100, 13, 1, "", "const EVENT_CONTINUE = GuiScene::EVENT_CONTINUE"], [100, 13, 1, "", "const FFT_BLUR"], [100, 13, 1, "", "const FFT_GLOW"], [100, 13, 1, "", "const FFT_NONE"], [100, 13, 1, "", "const FFT_OUTLINE"], [100, 13, 1, "", "const FFT_SHADOW"], [100, 13, 1, "", "const FLOW_HORIZONTAL"], [100, 13, 1, "", "const FLOW_PARENT_RELATIVE"], [100, 13, 1, "", "const FLOW_VERTICAL"], [100, 13, 1, "", "const FMT_AS_IS"], [100, 13, 1, "", "const FMT_HIDE_ELLIPSIS"], [100, 13, 1, "", "const FMT_IGNORE_TAGS"], [100, 13, 1, "", "const FMT_KEEP_SPACES"], [100, 13, 1, "", "const FMT_NO_WRAP"], [129, 13, 1, "", "const FRP_DONT_CHECK_NESTED"], [129, 13, 1, "", "const FRP_INITIAL"], [100, 13, 1, "", "const GESTURE_DETECTOR_DRAG = GestureDetector::Type::DRAG"], [100, 13, 1, "", "const GESTURE_DETECTOR_PINCH = GestureDetector::Type::PINCH"], [100, 13, 1, "", "const GESTURE_DETECTOR_ROTATE = GestureDetector::Type::ROTATE"], [100, 13, 1, "", "const InBack"], [100, 13, 1, "", "const InBounce"], [100, 13, 1, "", "const InCirc"], [100, 13, 1, "", "const InCubic"], [100, 13, 1, "", "const InElastic"], [100, 13, 1, "", "const InExp"], [100, 13, 1, "", "const InOutBack"], [100, 13, 1, "", "const InOutBezier"], [100, 13, 1, "", "const InOutBounce"], [100, 13, 1, "", "const InOutCirc"], [100, 13, 1, "", "const InOutCubic"], [100, 13, 1, "", "const InOutElastic"], [100, 13, 1, "", "const InOutExp"], [100, 13, 1, "", "const InOutQuad"], [100, 13, 1, "", "const InOutQuart"], [100, 13, 1, "", "const InOutQuintic"], [100, 13, 1, "", "const InOutSine"], [100, 13, 1, "", "const InQuad"], [100, 13, 1, "", "const InQuart"], [100, 13, 1, "", "const InQuintic"], [100, 13, 1, "", "const InSine"], [100, 13, 1, "", "const InStep"], [100, 13, 1, "", "const KBD_BIT_CAPS_LOCK = 1"], [100, 13, 1, "", "const KBD_BIT_NUM_LOCK = 2"], [100, 13, 1, "", "const KBD_BIT_SCROLL_LOCK = 4"], [100, 13, 1, "", "const KEEP_ASPECT_FILL"], [100, 13, 1, "", "const KEEP_ASPECT_FIT"], [100, 13, 1, "", "const KEEP_ASPECT_NONE"], [100, 13, 1, "", "const Linear"], [117, 13, 1, "", "const MB_ABORT_RETRY_IGNORE"], [117, 13, 1, "", "const MB_BUTTON_1"], [117, 13, 1, "", "const MB_BUTTON_2"], [117, 13, 1, "", "const MB_BUTTON_3"], [117, 13, 1, "", "const MB_CANCEL_TRY_CONTINUE"], [117, 13, 1, "", "const MB_CLOSE"], [117, 13, 1, "", "const MB_DEF_BUTTON_1"], [117, 13, 1, "", "const MB_DEF_BUTTON_2"], [117, 13, 1, "", "const MB_DEF_BUTTON_3"], [117, 13, 1, "", "const MB_FAIL"], [117, 13, 1, "", "const MB_FOREGROUND"], [117, 13, 1, "", "const MB_ICON_ERROR"], [117, 13, 1, "", "const MB_ICON_INFORMATION"], [117, 13, 1, "", "const MB_ICON_QUESTION"], [117, 13, 1, "", "const MB_ICON_WARNING"], [117, 13, 1, "", "const MB_NATIVE_DLG"], [117, 13, 1, "", "const MB_OK"], [117, 13, 1, "", "const MB_OK_CANCEL"], [117, 13, 1, "", "const MB_RETRY_CANCEL"], [117, 13, 1, "", "const MB_TOPMOST"], [117, 13, 1, "", "const MB_YES_NO"], [117, 13, 1, "", "const MB_YES_NO_CANCEL"], [100, 13, 1, "", "const MR_AREA"], [100, 13, 1, "", "const MR_B"], [100, 13, 1, "", "const MR_L"], [100, 13, 1, "", "const MR_LB"], [100, 13, 1, "", "const MR_LT"], [100, 13, 1, "", "const MR_NONE"], [100, 13, 1, "", "const MR_R"], [100, 13, 1, "", "const MR_RB"], [100, 13, 1, "", "const MR_RT"], [100, 13, 1, "", "const MR_T"], [138, 13, 1, "", "const NINTENDO_SWITCH"], [100, 13, 1, "", "const O_HORIZONTAL"], [100, 13, 1, "", "const O_VERTICAL"], [100, 13, 1, "", "const OutBack"], [100, 13, 1, "", "const OutBounce"], [100, 13, 1, "", "const OutCirc"], [100, 13, 1, "", "const OutCubic"], [100, 13, 1, "", "const OutElastic"], [100, 13, 1, "", "const OutExp"], [100, 13, 1, "", "const OutQuad"], [100, 13, 1, "", "const OutQuart"], [100, 13, 1, "", "const OutQuintic"], [100, 13, 1, "", "const OutSine"], [100, 13, 1, "", "const OutStep"], [100, 13, 1, "", "const PANEL_ANCHOR_ENTITY = int"], [100, 13, 1, "", "const PANEL_ANCHOR_HEAD = int"], [100, 13, 1, "", "const PANEL_ANCHOR_LEFTHAND = int"], [100, 13, 1, "", "const PANEL_ANCHOR_NONE = int"], [100, 13, 1, "", "const PANEL_ANCHOR_RIGHTHAND = int"], [100, 13, 1, "", "const PANEL_ANCHOR_SCENE = int"], [100, 13, 1, "", "const PANEL_ANCHOR_VRSPACE = int"], [100, 13, 1, "", "const PANEL_GEOMETRY_NONE = int"], [100, 13, 1, "", "const PANEL_GEOMETRY_RECTANGLE = int"], [100, 13, 1, "", "const PANEL_RC_FACE_ENTITY = int"], [100, 13, 1, "", "const PANEL_RC_FACE_HEAD = int"], [100, 13, 1, "", "const PANEL_RC_FACE_HEAD_LOCK_Y = int"], [100, 13, 1, "", "const PANEL_RC_FACE_LEFT_HAND = int"], [100, 13, 1, "", "const PANEL_RC_FACE_RIGHT_HAND = int"], [100, 13, 1, "", "const PANEL_RC_NONE = int"], [100, 13, 1, "", "const PANEL_RENDER_ALWAYS_ON_TOP = int"], [100, 13, 1, "", "const PANEL_RENDER_CAST_SHADOW = int"], [100, 13, 1, "", "const PANEL_RENDER_OPAQUE = int"], [138, 13, 1, "", "const PS4"], [138, 13, 1, "", "const PS4_PRO"], [138, 13, 1, "", "const PS5"], [138, 13, 1, "", "const PS5_PRO"], [100, 13, 1, "", "const R_PROCESSED"], [117, 13, 1, "", "const SANITIZER"], [100, 13, 1, "", "const SIZE_TO_CONTENT"], [100, 13, 1, "", "const S_ACTIVE"], [100, 13, 1, "", "const S_DRAG"], [100, 13, 1, "", "const S_HOTKEY_ACTIVE"], [100, 13, 1, "", "const S_HOVER"], [100, 13, 1, "", "const S_JOYSTICK_ACTIVE"], [100, 13, 1, "", "const S_KBD_ACTIVE"], [100, 13, 1, "", "const S_KB_FOCUS"], [100, 13, 1, "", "const S_MOUSE_ACTIVE"], [100, 13, 1, "", "const S_TOP_HOVER"], [100, 13, 1, "", "const S_TOUCH_ACTIVE"], [100, 13, 1, "", "const S_VR_ACTIVE"], [100, 13, 1, "", "const Shake4"], [100, 13, 1, "", "const Shake6"], [100, 13, 1, "", "const TOVERFLOW_CHAR"], [100, 13, 1, "", "const TOVERFLOW_CLIP"], [100, 13, 1, "", "const TOVERFLOW_LINE"], [100, 13, 1, "", "const TOVERFLOW_WORD"], [124, 13, 1, "", "const TYPE_ARRAY"], [124, 13, 1, "", "const TYPE_AUTO"], [124, 13, 1, "", "const TYPE_BOOL"], [124, 13, 1, "", "const TYPE_BOOL_LIST"], [124, 13, 1, "", "const TYPE_COLOR"], [124, 13, 1, "", "const TYPE_COLOR_LIST"], [124, 13, 1, "", "const TYPE_DPOINT3"], [124, 13, 1, "", "const TYPE_EID"], [124, 13, 1, "", "const TYPE_EID_LIST"], [124, 13, 1, "", "const TYPE_FLOAT"], [124, 13, 1, "", "const TYPE_FLOAT_LIST"], [124, 13, 1, "", "const TYPE_INT"], [124, 13, 1, "", "const TYPE_INT16"], [124, 13, 1, "", "const TYPE_INT64"], [124, 13, 1, "", "const TYPE_INT64_LIST"], [124, 13, 1, "", "const TYPE_INT8"], [124, 13, 1, "", "const TYPE_INT_LIST"], [124, 13, 1, "", "const TYPE_IPOINT2"], [124, 13, 1, "", "const TYPE_IPOINT2_LIST"], [124, 13, 1, "", "const TYPE_IPOINT3"], [124, 13, 1, "", "const TYPE_IPOINT3_LIST"], [124, 13, 1, "", "const TYPE_IPOINT4"], [124, 13, 1, "", "const TYPE_IPOINT4_LIST"], [124, 13, 1, "", "const TYPE_MATRIX"], [124, 13, 1, "", "const TYPE_OBJECT"], [124, 13, 1, "", "const TYPE_POINT2"], [124, 13, 1, "", "const TYPE_POINT2_LIST"], [124, 13, 1, "", "const TYPE_POINT3"], [124, 13, 1, "", "const TYPE_POINT3_LIST"], [124, 13, 1, "", "const TYPE_POINT4"], [124, 13, 1, "", "const TYPE_POINT4_LIST"], [124, 13, 1, "", "const TYPE_SHARED_ARRAY"], [124, 13, 1, "", "const TYPE_SHARED_OBJECT"], [124, 13, 1, "", "const TYPE_STRING"], [124, 13, 1, "", "const TYPE_STRING_LIST"], [124, 13, 1, "", "const TYPE_TAG"], [124, 13, 1, "", "const TYPE_TMATRIX_LIST"], [124, 13, 1, "", "const TYPE_UINT"], [124, 13, 1, "", "const TYPE_UINT16"], [124, 13, 1, "", "const TYPE_UINT16_LIST"], [124, 13, 1, "", "const TYPE_UINT64"], [124, 13, 1, "", "const TYPE_UINT64_LIST"], [124, 13, 1, "", "const TYPE_UINT8"], [138, 13, 1, "", "const UNKNOWN"], [100, 13, 1, "", "const VECTOR_CENTER_LINE"], [100, 13, 1, "", "const VECTOR_COLOR"], [100, 13, 1, "", "const VECTOR_ELLIPSE"], [100, 13, 1, "", "const VECTOR_FILL_COLOR"], [100, 13, 1, "", "const VECTOR_INNER_LINE"], [100, 13, 1, "", "const VECTOR_INVERSE_POLY"], [100, 13, 1, "", "const VECTOR_LINE"], [100, 13, 1, "", "const VECTOR_LINE_DASHED"], [100, 13, 1, "", "const VECTOR_LINE_INDENT_PCT"], [100, 13, 1, "", "const VECTOR_LINE_INDENT_PX"], [100, 13, 1, "", "const VECTOR_MID_COLOR"], [100, 13, 1, "", "const VECTOR_NOP"], [100, 13, 1, "", "const VECTOR_OPACITY"], [100, 13, 1, "", "const VECTOR_OUTER_LINE"], [100, 13, 1, "", "const VECTOR_POLY"], [100, 13, 1, "", "const VECTOR_QUADS"], [100, 13, 1, "", "const VECTOR_RECTANGLE"], [100, 13, 1, "", "const VECTOR_SECTOR"], [100, 13, 1, "", "const VECTOR_TM_OFFSET"], [100, 13, 1, "", "const VECTOR_TM_SCALE"], [100, 13, 1, "", "const VECTOR_WIDTH"], [138, 13, 1, "", "const XBOXONE"], [138, 13, 1, "", "const XBOXONE_S"], [138, 13, 1, "", "const XBOXONE_X"], [138, 13, 1, "", "const XBOX_ANACONDA"], [138, 13, 1, "", "const XBOX_LOCKHART"], [100, 13, 1, "", "const XMB_CONTINUE"], [100, 13, 1, "", "const XMB_STOP"], [117, 13, 1, "", "const argv"], [100, 13, 1, "", "fValue"], [100, 13, 1, "", "fgColor"], [100, 13, 1, "", "fillColor"], [100, 14, 1, "", "function Color"], [124, 14, 1, "", "function _dbg_get_all_comps_inspect"], [124, 14, 1, "", "function _dbg_get_comp_val_inspect"], [123, 14, 1, "", "function abort_requests"], [82, 14, 1, "", "function add_entity_in_net_scope"], [126, 14, 1, "", "function add_entity_save_order_comp"], [126, 14, 1, "", "function add_group_require"], [126, 14, 1, "", "function add_group_variant"], [126, 14, 1, "", "function add_group_variext"], [100, 14, 1, "", "function anim_request_stop"], [100, 14, 1, "", "function anim_skip"], [100, 14, 1, "", "function anim_skip_delay"], [100, 14, 1, "", "function anim_start"], [84, 14, 1, "", "function apply_video_settings"], [83, 14, 1, "", "function are_settings_changes_committed"], [104, 14, 1, "", "function assert"], [104, 14, 1, "", "function assertf"], [122, 14, 1, "", "function broadcastNetEvent"], [97, 14, 1, "", "function browser_add_window_method"], [97, 14, 1, "", "function browser_get_current_title"], [97, 14, 1, "", "function browser_get_current_url"], [97, 14, 1, "", "function browser_go"], [97, 14, 1, "", "function browser_go_back"], [97, 14, 1, "", "function browser_reload_page"], [100, 14, 1, "", "function calc_comp_size"], [124, 14, 1, "", "function calc_hash"], [124, 14, 1, "", "function calc_hash_int"], [100, 14, 1, "", "function calc_str_box"], [97, 14, 1, "", "function can_use_embeded_browser"], [100, 14, 1, "", "function capture_kb_focus"], [84, 14, 1, "", "function change_gamma"], [84, 14, 1, "", "function change_paper_white_nits"], [137, 14, 1, "", "function check_path"], [120, 14, 1, "", "function clearTimer"], [124, 14, 1, "", "function clear_callback_timer"], [126, 14, 1, "", "function clear_entity_save_order"], [126, 14, 1, "", "function clear_groups"], [124, 14, 1, "", "function clear_timer"], [124, 14, 1, "", "function clear_vm_entity_systems"], [125, 14, 1, "", "function client_request_broadcast_net_sqevent"], [125, 14, 1, "", "function client_request_unicast_net_sqevent"], [85, 14, 1, "", "function closeGraphicsAutodetect"], [98, 14, 1, "", "function command"], [83, 14, 1, "", "function commit_settings_changes"], [98, 14, 1, "", "function console_command"], [104, 14, 1, "", "function console_print"], [98, 14, 1, "", "function console_register_command"], [130, 14, 1, "", "function crc32"], [130, 14, 1, "", "function crc32_int"], [111, 14, 1, "", "function cvt"], [104, 14, 1, "", "function debug"], [104, 14, 1, "", "function debug_dump_stack"], [133, 14, 1, "", "function decode"], [96, 14, 1, "", "function decodeString"], [120, 14, 1, "", "function defer"], [120, 14, 1, "", "function deferOnce"], [123, 14, 1, "", "function del_entry"], [145, 14, 1, "", "function deleteRegKey"], [145, 14, 1, "", "function deleteRegValue"], [114, 14, 1, "", "function detect_slow_calls"], [117, 14, 1, "", "function dgs_get_settings"], [106, 14, 1, "", "function dir_exists"], [111, 14, 1, "", "function dir_to_quat"], [110, 14, 1, "", "function doesLocTextExist"], [114, 14, 1, "", "function dump"], [112, 14, 1, "", "function dump_all"], [100, 14, 1, "", "function elemh"], [100, 14, 1, "", "function elemw"], [140, 14, 1, "", "function ellipse"], [96, 14, 1, "", "function encodeBlk"], [96, 14, 1, "", "function encodeBlob"], [96, 14, 1, "", "function encodeJson"], [96, 14, 1, "", "function encodeString"], [124, 14, 1, "", "function end_es_loading"], [111, 14, 1, "", "function euler_to_quat"], [127, 14, 1, "", "function eventbus_has_foreign_listeners"], [127, 14, 1, "", "function eventbus_has_listeners"], [127, 14, 1, "", "function eventbus_send"], [127, 14, 1, "", "function eventbus_send_foreign"], [127, 14, 1, "", "function eventbus_subscribe"], [127, 14, 1, "", "function eventbus_subscribe_onehit"], [127, 14, 1, "", "function eventbus_unsubscribe"], [117, 14, 1, "", "function exit"], [104, 14, 1, "", "function fatal"], [106, 14, 1, "", "function file_exists"], [140, 14, 1, "", "function fill_inverse_poly"], [140, 14, 1, "", "function fill_poly"], [106, 14, 1, "", "function find_files"], [137, 14, 1, "", "function find_path"], [100, 14, 1, "", "function flex"], [100, 14, 1, "", "function fontH"], [109, 14, 1, "", "function format_msec"], [109, 14, 1, "", "function format_unix_time"], [119, 14, 1, "", "function format_unixtime"], [115, 14, 1, "", "function frnd"], [126, 14, 1, "", "function gather_ri_by_sphere"], [115, 14, 1, "", "function gauss_rnd"], [110, 14, 1, "", "function getCurrentLanguage"], [99, 14, 1, "", "function getEditMode"], [100, 14, 1, "", "function getFontDefHt"], [100, 14, 1, "", "function getFontInitialHt"], [110, 14, 1, "", "function getForceLanguage"], [85, 14, 1, "", "function getGpuBenchmarkDuration"], [146, 14, 1, "", "function getInt"], [110, 14, 1, "", "function getLocTextForLang"], [85, 14, 1, "", "function getPresetFor60Fps"], [85, 14, 1, "", "function getPresetForMaxFPS"], [85, 14, 1, "", "function getPresetForMaxQuality"], [145, 14, 1, "", "function getRegInt"], [145, 14, 1, "", "function getRegString"], [146, 14, 1, "", "function getStr"], [99, 14, 1, "", "function getWorkMode"], [117, 14, 1, "", "function get_all_arg_values_by_name"], [123, 14, 1, "", "function get_all_entries"], [117, 14, 1, "", "function get_arg_value_by_name"], [84, 14, 1, "", "function get_available_monitors"], [143, 14, 1, "", "function get_battery"], [143, 14, 1, "", "function get_battery_capacity_mah"], [77, 14, 1, "", "function get_button_state"], [103, 14, 1, "", "function get_clipboard_text"], [105, 14, 1, "", "function get_common_appdata_dir"], [124, 14, 1, "", "function get_comp_flags"], [124, 14, 1, "", "function get_comp_type"], [138, 14, 1, "", "function get_console_model"], [138, 14, 1, "", "function get_console_model_revision"], [84, 14, 1, "", "function get_current_window_resolution"], [82, 14, 1, "", "function get_dasevent_net_version"], [138, 14, 1, "", "function get_default_lang"], [84, 14, 1, "", "function get_default_static_resolution_scale"], [84, 14, 1, "", "function get_dlss_state"], [84, 14, 1, "", "function get_dlssg_support_state"], [105, 14, 1, "", "function get_downloads_dir"], [126, 14, 1, "", "function get_ecs_tags"], [100, 14, 1, "", "function get_element_info"], [105, 14, 1, "", "function get_exe_dir"], [100, 14, 1, "", "function get_font_metrics"], [84, 14, 1, "", "function get_fsr_supported"], [105, 14, 1, "", "function get_game_dir"], [105, 14, 1, "", "function get_gamedata_dir"], [126, 14, 1, "", "function get_instance"], [77, 14, 1, "", "function get_joystick_axis"], [105, 14, 1, "", "function get_local_appdata_dir"], [119, 14, 1, "", "function get_local_unixtime"], [138, 14, 1, "", "function get_locale_country"], [138, 14, 1, "", "function get_locale_lang"], [117, 14, 1, "", "function get_log_directory"], [104, 14, 1, "", "function get_log_filename"], [84, 14, 1, "", "function get_low_latency_modes"], [112, 14, 1, "", "function get_memory_allocated_kb"], [118, 14, 1, "", "function get_meta_info_from_screenshot"], [84, 14, 1, "", "function get_monitor_info"], [100, 14, 1, "", "function get_mouse_cursor_pos"], [77, 14, 1, "", "function get_mouse_pos"], [134, 14, 1, "", "function get_native_module_names"], [143, 14, 1, "", "function get_network_connection_type"], [84, 14, 1, "", "function get_performance_display_mode_support"], [138, 14, 1, "", "function get_platform_string_id"], [126, 14, 1, "", "function get_point_action_ext_eid"], [126, 14, 1, "", "function get_point_action_ext_id"], [126, 14, 1, "", "function get_point_action_ext_mtx"], [126, 14, 1, "", "function get_point_action_ext_name"], [126, 14, 1, "", "function get_point_action_ext_sph"], [126, 14, 1, "", "function get_point_action_has_pos"], [126, 14, 1, "", "function get_point_action_mod"], [126, 14, 1, "", "function get_point_action_op"], [126, 14, 1, "", "function get_point_action_pos"], [117, 14, 1, "", "function get_primary_screen_info"], [112, 14, 1, "", "function get_quirrel_object_size"], [112, 14, 1, "", "function get_quirrel_object_size_as_string"], [136, 14, 1, "", "function get_replay_proto_version"], [126, 14, 1, "", "function get_ri_from_entity"], [115, 14, 1, "", "function get_rnd_seed"], [126, 14, 1, "", "function get_saved_components"], [126, 14, 1, "", "function get_scene_filepath"], [124, 14, 1, "", "function get_semantic_type"], [83, 14, 1, "", "function get_setting_by_blk_path"], [82, 14, 1, "", "function get_sync_time"], [105, 14, 1, "", "function get_temp_dir"], [126, 14, 1, "", "function get_template_name_for_ui"], [143, 14, 1, "", "function get_thermal_state"], [119, 14, 1, "", "function get_time_msec"], [119, 14, 1, "", "function get_time_usec"], [114, 14, 1, "", "function get_total_time"], [82, 14, 1, "", "function get_user_id"], [143, 14, 1, "", "function get_user_system_info"], [84, 14, 1, "", "function get_video_modes"], [84, 14, 1, "", "function get_xess_state"], [136, 14, 1, "", "function has_network"], [108, 14, 1, "", "function httpAbort"], [108, 14, 1, "", "function httpDownload"], [108, 14, 1, "", "function httpRequest"], [85, 14, 1, "", "function initGraphicsAutodetect"], [110, 14, 1, "", "function initLocalization"], [123, 14, 1, "", "function init_cache"], [118, 14, 1, "", "function init_file_drop_handler"], [143, 14, 1, "", "function inline_raytracing_available"], [99, 14, 1, "", "function isFreeCamMode"], [85, 14, 1, "", "function isGpuBenchmarkRunning"], [126, 14, 1, "", "function is_any_entity_selected"], [126, 14, 1, "", "function is_asset_wnd_shown"], [143, 14, 1, "", "function is_charging"], [84, 14, 1, "", "function is_dlss_quality_available_at_resolution"], [84, 14, 1, "", "function is_dx12"], [126, 14, 1, "", "function is_editor_activated"], [128, 14, 1, "", "function is_exports_symbol"], [84, 14, 1, "", "function is_fullscreen_enabled"], [138, 14, 1, "", "function is_gdk_used"], [84, 14, 1, "", "function is_gui_driver_select_enabled"], [84, 14, 1, "", "function is_hdr_available"], [84, 14, 1, "", "function is_hdr_enabled"], [84, 14, 1, "", "function is_hfr_supported"], [84, 14, 1, "", "function is_inline_rt_supported"], [84, 14, 1, "", "function is_only_low_gi_supported"], [112, 14, 1, "", "function is_quirrel_object_larger_than"], [84, 14, 1, "", "function is_rendinst_tessellation_supported"], [136, 14, 1, "", "function is_server"], [84, 14, 1, "", "function is_upsampling"], [84, 14, 1, "", "function is_vrr_supported"], [84, 14, 1, "", "function is_vulkan"], [84, 14, 1, "", "function is_xess_quality_available_at_resolution"], [140, 14, 1, "", "function line"], [140, 14, 1, "", "function line_dashed"], [110, 14, 1, "", "function loc"], [119, 14, 1, "", "function local_timetbl_to_unixtime"], [100, 14, 1, "", "function locate_element_source"], [104, 14, 1, "", "function logerr"], [126, 14, 1, "", "function make_cam_spawn_tm"], [111, 14, 1, "", "function make_tm_axis"], [111, 14, 1, "", "function make_tm_quat"], [111, 14, 1, "", "function matrix_to_euler"], [130, 14, 1, "", "function md5"], [117, 14, 1, "", "function message_box"], [106, 14, 1, "", "function mkdir"], [106, 14, 1, "", "function mkpath"], [124, 14, 1, "", "function modify_es_list"], [100, 14, 1, "", "function move_mouse_cursor"], [135, 14, 1, "", "function ndbDelete"], [135, 14, 1, "", "function ndbExists"], [135, 14, 1, "", "function ndbRead"], [135, 14, 1, "", "function ndbTryRead"], [135, 14, 1, "", "function ndbWrite"], [132, 14, 1, "", "function object_to_json_string"], [132, 14, 1, "", "function object_to_zstd_json"], [124, 14, 1, "", "function obsolete_dbg_get_comp_val"], [124, 14, 1, "", "function obsolete_dbg_set_comp_val"], [134, 14, 1, "", "function on_module_unload"], [132, 14, 1, "", "function parse_json"], [132, 14, 1, "", "function parse_json_from_zstd_stream"], [109, 14, 1, "", "function parse_msec"], [109, 14, 1, "", "function parse_unix_time"], [100, 14, 1, "", "function ph"], [110, 14, 1, "", "function processHypenationsCN"], [110, 14, 1, "", "function processHypenationsJP"], [137, 14, 1, "", "function project_to_nearest_navmesh_point"], [137, 14, 1, "", "function project_to_nearest_navmesh_point_no_obstacles"], [100, 14, 1, "", "function pw"], [111, 14, 1, "", "function qinterp"], [111, 14, 1, "", "function quat_rotation_arc"], [111, 14, 1, "", "function quat_to_euler"], [111, 14, 1, "", "function quat_to_matrix"], [102, 14, 1, "", "function rayhit_normalized"], [106, 14, 1, "", "function read_text_from_file"], [106, 14, 1, "", "function read_text_from_file_on_disk"], [140, 14, 1, "", "function rect"], [119, 14, 1, "", "function ref_time_ticks"], [145, 14, 1, "", "function regKeyExists"], [145, 14, 1, "", "function regValueExists"], [98, 14, 1, "", "function register_command"], [124, 14, 1, "", "function register_entity_system"], [83, 14, 1, "", "function remove_setting_by_blk_path"], [108, 14, 1, "", "function requestHttp"], [123, 14, 1, "", "function request_entry"], [120, 14, 1, "", "function resetTimeout"], [112, 14, 1, "", "function reset_all"], [126, 14, 1, "", "function reset_component"], [114, 14, 1, "", "function reset_values"], [100, 14, 1, "", "function resolve_button"], [100, 14, 1, "", "function resolve_button_id"], [115, 14, 1, "", "function rnd"], [115, 14, 1, "", "function rnd_float"], [115, 14, 1, "", "function rnd_int"], [126, 14, 1, "", "function save_add_template"], [83, 14, 1, "", "function save_changed_settings"], [126, 14, 1, "", "function save_component"], [126, 14, 1, "", "function save_del_template"], [83, 14, 1, "", "function save_settings"], [106, 14, 1, "", "function scan_folder"], [104, 14, 1, "", "function screenlog"], [140, 14, 1, "", "function sector"], [122, 14, 1, "", "function sendNetEvent"], [142, 14, 1, "", "function send_counter"], [142, 14, 1, "", "function send_gauge"], [142, 14, 1, "", "function send_gauge_dec"], [142, 14, 1, "", "function send_gauge_inc"], [142, 14, 1, "", "function send_histogram"], [142, 14, 1, "", "function send_profile"], [125, 14, 1, "", "function server_broadcast_net_sqevent"], [125, 14, 1, "", "function server_send_net_sqevent"], [98, 14, 1, "", "function setConsoleObjPrintFunc"], [99, 14, 1, "", "function setEditMode"], [100, 14, 1, "", "function setFontDefHt"], [120, 14, 1, "", "function setInterval"], [110, 14, 1, "", "function setLanguageToSettings"], [98, 14, 1, "", "function setObjPrintFunc"], [99, 14, 1, "", "function setPointActionPreview"], [145, 14, 1, "", "function setRegInt"], [145, 14, 1, "", "function setRegString"], [120, 14, 1, "", "function setTimeout"], [99, 14, 1, "", "function setWorkMode"], [117, 14, 1, "", "function set_app_window_title"], [124, 14, 1, "", "function set_callback_timer"], [124, 14, 1, "", "function set_callback_timer_rt"], [103, 14, 1, "", "function set_clipboard_text"], [84, 14, 1, "", "function set_dlssg_suppressed"], [112, 14, 1, "", "function set_huge_alloc_threshold"], [100, 14, 1, "", "function set_kb_focus"], [115, 14, 1, "", "function set_rnd_seed"], [83, 14, 1, "", "function set_setting_by_blk_path"], [83, 14, 1, "", "function set_setting_by_blk_path_and_save"], [126, 14, 1, "", "function set_start_work_mode"], [124, 14, 1, "", "function set_timer"], [100, 14, 1, "", "function sh"], [130, 14, 1, "", "function sha1"], [116, 14, 1, "", "function shell_execute"], [148, 14, 1, "", "function sound_abandon"], [148, 14, 1, "", "function sound_close_stream"], [148, 14, 1, "", "function sound_debug_trace"], [148, 14, 1, "", "function sound_get_length"], [148, 14, 1, "", "function sound_get_output_devices"], [148, 14, 1, "", "function sound_get_record_devices"], [148, 14, 1, "", "function sound_get_stream_state"], [148, 14, 1, "", "function sound_get_stream_state_name"], [148, 14, 1, "", "function sound_get_timeline_pos"], [148, 14, 1, "", "function sound_init_event"], [148, 14, 1, "", "function sound_init_stream"], [148, 14, 1, "", "function sound_is_playing"], [148, 14, 1, "", "function sound_keyoff"], [148, 14, 1, "", "function sound_open_stream"], [148, 14, 1, "", "function sound_play"], [148, 14, 1, "", "function sound_play_one_shot"], [148, 14, 1, "", "function sound_play_one_shot_3d"], [148, 14, 1, "", "function sound_release_all_instances"], [148, 14, 1, "", "function sound_release_event"], [148, 14, 1, "", "function sound_release_stream"], [148, 14, 1, "", "function sound_set_3d_attr"], [148, 14, 1, "", "function sound_set_callbacks"], [148, 14, 1, "", "function sound_set_output_device"], [148, 14, 1, "", "function sound_set_stream_pos"], [148, 14, 1, "", "function sound_set_timeline_pos"], [148, 14, 1, "", "function sound_set_var"], [148, 14, 1, "", "function sound_set_volume"], [148, 14, 1, "", "function sound_start"], [115, 14, 1, "", "function srnd"], [114, 14, 1, "", "function start"], [85, 14, 1, "", "function startGpuBenchmark"], [124, 14, 1, "", "function start_es_loading"], [106, 14, 1, "", "function stat"], [114, 14, 1, "", "function stop"], [114, 14, 1, "", "function stop_and_save_to_file"], [100, 14, 1, "", "function sw"], [137, 14, 1, "", "function traceray_navmesh"], [102, 14, 1, "", "function traceray_normalized"], [115, 14, 1, "", "function uint32_hash"], [115, 14, 1, "", "function uint_noise1D"], [115, 14, 1, "", "function uint_noise2D"], [115, 14, 1, "", "function uint_noise3D"], [119, 14, 1, "", "function unixtime_to_local_timetbl"], [119, 14, 1, "", "function unixtime_to_utc_timetbl"], [119, 14, 1, "", "function utc_timetbl_to_unixtime"], [124, 13, 1, "", "g_entity_mgr = instance of EntityManager class"], [100, 13, 1, "", "gui_scene = instance of GuiScene"], [100, 13, 1, "", "opacity"], [100, 13, 1, "", "picSaturate"], [100, 13, 1, "", "rotate"], [100, 13, 1, "", "scale"], [100, 13, 1, "", "translate"], [100, 13, 1, "", "var gamepadCursorHoverMinMul"]], "BfgEcsNodeAnnotation": [[58, 11, 1, "", "apply"], [58, 11, 1, "", "declareES"], [58, 11, 1, "", "declareReloadCallback"], [58, 11, 1, "", "parseArgs"]], "ResourceSlotEcsAnnotation": [[75, 11, 1, "", "apply"], [75, 11, 1, "", "declareES"], [75, 11, 1, "", "declareReloadCallback"], [75, 11, 1, "", "parseArgs"]], "EventDataRect": [[100, 13, 1, "", "b"], [100, 13, 1, "", "l"], [100, 13, 1, "", "r"], [100, 13, 1, "", "t"]], "const AnalogStickActionBinding": [[121, 13, 1, "", "AXIS_NULL_ID"], [121, 13, 1, "", "BAD_ACTION_HANDLE"], [121, 13, 1, "", "BAD_ACTION_SET_HANDLE"], [121, 13, 1, "", "BTN_NULL_ID"], [121, 13, 1, "", "BTN_pressed"], [121, 13, 1, "", "BTN_pressed2"], [121, 13, 1, "", "BTN_pressed3"], [121, 13, 1, "", "BTN_pressed_long"], [121, 13, 1, "", "BTN_released"], [121, 13, 1, "", "BTN_released_long"], [121, 13, 1, "", "BTN_released_short"], [121, 13, 1, "", "DEV_USED_gamepad"], [121, 13, 1, "", "DEV_USED_kbd"], [121, 13, 1, "", "DEV_USED_mouse"], [121, 13, 1, "", "DEV_USED_touch"], [121, 13, 1, "", "DEV_gamepad"], [121, 13, 1, "", "DEV_joy"], [121, 13, 1, "", "DEV_kbd"], [121, 13, 1, "", "DEV_none"], [121, 13, 1, "", "DEV_nullstub"], [121, 13, 1, "", "DEV_pointing"], [121, 13, 1, "", "GAMEPAD_VENDOR_MICROSOFT"], [121, 13, 1, "", "GAMEPAD_VENDOR_NINTENDO"], [121, 13, 1, "", "GAMEPAD_VENDOR_SONY"], [121, 13, 1, "", "GAMEPAD_VENDOR_UNKNOWN"], [121, 13, 1, "", "ST_cancelled"], [121, 13, 1, "", "ST_finished"], [121, 13, 1, "", "ST_in_progress"], [121, 13, 1, "", "TYPEGRP_AXIS"], [121, 13, 1, "", "TYPEGRP_DIGITAL"], [121, 13, 1, "", "TYPEGRP_STICK"], [121, 13, 1, "", "TYPEGRP__MASK"], [121, 13, 1, "", "TYPE_ABSMOUSE"], [121, 13, 1, "", "TYPE_BUTTON"], [121, 13, 1, "", "TYPE_STEERWHEEL"], [121, 13, 1, "", "TYPE_STICK"], [121, 13, 1, "", "TYPE_STICK_DELTA"], [121, 13, 1, "", "TYPE_SYSMOUSE"], [121, 13, 1, "", "TYPE_TRIGGER"]], "const Behaviors": [[100, 13, 1, "", "BoundToArea"], [100, 13, 1, "", "Button"], [100, 13, 1, "", "ComboPopup"], [100, 13, 1, "", "DragAndDrop"], [100, 13, 1, "", "EatInput"], [100, 13, 1, "", "FpsBar"], [100, 13, 1, "", "InspectPicker"], [100, 13, 1, "", "LatencyBar"], [100, 13, 1, "", "Marquee"], [100, 13, 1, "", "MoveResize"], [100, 13, 1, "", "MoveToArea"], [100, 13, 1, "", "Movie"], [100, 13, 1, "", "OverlayTransparency"], [100, 13, 1, "", "Pannable"], [100, 13, 1, "", "Pannable2touch"], [100, 13, 1, "", "Parallax"], [100, 13, 1, "", "PieMenu"], [100, 13, 1, "", "ProcessGesture"], [100, 13, 1, "", "ProcessPointingInput"], [100, 13, 1, "", "RecalcHandler"], [100, 13, 1, "", "RtPropUpdate"], [100, 13, 1, "", "ScrollEvent"], [100, 13, 1, "", "Slider"], [100, 13, 1, "", "SmoothScrollStack"], [100, 13, 1, "", "SwipeScroll"], [100, 13, 1, "", "TextArea"], [100, 13, 1, "", "TextAreaEdit"], [100, 13, 1, "", "TextInput"], [100, 13, 1, "", "TrackMouse"], [100, 13, 1, "", "TransitionSize"], [100, 13, 1, "", "WheelScroll"]], "method AnalogStickActionBinding": [[121, 14, 1, "", "activate_action_set"], [121, 14, 1, "", "append_actions_binding"], [121, 14, 1, "", "check_bindings_conflicts"], [121, 14, 1, "", "check_bindings_conflicts_one"], [121, 14, 1, "", "check_bindings_hides_action"], [121, 14, 1, "", "clear_action_set_actions"], [121, 14, 1, "", "clear_actions_binding"], [121, 14, 1, "", "dump_action_set"], [121, 14, 1, "", "dump_action_sets"], [121, 14, 1, "", "dump_action_sets_stack"], [121, 14, 1, "", "enable_darg_events_for_button_clicks"], [121, 14, 1, "", "enable_debug_traces"], [121, 14, 1, "", "enable_joystick_gyroscope"], [121, 14, 1, "", "finish_recording_bindings"], [121, 14, 1, "", "format_ctrl_name"], [121, 14, 1, "", "get_action_binding"], [121, 14, 1, "", "get_action_bindings_text"], [121, 14, 1, "", "get_action_handle"], [121, 14, 1, "", "get_action_handle_by_ord"], [121, 14, 1, "", "get_action_name"], [121, 14, 1, "", "get_action_set_actions"], [121, 14, 1, "", "get_action_set_handle"], [121, 14, 1, "", "get_action_set_handle_by_ord"], [121, 14, 1, "", "get_action_set_name"], [121, 14, 1, "", "get_action_set_stack_depth"], [121, 14, 1, "", "get_action_set_stack_item"], [121, 14, 1, "", "get_action_sets_count"], [121, 14, 1, "", "get_action_type"], [121, 14, 1, "", "get_actions_binding_column_active"], [121, 14, 1, "", "get_actions_binding_columns"], [121, 14, 1, "", "get_actions_config_version"], [121, 14, 1, "", "get_actions_count"], [121, 14, 1, "", "get_analog_axis_action_binding"], [121, 14, 1, "", "get_analog_axis_action_state"], [121, 14, 1, "", "get_analog_stick_action_binding"], [121, 14, 1, "", "get_analog_stick_action_smooth_value"], [121, 14, 1, "", "get_analog_stick_action_state"], [121, 14, 1, "", "get_current_action_set"], [121, 14, 1, "", "get_default_preset_prefix"], [121, 14, 1, "", "get_digital_action_binding"], [121, 14, 1, "", "get_digital_action_state"], [121, 14, 1, "", "get_double_click_time"], [121, 14, 1, "", "get_group_tag_for_action"], [121, 14, 1, "", "get_group_tag_str_for_action"], [121, 14, 1, "", "get_joystick_stick_dead_zone"], [121, 14, 1, "", "get_joystick_stick_dead_zone_abs"], [121, 14, 1, "", "get_last_used_device_mask"], [121, 14, 1, "", "get_long_press_time"], [121, 14, 1, "", "get_main_gamepad_stick_dead_zone"], [121, 14, 1, "", "get_main_gamepad_stick_dead_zone_abs"], [121, 14, 1, "", "get_overall_button_clicks_count"], [121, 14, 1, "", "get_tag_str"], [121, 14, 1, "", "get_user_config_base_preset"], [121, 14, 1, "", "get_user_props"], [121, 14, 1, "", "is_action_active"], [121, 14, 1, "", "is_action_binding_set"], [121, 14, 1, "", "is_action_internal"], [121, 14, 1, "", "is_action_stateful"], [121, 14, 1, "", "is_recording_complete"], [121, 14, 1, "", "is_recording_in_progress"], [121, 14, 1, "", "is_user_config_customized"], [121, 14, 1, "", "is_user_props_customized"], [121, 14, 1, "", "load_actions_binding"], [121, 14, 1, "", "load_user_config"], [121, 14, 1, "", "reset_action_binding"], [121, 14, 1, "", "reset_action_set_stack"], [121, 14, 1, "", "reset_actions_binding"], [121, 14, 1, "", "reset_digital_action_sticky_toggle"], [121, 14, 1, "", "reset_user_config_to_currest_preset"], [121, 14, 1, "", "reset_user_config_to_preset"], [121, 14, 1, "", "save_actions_binding"], [121, 14, 1, "", "save_user_config"], [121, 14, 1, "", "send_action_event"], [121, 14, 1, "", "send_action_terminated_event"], [121, 14, 1, "", "set_action_binding"], [121, 14, 1, "", "set_actions_binding_column_active"], [121, 14, 1, "", "set_analog_axis_action_state"], [121, 14, 1, "", "set_analog_stick_action_smooth_value"], [121, 14, 1, "", "set_breaking_action_set"], [121, 14, 1, "", "set_default_preset_prefix"], [121, 14, 1, "", "set_digital_event_progress_monitor"], [121, 14, 1, "", "set_double_click_time"], [121, 14, 1, "", "set_joystick_stick_dead_zone"], [121, 14, 1, "", "set_long_press_time"], [121, 14, 1, "", "set_main_gamepad_stick_dead_zone"], [121, 14, 1, "", "setup_action_set"], [121, 14, 1, "", "start_recording_bindings"], [121, 14, 1, "", "start_recording_bindings_for_single_button"]], "method BaseList": [[124, 14, 1, "", "getAll"], [124, 14, 1, "", "indexof"], [124, 14, 1, "", "isReadOnly"], [124, 14, 1, "", "len"], [124, 14, 1, "", "listType"]], "method CompObject": [[124, 14, 1, "", "append"], [124, 14, 1, "", "getAll"], [124, 14, 1, "", "indexof"], [124, 14, 1, "", "insert"], [124, 14, 1, "", "isReadOnly"], [124, 14, 1, "", "len"], [124, 14, 1, "", "pop"], [124, 14, 1, "", "remove"]], "method CompObjectRO": [[124, 14, 1, "", "len"], [124, 14, 1, "", "remove"]], "method Computed": [[129, 14, 1, "", "_noComputeErrorFor"], [129, 14, 1, "", "getSources"], [129, 14, 1, "", "modify"], [129, 14, 1, "", "mutate"], [129, 14, 1, "", "set"], [129, 14, 1, "", "update"]], "method DataBlock": [[95, 14, 1, "", "__getVersion"], [95, 14, 1, "", "addBlock"], [95, 14, 1, "", "addBool"], [95, 14, 1, "", "addE3dcolor"], [95, 14, 1, "", "addIPoint3"], [95, 14, 1, "", "addInt"], [95, 14, 1, "", "addNewBlock"], [95, 14, 1, "", "addPoint2"], [95, 14, 1, "", "addPoint3"], [95, 14, 1, "", "addPoint4"], [95, 14, 1, "", "addReal"], [95, 14, 1, "", "addStr"], [95, 14, 1, "", "addTm"], [95, 14, 1, "", "findParam"], [95, 14, 1, "", "formatAsString"], [95, 14, 1, "", "getBlock"], [95, 14, 1, "", "getBlockByName"], [95, 14, 1, "", "getBool"], [95, 14, 1, "", "getE3dcolor"], [95, 14, 1, "", "getIPoint3"], [95, 14, 1, "", "getInt"], [95, 14, 1, "", "getParamTypeAnnotation"], [95, 14, 1, "", "getParamValue"], [95, 14, 1, "", "getParseCommentsAsParams"], [95, 14, 1, "", "getParseIncludesAsParams"], [95, 14, 1, "", "getParseOverridesIgnored"], [95, 14, 1, "", "getParseOverridesNotApply"], [95, 14, 1, "", "getPoint2"], [95, 14, 1, "", "getPoint3"], [95, 14, 1, "", "getPoint4"], [95, 14, 1, "", "getReal"], [95, 14, 1, "", "getStr"], [95, 14, 1, "", "getTm"], [95, 14, 1, "", "load"], [95, 14, 1, "", "loadFromText"], [95, 14, 1, "", "paramExists"], [95, 14, 1, "", "removeBlock"], [95, 14, 1, "", "removeBlockById"], [95, 14, 1, "", "removeParam"], [95, 14, 1, "", "removeParamById"], [95, 14, 1, "", "saveToTextFile"], [95, 14, 1, "", "saveToTextFileCompact"], [95, 14, 1, "", "setBool"], [95, 14, 1, "", "setE3dcolor"], [95, 14, 1, "", "setFrom"], [95, 14, 1, "", "setIPoint3"], [95, 14, 1, "", "setInt"], [95, 14, 1, "", "setInt64"], [95, 14, 1, "", "setParamFrom"], [95, 14, 1, "", "setParamsFrom"], [95, 14, 1, "", "setParseCommentsAsParams"], [95, 14, 1, "", "setParseIncludesAsParams"], [95, 14, 1, "", "setParseOverridesIgnored"], [95, 14, 1, "", "setParseOverridesNotApply"], [95, 14, 1, "", "setPoint2"], [95, 14, 1, "", "setPoint3"], [95, 14, 1, "", "setPoint4"], [95, 14, 1, "", "setReal"], [95, 14, 1, "", "setStr"], [95, 14, 1, "", "setTm"], [95, 14, 1, "", "set_root"], [95, 14, 1, "", "tryLoad"]], "method E3DCOLOR": [[111, 14, 1, "", "set"]], "method ElementRef": [[100, 14, 1, "", "getCompDesc"], [100, 14, 1, "", "getContentHeight"], [100, 14, 1, "", "getContentWidth"], [100, 14, 1, "", "getHeight"], [100, 14, 1, "", "getScreenPosX"], [100, 14, 1, "", "getScreenPosY"], [100, 14, 1, "", "getScrollOffsX"], [100, 14, 1, "", "getScrollOffsY"], [100, 14, 1, "", "getWidth"]], "method Event": [[124, 14, 1, "", "getType"]], "method GuiScene": [[100, 14, 1, "", "addPanel"], [100, 14, 1, "", "clearTimer"], [100, 14, 1, "", "enableInput"], [100, 14, 1, "", "forceCursorActive"], [100, 14, 1, "", "getAllObservables"], [100, 14, 1, "", "getCompAABBbyKey"], [100, 14, 1, "", "getJoystickAxis"], [100, 14, 1, "", "haveActiveCursorOnPanels"], [100, 14, 1, "", "mark_panel_dirty"], [100, 14, 1, "", "removePanel"], [100, 14, 1, "", "setConfigProps"], [100, 14, 1, "", "setHotkeysNavHandler"], [100, 14, 1, "", "setShutdownHandler"], [100, 14, 1, "", "setUpdateHandler"], [100, 14, 1, "", "setXmbFocus"]], "method List": [[124, 14, 1, "", "append"], [124, 14, 1, "", "clear"], [124, 14, 1, "", "insert"], [124, 14, 1, "", "pop"], [124, 14, 1, "", "remove"]], "method Point2": [[111, 14, 1, "", "length"], [111, 14, 1, "", "lengthSq"], [111, 14, 1, "", "normalize"]], "method Point3": [[111, 14, 1, "", "length"], [111, 14, 1, "", "lengthSq"], [111, 14, 1, "", "normalize"]], "method Point4": [[111, 14, 1, "", "getcol"], [111, 14, 1, "", "inverse"], [111, 14, 1, "", "orthonormalize"], [111, 14, 1, "", "setcol"]], "method ScrollHandler": [[100, 14, 1, "", "scrollToChildren"], [100, 14, 1, "", "scrollToX"], [100, 14, 1, "", "scrollToY"]], "method SqQuery": [[124, 14, 1, "", "perform"]], "method Template": [[124, 14, 1, "", "getBase"], [124, 14, 1, "", "getCompVal"], [124, 14, 1, "", "getCompValNullable"], [124, 14, 1, "", "getComponentsNames"], [124, 14, 1, "", "getName"], [124, 14, 1, "", "getNumParentTemplates"], [124, 14, 1, "", "getParentTemplate"], [124, 14, 1, "", "getTags"], [124, 14, 1, "", "hasComponent"]], "method TemplateDB": [[124, 14, 1, "", "getComponentMetaInfo"], [124, 14, 1, "", "getTemplateByName"], [124, 14, 1, "", "getTemplateMetaInfo"], [124, 14, 1, "", "hasComponentMetaInfo"], [124, 14, 1, "", "size"]], "method regexp2": [[139, 14, 1, "", "fullmatch"], [139, 14, 1, "", "match"], [139, 14, 1, "", "multiExtract"], [139, 14, 1, "", "pattern"], [139, 14, 1, "", "replace"]], "operator BaseList": [[124, 14, 1, "", "_get"], [124, 14, 1, "", "_nexti"]], "operator CompObject": [[124, 14, 1, "", "_get"], [124, 14, 1, "", "_nexti"], [124, 14, 1, "", "_set"]], "operator CompObjectRO": [[124, 14, 1, "", "_get"], [124, 14, 1, "", "_newslot"], [124, 14, 1, "", "_nexti"], [124, 14, 1, "", "_set"]], "operator Computed": [[129, 14, 1, "", "_call"], [129, 14, 1, "", "_delslot"], [129, 14, 1, "", "_newslot"]], "operator DataBlock": [[95, 14, 1, "", "_get"], [95, 14, 1, "", "_modulo"], [95, 14, 1, "", "_newslot"], [95, 14, 1, "", "_nexti"], [95, 14, 1, "", "_set"]], "operator E3DCOLOR": [[111, 14, 1, "", "_add"], [111, 14, 1, "", "_mul"], [111, 14, 1, "", "_sub"]], "operator IPoint3": [[111, 14, 1, "", "_add"], [111, 14, 1, "", "_sub"], [111, 14, 1, "", "_unm"]], "operator List": [[124, 14, 1, "", "_set"]], "operator Point2": [[111, 14, 1, "", "_add"], [111, 14, 1, "", "_mul"], [111, 14, 1, "", "_sub"], [111, 14, 1, "", "_unm"]], "operator Point4": [[111, 14, 1, "", "_add"], [111, 14, 1, "", "_get"], [111, 14, 1, "", "_modulo"], [111, 14, 1, "", "_mul"], [111, 14, 1, "", "_set"], [111, 14, 1, "", "_sub"], [111, 14, 1, "", "_unm"]], "operator Quat": [[111, 14, 1, "", "_add"], [111, 14, 1, "", "_sub"], [111, 14, 1, "", "_unm"]], "operator SqQuery": [[124, 14, 1, "", "_call"]], "property AnalogAxisActionBinding": [[121, 13, 1, "", "axisId"], [121, 13, 1, "", "axisRelativeVal"], [121, 13, 1, "", "deadZoneThres"], [121, 13, 1, "", "decBtn"], [121, 13, 1, "", "devId"], [121, 13, 1, "", "incBtn"], [121, 13, 1, "", "instantIncDecBtn"], [121, 13, 1, "", "invAxis"], [121, 13, 1, "", "maxBtn"], [121, 13, 1, "", "maxVal"], [121, 13, 1, "", "minBtn"], [121, 13, 1, "", "mod"], [121, 13, 1, "", "modCnt"], [121, 13, 1, "", "nonLin"], [121, 13, 1, "", "quantizeValOnIncDecBtn"], [121, 13, 1, "", "relIncScale"]], "property AnalogStickActionBinding": [[121, 13, 1, "", "axisSnapAngK"], [121, 13, 1, "", "axisXId"], [121, 13, 1, "", "axisXinv"], [121, 13, 1, "", "axisYId"], [121, 13, 1, "", "axisYinv"], [121, 13, 1, "", "deadZoneThres"], [121, 13, 1, "", "devId"], [121, 13, 1, "", "maxVal"], [121, 13, 1, "", "maxXBtn"], [121, 13, 1, "", "maxYBtn"], [121, 13, 1, "", "minXBtn"], [121, 13, 1, "", "minYBtn"], [121, 13, 1, "", "mod"], [121, 13, 1, "", "modCnt"], [121, 13, 1, "", "nonLin"], [121, 13, 1, "", "sensScale"]], "property Computed": [[129, 13, 1, "", "used"]], "property DigitalActionBinding": [[121, 13, 1, "", "axisCtrlThres"], [121, 13, 1, "", "btnCtrl"], [121, 13, 1, "", "ctrlId"], [121, 13, 1, "", "devId"], [121, 13, 1, "", "eventType"], [121, 13, 1, "", "mod"], [121, 13, 1, "", "modCnt"], [121, 13, 1, "", "stickyToggle"], [121, 13, 1, "", "unordCombo"]], "property GuiScene": [[100, 13, 1, "", "circleButtonAsAction"], [100, 13, 1, "", "config"], [100, 13, 1, "", "cursorOverClickable"], [100, 13, 1, "", "cursorOverStickScroll"], [100, 13, 1, "", "cursorPresent"], [100, 13, 1, "", "hoveredClickableInfo"], [100, 13, 1, "", "keyboardLayout"], [100, 13, 1, "", "keyboardLocks"], [100, 13, 1, "", "updateCounter"], [100, 13, 1, "", "xmbMode"]], "property MouseClickEventData": [[100, 13, 1, "", "targetRect"]], "property ScrollHandler": [[100, 13, 1, "", "elem"]], "property SingleButtonId": [[121, 13, 1, "", "btnId"], [121, 13, 1, "", "devId"]], "var E3DCOLOR": [[111, 13, 1, "", "b"], [111, 13, 1, "", "g"], [111, 13, 1, "", "r"]], "var EntityManager": [[124, 13, 1, "", "curTime"], [124, 13, 1, "", "dt"]], "var IPoint3": [[111, 13, 1, "", "w"], [111, 13, 1, "", "x"], [111, 13, 1, "", "y"], [111, 13, 1, "", "z"]], "var Point2": [[111, 13, 1, "", "x"], [111, 13, 1, "", "y"]], "var Point3": [[111, 13, 1, "", "x"], [111, 13, 1, "", "y"], [111, 13, 1, "", "z"]], "var Quat": [[111, 13, 1, "", "x"], [111, 13, 1, "", "y"]], "var SceneConfig": [[100, 13, 1, "", "clickPriority"], [100, 13, 1, "", "clickRumbleDuration"], [100, 13, 1, "", "clickRumbleEnabled"], [100, 13, 1, "", "clickRumbleHiFreq"], [100, 13, 1, "", "clickRumbleLoFreq"], [100, 13, 1, "", "defaultCursor"], [100, 13, 1, "", "defaultFont"], [100, 13, 1, "", "defaultFontSize"], [100, 13, 1, "", "dirPadRepeatDelay"], [100, 13, 1, "", "dirPadRepeatTime"], [100, 13, 1, "", "gamepadCursorAxisH"], [100, 13, 1, "", "gamepadCursorAxisV"], [100, 13, 1, "", "gamepadCursorControl"], [100, 13, 1, "", "gamepadCursorDeadZone"], [100, 13, 1, "", "gamepadCursorHoverMaxMul"], [100, 13, 1, "", "gamepadCursorHoverMaxTime"], [100, 13, 1, "", "gamepadCursorNonLin"], [100, 13, 1, "", "gamepadCursorSpeed"], [100, 13, 1, "", "joystickScrollAxisH"], [100, 13, 1, "", "joystickScrollAxisV"], [100, 13, 1, "", "kbCursorControl"], [100, 13, 1, "", "reportNestedWatchedUpdate"], [100, 13, 1, "", "useDefaultCursor"]], "var SensScale": [[80, 13, 1, "", "humanAiming"], [80, 13, 1, "", "humanFpsCam"], [80, 13, 1, "", "humanTpsCam"], [80, 13, 1, "", "planeCam"], [80, 13, 1, "", "vehicleCam"]]}, "objtypes": {"0": "c:macro", "1": "cpp:enum", "2": "cpp:enumerator", "3": "cpp:class", "4": "cpp:member", "5": "cpp:type", "6": "cpp:function", "7": "cpp:functionParam", "8": "cpp:templateParam", "9": "cpp:union", "10": "das:attribute", "11": "das:function", "12": "sq:method", "13": "sq:attribute", "14": "sq:function"}, "objnames": {"0": ["c", "macro", "C macro"], "1": ["cpp", "enum", "C++ enum"], "2": ["cpp", "enumerator", "C++ enumerator"], "3": ["cpp", "class", "C++ class"], "4": ["cpp", "member", "C++ member"], "5": ["cpp", "type", "C++ type"], "6": ["cpp", "function", "C++ function"], "7": ["cpp", "functionParam", "C++ function parameter"], "8": ["cpp", "templateParam", "C++ template parameter"], "9": ["cpp", "union", "C++ union"], "10": ["das", "attribute", "Daslang attribute"], "11": ["das", "function", "Daslang function"], "12": ["sq", "method", "Quirrel method"], "13": ["sq", "attribute", "Quirrel attribute"], "14": ["sq", "function", "Quirrel function"]}, "titleterms": {"dagor": [0, 18, 19, 24, 25, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 208, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 228, 229, 230, 231, 264, 279, 280, 281, 285], "shade": [0, 49, 289], "languag": 0, "dshl": 0, "doc": [0, 21, 79, 213], "content": [0, 19, 25, 26, 55, 57, 65, 69, 76, 151, 152, 154, 156, 159, 161, 162, 166, 167, 170, 176, 179, 198, 211, 212, 215, 217, 226, 233, 234, 235, 236, 240, 242, 244, 246, 248, 249, 256, 264, 265, 267, 271, 279, 281, 283, 284, 286, 287, 288], "basic": [1, 18, 150, 161, 199, 213, 245, 254, 285], "concept": [1, 18, 289], "condit": [2, 14], "data": [3, 14, 18, 285], "type": [3, 14, 60, 61, 149, 159, 161, 174, 235, 239, 250, 259, 285], "variabl": [3, 49, 201], "global": [3, 11, 14, 186, 201, 205, 232, 269], "local": [3, 110, 201, 210, 262, 269], "textur": [3, 12, 15, 17, 54, 68, 149, 161, 169, 173, 174, 178, 185, 190, 191, 192, 194, 195, 197, 199, 200, 201, 204, 207, 232, 237, 238, 239, 262, 266], "buffer": [3, 12, 17, 29, 42, 47, 50], "throw": 4, "compil": [4, 17, 20], "error": [4, 20, 155, 201, 258, 269, 285], "hardwar": [5, 14], "defin": [5, 17], "includ": [6, 14, 159, 250], "interv": [7, 14], "option": [7, 161, 174, 204, 225, 239, 247, 269], "assum": 7, "macro": [8, 14], "channel": [9, 14], "common": [10, 14, 155, 161, 165, 247, 258, 285], "direct": [10, 14, 15, 213, 250], "no_dynstcod": 10, "dont_rend": 10, "no_ablend": 10, "constant": [11, 14, 47, 52, 74, 205], "intrins": 12, "float": 12, "time_phas": 12, "period": 12, "offset": [12, 201], "sin": 12, "x": [12, 252], "co": 12, "pow": 12, "y": 12, "float4": 12, "vecpow": 12, "v": [12, 247, 285, 289], "sqrt": 12, "min": 12, "max": [12, 159, 177, 216, 217, 226, 234, 242, 285, 289], "fsel": 12, "b": 12, "c": [12, 20], "srgbread": 12, "get_dimens": 12, "t": [12, 20, 192], "int": 12, "mip": [12, 272], "get_siz": 12, "get_viewport": 12, "exists_tex": 12, "exists_buf": 12, "introduct": [13, 149, 208], "keyword": [14, 161], "boolean": 14, "modifi": [14, 175, 197, 285], "materi": [14, 15, 17, 169, 176, 188, 201, 205, 239, 285, 289], "shader": [14, 17, 31, 32, 46, 47, 169, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 232, 252, 289], "block": [14, 17, 158, 161, 164, 213, 214, 250], "graphic": 14, "pipelin": [14, 16], "set": [14, 83, 160, 174, 175, 201, 220, 222, 228, 235, 237, 245, 252, 269, 289], "still": 14, "uncategor": 14, "paramet": [15, 153, 158, 159, 161, 163, 172, 178, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 197, 199, 200, 201, 202, 204, 205, 206, 207, 228, 232, 235, 243, 247, 259, 269, 289], "two": 15, "side": 15, "render": [15, 25, 40, 41, 149, 161, 237, 252, 259], "render_stag": 15, "state": [16, 18, 40, 63, 70], "configur": [16, 157, 160, 169, 172, 201, 213, 221, 232, 266, 285, 289], "blend": [16, 197, 201, 205, 235], "depth": [16, 200], "stencil": 16, "cull": 16, "alpha": [16, 197], "coverag": 16, "view": [16, 17, 51], "instanc": [16, 149, 259], "color": [16, 195, 197, 200, 201, 205, 231, 289], "write": [16, 44, 213], "mask": [16, 201, 206], "preshad": 17, "exampl": [17, 18, 20, 157, 159, 161, 163, 174, 190, 197, 229, 231, 239, 285, 289], "sampler": [17, 45], "hardcod": 17, "regist": [17, 72, 74], "unord": 17, "access": [17, 71, 72, 73, 74, 218, 219, 221, 222, 223, 224, 225, 228, 229, 230, 231, 262, 276], "top": [17, 60, 61, 201], "level": [17, 60, 61, 150, 158, 194, 205, 265, 266, 269, 275], "acceler": 17, "structur": [17, 52, 60, 70, 153, 159, 188, 214, 235, 250, 266, 275, 285, 289], "layer": [17, 199, 201, 289], "us": [17, 159, 161, 174, 201, 218, 219, 220, 222, 223, 224, 225, 228, 229, 230, 231, 235, 239, 250, 262], "ec": [18, 19, 58, 75, 91, 92, 93, 124, 125], "characterist": 18, "work": [18, 37, 64, 155, 169, 186, 194, 201, 222, 245, 254, 268, 285], "directli": 18, "entiti": [18, 243, 252], "legaci": 18, "oop": 18, "differ": [18, 75, 205], "approach": 18, "perform": [18, 73], "creation": [18, 159, 161, 173], "handl": [18, 60, 70, 71], "frame": 18, "updat": [18, 42, 232], "codegen": 18, "code": [18, 20, 155, 277], "video": 18, "lectur": 18, "scheme": 20, "event": [20, 91, 124], "dascript": 20, "quirrel": [20, 79, 93, 131], "net": [20, 82, 94, 136], "advantag": [20, 228], "declar": [20, 62, 159], "an": [20, 157, 174, 196, 201, 262], "creat": [20, 153, 157, 159, 172, 175, 177, 208, 235, 243, 247, 283, 284, 285], "subscrib": 20, "send": 20, "server": 20, "client": [20, 269], "over": 20, "network": 20, "protocol": 20, "version": [20, 289], "contain": 20, "offlin": 20, "onlin": 20, "bitstream": 20, "reflect": [20, 200], "cpp_event": 20, "stub": 20, "gener": [20, 66, 153, 155, 161, 169, 174, 189, 200, 201, 205, 221, 228, 232, 239, 245, 247, 248, 260, 262, 272, 275, 285, 289], "filter": 20, "squirrel": 20, "deliveri": 20, "reliabl": 20, "enum": [20, 87, 100], "util": [20, 216], "faq": 20, "i": [20, 159, 173, 174, 269, 270], "have": 20, "want": 20, "move": 20, "its": 20, "while": 20, "keep": 20, "ecs_register_net_ev": 20, "eventusermarkdis": 20, "er": 20, "unicast": 20, "routing_server_to_cli": 20, "rcptf": 20, "entity_ctrl_conn": 20, "eventusermarkdisablednetmsg": 20, "target_ent": 20, "entir": 20, "script": [20, 159, 231, 275, 289], "need": 20, "base": [20, 150, 159, 174, 179, 186, 189, 205], "migrat": 20, "ad": [20, 168, 285, 289], "see": 20, "follow": 20, "e": 20, "darg": [20, 87, 88, 89, 100, 101], "index": [20, 50], "cmdherospeech": 20, "doe": 20, "exist": 20, "gendasev": 20, "bat": 20, "show": [20, 247, 252], "won": 20, "run": [20, 219, 260], "engin": [21, 24, 25, 208, 231, 275, 280, 285], "librari": [21, 24], "imag": 22, "raster": 22, "picturemanag": 23, "pictur": [23, 87, 100], "sourc": [23, 169, 172, 173, 174, 275, 277], "atlas": 23, "d3d": [26, 34, 37, 51, 55], "api": [26, 28, 31, 32, 33, 35, 37, 49, 50, 51, 55, 57, 76], "barrier": 27, "bindless": 28, "resourc": [28, 42, 43, 44, 48, 65, 66, 67, 69, 74, 75, 161, 231, 267, 269, 285], "driver": [30, 35, 252], "command": [30, 157, 253], "comput": [31, 129, 247], "dispatch": [31, 32, 64], "mesh": [32, 235, 257, 258], "draw": 33, "call": 33, "heap": 34, "callabl": 34, "method": [34, 53, 70, 153, 222, 269], "info": [35, 252], "gpu": 36, "relat": [36, 153], "lock": 36, "matric": 37, "perspect": 37, "object": [37, 153, 159, 164, 165, 169, 201, 205, 206, 213, 239, 254, 285, 289], "queri": 38, "renderpass": 39, "target": 41, "read": 44, "uav": 44, "program": 46, "const": 47, "tile": [48, 197, 200, 201, 205], "rate": 49, "vertex": [50, 195, 197, 231, 289], "scissor": 51, "enumer": [52, 60], "remark": 52, "all": [53, 162, 252, 285], "other": [53, 159], "helper": 55, "class": [55, 58, 75, 80, 87, 91, 95, 100, 111, 121, 124, 129, 139, 144, 259], "multidrawcontext": 56, "dabfg": 57, "bfg": [58, 61], "da": [58, 60, 61, 70, 74, 75], "function": [58, 59, 60, 61, 75, 178, 186, 187, 189, 197, 206], "annot": [58, 75], "core": 59, "dabfgcor": 60, "modul": [60, 70, 79, 131, 134], "alias": [60, 61], "registri": [61, 145], "manipul": 61, "request": [61, 72, 73], "node": [62, 64, 71, 159, 235, 237, 239, 243, 247], "control": [63, 80, 161, 169, 205, 220, 228, 229, 245, 254], "graph": 63, "runtim": 64, "manag": [65, 66, 68, 149, 160, 167], "id": 67, "slot": [69, 71, 72, 74, 75, 232], "resourceslotcor": 70, "oper": [70, 205, 206, 237], "storag": 72, "bfg_ec": 75, "refer": 76, "document": [76, 209, 210, 211, 213, 275, 281], "gamelib": [77, 131, 275], "input": [77, 237], "dargbox": 78, "sensscal": 80, "danetgam": [81, 150, 159, 174, 179, 186, 189, 205, 273, 274, 275], "videomod": 84, "gpubenchmark": 85, "danetgamelib": [86, 275], "guiscen": [87, 100], "sceneconfig": [87, 100], "animprop": [87, 100], "tabl": [87, 100, 214, 281], "behavior": [87, 100], "scrollhandl": [87, 100], "joystickaxisobserv": [87, 100], "elemgroup": [87, 100], "immedi": [87, 100], "extend": [87, 91, 100, 124, 129], "formattedtext": [87, 100], "igenvideoplay": [87, 100], "igensound": [87, 100], "draganddropst": [87, 100], "eventdatarect": [87, 100], "mouseclickeventdata": [87, 100], "hotkeyeventdata": [87, 100], "hovereventdata": [87, 100], "movetoareatarget": [87, 100], "lottieanim": [87, 100], "elementref": [87, 100], "debug": [88, 101, 104, 285], "framework": [89, 273, 274], "rendercanva": [90, 140], "baselist": [91, 124], "listro": [91, 124], "list": [91, 124, 214, 252], "schemelessev": [91, 124], "sqevent": [91, 124], "templatedb": [91, 124], "eventsdb": [91, 124], "templat": [91, 124, 169, 175], "entitymanag": [91, 124], "compobjectro": [91, 124], "compobject": [91, 124], "comparrai": [91, 124], "comparrayro": [91, 124], "sqqueri": [91, 124], "entityid": [91, 124], "netev": [92, 125], "datablock": 95, "base64": 96, "browser": 97, "consol": [98, 253], "daeditorembed": 99, "dacol": 102, "trace": 102, "clipboard": 103, "folder": [105, 161, 169, 269], "f": [106, 107], "vrom": 107, "http": 108, "iso8601": 109, "math": 111, "point2": 111, "point3": 111, "point4": 111, "quat": 111, "ipoint3": 111, "e3dcolor": 111, "color4": 111, "memtrac": 112, "perf": [113, 252], "profil": [114, 252], "random": [115, 159, 200, 243], "shell": 116, "system": [117, 118], "file_handl": 118, "time": [119, 252, 289], "workcycl": 120, "dainput2": 121, "singlebuttonid": 121, "digitalactionbind": 121, "analogaxisactionbind": 121, "analogstickactionbind": 121, "dasev": 122, "datacach": 123, "entity_editor": 126, "eventbu": 127, "execut": 128, "frp": 129, "watch": 129, "hash": 130, "nativ": 131, "json": 132, "jwt": 133, "nestdb": 135, "pathfind": 137, "platform": [138, 208, 289], "regexp2": 139, "sound": [141, 148], "statsd": 142, "sysinfo": 143, "utf8": 144, "win": 145, "yupfile_pars": 146, "soundsystem": 147, "asset": [149, 150, 151, 152, 158, 159, 161, 165, 167, 175, 196, 200, 244, 245, 246, 247, 248, 249, 254, 259, 262, 266, 269, 275, 285], "overview": [149, 153, 155, 157, 159, 168, 172, 174, 177, 178, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 199, 200, 201, 202, 203, 204, 205, 206, 207, 219, 222, 228, 231, 237, 243, 245, 247, 252, 254, 258, 260, 262, 266, 275, 289], "format": [149, 250, 251], "Their": 149, "rule": [149, 159, 161, 260], "dynam": [149, 169, 285, 289], "model": [149, 169, 172, 173, 285, 289], "composit": [149, 159, 168, 169, 173, 200, 235, 236, 239, 243, 244, 260], "how": [150, 151, 155, 174, 177, 194, 201, 210, 235, 262, 268, 276, 277], "test": [150, 151, 175, 197, 213, 219, 285, 289], "map": [150, 151, 168, 174, 190, 201, 205], "workflow": [150, 169, 229, 231, 245, 254, 262], "build": [150, 168, 210, 213, 245, 267, 269, 277], "chang": [150, 174, 235, 289], "export": [150, 161, 165, 168, 169, 175, 216, 220, 235, 239, 245, 252, 254, 269, 285, 289], "launch": 150, "project": [150, 165, 174, 186, 201, 252, 275], "enlist": 150, "cdk": [150, 283], "war": [150, 159, 205, 206, 283, 284], "thunder": [150, 159, 205, 206, 283, 284], "climbabl": 153, "ladder": [153, 154, 155], "geometri": [153, 155, 169, 186, 200, 239], "game": [153, 158, 159, 160, 208, 262, 275, 289], "guidelin": [153, 165, 285], "1": [153, 175, 201, 205, 269], "2": [153, 175, 218, 219, 220, 221, 223, 224, 225, 226, 228, 229, 230, 231, 269], "articl": 153, "infantri": 155, "navmesh": [155, 258], "vertic": 155, "design": [155, 271, 272, 288, 289], "incorrect": [155, 285], "gameobj": [155, 172, 173], "problemat": 155, "environ": [155, 277], "limit": [155, 165, 174, 235, 237, 239], "occlud": [156, 157], "box": [156, 157, 172, 173, 289], "edit": [157, 222, 235, 243], "verifi": 157, "setup": [157, 200, 201, 221, 239, 272, 289], "well": 157, "displai": [157, 235, 245, 247, 258], "applic": [158, 185, 275], "blk": [158, 159, 160, 161, 162, 163, 164, 165, 169, 247, 250, 251, 260, 269, 275, 285], "root": 158, "dynamicdef": 158, "clipmap": [158, 259], "hdr_mode": 158, "sdk": 158, "levelsblkprefix": 158, "level_metr": 158, "genobjtyp": 158, "dagored_visibility_tag": 158, "dagored_disabled_plugin": 158, "daeditorexportord": 158, "lightmap": 158, "projectdefault": 158, "shader_glob_vars_schem": 158, "heightmap": [158, 197, 201, 205], "additional_platform": 158, "assetlight": 158, "defprojectloc": 158, "animcharview": 158, "what": [159, 213, 269, 270], "file": [159, 161, 174, 235, 239, 250, 260, 266], "singl": 159, "multipl": 159, "transform": 159, "avail": 159, "simultan": 159, "name": [159, 169, 177, 220, 232, 239, 285], "convent": [159, 220, 285], "why": 159, "nest": [159, 250], "hierarchi": [159, 235], "practic": 159, "descript": [159, 165], "process": [159, 161, 169, 231, 269, 289], "chain": 159, "destruct": [159, 169, 231, 289], "placement": [159, 174], "problem": 159, "poor": 159, "proper": 159, "nuanc": [159, 245], "about": [159, 162, 269], "addit": [159, 161, 169, 196, 220, 231, 239, 259], "note": [159, 174, 196, 259, 289], "terrain": 159, "rel": 159, "each": 159, "precis": 159, "special": [159, 161, 174, 213, 285], "checklist": 159, "standard": [159, 200, 206], "manual": [159, 287], "daeditor": [159, 175, 201, 253, 254, 255, 256, 258, 259, 269], "dag2rir": [159, 260, 261], "editor": [159, 223, 230, 235, 236, 239, 243, 244], "viewer": [159, 175, 244, 245, 246, 247, 249, 269, 285], "dag4blend": [159, 235, 236, 237, 238, 239, 240], "add": [159, 234, 239, 241, 242, 243, 268], "blender": [159, 177, 235, 239, 241, 242], "3d": [159, 177, 226, 234, 242, 285, 289], "config": 160, "purpos": [160, 163], "specif": [160, 165, 201, 232, 269, 289], "adjust": [160, 272, 289], "syntax": [161, 250], "principl": [161, 205, 285], "scan": 161, "explan": [161, 163], "virtual": [161, 285], "virtual_r": 161, "kei": [161, 172, 208, 228, 229, 289], "tag": 161, "detail": [161, 163, 174, 197, 199, 201, 205, 289], "most": 161, "regexp": 161, "regular": 161, "express": 161, "pattern": 161, "symbol": 161, "explain": 161, "prefab": 161, "skeleton": [163, 285], "hierarch": 163, "depend": [163, 266, 269], "spline": [164, 259], "loft": [164, 259], "node_flag": 164, "shape": 164, "collid": 164, "obj_gener": 164, "hda": 164, "anim": [165, 166, 186, 285], "transfer": [165, 231, 289], "between": [165, 200], "custom": [165, 174, 220, 245, 272, 289], "properti": [165, 223, 230, 239, 243, 245, 254, 289], "animtre": [165, 285], "light": [168, 169, 170, 171, 172, 173, 174, 175], "fixtur": 168, "prepar": [168, 289], "workspac": 168, "flicker": [169, 173], "rendinst": [169, 252, 259], "dynmodel": [169, 285], "split": 169, "static": [169, 201, 205], "collis": [169, 220, 221, 228, 247, 248, 289], "animchar": [169, 285], "gameobject": 169, "cycl": 169, "element": 169, "bright": 169, "micro": 169, "nois": [169, 205], "vfx": 169, "catalog": 171, "consider": [172, 245, 285], "when": [172, 239], "new": [172, 235, 243, 247, 262, 268], "light__color": 172, "light__bright": 172, "light__max_radiu": 172, "spot_light__shadow": 172, "omni_light__shadow": 172, "spot_light__dynamic_obj_shadow": 172, "omni_light__dynamic_obj_shadow": 172, "spot_light__shadow_shrink": 172, "omni_light__shadow_shrink": 172, "spot_light__inner_attenu": 172, "light__texture_nam": 172, "light__nightli": 172, "light__use_box": 172, "emiss": [172, 173, 206], "strength": [172, 173], "visual": [172, 173, 197, 243], "restrict": [172, 173, 174], "guid": [173, 212, 285, 286], "main": [173, 239, 275], "point": [173, 205], "place": [173, 200], "photometr": 174, "integr": [174, 285], "import": [174, 235, 239, 270, 285, 289], "omni": 174, "usag": [174, 192, 197, 260, 266, 272], "photometri": 174, "support": [174, 208, 228, 230, 289], "spotlight": 174, "blur": 174, "angular": 174, "algorithm": 174, "technic": 174, "replac": [175, 235], "prop": 175, "phase": 175, "up": [175, 289], "preset": [175, 239, 247], "identif": [175, 289], "3": [175, 280], "4": 175, "final": [175, 289], "step": [175, 227, 231, 285, 286], "proxymat": 177, "assign": [177, 194, 201, 289], "dynamic_painted_by_mask": 178, "land_mesh_height_dec": 180, "rendinst_blend_diffuse_dec": 181, "rendinst_blend_normal_dec": 182, "rendinst_deferred_dec": 183, "rendinst_deferred_modulate2x_dec": 184, "rendinst_emiss": 185, "rendinst_flag_color": 186, "wind": 186, "rendinst_flag_lay": 187, "rendinst_mask_lay": 188, "rendinst_modulate2x_diffuse_dec": 189, "rendinst_refract": 190, "albedo": 190, "opac": 190, "normal": [190, 201, 205, 222, 224], "smooth": [190, 200, 239, 262], "height": [190, 205], "thick": 190, "isshel": 190, "is_window": 190, "rendinst_simpl": 191, "simple_ac": 191, "rendinst_simple_emissive_anim": 192, "dynamic_illum_anim": 192, "tex0": 192, "emis_anim_shader_tex_d": 192, "tif": 192, "tex3": 192, "emis_anim_shader_program": 192, "tex4": 192, "emis_anim_shader_shift": 192, "rendinst_simple_glass": 193, "rendinst_simple_paint": 194, "paint": [194, 197, 205, 206], "row": 194, "number": 194, "It": [194, 201, 237, 243, 268], "rendinst_tree_color": 195, "rendinst_tree_perlin_lay": 196, "tessel": [196, 252], "enabl": [196, 235, 262, 272], "rendinst_vcolor_lay": 197, "procedur": [197, 201, 205, 232], "overlai": [197, 201, 205], "vertexpaint": 197, "famili": [199, 202], "land_mesh_combined_dec": 199, "land_mesh_combin": 199, "dynamic_combined_dec": 199, "land_mesh_combined_detailed_dec": 199, "dynamic_combined_detailed_dec": 199, "One": 199, "land_mesh_combined_mixed_dec": 199, "dynamic_combined_mixed_dec": 199, "four": 199, "rendinst_interior_map": 200, "requir": [200, 204, 237, 289], "cubemap": 200, "fade": 200, "metal": [200, 231, 289], "room": 200, "proport": 200, "interior": 200, "size": 200, "space": 200, "window": 200, "illumin": 200, "glass": [200, 289], "distort": 200, "non": [200, 285, 286], "solut": 200, "simul": [200, 289], "larg": [200, 289], "rotat": [200, 245, 247], "individu": [200, 260], "separ": [200, 206, 289], "within": 200, "dag": [200, 260], "rendinst_lay": [201, 202], "univers": 201, "uniqu": 201, "exclus": 201, "conclus": 201, "uv": 201, "disabl": 201, "detail1": 201, "2_scroll_u": 201, "grow": 201, "grass": 201, "detail2": [201, 205], "deprec": 201, "top_project": 201, "top_projection_from": 201, "top_projection_to": 201, "top_projection_detail2_modul": 201, "landscap": [201, 254], "microdetail": [201, 205], "shadow": [201, 205], "slope": 201, "roof": 201, "flat": 201, "wooden": [201, 289], "trim": 201, "dynamic_lay": 202, "rendinst_layered_atest": 202, "rendinst_layered_lightmap": [202, 203], "rendinst_layered_hmap_blend": 202, "salt": 202, "sediment": 202, "rendinst_parallax_ic": 204, "rendinst_perlin_lay": 205, "first": [205, 280], "gradient": 205, "second": 205, "third": [205, 280], "perlin": 205, "invert_height": 205, "0": 205, "three": 205, "compon": [205, 289], "fourth": 205, "mask_gamma": 205, "blend_norm": 205, "freez": 205, "initi": [205, 272, 289], "shadervar": [205, 252], "ri_hmap": 205, "rendinst_simple_emiss": 206, "simple_aces_detail": 207, "featur": [208, 229, 235, 239, 285], "contribut": [209, 278], "qdox": [212, 213], "user": [212, 223, 289], "your": 213, "The": 213, "autodocument": 213, "func": 213, "mutltilin": 213, "analyz": 213, "restructuredtext": 213, "rst": 214, "cheatsheet": 214, "inlin": 214, "markup": 214, "escap": 214, "backslash": 214, "section": 214, "explicit": 214, "credit": 214, "home": 215, "tool": [216, 217, 219, 220, 221, 222, 224, 225, 226, 229, 231, 235, 239, 250, 262, 264, 266, 275], "connect": 216, "scene": [216, 237, 245, 285, 289], "mode": 216, "No": 216, "vnorm": 216, "optim": [216, 228], "log": [216, 239, 266], "ambient": 218, "occlus": 218, "baker": [218, 237, 238, 263], "instal": [218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 239, 272], "check": [219, 289], "degener": 219, "face": 219, "group": [220, 239], "damag": [221, 231], "review": 221, "interfac": [222, 230, 231, 243, 258], "puffi": 222, "polysurfac": 222, "classic": 222, "thief": 222, "fast": 223, "fix": [224, 225], "orient": [224, 259], "illeg": 225, "charact": [225, 285, 286], "uninstal": 227, "clean": 227, "lod": [228, 285], "comparison": 228, "qualiti": [228, 289], "advanc": 228, "pivot": 229, "painter": 229, "veget": 229, "simpl": 230, "cmp": [230, 235], "posit": [231, 289], "case": 231, "bent": 231, "effect": 231, "encod": 231, "verif": 231, "prototyp": 231, "car": 231, "unreal": 231, "nissan": 231, "instruct": 231, "dagormat": [232, 233], "inform": [232, 280], "dagorshaderscfggener": 232, "dev": 232, "ex": 232, "ons": [234, 241, 242], "": 235, "built": 235, "quickli": 235, "snap": 235, "surfac": 235, "bbox": 235, "To": 235, "explod": 235, "where": [237, 243], "find": [237, 243], "activ": 237, "output": 237, "text": [239, 250], "proxi": 239, "batch": [239, 266], "collect": 239, "overrid": [239, 250], "experiment": 239, "bake": [239, 262], "outlin": 243, "identifi": 243, "children": 243, "navig": [245, 254, 257, 258], "panel": [245, 247], "viewport": [245, 247], "statist": 245, "grid": 245, "gizmo": 245, "select": [245, 247], "k": 247, "dop": 247, "cut": 247, "off": [247, 252], "plane": 247, "convex": 247, "hacd": 247, "comment": 250, "delet": 250, "clone": 250, "last": 250, "sequenti": 250, "combin": [250, 289], "binari": [250, 277], "camera": 252, "dir": 252, "po": 252, "clear": 252, "reset": 252, "stat": 252, "envi": 252, "sun_from_tim": 252, "exit": 252, "help": 252, "land": 252, "commit_chang": 252, "ltmap": 252, "rebuild_color": 252, "dump": 252, "io": 252, "pc": 252, "ps3": 252, "ps4": 252, "xbox": 252, "open": [252, 269], "tex_metr": 252, "screenshot": 252, "ortho": 252, "set_workspac": 252, "reload": 252, "tex": 252, "hide": 252, "full": [252, 269], "ref": 252, "speed": 252, "shaderblk": 252, "app": 252, "tex_ref": 252, "save_tex": 252, "save_all_tex": 252, "stcode": 252, "reset_devic": 252, "hang_devic": 252, "send_gpu_dump": 252, "reload_shad": 252, "use_f": 252, "shaders_bindump_nam": 252, "water": 252, "hq": 252, "foam_hat": 252, "surface_folding_foam": 252, "foam_turbul": 252, "dependency_wind": 252, "alignment_wind": 252, "choppi": 252, "facet_s": 252, "amplitud": 252, "small_wave_fract": 252, "cascade_window_length": 252, "cascade_facet_s": 252, "rough": 252, "fft_resolut": 252, "fft_period": 252, "spectrum": 252, "vs_sampler": 252, "reset_rend": 252, "num_cascad": 252, "debug_mesh": 252, "rang": 252, "ski": 252, "convert_weather_blk_to_ent": 252, "hide_object": 252, "verify_lod": 252, "ri_gpu_object": 252, "invalid": 252, "rigrid": 252, "shaded_collis": 252, "none": 252, "alon": 252, "with_visu": 252, "alone_diff": 252, "with_visual_diff": 252, "wirefram": 252, "face_orient": 252, "gamer": 252, "update_pack": 252, "list_missing_for_r": 252, "list_missing_for_tex": 252, "list_missing_for_all_tex": 252, "riunitedvdata": 252, "statu": 252, "dumpmem": 252, "perfstat": 252, "dmunitedvdata": 252, "downgrad": 252, "setmaxlev": 252, "addref": 252, "delref": 252, "marklfu": 252, "logic": 254, "locat": 254, "jump": 258, "link": 258, "cover": 258, "tank": [258, 289], "sort": 259, "order": 259, "dure": 259, "recommend": 260, "quick": 262, "start": [262, 279], "impostor": [262, 263], "resolut": 262, "impostornormalmip": 262, "hack": 262, "dep": [265, 266], "intern": [266, 289], "packag": [268, 269], "dabuild": 269, "vromf": [269, 270], "affect": 269, "pack": 269, "Its": 269, "toggl": 269, "tip": [270, 285], "hint": 270, "substanc": [271, 272], "directori": 275, "_jbuild": 275, "1stpartylib": 275, "3rdpartylib": 275, "dagorinclud": 275, "sampl": [275, 282], "architectur": 275, "prog": 275, "ui": 275, "gamebas": 275, "develop": [275, 283], "gui": 275, "prebuilt": 277, "from": 277, "get": 279, "licens": 280, "bsd": 280, "claus": 280, "parti": 280, "softwar": 280, "distribut": 280, "copyright": 280, "indic": 281, "mission": [283, 284], "kit": 283, "human": [285, 286], "creatur": 285, "bone": 285, "physic": [285, 289], "skin": 285, "real": 285, "_char": 285, "_dynmodel": 285, "_animbnl": 285, "bracket": 285, "mismatch": 285, "summari": 285, "tutori": 287, "vehicl": [288, 289], "deform": [288, 289], "prerequisit": 289, "constraint": 289, "rigid": 289, "appli": 289, "part": 289, "auxiliari": 289, "fine": 289, "tune": 289, "bodi": 289, "In": 289, "refin": 289, "iter": 289, "enhanc": 289, "broken": 289, "post": 289, "extens": 289, "plastic": 289, "canva": 289, "fabric": 289, "organ": 289, "ffd": 289}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "quirrel": 1, "quirrel_pygment_lexer": 1, "daslang": 1, "sphinx.ext.viewcode": 1, "versionwarning.extension": 1, "sphinx": 57}, "alltitles": {"Dagor Shading Language (DSHL) docs": [[0, "dagor-shading-language-dshl-docs"]], "Contents:": [[0, null], [19, null], [25, null], [26, null], [55, null], [57, null], [65, null], [69, null], [76, null], [151, null], [152, null], [154, null], [156, null], [162, null], [166, null], [167, null], [170, null], [176, null], [179, null], [198, null], [211, null], [212, null], [215, null], [217, null], [226, null], [233, null], [234, null], [236, null], [240, null], [242, null], [244, null], [246, null], [248, null], [249, null], [256, null], [264, null], [265, null], [267, null], [271, null], [279, null], [281, null], [284, null], [286, null], [287, null], [288, null]], "Basic Concepts": [[1, "basic-concepts"]], "Conditionals": [[2, "conditionals"]], "Data types and variables": [[3, "data-types-and-variables"]], "Global variables": [[3, "global-variables"]], "Local variables": [[3, "local-variables"]], "Textures and Buffers": [[3, "textures-and-buffers"]], "Throwing compilation errors": [[4, "throwing-compilation-errors"]], "Hardware defines": [[5, "hardware-defines"]], "Includes": [[6, "includes"], [14, "includes"]], "Intervals": [[7, "intervals"], [14, "intervals"]], "Optional intervals": [[7, "optional-intervals"]], "Assumes": [[7, "assumes"]], "Macros": [[8, "macros"], [14, "macros"]], "Channels": [[9, "channels"], [14, "channels"]], "Common directives": [[10, "common-directives"], [14, "common-directives"]], "no_dynstcode": [[10, "no-dynstcode"]], "dont_render": [[10, "dont-render"]], "no_ablend": [[10, "no-ablend"]], "Global constants": [[11, "global-constants"], [14, "global-constants"]], "Intrinsics": [[12, "intrinsics"]], "float time_phase(float period, float offset)": [[12, "float-time-phase-float-period-float-offset"]], "float sin(float x)": [[12, "float-sin-float-x"]], "float cos(float x)": [[12, "float-cos-float-x"]], "float pow(float x, float y)": [[12, "float-pow-float-x-float-y"]], "float4 vecpow(float4 v, float a)": [[12, "float4-vecpow-float4-v-float-a"]], "float sqrt(float x)": [[12, "float-sqrt-float-x"]], "float min(float x, float y)": [[12, "float-min-float-x-float-y"]], "float max(float x, float y)": [[12, "float-max-float-x-float-y"]], "float fsel(float a, float b, float c)": [[12, "float-fsel-float-a-float-b-float-c"]], "float4 sRGBread(float4 v)": [[12, "float4-srgbread-float4-v"]], "float4 get_dimensions(texture t, int mip)": [[12, "float4-get-dimensions-texture-t-int-mip"]], "float get_size(buffer b)": [[12, "float-get-size-buffer-b"]], "float4 get_viewport()": [[12, "float4-get-viewport"]], "int exists_tex(texture t)": [[12, "int-exists-tex-texture-t"]], "int exists_buf(buffer b)": [[12, "int-exists-buf-buffer-b"]], "Introduction": [[13, "introduction"], [208, "introduction"]], "Keywords": [[14, "keywords"]], "Data types": [[14, "data-types"]], "Conditionals and booleans": [[14, "conditionals-and-booleans"]], "Data types modifiers": [[14, "data-types-modifiers"]], "Materials": [[14, "materials"], [15, "materials"], [176, "materials"]], "Hardware": [[14, "hardware"]], "Shader blocks": [[14, "shader-blocks"], [17, "shader-blocks"]], "Shaders": [[14, "shaders"], [17, "shaders"], [169, "shaders"], [198, "shaders"]], "Graphics pipeline settings": [[14, "graphics-pipeline-settings"]], "Still uncategorized": [[14, "still-uncategorized"]], "Textures": [[15, "textures"], [54, "textures"], [178, "textures"], [185, "textures"], [190, "textures"], [191, "textures"], [192, "textures"], [194, "textures"], [195, "textures"], [197, "textures"], [200, "textures"], [207, "textures"], [239, "textures"]], "Parameters": [[15, "parameters"], [178, "parameters"], [180, "parameters"], [181, "parameters"], [185, "parameters"], [186, "parameters"], [187, "parameters"], [188, "parameters"], [189, "parameters"], [190, "parameters"], [191, "parameters"], [192, "parameters"], [193, "parameters"], [194, "parameters"], [195, "parameters"], [197, "parameters"], [199, "parameters"], [200, "parameters"], [202, "parameters"], [202, "id1"], [204, "parameters"], [205, "parameters"], [206, "parameters"], [207, "parameters"], [235, "parameters"]], "Two sided rendering": [[15, "two-sided-rendering"]], "render_stage directive": [[15, "render-stage-directive"]], "Pipeline state configuration": [[16, "pipeline-state-configuration"]], "Blending": [[16, "blending"]], "Depth/Stencil": [[16, "depth-stencil"]], "Culling": [[16, "culling"]], "Alpha to coverage": [[16, "alpha-to-coverage"]], "View instancing": [[16, "view-instancing"]], "Color write mask": [[16, "color-write-mask"]], "Defining and compiling shaders": [[17, "defining-and-compiling-shaders"]], "Preshader": [[17, "preshader"]], "Examples": [[17, "examples"], [159, "examples"], [159, "id1"], [159, "id2"], [161, "examples"], [163, "examples"], [239, "examples"]], "Textures and samplers": [[17, "textures-and-samplers"]], "Material textures": [[17, "material-textures"]], "Buffers": [[17, "buffers"], [29, "buffers"]], "Hardcoded registers": [[17, "hardcoded-registers"]], "Unordered Access View": [[17, "unordered-access-view"]], "Top-level Acceleration Structure": [[17, "top-level-acceleration-structure"]], "Shader block layers": [[17, "shader-block-layers"]], "Using shader blocks in shaders": [[17, "using-shader-blocks-in-shaders"]], "Dagor ECS": [[18, "dagor-ecs"], [19, "dagor-ecs"]], "Basic concepts": [[18, "basic-concepts"]], "Characteristics": [[18, "characteristics"]], "Working Directly": [[18, "working-directly"]], "Entity States": [[18, "entity-states"]], "Legacy (OOP)": [[18, "legacy-oop"]], "Difference in Approaches": [[18, "difference-in-approaches"]], "Performance": [[18, "performance"]], "Entity Creation": [[18, "entity-creation"]], "Data Handling/Frame Update": [[18, "data-handling-frame-update"]], "Codegen": [[18, "codegen"]], "Code Example": [[18, "code-example"]], "Video Lecture": [[18, "video-lecture"]], "Schemeful Events (daScript, Quirrel, C++, Net)": [[20, "schemeful-events-dascript-quirrel-c-net"]], "Advantages of Schemeful Events": [[20, "advantages-of-schemeful-events"]], "Declaring an Event": [[20, "declaring-an-event"]], "Creating an Event": [[20, "creating-an-event"]], "Subscribing to an Event": [[20, "subscribing-to-an-event"]], "Sending Events (Server-to-Server, Client-to-Client)": [[20, "sending-events-server-to-server-client-to-client"]], "Sending Events Over the Network": [[20, "sending-events-over-the-network"]], "Network Protocol Version": [[20, "network-protocol-version"]], "Event Version": [[20, "event-version"]], "Sending Containers (Offline and Online)": [[20, "sending-containers-offline-and-online"]], "Sending BitStream": [[20, "sending-bitstream"]], "Reflection": [[20, "reflection"]], "C++ Event (cpp_event)": [[20, "c-event-cpp-event"]], "Quirrel Stubs / C++ Code Generation": [[20, "quirrel-stubs-c-code-generation"]], "Filters": [[20, "filters"]], "Filters in Squirrel": [[20, "filters-in-squirrel"]], "Filters in cpp_event": [[20, "filters-in-cpp-event"]], "Event Delivery Reliability": [[20, "event-delivery-reliability"]], "Enums": [[20, "enums"]], "Utilities": [[20, "utilities"]], "FAQ": [[20, "faq"]], "I have a C++ network event and want to move its declaration to daScript while keeping the event in C++. (Example: ECS_REGISTER_NET_EVENT(EventUserMarkDisabled, net::Er::Unicast, net::ROUTING_SERVER_TO_CLIENT, (&rcptf::entity_ctrl_conn));": [[20, "i-have-a-c-network-event-and-want-to-move-its-declaration-to-dascript-while-keeping-the-event-in-c-example-ecs-register-net-event-eventusermarkdisabled-net-er-unicast-net-routing-server-to-client-rcptf-entity-ctrl-conn-eventusermarkdisablednetmsg-rcptf-target-entity"]], "I have a C++ network event and want to move it entirely to scripts (no need for it in C++).": [[20, "i-have-a-c-network-event-and-want-to-move-it-entirely-to-scripts-no-need-for-it-in-c"]], "I have a script-based event and need to migrate it to C++.": [[20, "i-have-a-script-based-event-and-need-to-migrate-it-to-c"]], "I added an event, but I see the following error in Squirrel: [E] daRg: the index 'CmdHeroSpeech' does not exist.": [[20, "i-added-an-event-but-i-see-the-following-error-in-squirrel-e-darg-the-index-cmdherospeech-does-not-exist"]], "genDasevents.bat shows compilation errors and won\u2019t run.": [[20, "gendasevents-bat-shows-compilation-errors-and-wont-run"]], "Engine Libraries Docs": [[21, "engine-libraries-docs"]], "Image": [[22, "image"]], "Image Rasterization": [[22, "image-rasterization"]], "PictureManager": [[23, "picturemanager"]], "Picture Sources": [[23, "picture-sources"]], "Picture Atlases": [[23, "picture-atlases"]], "Dagor Engine Libraries": [[24, "dagor-engine-libraries"]], "Dagor Engine Render": [[25, "dagor-engine-render"]], "D3D API": [[26, "d3d-api"]], "Barriers": [[27, "barriers"]], "Bindless resources API": [[28, "bindless-resources-api"]], "Driver commands": [[30, "driver-commands"]], "Compute shader dispatch API": [[31, "compute-shader-dispatch-api"]], "Mesh shader dispatch API": [[32, "mesh-shader-dispatch-api"]], "Draw calls API": [[33, "draw-calls-api"]], "Heaps": [[34, "heaps"]], "Callable d3d:: methods": [[34, "callable-d3d-methods"]], "Driver info API": [[35, "driver-info-api"]], "GPU related locks": [[36, "gpu-related-locks"]], "D3D API for work with matrices and perspective object": [[37, "d3d-api-for-work-with-matrices-and-perspective-object"]], "Queries": [[38, "queries"]], "RenderPass": [[39, "renderpass"]], "Render State": [[40, "render-state"]], "Render Targets": [[41, "render-targets"]], "Resource update buffers": [[42, "resource-update-buffers"]], "Resources": [[43, "resources"]], "Read/Write (UAV) resources": [[44, "read-write-uav-resources"]], "Samplers": [[45, "samplers"]], "Shader programs": [[46, "shader-programs"]], "Shader constants and const buffers": [[47, "shader-constants-and-const-buffers"]], "Tiled Resource": [[48, "tiled-resource"]], "Variable rate shading API": [[49, "variable-rate-shading-api"]], "Vertex and Index buffer API": [[50, "vertex-and-index-buffer-api"]], "View and Scissor d3d API": [[51, "view-and-scissor-d3d-api"]], "Constants, Structures and Enumerations": [[52, "constants-structures-and-enumerations"]], "Remark": [[52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null], [52, null]], "All other methods": [[53, "all-other-methods"]], "Helper classes for D3D API": [[55, "helper-classes-for-d3d-api"]], "MultidrawContext": [[56, "multidrawcontext"]], "daBFG API": [[57, "dabfg-api"]], "Bfg in das+ecs": [[58, "bfg-in-das-ecs"]], "Function annotations": [[58, "function-annotations"], [75, "function-annotations"]], "Classes": [[58, "classes"], [75, "classes"]], "Core Functions": [[59, "core-functions"]], "DaBfgCore das module": [[60, "dabfgcore-das-module"]], "Type aliases": [[60, "type-aliases"], [61, "type-aliases"]], "Enumerations": [[60, "enumerations"]], "Handled structures": [[60, "handled-structures"], [70, "handled-structures"]], "Top level functions": [[60, "top-level-functions"], [61, "top-level-functions"]], "Bfg in das": [[61, "bfg-in-das"]], "Registry manipulation": [[61, "registry-manipulation"]], "Request manipulation": [[61, "request-manipulation"]], "Declaring a Node": [[62, "declaring-a-node"]], "Controlling the Graph State": [[63, "controlling-the-graph-state"]], "Dispatching Work in Nodes at Runtime": [[64, "dispatching-work-in-nodes-at-runtime"]], "Managed Resources": [[65, "managed-resources"]], "General Resource Management": [[66, "general-resource-management"]], "Resource IDs": [[67, "resource-ids"]], "Texture Management": [[68, "texture-management"]], "Resource slots": [[69, "resource-slots"]], "ResourceSlotCore das module": [[70, "resourceslotcore-das-module"]], "State operations": [[70, "state-operations"]], "Handle methods": [[70, "handle-methods"]], "Node and slot access handle": [[71, "node-and-slot-access-handle"]], "Register request for access to slots storage": [[72, "register-request-for-access-to-slots-storage"]], "Perform access requests": [[73, "perform-access-requests"]], "Resource slot in das": [[74, "resource-slot-in-das"]], "Constants": [[74, "constants"]], "Register access": [[74, "register-access"]], "Resource slot in das+ecs": [[75, "resource-slot-in-das-ecs"]], "Difference with bfg_ecs": [[75, "difference-with-bfg-ecs"]], "API References and Documentation": [[76, "api-references-and-documentation"]], "gamelib.input": [[77, "gamelib-input"]], "dargbox": [[78, "dargbox"]], "Quirrel Modules Docs": [[79, "quirrel-modules-docs"]], "control": [[80, "control"]], "class SensScale": [[80, "class-sensscale"]], "daNetGame": [[81, "danetgame"]], "net": [[82, "net"], [94, "net"], [136, "net"]], "settings": [[83, "settings"]], "videomode": [[84, "videomode"]], "gpuBenchmark": [[85, "gpubenchmark"]], "daNetGameLibs": [[86, "danetgamelibs"]], "daRg": [[87, "darg"], [100, "darg"]], "class GuiScene": [[87, "class-guiscene"], [100, "class-guiscene"]], "class SceneConfig": [[87, "class-sceneconfig"], [100, "class-sceneconfig"]], "enum AnimProp": [[87, "enum-animprop"], [100, "enum-animprop"]], "table Behaviors": [[87, "table-behaviors"], [100, "table-behaviors"]], "class ScrollHandler": [[87, "class-scrollhandler"], [100, "class-scrollhandler"]], "class JoystickAxisObservable": [[87, "class-joystickaxisobservable"], [100, "class-joystickaxisobservable"]], "class ElemGroup": [[87, "class-elemgroup"], [100, "class-elemgroup"]], "class Behavior": [[87, "class-behavior"], [100, "class-behavior"]], "class Picture": [[87, "class-picture"], [100, "class-picture"]], "class Immediate extends Picture": [[87, "class-immediate-extends-picture"], [100, "class-immediate-extends-picture"]], "class FormattedText": [[87, "class-formattedtext"], [100, "class-formattedtext"]], "class IGenVideoPlayer": [[87, "class-igenvideoplayer"], [100, "class-igenvideoplayer"]], "class IGenSound": [[87, "class-igensound"], [100, "class-igensound"]], "class DragAndDropState": [[87, "class-draganddropstate"], [100, "class-draganddropstate"]], "class EventDataRect": [[87, "class-eventdatarect"], [100, "class-eventdatarect"]], "class MouseClickEventData": [[87, "class-mouseclickeventdata"], [100, "class-mouseclickeventdata"]], "class HotkeyEventData": [[87, "class-hotkeyeventdata"], [100, "class-hotkeyeventdata"]], "class HoverEventData": [[87, "class-hovereventdata"], [100, "class-hovereventdata"]], "class MoveToAreaTarget": [[87, "class-movetoareatarget"], [100, "class-movetoareatarget"]], "class LottieAnimation extends Picture": [[87, "class-lottieanimation-extends-picture"], [100, "class-lottieanimation-extends-picture"]], "class ElementRef": [[87, "class-elementref"], [100, "class-elementref"]], "daRg.debug": [[88, "darg-debug"], [101, "darg-debug"]], "daRg framework": [[89, "darg-framework"]], "renderCanvas": [[90, "rendercanvas"], [140, "rendercanvas"]], "ecs": [[91, "ecs"], [124, "ecs"]], "class BaseList": [[91, "class-baselist"], [124, "class-baselist"]], "class ListRO extends ecs.BaseList": [[91, "class-listro-extends-ecs-baselist"], [124, "class-listro-extends-ecs-baselist"]], "class List extends ecs.BaseList": [[91, "class-list-extends-ecs-baselist"], [124, "class-list-extends-ecs-baselist"]], "class Event": [[91, "class-event"], [124, "class-event"]], "class SchemelessEvent extends Event": [[91, "class-schemelessevent-extends-event"], [124, "class-schemelessevent-extends-event"]], "class SQEvent extends ecs.SchemelessEvent": [[91, "class-sqevent-extends-ecs-schemelessevent"], [124, "class-sqevent-extends-ecs-schemelessevent"]], "class TemplateDB": [[91, "class-templatedb"], [124, "class-templatedb"]], "class EventsDB": [[91, "class-eventsdb"], [124, "class-eventsdb"]], "class Template": [[91, "class-template"], [124, "class-template"]], "class EntityManager": [[91, "class-entitymanager"], [124, "class-entitymanager"]], "class CompObjectRO": [[91, "class-compobjectro"], [124, "class-compobjectro"]], "class CompObject extends ecs.CompObjectRO": [[91, "class-compobject-extends-ecs-compobjectro"], [124, "class-compobject-extends-ecs-compobjectro"]], "class CompArray extends ecs.CompArrayRO": [[91, "class-comparray-extends-ecs-comparrayro"], [124, "class-comparray-extends-ecs-comparrayro"]], "class SqQuery": [[91, "class-sqquery"], [124, "class-sqquery"]], "class EntityId": [[91, "class-entityid"], [124, "class-entityid"]], "ecs.netevent": [[92, "ecs-netevent"], [125, "ecs-netevent"]], "Quirrel ECS": [[93, "quirrel-ecs"]], "DataBlock": [[95, "datablock"]], "class DataBlock": [[95, "class-datablock"]], "base64": [[96, "base64"]], "browser": [[97, "browser"]], "console": [[98, "console"]], "daEditorEmbedded": [[99, "daeditorembedded"]], "dacoll.trace": [[102, "dacoll-trace"]], "dagor.clipboard": [[103, "dagor-clipboard"]], "dagor.debug": [[104, "dagor-debug"]], "dagor.folders": [[105, "dagor-folders"]], "dagor.fs": [[106, "dagor-fs"]], "dagor.fs.vrom": [[107, "dagor-fs-vrom"]], "dagor.http": [[108, "dagor-http"]], "dagor.iso8601": [[109, "dagor-iso8601"]], "dagor.localize": [[110, "dagor-localize"]], "dagor.math": [[111, "dagor-math"]], "class Point2": [[111, "class-point2"]], "class Point3": [[111, "class-point3"]], "class Point4": [[111, "class-point4"]], "class Quat": [[111, "class-quat"]], "class IPoint3": [[111, "class-ipoint3"]], "class E3DCOLOR": [[111, "class-e3dcolor"]], "class Color4": [[111, "class-color4"]], "dagor.memtrace": [[112, "dagor-memtrace"]], "dagor.perf": [[113, "dagor-perf"]], "dagor.profiler": [[114, "dagor-profiler"]], "dagor.random": [[115, "dagor-random"]], "dagor.shell": [[116, "dagor-shell"]], "dagor.system": [[117, "dagor-system"]], "dagor.system.file_handlers": [[118, "dagor-system-file-handlers"]], "dagor.time": [[119, "dagor-time"]], "dagor.workcycle": [[120, "dagor-workcycle"]], "dainput2": [[121, "dainput2"]], "class SingleButtonId": [[121, "class-singlebuttonid"]], "class DigitalActionBinding": [[121, "class-digitalactionbinding"]], "class AnalogAxisActionBinding": [[121, "class-analogaxisactionbinding"]], "class AnalogStickActionBinding": [[121, "class-analogstickactionbinding"]], "dasevents": [[122, "dasevents"]], "datacache": [[123, "datacache"]], "entity_editor": [[126, "entity-editor"]], "eventbus": [[127, "eventbus"]], "executable": [[128, "executable"]], "frp": [[129, "frp"]], "class Watched": [[129, "class-watched"]], "class Computed extends Watched": [[129, "class-computed-extends-watched"]], "hash": [[130, "hash"]], "Quirrel Gamelibs Native Modules": [[131, "quirrel-gamelibs-native-modules"]], "json": [[132, "json"]], "jwt": [[133, "jwt"]], "modules": [[134, "modules"]], "nestdb": [[135, "nestdb"]], "pathfinder": [[137, "pathfinder"]], "platform": [[138, "platform"]], "regexp2": [[139, "regexp2"]], "class regexp2": [[139, "class-regexp2"]], "sound": [[141, "sound"], [148, "sound"]], "statsd": [[142, "statsd"]], "sysinfo": [[143, "sysinfo"]], "utf8": [[144, "utf8"]], "class utf8": [[144, "class-utf8"]], "win.registry": [[145, "win-registry"]], "yupfile_parse": [[146, "yupfile-parse"]], "soundSystem": [[147, "soundsystem"]], "Introduction to Assets": [[149, "introduction-to-assets"]], "Overview": [[149, "overview"], [155, "overview"], [157, "overview"], [159, "overview"], [168, "overview"], [172, "overview"], [174, "overview"], [177, "overview"], [178, "overview"], [180, "overview"], [181, "overview"], [182, "overview"], [183, "overview"], [184, "overview"], [185, "overview"], [186, "overview"], [187, "overview"], [188, "overview"], [189, "overview"], [190, "overview"], [191, "overview"], [192, "overview"], [193, "overview"], [194, "overview"], [195, "overview"], [196, "overview"], [197, "overview"], [199, "overview"], [200, "overview"], [201, "overview"], [202, "overview"], [203, "overview"], [204, "overview"], [205, "overview"], [206, "overview"], [207, "overview"], [219, "overview"], [222, "overview"], [228, "overview"], [231, "overview"], [237, "overview"], [243, "overview"], [245, "overview"], [247, "overview"], [252, "overview"], [254, "overview"], [258, "overview"], [260, "overview"], [262, "overview"], [266, "overview"], [289, "overview"]], "Asset Formats and Management": [[149, "asset-formats-and-management"]], "Asset Types and Their Rules": [[149, "asset-types-and-their-rules"]], "Texture Assets": [[149, "texture-assets"]], "Dynamic Models and Rendering Instances": [[149, "dynamic-models-and-rendering-instances"]], "Composite Dynamic Models": [[149, "composite-dynamic-models"]], "How to Test Assets on Maps (Basic Workflow)": [[150, "how-to-test-assets-on-maps-basic-workflow"]], "Build Changes in Assets": [[150, "build-changes-in-assets"]], "Export the Map with the Asset": [[150, "export-the-map-with-the-asset"]], "Launching the Level": [[150, "launching-the-level"]], "daNetGame-based projects": [[150, "danetgame-based-projects"]], "Enlisted CDK": [[150, "enlisted-cdk"]], "War Thunder": [[150, "war-thunder"], [159, "war-thunder"]], "How to Test Assets on Maps": [[151, "how-to-test-assets-on-maps"]], "Assets": [[152, "assets"]], "Climbable Ladders": [[153, "climbable-ladders"]], "General Overview and Structure": [[153, "general-overview-and-structure"]], "Geometry Parameters": [[153, "geometry-parameters"]], "Game Object Parameters": [[153, "game-object-parameters"]], "Creating the Ladder Game Object": [[153, "creating-the-ladder-game-object"]], "General Guidelines": [[153, "general-guidelines"]], "Methods for Creating the Game Object": [[153, "methods-for-creating-the-game-object"]], "Method 1": [[153, "method-1"]], "Method 2": [[153, "method-2"]], "Related Articles": [[153, "related-articles"]], "Ladders": [[154, "ladders"]], "Infantry NavMesh Generation for Vertical Ladders": [[155, "infantry-navmesh-generation-for-vertical-ladders"]], "How NavMesh Generation for Vertical Ladders Works": [[155, "how-navmesh-generation-for-vertical-ladders-works"]], "Common Design Errors for Vertical Ladders": [[155, "common-design-errors-for-vertical-ladders"]], "Incorrect Ladder GameObj": [[155, "incorrect-ladder-gameobj"]], "Problematic Ladder Geometry": [[155, "problematic-ladder-geometry"]], "Problematic Environment Geometry": [[155, "problematic-environment-geometry"]], "Code Limitations": [[155, "code-limitations"]], "Occluder Box": [[156, "occluder-box"], [157, "occluder-box"]], "Creating an Occluder Box": [[157, "creating-an-occluder-box"]], "Editing the Occluder Box": [[157, "editing-the-occluder-box"]], "Verifying Occluder Box Setup": [[157, "verifying-occluder-box-setup"]], "Examples of Well-Configured Occluder Boxes": [[157, "examples-of-well-configured-occluder-boxes"]], "Commands for Displaying Occluders": [[157, "commands-for-displaying-occluders"]], "application.blk": [[158, "application-blk"], [275, "application-blk"]], "Root Level Parameters": [[158, "root-level-parameters"]], "dynamicDeferred{} Block": [[158, "dynamicdeferred-block"]], "clipmap{} Block": [[158, "clipmap-block"]], "hdr_mode{} Block": [[158, "hdr-mode-block"]], "SDK{} Block": [[158, "sdk-block"]], "game{} Block": [[158, "game-block"]], "levelsBlkPrefix{} Block": [[158, "levelsblkprefix-block"]], "assets{} Block": [[158, "assets-block"]], "level_metrics{} Block": [[158, "level-metrics-block"]], "genObjTypes{} Block": [[158, "genobjtypes-block"]], "dagored_visibility_tags{} Block": [[158, "dagored-visibility-tags-block"]], "dagored_disabled_plugins{} Block": [[158, "dagored-disabled-plugins-block"]], "daEditorExportOrder{} Block": [[158, "daeditorexportorder-block"]], "lightmap{} Block": [[158, "lightmap-block"]], "projectDefaults{} Block": [[158, "projectdefaults-block"]], "shader_glob_vars_scheme{} Block": [[158, "shader-glob-vars-scheme-block"]], "heightMap{} Block": [[158, "heightmap-block"]], "additional_platforms{} Block": [[158, "additional-platforms-block"]], "parameters{} Block": [[158, "parameters-block"]], "AssetLight{} Block": [[158, "assetlight-block"]], "defProjectLocal{} Block": [[158, "defprojectlocal-block"]], "animCharView{} Block": [[158, "animcharview-block"]], ".composit.blk": [[159, "composit-blk"]], "What is a Composite Object?": [[159, "what-is-a-composite-object"]], "Contents of .composit.blk Files": [[159, "contents-of-composit-blk-files"]], "Example of Declaring a Single Object": [[159, "example-of-declaring-a-single-object"]], "Example of Declaring a Random Node": [[159, "example-of-declaring-a-random-node"]], "Example of Declaring Multiple Objects": [[159, "example-of-declaring-multiple-objects"]], "Example of Declaring Random Transforms": [[159, "example-of-declaring-random-transforms"]], "Available Parameters for Randomization": [[159, "available-parameters-for-randomization"]], "Random Transforms for Multiple Composites Simultaneously": [[159, "random-transforms-for-multiple-composites-simultaneously"]], "Structure of a File with Random Transforms and Naming Conventions": [[159, "structure-of-a-file-with-random-transforms-and-naming-conventions"]], "Why Use Includes in Nested Composites?": [[159, "why-use-includes-in-nested-composites"]], "Example of Node Hierarchy in Composites": [[159, "example-of-node-hierarchy-in-composites"]], "Practical Example of Node Hierarchy Use": [[159, "practical-example-of-node-hierarchy-use"]], "Game Objects": [[159, "game-objects"]], "Example Node Description": [[159, "example-node-description"]], "Creation Process": [[159, "creation-process"]], "Other Types of Game Objects": [[159, "other-types-of-game-objects"]], "Chain Destruction and Composite Nodes": [[159, "chain-destruction-and-composite-nodes"]], "Chain Destruction": [[159, "chain-destruction"]], "Object Placement Rules": [[159, "object-placement-rules"]], "Hierarchy of Composites": [[159, "hierarchy-of-composites"]], "Problems with Poor Hierarchy": [[159, "problems-with-poor-hierarchy"]], "Proper Hierarchy": [[159, "proper-hierarchy"]], "Nuances about Composites": [[159, "nuances-about-composites"]], "Additional Notes on Naming Conventions": [[159, "additional-notes-on-naming-conventions"]], "Object Placement on Terrain and Relative to Each Other": [[159, "object-placement-on-terrain-and-relative-to-each-other"]], "Object Placement Precision": [[159, "object-placement-precision"]], "Special Parameters": [[159, "special-parameters"]], "daNetGame-based Games": [[159, "danetgame-based-games"]], "Checklist": [[159, "checklist"]], "Creating a Standard Composite Object": [[159, "creating-a-standard-composite-object"]], "Manual Creation": [[159, "manual-creation"]], "Using the daEditor": [[159, "using-the-daeditor"]], "Using the dag2riRes Script": [[159, "using-the-dag2rires-script"]], "Using the Composite Editor in Asset Viewer": [[159, "using-the-composite-editor-in-asset-viewer"]], "Using the dag4blend Add-on in Blender": [[159, "using-the-dag4blend-add-on-in-blender"]], "Creating Random Composites in 3ds Max": [[159, "creating-random-composites-in-3ds-max"]], ".config.blk and .settings.blk": [[160, "config-blk-and-settings-blk"]], "Purpose of .settings.blk": [[160, "purpose-of-settings-blk"]], "Configuration Management": [[160, "configuration-management"]], "Game-Specific Adjustments": [[160, "game-specific-adjustments"]], ".folder.blk": [[161, "folder-blk"]], ".blk File Types": [[161, "blk-file-types"]], "Syntax of .folder.blk": [[161, "syntax-of-folder-blk"]], "General Principles": [[161, "general-principles"]], "Asset Scanning and Export Rules": [[161, "asset-scanning-and-export-rules"]], "Basic parameters": [[161, "basic-parameters"]], "Export{} Block": [[161, "export-block"]], "Basic Parameters": [[161, "id1"]], "Optional Parameters": [[161, "optional-parameters"]], "Special Keywords": [[161, "special-keywords"]], "Explanations": [[161, "explanations"]], "Virtual Resource Blocks (virtual_res{})": [[161, "virtual-resource-blocks-virtual-res"]], "Key Parameters": [[161, "key-parameters"]], "Specialized Blocks: content{}, tag{}": [[161, "specialized-blocks-content-tag"]], "Additional Details": [[161, "additional-details"]], "Common Parameters for Most Assets": [[161, "common-parameters-for-most-assets"]], "Using Regexp Rules": [[161, "using-regexp-rules"]], "Regular Expression Patterns": [[161, "regular-expression-patterns"]], "Regular Expression Symbols Explained": [[161, "regular-expression-symbols-explained"]], "Processing Control": [[161, "processing-control"]], "Rendering and Prefab Creation": [[161, "rendering-and-prefab-creation"]], "Texture Processing": [[161, "texture-processing"]], "All about .blk": [[162, "all-about-blk"]], ".skeleton.blk": [[163, "skeleton-blk"]], "Purpose of .skeleton.blk": [[163, "purpose-of-skeleton-blk"]], "Parameter Details": [[163, "parameter-details"]], "Explanation": [[163, "explanation"]], "Hierarchical Dependencies": [[163, "hierarchical-dependencies"]], "spline.blk": [[164, "spline-blk"]], "loft{} Block": [[164, "loft-block"]], "node_flags{} Block": [[164, "node-flags-block"]], "shape{} Block": [[164, "shape-block"]], "colliders{} Block": [[164, "colliders-block"]], "obj_generate{} Block": [[164, "obj-generate-block"]], "object{} Block": [[164, "object-block"]], "Shape to Loft HDA": [[164, "shape-to-loft-hda"]], "Animation Export": [[165, "animation-export"]], "Common Guideline": [[165, "common-guideline"]], "Asset Transfer Between Projects": [[165, "asset-transfer-between-projects"]], "Limitations": [[165, "limitations"], [237, "limitations"]], "Project-Specific Custom Object Properties": [[165, "project-specific-custom-object-properties"]], "Animation Description in animtree.blk": [[165, "animation-description-in-animtree-blk"]], "Animation Export Description in .blk": [[165, "animation-export-description-in-blk"]], "Animations": [[166, "animations"]], "Assets and Assets Management": [[167, "assets-and-assets-management"]], "Adding Light Fixtures to Building Composites": [[168, "adding-light-fixtures-to-building-composites"]], "Preparing Workspace": [[168, "preparing-workspace"]], "Adding Light Fixture": [[168, "adding-light-fixture"]], "Exporting the Map": [[168, "exporting-the-map"]], "Flickering Lights": [[169, "flickering-lights"]], "General Workflow": [[169, "general-workflow"]], "Working with Geometry": [[169, "working-with-geometry"]], "RendInst + DynModel (Geometry Splitting)": [[169, "rendinst-dynmodel-geometry-splitting"]], "Naming of Exported Objects": [[169, "naming-of-exported-objects"]], "Destructions": [[169, "destructions"]], "Working with Textures and Materials": [[169, "working-with-textures-and-materials"]], "Configuring the .folder.blk": [[169, "configuring-the-folder-blk"]], "Static Geometry Processing": [[169, "static-geometry-processing"]], "Dynamic Geometry Processing": [[169, "dynamic-geometry-processing"]], "Collision Processing": [[169, "collision-processing"]], "AnimChar": [[169, "animchar"]], "GameObjects": [[169, "gameobjects"]], "Composite Object": [[169, "composite-object"]], "Light and Flicker Templates": [[169, "light-and-flicker-templates"]], "Flicker Template": [[169, "flicker-template"]], "Cycle Elements": [[169, "cycle-elements"]], "Brightness Control": [[169, "brightness-control"]], "Additional Micro-Noise": [[169, "additional-micro-noise"]], "VFX": [[169, "vfx"]], "Flickering Light Template (Light Source)": [[169, "flickering-light-template-light-source"]], "Flickering Dynamic Model Template": [[169, "flickering-dynamic-model-template"]], "Lighting": [[170, "lighting"]], "Lighting Catalog": [[171, "lighting-catalog"]], "Lights": [[172, "lights"]], "Key Considerations When Creating a New Light Source": [[172, "key-considerations-when-creating-a-new-light-source"]], "Light Source Parameters and Configuration": [[172, "light-source-parameters-and-configuration"]], "light__color": [[172, "light-color"]], "light__brightness": [[172, "light-brightness"]], "light__max_radius": [[172, "light-max-radius"]], "spot_light__shadows / omni_light__shadows": [[172, "spot-light-shadows-omni-light-shadows"]], "spot_light__dynamic_obj_shadows / omni_light__dynamic_obj_shadows": [[172, "spot-light-dynamic-obj-shadows-omni-light-dynamic-obj-shadows"]], "spot_light__shadow_shrink / omni_light__shadow_shrink": [[172, "spot-light-shadow-shrink-omni-light-shadow-shrink"]], "spot_light__inner_attenuation": [[172, "spot-light-inner-attenuation"]], "light__texture_name": [[172, "light-texture-name"]], "light__nightly": [[172, "light-nightly"]], "light__use_box": [[172, "light-use-box"]], "Configuring Emission Strength for Visual Models": [[172, "configuring-emission-strength-for-visual-models"]], "GameObj": [[172, "gameobj"], [173, "gameobj"]], "Restriction Box": [[172, "restriction-box"], [173, "restriction-box"]], "Lights Creation Guide": [[173, "lights-creation-guide"]], "Main Point": [[173, "main-point"]], "Light Source": [[173, "light-source"]], "IES Textures": [[173, "ies-textures"]], "Flickering Source": [[173, "flickering-source"]], "Visual Model": [[173, "visual-model"]], "Emission Strength": [[173, "emission-strength"]], "Composite": [[173, "composite"]], "Placing Light Sources": [[173, "placing-light-sources"]], "Photometric Lights (IES)": [[174, "photometric-lights-ies"]], "Integrating IES Files in daNetGame-based Projects": [[174, "integrating-ies-files-in-danetgame-based-projects"]], "Using an IES File in a Light Source": [[174, "using-an-ies-file-in-a-light-source"]], "Important Notes on IES and Omni Lights": [[174, "important-notes-on-ies-and-omni-lights"]], "Examples of IES Usage": [[174, "examples-of-ies-usage"]], "Limitations of IES": [[174, "limitations-of-ies"]], "Photometry": [[174, "photometry"]], "Supported File Types": [[174, "supported-file-types"]], "File Placement": [[174, "file-placement"]], "Spotlights & Special Options": [[174, "spotlights-special-options"]], "How to Use": [[174, "how-to-use"]], "Blurring": [[174, "blurring"]], "Usage": [[174, "usage"], [192, "usage"], [266, "usage"], [272, "usage"]], "Angular Restrictions": [[174, "angular-restrictions"]], "Setting Photometry for an Omni Light": [[174, "setting-photometry-for-an-omni-light"]], "Notes for Custom Textures": [[174, "notes-for-custom-textures"]], "Mapping": [[174, "mapping"]], "Changing the Mapping Algorithm": [[174, "changing-the-mapping-algorithm"]], "Technical Details of Generated Textures": [[174, "technical-details-of-generated-textures"]], "Replacing or Modifying Lights in Props": [[175, "replacing-or-modifying-lights-in-props"]], "Phase 1: Setting Up the daEditor": [[175, "phase-1-setting-up-the-daeditor"]], "Phase 2: Asset Viewer and Light Preset Identification": [[175, "phase-2-asset-viewer-and-light-preset-identification"]], "Phase 3: Modifying and Creating Light Templates": [[175, "phase-3-modifying-and-creating-light-templates"]], "Phase 4: Testing and Exporting": [[175, "phase-4-testing-and-exporting"]], "Final Steps: Export and Testing": [[175, "final-steps-export-and-testing"]], "Proxymats": [[177, "proxymats"]], "How to Create a Proxymat": [[177, "how-to-create-a-proxymat"]], "How to Name a Proxymat": [[177, "how-to-name-a-proxymat"]], "How to Assign Proxymat in 3ds Max": [[177, "how-to-assign-proxymat-in-3ds-max"]], "How to Assign Proxymat in Blender": [[177, "how-to-assign-proxymat-in-blender"]], "Shader: dynamic_painted_by_mask": [[178, "shader-dynamic-painted-by-mask"]], "Functionality": [[178, "functionality"], [186, "functionality"], [187, "functionality"], [189, "functionality"], [197, "functionality"], [206, "functionality"]], "daNetGame-Based Shaders": [[179, "danetgame-based-shaders"]], "Shader: land_mesh_height_decal": [[180, "shader-land-mesh-height-decal"]], "Shader: rendinst_blend_diffuse_decal": [[181, "shader-rendinst-blend-diffuse-decal"]], "Shader: rendinst_blend_normal_decal": [[182, "shader-rendinst-blend-normal-decal"]], "Shader: rendinst_deferred_decal": [[183, "shader-rendinst-deferred-decal"]], "Shader: rendinst_deferred_modulate2x_decal": [[184, "shader-rendinst-deferred-modulate2x-decal"]], "Shader: rendinst_emissive": [[185, "shader-rendinst-emissive"]], "Application": [[185, "application"]], "Shader: rendinst_flag_colored": [[186, "shader-rendinst-flag-colored"]], "Animated Geometry": [[186, "animated-geometry"]], "Working with Global Wind in daNetGame-based projects": [[186, "working-with-global-wind-in-danetgame-based-projects"]], "Shader: rendinst_flag_layered": [[187, "shader-rendinst-flag-layered"]], "Shader: rendinst_mask_layered": [[188, "shader-rendinst-mask-layered"]], "Material Structure": [[188, "material-structure"]], "Shader: rendinst_modulate2x_diffuse_decal": [[189, "shader-rendinst-modulate2x-diffuse-decal"]], "General Parameters": [[189, "general-parameters"], [200, "general-parameters"], [205, "general-parameters"]], "daNetGame-Based Parameters": [[189, "danetgame-based-parameters"], [205, "id3"]], "Shader: rendinst_refraction": [[190, "shader-rendinst-refraction"]], "Albedo and Opacity Maps": [[190, "albedo-and-opacity-maps"]], "Normals Map and Smoothness": [[190, "normals-map-and-smoothness"]], "Height Map": [[190, "height-map"]], "Thickness": [[190, "thickness"]], "isShell Parameter": [[190, "isshell-parameter"]], "is_window Parameter": [[190, "is-window-parameter"]], "Example": [[190, "example"], [239, "example"]], "Shader: rendinst_simple / simple_aces": [[191, "shader-rendinst-simple-simple-aces"]], "Shader: rendinst_simple_emissive_anim / dynamic_illum_anim": [[192, "shader-rendinst-simple-emissive-anim-dynamic-illum-anim"]], "tex0:t=\u201cemis_anim_shader_tex_d.tif\u201d": [[192, "tex0-t-emis-anim-shader-tex-d-tif"]], "tex3:t=\u201cemis_anim_shader_program.tif\u201d": [[192, "tex3-t-emis-anim-shader-program-tif"]], "tex4:t=\u201cemis_anim_shader_shift.tif\u201d": [[192, "tex4-t-emis-anim-shader-shift-tif"]], "Shader: rendinst_simple_glass": [[193, "shader-rendinst-simple-glass"]], "Shader: rendinst_simple_painted": [[194, "shader-rendinst-simple-painted"]], "Paint Texture": [[194, "paint-texture"]], "Paint Texture Row Numbering": [[194, "paint-texture-row-numbering"]], "Assigning a Paint Texture to a Level": [[194, "assigning-a-paint-texture-to-a-level"]], "How It Works?": [[194, "how-it-works"]], "Shader: rendinst_tree_colored": [[195, "shader-rendinst-tree-colored"]], "Vertex Colors": [[195, "vertex-colors"]], "Shader: rendinst_tree_perlin_layered": [[196, "shader-rendinst-tree-perlin-layered"]], "Tessellation Overview": [[196, "tessellation-overview"]], "Enabling Tessellation in an Asset": [[196, "enabling-tessellation-in-an-asset"]], "Additional Notes": [[196, "additional-notes"], [259, "additional-notes"]], "Shader: rendinst_vcolor_layered": [[197, "shader-rendinst-vcolor-layered"]], "Alpha Test": [[197, "alpha-test"]], "Detail Tiling": [[197, "detail-tiling"], [205, "detail-tiling"]], "Procedural Painting": [[197, "procedural-painting"]], "Vertex Color Overlay": [[197, "vertex-color-overlay"]], "VertexPaint Modifier": [[197, "vertexpaint-modifier"]], "Blending Details": [[197, "blending-details"], [205, "blending-details"]], "Vertex Color Blending": [[197, "vertex-color-blending"]], "Heightmap Blending": [[197, "heightmap-blending"], [205, "heightmap-blending"]], "Visual Examples": [[197, "visual-examples"]], "Shader Usage": [[197, "shader-usage"]], "Shader Family: land_mesh_combined_decal": [[199, "shader-family-land-mesh-combined-decal"]], "land_mesh_combined / dynamic_combined_decal \u2013 Basic Shader": [[199, "land-mesh-combined-dynamic-combined-decal-basic-shader"]], "land_mesh_combined_detailed_decal / dynamic_combined_detailed_decal \u2013 Shader with One Detail Layer": [[199, "land-mesh-combined-detailed-decal-dynamic-combined-detailed-decal-shader-with-one-detail-layer"]], "land_mesh_combined_mixed_decal / dynamic_combined_mixed_decal \u2013 Shader with Four Detail Layers": [[199, "land-mesh-combined-mixed-decal-dynamic-combined-mixed-decal-shader-with-four-detail-layers"]], "Shader Textures": [[199, "shader-textures"]], "Shader: rendinst_interior_mapping": [[200, "shader-rendinst-interior-mapping"]], "Asset Requirements": [[200, "asset-requirements"]], "Shader Setup": [[200, "shader-setup"], [201, "shader-setup"]], "Cubemap Fading": [[200, "cubemap-fading"]], "Smoothness, Metalness, and Reflection": [[200, "smoothness-metalness-and-reflection"]], "Room Proportion and Tiling": [[200, "room-proportion-and-tiling"]], "Room Depth": [[200, "room-depth"]], "Interior Cubemap Tiling": [[200, "interior-cubemap-tiling"]], "Room Size": [[200, "room-size"]], "Spacing Between Windows": [[200, "spacing-between-windows"]], "Color of Spaces Between Windows": [[200, "color-of-spaces-between-windows"]], "Window Illumination Parameters": [[200, "window-illumination-parameters"]], "Glass Distortion Parameters": [[200, "glass-distortion-parameters"]], "Glass Distortion": [[200, "glass-distortion"]], "Distortion Tiling": [[200, "distortion-tiling"]], "Non-Standard Solutions": [[200, "non-standard-solutions"]], "Simulating Large Spaces": [[200, "simulating-large-spaces"]], "Random Rotation in Individual Windows": [[200, "random-rotation-in-individual-windows"]], "Window as Separate Geometry within a .dag": [[200, "window-as-separate-geometry-within-a-dag"]], "Window as a Separate .dag, Placed by a Composite": [[200, "window-as-a-separate-dag-placed-by-a-composite"]], "Shader: rendinst_layered": [[201, "shader-rendinst-layered"]], "Textures Used": [[201, "textures-used"]], "Texture Assignment": [[201, "texture-assignment"], [201, "id1"]], "Global Normal Map": [[201, "global-normal-map"]], "Detail Textures (Details)": [[201, "detail-textures-details"]], "Overlay Map": [[201, "overlay-map"]], "Universal Overlay": [[201, "universal-overlay"]], "Unique Overlay": [[201, "unique-overlay"]], "Exclusion Mask": [[201, "exclusion-mask"]], "Blending Mask": [[201, "blending-mask"]], "How It Works": [[201, "how-it-works"], [268, "how-it-works"]], "Specifics of Using the Blending Mask": [[201, "specifics-of-using-the-blending-mask"]], "Conclusion": [[201, "conclusion"]], "General Shader Parameters": [[201, "general-shader-parameters"]], "Shader Parameters": [[201, "shader-parameters"], [289, "shader-parameters"]], "Offset of UV-mapping on the Universal Overlay": [[201, "offset-of-uv-mapping-on-the-universal-overlay"]], "Detail Tiling Settings": [[201, "detail-tiling-settings"]], "Disabling Tiling (detail1/2_scroll_u=-1)": [[201, "disabling-tiling-detail1-2-scroll-u-1"]], "Configuring Detail Offset": [[201, "configuring-detail-offset"]], "Configuring of Details Blending": [[201, "configuring-of-details-blending"]], "Configuring Blend Mask Tiling": [[201, "configuring-blend-mask-tiling"]], "Configuring Blend Mask Offset": [[201, "configuring-blend-mask-offset"]], "Growing Grass on an Object": [[201, "growing-grass-on-an-object"]], "Coloring the Detail2 in the daEditor (Deprecated)": [[201, "coloring-the-detail2-in-the-daeditor-deprecated"]], "Top Projection - Projecting the Detail2 using Local and Global Normals": [[201, "top-projection-projecting-the-detail2-using-local-and-global-normals"]], "top_projection": [[201, "top-projection"]], "top_projection_from": [[201, "top-projection-from"]], "top_projection_to": [[201, "top-projection-to"]], "top_projection_detail2_modulate": [[201, "top-projection-detail2-modulate"]], "Blending with Landscape Heightmap": [[201, "blending-with-landscape-heightmap"]], "Global Shader Variables": [[201, "global-shader-variables"]], "Static Shader Variables": [[201, "static-shader-variables"]], "Procedural Detail Layer Coloring": [[201, "procedural-detail-layer-coloring"]], "Normal Blending": [[201, "normal-blending"]], "Microdetails": [[201, "microdetails"], [205, "microdetails"]], "Material Shadows": [[201, "material-shadows"], [205, "material-shadows"]], "Shader Configuration Errors": [[201, "shader-configuration-errors"]], "Sloped Roof": [[201, "sloped-roof"]], "Flat Roof": [[201, "flat-roof"]], "Wooden Roof Trim": [[201, "wooden-roof-trim"]], "Shader Family: rendinst_layered": [[202, "shader-family-rendinst-layered"]], "rendinst_layered": [[202, "rendinst-layered"]], "dynamic_layered": [[202, "dynamic-layered"]], "rendinst_layered_atest": [[202, "rendinst-layered-atest"]], "rendinst_layered_lightmap": [[202, "rendinst-layered-lightmap"]], "rendinst_layered_hmap_blend": [[202, "rendinst-layered-hmap-blend"]], "Salt Sediments": [[202, "salt-sediments"]], "Shader: rendinst_layered_lightmap": [[203, "shader-rendinst-layered-lightmap"]], "Shader: rendinst_parallax_ice": [[204, "shader-rendinst-parallax-ice"]], "Required Textures": [[204, "required-textures"]], "Optional Textures": [[204, "optional-textures"]], "Shader: rendinst_perlin_layered": [[205, "shader-rendinst-perlin-layered"]], "daNetGame-based Parameters": [[205, "danetgame-based-parameters"]], "War Thunder Parameters": [[205, "war-thunder-parameters"], [205, "id4"]], "General Operation and Principles": [[205, "general-operation-and-principles"]], "First Level \u2013 Blending by Height Gradient": [[205, "first-level-blending-by-height-gradient"]], "Second Level \u2013 Blending by Heightmaps": [[205, "second-level-blending-by-heightmaps"]], "Third Level \u2013 Blending by Perlin Noise": [[205, "third-level-blending-by-perlin-noise"]], "Blending Control": [[205, "blending-control"]], "Parameter: invert_heights=0,0,0,1": [[205, "parameter-invert-heights-0-0-0-1"]], "First Three Components": [[205, "first-three-components"], [205, "id1"]], "Fourth Component": [[205, "fourth-component"], [205, "id2"]], "Parameter: mask_gamma=1,1,1,1": [[205, "parameter-mask-gamma-1-1-1-1"]], "Normal Map Blending": [[205, "normal-map-blending"]], "Parameter: blend_normals=1,1,1,1": [[205, "parameter-blend-normals-1-1-1-1"]], "Procedural Object Painting": [[205, "procedural-object-painting"]], "Overlaying the Detail2 by Normals": [[205, "overlaying-the-detail2-by-normals"]], "Freezing Perlin Noise": [[205, "freezing-perlin-noise"]], "Paint Points": [[205, "paint-points"]], "Painting Details in Different Constant Colors": [[205, "painting-details-in-different-constant-colors"]], "Initialization and Operation of the Blend": [[205, "initialization-and-operation-of-the-blend"]], "Global Shadervars": [[205, "global-shadervars"]], "Static Shadervars": [[205, "static-shadervars"]], "Global and Static Shadervars for ri_hmap": [[205, "global-and-static-shadervars-for-ri-hmap"]], "Height-Based Painting": [[205, "height-based-painting"]], "Shader: rendinst_simple_emissive": [[206, "shader-rendinst-simple-emissive"]], "Standard Operation": [[206, "standard-operation"]], "Separate Emission Mask": [[206, "separate-emission-mask"]], "Object Painting in War Thunder": [[206, "object-painting-in-war-thunder"]], "Shader: simple_aces_detailed": [[207, "shader-simple-aces-detailed"]], "Platform Support": [[208, "platform-support"]], "Games Created with the Dagor Engine": [[208, "games-created-with-the-dagor-engine"]], "Key Features": [[208, "key-features"]], "Contributing to Documentation": [[209, "contributing-to-documentation"]], "How to Build Documentation Locally": [[210, "how-to-build-documentation-locally"]], "Documentation": [[211, "documentation"], [275, "documentation"]], "Qdox User Guide": [[212, "qdox-user-guide"]], "QDox, writing your documentation": [[213, "qdox-writing-your-documentation"]], "The Basics": [[213, "the-basics"]], "Special directives": [[213, "special-directives"]], "Autodocumentation for .Func": [[213, "autodocumentation-for-func"]], "Doc-objects": [[213, "doc-objects"]], "Mutltiline (blocks)": [[213, "mutltiline-blocks"]], "Configurate what to analyze and build": [[213, "configurate-what-to-analyze-and-build"]], "Building and testing the qdox": [[213, "building-and-testing-the-qdox"]], "ReStructuredText": [[213, "restructuredtext"]], "RST CheatSheet": [[214, "rst-cheatsheet"]], "Inline Markup": [[214, "inline-markup"]], "Escaping with Backslashes": [[214, "escaping-with-backslashes"]], "Lists": [[214, "lists"]], "Section Structure": [[214, "section-structure"]], "Blocks": [[214, "blocks"]], "Tables": [[214, "tables"]], "Explicit Markup": [[214, "explicit-markup"]], "Credits": [[214, "credits"]], "Dagor Home": [[215, "dagor-home"]], "Dagor Max Tools": [[216, "dagor-max-tools"], [217, "dagor-max-tools"]], "Connecting the Tools": [[216, "connecting-the-tools"]], "Dagor Scene Export": [[216, "dagor-scene-export"]], "Dagor Scene Exporter": [[216, "dagor-scene-exporter"]], "Export Mode": [[216, "export-mode"]], "No VNorm and Optimization": [[216, "no-vnorm-and-optimization"]], "Export Log": [[216, "export-log"]], "Dagor Utility": [[216, "dagor-utility"]], "Dagor 2 Ambient Occlusion Baker": [[218, "dagor-2-ambient-occlusion-baker"]], "Installation": [[218, "installation"], [219, "installation"], [220, "installation"], [221, "installation"], [222, "installation"], [223, "installation"], [224, "installation"], [225, "installation"], [227, "installation"], [228, "installation"], [229, "installation"], [230, "installation"], [231, "installation"], [239, "installation"], [272, "installation"]], "Accessing the Ambient Occlusion Baker": [[218, "accessing-the-ambient-occlusion-baker"]], "Using the Ambient Occlusion Baker": [[218, "using-the-ambient-occlusion-baker"]], "Dagor 2 Check Degenerated Faces Tool": [[219, "dagor-2-check-degenerated-faces-tool"]], "Accessing the Check Degenerated Faces Tool": [[219, "accessing-the-check-degenerated-faces-tool"]], "Using the Check Degenerated Faces Tool": [[219, "using-the-check-degenerated-faces-tool"]], "Running a Test": [[219, "running-a-test"]], "Dagor 2 Custom Groups Export Tool": [[220, "dagor-2-custom-groups-export-tool"]], "Using the Custom Groups Export Tool": [[220, "using-the-custom-groups-export-tool"]], "Export Settings": [[220, "export-settings"]], "Naming Conventions": [[220, "naming-conventions"]], "Collision Settings": [[220, "collision-settings"]], "Additional Controls": [[220, "additional-controls"]], "Dagor 2 Damages Setup Tool": [[221, "dagor-2-damages-setup-tool"]], "Accessing the Damage Setup Tool": [[221, "accessing-the-damage-setup-tool"]], "Configuring the Damage Setup Tool": [[221, "configuring-the-damage-setup-tool"]], "Generating Collisions": [[221, "generating-collisions"]], "Reviewing Generated Collisions": [[221, "reviewing-generated-collisions"]], "Dagor Editing Normals Tool": [[222, "dagor-editing-normals-tool"]], "Accessing the Editing Normals Tool": [[222, "accessing-the-editing-normals-tool"]], "Using the Editing Normals Tool": [[222, "using-the-editing-normals-tool"]], "Interface Overview": [[222, "interface-overview"]], "Working with Puffiness": [[222, "working-with-puffiness"]], "Polysurface Settings": [[222, "polysurface-settings"]], "Classic Normals Thief Method": [[222, "classic-normals-thief-method"]], "Dagor 2 Fast Editor User Properties": [[223, "dagor-2-fast-editor-user-properties"]], "Accessing the Fast Editor User Properties": [[223, "accessing-the-fast-editor-user-properties"]], "Using the Fast Editor User Properties": [[223, "using-the-fast-editor-user-properties"]], "Dagor 2 Fix Normal Orientation Tool": [[224, "dagor-2-fix-normal-orientation-tool"]], "Accessing the Fix Normal Orientation Tool": [[224, "accessing-the-fix-normal-orientation-tool"]], "Using the Fix Normal Orientation Tool": [[224, "using-the-fix-normal-orientation-tool"]], "Dagor 2 Fixing Illegal Characters Tool": [[225, "dagor-2-fixing-illegal-characters-tool"]], "Accessing the Fixing Illegal Characters Tool": [[225, "accessing-the-fixing-illegal-characters-tool"]], "Using the Fixing Illegal Characters Tool": [[225, "using-the-fixing-illegal-characters-tool"]], "Tool Options": [[225, "tool-options"]], "Dagor 2 3ds Max Tools": [[226, "dagor-2-3ds-max-tools"]], "Uninstallation Steps": [[227, "uninstallation-steps"]], "Clean Installation": [[227, "clean-installation"]], "Dagor 2 LODs and Collisions Generator": [[228, "dagor-2-lods-and-collisions-generator"]], "Comparison of Optimization Quality": [[228, "comparison-of-optimization-quality"]], "Key Advantages": [[228, "key-advantages"]], "Accessing the LODs and Collisions Generator": [[228, "accessing-the-lods-and-collisions-generator"]], "Using the LODs and Collisions Generator": [[228, "using-the-lods-and-collisions-generator"]], "Key Parameters and Controls": [[228, "key-parameters-and-controls"]], "Advanced Settings": [[228, "advanced-settings"]], "Support": [[228, "support"]], "Dagor 2 Pivot Painter Vegetation Tool": [[229, "dagor-2-pivot-painter-vegetation-tool"]], "Accessing the Pivot Painter Vegetation Tool": [[229, "accessing-the-pivot-painter-vegetation-tool"]], "Using the Pivot Painter Vegetation Tool": [[229, "using-the-pivot-painter-vegetation-tool"]], "Key Features and Controls": [[229, "key-features-and-controls"]], "Workflow Example": [[229, "workflow-example"]], "Dagor 2 Simple CMP Editor": [[230, "dagor-2-simple-cmp-editor"]], "Accessing the Simple CMP Editor": [[230, "accessing-the-simple-cmp-editor"]], "Using the Simple CMP Editor": [[230, "using-the-simple-cmp-editor"]], "Supported Properties": [[230, "supported-properties"]], "CMP Editor Interface": [[230, "cmp-editor-interface"]], "Dagor 2 Transfer Vertex Position to Vertex Color Tool": [[231, "dagor-2-transfer-vertex-position-to-vertex-color-tool"]], "Accessing the Transfer Vertex Position to Vertex Color Tool": [[231, "accessing-the-transfer-vertex-position-to-vertex-color-tool"]], "Using the Transfer Vertex Position to Vertex Color Tool": [[231, "using-the-transfer-vertex-position-to-vertex-color-tool"]], "Use Case: Bent Metal Effect": [[231, "use-case-bent-metal-effect"]], "Encoding Process": [[231, "encoding-process"]], "Script Interface Overview": [[231, "script-interface-overview"]], "Example Workflow": [[231, "example-workflow"]], "Verification": [[231, "verification"]], "Prototype Car Destruction in Unreal Engine": [[231, "prototype-car-destruction-in-unreal-engine"]], "Nissan Car Damage Example": [[231, "nissan-car-damage-example"]], "Step-by-Step Instructions": [[231, "step-by-step-instructions"]], "Additional Resources": [[231, "additional-resources"]], "DagorMat": [[232, "dagormat"], [233, "dagormat"]], "General Information": [[232, "general-information"]], "Configuring DagorMat Shaders": [[232, "configuring-dagormat-shaders"]], "General Configuration Parameters": [[232, "general-configuration-parameters"]], "Texture Slot Names": [[232, "texture-slot-names"]], "Global Parameters": [[232, "global-parameters"]], "Shader-Specific Parameters": [[232, "shader-specific-parameters"]], "Procedural Parameter Update \u2013 dagorShadersCfgGenerator-dev.exe": [[232, "procedural-parameter-update-dagorshaderscfggenerator-dev-exe"]], "Add-ons for 3ds Max": [[234, "add-ons-for-3ds-max"]], "dag4blend Composite Editor": [[235, "dag4blend-composite-editor"], [236, "dag4blend-composite-editor"]], "How to Enable": [[235, "how-to-enable"]], "CMP Import": [[235, "cmp-import"]], "New Blend File Structure": [[235, "new-blend-file-structure"]], "Creating Nodes": [[235, "creating-nodes"]], "Editing Nodes": [[235, "editing-nodes"]], "Setting Node Types and Changing Display": [[235, "setting-node-types-and-changing-display"]], "Node Hierarchy in a Composite": [[235, "node-hierarchy-in-a-composite"]], "Using Blender\u2019s Built-in Features": [[235, "using-blenders-built-in-features"]], "Replacing Node Content Quickly": [[235, "replacing-node-content-quickly"]], "Snap to Surface": [[235, "snap-to-surface"]], "CMP Tools": [[235, "cmp-tools"]], "BBOX to Node": [[235, "bbox-to-node"]], "To Mesh": [[235, "to-mesh"]], "Explode": [[235, "explode"]], "CMP Export": [[235, "cmp-export"]], "Limitations of the Composite Editor": [[235, "limitations-of-the-composite-editor"]], "dag4blend Texture Baker": [[237, "dag4blend-texture-baker"], [238, "dag4blend-texture-baker"]], "Where to Find It": [[237, "where-to-find-it"], [243, "where-to-find-it"]], "Settings": [[237, "settings"]], "Renderer": [[237, "renderer"]], "Inputs": [[237, "inputs"]], "Active Node": [[237, "active-node"]], "Outputs": [[237, "outputs"]], "Operators": [[237, "operators"]], "Scene Requirements": [[237, "scene-requirements"]], "dag4blend": [[239, "dag4blend"], [240, "dag4blend"]], "Log and Text Editors": [[239, "log-and-text-editors"]], "Material Setup": [[239, "material-setup"]], "Main": [[239, "main"]], "Optional": [[239, "optional"]], "Tools": [[239, "tools"], [239, "id1"], [239, "id2"]], "Proxy": [[239, "proxy"]], "Object Properties": [[239, "object-properties"]], "Properties": [[239, "properties"]], "Presets": [[239, "presets"]], "Export": [[239, "export"]], "Batch Export": [[239, "batch-export"]], "Collection Properties": [[239, "collection-properties"]], "Override Name": [[239, "override-name"]], "Type": [[239, "type"]], "Geometry Nodes": [[239, "geometry-nodes"]], "Smoothing Groups": [[239, "smoothing-groups"]], "When to use?": [[239, "when-to-use"]], "Import": [[239, "import"]], "Import and Textures": [[239, "import-and-textures"]], "File\u25b8Import": [[239, "fileimport"]], "Batch Import": [[239, "batch-import"]], "Additional Features": [[239, "additional-features"]], "Experimental Features": [[239, "experimental-features"]], "Bake": [[239, "bake"]], "Composite Editor": [[239, "composite-editor"]], "General Limitations of the Add-on Tools in Blender": [[239, "general-limitations-of-the-add-on-tools-in-blender"]], "Add-ons for Blender": [[241, "add-ons-for-blender"]], "Add-ons for Blender and 3ds Max": [[242, "add-ons-for-blender-and-3ds-max"]], "Creating a New Composite": [[243, "creating-a-new-composite"]], "Composite Editor Interface": [[243, "composite-editor-interface"]], "Composite Outliner": [[243, "composite-outliner"]], "Identifying Random Nodes": [[243, "identifying-random-nodes"]], "Editor Properties": [[243, "editor-properties"]], "Entities": [[243, "entities"]], "Children": [[243, "children"]], "Node Parameters": [[243, "node-parameters"]], "Add Parameters": [[243, "add-parameters"]], "Composit": [[243, "composit"]], "Visual Editing": [[243, "visual-editing"]], "Asset Viewer Composite Editor": [[244, "asset-viewer-composite-editor"]], "Basic Workflow in Asset Viewer": [[245, "basic-workflow-in-asset-viewer"]], "Navigation": [[245, "navigation"], [254, "navigation"]], "Working with Assets": [[245, "working-with-assets"]], "Control Panel": [[245, "control-panel"]], "Properties Panel": [[245, "properties-panel"]], "Viewport Settings Panel": [[245, "viewport-settings-panel"]], "Customizing Scene Statistics Display": [[245, "customizing-scene-statistics-display"]], "Customizing the Grid": [[245, "customizing-the-grid"]], "Viewport Rotation Gizmo": [[245, "viewport-rotation-gizmo"]], "Building Assets": [[245, "building-assets"]], "General Considerations": [[245, "general-considerations"]], "Selecting and Exporting Assets": [[245, "selecting-and-exporting-assets"]], "Nuances": [[245, "nuances"]], "Asset Viewer": [[246, "asset-viewer"], [249, "asset-viewer"]], "Collision Generation for Assets in Asset Viewer": [[247, "collision-generation-for-assets-in-asset-viewer"]], "Parameters in Asset Viewer": [[247, "parameters-in-asset-viewer"]], "Collision Nodes Panel": [[247, "collision-nodes-panel"]], "Create New Node Panel": [[247, "create-new-node-panel"]], "Viewport Display Option": [[247, "viewport-display-option"]], "k-dop Node Generation Parameters": [[247, "k-dop-node-generation-parameters"]], "Selected Preset": [[247, "selected-preset"]], "k-dop Rotations": [[247, "k-dop-rotations"]], "k-dop Cut Off Planes": [[247, "k-dop-cut-off-planes"]], "Show k-dop": [[247, "show-k-dop"]], "Convex Computer Node Generation Parameters": [[247, "convex-computer-node-generation-parameters"]], "Convex v-hacd Node Generation Parameters": [[247, "convex-v-hacd-node-generation-parameters"]], "Parameters in .blk": [[247, "parameters-in-blk"]], "Common Parameters": [[247, "common-parameters"]], "k-dop Parameters": [[247, "k-dop-parameters"]], "Convex Computer Parameters": [[247, "convex-computer-parameters"]], "Convex v-hacd Parameters": [[247, "convex-v-hacd-parameters"]], "Collision Generation for Assets": [[248, "collision-generation-for-assets"]], ".blk File Format": [[250, "blk-file-format"]], "Text Format of .blk File": [[250, "text-format-of-blk-file"]], "File Syntax": [[250, "file-syntax"]], "Directives and Comments": [[250, "directives-and-comments"]], "Directive @include": [[250, "directive-include"]], "Directive @override": [[250, "directive-override"]], "Directive @delete": [[250, "directive-delete"]], "Directive @clone-last": [[250, "directive-clone-last"]], "Comments": [[250, "comments"]], "Block Types": [[250, "block-types"]], "Sequential": [[250, "sequential"]], "Nested": [[250, "nested"]], "Combination of sequential and nested": [[250, "combination-of-sequential-and-nested"]], "Binary Format of .blk File": [[250, "binary-format-of-blk-file"]], "File Structure": [[250, "file-structure"], [266, "file-structure"]], "Useful tools": [[250, "useful-tools"]], ".blk Format": [[251, "blk-format"]], "camera.dir": [[252, "camera-dir"]], "camera.pos": [[252, "camera-pos"]], "clear": [[252, "clear"]], "driver.reset": [[252, "driver-reset"]], "entity.stat": [[252, "entity-stat"]], "envi.set": [[252, "envi-set"]], ".sun_from_time": [[252, "sun-from-time"]], "exit": [[252, "exit"]], "help": [[252, "help"]], "land.commit_changes": [[252, "land-commit-changes"]], "land.ltmap": [[252, "land-ltmap"]], "land.rebuild_colors": [[252, "land-rebuild-colors"]], "list": [[252, "list"]], "perf.dump": [[252, "perf-dump"]], "perf.off": [[252, "perf-off"]], "perf.on": [[252, "perf-on"]], "project.export.all": [[252, "project-export-all"]], "project.export.and": [[252, "project-export-and"]], "project.export.ios": [[252, "project-export-ios"]], "project.export.pc": [[252, "project-export-pc"]], "project.export.ps3": [[252, "project-export-ps3"]], "project.export.ps4": [[252, "project-export-ps4"]], "project.export.xbox": [[252, "project-export-xbox"]], "project.open": [[252, "project-open"]], "project.tex_metrics": [[252, "project-tex-metrics"]], "screenshot.ortho": [[252, "screenshot-ortho"]], "set_workspace": [[252, "set-workspace"]], "shaders.list": [[252, "shaders-list"]], "shaders.reload": [[252, "shaders-reload"]], "shaders.set": [[252, "shaders-set"]], "shadervar": [[252, "shadervar"]], "tex.hide": [[252, "tex-hide"]], "tex.info full": [[252, "tex-info-full"]], "tex.refs": [[252, "tex-refs"]], "tex.show": [[252, "tex-show"]], "time.speed": [[252, "time-speed"]], "render.shaderVar [x] [x] [x] [x]": [[252, "render-shadervar-x-x-x-x"]], "render.shaderBlk ": [[252, "render-shaderblk"]], "app.tex [x]": [[252, "app-tex-x"]], "app.tex_refs": [[252, "app-tex-refs"]], "app.save_tex [x]": [[252, "app-save-tex-x"]], "app.save_all_tex": [[252, "app-save-all-tex"]], "app.stcode": [[252, "app-stcode"]], "render.reset_device": [[252, "render-reset-device"]], "render.hang_device ": [[252, "render-hang-device"]], "render.send_gpu_dump [x]": [[252, "render-send-gpu-dump-x"]], "render.reload_shaders [use_fence] [shaders_bindump_name]": [[252, "render-reload-shaders-use-fence-shaders-bindump-name"]], "water.hq [x] [x] [x] [x]": [[252, "water-hq-x-x-x-x"]], "water.foam_hats [x] [x] [x]": [[252, "water-foam-hats-x-x-x"]], "water.surface_folding_foam [x] [x] [x]": [[252, "water-surface-folding-foam-x-x-x"]], "water.foam_turbulent [x] [x] [x] [x]": [[252, "water-foam-turbulent-x-x-x-x"]], "water.dependency_wind [x]": [[252, "water-dependency-wind-x"]], "water.alignment_wind [x]": [[252, "water-alignment-wind-x"]], "water.choppiness [x]": [[252, "water-choppiness-x"]], "water.facet_size [x]": [[252, "water-facet-size-x"]], "water.amplitude [x] [x] [x] [x] [x]": [[252, "water-amplitude-x-x-x-x-x"]], "water.small_wave_fraction [x]": [[252, "water-small-wave-fraction-x"]], "water.cascade_window_length [x]": [[252, "water-cascade-window-length-x"]], "water.cascade_facet_size [x]": [[252, "water-cascade-facet-size-x"]], "water.roughness [x] [x]": [[252, "water-roughness-x-x"]], "water.fft_resolution [x]": [[252, "water-fft-resolution-x"]], "water.tesselation ": [[252, "water-tesselation"]], "water.fft_period [x]": [[252, "water-fft-period-x"]], "water.spectrum [x] [x]": [[252, "water-spectrum-x-x"]], "water.vs_samplers ": [[252, "water-vs-samplers"]], "water.reset_render": [[252, "water-reset-render"]], "water.num_cascades [x]": [[252, "water-num-cascades-x"]], "debug_mesh.range ": [[252, "debug-mesh-range"]], "skies.convert_weather_blk_to_entity ": [[252, "skies-convert-weather-blk-to-entity"]], "rendinst.hide_object [x]": [[252, "rendinst-hide-object-x"]], "rendinst.list": [[252, "rendinst-list"]], "rendinst.profiling [x]": [[252, "rendinst-profiling-x"]], "rendinst.verify_lods [x]": [[252, "rendinst-verify-lods-x"]], "ri_gpu_objects.invalidate": [[252, "ri-gpu-objects-invalidate"]], "rigrid.stats": [[252, "rigrid-stats"]], "shaded_collision.none": [[252, "shaded-collision-none"]], "shaded_collision.alone": [[252, "shaded-collision-alone"]], "shaded_collision.with_visual": [[252, "shaded-collision-with-visual"]], "shaded_collision.alone_diff": [[252, "shaded-collision-alone-diff"]], "shaded_collision.with_visual_diff": [[252, "shaded-collision-with-visual-diff"]], "shaded_collision.wireframe": [[252, "shaded-collision-wireframe"]], "shaded_collision.face_orientation": [[252, "shaded-collision-face-orientation"]], "gameres.update_pack ": [[252, "gameres-update-pack"]], "gameres.list_missing_for_res [x]": [[252, "gameres-list-missing-for-res-x"]], "gameres.list_missing_for_tex ": [[252, "gameres-list-missing-for-tex"]], "gameres.list_missing_for_all_tex [x]": [[252, "gameres-list-missing-for-all-tex-x"]], "riUnitedVdata.list": [[252, "riunitedvdata-list"]], "riUnitedVdata.status": [[252, "riunitedvdata-status"]], "riUnitedVdata.dumpMem": [[252, "riunitedvdata-dumpmem"]], "riUnitedVdata.perfStat": [[252, "riunitedvdata-perfstat"]], "dmUnitedVdata.list": [[252, "dmunitedvdata-list"]], "dmUnitedVdata.status": [[252, "dmunitedvdata-status"]], "dmUnitedVdata.dumpMem": [[252, "dmunitedvdata-dumpmem"]], "dmUnitedVdata.perfStat": [[252, "dmunitedvdata-perfstat"]], "tex.list [x] [x] [x] [x] [x] [x] [x] [x] [x]": [[252, "tex-list-x-x-x-x-x-x-x-x-x"]], "tex.downgrade [x]": [[252, "tex-downgrade-x"]], "tex.setMaxLev [x]": [[252, "tex-setmaxlev-x"]], "tex.set ": [[252, "tex-set"]], "tex.addRef ": [[252, "tex-addref"]], "tex.delRef ": [[252, "tex-delref"]], "tex.markLFU [x]": [[252, "tex-marklfu-x"]], "daEditor Console Commands": [[253, "daeditor-console-commands"]], "Basic Workflow in daEditor": [[254, "basic-workflow-in-daeditor"]], "Working with Assets on the Landscape": [[254, "working-with-assets-on-the-landscape"]], "Basic Logic and Controls": [[254, "basic-logic-and-controls"]], "Working with Object Properties": [[254, "working-with-object-properties"]], "Exporting a Location": [[254, "exporting-a-location"]], "daEditor": [[255, "daeditor"], [256, "daeditor"]], "Navigation Mesh": [[257, "navigation-mesh"], [258, "navigation-mesh"]], "Navigation Mesh Interface": [[258, "navigation-mesh-interface"]], "Navmesh Jumps, Links, and Cover Interface": [[258, "navmesh-jumps-links-and-cover-interface"]], "Tank Navigation Mesh": [[258, "tank-navigation-mesh"]], "Common Error": [[258, "common-error"]], "Displaying Navigation in daEditor": [[258, "displaying-navigation-in-daeditor"]], "Splines in daEditor": [[259, "splines-in-daeditor"]], "Splines and Render Instances (Rendinsts)": [[259, "splines-and-render-instances-rendinsts"]], "Sorting Order of Lofts in the Clipmap During Rendering": [[259, "sorting-order-of-lofts-in-the-clipmap-during-rendering"]], "Asset Orientation Types in the Spline Class": [[259, "asset-orientation-types-in-the-spline-class"]], "Additional Parameter": [[259, "additional-parameter"]], "Usage Recommendation": [[260, "usage-recommendation"]], "Generating a .composit.blk File": [[260, "generating-a-composit-blk-file"]], "Rules for Generating Individual .dag Files": [[260, "rules-for-generating-individual-dag-files"]], "Running the dag2riRes": [[260, "running-the-dag2rires"]], "dag2riRes": [[261, "dag2rires"]], "Local Workflow": [[262, "local-workflow"]], "Local Workflow - Quick Start": [[262, "local-workflow-quick-start"]], "How to Access the Tool": [[262, "how-to-access-the-tool"]], "Impostor Texture Resolution": [[262, "impostor-texture-resolution"]], "How to Use the Tool": [[262, "how-to-use-the-tool"]], "How to Enable the Impostor Texture Generation of an Asset": [[262, "how-to-enable-the-impostor-texture-generation-of-an-asset"]], "How to Enable Baked Impostors in a New Game": [[262, "how-to-enable-baked-impostors-in-a-new-game"]], "How to Use ImpostorNormalMip for Smoothness Hack": [[262, "how-to-use-impostornormalmip-for-smoothness-hack"]], "Impostor Baker": [[263, "impostor-baker"]], "Dagor Tools": [[264, "dagor-tools"]], "levels.deps": [[265, "levels-deps"], [266, "levels-deps"]], "Texture-to-Asset Dependency Log": [[266, "texture-to-asset-dependency-log"]], "Asset-to-Texture Dependency Log": [[266, "asset-to-texture-dependency-log"]], "Tool Internals": [[266, "tool-internals"]], "Batch Files": [[266, "batch-files"]], "Tool Configurations": [[266, "tool-configurations"]], "Resource Building": [[267, "resource-building"]], "Packages": [[268, "packages"]], "How to Add a New Package": [[268, "how-to-add-a-new-package"]], "Resource Building: daBuild, build, vromfs, levels, settings.blk": [[269, "resource-building-dabuild-build-vromfs-levels-settings-blk"]], "Parameters in .folder.blk Affecting the Building Process": [[269, "parameters-in-folder-blk-affecting-the-building-process"]], "Global Export Parameters": [[269, "global-export-parameters"]], "About Packs and Packages": [[269, "about-packs-and-packages"]], "What Is a \u201cPackage\u201d?": [[269, "what-is-a-package"]], "What Is a \u201cPack\u201d?": [[269, "what-is-a-pack"]], "Local Build": [[269, "local-build"]], "Local Full daBuild": [[269, "local-full-dabuild"]], "Building and Errors": [[269, "building-and-errors"]], "Local Pack Build": [[269, "local-pack-build"]], "Local Package Build": [[269, "local-package-build"]], "Option 1: Building a Specific Package": [[269, "option-1-building-a-specific-package"]], "Option 2: Building a Specific Package and Its Dependencies": [[269, "option-2-building-a-specific-package-and-its-dependencies"]], "Toggling Packages in settings.blk": [[269, "toggling-packages-in-settings-blk"]], "Local Build of a Specific Asset": [[269, "local-build-of-a-specific-asset"]], "Local Resource Build in Asset Viewer": [[269, "local-resource-build-in-asset-viewer"]], "Local Vromfs Build": [[269, "local-vromfs-build"]], "Methods to Build Vromfs": [[269, "methods-to-build-vromfs"]], "Local Build of Resources and Vromfs in the open daEditor and Client": [[269, "local-build-of-resources-and-vromfs-in-the-open-daeditor-and-client"]], "Local Level Export": [[269, "local-level-export"]], "Vromfs": [[270, "vromfs"]], "What is Vromfs?": [[270, "what-is-vromfs"]], "Important Tips and Hints": [[270, "important-tips-and-hints"]], "Substance Designer": [[271, "substance-designer"]], "Substance Designer Mip Generator": [[272, "substance-designer-mip-generator"]], "Initial Setup": [[272, "initial-setup"]], "Mip Adjustment": [[272, "mip-adjustment"]], "Enabling Custom Mips": [[272, "enabling-custom-mips"]], "DaNetGame Framework": [[273, "danetgame-framework"], [274, "danetgame-framework"]], "Directory Structure Overview": [[275, "directory-structure-overview"]], "General Directory Structure": [[275, "general-directory-structure"]], "Main Sources": [[275, "main-sources"]], "_jBuild/": [[275, "jbuild"]], "1stPartyLibs/": [[275, "stpartylibs"]], "3rdPartyLibs/": [[275, "rdpartylibs"]], "dagorInclude/": [[275, "dagorinclude"]], "engine/": [[275, "engine"]], "tools/": [[275, "tools"], [275, "id2"]], "scripts/": [[275, "scripts"], [275, "id1"]], "gameLibs/": [[275, "gamelibs"]], "daNetGame/": [[275, "danetgame"]], "daNetGameLibs/": [[275, "danetgamelibs"]], "samples/": [[275, "samples"]], "Projects": [[275, "projects"]], "General Architecture of Projects": [[275, "general-architecture-of-projects"]], "prog/": [[275, "prog"]], "ui/": [[275, "ui"]], "gameBase/": [[275, "gamebase"]], "develop/": [[275, "develop"]], "assets/": [[275, "assets"]], "levels/": [[275, "levels"]], "gui(ui)/": [[275, "gui-ui"]], "game/": [[275, "game"]], "Samples": [[275, "id3"], [282, "samples"]], "How to Access": [[276, "how-to-access"]], "How to Build": [[277, "how-to-build"]], "How to Build: Environment": [[277, "how-to-build-environment"]], "How to Build: Prebuilt Binaries": [[277, "how-to-build-prebuilt-binaries"]], "How to Build: Build from Source Code": [[277, "how-to-build-build-from-source-code"]], "Contributing": [[278, "contributing"]], "Getting Started with Dagor": [[279, "getting-started-with-dagor"]], "License Information": [[280, "license-information"]], "BSD 3-Clause License": [[280, "bsd-3-clause-license"]], "First-Party Software Distributed with Dagor Engine: Licensing and Copyright Information": [[280, "first-party-software-distributed-with-dagor-engine-licensing-and-copyright-information"]], "Third-Party Software Distributed with Dagor Engine: Licensing and Copyright Information": [[280, "third-party-software-distributed-with-dagor-engine-licensing-and-copyright-information"]], "Dagor Documentation": [[281, "dagor-documentation"]], "Indices and tables": [[281, "indices-and-tables"]], "Creating a Mission (War Thunder)": [[283, "creating-a-mission-war-thunder"], [284, "creating-a-mission-war-thunder"]], "War Thunder CDK (Content Development Kit)": [[283, "war-thunder-cdk-content-development-kit"]], "Non-Human Character: Step-by-Step Guide": [[285, "non-human-character-step-by-step-guide"], [286, "non-human-character-step-by-step-guide"]], "General Guidelines for Creating Creatures of All Types": [[285, "general-guidelines-for-creating-creatures-of-all-types"]], "Example Scenes in 3ds Max": [[285, "example-scenes-in-3ds-max"]], "Examples in Dagor Engine": [[285, "examples-in-dagor-engine"]], "Skeleton Bone Structure: Features and Scene Configuration": [[285, "skeleton-bone-structure-features-and-scene-configuration"]], "Adding Basic Physics": [[285, "adding-basic-physics"]], "Working with the Skin Modifier": [[285, "working-with-the-skin-modifier"]], "Creating LODs: Special Considerations for Dynamic Models": [[285, "creating-lods-special-considerations-for-dynamic-models"]], "Materials for Dynamic Models": [[285, "materials-for-dynamic-models"]], "Exporting the Dynamic Model": [[285, "exporting-the-dynamic-model"]], "Important Naming Conventions": [[285, "important-naming-conventions"]], "Exporting Animation": [[285, "exporting-animation"]], "Principles of Working with Dynamic Models in Dagor and Resource Integration": [[285, "principles-of-working-with-dynamic-models-in-dagor-and-resource-integration"]], "Real Resources vs. Virtual Resources and Objects in Dagor": [[285, "real-resources-vs-virtual-resources-and-objects-in-dagor"]], "Configuring *_char.animchar.blk": [[285, "configuring-char-animchar-blk"]], "Configuring *_dynmodel.dynmodel.blk": [[285, "configuring-dynmodel-dynmodel-blk"]], "Configuring *_animbnl.animtree.blk": [[285, "configuring-animbnl-animtree-blk"]], "Testing the Character in Asset Viewer": [[285, "testing-the-character-in-asset-viewer"]], "Common Errors": [[285, "common-errors"]], "Error: Bracket Mismatches": [[285, "error-bracket-mismatches"]], "Error: Incorrect Data Types": [[285, "error-incorrect-data-types"]], "Debugging Tips": [[285, "debugging-tips"]], "Summary": [[285, "summary"]], "Tutorials and Manuals": [[287, "tutorials-and-manuals"]], "Designing Vehicle Deformations": [[288, "designing-vehicle-deformations"], [289, "designing-vehicle-deformations"]], "Prerequisites": [[289, "prerequisites"]], "Platform Specifics": [[289, "platform-specifics"]], "Version Requirements": [[289, "version-requirements"]], "General Concepts of Vehicle Deformations and Destruction": [[289, "general-concepts-of-vehicle-deformations-and-destruction"]], "Key Constraints": [[289, "key-constraints"]], "Preparing the Model for Destruction": [[289, "preparing-the-model-for-destruction"]], "Importing the Model": [[289, "importing-the-model"]], "Setting Up Layers": [[289, "setting-up-layers"]], "Object Identification": [[289, "object-identification"]], "Deforming Large Rigid Components": [[289, "deforming-large-rigid-components"]], "Configuring Rigid Components": [[289, "configuring-rigid-components"]], "Script Adjustments": [[289, "script-adjustments"]], "Applying Changes": [[289, "applying-changes"]], "Adjusting Collision Boxes for Objects": [[289, "adjusting-collision-boxes-for-objects"]], "Configuring the Deformable Parts of the Vehicle": [[289, "configuring-the-deformable-parts-of-the-vehicle"]], "Deformation Process": [[289, "deformation-process"]], "Combining Layers": [[289, "combining-layers"]], "Transferring Vertex Positions to Vertex Colors": [[289, "transferring-vertex-positions-to-vertex-colors"]], "Assigning Custom User Properties": [[289, "assigning-custom-user-properties"]], "Final Scene Setup": [[289, "final-scene-setup"]], "Auxiliary Collision Objects": [[289, "auxiliary-collision-objects"]], "Assigning Dynamic Materials": [[289, "assigning-dynamic-materials"]], "Exporting the Vehicle": [[289, "exporting-the-vehicle"]], "Testing the Model": [[289, "testing-the-model"]], "Fine-Tuning Deformation Parameters for a Vehicle Body": [[289, "fine-tuning-deformation-parameters-for-a-vehicle-body"]], "Testing Parameters In-Game": [[289, "testing-parameters-in-game"]], "Refining Parameters in 3ds Max": [[289, "refining-parameters-in-3ds-max"]], "Iterative Adjustments and Enhancements": [[289, "iterative-adjustments-and-enhancements"]], "Shading and Coloring Adjustments": [[289, "shading-and-coloring-adjustments"]], "Simulating Broken Glass": [[289, "simulating-broken-glass"]], "Exporting the Final Model": [[289, "exporting-the-final-model"]], "Final Testing": [[289, "final-testing"]], "Example: Vehicle Destruction with a Large Tank": [[289, "example-vehicle-destruction-with-a-large-tank"]], "Physics Adjustments Post-Testing": [[289, "physics-adjustments-post-testing"]], "Note on Quality vs. Time Constraints": [[289, "note-on-quality-vs-time-constraints"]], "Example: Vehicle Destruction with Extensive Plastic Components": [[289, "example-vehicle-destruction-with-extensive-plastic-components"]], "Initial Checks": [[289, "initial-checks"], [289, "id1"]], "Separation of Components": [[289, "separation-of-components"]], "Export and Initial Testing": [[289, "export-and-initial-testing"]], "Refining the Model": [[289, "refining-the-model"]], "Adding Internal Structure": [[289, "adding-internal-structure"]], "Final Scene for Export": [[289, "final-scene-for-export"]], "Example: Vehicle Destruction with Canvas and Fabric Components": [[289, "example-vehicle-destruction-with-canvas-and-fabric-components"]], "Preparing the Canvas and Wooden Supports": [[289, "preparing-the-canvas-and-wooden-supports"]], "Wooden Components": [[289, "wooden-components"]], "Metal Components": [[289, "metal-components"]], "Organizing the Deformable Objects": [[289, "organizing-the-deformable-objects"]], "Initial Deformation with FFD": [[289, "initial-deformation-with-ffd"]], "Detailed Deformation": [[289, "detailed-deformation"]], "Assigning Materials for the Canvas": [[289, "assigning-materials-for-the-canvas"]], "Final Testing and Export": [[289, "final-testing-and-export"]]}, "indexentries": {"resourcebarrierdesc (c++ class)": [[27, "_CPPv419ResourceBarrierDesc"]], "resourcebarrierdesc::resourcebarrierdesc (c++ function)": [[27, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P11BaseTextureRA1N_15ResourceBarrierRA1N_jRA1N_j"], [27, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P35RaytraceBottomAccelerationStructure"], [27, "_CPPv4I_jEN19ResourceBarrierDesc19ResourceBarrierDescERA1N_P7SbufferRA1N_15ResourceBarrier"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescE15ResourceBarrier"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP35RaytraceBottomAccelerationStructureEE"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP7SbufferEENSt16initializer_listI15ResourceBarrierEE"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescENSt16initializer_listIP7SbufferEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIP11BaseTextureEENSt16initializer_listI15ResourceBarrierEENSt16initializer_listIjEENSt16initializer_listIjEE"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP11BaseTexture15ResourceBarrierjj"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP35RaytraceBottomAccelerationStructure"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrier"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierP11BaseTexture15ResourceBarrierjj"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEP7Sbuffer15ResourceBarrierPPC11BaseTexturePK15ResourceBarrierPKjPKjj"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC11BaseTexturePK15ResourceBarrierPKjPKjj"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC35RaytraceBottomAccelerationStructurej"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierj"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjP11BaseTexture15ResourceBarrierjj"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEPPC7SbufferPK15ResourceBarrierjPPC11BaseTexturePK15ResourceBarrierPKjPKjj"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescERK19ResourceBarrierDesc"], [27, "_CPPv4N19ResourceBarrierDesc19ResourceBarrierDescEv"]], "resourcebarrierdesc::[anonymous] (c++ member)": [[27, "_CPPv4N19ResourceBarrierDescUt1_4E"], [27, "_CPPv4N19ResourceBarrierDescUt1_6E"], [27, "_CPPv4N19ResourceBarrierDescUt1_8E"], [27, "_CPPv4N19ResourceBarrierDescUt2_10E"], [27, "_CPPv4N19ResourceBarrierDescUt2_12E"], [27, "_CPPv4N19ResourceBarrierDescUt2_14E"], [27, "_CPPv4N19ResourceBarrierDescUt2_16E"]], "resourcebarrierdesc::blas (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc4blasE"]], "resourcebarrierdesc::blascount (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc9blasCountE"]], "resourcebarrierdesc::blases (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc6blasesE"]], "resourcebarrierdesc::buffer (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc6bufferE"]], "resourcebarrierdesc::buffercount (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc11bufferCountE"]], "resourcebarrierdesc::bufferstate (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc11bufferStateE"]], "resourcebarrierdesc::bufferstates (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc12bufferStatesE"]], "resourcebarrierdesc::buffers (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc7buffersE"]], "resourcebarrierdesc::enumerateblasbarriers (c++ function)": [[27, "_CPPv4I0EN19ResourceBarrierDesc21enumerateBlasBarriersEv1T"]], "resourcebarrierdesc::enumeratebufferbarriers (c++ function)": [[27, "_CPPv4I0EN19ResourceBarrierDesc23enumerateBufferBarriersEv1T"]], "resourcebarrierdesc::enumeratetexturebarriers (c++ function)": [[27, "_CPPv4I0EN19ResourceBarrierDesc24enumerateTextureBarriersEv1T"]], "resourcebarrierdesc::single_element_count (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc20single_element_countE"]], "resourcebarrierdesc::texture (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc7textureE"]], "resourcebarrierdesc::texturecount (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc12textureCountE"]], "resourcebarrierdesc::texturestate (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc12textureStateE"]], "resourcebarrierdesc::texturestates (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc13textureStatesE"]], "resourcebarrierdesc::texturesubresindex (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc18textureSubResIndexE"]], "resourcebarrierdesc::texturesubresindices (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc20textureSubResIndicesE"]], "resourcebarrierdesc::texturesubresrange (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc18textureSubResRangeE"]], "resourcebarrierdesc::texturesubresranges (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc19textureSubResRangesE"]], "resourcebarrierdesc::textures (c++ member)": [[27, "_CPPv4N19ResourceBarrierDesc8texturesE"]], "d3d (c++ type)": [[28, "_CPPv43d3d"], [29, "_CPPv43d3d"], [30, "_CPPv43d3d"], [31, "_CPPv43d3d"], [32, "_CPPv43d3d"], [33, "_CPPv43d3d"], [34, "_CPPv43d3d"], [35, "_CPPv43d3d"], [36, "_CPPv43d3d"], [37, "_CPPv43d3d"], [38, "_CPPv43d3d"], [40, "_CPPv43d3d"], [41, "_CPPv43d3d"], [42, "_CPPv43d3d"], [44, "_CPPv43d3d"], [45, "_CPPv43d3d"], [46, "_CPPv43d3d"], [47, "_CPPv43d3d"], [48, "_CPPv43d3d"], [49, "_CPPv43d3d"], [50, "_CPPv43d3d"], [51, "_CPPv43d3d"], [53, "_CPPv43d3d"], [54, "_CPPv43d3d"]], "d3d::allocate_bindless_resource_range (c++ function)": [[28, "_CPPv4N3d3d32allocate_bindless_resource_rangeE8uint32_t8uint32_t"]], "d3d::free_bindless_resource_range (c++ function)": [[28, "_CPPv4N3d3d28free_bindless_resource_rangeE8uint32_t8uint32_t8uint32_t"]], "d3d::register_bindless_sampler (c++ function)": [[28, "_CPPv4N3d3d25register_bindless_samplerE13SamplerHandle"], [28, "_CPPv4N3d3d25register_bindless_samplerEP11BaseTexture"]], "d3d::resize_bindless_resource_range (c++ function)": [[28, "_CPPv4N3d3d30resize_bindless_resource_rangeE8uint32_t8uint32_t8uint32_t8uint32_t"]], "d3d::update_bindless_resource (c++ function)": [[28, "_CPPv4N3d3d24update_bindless_resourceE8uint32_tP11D3dResource"]], "d3d::update_bindless_resources_to_null (c++ function)": [[28, "_CPPv4N3d3d33update_bindless_resources_to_nullE8uint32_t8uint32_t8uint32_t"]], "sbuffer (c++ class)": [[29, "_CPPv47Sbuffer"]], "sbuffer::ireloaddata (c++ struct)": [[29, "_CPPv4N7Sbuffer11IReloadDataE"]], "sbuffer::ireloaddata::destroyself (c++ function)": [[29, "_CPPv4N7Sbuffer11IReloadData11destroySelfEv"]], "sbuffer::ireloaddata::reloadd3dres (c++ function)": [[29, "_CPPv4N7Sbuffer11IReloadData12reloadD3dResEP7Sbuffer"]], "sbuffer::ireloaddata::~ireloaddata (c++ function)": [[29, "_CPPv4N7Sbuffer11IReloadDataD0Ev"]], "sbuffer::copyto (c++ function)": [[29, "_CPPv4N7Sbuffer6copyToEP7Sbuffer"], [29, "_CPPv4N7Sbuffer6copyToEP7Sbuffer8uint32_t8uint32_t8uint32_t"]], "sbuffer::getbufname (c++ function)": [[29, "_CPPv4NK7Sbuffer10getBufNameEv"]], "sbuffer::getelementsize (c++ function)": [[29, "_CPPv4NK7Sbuffer14getElementSizeEv"]], "sbuffer::getflags (c++ function)": [[29, "_CPPv4NK7Sbuffer8getFlagsEv"]], "sbuffer::getnumelements (c++ function)": [[29, "_CPPv4NK7Sbuffer14getNumElementsEv"]], "sbuffer::lock (c++ function)": [[29, "_CPPv4N7Sbuffer4lockE8uint32_t8uint32_tPP8uint16_ti"], [29, "_CPPv4N7Sbuffer4lockE8uint32_t8uint32_tPPvi"]], "sbuffer::lock32 (c++ function)": [[29, "_CPPv4N7Sbuffer6lock32E8uint32_t8uint32_tPP8uint32_ti"]], "sbuffer::lockex (c++ function)": [[29, "_CPPv4I0EN7Sbuffer6lockExEi8uint32_t8uint32_tPP1Ti"]], "sbuffer::restype (c++ function)": [[29, "_CPPv4NK7Sbuffer7restypeEv"]], "sbuffer::setreloadcallback (c++ function)": [[29, "_CPPv4N7Sbuffer17setReloadCallbackEP11IReloadData"]], "sbuffer::unlock (c++ function)": [[29, "_CPPv4N7Sbuffer6unlockEv"]], "sbuffer::updatedata (c++ function)": [[29, "_CPPv4N7Sbuffer10updateDataE8uint32_t8uint32_tPKv8uint32_t"]], "sbuffer::updatedatawithlock (c++ function)": [[29, "_CPPv4N7Sbuffer18updateDataWithLockE8uint32_t8uint32_tPKvi"]], "sbuffer::~sbuffer (c++ function)": [[29, "_CPPv4N7SbufferD0Ev"]], "d3d::buffers (c++ type)": [[29, "_CPPv4N3d3d7buffersE"]], "d3d::buffers::byte_address_element_size (c++ member)": [[29, "_CPPv4N3d3d7buffers25BYTE_ADDRESS_ELEMENT_SIZEE"]], "d3d::buffers::cbuffer_register_size (c++ member)": [[29, "_CPPv4N3d3d7buffers21CBUFFER_REGISTER_SIZEE"]], "d3d::buffers::indirect (c++ enum)": [[29, "_CPPv4N3d3d7buffers8IndirectE"]], "d3d::buffers::indirect::dispatch (c++ enumerator)": [[29, "_CPPv4N3d3d7buffers8Indirect8DispatchE"]], "d3d::buffers::indirect::draw (c++ enumerator)": [[29, "_CPPv4N3d3d7buffers8Indirect4DrawE"]], "d3d::buffers::indirect::drawindexed (c++ enumerator)": [[29, "_CPPv4N3d3d7buffers8Indirect11DrawIndexedE"]], "d3d::buffers::init (c++ enum)": [[29, "_CPPv4N3d3d7buffers4InitE"]], "d3d::buffers::init::no (c++ enumerator)": [[29, "_CPPv4N3d3d7buffers4Init2NoE"]], "d3d::buffers::init::zero (c++ enumerator)": [[29, "_CPPv4N3d3d7buffers4Init4ZeroE"]], "d3d::buffers::cb_array_reg_count (c++ function)": [[29, "_CPPv4I0EN3d3d7buffers18cb_array_reg_countE8uint32_t8uint32_t"]], "d3d::buffers::cb_struct_reg_count (c++ function)": [[29, "_CPPv4I0EN3d3d7buffers19cb_struct_reg_countE8uint32_tv"]], "d3d::buffers::create_indirect (c++ function)": [[29, "_CPPv4N3d3d7buffers15create_indirectE8Indirect8uint32_tPKc"]], "d3d::buffers::create_one_frame_cb (c++ function)": [[29, "_CPPv4N3d3d7buffers19create_one_frame_cbE8uint32_tPKc"]], "d3d::buffers::create_one_frame_sr_byte_address (c++ function)": [[29, "_CPPv4N3d3d7buffers32create_one_frame_sr_byte_addressE8uint32_tPKc"]], "d3d::buffers::create_one_frame_sr_structured (c++ function)": [[29, "_CPPv4N3d3d7buffers30create_one_frame_sr_structuredE8uint32_t8uint32_tPKc"]], "d3d::buffers::create_one_frame_sr_tbuf (c++ function)": [[29, "_CPPv4N3d3d7buffers24create_one_frame_sr_tbufE8uint32_t8uint32_tPKc"]], "d3d::buffers::create_persistent_cb (c++ function)": [[29, "_CPPv4N3d3d7buffers20create_persistent_cbE8uint32_tPKc"]], "d3d::buffers::create_persistent_sr_byte_address (c++ function)": [[29, "_CPPv4N3d3d7buffers33create_persistent_sr_byte_addressE8uint32_tPKc4Init"]], "d3d::buffers::create_persistent_sr_structured (c++ function)": [[29, "_CPPv4N3d3d7buffers31create_persistent_sr_structuredE8uint32_t8uint32_tPKc4Init"]], "d3d::buffers::create_persistent_sr_tbuf (c++ function)": [[29, "_CPPv4N3d3d7buffers25create_persistent_sr_tbufE8uint32_t8uint32_tPKc4Init"]], "d3d::buffers::create_raytrace_scratch_buffer (c++ function)": [[29, "_CPPv4N3d3d7buffers30create_raytrace_scratch_bufferE8uint32_tPKc"]], "d3d::buffers::create_staging (c++ function)": [[29, "_CPPv4N3d3d7buffers14create_stagingE8uint32_tPKc"]], "d3d::buffers::create_ua_byte_address (c++ function)": [[29, "_CPPv4N3d3d7buffers22create_ua_byte_addressE8uint32_tPKc"]], "d3d::buffers::create_ua_byte_address_readback (c++ function)": [[29, "_CPPv4N3d3d7buffers31create_ua_byte_address_readbackE8uint32_tPKc4Init"]], "d3d::buffers::create_ua_indirect (c++ function)": [[29, "_CPPv4N3d3d7buffers18create_ua_indirectE8Indirect8uint32_tPKc"]], "d3d::buffers::create_ua_sr_byte_address (c++ function)": [[29, "_CPPv4N3d3d7buffers25create_ua_sr_byte_addressE8uint32_tPKc4Init"]], "d3d::buffers::create_ua_sr_structured (c++ function)": [[29, "_CPPv4N3d3d7buffers23create_ua_sr_structuredE8uint32_t8uint32_tPKc4Init"]], "d3d::buffers::create_ua_structured (c++ function)": [[29, "_CPPv4N3d3d7buffers20create_ua_structuredE8uint32_t8uint32_tPKc"]], "d3d::buffers::create_ua_structured_readback (c++ function)": [[29, "_CPPv4N3d3d7buffers29create_ua_structured_readbackE8uint32_t8uint32_tPKc4Init"]], "d3d::buffers::dword_count_per_call (c++ function)": [[29, "_CPPv4N3d3d7buffers20dword_count_per_callE8Indirect"]], "d3d::create_sbuffer (c++ function)": [[29, "_CPPv4N3d3d14create_sbufferEiijjPKc"]], "d3d::set_buffer (c++ function)": [[29, "_CPPv4N3d3d10set_bufferEjjP7Sbuffer"]], "d3d::set_rwbuffer (c++ function)": [[29, "_CPPv4N3d3d12set_rwbufferEjjP7Sbuffer"]], "compilepipelineset (c++ struct)": [[30, "_CPPv418CompilePipelineSet"]], "compilepipelineset::computepipelineset (c++ member)": [[30, "_CPPv4N18CompilePipelineSet18computePipelineSetE"]], "compilepipelineset::computeset (c++ member)": [[30, "_CPPv4N18CompilePipelineSet10computeSetE"]], "compilepipelineset::defaultformat (c++ member)": [[30, "_CPPv4N18CompilePipelineSet13defaultFormatE"]], "compilepipelineset::featureset (c++ member)": [[30, "_CPPv4N18CompilePipelineSet10featureSetE"]], "compilepipelineset::graphicsnullpixeloverrideset (c++ member)": [[30, "_CPPv4N18CompilePipelineSet28graphicsNullPixelOverrideSetE"]], "compilepipelineset::graphicspipelineset (c++ member)": [[30, "_CPPv4N18CompilePipelineSet19graphicsPipelineSetE"]], "compilepipelineset::graphicspixeloverrideset (c++ member)": [[30, "_CPPv4N18CompilePipelineSet24graphicsPixelOverrideSetE"]], "compilepipelineset::graphicsset (c++ member)": [[30, "_CPPv4N18CompilePipelineSet11graphicsSetE"]], "compilepipelineset::inputlayoutset (c++ member)": [[30, "_CPPv4N18CompilePipelineSet14inputLayoutSetE"]], "compilepipelineset::meshpipelineset (c++ member)": [[30, "_CPPv4N18CompilePipelineSet15meshPipelineSetE"]], "compilepipelineset::outputformatset (c++ member)": [[30, "_CPPv4N18CompilePipelineSet15outputFormatSetE"]], "compilepipelineset::renderstateset (c++ member)": [[30, "_CPPv4N18CompilePipelineSet14renderStateSetE"]], "compilepipelineset::signature (c++ member)": [[30, "_CPPv4N18CompilePipelineSet9signatureE"]], "devicereseteventhandler (c++ struct)": [[30, "_CPPv423DeviceResetEventHandler"]], "devicereseteventhandler::prerecovery (c++ function)": [[30, "_CPPv4N23DeviceResetEventHandler11preRecoveryEv"]], "devicereseteventhandler::recovery (c++ function)": [[30, "_CPPv4N23DeviceResetEventHandler8recoveryEv"]], "devicereseteventhandler::~devicereseteventhandler (c++ function)": [[30, "_CPPv4N23DeviceResetEventHandlerD0Ev"]], "drv3dcommand (c++ enum)": [[30, "_CPPv412Drv3dCommand"]], "drv3dcommand::acquire_loading (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand15ACQUIRE_LOADINGE"]], "drv3dcommand::acquire_ownership (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand17ACQUIRE_OWNERSHIPE"]], "drv3dcommand::add_debug_break_string_search (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand29ADD_DEBUG_BREAK_STRING_SEARCHE"]], "drv3dcommand::aftermath_marker (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand16AFTERMATH_MARKERE"]], "drv3dcommand::async_pipeline_compilation_feedback_begin (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand41ASYNC_PIPELINE_COMPILATION_FEEDBACK_BEGINE"]], "drv3dcommand::async_pipeline_compilation_feedback_end (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand39ASYNC_PIPELINE_COMPILATION_FEEDBACK_ENDE"]], "drv3dcommand::begin_external_access (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand21BEGIN_EXTERNAL_ACCESSE"]], "drv3dcommand::begin_mrt_clear_sequence (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand24BEGIN_MRT_CLEAR_SEQUENCEE"]], "drv3dcommand::change_queue (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand12CHANGE_QUEUEE"]], "drv3dcommand::compile_pipeline (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand16COMPILE_PIPELINEE"]], "drv3dcommand::compile_pipeline_set (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand20COMPILE_PIPELINE_SETE"]], "drv3dcommand::continue_sync (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand13CONTINUE_SYNCE"]], "drv3dcommand::d3d_flush (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand9D3D_FLUSHE"]], "drv3dcommand::debug_break (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand11DEBUG_BREAKE"]], "drv3dcommand::debug_message (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand13DEBUG_MESSAGEE"]], "drv3dcommand::delay_sync (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand10DELAY_SYNCE"]], "drv3dcommand::disable_immediate_flush (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand23DISABLE_IMMEDIATE_FLUSHE"]], "drv3dcommand::enable_immediate_flush (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand22ENABLE_IMMEDIATE_FLUSHE"]], "drv3dcommand::enable_worker_low_latency_mode (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand30ENABLE_WORKER_LOW_LATENCY_MODEE"]], "drv3dcommand::end_external_access (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand19END_EXTERNAL_ACCESSE"]], "drv3dcommand::end_mrt_clear_sequence (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand22END_MRT_CLEAR_SEQUENCEE"]], "drv3dcommand::execute_dlss (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand12EXECUTE_DLSSE"]], "drv3dcommand::execute_dlss_g (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand14EXECUTE_DLSS_GE"]], "drv3dcommand::execute_fsr (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand11EXECUTE_FSRE"]], "drv3dcommand::execute_fsr2 (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand12EXECUTE_FSR2E"]], "drv3dcommand::execute_metalfx_upscale (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand23EXECUTE_METALFX_UPSCALEE"]], "drv3dcommand::execute_pssr (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand12EXECUTE_PSSRE"]], "drv3dcommand::execute_xess (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand12EXECUTE_XESSE"]], "drv3dcommand::flush_states (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand12FLUSH_STATESE"]], "drv3dcommand::getvisibilitybegin (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand18GETVISIBILITYBEGINE"]], "drv3dcommand::getvisibilitycount (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand18GETVISIBILITYCOUNTE"]], "drv3dcommand::getvisibilityend (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand16GETVISIBILITYENDE"]], "drv3dcommand::get_buffer_gpu_address (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand22GET_BUFFER_GPU_ADDRESSE"]], "drv3dcommand::get_console_hfr_status (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand22GET_CONSOLE_HFR_STATUSE"]], "drv3dcommand::get_console_hfr_supported (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand25GET_CONSOLE_HFR_SUPPORTEDE"]], "drv3dcommand::get_dlss (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand8GET_DLSSE"]], "drv3dcommand::get_framerate_limiting_factor (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand29GET_FRAMERATE_LIMITING_FACTORE"]], "drv3dcommand::get_fsr2_resolution (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand19GET_FSR2_RESOLUTIONE"]], "drv3dcommand::get_fsr2_state (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand14GET_FSR2_STATEE"]], "drv3dcommand::get_gpu_frame_time (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand18GET_GPU_FRAME_TIMEE"]], "drv3dcommand::get_instance (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand12GET_INSTANCEE"]], "drv3dcommand::get_luminance (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand13GET_LUMINANCEE"]], "drv3dcommand::get_metalfx_upscale_state (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand25GET_METALFX_UPSCALE_STATEE"]], "drv3dcommand::get_monitors (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand12GET_MONITORSE"]], "drv3dcommand::get_monitor_info (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand16GET_MONITOR_INFOE"]], "drv3dcommand::get_physical_device (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand19GET_PHYSICAL_DEVICEE"]], "drv3dcommand::get_pipeline_compilation_queue_length (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand37GET_PIPELINE_COMPILATION_QUEUE_LENGTHE"]], "drv3dcommand::get_ps5_pssr_status (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand19GET_PS5_PSSR_STATUSE"]], "drv3dcommand::get_queue_family_index (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand22GET_QUEUE_FAMILY_INDEXE"]], "drv3dcommand::get_queue_index (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand15GET_QUEUE_INDEXE"]], "drv3dcommand::get_raytrace_acceleration_structures_memory_usage (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand49GET_RAYTRACE_ACCELERATION_STRUCTURES_MEMORY_USAGEE"]], "drv3dcommand::get_reflex (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand10GET_REFLEXE"]], "drv3dcommand::get_rendering_command_queue (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand27GET_RENDERING_COMMAND_QUEUEE"]], "drv3dcommand::get_resolutions_from_monitor (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand28GET_RESOLUTIONS_FROM_MONITORE"]], "drv3dcommand::get_resource_statistics (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand23GET_RESOURCE_STATISTICSE"]], "drv3dcommand::get_secondary_backbuffer (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand24GET_SECONDARY_BACKBUFFERE"]], "drv3dcommand::get_shader (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand10GET_SHADERE"]], "drv3dcommand::get_shader_cache_uuid (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand21GET_SHADER_CACHE_UUIDE"]], "drv3dcommand::get_texture_handle (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand18GET_TEXTURE_HANDLEE"]], "drv3dcommand::get_timings (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand11GET_TIMINGSE"]], "drv3dcommand::get_vendor (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand10GET_VENDORE"]], "drv3dcommand::get_video_memory_budget (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand23GET_VIDEO_MEMORY_BUDGETE"]], "drv3dcommand::get_vsync_refresh_rate (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand22GET_VSYNC_REFRESH_RATEE"]], "drv3dcommand::get_worker_cpu_core (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand19GET_WORKER_CPU_COREE"]], "drv3dcommand::get_xess_resolution (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand19GET_XESS_RESOLUTIONE"]], "drv3dcommand::get_xess_state (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand14GET_XESS_STATEE"]], "drv3dcommand::get_xess_version (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand16GET_XESS_VERSIONE"]], "drv3dcommand::hdr_output_mode (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand15HDR_OUTPUT_MODEE"]], "drv3dcommand::int10_hdr_buffer (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand16INT10_HDR_BUFFERE"]], "drv3dcommand::is_defrag_requested (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand19IS_DEFRAG_REQUESTEDE"]], "drv3dcommand::is_hdr_available (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand16IS_HDR_AVAILABLEE"]], "drv3dcommand::is_hdr_enabled (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand14IS_HDR_ENABLEDE"]], "drv3dcommand::is_xess_quality_available_at_resolution (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand39IS_XESS_QUALITY_AVAILABLE_AT_RESOLUTIONE"]], "drv3dcommand::load_pipeline_cache (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand19LOAD_PIPELINE_CACHEE"]], "drv3dcommand::logerr_on_sync (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand14LOGERR_ON_SYNCE"]], "drv3dcommand::make_texture (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand12MAKE_TEXTUREE"]], "drv3dcommand::mem_stat (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand8MEM_STATE"]], "drv3dcommand::override_max_anisotropy_level (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand29OVERRIDE_MAX_ANISOTROPY_LEVELE"]], "drv3dcommand::pix_gpu_begin_capture (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand21PIX_GPU_BEGIN_CAPTUREE"]], "drv3dcommand::pix_gpu_capture_after_long_frames (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand33PIX_GPU_CAPTURE_AFTER_LONG_FRAMESE"]], "drv3dcommand::pix_gpu_capture_next_frames (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand27PIX_GPU_CAPTURE_NEXT_FRAMESE"]], "drv3dcommand::pix_gpu_end_capture (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand19PIX_GPU_END_CAPTUREE"]], "drv3dcommand::prepare_textures_for_vr_consumption (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand35PREPARE_TEXTURES_FOR_VR_CONSUMPTIONE"]], "drv3dcommand::pre_rotate_pass (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand15PRE_ROTATE_PASSE"]], "drv3dcommand::process_app_inactive_update (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand27PROCESS_APP_INACTIVE_UPDATEE"]], "drv3dcommand::process_pending_defrag_requests (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand31PROCESS_PENDING_DEFRAG_REQUESTSE"]], "drv3dcommand::process_pending_resource_updated (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand32PROCESS_PENDING_RESOURCE_UPDATEDE"]], "drv3dcommand::register_device_reset_event_handler (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand35REGISTER_DEVICE_RESET_EVENT_HANDLERE"]], "drv3dcommand::register_frame_completion_event (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand31REGISTER_FRAME_COMPLETION_EVENTE"]], "drv3dcommand::register_one_time_frame_execution_event_callbacks (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand49REGISTER_ONE_TIME_FRAME_EXECUTION_EVENT_CALLBACKSE"]], "drv3dcommand::register_shader_dump (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand20REGISTER_SHADER_DUMPE"]], "drv3dcommand::release_loading (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand15RELEASE_LOADINGE"]], "drv3dcommand::release_ownership (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand17RELEASE_OWNERSHIPE"]], "drv3dcommand::release_query (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand13RELEASE_QUERYE"]], "drv3dcommand::remove_debug_break_string_search (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand32REMOVE_DEBUG_BREAK_STRING_SEARCHE"]], "drv3dcommand::report_resource_state_transitions (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand33REPORT_RESOURCE_STATE_TRANSITIONSE"]], "drv3dcommand::save_pipeline_cache (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand19SAVE_PIPELINE_CACHEE"]], "drv3dcommand::send_gpu_crash_dump (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand19SEND_GPU_CRASH_DUMPE"]], "drv3dcommand::set_app_info (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand12SET_APP_INFOE"]], "drv3dcommand::set_driver_netword_manager (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand26SET_DRIVER_NETWORD_MANAGERE"]], "drv3dcommand::set_freq_level (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand14SET_FREQ_LEVELE"]], "drv3dcommand::set_hdr (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand7SET_HDRE"]], "drv3dcommand::set_pipeline_compilation_time_budget (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand36SET_PIPELINE_COMPILATION_TIME_BUDGETE"]], "drv3dcommand::set_ps5_fsr_view (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand16SET_PS5_FSR_VIEWE"]], "drv3dcommand::set_ps_debug_info (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand17SET_PS_DEBUG_INFOE"]], "drv3dcommand::set_vs_debug_info (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand17SET_VS_DEBUG_INFOE"]], "drv3dcommand::set_xess_velocity_scale (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand23SET_XESS_VELOCITY_SCALEE"]], "drv3dcommand::start_capture_frame (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand19START_CAPTURE_FRAMEE"]], "drv3dcommand::timeclockcalibration (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand20TIMECLOCKCALIBRATIONE"]], "drv3dcommand::timestampfreq (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand13TIMESTAMPFREQE"]], "drv3dcommand::timestampget (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand12TIMESTAMPGETE"]], "drv3dcommand::timestampissue (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand14TIMESTAMPISSUEE"]], "drv3dcommand::unregister_device_reset_event_handler (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand37UNREGISTER_DEVICE_RESET_EVENT_HANDLERE"]], "drv3dcommand::user (c++ enumerator)": [[30, "_CPPv4N12Drv3dCommand4USERE"]], "drv3dmaketextureparams (c++ struct)": [[30, "_CPPv422Drv3dMakeTextureParams"]], "drv3dmaketextureparams::currentstate (c++ member)": [[30, "_CPPv4N22Drv3dMakeTextureParams12currentStateE"]], "drv3dmaketextureparams::flg (c++ member)": [[30, "_CPPv4N22Drv3dMakeTextureParams3flgE"]], "drv3dmaketextureparams::h (c++ member)": [[30, "_CPPv4N22Drv3dMakeTextureParams1hE"]], "drv3dmaketextureparams::layers (c++ member)": [[30, "_CPPv4N22Drv3dMakeTextureParams6layersE"]], "drv3dmaketextureparams::mips (c++ member)": [[30, "_CPPv4N22Drv3dMakeTextureParams4mipsE"]], "drv3dmaketextureparams::name (c++ member)": [[30, "_CPPv4N22Drv3dMakeTextureParams4nameE"]], "drv3dmaketextureparams::tex (c++ member)": [[30, "_CPPv4N22Drv3dMakeTextureParams3texE"]], "drv3dmaketextureparams::w (c++ member)": [[30, "_CPPv4N22Drv3dMakeTextureParams1wE"]], "drv3dtimings (c++ struct)": [[30, "_CPPv412Drv3dTimings"]], "drv3dtimings::backbufferacquireduration (c++ member)": [[30, "_CPPv4N12Drv3dTimings25backbufferAcquireDurationE"]], "drv3dtimings::backendfrontendwaitduration (c++ member)": [[30, "_CPPv4N12Drv3dTimings27backendFrontendWaitDurationE"]], "drv3dtimings::frontendbackendwaitduration (c++ member)": [[30, "_CPPv4N12Drv3dTimings27frontendBackendWaitDurationE"]], "drv3dtimings::frontendtobackendupdatescreenlatency (c++ member)": [[30, "_CPPv4N12Drv3dTimings36frontendToBackendUpdateScreenLatencyE"]], "drv3dtimings::frontendupdatescreeninterval (c++ member)": [[30, "_CPPv4N12Drv3dTimings28frontendUpdateScreenIntervalE"]], "drv3dtimings::frontendwaitforswapchainduration (c++ member)": [[30, "_CPPv4N12Drv3dTimings32frontendWaitForSwapchainDurationE"]], "drv3dtimings::gpuwaitduration (c++ member)": [[30, "_CPPv4N12Drv3dTimings15gpuWaitDurationE"]], "drv3dtimings::presentduration (c++ member)": [[30, "_CPPv4N12Drv3dTimings15presentDurationE"]], "frameevents (c++ struct)": [[30, "_CPPv411FrameEvents"]], "frameevents::beginframeevent (c++ function)": [[30, "_CPPv4N11FrameEvents15beginFrameEventEv"]], "frameevents::endframeevent (c++ function)": [[30, "_CPPv4N11FrameEvents13endFrameEventEv"]], "frameevents::~frameevents (c++ function)": [[30, "_CPPv4N11FrameEventsD0Ev"]], "[anonymous] (c++ enum)": [[30, "_CPPv4Ut1_1"], [45, "_CPPv4Ut2_47"], [52, "_CPPv4Ut2_40"], [52, "_CPPv4Ut2_41"], [52, "_CPPv4Ut2_42"], [52, "_CPPv4Ut2_43"], [52, "_CPPv4Ut2_44"], [52, "_CPPv4Ut2_45"], [52, "_CPPv4Ut2_46"], [52, "_CPPv4Ut2_48"], [52, "_CPPv4Ut2_49"], [52, "_CPPv4Ut2_50"], [52, "_CPPv4Ut2_51"], [52, "_CPPv4Ut2_52"], [52, "_CPPv4Ut2_53"], [52, "_CPPv4Ut2_54"], [54, "_CPPv4Ut2_37"], [54, "_CPPv4Ut2_38"], [54, "_CPPv4Ut2_39"]], "[anonymous]::drv3d_cpu_freq_nsec (c++ enumerator)": [[30, "_CPPv4NUt1_119DRV3D_CPU_FREQ_NSECE"]], "[anonymous]::drv3d_cpu_freq_type_profile (c++ enumerator)": [[30, "_CPPv4NUt1_127DRV3D_CPU_FREQ_TYPE_PROFILEE"]], "[anonymous]::drv3d_cpu_freq_type_qpc (c++ enumerator)": [[30, "_CPPv4NUt1_123DRV3D_CPU_FREQ_TYPE_QPCE"]], "[anonymous]::drv3d_cpu_freq_type_ref (c++ enumerator)": [[30, "_CPPv4NUt1_123DRV3D_CPU_FREQ_TYPE_REFE"]], "[anonymous]::drv3d_cpu_freq_type_unknown (c++ enumerator)": [[30, "_CPPv4NUt1_127DRV3D_CPU_FREQ_TYPE_UNKNOWNE"]], "d3d::driver_command (c++ function)": [[30, "_CPPv4N3d3d14driver_commandE12Drv3dCommandPvPvPv"]], "d3d::dispatch (c++ function)": [[31, "_CPPv4N3d3d8dispatchE8uint32_t8uint32_t8uint32_t11GpuPipeline"]], "d3d::dispatch_indirect (c++ function)": [[31, "_CPPv4N3d3d17dispatch_indirectEP7Sbuffer8uint32_t11GpuPipeline"]], "d3d::dispatch_mesh (c++ function)": [[32, "_CPPv4N3d3d13dispatch_meshE8uint32_t8uint32_t8uint32_t"]], "d3d::dispatch_mesh_indirect (c++ function)": [[32, "_CPPv4N3d3d22dispatch_mesh_indirectEP7Sbuffer8uint32_t8uint32_t8uint32_t"]], "d3d::dispatch_mesh_indirect_count (c++ function)": [[32, "_CPPv4N3d3d28dispatch_mesh_indirect_countEP7Sbuffer8uint32_t8uint32_tP7Sbuffer8uint32_t8uint32_t"]], "d3d::draw (c++ function)": [[33, "_CPPv4N3d3d4drawEiii"]], "d3d::draw_base (c++ function)": [[33, "_CPPv4N3d3d9draw_baseEiii8uint32_t8uint32_t"]], "d3d::draw_indexed_indirect (c++ function)": [[33, "_CPPv4N3d3d21draw_indexed_indirectEiP7Sbuffer8uint32_t"]], "d3d::draw_indirect (c++ function)": [[33, "_CPPv4N3d3d13draw_indirectEiP7Sbuffer8uint32_t"]], "d3d::draw_instanced (c++ function)": [[33, "_CPPv4N3d3d14draw_instancedEiii8uint32_t8uint32_t"]], "d3d::draw_up (c++ function)": [[33, "_CPPv4N3d3d7draw_upEiiPKvi"]], "d3d::drawind (c++ function)": [[33, "_CPPv4N3d3d7drawindEiiii"]], "d3d::drawind_base (c++ function)": [[33, "_CPPv4N3d3d12drawind_baseEiiii8uint32_t8uint32_t"]], "d3d::drawind_instanced (c++ function)": [[33, "_CPPv4N3d3d17drawind_instancedEiiii8uint32_t8uint32_t"]], "d3d::drawind_up (c++ function)": [[33, "_CPPv4N3d3d10drawind_upEiiiiPK8uint16_tPKvi"]], "d3d::multi_draw_indexed_indirect (c++ function)": [[33, "_CPPv4N3d3d27multi_draw_indexed_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t"]], "d3d::multi_draw_indirect (c++ function)": [[33, "_CPPv4N3d3d19multi_draw_indirectEiP7Sbuffer8uint32_t8uint32_t8uint32_t"]], "arraycubetextureresourcedescription (c++ struct)": [[34, "_CPPv435ArrayCubeTextureResourceDescription"]], "arraycubetextureresourcedescription::cubes (c++ member)": [[34, "_CPPv4N35ArrayCubeTextureResourceDescription5cubesE"]], "arraytextureresourcedescription (c++ struct)": [[34, "_CPPv431ArrayTextureResourceDescription"]], "arraytextureresourcedescription::arraylayers (c++ member)": [[34, "_CPPv4N31ArrayTextureResourceDescription11arrayLayersE"]], "basicresourcedescription (c++ struct)": [[34, "_CPPv424BasicResourceDescription"]], "basicresourcedescription::activation (c++ member)": [[34, "_CPPv4N24BasicResourceDescription10activationE"]], "basicresourcedescription::cflags (c++ member)": [[34, "_CPPv4N24BasicResourceDescription6cFlagsE"]], "basicresourcedescription::clearvalue (c++ member)": [[34, "_CPPv4N24BasicResourceDescription10clearValueE"]], "basictextureresourcedescription (c++ struct)": [[34, "_CPPv431BasicTextureResourceDescription"]], "basictextureresourcedescription::miplevels (c++ member)": [[34, "_CPPv4N31BasicTextureResourceDescription9mipLevelsE"]], "bufferresourcedescription (c++ struct)": [[34, "_CPPv425BufferResourceDescription"]], "bufferresourcedescription::elementcount (c++ member)": [[34, "_CPPv4N25BufferResourceDescription12elementCountE"]], "bufferresourcedescription::elementsizeinbytes (c++ member)": [[34, "_CPPv4N25BufferResourceDescription18elementSizeInBytesE"]], "bufferresourcedescription::viewformat (c++ member)": [[34, "_CPPv4N25BufferResourceDescription10viewFormatE"]], "cubetextureresourcedescription (c++ struct)": [[34, "_CPPv430CubeTextureResourceDescription"]], "cubetextureresourcedescription::extent (c++ member)": [[34, "_CPPv4N30CubeTextureResourceDescription6extentE"]], "field_matches (c macro)": [[34, "c.FIELD_MATCHES"]], "resourceactivationaction (c++ enum)": [[34, "_CPPv424ResourceActivationAction"]], "resourceactivationaction::clear_as_rtv_dsv (c++ enumerator)": [[34, "_CPPv4N24ResourceActivationAction16CLEAR_AS_RTV_DSVE"]], "resourceactivationaction::clear_f_as_uav (c++ enumerator)": [[34, "_CPPv4N24ResourceActivationAction14CLEAR_F_AS_UAVE"]], "resourceactivationaction::clear_i_as_uav (c++ enumerator)": [[34, "_CPPv4N24ResourceActivationAction14CLEAR_I_AS_UAVE"]], "resourceactivationaction::discard_as_rtv_dsv (c++ enumerator)": [[34, "_CPPv4N24ResourceActivationAction18DISCARD_AS_RTV_DSVE"]], "resourceactivationaction::discard_as_uav (c++ enumerator)": [[34, "_CPPv4N24ResourceActivationAction14DISCARD_AS_UAVE"]], "resourceactivationaction::rewrite_as_copy_destination (c++ enumerator)": [[34, "_CPPv4N24ResourceActivationAction27REWRITE_AS_COPY_DESTINATIONE"]], "resourceactivationaction::rewrite_as_rtv_dsv (c++ enumerator)": [[34, "_CPPv4N24ResourceActivationAction18REWRITE_AS_RTV_DSVE"]], "resourceactivationaction::rewrite_as_uav (c++ enumerator)": [[34, "_CPPv4N24ResourceActivationAction14REWRITE_AS_UAVE"]], "resourceallocationproperties (c++ struct)": [[34, "_CPPv428ResourceAllocationProperties"]], "resourceallocationproperties::heapgroup (c++ member)": [[34, "_CPPv4N28ResourceAllocationProperties9heapGroupE"]], "resourceallocationproperties::offsetalignment (c++ member)": [[34, "_CPPv4N28ResourceAllocationProperties15offsetAlignmentE"]], "resourceallocationproperties::sizeinbytes (c++ member)": [[34, "_CPPv4N28ResourceAllocationProperties11sizeInBytesE"]], "resourcedescription (c++ struct)": [[34, "_CPPv419ResourceDescription"]], "resourcedescription::hasht (c++ type)": [[34, "_CPPv4N19ResourceDescription5HashTE"]], "resourcedescription::resourcedescription (c++ function)": [[34, "_CPPv4N19ResourceDescription19ResourceDescriptionERK19ResourceDescription"], [34, "_CPPv4N19ResourceDescription19ResourceDescriptionERK25BufferResourceDescription"], [34, "_CPPv4N19ResourceDescription19ResourceDescriptionERK26TextureResourceDescription"], [34, "_CPPv4N19ResourceDescription19ResourceDescriptionERK29VolTextureResourceDescription"], [34, "_CPPv4N19ResourceDescription19ResourceDescriptionERK30CubeTextureResourceDescription"], [34, "_CPPv4N19ResourceDescription19ResourceDescriptionERK31ArrayTextureResourceDescription"], [34, "_CPPv4N19ResourceDescription19ResourceDescriptionERK35ArrayCubeTextureResourceDescription"], [34, "_CPPv4N19ResourceDescription19ResourceDescriptionEv"]], "resourcedescription::[anonymous] (c++ member)": [[34, "_CPPv4N19ResourceDescriptionUt2_22E"]], "resourcedescription::asarraycubetexres (c++ member)": [[34, "_CPPv4N19ResourceDescription17asArrayCubeTexResE"]], "resourcedescription::asarraytexres (c++ member)": [[34, "_CPPv4N19ResourceDescription13asArrayTexResE"]], "resourcedescription::asbasicres (c++ member)": [[34, "_CPPv4N19ResourceDescription10asBasicResE"]], "resourcedescription::asbasictexres (c++ member)": [[34, "_CPPv4N19ResourceDescription13asBasicTexResE"]], "resourcedescription::asbufferres (c++ member)": [[34, "_CPPv4N19ResourceDescription11asBufferResE"]], "resourcedescription::ascubetexres (c++ member)": [[34, "_CPPv4N19ResourceDescription12asCubeTexResE"]], "resourcedescription::astexres (c++ member)": [[34, "_CPPv4N19ResourceDescription8asTexResE"]], "resourcedescription::asvoltexres (c++ member)": [[34, "_CPPv4N19ResourceDescription11asVolTexResE"]], "resourcedescription::hash (c++ function)": [[34, "_CPPv4NK19ResourceDescription4hashEv"]], "resourcedescription::hashpack (c++ function)": [[34, "_CPPv4I0DpENK19ResourceDescription8hashPackE5HashTRK1TDpRK2Ts"], [34, "_CPPv4NK19ResourceDescription8hashPackEv"]], "resourcedescription::operator= (c++ function)": [[34, "_CPPv4N19ResourceDescriptionaSERK19ResourceDescription"]], "resourcedescription::operator== (c++ function)": [[34, "_CPPv4NK19ResourceDescriptioneqERK19ResourceDescription"]], "resourcedescription::restype (c++ member)": [[34, "_CPPv4N19ResourceDescription7resTypeE"]], "resourceheapcreateflag (c++ enum)": [[34, "_CPPv422ResourceHeapCreateFlag"]], "resourceheapcreateflag::rhcf_none (c++ enumerator)": [[34, "_CPPv4N22ResourceHeapCreateFlag9RHCF_NONEE"]], "resourceheapcreateflag::rhcf_requires_dedicated_heap (c++ enumerator)": [[34, "_CPPv4N22ResourceHeapCreateFlag28RHCF_REQUIRES_DEDICATED_HEAPE"]], "resourceheapcreateflags (c++ type)": [[34, "_CPPv423ResourceHeapCreateFlags"]], "resourceheapgroupproperties (c++ struct)": [[34, "_CPPv427ResourceHeapGroupProperties"]], "resourceheapgroupproperties::[anonymous] (c++ member)": [[34, "_CPPv4N27ResourceHeapGroupPropertiesUt2_24E"]], "resourceheapgroupproperties::flags (c++ member)": [[34, "_CPPv4N27ResourceHeapGroupProperties5flagsE"]], "resourceheapgroupproperties::iscpuvisible (c++ member)": [[34, "_CPPv4N27ResourceHeapGroupProperties12isCPUVisibleE"]], "resourceheapgroupproperties::isgpulocal (c++ member)": [[34, "_CPPv4N27ResourceHeapGroupProperties10isGPULocalE"]], "resourceheapgroupproperties::isonchip (c++ member)": [[34, "_CPPv4N27ResourceHeapGroupProperties8isOnChipE"]], "resourceheapgroupproperties::maxheapsize (c++ member)": [[34, "_CPPv4N27ResourceHeapGroupProperties11maxHeapSizeE"]], "resourceheapgroupproperties::maxresourcesize (c++ member)": [[34, "_CPPv4N27ResourceHeapGroupProperties15maxResourceSizeE"]], "resourceheapgroupproperties::optimalmaxheapsize (c++ member)": [[34, "_CPPv4N27ResourceHeapGroupProperties18optimalMaxHeapSizeE"]], "textureresourcedescription (c++ struct)": [[34, "_CPPv426TextureResourceDescription"]], "textureresourcedescription::height (c++ member)": [[34, "_CPPv4N26TextureResourceDescription6heightE"]], "textureresourcedescription::width (c++ member)": [[34, "_CPPv4N26TextureResourceDescription5widthE"]], "voltextureresourcedescription (c++ struct)": [[34, "_CPPv429VolTextureResourceDescription"]], "voltextureresourcedescription::depth (c++ member)": [[34, "_CPPv4N29VolTextureResourceDescription5depthE"]], "activate_buffer (c++ function)": [[34, "_CPPv415activate_bufferP7Sbuffer24ResourceActivationActionRK18ResourceClearValue11GpuPipeline"]], "activate_texture (c++ function)": [[34, "_CPPv416activate_textureP11BaseTexture24ResourceActivationActionRK18ResourceClearValue11GpuPipeline"]], "create_resource_heap (c++ function)": [[34, "_CPPv420create_resource_heapP17ResourceHeapGroup6size_t23ResourceHeapCreateFlags"]], "d3d::activate_buffer (c++ function)": [[34, "_CPPv4N3d3d15activate_bufferEP7Sbuffer24ResourceActivationActionRK18ResourceClearValue11GpuPipeline"]], "d3d::activate_texture (c++ function)": [[34, "_CPPv4N3d3d16activate_textureEP11BaseTexture24ResourceActivationActionRK18ResourceClearValue11GpuPipeline"]], "d3d::create_resource_heap (c++ function)": [[34, "_CPPv4N3d3d20create_resource_heapEP17ResourceHeapGroup6size_t23ResourceHeapCreateFlags"]], "d3d::deactivate_buffer (c++ function)": [[34, "_CPPv4N3d3d17deactivate_bufferEP7Sbuffer11GpuPipeline"]], "d3d::deactivate_texture (c++ function)": [[34, "_CPPv4N3d3d18deactivate_textureEP11BaseTexture11GpuPipeline"]], "d3d::destroy_resource_heap (c++ function)": [[34, "_CPPv4N3d3d21destroy_resource_heapEP12ResourceHeap"]], "d3d::get_resource_allocation_properties (c++ function)": [[34, "_CPPv4N3d3d34get_resource_allocation_propertiesERK19ResourceDescription"]], "d3d::get_resource_heap_group_properties (c++ function)": [[34, "_CPPv4N3d3d34get_resource_heap_group_propertiesEP17ResourceHeapGroup"]], "d3d::place_buffer_in_resource_heap (c++ function)": [[34, "_CPPv4N3d3d29place_buffer_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc"]], "d3d::place_texture_in_resource_heap (c++ function)": [[34, "_CPPv4N3d3d30place_texture_in_resource_heapEP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc"]], "deactivate_buffer (c++ function)": [[34, "_CPPv417deactivate_bufferP7Sbuffer11GpuPipeline"]], "deactivate_texture (c++ function)": [[34, "_CPPv418deactivate_textureP11BaseTexture11GpuPipeline"]], "destroy_resource_heap (c++ function)": [[34, "_CPPv421destroy_resource_heapP12ResourceHeap"]], "eastl (c++ type)": [[34, "_CPPv45eastl"]], "eastl::hash (c++ class)": [[34, "_CPPv4IEN5eastl4hashI19ResourceDescriptionEE"]], "eastl::hash::operator() (c++ function)": [[34, "_CPPv4NK5eastl4hashI19ResourceDescriptionEclERK19ResourceDescription"]], "get_resource_allocation_properties (c++ function)": [[34, "_CPPv434get_resource_allocation_propertiesRK19ResourceDescription"]], "get_resource_heap_group_properties (c++ function)": [[34, "_CPPv434get_resource_heap_group_propertiesP17ResourceHeapGroup"]], "place_buffer_in_resource_heap (c++ function)": [[34, "_CPPv429place_buffer_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc"]], "place_texture_in_resource_heap (c++ function)": [[34, "_CPPv430place_texture_in_resource_heapP12ResourceHeapRK19ResourceDescription6size_tRK28ResourceAllocationPropertiesPKc"]], "apisupport (c++ enum)": [[35, "_CPPv410APISupport"]], "apisupport::blacklisted_driver (c++ enumerator)": [[35, "_CPPv4N10APISupport18BLACKLISTED_DRIVERE"]], "apisupport::full_support (c++ enumerator)": [[35, "_CPPv4N10APISupport12FULL_SUPPORTE"]], "apisupport::no_device_found (c++ enumerator)": [[35, "_CPPv4N10APISupport15NO_DEVICE_FOUNDE"]], "apisupport::outdated_driver (c++ enumerator)": [[35, "_CPPv4N10APISupport15OUTDATED_DRIVERE"]], "driver3dinitcallback (c++ class)": [[35, "_CPPv420Driver3dInitCallback"]], "driver3dinitcallback::needstereorenderfunc (c++ type)": [[35, "_CPPv4N20Driver3dInitCallback20NeedStereoRenderFuncE"]], "driver3dinitcallback::rendersize (c++ struct)": [[35, "_CPPv4N20Driver3dInitCallback10RenderSizeE"]], "driver3dinitcallback::rendersize::height (c++ member)": [[35, "_CPPv4N20Driver3dInitCallback10RenderSize6heightE"]], "driver3dinitcallback::rendersize::width (c++ member)": [[35, "_CPPv4N20Driver3dInitCallback10RenderSize5widthE"]], "driver3dinitcallback::stereorenderadapterfunc (c++ type)": [[35, "_CPPv4N20Driver3dInitCallback23StereoRenderAdapterFuncE"]], "driver3dinitcallback::stereorenderdimensionfunc (c++ type)": [[35, "_CPPv4N20Driver3dInitCallback25StereoRenderDimensionFuncE"]], "driver3dinitcallback::stereorenderextensionsfunc (c++ type)": [[35, "_CPPv4N20Driver3dInitCallback26StereoRenderExtensionsFuncE"]], "driver3dinitcallback::stereorenderversionsfunc (c++ type)": [[35, "_CPPv4N20Driver3dInitCallback24StereoRenderVersionsFuncE"]], "driver3dinitcallback::versionrange (c++ struct)": [[35, "_CPPv4N20Driver3dInitCallback12VersionRangeE"]], "driver3dinitcallback::versionrange::maxversion (c++ member)": [[35, "_CPPv4N20Driver3dInitCallback12VersionRange10maxVersionE"]], "driver3dinitcallback::versionrange::minversion (c++ member)": [[35, "_CPPv4N20Driver3dInitCallback12VersionRange10minVersionE"]], "driver3dinitcallback::comparedesc (c++ function)": [[35, "_CPPv4NK20Driver3dInitCallback11compareDescER12Driver3dDescR12Driver3dDesc"]], "driver3dinitcallback::desiredadapter (c++ function)": [[35, "_CPPv4NK20Driver3dInitCallback14desiredAdapterEv"]], "driver3dinitcallback::desiredrendererdeviceextensions (c++ function)": [[35, "_CPPv4NK20Driver3dInitCallback31desiredRendererDeviceExtensionsEv"]], "driver3dinitcallback::desiredrendererinstanceextensions (c++ function)": [[35, "_CPPv4NK20Driver3dInitCallback33desiredRendererInstanceExtensionsEv"]], "driver3dinitcallback::desiredrenderersize (c++ function)": [[35, "_CPPv4NK20Driver3dInitCallback19desiredRendererSizeEv"]], "driver3dinitcallback::desiredrendererversionrange (c++ function)": [[35, "_CPPv4NK20Driver3dInitCallback27desiredRendererVersionRangeEv"]], "driver3dinitcallback::desiredstereorender (c++ function)": [[35, "_CPPv4NK20Driver3dInitCallback19desiredStereoRenderEv"]], "driver3dinitcallback::validatedesc (c++ function)": [[35, "_CPPv4NK20Driver3dInitCallback12validateDescER12Driver3dDesc"]], "driver3dinitcallback::verifyresolutionsettings (c++ function)": [[35, "_CPPv4NK20Driver3dInitCallback24verifyResolutionSettingsERiRiiib"]], "d3d::disable_sli (c++ function)": [[35, "_CPPv4N3d3d11disable_sliEv"]], "d3d::get_context (c++ function)": [[35, "_CPPv4N3d3d11get_contextEv"]], "d3d::get_current_gpu_memory_kb (c++ function)": [[35, "_CPPv4N3d3d25get_current_gpu_memory_kbEP8uint32_tP8uint32_t"]], "d3d::get_dedicated_gpu_memory_size_kb (c++ function)": [[35, "_CPPv4N3d3d32get_dedicated_gpu_memory_size_kbEv"]], "d3d::get_device (c++ function)": [[35, "_CPPv4N3d3d10get_deviceEv"]], "d3d::get_device_driver_version (c++ function)": [[35, "_CPPv4N3d3d25get_device_driver_versionEv"]], "d3d::get_device_name (c++ function)": [[35, "_CPPv4N3d3d15get_device_nameEv"]], "d3d::get_display_scale (c++ function)": [[35, "_CPPv4N3d3d17get_display_scaleEv"]], "d3d::get_driver_code (c++ function)": [[35, "_CPPv4N3d3d15get_driver_codeEv"]], "d3d::get_driver_desc (c++ function)": [[35, "_CPPv4N3d3d15get_driver_descEv"]], "d3d::get_driver_name (c++ function)": [[35, "_CPPv4N3d3d15get_driver_nameEv"]], "d3d::get_free_dedicated_gpu_memory_size_kb (c++ function)": [[35, "_CPPv4N3d3d37get_free_dedicated_gpu_memory_size_kbEv"]], "d3d::get_gpu_driver_date (c++ function)": [[35, "_CPPv4N3d3d19get_gpu_driver_dateEi"]], "d3d::get_gpu_freq (c++ function)": [[35, "_CPPv4N3d3d12get_gpu_freqER6String"]], "d3d::get_gpu_temperature (c++ function)": [[35, "_CPPv4N3d3d19get_gpu_temperatureEv"]], "d3d::get_last_error (c++ function)": [[35, "_CPPv4N3d3d14get_last_errorEv"]], "d3d::get_last_error_code (c++ function)": [[35, "_CPPv4N3d3d19get_last_error_codeEv"]], "d3d::get_video_vendor_str (c++ function)": [[35, "_CPPv4N3d3d20get_video_vendor_strER6String"]], "d3d::guess_gpu_vendor (c++ function)": [[35, "_CPPv4N3d3d16guess_gpu_vendorEP6StringP8uint32_tP13DagorDateTimeP8uint32_t"]], "d3d::is_in_device_reset_now (c++ function)": [[35, "_CPPv4N3d3d22is_in_device_reset_nowEv"]], "d3d::is_stub_driver (c++ function)": [[35, "_CPPv4N3d3d14is_stub_driverEv"]], "d3d::is_window_occluded (c++ function)": [[35, "_CPPv4N3d3d18is_window_occludedEv"]], "d3d::should_use_compute_for_image_processing (c++ function)": [[35, "_CPPv4N3d3d39should_use_compute_for_image_processingENSt16initializer_listIjEE"]], "d3d::gpuworkloadsplit (c++ struct)": [[36, "_CPPv4N3d3d16GPUWorkloadSplitE"]], "d3d::gpuworkloadsplit::gpuworkloadsplit (c++ function)": [[36, "_CPPv4N3d3d16GPUWorkloadSplit16GPUWorkloadSplitEbbPKc"]], "d3d::gpuworkloadsplit::needsplitatend (c++ member)": [[36, "_CPPv4N3d3d16GPUWorkloadSplit14needSplitAtEndE"]], "d3d::gpuworkloadsplit::~gpuworkloadsplit (c++ function)": [[36, "_CPPv4N3d3d16GPUWorkloadSplitD0Ev"]], "d3d::gpuautolock (c++ struct)": [[36, "_CPPv4N3d3d11GpuAutoLockE"]], "d3d::gpuautolock::gpuautolock (c++ function)": [[36, "_CPPv4N3d3d11GpuAutoLock11GpuAutoLockEv"]], "d3d::gpuautolock::~gpuautolock (c++ function)": [[36, "_CPPv4N3d3d11GpuAutoLockD0Ev"]], "d3d::loadingautolock (c++ struct)": [[36, "_CPPv4N3d3d15LoadingAutoLockE"]], "d3d::loadingautolock::loadingautolock (c++ function)": [[36, "_CPPv4N3d3d15LoadingAutoLock15LoadingAutoLockEv"]], "d3d::loadingautolock::~loadingautolock (c++ function)": [[36, "_CPPv4N3d3d15LoadingAutoLockD0Ev"]], "matrix44 (c++ type)": [[37, "_CPPv48Matrix44"]], "d3d::calcglobtm (c++ function)": [[37, "_CPPv4N3d3d10calcglobtmERK6mat44fRK19Driver3dPerspectiveR6mat44f"], [37, "_CPPv4N3d3d10calcglobtmERK6mat44fRK6mat44fR6mat44f"], [37, "_CPPv4N3d3d10calcglobtmERK7TMatrixRK19Driver3dPerspectiveR8TMatrix4"], [37, "_CPPv4N3d3d10calcglobtmERK7TMatrixRK8TMatrix4R8TMatrix4"]], "d3d::calcproj (c++ function)": [[37, "_CPPv4N3d3d8calcprojERK19Driver3dPerspectiveR6mat44f"], [37, "_CPPv4N3d3d8calcprojERK19Driver3dPerspectiveR8TMatrix4"]], "d3d::getglobtm (c++ function)": [[37, "_CPPv4N3d3d9getglobtmER6mat44f"], [37, "_CPPv4N3d3d9getglobtmER8Matrix44"]], "d3d::getm2vtm (c++ function)": [[37, "_CPPv4N3d3d8getm2vtmER7TMatrix"]], "d3d::getpersp (c++ function)": [[37, "_CPPv4N3d3d8getperspER19Driver3dPerspective"]], "d3d::gettm (c++ function)": [[37, "_CPPv4N3d3d5gettmEiP8Matrix44"], [37, "_CPPv4N3d3d5gettmEiR6mat44f"], [37, "_CPPv4N3d3d5gettmEiR7TMatrix"]], "d3d::gettm_cref (c++ function)": [[37, "_CPPv4N3d3d10gettm_crefEi"]], "d3d::setglobtm (c++ function)": [[37, "_CPPv4N3d3d9setglobtmER8Matrix44"], [37, "_CPPv4N3d3d9setglobtmERK6mat44f"]], "d3d::setpersp (c++ function)": [[37, "_CPPv4N3d3d8setperspERK19Driver3dPerspectiveP8TMatrix4"]], "d3d::settm (c++ function)": [[37, "_CPPv4N3d3d5settmEiPK8Matrix44"], [37, "_CPPv4N3d3d5settmEiRK6mat44f"], [37, "_CPPv4N3d3d5settmEiRK7TMatrix"]], "d3d::validatepersp (c++ function)": [[37, "_CPPv4N3d3d13validateperspERK19Driver3dPerspective"]], "d3d::eventquery (c++ type)": [[38, "_CPPv4N3d3d10EventQueryE"]], "d3d::create_event_query (c++ function)": [[38, "_CPPv4N3d3d18create_event_queryEv"]], "d3d::get_event_query_status (c++ function)": [[38, "_CPPv4N3d3d22get_event_query_statusEP10EventQueryb"]], "d3d::issue_event_query (c++ function)": [[38, "_CPPv4N3d3d17issue_event_queryEP10EventQuery"]], "d3d::release_event_query (c++ function)": [[38, "_CPPv4N3d3d19release_event_queryEP10EventQuery"]], "renderpassarea (c++ struct)": [[39, "_CPPv414RenderPassArea"]], "renderpassarea::height (c++ member)": [[39, "_CPPv4N14RenderPassArea6heightE"]], "renderpassarea::left (c++ member)": [[39, "_CPPv4N14RenderPassArea4leftE"]], "renderpassarea::maxz (c++ member)": [[39, "_CPPv4N14RenderPassArea4maxZE"]], "renderpassarea::minz (c++ member)": [[39, "_CPPv4N14RenderPassArea4minZE"]], "renderpassarea::top (c++ member)": [[39, "_CPPv4N14RenderPassArea3topE"]], "renderpassarea::width (c++ member)": [[39, "_CPPv4N14RenderPassArea5widthE"]], "renderpassbind (c++ struct)": [[39, "_CPPv414RenderPassBind"]], "renderpassbind::action (c++ member)": [[39, "_CPPv4N14RenderPassBind6actionE"]], "renderpassbind::dependencybarrier (c++ member)": [[39, "_CPPv4N14RenderPassBind17dependencyBarrierE"]], "renderpassbind::slot (c++ member)": [[39, "_CPPv4N14RenderPassBind4slotE"]], "renderpassbind::subpass (c++ member)": [[39, "_CPPv4N14RenderPassBind7subpassE"]], "renderpassbind::target (c++ member)": [[39, "_CPPv4N14RenderPassBind6targetE"]], "renderpassdesc (c++ struct)": [[39, "_CPPv414RenderPassDesc"]], "renderpassdesc::bindcount (c++ member)": [[39, "_CPPv4N14RenderPassDesc9bindCountE"]], "renderpassdesc::binds (c++ member)": [[39, "_CPPv4N14RenderPassDesc5bindsE"]], "renderpassdesc::debugname (c++ member)": [[39, "_CPPv4N14RenderPassDesc9debugNameE"]], "renderpassdesc::subpassbindingoffset (c++ member)": [[39, "_CPPv4N14RenderPassDesc20subpassBindingOffsetE"]], "renderpassdesc::targetcount (c++ member)": [[39, "_CPPv4N14RenderPassDesc11targetCountE"]], "renderpassdesc::targetsdesc (c++ member)": [[39, "_CPPv4N14RenderPassDesc11targetsDescE"]], "renderpassextraindexes (c++ enum)": [[39, "_CPPv422RenderPassExtraIndexes"], [52, "_CPPv422RenderPassExtraIndexes"]], "renderpassextraindexes::rp_index_normal (c++ enumerator)": [[39, "_CPPv4N22RenderPassExtraIndexes15RP_INDEX_NORMALE"], [52, "_CPPv4N22RenderPassExtraIndexes15RP_INDEX_NORMALE"]], "renderpassextraindexes::rp_slot_depth_stencil (c++ enumerator)": [[39, "_CPPv4N22RenderPassExtraIndexes21RP_SLOT_DEPTH_STENCILE"], [52, "_CPPv4N22RenderPassExtraIndexes21RP_SLOT_DEPTH_STENCILE"]], "renderpassextraindexes::rp_subpass_external_end (c++ enumerator)": [[39, "_CPPv4N22RenderPassExtraIndexes23RP_SUBPASS_EXTERNAL_ENDE"], [52, "_CPPv4N22RenderPassExtraIndexes23RP_SUBPASS_EXTERNAL_ENDE"]], "renderpasstarget (c++ struct)": [[39, "_CPPv416RenderPassTarget"]], "renderpasstarget::clearvalue (c++ member)": [[39, "_CPPv4N16RenderPassTarget10clearValueE"]], "renderpasstarget::resource (c++ member)": [[39, "_CPPv4N16RenderPassTarget8resourceE"]], "renderpasstargetaction (c++ enum)": [[39, "_CPPv422RenderPassTargetAction"], [52, "_CPPv422RenderPassTargetAction"]], "renderpasstargetaction::rp_ta_load_clear (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction16RP_TA_LOAD_CLEARE"], [52, "_CPPv4N22RenderPassTargetAction16RP_TA_LOAD_CLEARE"]], "renderpasstargetaction::rp_ta_load_mask (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction15RP_TA_LOAD_MASKE"], [52, "_CPPv4N22RenderPassTargetAction15RP_TA_LOAD_MASKE"]], "renderpasstargetaction::rp_ta_load_no_care (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction18RP_TA_LOAD_NO_CAREE"], [52, "_CPPv4N22RenderPassTargetAction18RP_TA_LOAD_NO_CAREE"]], "renderpasstargetaction::rp_ta_load_read (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction15RP_TA_LOAD_READE"], [52, "_CPPv4N22RenderPassTargetAction15RP_TA_LOAD_READE"]], "renderpasstargetaction::rp_ta_none (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction10RP_TA_NONEE"], [52, "_CPPv4N22RenderPassTargetAction10RP_TA_NONEE"]], "renderpasstargetaction::rp_ta_store_mask (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction16RP_TA_STORE_MASKE"], [52, "_CPPv4N22RenderPassTargetAction16RP_TA_STORE_MASKE"]], "renderpasstargetaction::rp_ta_store_none (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction16RP_TA_STORE_NONEE"], [52, "_CPPv4N22RenderPassTargetAction16RP_TA_STORE_NONEE"]], "renderpasstargetaction::rp_ta_store_no_care (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction19RP_TA_STORE_NO_CAREE"], [52, "_CPPv4N22RenderPassTargetAction19RP_TA_STORE_NO_CAREE"]], "renderpasstargetaction::rp_ta_store_write (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction17RP_TA_STORE_WRITEE"], [52, "_CPPv4N22RenderPassTargetAction17RP_TA_STORE_WRITEE"]], "renderpasstargetaction::rp_ta_subpass_keep (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_KEEPE"], [52, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_KEEPE"]], "renderpasstargetaction::rp_ta_subpass_mask (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_MASKE"], [52, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_MASKE"]], "renderpasstargetaction::rp_ta_subpass_read (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_READE"], [52, "_CPPv4N22RenderPassTargetAction18RP_TA_SUBPASS_READE"]], "renderpasstargetaction::rp_ta_subpass_resolve (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction21RP_TA_SUBPASS_RESOLVEE"], [52, "_CPPv4N22RenderPassTargetAction21RP_TA_SUBPASS_RESOLVEE"]], "renderpasstargetaction::rp_ta_subpass_write (c++ enumerator)": [[39, "_CPPv4N22RenderPassTargetAction19RP_TA_SUBPASS_WRITEE"], [52, "_CPPv4N22RenderPassTargetAction19RP_TA_SUBPASS_WRITEE"]], "renderpasstargetdesc (c++ struct)": [[39, "_CPPv420RenderPassTargetDesc"]], "renderpasstargetdesc::aliased (c++ member)": [[39, "_CPPv4N20RenderPassTargetDesc7aliasedE"]], "renderpasstargetdesc::templateresource (c++ member)": [[39, "_CPPv4N20RenderPassTargetDesc16templateResourceE"]], "renderpasstargetdesc::texcf (c++ member)": [[39, "_CPPv4N20RenderPassTargetDesc5texcfE"]], "allow_render_pass_target_load (c++ function)": [[39, "_CPPv429allow_render_pass_target_loadv"]], "begin_render_pass (c++ function)": [[39, "_CPPv417begin_render_passP10RenderPassK14RenderPassAreaPK16RenderPassTarget"]], "create_render_pass (c++ function)": [[39, "_CPPv418create_render_passRK14RenderPassDesc"]], "delete_render_pass (c++ function)": [[39, "_CPPv418delete_render_passP10RenderPass"]], "end_render_pass (c++ function)": [[39, "_CPPv415end_render_passv"]], "next_subpass (c++ function)": [[39, "_CPPv412next_subpassv"]], "operator| (c++ function)": [[39, "_CPPv4or22RenderPassTargetAction22RenderPassTargetAction"], [52, "_CPPv4or15ResourceBarrier15ResourceBarrier"], [52, "_CPPv4or22RenderPassTargetAction22RenderPassTargetAction"]], "d3d::clear_render_states (c++ function)": [[40, "_CPPv4N3d3d19clear_render_statesEv"]], "d3d::create_render_state (c++ function)": [[40, "_CPPv4N3d3d19create_render_stateERKN7shaders11RenderStateE"]], "d3d::set_blend_factor (c++ function)": [[40, "_CPPv4N3d3d16set_blend_factorE8E3DCOLOR"]], "d3d::set_depth_bounds (c++ function)": [[40, "_CPPv4N3d3d16set_depth_boundsEff"]], "d3d::set_render_state (c++ function)": [[40, "_CPPv4N3d3d16set_render_stateEN7shaders19DriverRenderStateIdE"]], "d3d::setstencil (c++ function)": [[40, "_CPPv4N3d3d10setstencilE8uint32_t"]], "d3d::setwire (c++ function)": [[40, "_CPPv4N3d3d7setwireEb"]], "shaders (c++ type)": [[40, "_CPPv47shaders"]], "shaders::driverrenderstateid (c++ type)": [[40, "_CPPv4N7shaders19DriverRenderStateIdE"]], "shaders::driverrenderstateiddummy (c++ class)": [[40, "_CPPv4N7shaders24DriverRenderStateIdDummyE"]], "shaders::renderstate (c++ struct)": [[40, "_CPPv4N7shaders11RenderStateE"]], "shaders::renderstate::blendfactors (c++ struct)": [[40, "_CPPv4N7shaders11RenderState12BlendFactorsE"]], "shaders::renderstate::blendfactors::dst (c++ member)": [[40, "_CPPv4N7shaders11RenderState12BlendFactors3dstE"]], "shaders::renderstate::blendfactors::src (c++ member)": [[40, "_CPPv4N7shaders11RenderState12BlendFactors3srcE"]], "shaders::renderstate::blendparams (c++ struct)": [[40, "_CPPv4N7shaders11RenderState11BlendParamsE"]], "shaders::renderstate::blendparams::ablend (c++ member)": [[40, "_CPPv4N7shaders11RenderState11BlendParams6ablendE"]], "shaders::renderstate::blendparams::ablendfactors (c++ member)": [[40, "_CPPv4N7shaders11RenderState11BlendParams13ablendFactorsE"]], "shaders::renderstate::blendparams::blendop (c++ member)": [[40, "_CPPv4N7shaders11RenderState11BlendParams7blendOpE"]], "shaders::renderstate::blendparams::sepablend (c++ member)": [[40, "_CPPv4N7shaders11RenderState11BlendParams9sepablendE"]], "shaders::renderstate::blendparams::sepablendfactors (c++ member)": [[40, "_CPPv4N7shaders11RenderState11BlendParams16sepablendFactorsE"]], "shaders::renderstate::blendparams::sepablendop (c++ member)": [[40, "_CPPv4N7shaders11RenderState11BlendParams11sepablendOpE"]], "shaders::renderstate::numindependentblendparameters (c++ member)": [[40, "_CPPv4N7shaders11RenderState29NumIndependentBlendParametersE"]], "shaders::renderstate::renderstate (c++ function)": [[40, "_CPPv4N7shaders11RenderState11RenderStateEv"]], "shaders::renderstate::blendparams (c++ member)": [[40, "_CPPv4N7shaders11RenderState11blendParamsE"]], "shaders::renderstate::operator!= (c++ function)": [[40, "_CPPv4NK7shaders11RenderStateneERK11RenderState"]], "shaders::renderstate::operator== (c++ function)": [[40, "_CPPv4NK7shaders11RenderStateeqERK11RenderState"]], "shaders::renderstatebits (c++ struct)": [[40, "_CPPv4N7shaders15RenderStateBitsE"]], "shaders::renderstatebits::alphatocoverage (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits15alphaToCoverageE"]], "shaders::renderstatebits::colorwr (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits7colorWrE"]], "shaders::renderstatebits::conservativeraster (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits18conservativeRasterE"]], "shaders::renderstatebits::cull (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits4cullE"]], "shaders::renderstatebits::depthboundsenable (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits17depthBoundsEnableE"]], "shaders::renderstatebits::forcedsamplecount (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits17forcedSampleCountE"]], "shaders::renderstatebits::independentblendenabled (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits23independentBlendEnabledE"]], "shaders::renderstatebits::scissorenabled (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits14scissorEnabledE"]], "shaders::renderstatebits::slopezbias (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits10slopeZBiasE"]], "shaders::renderstatebits::stencil (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits7stencilE"]], "shaders::renderstatebits::stencilref (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits10stencilRefE"]], "shaders::renderstatebits::viewinstancecount (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits17viewInstanceCountE"]], "shaders::renderstatebits::zbias (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits5zBiasE"]], "shaders::renderstatebits::zclip (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits5zClipE"]], "shaders::renderstatebits::zfunc (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits5zFuncE"]], "shaders::renderstatebits::ztest (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits5ztestE"]], "shaders::renderstatebits::zwrite (c++ member)": [[40, "_CPPv4N7shaders15RenderStateBits6zwriteE"]], "shaders::renderstateid (c++ enum)": [[40, "_CPPv4N7shaders13RenderStateIdE"]], "shaders::renderstateid::invalid (c++ enumerator)": [[40, "_CPPv4N7shaders13RenderStateId7InvalidE"]], "depthaccess (c++ enum)": [[41, "_CPPv411DepthAccess"]], "depthaccess::rw (c++ enumerator)": [[41, "_CPPv4N11DepthAccess2RWE"]], "depthaccess::sampledro (c++ enumerator)": [[41, "_CPPv4N11DepthAccess9SampledROE"]], "rendertarget (c++ struct)": [[41, "_CPPv412RenderTarget"]], "rendertarget::layer (c++ member)": [[41, "_CPPv4N12RenderTarget5layerE"]], "rendertarget::mip_level (c++ member)": [[41, "_CPPv4N12RenderTarget9mip_levelE"]], "rendertarget::tex (c++ member)": [[41, "_CPPv4N12RenderTarget3texE"]], "texture (c++ type)": [[41, "_CPPv47Texture"], [54, "_CPPv47Texture"]], "d3d::clear_rt (c++ function)": [[41, "_CPPv4N3d3d8clear_rtERK12RenderTargetRK18ResourceClearValue"]], "d3d::clearview (c++ function)": [[41, "_CPPv4N3d3d9clearviewEi8E3DCOLORf8uint32_t"]], "d3d::copy_from_current_render_target (c++ function)": [[41, "_CPPv4N3d3d31copy_from_current_render_targetEP11BaseTexture"]], "d3d::get_backbuffer_tex (c++ function)": [[41, "_CPPv4N3d3d18get_backbuffer_texEv"]], "d3d::get_render_target (c++ function)": [[41, "_CPPv4N3d3d17get_render_targetER20Driver3dRenderTarget"]], "d3d::get_render_target_size (c++ function)": [[41, "_CPPv4N3d3d22get_render_target_sizeERiRiP11BaseTexture7uint8_t"]], "d3d::get_screen_size (c++ function)": [[41, "_CPPv4N3d3d15get_screen_sizeERiRi"]], "d3d::get_secondary_backbuffer_tex (c++ function)": [[41, "_CPPv4N3d3d28get_secondary_backbuffer_texEv"]], "d3d::get_target_size (c++ function)": [[41, "_CPPv4N3d3d15get_target_sizeERiRi"]], "d3d::set_depth (c++ function)": [[41, "_CPPv4N3d3d9set_depthEP11BaseTexture11DepthAccess"], [41, "_CPPv4N3d3d9set_depthEP11BaseTexturei11DepthAccess"]], "d3d::set_render_target (c++ function)": [[41, "_CPPv4N3d3d17set_render_targetE12RenderTarget11DepthAccessKNSt16initializer_listI12RenderTargetEE"], [41, "_CPPv4N3d3d17set_render_targetE12RenderTarget11DepthAccessN3dag9ConstSpanI12RenderTargetEE"], [41, "_CPPv4N3d3d17set_render_targetEP11BaseTexture7uint8_t"], [41, "_CPPv4N3d3d17set_render_targetEP11BaseTexturei7uint8_t"], [41, "_CPPv4N3d3d17set_render_targetERK20Driver3dRenderTarget"], [41, "_CPPv4N3d3d17set_render_targetEiP11BaseTexture7uint8_t"], [41, "_CPPv4N3d3d17set_render_targetEiP11BaseTexturei7uint8_t"], [41, "_CPPv4N3d3d17set_render_targetEv"]], "d3d::allocate_update_buffer_for_tex (c++ function)": [[42, "_CPPv4N3d3d30allocate_update_buffer_for_texEP11BaseTextureii"]], "d3d::allocate_update_buffer_for_tex_region (c++ function)": [[42, "_CPPv4N3d3d37allocate_update_buffer_for_tex_regionEP11BaseTexturejjjjjjjj"]], "d3d::get_update_buffer_addr_for_write (c++ function)": [[42, "_CPPv4N3d3d32get_update_buffer_addr_for_writeEP15ResUpdateBuffer"]], "d3d::get_update_buffer_pitch (c++ function)": [[42, "_CPPv4N3d3d23get_update_buffer_pitchEP15ResUpdateBuffer"]], "d3d::get_update_buffer_size (c++ function)": [[42, "_CPPv4N3d3d22get_update_buffer_sizeEP15ResUpdateBuffer"]], "d3d::get_update_buffer_slice_pitch (c++ function)": [[42, "_CPPv4N3d3d29get_update_buffer_slice_pitchEP15ResUpdateBuffer"]], "d3d::release_update_buffer (c++ function)": [[42, "_CPPv4N3d3d21release_update_bufferERP15ResUpdateBuffer"]], "d3d::update_texture_and_release_update_buffer (c++ function)": [[42, "_CPPv4N3d3d40update_texture_and_release_update_bufferERP15ResUpdateBuffer"]], "resourceclearvalue (c++ union)": [[43, "_CPPv418ResourceClearValue"]], "resourceclearvalue::[anonymous] (c++ member)": [[43, "_CPPv4N18ResourceClearValueUt2_28E"], [43, "_CPPv4N18ResourceClearValueUt2_30E"], [43, "_CPPv4N18ResourceClearValueUt2_32E"], [43, "_CPPv4N18ResourceClearValueUt2_34E"]], "resourceclearvalue::asdepth (c++ member)": [[43, "_CPPv4N18ResourceClearValue7asDepthE"]], "resourceclearvalue::asfloat (c++ member)": [[43, "_CPPv4N18ResourceClearValue7asFloatE"]], "resourceclearvalue::asint (c++ member)": [[43, "_CPPv4N18ResourceClearValue5asIntE"]], "resourceclearvalue::asstencil (c++ member)": [[43, "_CPPv4N18ResourceClearValue9asStencilE"]], "resourceclearvalue::asuint (c++ member)": [[43, "_CPPv4N18ResourceClearValue6asUintE"]], "make_clear_value (c++ function)": [[43, "_CPPv416make_clear_value7int32_t7int32_t7int32_t7int32_t"], [43, "_CPPv416make_clear_value8uint32_t8uint32_t8uint32_t8uint32_t"], [43, "_CPPv416make_clear_valuef7uint8_t"], [43, "_CPPv416make_clear_valueffff"]], "d3d::clear_rwbuff (c++ function)": [[44, "_CPPv4N3d3d12clear_rwbuffEP7SbufferAL4E_Kf"]], "d3d::clear_rwbufi (c++ function)": [[44, "_CPPv4N3d3d12clear_rwbufiEP7SbufferAL4E_K8uint32_t"]], "d3d::clear_rwtexf (c++ function)": [[44, "_CPPv4N3d3d12clear_rwtexfEP11BaseTextureAL4E_Kf8uint32_t8uint32_t"]], "d3d::clear_rwtexi (c++ function)": [[44, "_CPPv4N3d3d12clear_rwtexiEP11BaseTextureAL4E_K8uint32_t8uint32_t8uint32_t"]], "d3d::set_rwtex (c++ function)": [[44, "_CPPv4N3d3d9set_rwtexE8uint32_t8uint32_tP11BaseTexture8uint32_t8uint32_tb"]], "cmp (c macro)": [[45, "c.CMP"]], "equ (c macro)": [[45, "c.EQU"]], "for_each_field (c macro)": [[45, "c.FOR_EACH_FIELD"]], "[anonymous]::texmipmap_default (c++ enumerator)": [[45, "_CPPv4NUt2_4717TEXMIPMAP_DEFAULTE"]], "[anonymous]::texmipmap_linear (c++ enumerator)": [[45, "_CPPv4NUt2_4716TEXMIPMAP_LINEARE"]], "[anonymous]::texmipmap_none (c++ enumerator)": [[45, "_CPPv4NUt2_4714TEXMIPMAP_NONEE"]], "[anonymous]::texmipmap_point (c++ enumerator)": [[45, "_CPPv4NUt2_4715TEXMIPMAP_POINTE"]], "d3d::addressmode (c++ enum)": [[45, "_CPPv4N3d3d11AddressModeE"]], "d3d::addressmode::border (c++ enumerator)": [[45, "_CPPv4N3d3d11AddressMode6BorderE"]], "d3d::addressmode::clamp (c++ enumerator)": [[45, "_CPPv4N3d3d11AddressMode5ClampE"]], "d3d::addressmode::mirror (c++ enumerator)": [[45, "_CPPv4N3d3d11AddressMode6MirrorE"]], "d3d::addressmode::mirroronce (c++ enumerator)": [[45, "_CPPv4N3d3d11AddressMode10MirrorOnceE"]], "d3d::addressmode::wrap (c++ enumerator)": [[45, "_CPPv4N3d3d11AddressMode4WrapE"]], "d3d::bordercolor (c++ struct)": [[45, "_CPPv4N3d3d11BorderColorE"]], "d3d::bordercolor::bordercolor (c++ function)": [[45, "_CPPv4N3d3d11BorderColor11BorderColorE5Color"]], "d3d::bordercolor::color (c++ enum)": [[45, "_CPPv4N3d3d11BorderColor5ColorE"]], "d3d::bordercolor::color::opaqueblack (c++ enumerator)": [[45, "_CPPv4N3d3d11BorderColor5Color11OpaqueBlackE"]], "d3d::bordercolor::color::opaquewhite (c++ enumerator)": [[45, "_CPPv4N3d3d11BorderColor5Color11OpaqueWhiteE"]], "d3d::bordercolor::color::transparentblack (c++ enumerator)": [[45, "_CPPv4N3d3d11BorderColor5Color16TransparentBlackE"]], "d3d::bordercolor::underlyingt (c++ type)": [[45, "_CPPv4N3d3d11BorderColor11UnderlyingTE"]], "d3d::bordercolor::color (c++ member)": [[45, "_CPPv4N3d3d11BorderColor5colorE"]], "d3d::bordercolor::operator e3dcolor (c++ function)": [[45, "_CPPv4NK3d3d11BorderColorcv8E3DCOLOREv"]], "d3d::bordercolor::operator underlyingt (c++ function)": [[45, "_CPPv4NK3d3d11BorderColorcv11UnderlyingTEv"]], "d3d::filtermode (c++ enum)": [[45, "_CPPv4N3d3d10FilterModeE"]], "d3d::filtermode::best (c++ enumerator)": [[45, "_CPPv4N3d3d10FilterMode4BestE"]], "d3d::filtermode::compare (c++ enumerator)": [[45, "_CPPv4N3d3d10FilterMode7CompareE"]], "d3d::filtermode::default (c++ enumerator)": [[45, "_CPPv4N3d3d10FilterMode7DefaultE"]], "d3d::filtermode::disabled (c++ enumerator)": [[45, "_CPPv4N3d3d10FilterMode8DisabledE"]], "d3d::filtermode::linear (c++ enumerator)": [[45, "_CPPv4N3d3d10FilterMode6LinearE"]], "d3d::filtermode::point (c++ enumerator)": [[45, "_CPPv4N3d3d10FilterMode5PointE"]], "d3d::mipmapmode (c++ enum)": [[45, "_CPPv4N3d3d10MipMapModeE"]], "d3d::mipmapmode::default (c++ enumerator)": [[45, "_CPPv4N3d3d10MipMapMode7DefaultE"]], "d3d::mipmapmode::disabled (c++ enumerator)": [[45, "_CPPv4N3d3d10MipMapMode8DisabledE"]], "d3d::mipmapmode::linear (c++ enumerator)": [[45, "_CPPv4N3d3d10MipMapMode6LinearE"]], "d3d::mipmapmode::point (c++ enumerator)": [[45, "_CPPv4N3d3d10MipMapMode5PointE"]], "d3d::samplerinfo (c++ struct)": [[45, "_CPPv4N3d3d11SamplerInfoE"]], "d3d::samplerinfo::address_mode_u (c++ member)": [[45, "_CPPv4N3d3d11SamplerInfo14address_mode_uE"]], "d3d::samplerinfo::address_mode_v (c++ member)": [[45, "_CPPv4N3d3d11SamplerInfo14address_mode_vE"]], "d3d::samplerinfo::address_mode_w (c++ member)": [[45, "_CPPv4N3d3d11SamplerInfo14address_mode_wE"]], "d3d::samplerinfo::anisotropic_max (c++ member)": [[45, "_CPPv4N3d3d11SamplerInfo15anisotropic_maxE"]], "d3d::samplerinfo::border_color (c++ member)": [[45, "_CPPv4N3d3d11SamplerInfo12border_colorE"]], "d3d::samplerinfo::filter_mode (c++ member)": [[45, "_CPPv4N3d3d11SamplerInfo11filter_modeE"]], "d3d::samplerinfo::mip_map_bias (c++ member)": [[45, "_CPPv4N3d3d11SamplerInfo12mip_map_biasE"]], "d3d::samplerinfo::mip_map_mode (c++ member)": [[45, "_CPPv4N3d3d11SamplerInfo12mip_map_modeE"]], "d3d::samplerinfo::operator!= (c++ function)": [[45, "_CPPv4NK3d3d11SamplerInfoneERK11SamplerInfo"]], "d3d::samplerinfo::operator< (c++ function)": [[45, "_CPPv4NK3d3d11SamplerInfoltERK11SamplerInfo"]], "d3d::samplerinfo::operator== (c++ function)": [[45, "_CPPv4NK3d3d11SamplerInfoeqERK11SamplerInfo"]], "d3d::request_sampler (c++ function)": [[45, "_CPPv4N3d3d15request_samplerERK11SamplerInfo"]], "d3d::set_sampler (c++ function)": [[45, "_CPPv4N3d3d11set_samplerEjj13SamplerHandle"]], "d3d::create_pixel_shader (c++ function)": [[46, "_CPPv4N3d3d19create_pixel_shaderEPK8uint32_t"]], "d3d::create_program (c++ function)": [[46, "_CPPv4N3d3d14create_programE5VPROG7FSHADER5VDECLPjj"], [46, "_CPPv4N3d3d14create_programEPK8uint32_tPK8uint32_t5VDECLPjj"]], "d3d::create_program_cs (c++ function)": [[46, "_CPPv4N3d3d17create_program_csEPK8uint32_t11CSPreloaded"]], "d3d::create_vertex_shader (c++ function)": [[46, "_CPPv4N3d3d20create_vertex_shaderEPK8uint32_t"]], "d3d::delete_pixel_shader (c++ function)": [[46, "_CPPv4N3d3d19delete_pixel_shaderE7FSHADER"]], "d3d::delete_program (c++ function)": [[46, "_CPPv4N3d3d14delete_programE7PROGRAM"]], "d3d::delete_vertex_shader (c++ function)": [[46, "_CPPv4N3d3d20delete_vertex_shaderE5VPROG"]], "d3d::get_debug_program (c++ function)": [[46, "_CPPv4N3d3d17get_debug_programEv"]], "d3d::set_program (c++ function)": [[46, "_CPPv4N3d3d11set_programE7PROGRAM"]], "d3d::release_cb0_data (c++ function)": [[47, "_CPPv4N3d3d16release_cb0_dataEj"]], "d3d::set_cb0_data (c++ function)": [[47, "_CPPv4N3d3d12set_cb0_dataEjPKfj"]], "d3d::set_const (c++ function)": [[47, "_CPPv4N3d3d9set_constEjjPKvj"]], "d3d::set_const_buffer (c++ function)": [[47, "_CPPv4N3d3d16set_const_bufferEjjP7Sbuffer8uint32_t8uint32_t"], [47, "_CPPv4N3d3d16set_const_bufferEjjPKfj"]], "d3d::set_cs_const (c++ function)": [[47, "_CPPv4N3d3d12set_cs_constEjPKvj"]], "d3d::set_cs_constbuffer_size (c++ function)": [[47, "_CPPv4N3d3d23set_cs_constbuffer_sizeEi"]], "d3d::set_immediate_const (c++ function)": [[47, "_CPPv4N3d3d19set_immediate_constEjPK8uint32_tj"]], "d3d::set_ps_const (c++ function)": [[47, "_CPPv4N3d3d12set_ps_constEjPKvj"]], "d3d::set_ps_const1 (c++ function)": [[47, "_CPPv4N3d3d13set_ps_const1Ejffff"]], "d3d::set_vs_const (c++ function)": [[47, "_CPPv4N3d3d12set_vs_constEjPKvj"]], "d3d::set_vs_const1 (c++ function)": [[47, "_CPPv4N3d3d13set_vs_const1Ejffff"]], "d3d::set_vs_constbuffer_size (c++ function)": [[47, "_CPPv4N3d3d23set_vs_constbuffer_sizeEi"]], "texturetilinginfo (c++ struct)": [[48, "_CPPv417TextureTilingInfo"]], "texturetilinginfo::firstpackedtileindex (c++ member)": [[48, "_CPPv4N17TextureTilingInfo20firstPackedTileIndexE"]], "texturetilinginfo::numpackedmips (c++ member)": [[48, "_CPPv4N17TextureTilingInfo13numPackedMipsE"]], "texturetilinginfo::numtilesneededforpackedmips (c++ member)": [[48, "_CPPv4N17TextureTilingInfo27numTilesNeededForPackedMipsE"]], "texturetilinginfo::numunpackedmips (c++ member)": [[48, "_CPPv4N17TextureTilingInfo15numUnpackedMipsE"]], "texturetilinginfo::subresourcedepthintiles (c++ member)": [[48, "_CPPv4N17TextureTilingInfo23subresourceDepthInTilesE"]], "texturetilinginfo::subresourceheightintiles (c++ member)": [[48, "_CPPv4N17TextureTilingInfo24subresourceHeightInTilesE"]], "texturetilinginfo::subresourcestarttileindex (c++ member)": [[48, "_CPPv4N17TextureTilingInfo25subresourceStartTileIndexE"]], "texturetilinginfo::subresourcewidthintiles (c++ member)": [[48, "_CPPv4N17TextureTilingInfo23subresourceWidthInTilesE"]], "texturetilinginfo::tiledepthinpixels (c++ member)": [[48, "_CPPv4N17TextureTilingInfo17tileDepthInPixelsE"]], "texturetilinginfo::tileheightinpixels (c++ member)": [[48, "_CPPv4N17TextureTilingInfo18tileHeightInPixelsE"]], "texturetilinginfo::tilememorysize (c++ member)": [[48, "_CPPv4N17TextureTilingInfo14tileMemorySizeE"]], "texturetilinginfo::tilewidthinpixels (c++ member)": [[48, "_CPPv4N17TextureTilingInfo17tileWidthInPixelsE"]], "texturetilinginfo::totalnumberoftiles (c++ member)": [[48, "_CPPv4N17TextureTilingInfo18totalNumberOfTilesE"]], "tilemapping (c++ struct)": [[48, "_CPPv411TileMapping"]], "tilemapping::heaptileindex (c++ member)": [[48, "_CPPv4N11TileMapping13heapTileIndexE"]], "tilemapping::heaptilespan (c++ member)": [[48, "_CPPv4N11TileMapping12heapTileSpanE"]], "tilemapping::texsubresource (c++ member)": [[48, "_CPPv4N11TileMapping14texSubresourceE"]], "tilemapping::texx (c++ member)": [[48, "_CPPv4N11TileMapping4texXE"]], "tilemapping::texy (c++ member)": [[48, "_CPPv4N11TileMapping4texYE"]], "tilemapping::texz (c++ member)": [[48, "_CPPv4N11TileMapping4texZE"]], "d3d::get_texture_tiling_info (c++ function)": [[48, "_CPPv4N3d3d23get_texture_tiling_infoEP11BaseTexture6size_t"]], "d3d::map_tile_to_resource (c++ function)": [[48, "_CPPv4N3d3d20map_tile_to_resourceEP11BaseTextureP12ResourceHeapPK11TileMapping6size_t"]], "d3d::set_variable_rate_shading (c++ function)": [[49, "_CPPv4N3d3d25set_variable_rate_shadingEjj27VariableRateShadingCombiner27VariableRateShadingCombiner"]], "d3d::set_variable_rate_shading_texture (c++ function)": [[49, "_CPPv4N3d3d33set_variable_rate_shading_textureEP11BaseTexture"]], "ibuffer (c++ type)": [[50, "_CPPv47Ibuffer"]], "vbuffer (c++ type)": [[50, "_CPPv47Vbuffer"]], "d3d::create_ib (c++ function)": [[50, "_CPPv4N3d3d9create_ibEiiPKc"]], "d3d::create_vb (c++ function)": [[50, "_CPPv4N3d3d9create_vbEiiPKc"]], "d3d::create_vdecl (c++ function)": [[50, "_CPPv4N3d3d12create_vdeclEP7VSDTYPE"]], "d3d::delete_vdecl (c++ function)": [[50, "_CPPv4N3d3d12delete_vdeclE5VDECL"]], "d3d::setind (c++ function)": [[50, "_CPPv4N3d3d6setindEP7Sbuffer"]], "d3d::setvdecl (c++ function)": [[50, "_CPPv4N3d3d8setvdeclE5VDECL"]], "d3d::setvsrc (c++ function)": [[50, "_CPPv4N3d3d7setvsrcEiP7Sbufferi"]], "d3d::setvsrc_ex (c++ function)": [[50, "_CPPv4N3d3d10setvsrc_exEiP7Sbufferii"]], "d3d::getview (c++ function)": [[51, "_CPPv4N3d3d7getviewERiRiRiRiRfRf"]], "d3d::setscissor (c++ function)": [[51, "_CPPv4N3d3d10setscissorEiiii"]], "d3d::setscissors (c++ function)": [[51, "_CPPv4N3d3d11setscissorsEN3dag9ConstSpanI11ScissorRectEE"]], "d3d::setview (c++ function)": [[51, "_CPPv4N3d3d7setviewEiiiiff"]], "d3d::setviews (c++ function)": [[51, "_CPPv4N3d3d8setviewsEN3dag9ConstSpanI8ViewportEE"]], "bad_fshader (c++ member)": [[52, "_CPPv411BAD_FSHADER"]], "bad_gpufencehandle (c++ member)": [[52, "_CPPv418BAD_GPUFENCEHANDLE"]], "bad_palid (c++ member)": [[52, "_CPPv49BAD_PALID"]], "bad_program (c++ member)": [[52, "_CPPv411BAD_PROGRAM"]], "bad_vdecl (c++ member)": [[52, "_CPPv49BAD_VDECL"]], "bad_vprog (c++ member)": [[52, "_CPPv49BAD_VPROG"]], "blendop (c++ enum)": [[52, "_CPPv47BLENDOP"]], "blendop::blendop_add (c++ enumerator)": [[52, "_CPPv4N7BLENDOP11BLENDOP_ADDE"]], "blendop::blendop_max (c++ enumerator)": [[52, "_CPPv4N7BLENDOP11BLENDOP_MAXE"]], "blendop::blendop_min (c++ enumerator)": [[52, "_CPPv4N7BLENDOP11BLENDOP_MINE"]], "blendop::blendop_revsubtract (c++ enumerator)": [[52, "_CPPv4N7BLENDOP19BLENDOP_REVSUBTRACTE"]], "blendop::blendop_subtract (c++ enumerator)": [[52, "_CPPv4N7BLENDOP16BLENDOP_SUBTRACTE"]], "blend_factor (c++ enum)": [[52, "_CPPv412BLEND_FACTOR"]], "blend_factor::blend_blendfactor (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR17BLEND_BLENDFACTORE"]], "blend_factor::blend_bothinvsrcalpha (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR21BLEND_BOTHINVSRCALPHAE"]], "blend_factor::blend_destalpha (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR15BLEND_DESTALPHAE"]], "blend_factor::blend_destcolor (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR15BLEND_DESTCOLORE"]], "blend_factor::blend_invblendfactor (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR20BLEND_INVBLENDFACTORE"]], "blend_factor::blend_invdestalpha (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR18BLEND_INVDESTALPHAE"]], "blend_factor::blend_invdestcolor (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR18BLEND_INVDESTCOLORE"]], "blend_factor::blend_invsrcalpha (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR17BLEND_INVSRCALPHAE"]], "blend_factor::blend_invsrccolor (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR17BLEND_INVSRCCOLORE"]], "blend_factor::blend_one (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR9BLEND_ONEE"]], "blend_factor::blend_srcalpha (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR14BLEND_SRCALPHAE"]], "blend_factor::blend_srcalphasat (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR17BLEND_SRCALPHASATE"]], "blend_factor::blend_srccolor (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR14BLEND_SRCCOLORE"]], "blend_factor::blend_zero (c++ enumerator)": [[52, "_CPPv4N12BLEND_FACTOR10BLEND_ZEROE"]], "cmpf (c++ enum)": [[52, "_CPPv44CMPF"]], "cmpf::cmpf_always (c++ enumerator)": [[52, "_CPPv4N4CMPF11CMPF_ALWAYSE"]], "cmpf::cmpf_equal (c++ enumerator)": [[52, "_CPPv4N4CMPF10CMPF_EQUALE"]], "cmpf::cmpf_greater (c++ enumerator)": [[52, "_CPPv4N4CMPF12CMPF_GREATERE"]], "cmpf::cmpf_greaterequal (c++ enumerator)": [[52, "_CPPv4N4CMPF17CMPF_GREATEREQUALE"]], "cmpf::cmpf_less (c++ enumerator)": [[52, "_CPPv4N4CMPF9CMPF_LESSE"]], "cmpf::cmpf_lessequal (c++ enumerator)": [[52, "_CPPv4N4CMPF14CMPF_LESSEQUALE"]], "cmpf::cmpf_never (c++ enumerator)": [[52, "_CPPv4N4CMPF10CMPF_NEVERE"]], "cmpf::cmpf_notequal (c++ enumerator)": [[52, "_CPPv4N4CMPF13CMPF_NOTEQUALE"]], "cspreloaded (c++ enum)": [[52, "_CPPv411CSPreloaded"]], "cspreloaded::no (c++ enumerator)": [[52, "_CPPv4N11CSPreloaded2NoE"]], "cspreloaded::yes (c++ enumerator)": [[52, "_CPPv4N11CSPreloaded3YesE"]], "cull_type (c++ enum)": [[52, "_CPPv49CULL_TYPE"]], "cull_type::cull_ccw (c++ enumerator)": [[52, "_CPPv4N9CULL_TYPE8CULL_CCWE"]], "cull_type::cull_cw (c++ enumerator)": [[52, "_CPPv4N9CULL_TYPE7CULL_CWE"]], "cull_type::cull_none (c++ enumerator)": [[52, "_CPPv4N9CULL_TYPE9CULL_NONEE"]], "depthresolvemode (c++ enum)": [[52, "_CPPv416DepthResolveMode"]], "depthresolvemode::depth_resolve_mode_average (c++ enumerator)": [[52, "_CPPv4N16DepthResolveMode26DEPTH_RESOLVE_MODE_AVERAGEE"]], "depthresolvemode::depth_resolve_mode_max (c++ enumerator)": [[52, "_CPPv4N16DepthResolveMode22DEPTH_RESOLVE_MODE_MAXE"]], "depthresolvemode::depth_resolve_mode_min (c++ enumerator)": [[52, "_CPPv4N16DepthResolveMode22DEPTH_RESOLVE_MODE_MINE"]], "depthresolvemode::depth_resolve_mode_none (c++ enumerator)": [[52, "_CPPv4N16DepthResolveMode23DEPTH_RESOLVE_MODE_NONEE"]], "depthresolvemode::depth_resolve_mode_sample_zero (c++ enumerator)": [[52, "_CPPv4N16DepthResolveMode30DEPTH_RESOLVE_MODE_SAMPLE_ZEROE"]], "devicedrivercapabilities (c++ type)": [[52, "_CPPv424DeviceDriverCapabilities"]], "devicedrivercapabilitiesandroid (c++ struct)": [[52, "_CPPv431DeviceDriverCapabilitiesAndroid"]], "devicedrivercapabilitiesandroid::castingfullytypedformatssupported (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid33castingFullyTypedFormatsSupportedE"]], "devicedrivercapabilitiesandroid::hasatiapi (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid9hasATIApiE"]], "devicedrivercapabilitiesandroid::hasacceleratedviewinstancing (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid28hasAcceleratedViewInstancingE"]], "devicedrivercapabilitiesandroid::hasaliasedtextures (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid18hasAliasedTexturesE"]], "devicedrivercapabilitiesandroid::hasalphacoverage (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid16hasAlphaCoverageE"]], "devicedrivercapabilitiesandroid::hasasynccompute (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid15hasAsyncComputeE"]], "devicedrivercapabilitiesandroid::hasasynccopy (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid12hasAsyncCopyE"]], "devicedrivercapabilitiesandroid::hasbasevertexsupport (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid20hasBaseVertexSupportE"]], "devicedrivercapabilitiesandroid::hasbasicviewinstancing (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid22hasBasicViewInstancingE"]], "devicedrivercapabilitiesandroid::hasbufferoverlapcopy (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid20hasBufferOverlapCopyE"]], "devicedrivercapabilitiesandroid::hasbufferoverlapregionscopy (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid27hasBufferOverlapRegionsCopyE"]], "devicedrivercapabilitiesandroid::hascomparesampler (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid17hasCompareSamplerE"]], "devicedrivercapabilitiesandroid::hasconstbufferoffset (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid20hasConstBufferOffsetE"]], "devicedrivercapabilitiesandroid::hasdlss (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid7hasDLSSE"]], "devicedrivercapabilitiesandroid::hasdepthreadonly (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid16hasDepthReadOnlyE"]], "devicedrivercapabilitiesandroid::hasdrawid (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid9hasDrawIDE"]], "devicedrivercapabilitiesandroid::hasforcedsamplercount (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid21hasForcedSamplerCountE"]], "devicedrivercapabilitiesandroid::hasgather4 (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid10hasGather4E"]], "devicedrivercapabilitiesandroid::hasindirectsupport (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid18hasIndirectSupportE"]], "devicedrivercapabilitiesandroid::hasmeshshader (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid13hasMeshShaderE"]], "devicedrivercapabilitiesandroid::hasnvapi (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid8hasNVApiE"]], "devicedrivercapabilitiesandroid::hasnativerenderpasssubpasses (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid28hasNativeRenderPassSubPassesE"]], "devicedrivercapabilitiesandroid::hasnooverwriteonshaderresourcebuffers (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid37hasNoOverwriteOnShaderResourceBuffersE"]], "devicedrivercapabilitiesandroid::hasocclusionquery (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid17hasOcclusionQueryE"]], "devicedrivercapabilitiesandroid::hasoptimizedviewinstancing (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid26hasOptimizedViewInstancingE"]], "devicedrivercapabilitiesandroid::hasreadmultisampleddepth (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid24hasReadMultisampledDepthE"]], "devicedrivercapabilitiesandroid::hasresourcecopyconversion (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid25hasResourceCopyConversionE"]], "devicedrivercapabilitiesandroid::hasshader64bitintegerresources (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid30hasShader64BitIntegerResourcesE"]], "devicedrivercapabilitiesandroid::hasstereoexpansion (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid18hasStereoExpansionE"]], "devicedrivercapabilitiesandroid::hasstructuredbuffers (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid20hasStructuredBuffersE"]], "devicedrivercapabilitiesandroid::hastiled2dresources (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid19hasTiled2DResourcesE"]], "devicedrivercapabilitiesandroid::hastiled3dresources (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid19hasTiled3DResourcesE"]], "devicedrivercapabilitiesandroid::hastiledmemoryaliasing (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid22hasTiledMemoryAliasingE"]], "devicedrivercapabilitiesandroid::hastiledsaferesourcesaccess (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid27hasTiledSafeResourcesAccessE"]], "devicedrivercapabilitiesandroid::hasuavoneverystage (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid18hasUAVOnEveryStageE"]], "devicedrivercapabilitiesandroid::hasvariablerateshading (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid22hasVariableRateShadingE"]], "devicedrivercapabilitiesandroid::hasvariablerateshadingby4 (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid25hasVariableRateShadingBy4E"]], "devicedrivercapabilitiesandroid::hasvariablerateshadingcombiners (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid31hasVariableRateShadingCombinersE"]], "devicedrivercapabilitiesandroid::hasvariablerateshadingshaderoutput (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid34hasVariableRateShadingShaderOutputE"]], "devicedrivercapabilitiesandroid::hasvariablerateshadingtexture (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid29hasVariableRateShadingTextureE"]], "devicedrivercapabilitiesandroid::hasvolmipmap (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid12hasVolMipMapE"]], "devicedrivercapabilitiesandroid::hasxess (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesAndroid7hasXESSE"]], "devicedrivercapabilitiesbase (c++ struct)": [[52, "_CPPv428DeviceDriverCapabilitiesBase"]], "devicedrivercapabilitiesbase::castingfullytypedformatssupported (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase33castingFullyTypedFormatsSupportedE"]], "devicedrivercapabilitiesbase::hasatiapi (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase9hasATIApiE"]], "devicedrivercapabilitiesbase::hasacceleratedviewinstancing (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase28hasAcceleratedViewInstancingE"]], "devicedrivercapabilitiesbase::hasaliasedtextures (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase18hasAliasedTexturesE"]], "devicedrivercapabilitiesbase::hasalphacoverage (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase16hasAlphaCoverageE"]], "devicedrivercapabilitiesbase::hasanisotropicfilter (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase20hasAnisotropicFilterE"]], "devicedrivercapabilitiesbase::hasasynccompute (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase15hasAsyncComputeE"]], "devicedrivercapabilitiesbase::hasasynccopy (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase12hasAsyncCopyE"]], "devicedrivercapabilitiesbase::hasbasevertexsupport (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase20hasBaseVertexSupportE"]], "devicedrivercapabilitiesbase::hasbasicviewinstancing (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase22hasBasicViewInstancingE"]], "devicedrivercapabilitiesbase::hasbindless (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase11hasBindlessE"]], "devicedrivercapabilitiesbase::hasbufferoverlapcopy (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase20hasBufferOverlapCopyE"]], "devicedrivercapabilitiesbase::hasbufferoverlapregionscopy (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase27hasBufferOverlapRegionsCopyE"]], "devicedrivercapabilitiesbase::hascomparesampler (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase17hasCompareSamplerE"]], "devicedrivercapabilitiesbase::hasconditionalrender (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase20hasConditionalRenderE"]], "devicedrivercapabilitiesbase::hasconservativerassterization (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase29hasConservativeRassterizationE"]], "devicedrivercapabilitiesbase::hasconstbufferoffset (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase20hasConstBufferOffsetE"]], "devicedrivercapabilitiesbase::hasdlss (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase7hasDLSSE"]], "devicedrivercapabilitiesbase::hasdepthboundstest (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase18hasDepthBoundsTestE"]], "devicedrivercapabilitiesbase::hasdepthreadonly (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase16hasDepthReadOnlyE"]], "devicedrivercapabilitiesbase::hasdrawid (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase9hasDrawIDE"]], "devicedrivercapabilitiesbase::hasforcedsamplercount (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase21hasForcedSamplerCountE"]], "devicedrivercapabilitiesbase::hasgather4 (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase10hasGather4E"]], "devicedrivercapabilitiesbase::hasgeometryindexinrayaccelerationstructure (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase42hasGeometryIndexInRayAccelerationStructureE"]], "devicedrivercapabilitiesbase::hasindirectraydispatch (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase22hasIndirectRayDispatchE"]], "devicedrivercapabilitiesbase::hasindirectsupport (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase18hasIndirectSupportE"]], "devicedrivercapabilitiesbase::hasinstanceid (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase13hasInstanceIDE"]], "devicedrivercapabilitiesbase::haslazymemory (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase13hasLazyMemoryE"]], "devicedrivercapabilitiesbase::hasmeshshader (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase13hasMeshShaderE"]], "devicedrivercapabilitiesbase::hasnvapi (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase8hasNVApiE"]], "devicedrivercapabilitiesbase::hasnativeraytracepipelineexpansion (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase34hasNativeRayTracePipelineExpansionE"]], "devicedrivercapabilitiesbase::hasnativerenderpasssubpasses (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase28hasNativeRenderPassSubPassesE"]], "devicedrivercapabilitiesbase::hasnooverwriteonshaderresourcebuffers (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase37hasNoOverwriteOnShaderResourceBuffersE"]], "devicedrivercapabilitiesbase::hasocclusionquery (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase17hasOcclusionQueryE"]], "devicedrivercapabilitiesbase::hasoptimizedviewinstancing (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase26hasOptimizedViewInstancingE"]], "devicedrivercapabilitiesbase::hasquadtessellation (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase19hasQuadTessellationE"]], "devicedrivercapabilitiesbase::hasrayaccelerationstructure (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase27hasRayAccelerationStructureE"]], "devicedrivercapabilitiesbase::hasraydispatch (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase14hasRayDispatchE"]], "devicedrivercapabilitiesbase::hasrayquery (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase11hasRayQueryE"]], "devicedrivercapabilitiesbase::hasreadmultisampleddepth (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase24hasReadMultisampledDepthE"]], "devicedrivercapabilitiesbase::hasrenderpassdepthresolve (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase25hasRenderPassDepthResolveE"]], "devicedrivercapabilitiesbase::hasresourcecopyconversion (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase25hasResourceCopyConversionE"]], "devicedrivercapabilitiesbase::hasresourceheaps (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase16hasResourceHeapsE"]], "devicedrivercapabilitiesbase::hasshader64bitintegerresources (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase30hasShader64BitIntegerResourcesE"]], "devicedrivercapabilitiesbase::hasshaderfloat16support (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase23hasShaderFloat16SupportE"]], "devicedrivercapabilitiesbase::hasskipprimitivetypeinraytracingshaders (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase39hasSkipPrimitiveTypeInRayTracingShadersE"]], "devicedrivercapabilitiesbase::hasstereoexpansion (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase18hasStereoExpansionE"]], "devicedrivercapabilitiesbase::hasstructuredbuffers (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase20hasStructuredBuffersE"]], "devicedrivercapabilitiesbase::hastilebasedarchitecture (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase24hasTileBasedArchitectureE"]], "devicedrivercapabilitiesbase::hastiled2dresources (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase19hasTiled2DResourcesE"]], "devicedrivercapabilitiesbase::hastiled3dresources (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase19hasTiled3DResourcesE"]], "devicedrivercapabilitiesbase::hastiledmemoryaliasing (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase22hasTiledMemoryAliasingE"]], "devicedrivercapabilitiesbase::hastiledsaferesourcesaccess (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase27hasTiledSafeResourcesAccessE"]], "devicedrivercapabilitiesbase::hasuavoneverystage (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase18hasUAVOnEveryStageE"]], "devicedrivercapabilitiesbase::hasuavonlyforcedsamplecount (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase27hasUAVOnlyForcedSampleCountE"]], "devicedrivercapabilitiesbase::hasvariablerateshading (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase22hasVariableRateShadingE"]], "devicedrivercapabilitiesbase::hasvariablerateshadingby4 (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase25hasVariableRateShadingBy4E"]], "devicedrivercapabilitiesbase::hasvariablerateshadingcombiners (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase31hasVariableRateShadingCombinersE"]], "devicedrivercapabilitiesbase::hasvariablerateshadingshaderoutput (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase34hasVariableRateShadingShaderOutputE"]], "devicedrivercapabilitiesbase::hasvariablerateshadingtexture (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase29hasVariableRateShadingTextureE"]], "devicedrivercapabilitiesbase::hasvolmipmap (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase12hasVolMipMapE"]], "devicedrivercapabilitiesbase::haswaveops (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase10hasWaveOpsE"]], "devicedrivercapabilitiesbase::haswellsupportedindirect (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase24hasWellSupportedIndirectE"]], "devicedrivercapabilitiesbase::hasxess (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesBase7hasXESSE"]], "devicedrivercapabilitiesios (c++ struct)": [[52, "_CPPv427DeviceDriverCapabilitiesIOS"]], "devicedrivercapabilitiesios::castingfullytypedformatssupported (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS33castingFullyTypedFormatsSupportedE"]], "devicedrivercapabilitiesios::hasatiapi (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS9hasATIApiE"]], "devicedrivercapabilitiesios::hasacceleratedviewinstancing (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS28hasAcceleratedViewInstancingE"]], "devicedrivercapabilitiesios::hasaliasedtextures (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS18hasAliasedTexturesE"]], "devicedrivercapabilitiesios::hasalphacoverage (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS16hasAlphaCoverageE"]], "devicedrivercapabilitiesios::hasanisotropicfilter (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS20hasAnisotropicFilterE"]], "devicedrivercapabilitiesios::hasasynccompute (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS15hasAsyncComputeE"]], "devicedrivercapabilitiesios::hasasynccopy (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS12hasAsyncCopyE"]], "devicedrivercapabilitiesios::hasbasicviewinstancing (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS22hasBasicViewInstancingE"]], "devicedrivercapabilitiesios::hasbindless (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS11hasBindlessE"]], "devicedrivercapabilitiesios::hasbufferoverlapcopy (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS20hasBufferOverlapCopyE"]], "devicedrivercapabilitiesios::hasbufferoverlapregionscopy (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS27hasBufferOverlapRegionsCopyE"]], "devicedrivercapabilitiesios::hasconditionalrender (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS20hasConditionalRenderE"]], "devicedrivercapabilitiesios::hasconservativerassterization (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS29hasConservativeRassterizationE"]], "devicedrivercapabilitiesios::hasconstbufferoffset (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS20hasConstBufferOffsetE"]], "devicedrivercapabilitiesios::hasdlss (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS7hasDLSSE"]], "devicedrivercapabilitiesios::hasdepthboundstest (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS18hasDepthBoundsTestE"]], "devicedrivercapabilitiesios::hasdepthreadonly (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS16hasDepthReadOnlyE"]], "devicedrivercapabilitiesios::hasdrawid (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS9hasDrawIDE"]], "devicedrivercapabilitiesios::hasforcedsamplercount (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS21hasForcedSamplerCountE"]], "devicedrivercapabilitiesios::hasgather4 (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS10hasGather4E"]], "devicedrivercapabilitiesios::hasindirectraydispatch (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS22hasIndirectRayDispatchE"]], "devicedrivercapabilitiesios::hasinstanceid (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS13hasInstanceIDE"]], "devicedrivercapabilitiesios::haslazymemory (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS13hasLazyMemoryE"]], "devicedrivercapabilitiesios::hasmeshshader (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS13hasMeshShaderE"]], "devicedrivercapabilitiesios::hasnvapi (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS8hasNVApiE"]], "devicedrivercapabilitiesios::hasnativerenderpasssubpasses (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS28hasNativeRenderPassSubPassesE"]], "devicedrivercapabilitiesios::hasnooverwriteonshaderresourcebuffers (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS37hasNoOverwriteOnShaderResourceBuffersE"]], "devicedrivercapabilitiesios::hasocclusionquery (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS17hasOcclusionQueryE"]], "devicedrivercapabilitiesios::hasoptimizedviewinstancing (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS26hasOptimizedViewInstancingE"]], "devicedrivercapabilitiesios::hasquadtessellation (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS19hasQuadTessellationE"]], "devicedrivercapabilitiesios::hasraydispatch (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS14hasRayDispatchE"]], "devicedrivercapabilitiesios::hasreadmultisampleddepth (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS24hasReadMultisampledDepthE"]], "devicedrivercapabilitiesios::hasresourcecopyconversion (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS25hasResourceCopyConversionE"]], "devicedrivercapabilitiesios::hasresourceheaps (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS16hasResourceHeapsE"]], "devicedrivercapabilitiesios::hasshader64bitintegerresources (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS30hasShader64BitIntegerResourcesE"]], "devicedrivercapabilitiesios::hasshaderfloat16support (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS23hasShaderFloat16SupportE"]], "devicedrivercapabilitiesios::hasstereoexpansion (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS18hasStereoExpansionE"]], "devicedrivercapabilitiesios::hasstructuredbuffers (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS20hasStructuredBuffersE"]], "devicedrivercapabilitiesios::hastilebasedarchitecture (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS24hasTileBasedArchitectureE"]], "devicedrivercapabilitiesios::hastiled2dresources (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS19hasTiled2DResourcesE"]], "devicedrivercapabilitiesios::hastiled3dresources (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS19hasTiled3DResourcesE"]], "devicedrivercapabilitiesios::hastiledmemoryaliasing (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS22hasTiledMemoryAliasingE"]], "devicedrivercapabilitiesios::hastiledsaferesourcesaccess (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS27hasTiledSafeResourcesAccessE"]], "devicedrivercapabilitiesios::hasuavoneverystage (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS18hasUAVOnEveryStageE"]], "devicedrivercapabilitiesios::hasuavonlyforcedsamplecount (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS27hasUAVOnlyForcedSampleCountE"]], "devicedrivercapabilitiesios::hasvariablerateshading (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS22hasVariableRateShadingE"]], "devicedrivercapabilitiesios::hasvariablerateshadingby4 (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS25hasVariableRateShadingBy4E"]], "devicedrivercapabilitiesios::hasvariablerateshadingcombiners (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS31hasVariableRateShadingCombinersE"]], "devicedrivercapabilitiesios::hasvariablerateshadingshaderoutput (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS34hasVariableRateShadingShaderOutputE"]], "devicedrivercapabilitiesios::hasvariablerateshadingtexture (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS29hasVariableRateShadingTextureE"]], "devicedrivercapabilitiesios::hasvolmipmap (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS12hasVolMipMapE"]], "devicedrivercapabilitiesios::haswaveops (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS10hasWaveOpsE"]], "devicedrivercapabilitiesios::haswellsupportedindirect (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS24hasWellSupportedIndirectE"]], "devicedrivercapabilitiesios::hasxess (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesIOS7hasXESSE"]], "devicedrivercapabilitieslinux (c++ struct)": [[52, "_CPPv429DeviceDriverCapabilitiesLinux"]], "devicedrivercapabilitieslinux::castingfullytypedformatssupported (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux33castingFullyTypedFormatsSupportedE"]], "devicedrivercapabilitieslinux::hasatiapi (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux9hasATIApiE"]], "devicedrivercapabilitieslinux::hasacceleratedviewinstancing (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux28hasAcceleratedViewInstancingE"]], "devicedrivercapabilitieslinux::hasaliasedtextures (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux18hasAliasedTexturesE"]], "devicedrivercapabilitieslinux::hasalphacoverage (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux16hasAlphaCoverageE"]], "devicedrivercapabilitieslinux::hasanisotropicfilter (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux20hasAnisotropicFilterE"]], "devicedrivercapabilitieslinux::hasasynccompute (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux15hasAsyncComputeE"]], "devicedrivercapabilitieslinux::hasasynccopy (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux12hasAsyncCopyE"]], "devicedrivercapabilitieslinux::hasbasevertexsupport (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux20hasBaseVertexSupportE"]], "devicedrivercapabilitieslinux::hasbasicviewinstancing (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux22hasBasicViewInstancingE"]], "devicedrivercapabilitieslinux::hasbufferoverlapcopy (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux20hasBufferOverlapCopyE"]], "devicedrivercapabilitieslinux::hasbufferoverlapregionscopy (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux27hasBufferOverlapRegionsCopyE"]], "devicedrivercapabilitieslinux::hascomparesampler (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux17hasCompareSamplerE"]], "devicedrivercapabilitieslinux::hasconstbufferoffset (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux20hasConstBufferOffsetE"]], "devicedrivercapabilitieslinux::hasdlss (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux7hasDLSSE"]], "devicedrivercapabilitieslinux::hasdepthreadonly (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux16hasDepthReadOnlyE"]], "devicedrivercapabilitieslinux::hasdrawid (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux9hasDrawIDE"]], "devicedrivercapabilitieslinux::hasforcedsamplercount (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux21hasForcedSamplerCountE"]], "devicedrivercapabilitieslinux::hasgather4 (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux10hasGather4E"]], "devicedrivercapabilitieslinux::hasindirectsupport (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux18hasIndirectSupportE"]], "devicedrivercapabilitieslinux::haslazymemory (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux13hasLazyMemoryE"]], "devicedrivercapabilitieslinux::hasmeshshader (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux13hasMeshShaderE"]], "devicedrivercapabilitieslinux::hasnvapi (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux8hasNVApiE"]], "devicedrivercapabilitieslinux::hasnativerenderpasssubpasses (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux28hasNativeRenderPassSubPassesE"]], "devicedrivercapabilitieslinux::hasnooverwriteonshaderresourcebuffers (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux37hasNoOverwriteOnShaderResourceBuffersE"]], "devicedrivercapabilitieslinux::hasocclusionquery (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux17hasOcclusionQueryE"]], "devicedrivercapabilitieslinux::hasoptimizedviewinstancing (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux26hasOptimizedViewInstancingE"]], "devicedrivercapabilitieslinux::hasreadmultisampleddepth (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux24hasReadMultisampledDepthE"]], "devicedrivercapabilitieslinux::hasresourcecopyconversion (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux25hasResourceCopyConversionE"]], "devicedrivercapabilitieslinux::hasshader64bitintegerresources (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux30hasShader64BitIntegerResourcesE"]], "devicedrivercapabilitieslinux::hasstereoexpansion (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux18hasStereoExpansionE"]], "devicedrivercapabilitieslinux::hasstructuredbuffers (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux20hasStructuredBuffersE"]], "devicedrivercapabilitieslinux::hastiled2dresources (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux19hasTiled2DResourcesE"]], "devicedrivercapabilitieslinux::hastiled3dresources (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux19hasTiled3DResourcesE"]], "devicedrivercapabilitieslinux::hastiledmemoryaliasing (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux22hasTiledMemoryAliasingE"]], "devicedrivercapabilitieslinux::hastiledsaferesourcesaccess (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux27hasTiledSafeResourcesAccessE"]], "devicedrivercapabilitieslinux::hasuavoneverystage (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux18hasUAVOnEveryStageE"]], "devicedrivercapabilitieslinux::hasvariablerateshading (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux22hasVariableRateShadingE"]], "devicedrivercapabilitieslinux::hasvariablerateshadingby4 (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux25hasVariableRateShadingBy4E"]], "devicedrivercapabilitieslinux::hasvariablerateshadingcombiners (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux31hasVariableRateShadingCombinersE"]], "devicedrivercapabilitieslinux::hasvariablerateshadingshaderoutput (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux34hasVariableRateShadingShaderOutputE"]], "devicedrivercapabilitieslinux::hasvariablerateshadingtexture (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux29hasVariableRateShadingTextureE"]], "devicedrivercapabilitieslinux::hasvolmipmap (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux12hasVolMipMapE"]], "devicedrivercapabilitieslinux::hasxess (c++ member)": [[52, "_CPPv4N29DeviceDriverCapabilitiesLinux7hasXESSE"]], "devicedrivercapabilitiesmacosx (c++ struct)": [[52, "_CPPv430DeviceDriverCapabilitiesMacOSX"]], "devicedrivercapabilitiesmacosx::castingfullytypedformatssupported (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX33castingFullyTypedFormatsSupportedE"]], "devicedrivercapabilitiesmacosx::hasatiapi (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX9hasATIApiE"]], "devicedrivercapabilitiesmacosx::hasacceleratedviewinstancing (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX28hasAcceleratedViewInstancingE"]], "devicedrivercapabilitiesmacosx::hasaliasedtextures (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX18hasAliasedTexturesE"]], "devicedrivercapabilitiesmacosx::hasalphacoverage (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX16hasAlphaCoverageE"]], "devicedrivercapabilitiesmacosx::hasanisotropicfilter (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX20hasAnisotropicFilterE"]], "devicedrivercapabilitiesmacosx::hasasynccompute (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX15hasAsyncComputeE"]], "devicedrivercapabilitiesmacosx::hasasynccopy (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX12hasAsyncCopyE"]], "devicedrivercapabilitiesmacosx::hasbasicviewinstancing (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX22hasBasicViewInstancingE"]], "devicedrivercapabilitiesmacosx::hasbufferoverlapcopy (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX20hasBufferOverlapCopyE"]], "devicedrivercapabilitiesmacosx::hasbufferoverlapregionscopy (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX27hasBufferOverlapRegionsCopyE"]], "devicedrivercapabilitiesmacosx::hascomparesampler (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX17hasCompareSamplerE"]], "devicedrivercapabilitiesmacosx::hasconditionalrender (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX20hasConditionalRenderE"]], "devicedrivercapabilitiesmacosx::hasconservativerassterization (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX29hasConservativeRassterizationE"]], "devicedrivercapabilitiesmacosx::hasconstbufferoffset (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX20hasConstBufferOffsetE"]], "devicedrivercapabilitiesmacosx::hasdlss (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX7hasDLSSE"]], "devicedrivercapabilitiesmacosx::hasdepthboundstest (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX18hasDepthBoundsTestE"]], "devicedrivercapabilitiesmacosx::hasdepthreadonly (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX16hasDepthReadOnlyE"]], "devicedrivercapabilitiesmacosx::hasforcedsamplercount (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX21hasForcedSamplerCountE"]], "devicedrivercapabilitiesmacosx::hasgather4 (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX10hasGather4E"]], "devicedrivercapabilitiesmacosx::hasindirectraydispatch (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX22hasIndirectRayDispatchE"]], "devicedrivercapabilitiesmacosx::hasindirectsupport (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX18hasIndirectSupportE"]], "devicedrivercapabilitiesmacosx::hasinstanceid (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX13hasInstanceIDE"]], "devicedrivercapabilitiesmacosx::haslazymemory (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX13hasLazyMemoryE"]], "devicedrivercapabilitiesmacosx::hasmeshshader (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX13hasMeshShaderE"]], "devicedrivercapabilitiesmacosx::hasnvapi (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX8hasNVApiE"]], "devicedrivercapabilitiesmacosx::hasnativerenderpasssubpasses (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX28hasNativeRenderPassSubPassesE"]], "devicedrivercapabilitiesmacosx::hasnooverwriteonshaderresourcebuffers (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX37hasNoOverwriteOnShaderResourceBuffersE"]], "devicedrivercapabilitiesmacosx::hasocclusionquery (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX17hasOcclusionQueryE"]], "devicedrivercapabilitiesmacosx::hasoptimizedviewinstancing (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX26hasOptimizedViewInstancingE"]], "devicedrivercapabilitiesmacosx::hasquadtessellation (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX19hasQuadTessellationE"]], "devicedrivercapabilitiesmacosx::hasraydispatch (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX14hasRayDispatchE"]], "devicedrivercapabilitiesmacosx::hasreadmultisampleddepth (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX24hasReadMultisampledDepthE"]], "devicedrivercapabilitiesmacosx::hasresourcecopyconversion (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX25hasResourceCopyConversionE"]], "devicedrivercapabilitiesmacosx::hasresourceheaps (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX16hasResourceHeapsE"]], "devicedrivercapabilitiesmacosx::hasshader64bitintegerresources (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX30hasShader64BitIntegerResourcesE"]], "devicedrivercapabilitiesmacosx::hasshaderfloat16support (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX23hasShaderFloat16SupportE"]], "devicedrivercapabilitiesmacosx::hasstereoexpansion (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX18hasStereoExpansionE"]], "devicedrivercapabilitiesmacosx::hasstructuredbuffers (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX20hasStructuredBuffersE"]], "devicedrivercapabilitiesmacosx::hastilebasedarchitecture (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX24hasTileBasedArchitectureE"]], "devicedrivercapabilitiesmacosx::hastiled2dresources (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX19hasTiled2DResourcesE"]], "devicedrivercapabilitiesmacosx::hastiled3dresources (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX19hasTiled3DResourcesE"]], "devicedrivercapabilitiesmacosx::hastiledmemoryaliasing (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX22hasTiledMemoryAliasingE"]], "devicedrivercapabilitiesmacosx::hastiledsaferesourcesaccess (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX27hasTiledSafeResourcesAccessE"]], "devicedrivercapabilitiesmacosx::hasuavoneverystage (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX18hasUAVOnEveryStageE"]], "devicedrivercapabilitiesmacosx::hasvariablerateshading (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX22hasVariableRateShadingE"]], "devicedrivercapabilitiesmacosx::hasvariablerateshadingby4 (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX25hasVariableRateShadingBy4E"]], "devicedrivercapabilitiesmacosx::hasvariablerateshadingcombiners (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX31hasVariableRateShadingCombinersE"]], "devicedrivercapabilitiesmacosx::hasvariablerateshadingshaderoutput (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX34hasVariableRateShadingShaderOutputE"]], "devicedrivercapabilitiesmacosx::hasvariablerateshadingtexture (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX29hasVariableRateShadingTextureE"]], "devicedrivercapabilitiesmacosx::hasvolmipmap (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX12hasVolMipMapE"]], "devicedrivercapabilitiesmacosx::haswaveops (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX10hasWaveOpsE"]], "devicedrivercapabilitiesmacosx::haswellsupportedindirect (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX24hasWellSupportedIndirectE"]], "devicedrivercapabilitiesmacosx::hasxess (c++ member)": [[52, "_CPPv4N30DeviceDriverCapabilitiesMacOSX7hasXESSE"]], "devicedrivercapabilitiesnintendoswitch (c++ struct)": [[52, "_CPPv438DeviceDriverCapabilitiesNintendoSwitch"]], "devicedrivercapabilitiesnintendoswitch::castingfullytypedformatssupported (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch33castingFullyTypedFormatsSupportedE"]], "devicedrivercapabilitiesnintendoswitch::hasatiapi (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch9hasATIApiE"]], "devicedrivercapabilitiesnintendoswitch::hasacceleratedviewinstancing (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch28hasAcceleratedViewInstancingE"]], "devicedrivercapabilitiesnintendoswitch::hasaliasedtextures (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch18hasAliasedTexturesE"]], "devicedrivercapabilitiesnintendoswitch::hasalphacoverage (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch16hasAlphaCoverageE"]], "devicedrivercapabilitiesnintendoswitch::hasanisotropicfilter (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch20hasAnisotropicFilterE"]], "devicedrivercapabilitiesnintendoswitch::hasasynccompute (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch15hasAsyncComputeE"]], "devicedrivercapabilitiesnintendoswitch::hasasynccopy (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch12hasAsyncCopyE"]], "devicedrivercapabilitiesnintendoswitch::hasbasevertexsupport (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch20hasBaseVertexSupportE"]], "devicedrivercapabilitiesnintendoswitch::hasbasicviewinstancing (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch22hasBasicViewInstancingE"]], "devicedrivercapabilitiesnintendoswitch::hasbufferoverlapcopy (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch20hasBufferOverlapCopyE"]], "devicedrivercapabilitiesnintendoswitch::hasbufferoverlapregionscopy (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch27hasBufferOverlapRegionsCopyE"]], "devicedrivercapabilitiesnintendoswitch::hascomparesampler (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch17hasCompareSamplerE"]], "devicedrivercapabilitiesnintendoswitch::hasconservativerassterization (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch29hasConservativeRassterizationE"]], "devicedrivercapabilitiesnintendoswitch::hasconstbufferoffset (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch20hasConstBufferOffsetE"]], "devicedrivercapabilitiesnintendoswitch::hasdlss (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch7hasDLSSE"]], "devicedrivercapabilitiesnintendoswitch::hasdepthboundstest (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch18hasDepthBoundsTestE"]], "devicedrivercapabilitiesnintendoswitch::hasdepthreadonly (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch16hasDepthReadOnlyE"]], "devicedrivercapabilitiesnintendoswitch::hasdrawid (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch9hasDrawIDE"]], "devicedrivercapabilitiesnintendoswitch::hasforcedsamplercount (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch21hasForcedSamplerCountE"]], "devicedrivercapabilitiesnintendoswitch::hasgather4 (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch10hasGather4E"]], "devicedrivercapabilitiesnintendoswitch::hasgeometryindexinrayaccelerationstructure (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch42hasGeometryIndexInRayAccelerationStructureE"]], "devicedrivercapabilitiesnintendoswitch::hasindirectraydispatch (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch22hasIndirectRayDispatchE"]], "devicedrivercapabilitiesnintendoswitch::hasindirectsupport (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch18hasIndirectSupportE"]], "devicedrivercapabilitiesnintendoswitch::hasinstanceid (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch13hasInstanceIDE"]], "devicedrivercapabilitiesnintendoswitch::haslazymemory (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch13hasLazyMemoryE"]], "devicedrivercapabilitiesnintendoswitch::hasmeshshader (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch13hasMeshShaderE"]], "devicedrivercapabilitiesnintendoswitch::hasnvapi (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch8hasNVApiE"]], "devicedrivercapabilitiesnintendoswitch::hasnativeraytracepipelineexpansion (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch34hasNativeRayTracePipelineExpansionE"]], "devicedrivercapabilitiesnintendoswitch::hasnativerenderpasssubpasses (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch28hasNativeRenderPassSubPassesE"]], "devicedrivercapabilitiesnintendoswitch::hasnooverwriteonshaderresourcebuffers (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch37hasNoOverwriteOnShaderResourceBuffersE"]], "devicedrivercapabilitiesnintendoswitch::hasocclusionquery (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch17hasOcclusionQueryE"]], "devicedrivercapabilitiesnintendoswitch::hasoptimizedviewinstancing (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch26hasOptimizedViewInstancingE"]], "devicedrivercapabilitiesnintendoswitch::hasquadtessellation (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch19hasQuadTessellationE"]], "devicedrivercapabilitiesnintendoswitch::hasrayaccelerationstructure (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch27hasRayAccelerationStructureE"]], "devicedrivercapabilitiesnintendoswitch::hasraydispatch (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch14hasRayDispatchE"]], "devicedrivercapabilitiesnintendoswitch::hasrayquery (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch11hasRayQueryE"]], "devicedrivercapabilitiesnintendoswitch::hasreadmultisampleddepth (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch24hasReadMultisampledDepthE"]], "devicedrivercapabilitiesnintendoswitch::hasresourcecopyconversion (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch25hasResourceCopyConversionE"]], "devicedrivercapabilitiesnintendoswitch::hasresourceheaps (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch16hasResourceHeapsE"]], "devicedrivercapabilitiesnintendoswitch::hasshader64bitintegerresources (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch30hasShader64BitIntegerResourcesE"]], "devicedrivercapabilitiesnintendoswitch::hasskipprimitivetypeinraytracingshaders (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch39hasSkipPrimitiveTypeInRayTracingShadersE"]], "devicedrivercapabilitiesnintendoswitch::hasstereoexpansion (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch18hasStereoExpansionE"]], "devicedrivercapabilitiesnintendoswitch::hasstructuredbuffers (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch20hasStructuredBuffersE"]], "devicedrivercapabilitiesnintendoswitch::hastilebasedarchitecture (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch24hasTileBasedArchitectureE"]], "devicedrivercapabilitiesnintendoswitch::hastiled2dresources (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch19hasTiled2DResourcesE"]], "devicedrivercapabilitiesnintendoswitch::hastiled3dresources (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch19hasTiled3DResourcesE"]], "devicedrivercapabilitiesnintendoswitch::hastiledmemoryaliasing (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch22hasTiledMemoryAliasingE"]], "devicedrivercapabilitiesnintendoswitch::hastiledsaferesourcesaccess (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch27hasTiledSafeResourcesAccessE"]], "devicedrivercapabilitiesnintendoswitch::hasuavoneverystage (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch18hasUAVOnEveryStageE"]], "devicedrivercapabilitiesnintendoswitch::hasuavonlyforcedsamplecount (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch27hasUAVOnlyForcedSampleCountE"]], "devicedrivercapabilitiesnintendoswitch::hasvariablerateshading (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch22hasVariableRateShadingE"]], "devicedrivercapabilitiesnintendoswitch::hasvariablerateshadingby4 (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch25hasVariableRateShadingBy4E"]], "devicedrivercapabilitiesnintendoswitch::hasvariablerateshadingcombiners (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch31hasVariableRateShadingCombinersE"]], "devicedrivercapabilitiesnintendoswitch::hasvariablerateshadingshaderoutput (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch34hasVariableRateShadingShaderOutputE"]], "devicedrivercapabilitiesnintendoswitch::hasvariablerateshadingtexture (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch29hasVariableRateShadingTextureE"]], "devicedrivercapabilitiesnintendoswitch::hasvolmipmap (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch12hasVolMipMapE"]], "devicedrivercapabilitiesnintendoswitch::haswellsupportedindirect (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch24hasWellSupportedIndirectE"]], "devicedrivercapabilitiesnintendoswitch::hasxess (c++ member)": [[52, "_CPPv4N38DeviceDriverCapabilitiesNintendoSwitch7hasXESSE"]], "devicedrivercapabilitiesps4 (c++ struct)": [[52, "_CPPv427DeviceDriverCapabilitiesPS4"]], "devicedrivercapabilitiesps4::castingfullytypedformatssupported (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS433castingFullyTypedFormatsSupportedE"]], "devicedrivercapabilitiesps4::hasatiapi (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS49hasATIApiE"]], "devicedrivercapabilitiesps4::hasacceleratedviewinstancing (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS428hasAcceleratedViewInstancingE"]], "devicedrivercapabilitiesps4::hasaliasedtextures (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS418hasAliasedTexturesE"]], "devicedrivercapabilitiesps4::hasalphacoverage (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS416hasAlphaCoverageE"]], "devicedrivercapabilitiesps4::hasanisotropicfilter (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS420hasAnisotropicFilterE"]], "devicedrivercapabilitiesps4::hasasynccopy (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS412hasAsyncCopyE"]], "devicedrivercapabilitiesps4::hasbasevertexsupport (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS420hasBaseVertexSupportE"]], "devicedrivercapabilitiesps4::hasbasicviewinstancing (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS422hasBasicViewInstancingE"]], "devicedrivercapabilitiesps4::hasbindless (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS411hasBindlessE"]], "devicedrivercapabilitiesps4::hasbufferoverlapcopy (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS420hasBufferOverlapCopyE"]], "devicedrivercapabilitiesps4::hasbufferoverlapregionscopy (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS427hasBufferOverlapRegionsCopyE"]], "devicedrivercapabilitiesps4::hascomparesampler (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS417hasCompareSamplerE"]], "devicedrivercapabilitiesps4::hasconditionalrender (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS420hasConditionalRenderE"]], "devicedrivercapabilitiesps4::hasconservativerassterization (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS429hasConservativeRassterizationE"]], "devicedrivercapabilitiesps4::hasconstbufferoffset (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS420hasConstBufferOffsetE"]], "devicedrivercapabilitiesps4::hasdlss (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS47hasDLSSE"]], "devicedrivercapabilitiesps4::hasdepthboundstest (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS418hasDepthBoundsTestE"]], "devicedrivercapabilitiesps4::hasdepthreadonly (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS416hasDepthReadOnlyE"]], "devicedrivercapabilitiesps4::hasdrawid (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS49hasDrawIDE"]], "devicedrivercapabilitiesps4::hasforcedsamplercount (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS421hasForcedSamplerCountE"]], "devicedrivercapabilitiesps4::hasgather4 (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS410hasGather4E"]], "devicedrivercapabilitiesps4::hasgeometryindexinrayaccelerationstructure (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS442hasGeometryIndexInRayAccelerationStructureE"]], "devicedrivercapabilitiesps4::hasindirectraydispatch (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS422hasIndirectRayDispatchE"]], "devicedrivercapabilitiesps4::hasindirectsupport (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS418hasIndirectSupportE"]], "devicedrivercapabilitiesps4::hasinstanceid (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS413hasInstanceIDE"]], "devicedrivercapabilitiesps4::haslazymemory (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS413hasLazyMemoryE"]], "devicedrivercapabilitiesps4::hasmeshshader (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS413hasMeshShaderE"]], "devicedrivercapabilitiesps4::hasnvapi (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS48hasNVApiE"]], "devicedrivercapabilitiesps4::hasnativeraytracepipelineexpansion (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS434hasNativeRayTracePipelineExpansionE"]], "devicedrivercapabilitiesps4::hasnativerenderpasssubpasses (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS428hasNativeRenderPassSubPassesE"]], "devicedrivercapabilitiesps4::hasnooverwriteonshaderresourcebuffers (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS437hasNoOverwriteOnShaderResourceBuffersE"]], "devicedrivercapabilitiesps4::hasocclusionquery (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS417hasOcclusionQueryE"]], "devicedrivercapabilitiesps4::hasoptimizedviewinstancing (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS426hasOptimizedViewInstancingE"]], "devicedrivercapabilitiesps4::hasquadtessellation (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS419hasQuadTessellationE"]], "devicedrivercapabilitiesps4::hasrayaccelerationstructure (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS427hasRayAccelerationStructureE"]], "devicedrivercapabilitiesps4::hasraydispatch (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS414hasRayDispatchE"]], "devicedrivercapabilitiesps4::hasrayquery (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS411hasRayQueryE"]], "devicedrivercapabilitiesps4::hasreadmultisampleddepth (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS424hasReadMultisampledDepthE"]], "devicedrivercapabilitiesps4::hasrenderpassdepthresolve (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS425hasRenderPassDepthResolveE"]], "devicedrivercapabilitiesps4::hasresourcecopyconversion (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS425hasResourceCopyConversionE"]], "devicedrivercapabilitiesps4::hasshader64bitintegerresources (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS430hasShader64BitIntegerResourcesE"]], "devicedrivercapabilitiesps4::hasshaderfloat16support (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS423hasShaderFloat16SupportE"]], "devicedrivercapabilitiesps4::hasskipprimitivetypeinraytracingshaders (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS439hasSkipPrimitiveTypeInRayTracingShadersE"]], "devicedrivercapabilitiesps4::hasstereoexpansion (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS418hasStereoExpansionE"]], "devicedrivercapabilitiesps4::hasstructuredbuffers (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS420hasStructuredBuffersE"]], "devicedrivercapabilitiesps4::hastilebasedarchitecture (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS424hasTileBasedArchitectureE"]], "devicedrivercapabilitiesps4::hastiled2dresources (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS419hasTiled2DResourcesE"]], "devicedrivercapabilitiesps4::hastiled3dresources (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS419hasTiled3DResourcesE"]], "devicedrivercapabilitiesps4::hastiledmemoryaliasing (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS422hasTiledMemoryAliasingE"]], "devicedrivercapabilitiesps4::hastiledsaferesourcesaccess (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS427hasTiledSafeResourcesAccessE"]], "devicedrivercapabilitiesps4::hasuavoneverystage (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS418hasUAVOnEveryStageE"]], "devicedrivercapabilitiesps4::hasuavonlyforcedsamplecount (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS427hasUAVOnlyForcedSampleCountE"]], "devicedrivercapabilitiesps4::hasvariablerateshading (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS422hasVariableRateShadingE"]], "devicedrivercapabilitiesps4::hasvariablerateshadingby4 (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS425hasVariableRateShadingBy4E"]], "devicedrivercapabilitiesps4::hasvariablerateshadingcombiners (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS431hasVariableRateShadingCombinersE"]], "devicedrivercapabilitiesps4::hasvariablerateshadingshaderoutput (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS434hasVariableRateShadingShaderOutputE"]], "devicedrivercapabilitiesps4::hasvariablerateshadingtexture (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS429hasVariableRateShadingTextureE"]], "devicedrivercapabilitiesps4::hasvolmipmap (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS412hasVolMipMapE"]], "devicedrivercapabilitiesps4::haswaveops (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS410hasWaveOpsE"]], "devicedrivercapabilitiesps4::haswellsupportedindirect (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS424hasWellSupportedIndirectE"]], "devicedrivercapabilitiesps4::hasxess (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS47hasXESSE"]], "devicedrivercapabilitiesps5 (c++ struct)": [[52, "_CPPv427DeviceDriverCapabilitiesPS5"]], "devicedrivercapabilitiesps5::hasgeometryindexinrayaccelerationstructure (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS542hasGeometryIndexInRayAccelerationStructureE"]], "devicedrivercapabilitiesps5::hasindirectraydispatch (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS522hasIndirectRayDispatchE"]], "devicedrivercapabilitiesps5::hasrayaccelerationstructure (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS527hasRayAccelerationStructureE"]], "devicedrivercapabilitiesps5::hasraydispatch (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS514hasRayDispatchE"]], "devicedrivercapabilitiesps5::hasrayquery (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS511hasRayQueryE"]], "devicedrivercapabilitiesps5::hasskipprimitivetypeinraytracingshaders (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS539hasSkipPrimitiveTypeInRayTracingShadersE"]], "devicedrivercapabilitiesps5::hasstereoexpansion (c++ member)": [[52, "_CPPv4N27DeviceDriverCapabilitiesPS518hasStereoExpansionE"]], "devicedrivercapabilitiesscarlett (c++ struct)": [[52, "_CPPv432DeviceDriverCapabilitiesScarlett"]], "devicedrivercapabilitiesscarlett::castingfullytypedformatssupported (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett33castingFullyTypedFormatsSupportedE"]], "devicedrivercapabilitiesscarlett::hasbasevertexsupport (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett20hasBaseVertexSupportE"]], "devicedrivercapabilitiesscarlett::hasconservativerassterization (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett29hasConservativeRassterizationE"]], "devicedrivercapabilitiesscarlett::hasgeometryindexinrayaccelerationstructure (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett42hasGeometryIndexInRayAccelerationStructureE"]], "devicedrivercapabilitiesscarlett::hasindirectraydispatch (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett22hasIndirectRayDispatchE"]], "devicedrivercapabilitiesscarlett::hasmeshshader (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett13hasMeshShaderE"]], "devicedrivercapabilitiesscarlett::hasnativeraytracepipelineexpansion (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett34hasNativeRayTracePipelineExpansionE"]], "devicedrivercapabilitiesscarlett::hasrayaccelerationstructure (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett27hasRayAccelerationStructureE"]], "devicedrivercapabilitiesscarlett::hasraydispatch (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett14hasRayDispatchE"]], "devicedrivercapabilitiesscarlett::hasrayquery (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett11hasRayQueryE"]], "devicedrivercapabilitiesscarlett::hasshader64bitintegerresources (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett30hasShader64BitIntegerResourcesE"]], "devicedrivercapabilitiesscarlett::hasskipprimitivetypeinraytracingshaders (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett39hasSkipPrimitiveTypeInRayTracingShadersE"]], "devicedrivercapabilitiesscarlett::hasvariablerateshading (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett22hasVariableRateShadingE"]], "devicedrivercapabilitiesscarlett::hasvariablerateshadingcombiners (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett31hasVariableRateShadingCombinersE"]], "devicedrivercapabilitiesscarlett::hasvariablerateshadingshaderoutput (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett34hasVariableRateShadingShaderOutputE"]], "devicedrivercapabilitiesscarlett::hasvariablerateshadingtexture (c++ member)": [[52, "_CPPv4N32DeviceDriverCapabilitiesScarlett29hasVariableRateShadingTextureE"]], "devicedrivercapabilitiestvos (c++ struct)": [[52, "_CPPv428DeviceDriverCapabilitiesTVOS"]], "devicedrivercapabilitiestvos::castingfullytypedformatssupported (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS33castingFullyTypedFormatsSupportedE"]], "devicedrivercapabilitiestvos::hasatiapi (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS9hasATIApiE"]], "devicedrivercapabilitiestvos::hasacceleratedviewinstancing (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS28hasAcceleratedViewInstancingE"]], "devicedrivercapabilitiestvos::hasaliasedtextures (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS18hasAliasedTexturesE"]], "devicedrivercapabilitiestvos::hasalphacoverage (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS16hasAlphaCoverageE"]], "devicedrivercapabilitiestvos::hasanisotropicfilter (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS20hasAnisotropicFilterE"]], "devicedrivercapabilitiestvos::hasasynccompute (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS15hasAsyncComputeE"]], "devicedrivercapabilitiestvos::hasasynccopy (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS12hasAsyncCopyE"]], "devicedrivercapabilitiestvos::hasbasicviewinstancing (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS22hasBasicViewInstancingE"]], "devicedrivercapabilitiestvos::hasbindless (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS11hasBindlessE"]], "devicedrivercapabilitiestvos::hasbufferoverlapcopy (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS20hasBufferOverlapCopyE"]], "devicedrivercapabilitiestvos::hasbufferoverlapregionscopy (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS27hasBufferOverlapRegionsCopyE"]], "devicedrivercapabilitiestvos::hasconditionalrender (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS20hasConditionalRenderE"]], "devicedrivercapabilitiestvos::hasconservativerassterization (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS29hasConservativeRassterizationE"]], "devicedrivercapabilitiestvos::hasconstbufferoffset (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS20hasConstBufferOffsetE"]], "devicedrivercapabilitiestvos::hasdlss (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS7hasDLSSE"]], "devicedrivercapabilitiestvos::hasdepthboundstest (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS18hasDepthBoundsTestE"]], "devicedrivercapabilitiestvos::hasdepthreadonly (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS16hasDepthReadOnlyE"]], "devicedrivercapabilitiestvos::hasdrawid (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS9hasDrawIDE"]], "devicedrivercapabilitiestvos::hasforcedsamplercount (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS21hasForcedSamplerCountE"]], "devicedrivercapabilitiestvos::hasgather4 (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS10hasGather4E"]], "devicedrivercapabilitiestvos::hasindirectraydispatch (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS22hasIndirectRayDispatchE"]], "devicedrivercapabilitiestvos::hasinstanceid (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS13hasInstanceIDE"]], "devicedrivercapabilitiestvos::haslazymemory (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS13hasLazyMemoryE"]], "devicedrivercapabilitiestvos::hasmeshshader (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS13hasMeshShaderE"]], "devicedrivercapabilitiestvos::hasnvapi (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS8hasNVApiE"]], "devicedrivercapabilitiestvos::hasnativerenderpasssubpasses (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS28hasNativeRenderPassSubPassesE"]], "devicedrivercapabilitiestvos::hasnooverwriteonshaderresourcebuffers (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS37hasNoOverwriteOnShaderResourceBuffersE"]], "devicedrivercapabilitiestvos::hasocclusionquery (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS17hasOcclusionQueryE"]], "devicedrivercapabilitiestvos::hasoptimizedviewinstancing (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS26hasOptimizedViewInstancingE"]], "devicedrivercapabilitiestvos::hasquadtessellation (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS19hasQuadTessellationE"]], "devicedrivercapabilitiestvos::hasraydispatch (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS14hasRayDispatchE"]], "devicedrivercapabilitiestvos::hasreadmultisampleddepth (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS24hasReadMultisampledDepthE"]], "devicedrivercapabilitiestvos::hasresourcecopyconversion (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS25hasResourceCopyConversionE"]], "devicedrivercapabilitiestvos::hasresourceheaps (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS16hasResourceHeapsE"]], "devicedrivercapabilitiestvos::hasshader64bitintegerresources (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS30hasShader64BitIntegerResourcesE"]], "devicedrivercapabilitiestvos::hasshaderfloat16support (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS23hasShaderFloat16SupportE"]], "devicedrivercapabilitiestvos::hasstereoexpansion (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS18hasStereoExpansionE"]], "devicedrivercapabilitiestvos::hasstructuredbuffers (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS20hasStructuredBuffersE"]], "devicedrivercapabilitiestvos::hastilebasedarchitecture (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS24hasTileBasedArchitectureE"]], "devicedrivercapabilitiestvos::hastiled2dresources (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS19hasTiled2DResourcesE"]], "devicedrivercapabilitiestvos::hastiled3dresources (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS19hasTiled3DResourcesE"]], "devicedrivercapabilitiestvos::hastiledmemoryaliasing (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS22hasTiledMemoryAliasingE"]], "devicedrivercapabilitiestvos::hastiledsaferesourcesaccess (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS27hasTiledSafeResourcesAccessE"]], "devicedrivercapabilitiestvos::hasuavoneverystage (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS18hasUAVOnEveryStageE"]], "devicedrivercapabilitiestvos::hasuavonlyforcedsamplecount (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS27hasUAVOnlyForcedSampleCountE"]], "devicedrivercapabilitiestvos::hasvariablerateshading (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS22hasVariableRateShadingE"]], "devicedrivercapabilitiestvos::hasvariablerateshadingby4 (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS25hasVariableRateShadingBy4E"]], "devicedrivercapabilitiestvos::hasvariablerateshadingcombiners (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS31hasVariableRateShadingCombinersE"]], "devicedrivercapabilitiestvos::hasvariablerateshadingshaderoutput (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS34hasVariableRateShadingShaderOutputE"]], "devicedrivercapabilitiestvos::hasvariablerateshadingtexture (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS29hasVariableRateShadingTextureE"]], "devicedrivercapabilitiestvos::hasvolmipmap (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS12hasVolMipMapE"]], "devicedrivercapabilitiestvos::haswaveops (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS10hasWaveOpsE"]], "devicedrivercapabilitiestvos::haswellsupportedindirect (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS24hasWellSupportedIndirectE"]], "devicedrivercapabilitiestvos::hasxess (c++ member)": [[52, "_CPPv4N28DeviceDriverCapabilitiesTVOS7hasXESSE"]], "devicedrivercapabilitieswindows (c++ struct)": [[52, "_CPPv431DeviceDriverCapabilitiesWindows"]], "devicedrivercapabilitieswindows::hasalphacoverage (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesWindows16hasAlphaCoverageE"]], "devicedrivercapabilitieswindows::hasanisotropicfilter (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesWindows20hasAnisotropicFilterE"]], "devicedrivercapabilitieswindows::hasasynccopy (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesWindows12hasAsyncCopyE"]], "devicedrivercapabilitieswindows::hasbasevertexsupport (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesWindows20hasBaseVertexSupportE"]], "devicedrivercapabilitieswindows::hascomparesampler (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesWindows17hasCompareSamplerE"]], "devicedrivercapabilitieswindows::hasindirectsupport (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesWindows18hasIndirectSupportE"]], "devicedrivercapabilitieswindows::haslazymemory (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesWindows13hasLazyMemoryE"]], "devicedrivercapabilitieswindows::hasstereoexpansion (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesWindows18hasStereoExpansionE"]], "devicedrivercapabilitiesxboxone (c++ struct)": [[52, "_CPPv431DeviceDriverCapabilitiesXboxOne"]], "devicedrivercapabilitiesxboxone::castingfullytypedformatssupported (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne33castingFullyTypedFormatsSupportedE"]], "devicedrivercapabilitiesxboxone::hasatiapi (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne9hasATIApiE"]], "devicedrivercapabilitiesxboxone::hasacceleratedviewinstancing (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne28hasAcceleratedViewInstancingE"]], "devicedrivercapabilitiesxboxone::hasaliasedtextures (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne18hasAliasedTexturesE"]], "devicedrivercapabilitiesxboxone::hasalphacoverage (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne16hasAlphaCoverageE"]], "devicedrivercapabilitiesxboxone::hasanisotropicfilter (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne20hasAnisotropicFilterE"]], "devicedrivercapabilitiesxboxone::hasasynccompute (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne15hasAsyncComputeE"]], "devicedrivercapabilitiesxboxone::hasasynccopy (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne12hasAsyncCopyE"]], "devicedrivercapabilitiesxboxone::hasbasevertexsupport (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne20hasBaseVertexSupportE"]], "devicedrivercapabilitiesxboxone::hasbasicviewinstancing (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne22hasBasicViewInstancingE"]], "devicedrivercapabilitiesxboxone::hasbindless (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne11hasBindlessE"]], "devicedrivercapabilitiesxboxone::hasbufferoverlapcopy (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne20hasBufferOverlapCopyE"]], "devicedrivercapabilitiesxboxone::hasbufferoverlapregionscopy (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne27hasBufferOverlapRegionsCopyE"]], "devicedrivercapabilitiesxboxone::hascomparesampler (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne17hasCompareSamplerE"]], "devicedrivercapabilitiesxboxone::hasconditionalrender (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne20hasConditionalRenderE"]], "devicedrivercapabilitiesxboxone::hasconservativerassterization (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne29hasConservativeRassterizationE"]], "devicedrivercapabilitiesxboxone::hasconstbufferoffset (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne20hasConstBufferOffsetE"]], "devicedrivercapabilitiesxboxone::hasdlss (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne7hasDLSSE"]], "devicedrivercapabilitiesxboxone::hasdepthboundstest (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne18hasDepthBoundsTestE"]], "devicedrivercapabilitiesxboxone::hasdepthreadonly (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne16hasDepthReadOnlyE"]], "devicedrivercapabilitiesxboxone::hasdrawid (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne9hasDrawIDE"]], "devicedrivercapabilitiesxboxone::hasforcedsamplercount (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne21hasForcedSamplerCountE"]], "devicedrivercapabilitiesxboxone::hasgather4 (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne10hasGather4E"]], "devicedrivercapabilitiesxboxone::hasgeometryindexinrayaccelerationstructure (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne42hasGeometryIndexInRayAccelerationStructureE"]], "devicedrivercapabilitiesxboxone::hasindirectraydispatch (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne22hasIndirectRayDispatchE"]], "devicedrivercapabilitiesxboxone::hasindirectsupport (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne18hasIndirectSupportE"]], "devicedrivercapabilitiesxboxone::hasinstanceid (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne13hasInstanceIDE"]], "devicedrivercapabilitiesxboxone::haslazymemory (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne13hasLazyMemoryE"]], "devicedrivercapabilitiesxboxone::hasmeshshader (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne13hasMeshShaderE"]], "devicedrivercapabilitiesxboxone::hasnvapi (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne8hasNVApiE"]], "devicedrivercapabilitiesxboxone::hasnativeraytracepipelineexpansion (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne34hasNativeRayTracePipelineExpansionE"]], "devicedrivercapabilitiesxboxone::hasnativerenderpasssubpasses (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne28hasNativeRenderPassSubPassesE"]], "devicedrivercapabilitiesxboxone::hasnooverwriteonshaderresourcebuffers (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne37hasNoOverwriteOnShaderResourceBuffersE"]], "devicedrivercapabilitiesxboxone::hasocclusionquery (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne17hasOcclusionQueryE"]], "devicedrivercapabilitiesxboxone::hasoptimizedviewinstancing (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne26hasOptimizedViewInstancingE"]], "devicedrivercapabilitiesxboxone::hasquadtessellation (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne19hasQuadTessellationE"]], "devicedrivercapabilitiesxboxone::hasrayaccelerationstructure (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne27hasRayAccelerationStructureE"]], "devicedrivercapabilitiesxboxone::hasraydispatch (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne14hasRayDispatchE"]], "devicedrivercapabilitiesxboxone::hasrayquery (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne11hasRayQueryE"]], "devicedrivercapabilitiesxboxone::hasreadmultisampleddepth (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne24hasReadMultisampledDepthE"]], "devicedrivercapabilitiesxboxone::hasrenderpassdepthresolve (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne25hasRenderPassDepthResolveE"]], "devicedrivercapabilitiesxboxone::hasresourcecopyconversion (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne25hasResourceCopyConversionE"]], "devicedrivercapabilitiesxboxone::hasresourceheaps (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne16hasResourceHeapsE"]], "devicedrivercapabilitiesxboxone::hasshader64bitintegerresources (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne30hasShader64BitIntegerResourcesE"]], "devicedrivercapabilitiesxboxone::hasshaderfloat16support (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne23hasShaderFloat16SupportE"]], "devicedrivercapabilitiesxboxone::hasskipprimitivetypeinraytracingshaders (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne39hasSkipPrimitiveTypeInRayTracingShadersE"]], "devicedrivercapabilitiesxboxone::hasstereoexpansion (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne18hasStereoExpansionE"]], "devicedrivercapabilitiesxboxone::hasstructuredbuffers (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne20hasStructuredBuffersE"]], "devicedrivercapabilitiesxboxone::hastilebasedarchitecture (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne24hasTileBasedArchitectureE"]], "devicedrivercapabilitiesxboxone::hastiled2dresources (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne19hasTiled2DResourcesE"]], "devicedrivercapabilitiesxboxone::hastiled3dresources (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne19hasTiled3DResourcesE"]], "devicedrivercapabilitiesxboxone::hastiledmemoryaliasing (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne22hasTiledMemoryAliasingE"]], "devicedrivercapabilitiesxboxone::hastiledsaferesourcesaccess (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne27hasTiledSafeResourcesAccessE"]], "devicedrivercapabilitiesxboxone::hasuavoneverystage (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne18hasUAVOnEveryStageE"]], "devicedrivercapabilitiesxboxone::hasuavonlyforcedsamplecount (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne27hasUAVOnlyForcedSampleCountE"]], "devicedrivercapabilitiesxboxone::hasvariablerateshading (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne22hasVariableRateShadingE"]], "devicedrivercapabilitiesxboxone::hasvariablerateshadingby4 (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne25hasVariableRateShadingBy4E"]], "devicedrivercapabilitiesxboxone::hasvariablerateshadingcombiners (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne31hasVariableRateShadingCombinersE"]], "devicedrivercapabilitiesxboxone::hasvariablerateshadingshaderoutput (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne34hasVariableRateShadingShaderOutputE"]], "devicedrivercapabilitiesxboxone::hasvariablerateshadingtexture (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne29hasVariableRateShadingTextureE"]], "devicedrivercapabilitiesxboxone::hasvolmipmap (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne12hasVolMipMapE"]], "devicedrivercapabilitiesxboxone::haswaveops (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne10hasWaveOpsE"]], "devicedrivercapabilitiesxboxone::haswellsupportedindirect (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne24hasWellSupportedIndirectE"]], "devicedrivercapabilitiesxboxone::hasxess (c++ member)": [[52, "_CPPv4N31DeviceDriverCapabilitiesXboxOne7hasXESSE"]], "devicedriverissues (c++ type)": [[52, "_CPPv418DeviceDriverIssues"]], "devicedriverissuesandroid (c++ struct)": [[52, "_CPPv425DeviceDriverIssuesAndroid"]], "devicedriverissuesandroid::hasclearcolorbug (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesAndroid16hasClearColorBugE"]], "devicedriverissuesbase (c++ struct)": [[52, "_CPPv422DeviceDriverIssuesBase"]], "devicedriverissuesbase::hasbrokenbaseinstanceid (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase23hasBrokenBaseInstanceIDE"]], "devicedriverissuesbase::hasbrokencomputeformattedoutput (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase31hasBrokenComputeFormattedOutputE"]], "devicedriverissuesbase::hasbrokenmtrecreateimage (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase24hasBrokenMTRecreateImageE"]], "devicedriverissuesbase::hasbrokensrgbconverionwithmrt (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase29hasBrokenSRGBConverionWithMRTE"]], "devicedriverissuesbase::hasbrokenshadersafterappswitch (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase30hasBrokenShadersAfterAppSwitchE"]], "devicedriverissuesbase::hasbrokensubpasses (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase18hasBrokenSubpassesE"]], "devicedriverissuesbase::hasclearcolorbug (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase16hasClearColorBugE"]], "devicedriverissuesbase::hascomputecannotwrite3dtex (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase26hasComputeCanNotWrite3DTexE"]], "devicedriverissuesbase::hascomputetimelimited (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase21hasComputeTimeLimitedE"]], "devicedriverissuesbase::hasignoredevicelost (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase19hasIgnoreDeviceLostE"]], "devicedriverissuesbase::hasmultisampledandinstancinghang (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase32hasMultisampledAndInstancingHangE"]], "devicedriverissuesbase::haspolldevicefences (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase19hasPollDeviceFencesE"]], "devicedriverissuesbase::hasrenderpasscleardatarace (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase26hasRenderPassClearDataRaceE"]], "devicedriverissuesbase::hassmallsampledbuffers (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase22hasSmallSampledBuffersE"]], "devicedriverissuesbase::hasstrictrenderpassesonly (c++ member)": [[52, "_CPPv4N22DeviceDriverIssuesBase25hasStrictRenderPassesOnlyE"]], "devicedriverissuesnoissues (c++ struct)": [[52, "_CPPv426DeviceDriverIssuesNoIssues"]], "devicedriverissuesnoissues::hasclearcolorbug (c++ member)": [[52, "_CPPv4N26DeviceDriverIssuesNoIssues16hasClearColorBugE"]], "devicedriverissueswindows (c++ struct)": [[52, "_CPPv425DeviceDriverIssuesWindows"]], "devicedriverissueswindows::hasbrokenbaseinstanceid (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows23hasBrokenBaseInstanceIDE"]], "devicedriverissueswindows::hasbrokencomputeformattedoutput (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows31hasBrokenComputeFormattedOutputE"]], "devicedriverissueswindows::hasbrokenmtrecreateimage (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows24hasBrokenMTRecreateImageE"]], "devicedriverissueswindows::hasbrokensrgbconverionwithmrt (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows29hasBrokenSRGBConverionWithMRTE"]], "devicedriverissueswindows::hasbrokenshadersafterappswitch (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows30hasBrokenShadersAfterAppSwitchE"]], "devicedriverissueswindows::hasbrokensubpasses (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows18hasBrokenSubpassesE"]], "devicedriverissueswindows::hascomputecannotwrite3dtex (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows26hasComputeCanNotWrite3DTexE"]], "devicedriverissueswindows::hascomputetimelimited (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows21hasComputeTimeLimitedE"]], "devicedriverissueswindows::hasignoredevicelost (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows19hasIgnoreDeviceLostE"]], "devicedriverissueswindows::hasmultisampledandinstancinghang (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows32hasMultisampledAndInstancingHangE"]], "devicedriverissueswindows::haspolldevicefences (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows19hasPollDeviceFencesE"]], "devicedriverissueswindows::hasrenderpasscleardatarace (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows26hasRenderPassClearDataRaceE"]], "devicedriverissueswindows::hassmallsampledbuffers (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows22hasSmallSampledBuffersE"]], "devicedriverissueswindows::hasstrictrenderpassesonly (c++ member)": [[52, "_CPPv4N25DeviceDriverIssuesWindows25hasStrictRenderPassesOnlyE"]], "devicedriverraytraceproperties (c++ struct)": [[52, "_CPPv430DeviceDriverRaytraceProperties"]], "devicedriverraytraceproperties::accelerationstructurebuildscratchbufferoffsetalignment (c++ member)": [[52, "_CPPv4N30DeviceDriverRaytraceProperties54accelerationStructureBuildScratchBufferOffsetAlignmentE"]], "devicedriverraytraceproperties::maxrecursiondepth (c++ member)": [[52, "_CPPv4N30DeviceDriverRaytraceProperties17maxRecursionDepthE"]], "devicedriverraytraceproperties::topaccelerationstructureinstanceelementsize (c++ member)": [[52, "_CPPv4N30DeviceDriverRaytraceProperties43topAccelerationStructureInstanceElementSizeE"]], "devicedrivershadermodelversion (c++ type)": [[52, "_CPPv430DeviceDriverShaderModelVersion"]], "driver3ddesc (c++ struct)": [[52, "_CPPv412Driver3dDesc"]], "driver3ddesc::acmpfunc (c++ member)": [[52, "_CPPv4N12Driver3dDesc8acmpfuncE"]], "driver3ddesc::caps (c++ member)": [[52, "_CPPv4N12Driver3dDesc4capsE"]], "driver3ddesc::dblend (c++ member)": [[52, "_CPPv4N12Driver3dDesc6dblendE"]], "driver3ddesc::depthresolvemodes (c++ member)": [[52, "_CPPv4N12Driver3dDesc17depthResolveModesE"]], "driver3ddesc::is20arbitraryswizzleavailable (c++ member)": [[52, "_CPPv4N12Driver3dDesc29is20ArbitrarySwizzleAvailableE"]], "driver3ddesc::issues (c++ member)": [[52, "_CPPv4N12Driver3dDesc6issuesE"]], "driver3ddesc::maxsimrt (c++ member)": [[52, "_CPPv4N12Driver3dDesc8maxSimRTE"]], "driver3ddesc::maxwarpsize (c++ member)": [[52, "_CPPv4N12Driver3dDesc11maxWarpSizeE"]], "driver3ddesc::maxclipplanes (c++ member)": [[52, "_CPPv4N12Driver3dDesc13maxclipplanesE"]], "driver3ddesc::maxcubesize (c++ member)": [[52, "_CPPv4N12Driver3dDesc11maxcubesizeE"]], "driver3ddesc::maxprims (c++ member)": [[52, "_CPPv4N12Driver3dDesc8maxprimsE"]], "driver3ddesc::maxsimtex (c++ member)": [[52, "_CPPv4N12Driver3dDesc9maxsimtexE"]], "driver3ddesc::maxstreams (c++ member)": [[52, "_CPPv4N12Driver3dDesc10maxstreamsE"]], "driver3ddesc::maxstreamstr (c++ member)": [[52, "_CPPv4N12Driver3dDesc12maxstreamstrE"]], "driver3ddesc::maxtexaspect (c++ member)": [[52, "_CPPv4N12Driver3dDesc12maxtexaspectE"]], "driver3ddesc::maxtexcoord (c++ member)": [[52, "_CPPv4N12Driver3dDesc11maxtexcoordE"]], "driver3ddesc::maxtexh (c++ member)": [[52, "_CPPv4N12Driver3dDesc7maxtexhE"]], "driver3ddesc::maxtexw (c++ member)": [[52, "_CPPv4N12Driver3dDesc7maxtexwE"]], "driver3ddesc::maxvertexsamplers (c++ member)": [[52, "_CPPv4N12Driver3dDesc17maxvertexsamplersE"]], "driver3ddesc::maxvertind (c++ member)": [[52, "_CPPv4N12Driver3dDesc10maxvertindE"]], "driver3ddesc::maxvolsize (c++ member)": [[52, "_CPPv4N12Driver3dDesc10maxvolsizeE"]], "driver3ddesc::maxvpconsts (c++ member)": [[52, "_CPPv4N12Driver3dDesc11maxvpconstsE"]], "driver3ddesc::minwarpsize (c++ member)": [[52, "_CPPv4N12Driver3dDesc11minWarpSizeE"]], "driver3ddesc::mincubesize (c++ member)": [[52, "_CPPv4N12Driver3dDesc11mincubesizeE"]], "driver3ddesc::mintexh (c++ member)": [[52, "_CPPv4N12Driver3dDesc7mintexhE"]], "driver3ddesc::mintexw (c++ member)": [[52, "_CPPv4N12Driver3dDesc7mintexwE"]], "driver3ddesc::minvolsize (c++ member)": [[52, "_CPPv4N12Driver3dDesc10minvolsizeE"]], "driver3ddesc::raytrace (c++ member)": [[52, "_CPPv4N12Driver3dDesc8raytraceE"]], "driver3ddesc::sblend (c++ member)": [[52, "_CPPv4N12Driver3dDesc6sblendE"]], "driver3ddesc::shadermodel (c++ member)": [[52, "_CPPv4N12Driver3dDesc11shaderModelE"]], "driver3ddesc::upixofs (c++ member)": [[52, "_CPPv4N12Driver3dDesc7upixofsE"]], "driver3ddesc::variableratetexturetilesizex (c++ member)": [[52, "_CPPv4N12Driver3dDesc28variableRateTextureTileSizeXE"]], "driver3ddesc::variableratetexturetilesizey (c++ member)": [[52, "_CPPv4N12Driver3dDesc28variableRateTextureTileSizeYE"]], "driver3ddesc::vpixofs (c++ member)": [[52, "_CPPv4N12Driver3dDesc7vpixofsE"]], "driver3ddesc::zcmpfunc (c++ member)": [[52, "_CPPv4N12Driver3dDesc8zcmpfuncE"]], "fshader (c++ type)": [[52, "_CPPv47FSHADER"]], "fshtype (c++ type)": [[52, "_CPPv47FSHTYPE"]], "fsr2state (c++ enum)": [[52, "_CPPv49Fsr2State"]], "fsr2state::init_error (c++ enumerator)": [[52, "_CPPv4N9Fsr2State10INIT_ERRORE"]], "fsr2state::not_checked (c++ enumerator)": [[52, "_CPPv4N9Fsr2State11NOT_CHECKEDE"]], "fsr2state::ready (c++ enumerator)": [[52, "_CPPv4N9Fsr2State5READYE"]], "fsr2state::supported (c++ enumerator)": [[52, "_CPPv4N9Fsr2State9SUPPORTEDE"]], "get_vsdreg (c macro)": [[52, "c.GET_VSDREG"]], "get_vsdskip (c macro)": [[52, "c.GET_VSDSKIP"]], "get_vsdstream (c macro)": [[52, "c.GET_VSDSTREAM"]], "gpufencehandle (c++ type)": [[52, "_CPPv414GPUFENCEHANDLE"]], "gpupipeline (c++ enum)": [[52, "_CPPv411GpuPipeline"]], "gpupipeline::async_compute (c++ enumerator)": [[52, "_CPPv4N11GpuPipeline13ASYNC_COMPUTEE"]], "gpupipeline::graphics (c++ enumerator)": [[52, "_CPPv4N11GpuPipeline8GRAPHICSE"]], "gpupipeline::transfer (c++ enumerator)": [[52, "_CPPv4N11GpuPipeline8TRANSFERE"]], "hdroutputmode (c++ enum)": [[52, "_CPPv413HdrOutputMode"]], "hdroutputmode::hdr10_and_sdr (c++ enumerator)": [[52, "_CPPv4N13HdrOutputMode13HDR10_AND_SDRE"]], "hdroutputmode::hdr10_only (c++ enumerator)": [[52, "_CPPv4N13HdrOutputMode10HDR10_ONLYE"]], "hdroutputmode::hdr_only (c++ enumerator)": [[52, "_CPPv4N13HdrOutputMode8HDR_ONLYE"]], "hdroutputmode::sdr_only (c++ enumerator)": [[52, "_CPPv4N13HdrOutputMode8SDR_ONLYE"]], "make_vsdreg (c macro)": [[52, "c.MAKE_VSDREG"]], "make_vsdstream (c macro)": [[52, "c.MAKE_VSDSTREAM"]], "max_survey_index (c++ member)": [[52, "_CPPv416MAX_SURVEY_INDEX"]], "mtlfxupscalestate (c++ enum)": [[52, "_CPPv417MtlfxUpscaleState"]], "mtlfxupscalestate::ready (c++ enumerator)": [[52, "_CPPv4N17MtlfxUpscaleState5READYE"]], "mtlfxupscalestate::unsupported (c++ enumerator)": [[52, "_CPPv4N17MtlfxUpscaleState11UNSUPPORTEDE"]], "palid (c++ type)": [[52, "_CPPv45PALID"]], "program (c++ type)": [[52, "_CPPv47PROGRAM"]], "rt_transform_size (c++ member)": [[52, "_CPPv417RT_TRANSFORM_SIZE"]], "resourcebarrier (c++ enum)": [[52, "_CPPv415ResourceBarrier"]], "resourcebarrier::rb_alias_all (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier12RB_ALIAS_ALLE"]], "resourcebarrier::rb_alias_from (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier13RB_ALIAS_FROME"]], "resourcebarrier::rb_alias_to (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier11RB_ALIAS_TOE"]], "resourcebarrier::rb_alias_to_and_discard (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier23RB_ALIAS_TO_AND_DISCARDE"]], "resourcebarrier::rb_flag_acquire_pipeline_ownership (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier34RB_FLAG_ACQUIRE_PIPELINE_OWNERSHIPE"]], "resourcebarrier::rb_flag_dont_preserve_content (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier29RB_FLAG_DONT_PRESERVE_CONTENTE"]], "resourcebarrier::rb_flag_release_pipeline_ownership (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier34RB_FLAG_RELEASE_PIPELINE_OWNERSHIPE"]], "resourcebarrier::rb_flag_split_barrier_begin (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier27RB_FLAG_SPLIT_BARRIER_BEGINE"]], "resourcebarrier::rb_flag_split_barrier_end (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier25RB_FLAG_SPLIT_BARRIER_ENDE"]], "resourcebarrier::rb_flush_raytrace_acceleration_build_scratch_use (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier48RB_FLUSH_RAYTRACE_ACCELERATION_BUILD_SCRATCH_USEE"]], "resourcebarrier::rb_flush_uav (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier12RB_FLUSH_UAVE"]], "resourcebarrier::rb_none (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier7RB_NONEE"]], "resourcebarrier::rb_ro_blit_source (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier17RB_RO_BLIT_SOURCEE"]], "resourcebarrier::rb_ro_constant_buffer (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier21RB_RO_CONSTANT_BUFFERE"]], "resourcebarrier::rb_ro_constant_depth_stencil_target (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier35RB_RO_CONSTANT_DEPTH_STENCIL_TARGETE"]], "resourcebarrier::rb_ro_copy_source (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier17RB_RO_COPY_SOURCEE"]], "resourcebarrier::rb_ro_generic_read_buffer (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier25RB_RO_GENERIC_READ_BUFFERE"]], "resourcebarrier::rb_ro_generic_read_texture (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier26RB_RO_GENERIC_READ_TEXTUREE"]], "resourcebarrier::rb_ro_index_buffer (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier18RB_RO_INDEX_BUFFERE"]], "resourcebarrier::rb_ro_indirect_buffer (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier21RB_RO_INDIRECT_BUFFERE"]], "resourcebarrier::rb_ro_raytrace_acceleration_build_source (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier40RB_RO_RAYTRACE_ACCELERATION_BUILD_SOURCEE"]], "resourcebarrier::rb_ro_shader_binding_table (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier26RB_RO_SHADER_BINDING_TABLEE"]], "resourcebarrier::rb_ro_srv (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier9RB_RO_SRVE"]], "resourcebarrier::rb_ro_variable_rate_shading_texture (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier35RB_RO_VARIABLE_RATE_SHADING_TEXTUREE"]], "resourcebarrier::rb_ro_vertex_buffer (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier19RB_RO_VERTEX_BUFFERE"]], "resourcebarrier::rb_rw_blit_dest (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier15RB_RW_BLIT_DESTE"]], "resourcebarrier::rb_rw_copy_dest (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier15RB_RW_COPY_DESTE"]], "resourcebarrier::rb_rw_depth_stencil_target (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier26RB_RW_DEPTH_STENCIL_TARGETE"]], "resourcebarrier::rb_rw_render_target (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier19RB_RW_RENDER_TARGETE"]], "resourcebarrier::rb_rw_uav (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier9RB_RW_UAVE"]], "resourcebarrier::rb_source_stage_all_graphics (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier28RB_SOURCE_STAGE_ALL_GRAPHICSE"]], "resourcebarrier::rb_source_stage_all_shaders (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier27RB_SOURCE_STAGE_ALL_SHADERSE"]], "resourcebarrier::rb_source_stage_compute (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier23RB_SOURCE_STAGE_COMPUTEE"]], "resourcebarrier::rb_source_stage_pixel (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier21RB_SOURCE_STAGE_PIXELE"]], "resourcebarrier::rb_source_stage_raytrace (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier24RB_SOURCE_STAGE_RAYTRACEE"]], "resourcebarrier::rb_source_stage_vertex (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier22RB_SOURCE_STAGE_VERTEXE"]], "resourcebarrier::rb_stage_all_graphics (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier21RB_STAGE_ALL_GRAPHICSE"]], "resourcebarrier::rb_stage_all_shaders (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier20RB_STAGE_ALL_SHADERSE"]], "resourcebarrier::rb_stage_compute (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier16RB_STAGE_COMPUTEE"]], "resourcebarrier::rb_stage_pixel (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier14RB_STAGE_PIXELE"]], "resourcebarrier::rb_stage_raytrace (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier17RB_STAGE_RAYTRACEE"]], "resourcebarrier::rb_stage_vertex (c++ enumerator)": [[52, "_CPPv4N15ResourceBarrier15RB_STAGE_VERTEXE"]], "shaderstage (c++ enum)": [[52, "_CPPv411ShaderStage"]], "shaderstage::stage_cs (c++ enumerator)": [[52, "_CPPv4N11ShaderStage8STAGE_CSE"]], "shaderstage::stage_cs_async_state (c++ enumerator)": [[52, "_CPPv4N11ShaderStage20STAGE_CS_ASYNC_STATEE"]], "shaderstage::stage_max (c++ enumerator)": [[52, "_CPPv4N11ShaderStage9STAGE_MAXE"]], "shaderstage::stage_max_ext (c++ enumerator)": [[52, "_CPPv4N11ShaderStage13STAGE_MAX_EXTE"]], "shaderstage::stage_ps (c++ enumerator)": [[52, "_CPPv4N11ShaderStage8STAGE_PSE"]], "shaderstage::stage_raytrace (c++ enumerator)": [[52, "_CPPv4N11ShaderStage14STAGE_RAYTRACEE"]], "shaderstage::stage_vs (c++ enumerator)": [[52, "_CPPv4N11ShaderStage8STAGE_VSE"]], "vdecl (c++ type)": [[52, "_CPPv45VDECL"]], "vprog (c++ type)": [[52, "_CPPv45VPROG"]], "vprtype (c++ type)": [[52, "_CPPv47VPRTYPE"]], "vsdop_input (c macro)": [[52, "c.VSDOP_INPUT"]], "vsdop_mask (c macro)": [[52, "c.VSDOP_MASK"]], "vsdop_stream (c macro)": [[52, "c.VSDOP_STREAM"]], "vsdr_blendind (c macro)": [[52, "c.VSDR_BLENDIND"]], "vsdr_blendw (c macro)": [[52, "c.VSDR_BLENDW"]], "vsdr_diff (c macro)": [[52, "c.VSDR_DIFF"]], "vsdr_mask (c macro)": [[52, "c.VSDR_MASK"]], "vsdr_norm (c macro)": [[52, "c.VSDR_NORM"]], "vsdr_norm2 (c macro)": [[52, "c.VSDR_NORM2"]], "vsdr_pos (c macro)": [[52, "c.VSDR_POS"]], "vsdr_pos2 (c macro)": [[52, "c.VSDR_POS2"]], "vsdr_psize (c macro)": [[52, "c.VSDR_PSIZE"]], "vsdr_spec (c macro)": [[52, "c.VSDR_SPEC"]], "vsdr_texc0 (c macro)": [[52, "c.VSDR_TEXC0"]], "vsdr_texc1 (c macro)": [[52, "c.VSDR_TEXC1"]], "vsdr_texc10 (c macro)": [[52, "c.VSDR_TEXC10"]], "vsdr_texc11 (c macro)": [[52, "c.VSDR_TEXC11"]], "vsdr_texc12 (c macro)": [[52, "c.VSDR_TEXC12"]], "vsdr_texc13 (c macro)": [[52, "c.VSDR_TEXC13"]], "vsdr_texc14 (c macro)": [[52, "c.VSDR_TEXC14"]], "vsdr_texc15 (c macro)": [[52, "c.VSDR_TEXC15"]], "vsdr_texc2 (c macro)": [[52, "c.VSDR_TEXC2"]], "vsdr_texc3 (c macro)": [[52, "c.VSDR_TEXC3"]], "vsdr_texc4 (c macro)": [[52, "c.VSDR_TEXC4"]], "vsdr_texc5 (c macro)": [[52, "c.VSDR_TEXC5"]], "vsdr_texc6 (c macro)": [[52, "c.VSDR_TEXC6"]], "vsdr_texc7 (c macro)": [[52, "c.VSDR_TEXC7"]], "vsdr_texc8 (c macro)": [[52, "c.VSDR_TEXC8"]], "vsdr_texc9 (c macro)": [[52, "c.VSDR_TEXC9"]], "vsds_mask (c macro)": [[52, "c.VSDS_MASK"]], "vsds_per_instance_data (c macro)": [[52, "c.VSDS_PER_INSTANCE_DATA"]], "vsdtype (c++ type)": [[52, "_CPPv47VSDTYPE"]], "vsdt_dec3n (c macro)": [[52, "c.VSDT_DEC3N"]], "vsdt_e3dcolor (c macro)": [[52, "c.VSDT_E3DCOLOR"]], "vsdt_float1 (c macro)": [[52, "c.VSDT_FLOAT1"]], "vsdt_float2 (c macro)": [[52, "c.VSDT_FLOAT2"]], "vsdt_float3 (c macro)": [[52, "c.VSDT_FLOAT3"]], "vsdt_float4 (c macro)": [[52, "c.VSDT_FLOAT4"]], "vsdt_half2 (c macro)": [[52, "c.VSDT_HALF2"]], "vsdt_half4 (c macro)": [[52, "c.VSDT_HALF4"]], "vsdt_int1 (c macro)": [[52, "c.VSDT_INT1"]], "vsdt_int2 (c macro)": [[52, "c.VSDT_INT2"]], "vsdt_int3 (c macro)": [[52, "c.VSDT_INT3"]], "vsdt_int4 (c macro)": [[52, "c.VSDT_INT4"]], "vsdt_mask (c macro)": [[52, "c.VSDT_MASK"]], "vsdt_short2 (c macro)": [[52, "c.VSDT_SHORT2"]], "vsdt_short2n (c macro)": [[52, "c.VSDT_SHORT2N"]], "vsdt_short4 (c macro)": [[52, "c.VSDT_SHORT4"]], "vsdt_short4n (c macro)": [[52, "c.VSDT_SHORT4N"]], "vsdt_ubyte4 (c macro)": [[52, "c.VSDT_UBYTE4"]], "vsdt_udec3 (c macro)": [[52, "c.VSDT_UDEC3"]], "vsdt_uint1 (c macro)": [[52, "c.VSDT_UINT1"]], "vsdt_uint2 (c macro)": [[52, "c.VSDT_UINT2"]], "vsdt_uint3 (c macro)": [[52, "c.VSDT_UINT3"]], "vsdt_uint4 (c macro)": [[52, "c.VSDT_UINT4"]], "vsdt_ushort2n (c macro)": [[52, "c.VSDT_USHORT2N"]], "vsdt_ushort4n (c macro)": [[52, "c.VSDT_USHORT4N"]], "vsd_end (c macro)": [[52, "c.VSD_END"]], "vsd_reg (c macro)": [[52, "c.VSD_REG"]], "vsd_skip (c macro)": [[52, "c.VSD_SKIP"]], "vsd_skipflg (c macro)": [[52, "c.VSD_SKIPFLG"]], "vsd_stream (c macro)": [[52, "c.VSD_STREAM"]], "vsd_stream_per_instance_data (c macro)": [[52, "c.VSD_STREAM_PER_INSTANCE_DATA"]], "vsd_stream_per_vertex_data (c macro)": [[52, "c.VSD_STREAM_PER_VERTEX_DATA"]], "vstreamsrc_indexed_data (c macro)": [[52, "c.VSTREAMSRC_INDEXED_DATA"]], "vstreamsrc_instance_data (c macro)": [[52, "c.VSTREAMSRC_INSTANCE_DATA"]], "vstreamsrc_normal_data (c macro)": [[52, "c.VSTREAMSRC_NORMAL_DATA"]], "variablerateshadingcombiner (c++ enum)": [[52, "_CPPv427VariableRateShadingCombiner"]], "variablerateshadingcombiner::vrs_max (c++ enumerator)": [[52, "_CPPv4N27VariableRateShadingCombiner7VRS_MAXE"]], "variablerateshadingcombiner::vrs_min (c++ enumerator)": [[52, "_CPPv4N27VariableRateShadingCombiner7VRS_MINE"]], "variablerateshadingcombiner::vrs_override (c++ enumerator)": [[52, "_CPPv4N27VariableRateShadingCombiner12VRS_OVERRIDEE"]], "variablerateshadingcombiner::vrs_passthrough (c++ enumerator)": [[52, "_CPPv4N27VariableRateShadingCombiner15VRS_PASSTHROUGHE"]], "variablerateshadingcombiner::vrs_sum (c++ enumerator)": [[52, "_CPPv4N27VariableRateShadingCombiner7VRS_SUME"]], "xessstate (c++ enum)": [[52, "_CPPv49XessState"]], "xessstate::disabled (c++ enumerator)": [[52, "_CPPv4N9XessState8DISABLEDE"]], "xessstate::init_error_unknown (c++ enumerator)": [[52, "_CPPv4N9XessState18INIT_ERROR_UNKNOWNE"]], "xessstate::ready (c++ enumerator)": [[52, "_CPPv4N9XessState5READYE"]], "xessstate::supported (c++ enumerator)": [[52, "_CPPv4N9XessState9SUPPORTEDE"]], "xessstate::unsupported_device (c++ enumerator)": [[52, "_CPPv4N9XessState18UNSUPPORTED_DEVICEE"]], "xessstate::unsupported_driver (c++ enumerator)": [[52, "_CPPv4N9XessState18UNSUPPORTED_DRIVERE"]], "[anonymous]::clear_discard (c++ enumerator)": [[52, "_CPPv4NUt2_5113CLEAR_DISCARDE"]], "[anonymous]::clear_discard_stencil (c++ enumerator)": [[52, "_CPPv4NUt2_5121CLEAR_DISCARD_STENCILE"]], "[anonymous]::clear_discard_target (c++ enumerator)": [[52, "_CPPv4NUt2_5120CLEAR_DISCARD_TARGETE"]], "[anonymous]::clear_discard_zbuffer (c++ enumerator)": [[52, "_CPPv4NUt2_5121CLEAR_DISCARD_ZBUFFERE"]], "[anonymous]::clear_stencil (c++ enumerator)": [[52, "_CPPv4NUt2_5113CLEAR_STENCILE"]], "[anonymous]::clear_target (c++ enumerator)": [[52, "_CPPv4NUt2_5112CLEAR_TARGETE"]], "[anonymous]::clear_zbuffer (c++ enumerator)": [[52, "_CPPv4NUt2_5113CLEAR_ZBUFFERE"]], "[anonymous]::drv3d_framerate_limited_by_gpu_utilization (c++ enumerator)": [[52, "_CPPv4NUt2_4642DRV3D_FRAMERATE_LIMITED_BY_GPU_UTILIZATIONE"]], "[anonymous]::drv3d_framerate_limited_by_nothing (c++ enumerator)": [[52, "_CPPv4NUt2_4634DRV3D_FRAMERATE_LIMITED_BY_NOTHINGE"]], "[anonymous]::drv3d_framerate_limited_by_replay_underfeed (c++ enumerator)": [[52, "_CPPv4NUt2_4643DRV3D_FRAMERATE_LIMITED_BY_REPLAY_UNDERFEEDE"]], "[anonymous]::drv3d_framerate_limited_by_replay_wait (c++ enumerator)": [[52, "_CPPv4NUt2_4638DRV3D_FRAMERATE_LIMITED_BY_REPLAY_WAITE"]], "[anonymous]::maxsamplers (c++ enumerator)": [[52, "_CPPv4NUt2_4011MAXSAMPLERSE"]], "[anonymous]::maxsamplers_vs (c++ enumerator)": [[52, "_CPPv4NUt2_4014MAXSAMPLERS_VSE"]], "[anonymous]::maxstreams (c++ enumerator)": [[52, "_CPPv4NUt2_4010MAXSTREAMSE"]], "[anonymous]::max_sli_afrs (c++ enumerator)": [[52, "_CPPv4NUt2_4012MAX_SLI_AFRSE"]], "[anonymous]::prim_4_control_points (c++ enumerator)": [[52, "_CPPv4NUt2_4921PRIM_4_CONTROL_POINTSE"]], "[anonymous]::prim_count (c++ enumerator)": [[52, "_CPPv4NUt2_4910PRIM_COUNTE"]], "[anonymous]::prim_linelist (c++ enumerator)": [[52, "_CPPv4NUt2_4913PRIM_LINELISTE"]], "[anonymous]::prim_linestrip (c++ enumerator)": [[52, "_CPPv4NUt2_4914PRIM_LINESTRIPE"]], "[anonymous]::prim_pointlist (c++ enumerator)": [[52, "_CPPv4NUt2_4914PRIM_POINTLISTE"]], "[anonymous]::prim_trifan (c++ enumerator)": [[52, "_CPPv4NUt2_4911PRIM_TRIFANE"]], "[anonymous]::prim_trilist (c++ enumerator)": [[52, "_CPPv4NUt2_4912PRIM_TRILISTE"]], "[anonymous]::prim_tristrip (c++ enumerator)": [[52, "_CPPv4NUt2_4913PRIM_TRISTRIPE"]], "[anonymous]::sbcf_align16 (c++ enumerator)": [[52, "_CPPv4NUt2_4212SBCF_ALIGN16E"]], "[anonymous]::sbcf_bind_constant (c++ enumerator)": [[52, "_CPPv4NUt2_4218SBCF_BIND_CONSTANTE"]], "[anonymous]::sbcf_bind_index (c++ enumerator)": [[52, "_CPPv4NUt2_4215SBCF_BIND_INDEXE"]], "[anonymous]::sbcf_bind_mask (c++ enumerator)": [[52, "_CPPv4NUt2_4214SBCF_BIND_MASKE"]], "[anonymous]::sbcf_bind_shader_res (c++ enumerator)": [[52, "_CPPv4NUt2_4220SBCF_BIND_SHADER_RESE"]], "[anonymous]::sbcf_bind_unordered (c++ enumerator)": [[52, "_CPPv4NUt2_4219SBCF_BIND_UNORDEREDE"]], "[anonymous]::sbcf_bind_vertex (c++ enumerator)": [[52, "_CPPv4NUt2_4216SBCF_BIND_VERTEXE"]], "[anonymous]::sbcf_cb_one_frame (c++ enumerator)": [[52, "_CPPv4NUt2_4217SBCF_CB_ONE_FRAMEE"]], "[anonymous]::sbcf_cb_persistent (c++ enumerator)": [[52, "_CPPv4NUt2_4218SBCF_CB_PERSISTENTE"]], "[anonymous]::sbcf_cpu_access_mask (c++ enumerator)": [[52, "_CPPv4NUt2_4220SBCF_CPU_ACCESS_MASKE"]], "[anonymous]::sbcf_cpu_access_read (c++ enumerator)": [[52, "_CPPv4NUt2_4220SBCF_CPU_ACCESS_READE"]], "[anonymous]::sbcf_cpu_access_write (c++ enumerator)": [[52, "_CPPv4NUt2_4221SBCF_CPU_ACCESS_WRITEE"]], "[anonymous]::sbcf_dynamic (c++ enumerator)": [[52, "_CPPv4NUt2_4212SBCF_DYNAMICE"]], "[anonymous]::sbcf_framemem (c++ enumerator)": [[52, "_CPPv4NUt2_4213SBCF_FRAMEMEME"]], "[anonymous]::sbcf_index32 (c++ enumerator)": [[52, "_CPPv4NUt2_4212SBCF_INDEX32E"]], "[anonymous]::sbcf_indirect (c++ enumerator)": [[52, "_CPPv4NUt2_4213SBCF_INDIRECTE"]], "[anonymous]::sbcf_misc_allow_raw (c++ enumerator)": [[52, "_CPPv4NUt2_4219SBCF_MISC_ALLOW_RAWE"]], "[anonymous]::sbcf_misc_drawindirect (c++ enumerator)": [[52, "_CPPv4NUt2_4222SBCF_MISC_DRAWINDIRECTE"]], "[anonymous]::sbcf_misc_esram_only (c++ enumerator)": [[52, "_CPPv4NUt2_4220SBCF_MISC_ESRAM_ONLYE"]], "[anonymous]::sbcf_misc_mask (c++ enumerator)": [[52, "_CPPv4NUt2_4214SBCF_MISC_MASKE"]], "[anonymous]::sbcf_misc_structured (c++ enumerator)": [[52, "_CPPv4NUt2_4220SBCF_MISC_STRUCTUREDE"]], "[anonymous]::sbcf_staging_buffer (c++ enumerator)": [[52, "_CPPv4NUt2_4219SBCF_STAGING_BUFFERE"]], "[anonymous]::sbcf_ua_byte_address (c++ enumerator)": [[52, "_CPPv4NUt2_4220SBCF_UA_BYTE_ADDRESSE"]], "[anonymous]::sbcf_ua_byte_address_readback (c++ enumerator)": [[52, "_CPPv4NUt2_4229SBCF_UA_BYTE_ADDRESS_READBACKE"]], "[anonymous]::sbcf_ua_indirect (c++ enumerator)": [[52, "_CPPv4NUt2_4216SBCF_UA_INDIRECTE"]], "[anonymous]::sbcf_ua_sr_byte_address (c++ enumerator)": [[52, "_CPPv4NUt2_4223SBCF_UA_SR_BYTE_ADDRESSE"]], "[anonymous]::sbcf_ua_sr_structured (c++ enumerator)": [[52, "_CPPv4NUt2_4221SBCF_UA_SR_STRUCTUREDE"]], "[anonymous]::sbcf_ua_structured (c++ enumerator)": [[52, "_CPPv4NUt2_4218SBCF_UA_STRUCTUREDE"]], "[anonymous]::sbcf_ua_structured_readback (c++ enumerator)": [[52, "_CPPv4NUt2_4227SBCF_UA_STRUCTURED_READBACKE"]], "[anonymous]::sbcf_usage_accelleration_structure_build_scratch_space (c++ enumerator)": [[52, "_CPPv4NUt2_4254SBCF_USAGE_ACCELLERATION_STRUCTURE_BUILD_SCRATCH_SPACEE"]], "[anonymous]::sbcf_usage_read_back (c++ enumerator)": [[52, "_CPPv4NUt2_4220SBCF_USAGE_READ_BACKE"]], "[anonymous]::sbcf_usage_shader_binding_table (c++ enumerator)": [[52, "_CPPv4NUt2_4231SBCF_USAGE_SHADER_BINDING_TABLEE"]], "[anonymous]::sbcf_zeromem (c++ enumerator)": [[52, "_CPPv4NUt2_4212SBCF_ZEROMEME"]], "[anonymous]::stnclop_decr (c++ enumerator)": [[52, "_CPPv4NUt2_5212STNCLOP_DECRE"]], "[anonymous]::stnclop_decrsat (c++ enumerator)": [[52, "_CPPv4NUt2_5215STNCLOP_DECRSATE"]], "[anonymous]::stnclop_incr (c++ enumerator)": [[52, "_CPPv4NUt2_5212STNCLOP_INCRE"]], "[anonymous]::stnclop_incrsat (c++ enumerator)": [[52, "_CPPv4NUt2_5215STNCLOP_INCRSATE"]], "[anonymous]::stnclop_invert (c++ enumerator)": [[52, "_CPPv4NUt2_5214STNCLOP_INVERTE"]], "[anonymous]::stnclop_keep (c++ enumerator)": [[52, "_CPPv4NUt2_5212STNCLOP_KEEPE"]], "[anonymous]::stnclop_replace (c++ enumerator)": [[52, "_CPPv4NUt2_5215STNCLOP_REPLACEE"]], "[anonymous]::stnclop_zero (c++ enumerator)": [[52, "_CPPv4NUt2_5212STNCLOP_ZEROE"]], "[anonymous]::texaddr_border (c++ enumerator)": [[52, "_CPPv4NUt2_5314TEXADDR_BORDERE"]], "[anonymous]::texaddr_clamp (c++ enumerator)": [[52, "_CPPv4NUt2_5313TEXADDR_CLAMPE"]], "[anonymous]::texaddr_mirror (c++ enumerator)": [[52, "_CPPv4NUt2_5314TEXADDR_MIRRORE"]], "[anonymous]::texaddr_mirroronce (c++ enumerator)": [[52, "_CPPv4NUt2_5318TEXADDR_MIRRORONCEE"]], "[anonymous]::texaddr_wrap (c++ enumerator)": [[52, "_CPPv4NUt2_5312TEXADDR_WRAPE"]], "[anonymous]::texfilter_best (c++ enumerator)": [[52, "_CPPv4NUt2_5414TEXFILTER_BESTE"]], "[anonymous]::texfilter_compare (c++ enumerator)": [[52, "_CPPv4NUt2_5417TEXFILTER_COMPAREE"]], "[anonymous]::texfilter_default (c++ enumerator)": [[52, "_CPPv4NUt2_5417TEXFILTER_DEFAULTE"]], "[anonymous]::texfilter_linear (c++ enumerator)": [[52, "_CPPv4NUt2_5416TEXFILTER_LINEARE"]], "[anonymous]::texfilter_none (c++ enumerator)": [[52, "_CPPv4NUt2_5414TEXFILTER_NONEE"]], "[anonymous]::texfilter_point (c++ enumerator)": [[52, "_CPPv4NUt2_5415TEXFILTER_POINTE"]], "[anonymous]::tm_global (c++ enumerator)": [[52, "_CPPv4NUt2_509TM_GLOBALE"]], "[anonymous]::tm_local2view (c++ enumerator)": [[52, "_CPPv4NUt2_5013TM_LOCAL2VIEWE"]], "[anonymous]::tm_proj (c++ enumerator)": [[52, "_CPPv4NUt2_507TM_PROJE"]], "[anonymous]::tm_view (c++ enumerator)": [[52, "_CPPv4NUt2_507TM_VIEWE"]], "[anonymous]::tm_view2local (c++ enumerator)": [[52, "_CPPv4NUt2_5013TM_VIEW2LOCALE"]], "[anonymous]::tm_world (c++ enumerator)": [[52, "_CPPv4NUt2_508TM_WORLDE"]], "[anonymous]::tm__num (c++ enumerator)": [[52, "_CPPv4NUt2_507TM__NUME"]], "[anonymous]::vblock_discard (c++ enumerator)": [[52, "_CPPv4NUt2_4814VBLOCK_DISCARDE"]], "[anonymous]::vblock_nooverwrite (c++ enumerator)": [[52, "_CPPv4NUt2_4818VBLOCK_NOOVERWRITEE"]], "[anonymous]::vblock_nosyslock (c++ enumerator)": [[52, "_CPPv4NUt2_4816VBLOCK_NOSYSLOCKE"]], "[anonymous]::vblock_readonly (c++ enumerator)": [[52, "_CPPv4NUt2_4815VBLOCK_READONLYE"]], "[anonymous]::vblock_writeonly (c++ enumerator)": [[52, "_CPPv4NUt2_4816VBLOCK_WRITEONLYE"]], "[anonymous]::vcdest_amb (c++ enumerator)": [[52, "_CPPv4NUt2_4410VCDEST_AMBE"]], "[anonymous]::vcdest_amb_diff (c++ enumerator)": [[52, "_CPPv4NUt2_4415VCDEST_AMB_DIFFE"]], "[anonymous]::vcdest_diff (c++ enumerator)": [[52, "_CPPv4NUt2_4411VCDEST_DIFFE"]], "[anonymous]::vcdest_emis (c++ enumerator)": [[52, "_CPPv4NUt2_4411VCDEST_EMISE"]], "[anonymous]::vcdest_none (c++ enumerator)": [[52, "_CPPv4NUt2_4411VCDEST_NONEE"]], "[anonymous]::vcdest_spec (c++ enumerator)": [[52, "_CPPv4NUt2_4411VCDEST_SPECE"]], "[anonymous]::vdeclusage_binorm (c++ enumerator)": [[52, "_CPPv4NUt2_4117VDECLUSAGE_BINORME"]], "[anonymous]::vdeclusage_blendind (c++ enumerator)": [[52, "_CPPv4NUt2_4119VDECLUSAGE_BLENDINDE"]], "[anonymous]::vdeclusage_blendw (c++ enumerator)": [[52, "_CPPv4NUt2_4117VDECLUSAGE_BLENDWE"]], "[anonymous]::vdeclusage_color (c++ enumerator)": [[52, "_CPPv4NUt2_4116VDECLUSAGE_COLORE"]], "[anonymous]::vdeclusage_depth (c++ enumerator)": [[52, "_CPPv4NUt2_4116VDECLUSAGE_DEPTHE"]], "[anonymous]::vdeclusage_fog (c++ enumerator)": [[52, "_CPPv4NUt2_4114VDECLUSAGE_FOGE"]], "[anonymous]::vdeclusage_norm (c++ enumerator)": [[52, "_CPPv4NUt2_4115VDECLUSAGE_NORME"]], "[anonymous]::vdeclusage_pos (c++ enumerator)": [[52, "_CPPv4NUt2_4114VDECLUSAGE_POSE"]], "[anonymous]::vdeclusage_psize (c++ enumerator)": [[52, "_CPPv4NUt2_4116VDECLUSAGE_PSIZEE"]], "[anonymous]::vdeclusage_sample (c++ enumerator)": [[52, "_CPPv4NUt2_4117VDECLUSAGE_SAMPLEE"]], "[anonymous]::vdeclusage_tang (c++ enumerator)": [[52, "_CPPv4NUt2_4115VDECLUSAGE_TANGE"]], "[anonymous]::vdeclusage_tc (c++ enumerator)": [[52, "_CPPv4NUt2_4113VDECLUSAGE_TCE"]], "[anonymous]::vdeclusage_tessfactor (c++ enumerator)": [[52, "_CPPv4NUt2_4121VDECLUSAGE_TESSFACTORE"]], "[anonymous]::vdeclusage_tpos (c++ enumerator)": [[52, "_CPPv4NUt2_4115VDECLUSAGE_TPOSE"]], "[anonymous]::wrap_coord0 (c++ enumerator)": [[52, "_CPPv4NUt2_4311WRAP_COORD0E"]], "[anonymous]::wrap_coord1 (c++ enumerator)": [[52, "_CPPv4NUt2_4311WRAP_COORD1E"]], "[anonymous]::wrap_coord2 (c++ enumerator)": [[52, "_CPPv4NUt2_4311WRAP_COORD2E"]], "[anonymous]::wrap_coord3 (c++ enumerator)": [[52, "_CPPv4NUt2_4311WRAP_COORD3E"]], "[anonymous]::writemask_all (c++ enumerator)": [[52, "_CPPv4NUt2_4513WRITEMASK_ALLE"]], "[anonymous]::writemask_alpha (c++ enumerator)": [[52, "_CPPv4NUt2_4515WRITEMASK_ALPHAE"]], "[anonymous]::writemask_alpha0 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_ALPHA0E"]], "[anonymous]::writemask_alpha1 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_ALPHA1E"]], "[anonymous]::writemask_alpha2 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_ALPHA2E"]], "[anonymous]::writemask_alpha3 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_ALPHA3E"]], "[anonymous]::writemask_alpha4 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_ALPHA4E"]], "[anonymous]::writemask_alpha5 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_ALPHA5E"]], "[anonymous]::writemask_alpha6 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_ALPHA6E"]], "[anonymous]::writemask_alpha7 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_ALPHA7E"]], "[anonymous]::writemask_blue (c++ enumerator)": [[52, "_CPPv4NUt2_4514WRITEMASK_BLUEE"]], "[anonymous]::writemask_blue0 (c++ enumerator)": [[52, "_CPPv4NUt2_4515WRITEMASK_BLUE0E"]], "[anonymous]::writemask_blue1 (c++ enumerator)": [[52, "_CPPv4NUt2_4515WRITEMASK_BLUE1E"]], "[anonymous]::writemask_blue2 (c++ enumerator)": [[52, "_CPPv4NUt2_4515WRITEMASK_BLUE2E"]], "[anonymous]::writemask_blue3 (c++ enumerator)": [[52, "_CPPv4NUt2_4515WRITEMASK_BLUE3E"]], "[anonymous]::writemask_blue4 (c++ enumerator)": [[52, "_CPPv4NUt2_4515WRITEMASK_BLUE4E"]], "[anonymous]::writemask_blue5 (c++ enumerator)": [[52, "_CPPv4NUt2_4515WRITEMASK_BLUE5E"]], "[anonymous]::writemask_blue6 (c++ enumerator)": [[52, "_CPPv4NUt2_4515WRITEMASK_BLUE6E"]], "[anonymous]::writemask_blue7 (c++ enumerator)": [[52, "_CPPv4NUt2_4515WRITEMASK_BLUE7E"]], "[anonymous]::writemask_default (c++ enumerator)": [[52, "_CPPv4NUt2_4517WRITEMASK_DEFAULTE"]], "[anonymous]::writemask_green (c++ enumerator)": [[52, "_CPPv4NUt2_4515WRITEMASK_GREENE"]], "[anonymous]::writemask_green0 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_GREEN0E"]], "[anonymous]::writemask_green1 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_GREEN1E"]], "[anonymous]::writemask_green2 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_GREEN2E"]], "[anonymous]::writemask_green3 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_GREEN3E"]], "[anonymous]::writemask_green4 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_GREEN4E"]], "[anonymous]::writemask_green5 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_GREEN5E"]], "[anonymous]::writemask_green6 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_GREEN6E"]], "[anonymous]::writemask_green7 (c++ enumerator)": [[52, "_CPPv4NUt2_4516WRITEMASK_GREEN7E"]], "[anonymous]::writemask_red (c++ enumerator)": [[52, "_CPPv4NUt2_4513WRITEMASK_REDE"]], "[anonymous]::writemask_red0 (c++ enumerator)": [[52, "_CPPv4NUt2_4514WRITEMASK_RED0E"]], "[anonymous]::writemask_red1 (c++ enumerator)": [[52, "_CPPv4NUt2_4514WRITEMASK_RED1E"]], "[anonymous]::writemask_red2 (c++ enumerator)": [[52, "_CPPv4NUt2_4514WRITEMASK_RED2E"]], "[anonymous]::writemask_red3 (c++ enumerator)": [[52, "_CPPv4NUt2_4514WRITEMASK_RED3E"]], "[anonymous]::writemask_red4 (c++ enumerator)": [[52, "_CPPv4NUt2_4514WRITEMASK_RED4E"]], "[anonymous]::writemask_red5 (c++ enumerator)": [[52, "_CPPv4NUt2_4514WRITEMASK_RED5E"]], "[anonymous]::writemask_red6 (c++ enumerator)": [[52, "_CPPv4NUt2_4514WRITEMASK_RED6E"]], "[anonymous]::writemask_red7 (c++ enumerator)": [[52, "_CPPv4NUt2_4514WRITEMASK_RED7E"]], "[anonymous]::writemask_rgb (c++ enumerator)": [[52, "_CPPv4NUt2_4513WRITEMASK_RGBE"]], "operator& (c++ function)": [[52, "_CPPv4an15ResourceBarrier15ResourceBarrier"]], "operator^ (c++ function)": [[52, "_CPPv4eo15ResourceBarrier15ResourceBarrier"]], "d3d_has_quads (c macro)": [[53, "c.D3D_HAS_QUADS"]], "d3d::render_to_whole_array (c++ member)": [[53, "_CPPv4N3d3d21RENDER_TO_WHOLE_ARRAYE"]], "d3d::[anonymous] (c++ enum)": [[53, "_CPPv4N3d3dUt2_35E"], [53, "_CPPv4N3d3dUt2_36E"]], "d3d::[anonymous]::capfmt_r5g6b5 (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3613CAPFMT_R5G6B5E"]], "d3d::[anonymous]::capfmt_r8g8b8 (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3613CAPFMT_R8G8B8E"]], "d3d::[anonymous]::capfmt_x1r5g5b5 (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3615CAPFMT_X1R5G5B5E"]], "d3d::[anonymous]::capfmt_x8r8g8b8 (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3615CAPFMT_X8R8G8B8E"]], "d3d::[anonymous]::usage_autogenmips (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3517USAGE_AUTOGENMIPSE"]], "d3d::[anonymous]::usage_blend (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3511USAGE_BLENDE"]], "d3d::[anonymous]::usage_depth (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3511USAGE_DEPTHE"]], "d3d::[anonymous]::usage_filter (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3512USAGE_FILTERE"]], "d3d::[anonymous]::usage_pixreadwrite (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3518USAGE_PIXREADWRITEE"]], "d3d::[anonymous]::usage_rtarget (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3513USAGE_RTARGETE"]], "d3d::[anonymous]::usage_samplecmp (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3515USAGE_SAMPLECMPE"]], "d3d::[anonymous]::usage_srgbread (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3514USAGE_SRGBREADE"]], "d3d::[anonymous]::usage_srgbwrite (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3515USAGE_SRGBWRITEE"]], "d3d::[anonymous]::usage_texture (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3513USAGE_TEXTUREE"]], "d3d::[anonymous]::usage_tiled (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3511USAGE_TILEDE"]], "d3d::[anonymous]::usage_unordered (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3515USAGE_UNORDEREDE"]], "d3d::[anonymous]::usage_unordered_load (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3520USAGE_UNORDERED_LOADE"]], "d3d::[anonymous]::usage_vertextexture (c++ enumerator)": [[53, "_CPPv4N3d3dUt2_3519USAGE_VERTEXTEXTUREE"]], "d3d::beginevent (c++ function)": [[53, "_CPPv4N3d3d10beginEventEPKc"]], "d3d::begin_conditional_render (c++ function)": [[53, "_CPPv4N3d3d24begin_conditional_renderEi"]], "d3d::begin_survey (c++ function)": [[53, "_CPPv4N3d3d12begin_surveyEi"]], "d3d::capture_screen (c++ function)": [[53, "_CPPv4N3d3d14capture_screenERiRiRi"]], "d3d::change_screen_aspect_ratio (c++ function)": [[53, "_CPPv4N3d3d26change_screen_aspect_ratioEf"]], "d3d::create_predicate (c++ function)": [[53, "_CPPv4N3d3d16create_predicateEv"]], "d3d::device_lost (c++ function)": [[53, "_CPPv4N3d3d11device_lostEPb"]], "d3d::enable_vsync (c++ function)": [[53, "_CPPv4N3d3d12enable_vsyncEb"]], "d3d::endevent (c++ function)": [[53, "_CPPv4N3d3d8endEventEv"]], "d3d::end_conditional_render (c++ function)": [[53, "_CPPv4N3d3d22end_conditional_renderEi"]], "d3d::end_fast_capture_screen (c++ function)": [[53, "_CPPv4N3d3d23end_fast_capture_screenEv"]], "d3d::end_survey (c++ function)": [[53, "_CPPv4N3d3d10end_surveyEi"]], "d3d::fast_capture_screen (c++ function)": [[53, "_CPPv4N3d3d19fast_capture_screenERiRiRiRi"]], "d3d::fill_interface_table (c++ function)": [[53, "_CPPv4N3d3d20fill_interface_tableER17D3dInterfaceTable"]], "d3d::free_predicate (c++ function)": [[53, "_CPPv4N3d3d14free_predicateEi"]], "d3d::get_screen_aspect_ratio (c++ function)": [[53, "_CPPv4N3d3d23get_screen_aspect_ratioEv"]], "d3d::get_vrr_supported (c++ function)": [[53, "_CPPv4N3d3d17get_vrr_supportedEv"]], "d3d::get_vsync_enabled (c++ function)": [[53, "_CPPv4N3d3d17get_vsync_enabledEv"]], "d3d::gpu_latency_wait (c++ function)": [[53, "_CPPv4N3d3d16gpu_latency_waitEv"]], "d3d::init_driver (c++ function)": [[53, "_CPPv4N3d3d11init_driverEv"]], "d3d::init_video (c++ function)": [[53, "_CPPv4N3d3d10init_videoEPvP10main_wnd_fPKciRPvPvPvPKcP20Driver3dInitCallback"]], "d3d::insert_fence (c++ function)": [[53, "_CPPv4N3d3d12insert_fenceE11GpuPipeline"]], "d3d::insert_wait_on_fence (c++ function)": [[53, "_CPPv4N3d3d20insert_wait_on_fenceER14GPUFENCEHANDLE11GpuPipeline"]], "d3d::is_inited (c++ function)": [[53, "_CPPv4N3d3d9is_initedEv"]], "d3d::prefetch_movable_textures (c++ function)": [[53, "_CPPv4N3d3d25prefetch_movable_texturesEv"]], "d3d::prepare_for_destroy (c++ function)": [[53, "_CPPv4N3d3d19prepare_for_destroyEv"]], "d3d::register_before_window_destroyed_callback (c++ function)": [[53, "_CPPv4N3d3d41register_before_window_destroyed_callbackEN5eastl8functionIFvvEEE"]], "d3d::release_capture_buffer (c++ function)": [[53, "_CPPv4N3d3d22release_capture_bufferEv"]], "d3d::release_driver (c++ function)": [[53, "_CPPv4N3d3d14release_driverEv"]], "d3d::reset_device (c++ function)": [[53, "_CPPv4N3d3d12reset_deviceEv"]], "d3d::reset_esram_layout (c++ function)": [[53, "_CPPv4N3d3d18reset_esram_layoutEv"]], "d3d::resource_barrier (c++ function)": [[53, "_CPPv4N3d3d16resource_barrierE19ResourceBarrierDesc11GpuPipeline"]], "d3d::resummarize_htile (c++ function)": [[53, "_CPPv4N3d3d17resummarize_htileEP11BaseTexture"]], "d3d::set_esram_layout (c++ function)": [[53, "_CPPv4N3d3d16set_esram_layoutEPKw"]], "d3d::set_srgb_backbuffer_write (c++ function)": [[53, "_CPPv4N3d3d25set_srgb_backbuffer_writeEb"]], "d3d::setgamma (c++ function)": [[53, "_CPPv4N3d3d8setgammaEf"]], "d3d::unregister_before_window_destroyed_callback (c++ function)": [[53, "_CPPv4N3d3d43unregister_before_window_destroyed_callbackEP27BeforeWindowDestroyedCookie"]], "d3d::unset_esram_layout (c++ function)": [[53, "_CPPv4N3d3d18unset_esram_layoutEv"]], "d3d::update_screen (c++ function)": [[53, "_CPPv4N3d3d13update_screenEb"]], "d3d::update_window_mode (c++ function)": [[53, "_CPPv4N3d3d18update_window_modeEv"]], "d3d::wait_for_async_present (c++ function)": [[53, "_CPPv4N3d3d22wait_for_async_presentEb"]], "d3d::window_destroyed (c++ function)": [[53, "_CPPv4N3d3d16window_destroyedEPv"]], "d3d::writeback_movable_textures (c++ function)": [[53, "_CPPv4N3d3d26writeback_movable_texturesEv"]], "d3d_err (c macro)": [[53, "c.d3d_err"]], "d3derr (c macro)": [[53, "c.d3derr"]], "d3derr_in_device_reset (c++ function)": [[53, "_CPPv422d3derr_in_device_resetPKc"]], "dagor_d3d_force_driver_reset (c++ member)": [[53, "_CPPv428dagor_d3d_force_driver_reset"]], "main_wnd_f (c++ type)": [[53, "_CPPv410main_wnd_f"]], "arraytexture (c++ type)": [[54, "_CPPv412ArrayTexture"]], "basetexture (c++ class)": [[54, "_CPPv411BaseTexture"]], "basetexture::basetexture (c++ function)": [[54, "_CPPv4N11BaseTexture11BaseTextureERR11BaseTexture"], [54, "_CPPv4N11BaseTexture11BaseTextureEv"]], "basetexture::ireloaddata (c++ struct)": [[54, "_CPPv4N11BaseTexture11IReloadDataE"]], "basetexture::ireloaddata::destroyself (c++ function)": [[54, "_CPPv4N11BaseTexture11IReloadData11destroySelfEv"]], "basetexture::ireloaddata::reloadd3dres (c++ function)": [[54, "_CPPv4N11BaseTexture11IReloadData12reloadD3dResEP11BaseTexture"]], "basetexture::ireloaddata::~ireloaddata (c++ function)": [[54, "_CPPv4N11BaseTexture11IReloadDataD0Ev"]], "basetexture::tex_copied (c++ member)": [[54, "_CPPv4N11BaseTexture10TEX_COPIEDE"]], "basetexture::allocatetex (c++ function)": [[54, "_CPPv4N11BaseTexture11allocateTexEv"]], "basetexture::calcsubresidx (c++ function)": [[54, "_CPPv4N11BaseTexture13calcSubResIdxEiii"], [54, "_CPPv4NK11BaseTexture13calcSubResIdxEii"]], "basetexture::disablesampler (c++ function)": [[54, "_CPPv4N11BaseTexture14disableSamplerEv"]], "basetexture::discardtex (c++ function)": [[54, "_CPPv4N11BaseTexture10discardTexEv"]], "basetexture::downsize (c++ function)": [[54, "_CPPv4N11BaseTexture8downSizeEiiiijj"]], "basetexture::generatemips (c++ function)": [[54, "_CPPv4N11BaseTexture12generateMipsEv"]], "basetexture::gettid (c++ function)": [[54, "_CPPv4NK11BaseTexture6getTIDEv"]], "basetexture::gettexname (c++ function)": [[54, "_CPPv4NK11BaseTexture10getTexNameEv"]], "basetexture::getinfo (c++ function)": [[54, "_CPPv4NK11BaseTexture7getinfoER11TextureInfoi"]], "basetexture::iscubearray (c++ function)": [[54, "_CPPv4NK11BaseTexture11isCubeArrayEv"]], "basetexture::issamplerenabled (c++ function)": [[54, "_CPPv4N11BaseTexture16isSamplerEnabledEv"]], "basetexture::level_count (c++ function)": [[54, "_CPPv4NK11BaseTexture11level_countEv"]], "basetexture::lockbox (c++ function)": [[54, "_CPPv4N11BaseTexture7lockboxEPPvRiRiij"]], "basetexture::lockimg (c++ function)": [[54, "_CPPv4N11BaseTexture7lockimgEPPvRiiij"], [54, "_CPPv4N11BaseTexture7lockimgEPPvRiij"]], "basetexture::lockimgex (c++ function)": [[54, "_CPPv4I0EN11BaseTexture9lockimgExEiPP1TRiij"]], "basetexture::maketmptexrescopy (c++ function)": [[54, "_CPPv4N11BaseTexture17makeTmpTexResCopyEiiiib"]], "basetexture::operator= (c++ function)": [[54, "_CPPv4N11BaseTextureaSERR11BaseTexture"]], "basetexture::replacetexresobject (c++ function)": [[54, "_CPPv4N11BaseTexture19replaceTexResObjectERP11BaseTexture"]], "basetexture::samplerenabled (c++ member)": [[54, "_CPPv4N11BaseTexture14samplerEnabledE"]], "basetexture::setanisotropy (c++ function)": [[54, "_CPPv4N11BaseTexture13setAnisotropyEi"]], "basetexture::setanisotropyimpl (c++ function)": [[54, "_CPPv4N11BaseTexture17setAnisotropyImplEi"]], "basetexture::setreadstencil (c++ function)": [[54, "_CPPv4N11BaseTexture14setReadStencilEb"]], "basetexture::setreloadcallback (c++ function)": [[54, "_CPPv4N11BaseTexture17setReloadCallbackEP11IReloadData"]], "basetexture::setresapiname (c++ function)": [[54, "_CPPv4NK11BaseTexture13setResApiNameEPKc"]], "basetexture::settid (c++ function)": [[54, "_CPPv4N11BaseTexture6setTIDE9TEXTUREID"]], "basetexture::texaddr (c++ function)": [[54, "_CPPv4N11BaseTexture7texaddrEi"]], "basetexture::texaddrimpl (c++ function)": [[54, "_CPPv4N11BaseTexture11texaddrImplEi"]], "basetexture::texaddru (c++ function)": [[54, "_CPPv4N11BaseTexture8texaddruEi"]], "basetexture::texaddruimpl (c++ function)": [[54, "_CPPv4N11BaseTexture12texaddruImplEi"]], "basetexture::texaddrv (c++ function)": [[54, "_CPPv4N11BaseTexture8texaddrvEi"]], "basetexture::texaddrvimpl (c++ function)": [[54, "_CPPv4N11BaseTexture12texaddrvImplEi"]], "basetexture::texaddrw (c++ function)": [[54, "_CPPv4N11BaseTexture8texaddrwEi"]], "basetexture::texaddrwimpl (c++ function)": [[54, "_CPPv4N11BaseTexture12texaddrwImplEi"]], "basetexture::texbordercolor (c++ function)": [[54, "_CPPv4N11BaseTexture14texbordercolorE8E3DCOLOR"]], "basetexture::texbordercolorimpl (c++ function)": [[54, "_CPPv4N11BaseTexture18texbordercolorImplE8E3DCOLOR"]], "basetexture::texfilter (c++ function)": [[54, "_CPPv4N11BaseTexture9texfilterEi"]], "basetexture::texfilterimpl (c++ function)": [[54, "_CPPv4N11BaseTexture13texfilterImplEi"]], "basetexture::texlod (c++ function)": [[54, "_CPPv4N11BaseTexture6texlodEf"]], "basetexture::texlodimpl (c++ function)": [[54, "_CPPv4N11BaseTexture10texlodImplEf"]], "basetexture::texmiplevel (c++ function)": [[54, "_CPPv4N11BaseTexture11texmiplevelEii"]], "basetexture::texmipmap (c++ function)": [[54, "_CPPv4N11BaseTexture9texmipmapEi"]], "basetexture::texmipmapimpl (c++ function)": [[54, "_CPPv4N11BaseTexture13texmipmapImplEi"]], "basetexture::unlock (c++ function)": [[54, "_CPPv4N11BaseTexture6unlockEv"]], "basetexture::unlockbox (c++ function)": [[54, "_CPPv4N11BaseTexture9unlockboxEv"]], "basetexture::unlockimg (c++ function)": [[54, "_CPPv4N11BaseTexture9unlockimgEv"]], "basetexture::upsize (c++ function)": [[54, "_CPPv4N11BaseTexture6upSizeEiiiijj"]], "basetexture::update (c++ function)": [[54, "_CPPv4N11BaseTexture6updateEP11BaseTexture"]], "basetexture::updatesubregion (c++ function)": [[54, "_CPPv4N11BaseTexture15updateSubRegionEP11BaseTextureiiiiiiiiiii"]], "basetexture::updatesubregionnoorder (c++ function)": [[54, "_CPPv4N11BaseTexture22updateSubRegionNoOrderEP11BaseTextureiiiiiiiiiii"]], "basetexture::~basetexture (c++ function)": [[54, "_CPPv4N11BaseTextureD0Ev"]], "channeldtype (c++ enum)": [[54, "_CPPv412ChannelDType"]], "channeldtype::none (c++ enumerator)": [[54, "_CPPv4N12ChannelDType4NONEE"]], "channeldtype::sfloat (c++ enumerator)": [[54, "_CPPv4N12ChannelDType6SFLOATE"]], "channeldtype::sint (c++ enumerator)": [[54, "_CPPv4N12ChannelDType4SINTE"]], "channeldtype::snorm (c++ enumerator)": [[54, "_CPPv4N12ChannelDType5SNORME"]], "channeldtype::ufloat (c++ enumerator)": [[54, "_CPPv4N12ChannelDType6UFLOATE"]], "channeldtype::uint (c++ enumerator)": [[54, "_CPPv4N12ChannelDType4UINTE"]], "channeldtype::unorm (c++ enumerator)": [[54, "_CPPv4N12ChannelDType5UNORME"]], "cubetexture (c++ type)": [[54, "_CPPv411CubeTexture"]], "texloadres (c++ enum)": [[54, "_CPPv410TexLoadRes"]], "texloadres::err (c++ enumerator)": [[54, "_CPPv4N10TexLoadRes3ERRE"]], "texloadres::err_rub (c++ enumerator)": [[54, "_CPPv4N10TexLoadRes7ERR_RUBE"]], "texloadres::ok (c++ enumerator)": [[54, "_CPPv4N10TexLoadRes2OKE"]], "texturechannelformatdesc (c++ struct)": [[54, "_CPPv424TextureChannelFormatDesc"]], "texturechannelformatdesc::bits (c++ member)": [[54, "_CPPv4N24TextureChannelFormatDesc4bitsE"]], "texturechannelformatdesc::isfloatpoint (c++ member)": [[54, "_CPPv4N24TextureChannelFormatDesc12isFloatPointE"]], "texturechannelformatdesc::isnormalized (c++ member)": [[54, "_CPPv4N24TextureChannelFormatDesc12isNormalizedE"]], "texturechannelformatdesc::issigned (c++ member)": [[54, "_CPPv4N24TextureChannelFormatDesc8isSignedE"]], "texturechannelformatdesc::offset (c++ member)": [[54, "_CPPv4N24TextureChannelFormatDesc6offsetE"]], "textureformatdesc (c++ struct)": [[54, "_CPPv417TextureFormatDesc"]], "textureformatdesc::a (c++ member)": [[54, "_CPPv4N17TextureFormatDesc1aE"]], "textureformatdesc::b (c++ member)": [[54, "_CPPv4N17TextureFormatDesc1bE"]], "textureformatdesc::bytesperelement (c++ member)": [[54, "_CPPv4N17TextureFormatDesc15bytesPerElementE"]], "textureformatdesc::channelscount (c++ function)": [[54, "_CPPv4NK17TextureFormatDesc13channelsCountEv"]], "textureformatdesc::dagortextureformat (c++ member)": [[54, "_CPPv4N17TextureFormatDesc18dagorTextureFormatE"]], "textureformatdesc::depth (c++ member)": [[54, "_CPPv4N17TextureFormatDesc5depthE"]], "textureformatdesc::elementheight (c++ member)": [[54, "_CPPv4N17TextureFormatDesc13elementHeightE"]], "textureformatdesc::elementwidth (c++ member)": [[54, "_CPPv4N17TextureFormatDesc12elementWidthE"]], "textureformatdesc::g (c++ member)": [[54, "_CPPv4N17TextureFormatDesc1gE"]], "textureformatdesc::hasalpha (c++ function)": [[54, "_CPPv4NK17TextureFormatDesc8hasAlphaEv"]], "textureformatdesc::isblockformat (c++ member)": [[54, "_CPPv4N17TextureFormatDesc13isBlockFormatE"]], "textureformatdesc::isdepth (c++ function)": [[54, "_CPPv4NK17TextureFormatDesc7isDepthEv"]], "textureformatdesc::mainchannelstype (c++ member)": [[54, "_CPPv4N17TextureFormatDesc16mainChannelsTypeE"]], "textureformatdesc::r (c++ member)": [[54, "_CPPv4N17TextureFormatDesc1rE"]], "textureformatdesc::rgbachannelscount (c++ function)": [[54, "_CPPv4NK17TextureFormatDesc17rgbaChannelsCountEv"]], "textureformatdesc::stencil (c++ member)": [[54, "_CPPv4N17TextureFormatDesc7stencilE"]], "textureformatdesc::stencilchanneltype (c++ member)": [[54, "_CPPv4N17TextureFormatDesc18stencilChannelTypeE"]], "textureinfo (c++ struct)": [[54, "_CPPv411TextureInfo"]], "textureinfo::a (c++ member)": [[54, "_CPPv4N11TextureInfo1aE"]], "textureinfo::cflg (c++ member)": [[54, "_CPPv4N11TextureInfo4cflgE"]], "textureinfo::d (c++ member)": [[54, "_CPPv4N11TextureInfo1dE"]], "textureinfo::h (c++ member)": [[54, "_CPPv4N11TextureInfo1hE"]], "textureinfo::miplevels (c++ member)": [[54, "_CPPv4N11TextureInfo9mipLevelsE"]], "textureinfo::restype (c++ member)": [[54, "_CPPv4N11TextureInfo7resTypeE"]], "textureinfo::w (c++ member)": [[54, "_CPPv4N11TextureInfo1wE"]], "voltexture (c++ type)": [[54, "_CPPv410VolTexture"]], "[anonymous]::cubeface_negx (c++ enumerator)": [[54, "_CPPv4NUt2_3913CUBEFACE_NEGXE"]], "[anonymous]::cubeface_negy (c++ enumerator)": [[54, "_CPPv4NUt2_3913CUBEFACE_NEGYE"]], "[anonymous]::cubeface_negz (c++ enumerator)": [[54, "_CPPv4NUt2_3913CUBEFACE_NEGZE"]], "[anonymous]::cubeface_posx (c++ enumerator)": [[54, "_CPPv4NUt2_3913CUBEFACE_POSXE"]], "[anonymous]::cubeface_posy (c++ enumerator)": [[54, "_CPPv4NUt2_3913CUBEFACE_POSYE"]], "[anonymous]::cubeface_posz (c++ enumerator)": [[54, "_CPPv4NUt2_3913CUBEFACE_POSZE"]], "[anonymous]::texlf_calcmipmaps (c++ enumerator)": [[54, "_CPPv4NUt2_3817TEXLF_CALCMIPMAPSE"]], "[anonymous]::texlock_copy_staging (c++ enumerator)": [[54, "_CPPv4NUt2_3720TEXLOCK_COPY_STAGINGE"]], "[anonymous]::texlock_default (c++ enumerator)": [[54, "_CPPv4NUt2_3715TEXLOCK_DEFAULTE"]], "[anonymous]::texlock_delsysmemcopy (c++ enumerator)": [[54, "_CPPv4NUt2_3721TEXLOCK_DELSYSMEMCOPYE"]], "[anonymous]::texlock_discard (c++ enumerator)": [[54, "_CPPv4NUt2_3715TEXLOCK_DISCARDE"]], "[anonymous]::texlock_donotupdateon9exbydefault (c++ enumerator)": [[54, "_CPPv4NUt2_3733TEXLOCK_DONOTUPDATEON9EXBYDEFAULTE"]], "[anonymous]::texlock_nooverwrite (c++ enumerator)": [[54, "_CPPv4NUt2_3719TEXLOCK_NOOVERWRITEE"]], "[anonymous]::texlock_nosyslock (c++ enumerator)": [[54, "_CPPv4NUt2_3717TEXLOCK_NOSYSLOCKE"]], "[anonymous]::texlock_no_dirty_update (c++ enumerator)": [[54, "_CPPv4NUt2_3723TEXLOCK_NO_DIRTY_UPDATEE"]], "[anonymous]::texlock_rawdata (c++ enumerator)": [[54, "_CPPv4NUt2_3715TEXLOCK_RAWDATAE"]], "[anonymous]::texlock_read (c++ enumerator)": [[54, "_CPPv4NUt2_3712TEXLOCK_READE"]], "[anonymous]::texlock_readwrite (c++ enumerator)": [[54, "_CPPv4NUt2_3717TEXLOCK_READWRITEE"]], "[anonymous]::texlock_rwmask (c++ enumerator)": [[54, "_CPPv4NUt2_3714TEXLOCK_RWMASKE"]], "[anonymous]::texlock_systexlock (c++ enumerator)": [[54, "_CPPv4NUt2_3718TEXLOCK_SYSTEXLOCKE"]], "[anonymous]::texlock_updatefromsystex (c++ enumerator)": [[54, "_CPPv4NUt2_3724TEXLOCK_UPDATEFROMSYSTEXE"]], "[anonymous]::texlock_write (c++ enumerator)": [[54, "_CPPv4NUt2_3713TEXLOCK_WRITEE"]], "apply_gen_tex_props (c++ function)": [[54, "_CPPv419apply_gen_tex_propsP11BaseTextureRK15TextureMetaDatab"]], "auto_mip_levels_count (c++ function)": [[54, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t"], [54, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t8uint32_t"], [54, "_CPPv421auto_mip_levels_count8uint32_t8uint32_t8uint32_t8uint32_t"]], "channel_bits_to_float (c++ function)": [[54, "_CPPv421channel_bits_to_float8uint32_t12ChannelDTypeRK24TextureChannelFormatDesc"]], "convert_image_line (c++ function)": [[54, "_CPPv418convert_image_linePKviiibPviibb"]], "d3d::alias_array_tex (c++ function)": [[54, "_CPPv4N3d3d15alias_array_texEP11BaseTextureiiiiiPKc"]], "d3d::alias_cube_array_tex (c++ function)": [[54, "_CPPv4N3d3d20alias_cube_array_texEP11BaseTextureiiiiPKc"]], "d3d::alias_cubetex (c++ function)": [[54, "_CPPv4N3d3d13alias_cubetexEP11BaseTextureiiiPKc"]], "d3d::alias_tex (c++ function)": [[54, "_CPPv4N3d3d9alias_texEP11BaseTextureP10TexImage32iiiiPKc"]], "d3d::alias_voltex (c++ function)": [[54, "_CPPv4N3d3d12alias_voltexEP11BaseTextureiiiiiPKc"]], "d3d::alloc_ddsx_tex (c++ function)": [[54, "_CPPv4N3d3d14alloc_ddsx_texERKN4ddsx6HeaderEiiiPKci"]], "d3d::check_cubetexformat (c++ function)": [[54, "_CPPv4N3d3d19check_cubetexformatEi"]], "d3d::check_texformat (c++ function)": [[54, "_CPPv4N3d3d15check_texformatEi"]], "d3d::check_voltexformat (c++ function)": [[54, "_CPPv4N3d3d18check_voltexformatEi"]], "d3d::create_array_tex (c++ function)": [[54, "_CPPv4N3d3d16create_array_texEiiiiiPKc"]], "d3d::create_cube_array_tex (c++ function)": [[54, "_CPPv4N3d3d21create_cube_array_texEiiiiPKc"]], "d3d::create_cubetex (c++ function)": [[54, "_CPPv4N3d3d14create_cubetexEiiiPKc"]], "d3d::create_ddsx_tex (c++ function)": [[54, "_CPPv4N3d3d15create_ddsx_texER8IGenLoadiiiPKc"]], "d3d::create_tex (c++ function)": [[54, "_CPPv4N3d3d10create_texEP10TexImage32iiiiPKc"]], "d3d::create_voltex (c++ function)": [[54, "_CPPv4N3d3d13create_voltexEiiiiiPKc"]], "d3d::get_max_sample_count (c++ function)": [[54, "_CPPv4N3d3d20get_max_sample_countEi"]], "d3d::get_texformat_usage (c++ function)": [[54, "_CPPv4N3d3d19get_texformat_usageEii"]], "d3d::get_texture_statistics (c++ function)": [[54, "_CPPv4N3d3d22get_texture_statisticsEP8uint32_tP8uint64_tP6String"]], "d3d::issame_texformat (c++ function)": [[54, "_CPPv4N3d3d16issame_texformatEii"]], "d3d::load_ddsx_tex_contents (c++ function)": [[54, "_CPPv4N3d3d22load_ddsx_tex_contentsEP11BaseTextureRKN4ddsx6HeaderER8IGenLoadi"]], "d3d::set_tex (c++ function)": [[54, "_CPPv4N3d3d7set_texEjjP11BaseTextureb"]], "d3d::settex (c++ function)": [[54, "_CPPv4N3d3d6settexEiP11BaseTexture"]], "d3d::settex_vs (c++ function)": [[54, "_CPPv4N3d3d9settex_vsEiP11BaseTexture"]], "d3d::stretch_rect (c++ function)": [[54, "_CPPv4N3d3d12stretch_rectEP11BaseTextureP11BaseTextureP7RectIntP7RectInt"]], "d3d_load_ddsx_tex_contents (c++ function)": [[54, "_CPPv426d3d_load_ddsx_tex_contentsP11BaseTexture9TEXTUREID9TEXTUREIDRKN4ddsx6HeaderER8IGenLoadiij24on_tex_slice_loaded_cb_t"]], "d3d_load_ddsx_tex_contents_impl (c++ member)": [[54, "_CPPv431d3d_load_ddsx_tex_contents_impl"]], "d3d_load_ddsx_to_slice (c++ member)": [[54, "_CPPv422d3d_load_ddsx_to_slice"]], "ddsx (c++ type)": [[54, "_CPPv44ddsx"]], "float_to_channel_bits (c++ function)": [[54, "_CPPv421float_to_channel_bitsf12ChannelDTypeRK24TextureChannelFormatDesc"]], "get_tex_channel_value (c++ function)": [[54, "_CPPv421get_tex_channel_valuePKvRK24TextureChannelFormatDesc"]], "get_tex_format_desc (c++ function)": [[54, "_CPPv419get_tex_format_desc8uint32_t"]], "get_tex_format_name (c++ function)": [[54, "_CPPv419get_tex_format_name8uint32_t"]], "is_alpha_texformat (c++ function)": [[54, "_CPPv418is_alpha_texformatj"]], "is_bc_texformat (c++ function)": [[54, "_CPPv415is_bc_texformatj"]], "on_tex_slice_loaded_cb_t (c++ type)": [[54, "_CPPv424on_tex_slice_loaded_cb_t"]], "parse_tex_format (c++ function)": [[54, "_CPPv416parse_tex_formatPKc8uint32_t"]], "set_tex_channel_value (c++ function)": [[54, "_CPPv421set_tex_channel_valuePvRK24TextureChannelFormatDesc8uint32_t"]], "multidrawcontext (c++ class)": [[56, "_CPPv4I0E16MultidrawContext"]], "multidrawcontext::multidrawcontext (c++ function)": [[56, "_CPPv4N16MultidrawContext16MultidrawContextEPKc"], [56, "_CPPv4N16MultidrawContext16MultidrawContextER16MultidrawContext"], [56, "_CPPv4N16MultidrawContext16MultidrawContextERR16MultidrawContext"]], "multidrawcontext::multidrawrenderexecutor (c++ class)": [[56, "_CPPv4N16MultidrawContext23MultidrawRenderExecutorE"]], "multidrawcontext::multidrawrenderexecutor::multidrawrenderexecutor (c++ function)": [[56, "_CPPv4N16MultidrawContext23MultidrawRenderExecutor23MultidrawRenderExecutorEPK16MultidrawContext"], [56, "_CPPv4N16MultidrawContext23MultidrawRenderExecutor23MultidrawRenderExecutorER23MultidrawRenderExecutor"], [56, "_CPPv4N16MultidrawContext23MultidrawRenderExecutor23MultidrawRenderExecutorERR23MultidrawRenderExecutor"], [56, "_CPPv4N16MultidrawContext23MultidrawRenderExecutor23MultidrawRenderExecutorEv"]], "multidrawcontext::multidrawrenderexecutor::context (c++ member)": [[56, "_CPPv4N16MultidrawContext23MultidrawRenderExecutor7contextE"]], "multidrawcontext::multidrawrenderexecutor::operator= (c++ function)": [[56, "_CPPv4N16MultidrawContext23MultidrawRenderExecutoraSER23MultidrawRenderExecutor"], [56, "_CPPv4N16MultidrawContext23MultidrawRenderExecutoraSERR23MultidrawRenderExecutor"]], "multidrawcontext::multidrawrenderexecutor::render (c++ function)": [[56, "_CPPv4NK16MultidrawContext23MultidrawRenderExecutor6renderE8uint32_t8uint32_t8uint32_t"]], "multidrawcontext::actualstart (c++ member)": [[56, "_CPPv4N16MultidrawContext11actualStartE"]], "multidrawcontext::allocateddrawcallsinbuffer (c++ member)": [[56, "_CPPv4N16MultidrawContext26allocatedDrawcallsInBufferE"]], "multidrawcontext::close (c++ function)": [[56, "_CPPv4N16MultidrawContext5closeEv"]], "multidrawcontext::fillbuffers (c++ function)": [[56, "_CPPv4I0EN16MultidrawContext11fillBuffersE23MultidrawRenderExecutor8uint32_tRK1T"]], "multidrawcontext::getperdrawargsbuffername (c++ function)": [[56, "_CPPv4NK16MultidrawContext24getPerDrawArgsBufferNameEv"]], "multidrawcontext::multidrawarguments (c++ member)": [[56, "_CPPv4N16MultidrawContext18multidrawArgumentsE"]], "multidrawcontext::name (c++ member)": [[56, "_CPPv4N16MultidrawContext4nameE"]], "multidrawcontext::needperdrawparamsbuffer (c++ function)": [[56, "_CPPv4N16MultidrawContext23needPerDrawParamsBufferEv"]], "multidrawcontext::operator= (c++ function)": [[56, "_CPPv4N16MultidrawContextaSER16MultidrawContext"], [56, "_CPPv4N16MultidrawContextaSERR16MultidrawContext"]], "multidrawcontext::perdrawargsbuffer (c++ member)": [[56, "_CPPv4N16MultidrawContext17perDrawArgsBufferE"]], "use_staging_multidraw_buf (c macro)": [[56, "c.USE_STAGING_MULTIDRAW_BUF"]], "bfgecsnodeannotation : astfunctionannotation (none attribute)": [[58, "BfgEcsNodeAnnotation : AstFunctionAnnotation"]], "bfgecsnodeannotation.apply() (bfgecsnodeannotation method)": [[58, "BfgEcsNodeAnnotation.apply"]], "bfgecsnodeannotation.declarees() (bfgecsnodeannotation method)": [[58, "BfgEcsNodeAnnotation.declareES"]], "bfgecsnodeannotation.declarereloadcallback() (bfgecsnodeannotation method)": [[58, "BfgEcsNodeAnnotation.declareReloadCallback"]], "bfgecsnodeannotation.parseargs() (bfgecsnodeannotation method)": [[58, "BfgEcsNodeAnnotation.parseArgs"]], "bfg_ecs_node (none attribute)": [[58, "bfg_ecs_node"]], "dabfg_pp_node_src (c macro)": [[59, "c.DABFG_PP_NODE_SRC"]], "dabfg::externalstate (c++ struct)": [[59, "_CPPv4N5dabfg13ExternalStateE"]], "dabfg::externalstate::vrsenabled (c++ member)": [[59, "_CPPv4N5dabfg13ExternalState10vrsEnabledE"]], "dabfg::externalstate::wireframemodeenabled (c++ member)": [[59, "_CPPv4N5dabfg13ExternalState20wireframeModeEnabledE"]], "dabfg::namespace (c++ class)": [[59, "_CPPv4N5dabfg9NameSpaceE"]], "dabfg::namespace::fillslot (c++ function)": [[59, "_CPPv4N5dabfg9NameSpace8fillSlotE9NamedSlot9NameSpacePKc"]], "dabfg::namespace::markresourceexternallyconsumed (c++ function)": [[59, "_CPPv4N5dabfg9NameSpace30markResourceExternallyConsumedEPKc"]], "dabfg::namespace::operator/ (c++ function)": [[59, "_CPPv4NK5dabfg9NameSpacedvEPKc"]], "dabfg::namespace::registernode (c++ function)": [[59, "_CPPv4I0ENK5dabfg9NameSpace12registerNodeE10NodeHandlePKcPKcRR1F"]], "dabfg::namespace::setdynamicresolution (c++ function)": [[59, "_CPPv4I0EN5dabfg9NameSpace20setDynamicResolutionEvPKc1T"]], "dabfg::namespace::setresolution (c++ function)": [[59, "_CPPv4I0EN5dabfg9NameSpace13setResolutionEvPKc1T"]], "dabfg::namespace::unmarkresourceexternallyconsumed (c++ function)": [[59, "_CPPv4N5dabfg9NameSpace32unmarkResourceExternallyConsumedEPKc"]], "dabfg::namespace::updateexternallyconsumedresourceset (c++ function)": [[59, "_CPPv4N5dabfg9NameSpace35updateExternallyConsumedResourceSetEN5eastl4spanIPCKcEE"], [59, "_CPPv4N5dabfg9NameSpace35updateExternallyConsumedResourceSetENSt16initializer_listIPKcEE"]], "fill_slot (c++ function)": [[59, "_CPPv49fill_slot9NamedSlotPKc"]], "invalidate_history (c++ function)": [[59, "_CPPv418invalidate_historyv"]], "mark_external_resource_for_validation (c++ function)": [[59, "_CPPv437mark_external_resource_for_validationPK11D3dResource"]], "mark_resource_externally_consumed (c++ function)": [[59, "_CPPv433mark_resource_externally_consumedPKc"]], "register_node (c++ function)": [[59, "_CPPv4I0E13register_node10NodeHandlePKcPKcRR1F"]], "root (c++ function)": [[59, "_CPPv44rootv"]], "run_nodes (c++ function)": [[59, "_CPPv49run_nodesv"]], "set_dynamic_resolution (c++ function)": [[59, "_CPPv4I0E22set_dynamic_resolutionvPKc1T"]], "set_multiplexing_extents (c++ function)": [[59, "_CPPv424set_multiplexing_extentsN12multiplexing7ExtentsE"]], "set_resolution (c++ function)": [[59, "_CPPv4I0E14set_resolutionvPKc1T"]], "shutdown (c++ function)": [[59, "_CPPv48shutdownv"]], "startup (c++ function)": [[59, "_CPPv47startupv"]], "unmark_resource_externally_consumed (c++ function)": [[59, "_CPPv435unmark_resource_externally_consumedPKc"]], "update_external_state (c++ function)": [[59, "_CPPv421update_external_state13ExternalState"]], "update_externally_consumed_resource_set (c++ function)": [[59, "_CPPv439update_externally_consumed_resource_setN5eastl4spanIPCKcEE"], [59, "_CPPv439update_externally_consumed_resource_setNSt16initializer_listIPKcEE"]], "access (none attribute)": [[60, "Access"]], "arraycubetextureresourcedescription (none attribute)": [[60, "ArrayCubeTextureResourceDescription"]], "arraytextureresourcedescription (none attribute)": [[60, "ArrayTextureResourceDescription"]], "autorestypenameid (none attribute)": [[60, "AutoResTypeNameId"]], "autoresolutiondata (none attribute)": [[60, "AutoResolutionData"]], "binding (none attribute)": [[60, "Binding"]], "bindingtype (none attribute)": [[60, "BindingType"]], "bindingsmap = fixedvectormap`int`binding`8 (none attribute)": [[60, "BindingsMap = fixedVectorMap`int`Binding`8"]], "bufferresourcedescription (none attribute)": [[60, "BufferResourceDescription"]], "cubetextureresourcedescription (none attribute)": [[60, "CubeTextureResourceDescription"]], "history (none attribute)": [[60, "History"]], "internalregistry (none attribute)": [[60, "InternalRegistry"]], "multiplexingmode (none attribute)": [[60, "MultiplexingMode"]], "namespacenameid (none attribute)": [[60, "NameSpaceNameId"]], "nodedata (none attribute)": [[60, "NodeData"]], "nodehandle (none attribute)": [[60, "NodeHandle"]], "nodenameid (none attribute)": [[60, "NodeNameId"]], "nodestaterequirements (none attribute)": [[60, "NodeStateRequirements"]], "nodetracker (none attribute)": [[60, "NodeTracker"]], "resnameid (none attribute)": [[60, "ResNameId"]], "resourceactivationaction (none attribute)": [[60, "ResourceActivationAction"]], "resourcedata (none attribute)": [[60, "ResourceData"]], "resourceprovider (none attribute)": [[60, "ResourceProvider"]], "resourcerequest (none attribute)": [[60, "ResourceRequest"]], "resourcetype (none attribute)": [[60, "ResourceType"]], "resourceusage (none attribute)": [[60, "ResourceUsage"]], "shaderblocklayersinfo (none attribute)": [[60, "ShaderBlockLayersInfo"]], "sideeffect (none attribute)": [[60, "SideEffect"]], "stage (none attribute)": [[60, "Stage"]], "textureresourcedescription (none attribute)": [[60, "TextureResourceDescription"]], "usage (none attribute)": [[60, "Usage"]], "variablerateshadingcombiner (none attribute)": [[60, "VariableRateShadingCombiner"]], "virtualpassrequirements (none attribute)": [[60, "VirtualPassRequirements"]], "virtualsubresourceref (none attribute)": [[60, "VirtualSubresourceRef"]], "voltextureresourcedescription (none attribute)": [[60, "VolTextureResourceDescription"]], "vrsstaterequirements (none attribute)": [[60, "VrsStateRequirements"]], "fill_slot() (built-in function)": [[60, "fill_slot"]], "get_shader_variable_id() (built-in function)": [[60, "get_shader_variable_id"]], "registernode() (built-in function)": [[60, "registerNode"], [61, "registerNode"]], "resetnode() (built-in function)": [[60, "resetNode"]], "autoresolutionrequest (none attribute)": [[61, "AutoResolutionRequest"]], "buffercreateinfo (none attribute)": [[61, "BufferCreateInfo"]], "namespace (none attribute)": [[61, "NameSpace"]], "namespacerequest (none attribute)": [[61, "NameSpaceRequest"]], "namedslot (none attribute)": [[61, "NamedSlot"]], "registry (none attribute)": [[61, "Registry"]], "resuid (none attribute)": [[61, "ResUid"]], "staterequest (none attribute)": [[61, "StateRequest"]], "texture2dcreateinfo (none attribute)": [[61, "Texture2dCreateInfo"]], "textureresolution is a variant type (none attribute)": [[61, "TextureResolution is a variant type"]], "virtualattachmentrequest (none attribute)": [[61, "VirtualAttachmentRequest"]], "virtualattachmentresource is a variant type (none attribute)": [[61, "VirtualAttachmentResource is a variant type"]], "virtualbufferhandle (none attribute)": [[61, "VirtualBufferHandle"]], "virtualbufferrequest (none attribute)": [[61, "VirtualBufferRequest"]], "virtualpassrequest (none attribute)": [[61, "VirtualPassRequest"]], "virtualresourcecreationsemirequest (none attribute)": [[61, "VirtualResourceCreationSemiRequest"]], "virtualresourcehandle (none attribute)": [[61, "VirtualResourceHandle"]], "virtualresourcerequest (none attribute)": [[61, "VirtualResourceRequest"]], "virtualresourcerequestbase (none attribute)": [[61, "VirtualResourceRequestBase"]], "virtualresourcesemirequest (none attribute)": [[61, "VirtualResourceSemiRequest"]], "virtualtexturehandle (none attribute)": [[61, "VirtualTextureHandle"]], "virtualtexturerequest (none attribute)": [[61, "VirtualTextureRequest"]], "vrsratetexture is a variant type (none attribute)": [[61, "VrsRateTexture is a variant type"]], "vrsrequirements (none attribute)": [[61, "VrsRequirements"]], "allowvrs() (built-in function)": [[61, "allowVrs"]], "allowwireframe() (built-in function)": [[61, "allowWireFrame"]], "atstage() (built-in function)": [[61, "atStage"]], "bindtoshadervar() (built-in function)": [[61, "bindToShaderVar"]], "blob() (built-in function)": [[61, "blob"]], "buffer() (built-in function)": [[61, "buffer"]], "color() (built-in function)": [[61, "color"]], "create() (built-in function)": [[61, "create"]], "depthro() (built-in function)": [[61, "depthRo"]], "depthrw() (built-in function)": [[61, "depthRw"]], "enableoverride() (built-in function)": [[61, "enableOverride"]], "executionhas() (built-in function)": [[61, "executionHas"]], "fillslot() (built-in function)": [[61, "fillSlot"]], "get() (built-in function)": [[61, "get"]], "getresolution() (built-in function)": [[61, "getResolution"]], "handle() (built-in function)": [[61, "handle"]], "history() (built-in function)": [[61, "history"]], "modify() (built-in function)": [[61, "modify"]], "modifyrequest() (built-in function)": [[61, "modifyRequest"]], "multiplex() (built-in function)": [[61, "multiplex"]], "operator /() (built-in function)": [[61, "operator /"]], "optional() (built-in function)": [[61, "optional"]], "ordermeafter() (built-in function)": [[61, "orderMeAfter"]], "ordermebefore() (built-in function)": [[61, "orderMeBefore"]], "read() (built-in function)": [[61, "read"]], "rename() (built-in function)": [[61, "rename"]], "requestrenderpass() (built-in function)": [[61, "requestRenderPass"]], "requeststate() (built-in function)": [[61, "requestState"]], "root() (built-in function)": [[61, "root"]], "setframeblock() (built-in function)": [[61, "setFrameBlock"]], "setobjectblock() (built-in function)": [[61, "setObjectBlock"]], "setpriority() (built-in function)": [[61, "setPriority"]], "setsceneblock() (built-in function)": [[61, "setSceneBlock"]], "texture() (built-in function)": [[61, "texture"]], "useas() (built-in function)": [[61, "useAs"]], "view() (built-in function)": [[61, "view"]], "dabfg (c++ type)": [[62, "_CPPv45dabfg"]], "dabfg::auto_mip_count (c++ member)": [[62, "_CPPv4N5dabfg14AUTO_MIP_COUNTE"]], "dabfg::autoresolutionrequest (c++ class)": [[62, "_CPPv4I_iEN5dabfg21AutoResolutionRequestE"]], "dabfg::autoresolutionrequest::get (c++ function)": [[62, "_CPPv4NK5dabfg21AutoResolutionRequest3getEv"]], "dabfg::buffercreateinfo (c++ struct)": [[62, "_CPPv4N5dabfg16BufferCreateInfoE"]], "dabfg::buffercreateinfo::elementcount (c++ member)": [[62, "_CPPv4N5dabfg16BufferCreateInfo12elementCountE"]], "dabfg::buffercreateinfo::elementsize (c++ member)": [[62, "_CPPv4N5dabfg16BufferCreateInfo11elementSizeE"]], "dabfg::buffercreateinfo::flags (c++ member)": [[62, "_CPPv4N5dabfg16BufferCreateInfo5flagsE"]], "dabfg::buffercreateinfo::format (c++ member)": [[62, "_CPPv4N5dabfg16BufferCreateInfo6formatE"]], "dabfg::namespacerequest (c++ class)": [[62, "_CPPv4N5dabfg16NameSpaceRequestE"]], "dabfg::namespacerequest::getresolution (c++ function)": [[62, "_CPPv4I_iENK5dabfg16NameSpaceRequest13getResolutionE21AutoResolutionRequestI1DEPKcf"]], "dabfg::namespacerequest::historyfor (c++ function)": [[62, "_CPPv4NK5dabfg16NameSpaceRequest10historyForEPKc"]], "dabfg::namespacerequest::modify (c++ function)": [[62, "_CPPv4NK5dabfg16NameSpaceRequest6modifyE9NamedSlot"], [62, "_CPPv4NK5dabfg16NameSpaceRequest6modifyEPKc"]], "dabfg::namespacerequest::modifyblob (c++ function)": [[62, "_CPPv4I0ENK5dabfg16NameSpaceRequest10modifyBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKc"]], "dabfg::namespacerequest::modifytexture (c++ function)": [[62, "_CPPv4NK5dabfg16NameSpaceRequest13modifyTextureE9NamedSlot"], [62, "_CPPv4NK5dabfg16NameSpaceRequest13modifyTextureEPKc"]], "dabfg::namespacerequest::operator/ (c++ function)": [[62, "_CPPv4NK5dabfg16NameSpaceRequestdvEPKc"]], "dabfg::namespacerequest::read (c++ function)": [[62, "_CPPv4NK5dabfg16NameSpaceRequest4readE9NamedSlot"], [62, "_CPPv4NK5dabfg16NameSpaceRequest4readEPKc"]], "dabfg::namespacerequest::readblob (c++ function)": [[62, "_CPPv4I0ENK5dabfg16NameSpaceRequest8readBlobE18VirtualBlobRequestI1T18NewRoRequestPolicyEPKc"]], "dabfg::namespacerequest::readblobhistory (c++ function)": [[62, "_CPPv4I0ENK5dabfg16NameSpaceRequest15readBlobHistoryE18VirtualBlobRequestI1T20NewHistRequestPolicyEPKc"]], "dabfg::namespacerequest::readtexture (c++ function)": [[62, "_CPPv4NK5dabfg16NameSpaceRequest11readTextureE9NamedSlot"], [62, "_CPPv4NK5dabfg16NameSpaceRequest11readTextureEPKc"]], "dabfg::namespacerequest::readtexturehistory (c++ function)": [[62, "_CPPv4NK5dabfg16NameSpaceRequest18readTextureHistoryEPKc"]], "dabfg::namespacerequest::rename (c++ function)": [[62, "_CPPv4NK5dabfg16NameSpaceRequest6renameEPKcPKc7History"]], "dabfg::namespacerequest::renameblob (c++ function)": [[62, "_CPPv4I0ENK5dabfg16NameSpaceRequest10renameBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKcPKc7History"]], "dabfg::namespacerequest::renametexture (c++ function)": [[62, "_CPPv4NK5dabfg16NameSpaceRequest13renameTextureEPKcPKc7History"]], "dabfg::namedslot (c++ struct)": [[62, "_CPPv4N5dabfg9NamedSlotE"]], "dabfg::namedslot::namedslot (c++ function)": [[62, "_CPPv4N5dabfg9NamedSlot9NamedSlotEPKc"]], "dabfg::namedslot::name (c++ member)": [[62, "_CPPv4N5dabfg9NamedSlot4nameE"]], "dabfg::registry (c++ class)": [[62, "_CPPv4N5dabfg8RegistryE"]], "dabfg::registry::allowasyncpipelines (c++ function)": [[62, "_CPPv4N5dabfg8Registry19allowAsyncPipelinesEv"]], "dabfg::registry::create (c++ function)": [[62, "_CPPv4N5dabfg8Registry6createEPKc7History"]], "dabfg::registry::createblob (c++ function)": [[62, "_CPPv4I0EN5dabfg8Registry10createBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKc7History"]], "dabfg::registry::createtexture2d (c++ function)": [[62, "_CPPv4N5dabfg8Registry15createTexture2dEPKc7History19Texture2dCreateInfo"]], "dabfg::registry::currnamespace (c++ function)": [[62, "_CPPv4N5dabfg8Registry13currNameSpaceEv"]], "dabfg::registry::executionhas (c++ function)": [[62, "_CPPv4N5dabfg8Registry12executionHasE11SideEffects"]], "dabfg::registry::getresolution (c++ function)": [[62, "_CPPv4I_iENK5dabfg8Registry13getResolutionE21AutoResolutionRequestI1DEPKcf"]], "dabfg::registry::historyfor (c++ function)": [[62, "_CPPv4NK5dabfg8Registry10historyForEPKc"]], "dabfg::registry::modify (c++ function)": [[62, "_CPPv4NK5dabfg8Registry6modifyE9NamedSlot"], [62, "_CPPv4NK5dabfg8Registry6modifyEPKc"]], "dabfg::registry::modifyblob (c++ function)": [[62, "_CPPv4I0ENK5dabfg8Registry10modifyBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKc"]], "dabfg::registry::modifytexture (c++ function)": [[62, "_CPPv4NK5dabfg8Registry13modifyTextureE9NamedSlot"], [62, "_CPPv4NK5dabfg8Registry13modifyTextureEPKc"]], "dabfg::registry::multiplex (c++ function)": [[62, "_CPPv4N5dabfg8Registry9multiplexEN12multiplexing4ModeE"]], "dabfg::registry::ordermeafter (c++ function)": [[62, "_CPPv4N5dabfg8Registry12orderMeAfterENSt16initializer_listIPKcEE"], [62, "_CPPv4N5dabfg8Registry12orderMeAfterEPKc"]], "dabfg::registry::ordermebefore (c++ function)": [[62, "_CPPv4N5dabfg8Registry13orderMeBeforeENSt16initializer_listIPKcEE"], [62, "_CPPv4N5dabfg8Registry13orderMeBeforeEPKc"]], "dabfg::registry::read (c++ function)": [[62, "_CPPv4NK5dabfg8Registry4readE9NamedSlot"], [62, "_CPPv4NK5dabfg8Registry4readEPKc"]], "dabfg::registry::readblob (c++ function)": [[62, "_CPPv4I0ENK5dabfg8Registry8readBlobE18VirtualBlobRequestI1T18NewRoRequestPolicyEPKc"]], "dabfg::registry::readblobhistory (c++ function)": [[62, "_CPPv4I0ENK5dabfg8Registry15readBlobHistoryE18VirtualBlobRequestI1T20NewHistRequestPolicyEPKc"]], "dabfg::registry::readtexture (c++ function)": [[62, "_CPPv4NK5dabfg8Registry11readTextureE9NamedSlot"], [62, "_CPPv4NK5dabfg8Registry11readTextureEPKc"]], "dabfg::registry::readtexturehistory (c++ function)": [[62, "_CPPv4NK5dabfg8Registry18readTextureHistoryEPKc"]], "dabfg::registry::registerbackbuffer (c++ function)": [[62, "_CPPv4N5dabfg8Registry18registerBackBufferEPKc"]], "dabfg::registry::registerbuffer (c++ function)": [[62, "_CPPv4I0EN5dabfg8Registry14registerBufferE20VirtualBufferRequestI18NewRwRequestPolicyEPKcRR1F"]], "dabfg::registry::registertexture2d (c++ function)": [[62, "_CPPv4I0EN5dabfg8Registry17registerTexture2dE21VirtualTextureRequestI18NewRwRequestPolicyEPKcRR1F"]], "dabfg::registry::rename (c++ function)": [[62, "_CPPv4NK5dabfg8Registry6renameEPKcPKc7History"]], "dabfg::registry::renameblob (c++ function)": [[62, "_CPPv4I0ENK5dabfg8Registry10renameBlobE18VirtualBlobRequestI1T18NewRwRequestPolicyEPKcPKc7History"]], "dabfg::registry::renametexture (c++ function)": [[62, "_CPPv4NK5dabfg8Registry13renameTextureEPKcPKc7History"]], "dabfg::registry::requestrenderpass (c++ function)": [[62, "_CPPv4N5dabfg8Registry17requestRenderPassEv"]], "dabfg::registry::requeststate (c++ function)": [[62, "_CPPv4N5dabfg8Registry12requestStateEv"]], "dabfg::registry::root (c++ function)": [[62, "_CPPv4NK5dabfg8Registry4rootEv"]], "dabfg::registry::setpriority (c++ function)": [[62, "_CPPv4N5dabfg8Registry11setPriorityE10priority_t"]], "dabfg::staterequest (c++ class)": [[62, "_CPPv4N5dabfg12StateRequestE"]], "dabfg::staterequest::allowwireframe (c++ function)": [[62, "_CPPv4NO5dabfg12StateRequest14allowWireframeEv"]], "dabfg::staterequest::enableoverride (c++ function)": [[62, "_CPPv4NO5dabfg12StateRequest14enableOverrideEN7shaders13OverrideStateE"]], "dabfg::staterequest::setframeblock (c++ function)": [[62, "_CPPv4NO5dabfg12StateRequest13setFrameBlockEPKc"]], "dabfg::staterequest::setobjectblock (c++ function)": [[62, "_CPPv4NO5dabfg12StateRequest14setObjectBlockEPKc"]], "dabfg::staterequest::setsceneblock (c++ function)": [[62, "_CPPv4NO5dabfg12StateRequest13setSceneBlockEPKc"]], "dabfg::staterequest::vrs (c++ function)": [[62, "_CPPv4NO5dabfg12StateRequest3vrsE11VrsSettings"]], "dabfg::texture2dcreateinfo (c++ struct)": [[62, "_CPPv4N5dabfg19Texture2dCreateInfoE"]], "dabfg::texture2dcreateinfo::creationflags (c++ member)": [[62, "_CPPv4N5dabfg19Texture2dCreateInfo13creationFlagsE"]], "dabfg::texture2dcreateinfo::miplevels (c++ member)": [[62, "_CPPv4N5dabfg19Texture2dCreateInfo9mipLevelsE"]], "dabfg::texture2dcreateinfo::resolution (c++ member)": [[62, "_CPPv4N5dabfg19Texture2dCreateInfo10resolutionE"]], "dabfg::texture3dcreateinfo (c++ struct)": [[62, "_CPPv4N5dabfg19Texture3dCreateInfoE"]], "dabfg::texture3dcreateinfo::creationflags (c++ member)": [[62, "_CPPv4N5dabfg19Texture3dCreateInfo13creationFlagsE"]], "dabfg::texture3dcreateinfo::miplevels (c++ member)": [[62, "_CPPv4N5dabfg19Texture3dCreateInfo9mipLevelsE"]], "dabfg::texture3dcreateinfo::resolution (c++ member)": [[62, "_CPPv4N5dabfg19Texture3dCreateInfo10resolutionE"]], "dabfg::virtualpassrequest (c++ class)": [[62, "_CPPv4N5dabfg18VirtualPassRequestE"]], "dabfg::virtualpassrequest::colorrwvirtualattachmentrequest (c++ type)": [[62, "_CPPv4N5dabfg18VirtualPassRequest31ColorRwVirtualAttachmentRequestE"]], "dabfg::virtualpassrequest::depthroandsvbindvirtualattachmentrequest (c++ type)": [[62, "_CPPv4N5dabfg18VirtualPassRequest40DepthRoAndSvBindVirtualAttachmentRequestE"]], "dabfg::virtualpassrequest::depthrovirtualattachmentrequest (c++ type)": [[62, "_CPPv4N5dabfg18VirtualPassRequest31DepthRoVirtualAttachmentRequestE"]], "dabfg::virtualpassrequest::rovirtualattachmentrequest (c++ type)": [[62, "_CPPv4N5dabfg18VirtualPassRequest26RoVirtualAttachmentRequestE"]], "dabfg::virtualpassrequest::rwvirtualattachmentrequest (c++ type)": [[62, "_CPPv4N5dabfg18VirtualPassRequest26RwVirtualAttachmentRequestE"]], "dabfg::virtualpassrequest::clear (c++ function)": [[62, "_CPPv4I_DaENO5dabfg18VirtualPassRequest5clearE18VirtualPassRequest26RwVirtualAttachmentRequestPKc"], [62, "_CPPv4NO5dabfg18VirtualPassRequest5clearE26RwVirtualAttachmentRequest18ResourceClearValue"], [62, "_CPPv4NO5dabfg18VirtualPassRequest5clearE26RwVirtualAttachmentRequestPKc"]], "dabfg::virtualpassrequest::color (c++ function)": [[62, "_CPPv4NO5dabfg18VirtualPassRequest5colorENSt16initializer_listI31ColorRwVirtualAttachmentRequestEE"]], "dabfg::virtualpassrequest::depthroandbindtoshadervars (c++ function)": [[62, "_CPPv4NO5dabfg18VirtualPassRequest26depthRoAndBindToShaderVarsE40DepthRoAndSvBindVirtualAttachmentRequestNSt16initializer_listIPKcEE"]], "dabfg::virtualpassrequest::depthrw (c++ function)": [[62, "_CPPv4NO5dabfg18VirtualPassRequest7depthRwE26RwVirtualAttachmentRequest"]], "dabfg::virtualpassrequest::resolve (c++ function)": [[62, "_CPPv4NO5dabfg18VirtualPassRequest7resolveE26RwVirtualAttachmentRequest26RwVirtualAttachmentRequest"]], "dabfg::virtualpassrequest::vrsrate (c++ function)": [[62, "_CPPv4NO5dabfg18VirtualPassRequest7vrsRateE26RoVirtualAttachmentRequest"]], "dabfg::virtualresourcecreationsemirequest (c++ class)": [[62, "_CPPv4N5dabfg34VirtualResourceCreationSemiRequestE"]], "dabfg::virtualresourcecreationsemirequest::blob (c++ function)": [[62, "_CPPv4I0ENO5dabfg34VirtualResourceCreationSemiRequest4blobE22VirtualResourceRequestI1TN3RRP4NoneEEK1T"], [62, "_CPPv4I0ENO5dabfg34VirtualResourceCreationSemiRequest4blobE22VirtualResourceRequestI1TN3RRP4NoneEEv"]], "dabfg::virtualresourcecreationsemirequest::buffer (c++ function)": [[62, "_CPPv4NO5dabfg34VirtualResourceCreationSemiRequest6bufferERK16BufferCreateInfo"]], "dabfg::virtualresourcecreationsemirequest::texture (c++ function)": [[62, "_CPPv4NO5dabfg34VirtualResourceCreationSemiRequest7textureERK19Texture2dCreateInfo"], [62, "_CPPv4NO5dabfg34VirtualResourceCreationSemiRequest7textureERK19Texture3dCreateInfo"]], "dabfg::virtualresourcerequest (c++ class)": [[62, "_CPPv4I0_N6detail21ResourceRequestPolicyEEN5dabfg22VirtualResourceRequestE"]], "dabfg::virtualresourcerequest::atstage (c++ function)": [[62, "_CPPv4NO5dabfg22VirtualResourceRequest7atStageE5Stage"]], "dabfg::virtualresourcerequest::bindasproj (c++ function)": [[62, "_CPPv4I_Da0ENO5dabfg22VirtualResourceRequest10bindAsProjE22VirtualResourceRequestI3Res6policyEv"], [62, "_CPPv4NO5dabfg22VirtualResourceRequest10bindAsProjEv"]], "dabfg::virtualresourcerequest::bindasview (c++ function)": [[62, "_CPPv4I_Da0ENO5dabfg22VirtualResourceRequest10bindAsViewE22VirtualResourceRequestI3Res6policyEv"], [62, "_CPPv4NO5dabfg22VirtualResourceRequest10bindAsViewEv"]], "dabfg::virtualresourcerequest::bindtoshadervar (c++ function)": [[62, "_CPPv4I_Da0ENO5dabfg22VirtualResourceRequest15bindToShaderVarE22VirtualResourceRequestI3Res6policyEPKc"], [62, "_CPPv4NO5dabfg22VirtualResourceRequest15bindToShaderVarEPKc"]], "dabfg::virtualresourcerequest::handle (c++ function)": [[62, "_CPPv4NO5dabfg22VirtualResourceRequest6handleEv"]], "dabfg::virtualresourcerequest::optional (c++ function)": [[62, "_CPPv4NO5dabfg22VirtualResourceRequest8optionalEv"]], "dabfg::virtualresourcerequest::useas (c++ function)": [[62, "_CPPv4NO5dabfg22VirtualResourceRequest5useAsE5Usage"]], "dabfg::virtualresourcesemirequest (c++ class)": [[62, "_CPPv4I_N6detail21ResourceRequestPolicyEEN5dabfg26VirtualResourceSemiRequestE"]], "dabfg::virtualresourcesemirequest::blob (c++ function)": [[62, "_CPPv4I0ENO5dabfg26VirtualResourceSemiRequest4blobE22VirtualResourceRequestI1T6policyEv"]], "dabfg::virtualresourcesemirequest::buffer (c++ function)": [[62, "_CPPv4NO5dabfg26VirtualResourceSemiRequest6bufferEv"]], "dabfg::virtualresourcesemirequest::texture (c++ function)": [[62, "_CPPv4NO5dabfg26VirtualResourceSemiRequest7textureEv"]], "dabfg::multiplexing (c++ type)": [[62, "_CPPv4N5dabfg12multiplexingE"]], "dabfg::multiplexing::extents (c++ struct)": [[62, "_CPPv4N5dabfg12multiplexing7ExtentsE"]], "dabfg::multiplexing::extents::subsamples (c++ member)": [[62, "_CPPv4N5dabfg12multiplexing7Extents10subSamplesE"]], "dabfg::multiplexing::extents::supersamples (c++ member)": [[62, "_CPPv4N5dabfg12multiplexing7Extents12superSamplesE"]], "dabfg::multiplexing::extents::viewports (c++ member)": [[62, "_CPPv4N5dabfg12multiplexing7Extents9viewportsE"]], "dabfg::multiplexing::index (c++ struct)": [[62, "_CPPv4N5dabfg12multiplexing5IndexE"]], "dabfg::multiplexing::index::operator== (c++ function)": [[62, "_CPPv4N5dabfg12multiplexing5IndexeqERK5Index"]], "dabfg::multiplexing::index::subsample (c++ member)": [[62, "_CPPv4N5dabfg12multiplexing5Index9subSampleE"]], "dabfg::multiplexing::index::supersample (c++ member)": [[62, "_CPPv4N5dabfg12multiplexing5Index11superSampleE"]], "dabfg::multiplexing::index::viewport (c++ member)": [[62, "_CPPv4N5dabfg12multiplexing5Index8viewportE"]], "dabfg::multiplexing::mode (c++ enum)": [[62, "_CPPv4N5dabfg12multiplexing4ModeE"]], "dabfg::multiplexing::mode::fullmultiplex (c++ enumerator)": [[62, "_CPPv4N5dabfg12multiplexing4Mode13FullMultiplexE"]], "dabfg::multiplexing::mode::none (c++ enumerator)": [[62, "_CPPv4N5dabfg12multiplexing4Mode4NoneE"]], "dabfg::multiplexing::mode::subsampling (c++ enumerator)": [[62, "_CPPv4N5dabfg12multiplexing4Mode11SubSamplingE"]], "dabfg::multiplexing::mode::supersampling (c++ enumerator)": [[62, "_CPPv4N5dabfg12multiplexing4Mode13SuperSamplingE"]], "dabfg::multiplexing::mode::viewport (c++ enumerator)": [[62, "_CPPv4N5dabfg12multiplexing4Mode8ViewportE"]], "dabfg::multiplexing::operator| (c++ function)": [[62, "_CPPv4N5dabfg12multiplexingorE4Mode4Mode"]], "dabfg::nodehandle (c++ class)": [[63, "_CPPv4N5dabfg10NodeHandleE"]], "dabfg::nodehandle::nodehandle (c++ function)": [[63, "_CPPv4N5dabfg10NodeHandle10NodeHandleERR10NodeHandle"], [63, "_CPPv4N5dabfg10NodeHandle10NodeHandleEv"]], "dabfg::nodehandle::operator bool (c++ function)": [[63, "_CPPv4NK5dabfg10NodeHandlecvbEv"]], "dabfg::nodehandle::operator= (c++ function)": [[63, "_CPPv4N5dabfg10NodeHandleaSERR10NodeHandle"]], "dabfg::nodehandle::valid (c++ function)": [[63, "_CPPv4NK5dabfg10NodeHandle5validEv"]], "dabfg::virtualresourcehandle (c++ class)": [[64, "_CPPv4I0_b_bEN5dabfg21VirtualResourceHandleE"]], "dabfg::virtualresourcehandle::d3dresid (c++ function)": [[64, "_CPPv4NKR5dabfg21VirtualResourceHandle8d3dResIdEv"]], "dabfg::virtualresourcehandle::get (c++ function)": [[64, "_CPPv4NKR5dabfg21VirtualResourceHandle3getEv"]], "dabfg::virtualresourcehandle::ref (c++ function)": [[64, "_CPPv4NKR5dabfg21VirtualResourceHandle3refEv"]], "dabfg::virtualresourcehandle::view (c++ function)": [[64, "_CPPv4NKR5dabfg21VirtualResourceHandle4viewEv"]], "texql (c++ enum)": [[66, "_CPPv45TexQL"]], "texql::tql__count (c++ enumerator)": [[66, "_CPPv4N5TexQL10TQL__COUNTE"]], "texql::tql__first (c++ enumerator)": [[66, "_CPPv4N5TexQL10TQL__FIRSTE"]], "texql::tql__last (c++ enumerator)": [[66, "_CPPv4N5TexQL9TQL__LASTE"]], "texql::tql_base (c++ enumerator)": [[66, "_CPPv4N5TexQL8TQL_baseE"]], "texql::tql_high (c++ enumerator)": [[66, "_CPPv4N5TexQL8TQL_highE"]], "texql::tql_stub (c++ enumerator)": [[66, "_CPPv4N5TexQL8TQL_stubE"]], "texql::tql_thumb (c++ enumerator)": [[66, "_CPPv4N5TexQL9TQL_thumbE"]], "texql::tql_uhq (c++ enumerator)": [[66, "_CPPv4N5TexQL7TQL_uhqE"]], "acquire_managed_buf (c++ function)": [[66, "_CPPv419acquire_managed_buf8D3DRESID"]], "acquire_managed_res (c++ function)": [[66, "_CPPv419acquire_managed_res8D3DRESID"]], "acquire_managed_tex (c++ function)": [[66, "_CPPv419acquire_managed_tex8D3DRESID"]], "enable_res_mgr_mt (c++ function)": [[66, "_CPPv417enable_res_mgr_mtbi"]], "first_managed_d3dres (c++ function)": [[66, "_CPPv420first_managed_d3dresi"]], "get_managed_res_cur_tql (c++ function)": [[66, "_CPPv423get_managed_res_cur_tql8D3DRESID"]], "get_managed_res_id (c++ function)": [[66, "_CPPv418get_managed_res_idPKc"]], "get_managed_res_lfu (c++ function)": [[66, "_CPPv419get_managed_res_lfu8D3DRESID"]], "get_managed_res_loaded_lev (c++ function)": [[66, "_CPPv426get_managed_res_loaded_lev8D3DRESID"]], "get_managed_res_max_tql (c++ function)": [[66, "_CPPv423get_managed_res_max_tql8D3DRESID"]], "get_managed_res_maxreq_lev (c++ function)": [[66, "_CPPv426get_managed_res_maxreq_lev8D3DRESID"]], "get_managed_res_name (c++ function)": [[66, "_CPPv420get_managed_res_name8D3DRESID"]], "get_managed_res_refcount (c++ function)": [[66, "_CPPv424get_managed_res_refcount8D3DRESID"]], "is_managed_res_factory_set (c++ function)": [[66, "_CPPv426is_managed_res_factory_set8D3DRESID"]], "iterate_all_managed_d3dres (c++ function)": [[66, "_CPPv426iterate_all_managed_d3dres8D3DRESIDi"]], "next_managed_d3dres (c++ function)": [[66, "_CPPv419next_managed_d3dres8D3DRESIDi"]], "register_managed_res (c++ function)": [[66, "_CPPv420register_managed_resPKcP11D3dResource"]], "release_managed_buf (c++ function)": [[66, "_CPPv419release_managed_buf8D3DRESID"]], "release_managed_buf_verified (c++ function)": [[66, "_CPPv4I0E28release_managed_buf_verifiedvR8D3DRESIDR1T"]], "release_managed_res (c++ function)": [[66, "_CPPv419release_managed_res8D3DRESID"]], "release_managed_res_verified (c++ function)": [[66, "_CPPv428release_managed_res_verifiedR8D3DRESIDP11D3dResource"]], "release_managed_tex (c++ function)": [[66, "_CPPv419release_managed_tex8D3DRESID"]], "release_managed_tex_verified (c++ function)": [[66, "_CPPv4I0E28release_managed_tex_verifiedvR8D3DRESIDR1T"]], "bad_d3dresid (c++ member)": [[67, "_CPPv412BAD_D3DRESID"]], "bad_textureid (c++ member)": [[67, "_CPPv413BAD_TEXTUREID"]], "d3dresid (c++ class)": [[67, "_CPPv48D3DRESID"]], "d3dresid::d3dresid (c++ function)": [[67, "_CPPv4N8D3DRESID8D3DRESIDERK8D3DRESID"], [67, "_CPPv4N8D3DRESID8D3DRESIDERR8D3DRESID"], [67, "_CPPv4N8D3DRESID8D3DRESIDEj"], [67, "_CPPv4N8D3DRESID8D3DRESIDEv"]], "d3dresid::checkmarkerbit (c++ function)": [[67, "_CPPv4NK8D3DRESID14checkMarkerBitEv"]], "d3dresid::fromindex (c++ function)": [[67, "_CPPv4N8D3DRESID9fromIndexEj"]], "d3dresid::generation (c++ function)": [[67, "_CPPv4NK8D3DRESID10generationEv"]], "d3dresid::index (c++ function)": [[67, "_CPPv4NK8D3DRESID5indexEv"]], "d3dresid::make (c++ function)": [[67, "_CPPv4N8D3DRESID4makeEjj"]], "d3dresid::operator bool (c++ function)": [[67, "_CPPv4NK8D3DRESIDcvbEv"]], "d3dresid::operator unsigned (c++ function)": [[67, "_CPPv4NK8D3DRESIDcvjEv"]], "d3dresid::operator!= (c++ function)": [[67, "_CPPv4NK8D3DRESIDneERK8D3DRESID"]], "d3dresid::operator< (c++ function)": [[67, "_CPPv4NK8D3DRESIDltERK8D3DRESID"]], "d3dresid::operator= (c++ function)": [[67, "_CPPv4N8D3DRESIDaSERK8D3DRESID"], [67, "_CPPv4N8D3DRESIDaSERR8D3DRESID"]], "d3dresid::operator== (c++ function)": [[67, "_CPPv4NK8D3DRESIDeqERK8D3DRESID"]], "d3dresid::operator> (c++ function)": [[67, "_CPPv4NK8D3DRESIDgtERK8D3DRESID"]], "d3dresid::reset (c++ function)": [[67, "_CPPv4N8D3DRESID5resetEv"]], "textureid (c++ type)": [[67, "_CPPv49TEXTUREID"]], "lodbiasrule (c++ struct)": [[68, "_CPPv411LODBiasRule"]], "lodbiasrule::bias (c++ member)": [[68, "_CPPv4N11LODBiasRule4biasE"]], "lodbiasrule::substring (c++ member)": [[68, "_CPPv4N11LODBiasRule9substringE"]], "texturefactory (c++ class)": [[68, "_CPPv414TextureFactory"]], "texturefactory::texturefactory (c++ function)": [[68, "_CPPv4N14TextureFactory14TextureFactoryERR14TextureFactory"], [68, "_CPPv4N14TextureFactory14TextureFactoryEv"]], "texturefactory::createtexture (c++ function)": [[68, "_CPPv4N14TextureFactory13createTextureE9TEXTUREID"]], "texturefactory::gettextureddsx (c++ function)": [[68, "_CPPv4N14TextureFactory14getTextureDDSxE9TEXTUREIDR3TabIcE"]], "texturefactory::ispersistenttexname (c++ function)": [[68, "_CPPv4N14TextureFactory19isPersistentTexNameEPKc"]], "texturefactory::ontexfactorydeleted (c++ function)": [[68, "_CPPv4N14TextureFactory19onTexFactoryDeletedEP14TextureFactory"]], "texturefactory::onunregistertexture (c++ function)": [[68, "_CPPv4N14TextureFactory19onUnregisterTextureE9TEXTUREID"]], "texturefactory::operator= (c++ function)": [[68, "_CPPv4N14TextureFactoryaSERR14TextureFactory"]], "texturefactory::releasetexture (c++ function)": [[68, "_CPPv4N14TextureFactory14releaseTextureEP11BaseTexture9TEXTUREID"]], "texturefactory::scheduletexloading (c++ function)": [[68, "_CPPv4N14TextureFactory18scheduleTexLoadingE9TEXTUREID5TexQL"]], "texturefactory::texfactoryactivechanged (c++ function)": [[68, "_CPPv4N14TextureFactory23texFactoryActiveChangedEb"]], "texturefactory::~texturefactory (c++ function)": [[68, "_CPPv4N14TextureFactoryD0Ev"]], "add_anisotropy_exception (c++ function)": [[68, "_CPPv424add_anisotropy_exception9TEXTUREID"]], "add_managed_array_texture (c++ function)": [[68, "_CPPv425add_managed_array_texturePKcN3dag9ConstSpanIPKcEE"]], "add_managed_texture (c++ function)": [[68, "_CPPv419add_managed_texturePKcP14TextureFactory"]], "change_managed_texture (c++ function)": [[68, "_CPPv422change_managed_texture9TEXTUREIDP11BaseTextureP14TextureFactory"]], "check_all_managed_textures_loaded (c++ function)": [[68, "_CPPv433check_all_managed_textures_loadedN3dag9ConstSpanI9TEXTUREIDEEbb"]], "check_managed_texture_loaded (c++ function)": [[68, "_CPPv428check_managed_texture_loaded9TEXTUREIDb"]], "dgs_tex_anisotropy (c++ member)": [[68, "_CPPv418dgs_tex_anisotropy"]], "dgs_tex_quality (c++ member)": [[68, "_CPPv415dgs_tex_quality"]], "discard_unused_managed_texture (c++ function)": [[68, "_CPPv430discard_unused_managed_texture9TEXTUREID"]], "discard_unused_managed_textures (c++ function)": [[68, "_CPPv431discard_unused_managed_texturesv"]], "enable_tex_mgr_mt (c++ function)": [[68, "_CPPv417enable_tex_mgr_mtbi"]], "evict_managed_tex_id (c++ function)": [[68, "_CPPv420evict_managed_tex_idR9TEXTUREID"]], "first_managed_texture (c++ function)": [[68, "_CPPv421first_managed_texturei"]], "get_default_tex_factory (c++ function)": [[68, "_CPPv423get_default_tex_factoryv"]], "get_managed_texture_id (c++ function)": [[68, "_CPPv422get_managed_texture_idPKc"]], "get_managed_texture_name (c++ function)": [[68, "_CPPv424get_managed_texture_name8D3DRESID"]], "get_managed_texture_refcount (c++ function)": [[68, "_CPPv428get_managed_texture_refcount8D3DRESID"]], "get_max_managed_texture_id (c++ function)": [[68, "_CPPv426get_max_managed_texture_idv"]], "get_sampler_info (c++ function)": [[68, "_CPPv416get_sampler_infoRK15TextureMetaDatab"]], "get_stub_tex_factory (c++ function)": [[68, "_CPPv420get_stub_tex_factoryv"]], "get_symbolic_tex_factory (c++ function)": [[68, "_CPPv424get_symbolic_tex_factoryv"]], "get_texture_meta_data (c++ function)": [[68, "_CPPv421get_texture_meta_data9TEXTUREID"]], "get_texture_separate_sampler (c++ function)": [[68, "_CPPv428get_texture_separate_sampler9TEXTUREID"]], "init_managed_textures_streaming_support (c++ function)": [[68, "_CPPv439init_managed_textures_streaming_supporti"]], "is_managed_tex_factory_set (c++ function)": [[68, "_CPPv426is_managed_tex_factory_set8D3DRESID"]], "is_managed_texture_id_valid (c++ function)": [[68, "_CPPv427is_managed_texture_id_valid9TEXTUREIDb"]], "is_managed_texture_incomplete (c++ function)": [[68, "_CPPv429is_managed_texture_incomplete9TEXTUREID"]], "is_managed_textures_streaming_active (c++ function)": [[68, "_CPPv436is_managed_textures_streaming_activev"]], "is_managed_textures_streaming_load_on_demand (c++ function)": [[68, "_CPPv444is_managed_textures_streaming_load_on_demandv"]], "iterate_all_managed_textures (c++ function)": [[68, "_CPPv428iterate_all_managed_textures9TEXTUREIDi"]], "load_anisotropy_from_settings (c++ function)": [[68, "_CPPv429load_anisotropy_from_settingsv"]], "mark_managed_tex_lfu (c++ function)": [[68, "_CPPv420mark_managed_tex_lfu9TEXTUREIDj"]], "mark_managed_textures_important (c++ function)": [[68, "_CPPv431mark_managed_textures_importantN3dag9ConstSpanI9TEXTUREIDEEji"]], "next_managed_texture (c++ function)": [[68, "_CPPv420next_managed_texture9TEXTUREIDi"]], "prefetch_and_check_managed_texture_loaded (c++ function)": [[68, "_CPPv441prefetch_and_check_managed_texture_loaded9TEXTUREIDb"]], "prefetch_and_check_managed_textures_loaded (c++ function)": [[68, "_CPPv442prefetch_and_check_managed_textures_loadedN3dag9ConstSpanI9TEXTUREIDEEb"]], "prefetch_and_wait_managed_textures_loaded (c++ function)": [[68, "_CPPv441prefetch_and_wait_managed_textures_loadedN3dag9ConstSpanI9TEXTUREIDEEb"]], "prefetch_managed_texture (c++ function)": [[68, "_CPPv424prefetch_managed_texture9TEXTUREID"]], "prefetch_managed_textures (c++ function)": [[68, "_CPPv425prefetch_managed_texturesN3dag9ConstSpanI9TEXTUREIDEE"]], "prefetch_managed_textures_by_textag (c++ function)": [[68, "_CPPv435prefetch_managed_textures_by_textagi"]], "register_managed_tex (c++ function)": [[68, "_CPPv420register_managed_texPKcP11BaseTexture"]], "reload_managed_array_textures_for_changed_slice (c++ function)": [[68, "_CPPv447reload_managed_array_textures_for_changed_slicePKc"]], "reset_anisotropy (c++ function)": [[68, "_CPPv416reset_anisotropyPKc"]], "reset_managed_textures_streaming_state (c++ function)": [[68, "_CPPv438reset_managed_textures_streaming_statev"]], "set_add_lod_bias_batch (c++ function)": [[68, "_CPPv422set_add_lod_bias_batchN3dag4SpanIK11LODBiasRuleEE"]], "set_default_tex_factory (c++ function)": [[68, "_CPPv423set_default_tex_factoryP14TextureFactory"]], "set_texture_separate_sampler (c++ function)": [[68, "_CPPv428set_texture_separate_sampler9TEXTUREIDRKN3d3d11SamplerInfoE"]], "update_managed_array_texture (c++ function)": [[68, "_CPPv428update_managed_array_texturePKcN3dag9ConstSpanIPKcEE"]], "actionlist (none attribute)": [[70, "ActionList"]], "nodehandlewithslotsaccess (none attribute)": [[70, "NodeHandleWithSlotsAccess"]], "nodehandlewithslotsaccess() (built-in function)": [[70, "NodeHandleWithSlotsAccess"]], "state (none attribute)": [[70, "State"]], "reset() (built-in function)": [[70, "reset"]], "resourcetocreatefor() (built-in function)": [[70, "resourceToCreateFor"]], "resourcetoreadfrom() (built-in function)": [[70, "resourceToReadFrom"]], "resource_slot::nodehandlewithslotsaccess (c++ struct)": [[71, "_CPPv4N13resource_slot25NodeHandleWithSlotsAccessE"]], "resource_slot::nodehandlewithslotsaccess::reset (c++ function)": [[71, "_CPPv4N13resource_slot25NodeHandleWithSlotsAccess5resetEv"]], "resource_slot::nodehandlewithslotsaccess::valid (c++ function)": [[71, "_CPPv4NK13resource_slot25NodeHandleWithSlotsAccess5validEv"]], "resource_slot::nodehandlewithslotsaccess::~nodehandlewithslotsaccess (c++ function)": [[71, "_CPPv4N13resource_slot25NodeHandleWithSlotsAccessD0Ev"]], "resource_slot::create (c++ struct)": [[72, "_CPPv4N13resource_slot6CreateE"]], "resource_slot::create::create (c++ function)": [[72, "_CPPv4N13resource_slot6Create6CreateEPKcPKc"]], "resource_slot::read (c++ struct)": [[72, "_CPPv4N13resource_slot4ReadE"]], "resource_slot::read::read (c++ function)": [[72, "_CPPv4N13resource_slot4Read4ReadEPKci"]], "resource_slot::state (c++ struct)": [[72, "_CPPv4N13resource_slot5StateE"]], "resource_slot::state::resourcetocreatefor (c++ function)": [[72, "_CPPv4NK13resource_slot5State19resourceToCreateForEPKc"]], "resource_slot::state::resourcetoreadfrom (c++ function)": [[72, "_CPPv4NK13resource_slot5State18resourceToReadFromEPKc"]], "resource_slot::update (c++ struct)": [[72, "_CPPv4N13resource_slot6UpdateE"]], "resource_slot::update::update (c++ function)": [[72, "_CPPv4N13resource_slot6Update6UpdateEPKcPKci"]], "resource_slot::resolve_access (c++ function)": [[73, "_CPPv4N13resource_slot14resolve_accessEv"]], "create (none attribute)": [[74, "Create"]], "default_read_priority = 2147483647 (none attribute)": [[74, "DEFAULT_READ_PRIORITY = 2147483647"]], "read (none attribute)": [[74, "Read"]], "slotactions (none attribute)": [[74, "SlotActions"]], "update (none attribute)": [[74, "Update"]], "registeraccess() (built-in function)": [[74, "registerAccess"]], "resourceslotecsannotation : astfunctionannotation (none attribute)": [[75, "ResourceSlotEcsAnnotation : AstFunctionAnnotation"]], "resourceslotecsannotation.apply() (resourceslotecsannotation method)": [[75, "ResourceSlotEcsAnnotation.apply"]], "resourceslotecsannotation.declarees() (resourceslotecsannotation method)": [[75, "ResourceSlotEcsAnnotation.declareES"]], "resourceslotecsannotation.declarereloadcallback() (resourceslotecsannotation method)": [[75, "ResourceSlotEcsAnnotation.declareReloadCallback"]], "resourceslotecsannotation.parseargs() (resourceslotecsannotation method)": [[75, "ResourceSlotEcsAnnotation.parseArgs"]], "resource_slot_ecs (none attribute)": [[75, "resource_slot_ecs"]], "function get_button_state() (built-in function)": [[77, "function get_button_state"]], "function get_joystick_axis() (built-in function)": [[77, "function get_joystick_axis"]], "function get_mouse_pos() (built-in function)": [[77, "function get_mouse_pos"]], "var sensscale.humanaiming (var sensscale attribute)": [[80, "var SensScale.humanAiming"]], "var sensscale.humanfpscam (var sensscale attribute)": [[80, "var SensScale.humanFpsCam"]], "var sensscale.humantpscam (var sensscale attribute)": [[80, "var SensScale.humanTpsCam"]], "var sensscale.planecam (var sensscale attribute)": [[80, "var SensScale.planeCam"]], "var sensscale.vehiclecam (var sensscale attribute)": [[80, "var SensScale.vehicleCam"]], "function add_entity_in_net_scope() (built-in function)": [[82, "function add_entity_in_net_scope"]], "function get_dasevent_net_version() (built-in function)": [[82, "function get_dasevent_net_version"]], "function get_sync_time() (built-in function)": [[82, "function get_sync_time"]], "function get_user_id() (built-in function)": [[82, "function get_user_id"]], "function are_settings_changes_committed() (built-in function)": [[83, "function are_settings_changes_committed"]], "function commit_settings_changes() (built-in function)": [[83, "function commit_settings_changes"]], "function get_setting_by_blk_path() (built-in function)": [[83, "function get_setting_by_blk_path"]], "function remove_setting_by_blk_path() (built-in function)": [[83, "function remove_setting_by_blk_path"]], "function save_changed_settings() (built-in function)": [[83, "function save_changed_settings"]], "function save_settings() (built-in function)": [[83, "function save_settings"]], "function set_setting_by_blk_path() (built-in function)": [[83, "function set_setting_by_blk_path"]], "function set_setting_by_blk_path_and_save() (built-in function)": [[83, "function set_setting_by_blk_path_and_save"]], "function apply_video_settings() (built-in function)": [[84, "function apply_video_settings"]], "function change_gamma() (built-in function)": [[84, "function change_gamma"]], "function change_paper_white_nits() (built-in function)": [[84, "function change_paper_white_nits"]], "function get_available_monitors() (built-in function)": [[84, "function get_available_monitors"]], "function get_current_window_resolution() (built-in function)": [[84, "function get_current_window_resolution"]], "function get_default_static_resolution_scale() (built-in function)": [[84, "function get_default_static_resolution_scale"]], "function get_dlss_state() (built-in function)": [[84, "function get_dlss_state"]], "function get_dlssg_support_state() (built-in function)": [[84, "function get_dlssg_support_state"]], "function get_fsr_supported() (built-in function)": [[84, "function get_fsr_supported"]], "function get_low_latency_modes() (built-in function)": [[84, "function get_low_latency_modes"]], "function get_monitor_info() (built-in function)": [[84, "function get_monitor_info"]], "function get_performance_display_mode_support() (built-in function)": [[84, "function get_performance_display_mode_support"]], "function get_video_modes() (built-in function)": [[84, "function get_video_modes"]], "function get_xess_state() (built-in function)": [[84, "function get_xess_state"]], "function is_dlss_quality_available_at_resolution() (built-in function)": [[84, "function is_dlss_quality_available_at_resolution"]], "function is_dx12() (built-in function)": [[84, "function is_dx12"]], "function is_fullscreen_enabled() (built-in function)": [[84, "function is_fullscreen_enabled"]], "function is_gui_driver_select_enabled() (built-in function)": [[84, "function is_gui_driver_select_enabled"]], "function is_hdr_available() (built-in function)": [[84, "function is_hdr_available"]], "function is_hdr_enabled() (built-in function)": [[84, "function is_hdr_enabled"]], "function is_hfr_supported() (built-in function)": [[84, "function is_hfr_supported"]], "function is_inline_rt_supported() (built-in function)": [[84, "function is_inline_rt_supported"]], "function is_only_low_gi_supported() (built-in function)": [[84, "function is_only_low_gi_supported"]], "function is_rendinst_tessellation_supported() (built-in function)": [[84, "function is_rendinst_tessellation_supported"]], "function is_upsampling() (built-in function)": [[84, "function is_upsampling"]], "function is_vrr_supported() (built-in function)": [[84, "function is_vrr_supported"]], "function is_vulkan() (built-in function)": [[84, "function is_vulkan"]], "function is_xess_quality_available_at_resolution() (built-in function)": [[84, "function is_xess_quality_available_at_resolution"]], "function set_dlssg_suppressed() (built-in function)": [[84, "function set_dlssg_suppressed"]], "function closegraphicsautodetect() (built-in function)": [[85, "function closeGraphicsAutodetect"]], "function getgpubenchmarkduration() (built-in function)": [[85, "function getGpuBenchmarkDuration"]], "function getpresetfor60fps() (built-in function)": [[85, "function getPresetFor60Fps"]], "function getpresetformaxfps() (built-in function)": [[85, "function getPresetForMaxFPS"]], "function getpresetformaxquality() (built-in function)": [[85, "function getPresetForMaxQuality"]], "function initgraphicsautodetect() (built-in function)": [[85, "function initGraphicsAutodetect"]], "function isgpubenchmarkrunning() (built-in function)": [[85, "function isGpuBenchmarkRunning"]], "function startgpubenchmark() (built-in function)": [[85, "function startGpuBenchmark"]], "eventdatarect.b (eventdatarect attribute)": [[87, "EventDataRect.b"], [100, "EventDataRect.b"]], "eventdatarect.l (eventdatarect attribute)": [[87, "EventDataRect.l"], [100, "EventDataRect.l"]], "eventdatarect.r (eventdatarect attribute)": [[87, "EventDataRect.r"], [100, "EventDataRect.r"]], "eventdatarect.t (eventdatarect attribute)": [[87, "EventDataRect.t"], [100, "EventDataRect.t"]], "fonts (none attribute)": [[87, "Fonts"], [100, "Fonts"]], "bgcolor (none attribute)": [[87, "bgColor"], [100, "bgColor"]], "bordercolor (none attribute)": [[87, "borderColor"], [100, "borderColor"]], "brightness (none attribute)": [[87, "brightness"], [100, "brightness"]], "color (none attribute)": [[87, "color"], [100, "color"]], "const align_bottom = align_bottom (none attribute)": [[87, "const ALIGN_BOTTOM = ALIGN_BOTTOM"], [100, "const ALIGN_BOTTOM = ALIGN_BOTTOM"]], "const align_center = align_center (none attribute)": [[87, "const ALIGN_CENTER = ALIGN_CENTER"], [100, "const ALIGN_CENTER = ALIGN_CENTER"]], "const align_left = align_left (none attribute)": [[87, "const ALIGN_LEFT = ALIGN_LEFT"], [100, "const ALIGN_LEFT = ALIGN_LEFT"]], "const align_right = align_right (none attribute)": [[87, "const ALIGN_RIGHT = ALIGN_RIGHT"], [100, "const ALIGN_RIGHT = ALIGN_RIGHT"]], "const align_top = align_top (none attribute)": [[87, "const ALIGN_TOP = ALIGN_TOP"], [100, "const ALIGN_TOP = ALIGN_TOP"]], "const axis_lr_trigger (none attribute)": [[87, "const AXIS_LR_TRIGGER"], [100, "const AXIS_LR_TRIGGER"]], "const axis_l_thumb_h (none attribute)": [[87, "const AXIS_L_THUMB_H"], [100, "const AXIS_L_THUMB_H"]], "const axis_l_thumb_v (none attribute)": [[87, "const AXIS_L_THUMB_V"], [100, "const AXIS_L_THUMB_V"]], "const axis_l_trigger (none attribute)": [[87, "const AXIS_L_TRIGGER"], [100, "const AXIS_L_TRIGGER"]], "const axis_r_thumb_h (none attribute)": [[87, "const AXIS_R_THUMB_H"], [100, "const AXIS_R_THUMB_H"]], "const axis_r_thumb_v (none attribute)": [[87, "const AXIS_R_THUMB_V"], [100, "const AXIS_R_THUMB_V"]], "const axis_r_trigger (none attribute)": [[87, "const AXIS_R_TRIGGER"], [100, "const AXIS_R_TRIGGER"]], "const behaviors.boundtoarea (const behaviors attribute)": [[87, "const Behaviors.BoundToArea"], [100, "const Behaviors.BoundToArea"]], "const behaviors.button (const behaviors attribute)": [[87, "const Behaviors.Button"], [100, "const Behaviors.Button"]], "const behaviors.combopopup (const behaviors attribute)": [[87, "const Behaviors.ComboPopup"], [100, "const Behaviors.ComboPopup"]], "const behaviors.draganddrop (const behaviors attribute)": [[87, "const Behaviors.DragAndDrop"], [100, "const Behaviors.DragAndDrop"]], "const behaviors.eatinput (const behaviors attribute)": [[87, "const Behaviors.EatInput"], [100, "const Behaviors.EatInput"]], "const behaviors.fpsbar (const behaviors attribute)": [[87, "const Behaviors.FpsBar"], [100, "const Behaviors.FpsBar"]], "const behaviors.inspectpicker (const behaviors attribute)": [[87, "const Behaviors.InspectPicker"], [100, "const Behaviors.InspectPicker"]], "const behaviors.latencybar (const behaviors attribute)": [[87, "const Behaviors.LatencyBar"], [100, "const Behaviors.LatencyBar"]], "const behaviors.marquee (const behaviors attribute)": [[87, "const Behaviors.Marquee"], [100, "const Behaviors.Marquee"]], "const behaviors.moveresize (const behaviors attribute)": [[87, "const Behaviors.MoveResize"], [100, "const Behaviors.MoveResize"]], "const behaviors.movetoarea (const behaviors attribute)": [[87, "const Behaviors.MoveToArea"], [100, "const Behaviors.MoveToArea"]], "const behaviors.movie (const behaviors attribute)": [[87, "const Behaviors.Movie"], [100, "const Behaviors.Movie"]], "const behaviors.overlaytransparency (const behaviors attribute)": [[87, "const Behaviors.OverlayTransparency"], [100, "const Behaviors.OverlayTransparency"]], "const behaviors.pannable (const behaviors attribute)": [[87, "const Behaviors.Pannable"], [100, "const Behaviors.Pannable"]], "const behaviors.pannable2touch (const behaviors attribute)": [[87, "const Behaviors.Pannable2touch"], [100, "const Behaviors.Pannable2touch"]], "const behaviors.parallax (const behaviors attribute)": [[87, "const Behaviors.Parallax"], [100, "const Behaviors.Parallax"]], "const behaviors.piemenu (const behaviors attribute)": [[87, "const Behaviors.PieMenu"], [100, "const Behaviors.PieMenu"]], "const behaviors.processgesture (const behaviors attribute)": [[87, "const Behaviors.ProcessGesture"], [100, "const Behaviors.ProcessGesture"]], "const behaviors.processpointinginput (const behaviors attribute)": [[87, "const Behaviors.ProcessPointingInput"], [100, "const Behaviors.ProcessPointingInput"]], "const behaviors.recalchandler (const behaviors attribute)": [[87, "const Behaviors.RecalcHandler"], [100, "const Behaviors.RecalcHandler"]], "const behaviors.rtpropupdate (const behaviors attribute)": [[87, "const Behaviors.RtPropUpdate"], [100, "const Behaviors.RtPropUpdate"]], "const behaviors.scrollevent (const behaviors attribute)": [[87, "const Behaviors.ScrollEvent"], [100, "const Behaviors.ScrollEvent"]], "const behaviors.slider (const behaviors attribute)": [[87, "const Behaviors.Slider"], [100, "const Behaviors.Slider"]], "const behaviors.smoothscrollstack (const behaviors attribute)": [[87, "const Behaviors.SmoothScrollStack"], [100, "const Behaviors.SmoothScrollStack"]], "const behaviors.swipescroll (const behaviors attribute)": [[87, "const Behaviors.SwipeScroll"], [100, "const Behaviors.SwipeScroll"]], "const behaviors.textarea (const behaviors attribute)": [[87, "const Behaviors.TextArea"], [100, "const Behaviors.TextArea"]], "const behaviors.textareaedit (const behaviors attribute)": [[87, "const Behaviors.TextAreaEdit"], [100, "const Behaviors.TextAreaEdit"]], "const behaviors.textinput (const behaviors attribute)": [[87, "const Behaviors.TextInput"], [100, "const Behaviors.TextInput"]], "const behaviors.trackmouse (const behaviors attribute)": [[87, "const Behaviors.TrackMouse"], [100, "const Behaviors.TrackMouse"]], "const behaviors.transitionsize (const behaviors attribute)": [[87, "const Behaviors.TransitionSize"], [100, "const Behaviors.TransitionSize"]], "const behaviors.wheelscroll (const behaviors attribute)": [[87, "const Behaviors.WheelScroll"], [100, "const Behaviors.WheelScroll"]], "const blink (none attribute)": [[87, "const Blink"], [100, "const Blink"]], "const blinkcos (none attribute)": [[87, "const BlinkCos"], [100, "const BlinkCos"]], "const blinksin (none attribute)": [[87, "const BlinkSin"], [100, "const BlinkSin"]], "const cosinefull (none attribute)": [[87, "const CosineFull"], [100, "const CosineFull"]], "const devid_joystick (none attribute)": [[87, "const DEVID_JOYSTICK"], [100, "const DEVID_JOYSTICK"]], "const devid_keyboard (none attribute)": [[87, "const DEVID_KEYBOARD"], [100, "const DEVID_KEYBOARD"]], "const devid_mouse (none attribute)": [[87, "const DEVID_MOUSE"], [100, "const DEVID_MOUSE"]], "const devid_touch (none attribute)": [[87, "const DEVID_TOUCH"], [100, "const DEVID_TOUCH"]], "const devid_vr (none attribute)": [[87, "const DEVID_VR"], [100, "const DEVID_VR"]], "const dir_down (none attribute)": [[87, "const DIR_DOWN"], [100, "const DIR_DOWN"]], "const dir_left (none attribute)": [[87, "const DIR_LEFT"], [100, "const DIR_LEFT"]], "const dir_right (none attribute)": [[87, "const DIR_RIGHT"], [100, "const DIR_RIGHT"]], "const dir_up (none attribute)": [[87, "const DIR_UP"], [100, "const DIR_UP"]], "const discrete8 (none attribute)": [[87, "const Discrete8"], [100, "const Discrete8"]], "const doubleblink (none attribute)": [[87, "const DoubleBlink"], [100, "const DoubleBlink"]], "const event_break = guiscene::event_break (none attribute)": [[87, "const EVENT_BREAK = GuiScene::EVENT_BREAK"], [100, "const EVENT_BREAK = GuiScene::EVENT_BREAK"]], "const event_continue = guiscene::event_continue (none attribute)": [[87, "const EVENT_CONTINUE = GuiScene::EVENT_CONTINUE"], [100, "const EVENT_CONTINUE = GuiScene::EVENT_CONTINUE"]], "const fft_blur (none attribute)": [[87, "const FFT_BLUR"], [100, "const FFT_BLUR"]], "const fft_glow (none attribute)": [[87, "const FFT_GLOW"], [100, "const FFT_GLOW"]], "const fft_none (none attribute)": [[87, "const FFT_NONE"], [100, "const FFT_NONE"]], "const fft_outline (none attribute)": [[87, "const FFT_OUTLINE"], [100, "const FFT_OUTLINE"]], "const fft_shadow (none attribute)": [[87, "const FFT_SHADOW"], [100, "const FFT_SHADOW"]], "const flow_horizontal (none attribute)": [[87, "const FLOW_HORIZONTAL"], [100, "const FLOW_HORIZONTAL"]], "const flow_parent_relative (none attribute)": [[87, "const FLOW_PARENT_RELATIVE"], [100, "const FLOW_PARENT_RELATIVE"]], "const flow_vertical (none attribute)": [[87, "const FLOW_VERTICAL"], [100, "const FLOW_VERTICAL"]], "const fmt_as_is (none attribute)": [[87, "const FMT_AS_IS"], [100, "const FMT_AS_IS"]], "const fmt_hide_ellipsis (none attribute)": [[87, "const FMT_HIDE_ELLIPSIS"], [100, "const FMT_HIDE_ELLIPSIS"]], "const fmt_ignore_tags (none attribute)": [[87, "const FMT_IGNORE_TAGS"], [100, "const FMT_IGNORE_TAGS"]], "const fmt_keep_spaces (none attribute)": [[87, "const FMT_KEEP_SPACES"], [100, "const FMT_KEEP_SPACES"]], "const fmt_no_wrap (none attribute)": [[87, "const FMT_NO_WRAP"], [100, "const FMT_NO_WRAP"]], "const gesture_detector_drag = gesturedetector::type::drag (none attribute)": [[87, "const GESTURE_DETECTOR_DRAG = GestureDetector::Type::DRAG"], [100, "const GESTURE_DETECTOR_DRAG = GestureDetector::Type::DRAG"]], "const gesture_detector_pinch = gesturedetector::type::pinch (none attribute)": [[87, "const GESTURE_DETECTOR_PINCH = GestureDetector::Type::PINCH"], [100, "const GESTURE_DETECTOR_PINCH = GestureDetector::Type::PINCH"]], "const gesture_detector_rotate = gesturedetector::type::rotate (none attribute)": [[87, "const GESTURE_DETECTOR_ROTATE = GestureDetector::Type::ROTATE"], [100, "const GESTURE_DETECTOR_ROTATE = GestureDetector::Type::ROTATE"]], "const inback (none attribute)": [[87, "const InBack"], [100, "const InBack"]], "const inbounce (none attribute)": [[87, "const InBounce"], [100, "const InBounce"]], "const incirc (none attribute)": [[87, "const InCirc"], [100, "const InCirc"]], "const incubic (none attribute)": [[87, "const InCubic"], [100, "const InCubic"]], "const inelastic (none attribute)": [[87, "const InElastic"], [100, "const InElastic"]], "const inexp (none attribute)": [[87, "const InExp"], [100, "const InExp"]], "const inoutback (none attribute)": [[87, "const InOutBack"], [100, "const InOutBack"]], "const inoutbezier (none attribute)": [[87, "const InOutBezier"], [100, "const InOutBezier"]], "const inoutbounce (none attribute)": [[87, "const InOutBounce"], [100, "const InOutBounce"]], "const inoutcirc (none attribute)": [[87, "const InOutCirc"], [100, "const InOutCirc"]], "const inoutcubic (none attribute)": [[87, "const InOutCubic"], [100, "const InOutCubic"]], "const inoutelastic (none attribute)": [[87, "const InOutElastic"], [100, "const InOutElastic"]], "const inoutexp (none attribute)": [[87, "const InOutExp"], [100, "const InOutExp"]], "const inoutquad (none attribute)": [[87, "const InOutQuad"], [100, "const InOutQuad"]], "const inoutquart (none attribute)": [[87, "const InOutQuart"], [100, "const InOutQuart"]], "const inoutquintic (none attribute)": [[87, "const InOutQuintic"], [100, "const InOutQuintic"]], "const inoutsine (none attribute)": [[87, "const InOutSine"], [100, "const InOutSine"]], "const inquad (none attribute)": [[87, "const InQuad"], [100, "const InQuad"]], "const inquart (none attribute)": [[87, "const InQuart"], [100, "const InQuart"]], "const inquintic (none attribute)": [[87, "const InQuintic"], [100, "const InQuintic"]], "const insine (none attribute)": [[87, "const InSine"], [100, "const InSine"]], "const instep (none attribute)": [[87, "const InStep"], [100, "const InStep"]], "const kbd_bit_caps_lock = 1 (none attribute)": [[87, "const KBD_BIT_CAPS_LOCK = 1"], [100, "const KBD_BIT_CAPS_LOCK = 1"]], "const kbd_bit_num_lock = 2 (none attribute)": [[87, "const KBD_BIT_NUM_LOCK = 2"], [100, "const KBD_BIT_NUM_LOCK = 2"]], "const kbd_bit_scroll_lock = 4 (none attribute)": [[87, "const KBD_BIT_SCROLL_LOCK = 4"], [100, "const KBD_BIT_SCROLL_LOCK = 4"]], "const keep_aspect_fill (none attribute)": [[87, "const KEEP_ASPECT_FILL"], [100, "const KEEP_ASPECT_FILL"]], "const keep_aspect_fit (none attribute)": [[87, "const KEEP_ASPECT_FIT"], [100, "const KEEP_ASPECT_FIT"]], "const keep_aspect_none (none attribute)": [[87, "const KEEP_ASPECT_NONE"], [100, "const KEEP_ASPECT_NONE"]], "const linear (none attribute)": [[87, "const Linear"], [100, "const Linear"]], "const mr_area (none attribute)": [[87, "const MR_AREA"], [100, "const MR_AREA"]], "const mr_b (none attribute)": [[87, "const MR_B"], [100, "const MR_B"]], "const mr_l (none attribute)": [[87, "const MR_L"], [100, "const MR_L"]], "const mr_lb (none attribute)": [[87, "const MR_LB"], [100, "const MR_LB"]], "const mr_lt (none attribute)": [[87, "const MR_LT"], [100, "const MR_LT"]], "const mr_none (none attribute)": [[87, "const MR_NONE"], [100, "const MR_NONE"]], "const mr_r (none attribute)": [[87, "const MR_R"], [100, "const MR_R"]], "const mr_rb (none attribute)": [[87, "const MR_RB"], [100, "const MR_RB"]], "const mr_rt (none attribute)": [[87, "const MR_RT"], [100, "const MR_RT"]], "const mr_t (none attribute)": [[87, "const MR_T"], [100, "const MR_T"]], "const o_horizontal (none attribute)": [[87, "const O_HORIZONTAL"], [100, "const O_HORIZONTAL"]], "const o_vertical (none attribute)": [[87, "const O_VERTICAL"], [100, "const O_VERTICAL"]], "const outback (none attribute)": [[87, "const OutBack"], [100, "const OutBack"]], "const outbounce (none attribute)": [[87, "const OutBounce"], [100, "const OutBounce"]], "const outcirc (none attribute)": [[87, "const OutCirc"], [100, "const OutCirc"]], "const outcubic (none attribute)": [[87, "const OutCubic"], [100, "const OutCubic"]], "const outelastic (none attribute)": [[87, "const OutElastic"], [100, "const OutElastic"]], "const outexp (none attribute)": [[87, "const OutExp"], [100, "const OutExp"]], "const outquad (none attribute)": [[87, "const OutQuad"], [100, "const OutQuad"]], "const outquart (none attribute)": [[87, "const OutQuart"], [100, "const OutQuart"]], "const outquintic (none attribute)": [[87, "const OutQuintic"], [100, "const OutQuintic"]], "const outsine (none attribute)": [[87, "const OutSine"], [100, "const OutSine"]], "const outstep (none attribute)": [[87, "const OutStep"], [100, "const OutStep"]], "const panel_anchor_entity = int (none attribute)": [[87, "const PANEL_ANCHOR_ENTITY = int"], [100, "const PANEL_ANCHOR_ENTITY = int"]], "const panel_anchor_head = int (none attribute)": [[87, "const PANEL_ANCHOR_HEAD = int"], [100, "const PANEL_ANCHOR_HEAD = int"]], "const panel_anchor_lefthand = int (none attribute)": [[87, "const PANEL_ANCHOR_LEFTHAND = int"], [100, "const PANEL_ANCHOR_LEFTHAND = int"]], "const panel_anchor_none = int (none attribute)": [[87, "const PANEL_ANCHOR_NONE = int"], [100, "const PANEL_ANCHOR_NONE = int"]], "const panel_anchor_righthand = int (none attribute)": [[87, "const PANEL_ANCHOR_RIGHTHAND = int"], [100, "const PANEL_ANCHOR_RIGHTHAND = int"]], "const panel_anchor_scene = int (none attribute)": [[87, "const PANEL_ANCHOR_SCENE = int"], [100, "const PANEL_ANCHOR_SCENE = int"]], "const panel_anchor_vrspace = int (none attribute)": [[87, "const PANEL_ANCHOR_VRSPACE = int"], [100, "const PANEL_ANCHOR_VRSPACE = int"]], "const panel_geometry_none = int (none attribute)": [[87, "const PANEL_GEOMETRY_NONE = int"], [100, "const PANEL_GEOMETRY_NONE = int"]], "const panel_geometry_rectangle = int (none attribute)": [[87, "const PANEL_GEOMETRY_RECTANGLE = int"], [100, "const PANEL_GEOMETRY_RECTANGLE = int"]], "const panel_rc_face_entity = int (none attribute)": [[87, "const PANEL_RC_FACE_ENTITY = int"], [100, "const PANEL_RC_FACE_ENTITY = int"]], "const panel_rc_face_head = int (none attribute)": [[87, "const PANEL_RC_FACE_HEAD = int"], [100, "const PANEL_RC_FACE_HEAD = int"]], "const panel_rc_face_head_lock_y = int (none attribute)": [[87, "const PANEL_RC_FACE_HEAD_LOCK_Y = int"], [100, "const PANEL_RC_FACE_HEAD_LOCK_Y = int"]], "const panel_rc_face_left_hand = int (none attribute)": [[87, "const PANEL_RC_FACE_LEFT_HAND = int"], [100, "const PANEL_RC_FACE_LEFT_HAND = int"]], "const panel_rc_face_right_hand = int (none attribute)": [[87, "const PANEL_RC_FACE_RIGHT_HAND = int"], [100, "const PANEL_RC_FACE_RIGHT_HAND = int"]], "const panel_rc_none = int (none attribute)": [[87, "const PANEL_RC_NONE = int"], [100, "const PANEL_RC_NONE = int"]], "const panel_render_always_on_top = int (none attribute)": [[87, "const PANEL_RENDER_ALWAYS_ON_TOP = int"], [100, "const PANEL_RENDER_ALWAYS_ON_TOP = int"]], "const panel_render_cast_shadow = int (none attribute)": [[87, "const PANEL_RENDER_CAST_SHADOW = int"], [100, "const PANEL_RENDER_CAST_SHADOW = int"]], "const panel_render_opaque = int (none attribute)": [[87, "const PANEL_RENDER_OPAQUE = int"], [100, "const PANEL_RENDER_OPAQUE = int"]], "const r_processed (none attribute)": [[87, "const R_PROCESSED"], [100, "const R_PROCESSED"]], "const size_to_content (none attribute)": [[87, "const SIZE_TO_CONTENT"], [100, "const SIZE_TO_CONTENT"]], "const s_active (none attribute)": [[87, "const S_ACTIVE"], [100, "const S_ACTIVE"]], "const s_drag (none attribute)": [[87, "const S_DRAG"], [100, "const S_DRAG"]], "const s_hotkey_active (none attribute)": [[87, "const S_HOTKEY_ACTIVE"], [100, "const S_HOTKEY_ACTIVE"]], "const s_hover (none attribute)": [[87, "const S_HOVER"], [100, "const S_HOVER"]], "const s_joystick_active (none attribute)": [[87, "const S_JOYSTICK_ACTIVE"], [100, "const S_JOYSTICK_ACTIVE"]], "const s_kbd_active (none attribute)": [[87, "const S_KBD_ACTIVE"], [100, "const S_KBD_ACTIVE"]], "const s_kb_focus (none attribute)": [[87, "const S_KB_FOCUS"], [100, "const S_KB_FOCUS"]], "const s_mouse_active (none attribute)": [[87, "const S_MOUSE_ACTIVE"], [100, "const S_MOUSE_ACTIVE"]], "const s_top_hover (none attribute)": [[87, "const S_TOP_HOVER"], [100, "const S_TOP_HOVER"]], "const s_touch_active (none attribute)": [[87, "const S_TOUCH_ACTIVE"], [100, "const S_TOUCH_ACTIVE"]], "const s_vr_active (none attribute)": [[87, "const S_VR_ACTIVE"], [100, "const S_VR_ACTIVE"]], "const shake4 (none attribute)": [[87, "const Shake4"], [100, "const Shake4"]], "const shake6 (none attribute)": [[87, "const Shake6"], [100, "const Shake6"]], "const toverflow_char (none attribute)": [[87, "const TOVERFLOW_CHAR"], [100, "const TOVERFLOW_CHAR"]], "const toverflow_clip (none attribute)": [[87, "const TOVERFLOW_CLIP"], [100, "const TOVERFLOW_CLIP"]], "const toverflow_line (none attribute)": [[87, "const TOVERFLOW_LINE"], [100, "const TOVERFLOW_LINE"]], "const toverflow_word (none attribute)": [[87, "const TOVERFLOW_WORD"], [100, "const TOVERFLOW_WORD"]], "const vector_center_line (none attribute)": [[87, "const VECTOR_CENTER_LINE"], [100, "const VECTOR_CENTER_LINE"]], "const vector_color (none attribute)": [[87, "const VECTOR_COLOR"], [100, "const VECTOR_COLOR"]], "const vector_ellipse (none attribute)": [[87, "const VECTOR_ELLIPSE"], [100, "const VECTOR_ELLIPSE"]], "const vector_fill_color (none attribute)": [[87, "const VECTOR_FILL_COLOR"], [100, "const VECTOR_FILL_COLOR"]], "const vector_inner_line (none attribute)": [[87, "const VECTOR_INNER_LINE"], [100, "const VECTOR_INNER_LINE"]], "const vector_inverse_poly (none attribute)": [[87, "const VECTOR_INVERSE_POLY"], [100, "const VECTOR_INVERSE_POLY"]], "const vector_line (none attribute)": [[87, "const VECTOR_LINE"], [100, "const VECTOR_LINE"]], "const vector_line_dashed (none attribute)": [[87, "const VECTOR_LINE_DASHED"], [100, "const VECTOR_LINE_DASHED"]], "const vector_line_indent_pct (none attribute)": [[87, "const VECTOR_LINE_INDENT_PCT"], [100, "const VECTOR_LINE_INDENT_PCT"]], "const vector_line_indent_px (none attribute)": [[87, "const VECTOR_LINE_INDENT_PX"], [100, "const VECTOR_LINE_INDENT_PX"]], "const vector_mid_color (none attribute)": [[87, "const VECTOR_MID_COLOR"], [100, "const VECTOR_MID_COLOR"]], "const vector_nop (none attribute)": [[87, "const VECTOR_NOP"], [100, "const VECTOR_NOP"]], "const vector_opacity (none attribute)": [[87, "const VECTOR_OPACITY"], [100, "const VECTOR_OPACITY"]], "const vector_outer_line (none attribute)": [[87, "const VECTOR_OUTER_LINE"], [100, "const VECTOR_OUTER_LINE"]], "const vector_poly (none attribute)": [[87, "const VECTOR_POLY"], [100, "const VECTOR_POLY"]], "const vector_quads (none attribute)": [[87, "const VECTOR_QUADS"], [100, "const VECTOR_QUADS"]], "const vector_rectangle (none attribute)": [[87, "const VECTOR_RECTANGLE"], [100, "const VECTOR_RECTANGLE"]], "const vector_sector (none attribute)": [[87, "const VECTOR_SECTOR"], [100, "const VECTOR_SECTOR"]], "const vector_tm_offset (none attribute)": [[87, "const VECTOR_TM_OFFSET"], [100, "const VECTOR_TM_OFFSET"]], "const vector_tm_scale (none attribute)": [[87, "const VECTOR_TM_SCALE"], [100, "const VECTOR_TM_SCALE"]], "const vector_width (none attribute)": [[87, "const VECTOR_WIDTH"], [100, "const VECTOR_WIDTH"]], "const xmb_continue (none attribute)": [[87, "const XMB_CONTINUE"], [100, "const XMB_CONTINUE"]], "const xmb_stop (none attribute)": [[87, "const XMB_STOP"], [100, "const XMB_STOP"]], "fvalue (none attribute)": [[87, "fValue"], [100, "fValue"]], "fgcolor (none attribute)": [[87, "fgColor"], [100, "fgColor"]], "fillcolor (none attribute)": [[87, "fillColor"], [100, "fillColor"]], "function color() (built-in function)": [[87, "function Color"], [100, "function Color"]], "function anim_request_stop() (built-in function)": [[87, "function anim_request_stop"], [100, "function anim_request_stop"]], "function anim_skip() (built-in function)": [[87, "function anim_skip"], [100, "function anim_skip"]], "function anim_skip_delay() (built-in function)": [[87, "function anim_skip_delay"], [100, "function anim_skip_delay"]], "function anim_start() (built-in function)": [[87, "function anim_start"], [100, "function anim_start"]], "function calc_comp_size() (built-in function)": [[87, "function calc_comp_size"], [100, "function calc_comp_size"]], "function calc_str_box() (built-in function)": [[87, "function calc_str_box"], [100, "function calc_str_box"]], "function capture_kb_focus() (built-in function)": [[87, "function capture_kb_focus"], [100, "function capture_kb_focus"]], "function elemh() (built-in function)": [[87, "function elemh"], [100, "function elemh"]], "function elemw() (built-in function)": [[87, "function elemw"], [100, "function elemw"]], "function flex() (built-in function)": [[87, "function flex"], [100, "function flex"]], "function fonth() (built-in function)": [[87, "function fontH"], [100, "function fontH"]], "function getfontdefht() (built-in function)": [[87, "function getFontDefHt"], [100, "function getFontDefHt"]], "function getfontinitialht() (built-in function)": [[87, "function getFontInitialHt"], [100, "function getFontInitialHt"]], "function get_element_info() (built-in function)": [[87, "function get_element_info"], [100, "function get_element_info"]], "function get_font_metrics() (built-in function)": [[87, "function get_font_metrics"], [100, "function get_font_metrics"]], "function get_mouse_cursor_pos() (built-in function)": [[87, "function get_mouse_cursor_pos"], [100, "function get_mouse_cursor_pos"]], "function locate_element_source() (built-in function)": [[87, "function locate_element_source"], [100, "function locate_element_source"]], "function move_mouse_cursor() (built-in function)": [[87, "function move_mouse_cursor"], [100, "function move_mouse_cursor"]], "function ph() (built-in function)": [[87, "function ph"], [100, "function ph"]], "function pw() (built-in function)": [[87, "function pw"], [100, "function pw"]], "function resolve_button() (built-in function)": [[87, "function resolve_button"], [100, "function resolve_button"]], "function resolve_button_id() (built-in function)": [[87, "function resolve_button_id"], [100, "function resolve_button_id"]], "function setfontdefht() (built-in function)": [[87, "function setFontDefHt"], [100, "function setFontDefHt"]], "function set_kb_focus() (built-in function)": [[87, "function set_kb_focus"], [100, "function set_kb_focus"]], "function sh() (built-in function)": [[87, "function sh"], [100, "function sh"]], "function sw() (built-in function)": [[87, "function sw"], [100, "function sw"]], "gui_scene = instance of guiscene (none attribute)": [[87, "gui_scene = instance of GuiScene"], [100, "gui_scene = instance of GuiScene"]], "method elementref.getcompdesc() (method elementref method)": [[87, "method ElementRef.getCompDesc"], [100, "method ElementRef.getCompDesc"]], "method elementref.getcontentheight() (method elementref method)": [[87, "method ElementRef.getContentHeight"], [100, "method ElementRef.getContentHeight"]], "method elementref.getcontentwidth() (method elementref method)": [[87, "method ElementRef.getContentWidth"], [100, "method ElementRef.getContentWidth"]], "method elementref.getheight() (method elementref method)": [[87, "method ElementRef.getHeight"], [100, "method ElementRef.getHeight"]], "method elementref.getscreenposx() (method elementref method)": [[87, "method ElementRef.getScreenPosX"], [100, "method ElementRef.getScreenPosX"]], "method elementref.getscreenposy() (method elementref method)": [[87, "method ElementRef.getScreenPosY"], [100, "method ElementRef.getScreenPosY"]], "method elementref.getscrolloffsx() (method elementref method)": [[87, "method ElementRef.getScrollOffsX"], [100, "method ElementRef.getScrollOffsX"]], "method elementref.getscrolloffsy() (method elementref method)": [[87, "method ElementRef.getScrollOffsY"], [100, "method ElementRef.getScrollOffsY"]], "method elementref.getwidth() (method elementref method)": [[87, "method ElementRef.getWidth"], [100, "method ElementRef.getWidth"]], "method guiscene.addpanel() (method guiscene method)": [[87, "method GuiScene.addPanel"], [100, "method GuiScene.addPanel"]], "method guiscene.cleartimer() (method guiscene method)": [[87, "method GuiScene.clearTimer"], [100, "method GuiScene.clearTimer"]], "method guiscene.enableinput() (method guiscene method)": [[87, "method GuiScene.enableInput"], [100, "method GuiScene.enableInput"]], "method guiscene.forcecursoractive() (method guiscene method)": [[87, "method GuiScene.forceCursorActive"], [100, "method GuiScene.forceCursorActive"]], "method guiscene.getallobservables() (method guiscene method)": [[87, "method GuiScene.getAllObservables"], [100, "method GuiScene.getAllObservables"]], "method guiscene.getcompaabbbykey() (method guiscene method)": [[87, "method GuiScene.getCompAABBbyKey"], [100, "method GuiScene.getCompAABBbyKey"]], "method guiscene.getjoystickaxis() (method guiscene method)": [[87, "method GuiScene.getJoystickAxis"], [100, "method GuiScene.getJoystickAxis"]], "method guiscene.haveactivecursoronpanels() (method guiscene method)": [[87, "method GuiScene.haveActiveCursorOnPanels"], [100, "method GuiScene.haveActiveCursorOnPanels"]], "method guiscene.mark_panel_dirty() (method guiscene method)": [[87, "method GuiScene.mark_panel_dirty"], [100, "method GuiScene.mark_panel_dirty"]], "method guiscene.removepanel() (method guiscene method)": [[87, "method GuiScene.removePanel"], [100, "method GuiScene.removePanel"]], "method guiscene.setconfigprops() (method guiscene method)": [[87, "method GuiScene.setConfigProps"], [100, "method GuiScene.setConfigProps"]], "method guiscene.sethotkeysnavhandler() (method guiscene method)": [[87, "method GuiScene.setHotkeysNavHandler"], [100, "method GuiScene.setHotkeysNavHandler"]], "method guiscene.setshutdownhandler() (method guiscene method)": [[87, "method GuiScene.setShutdownHandler"], [100, "method GuiScene.setShutdownHandler"]], "method guiscene.setupdatehandler() (method guiscene method)": [[87, "method GuiScene.setUpdateHandler"], [100, "method GuiScene.setUpdateHandler"]], "method guiscene.setxmbfocus() (method guiscene method)": [[87, "method GuiScene.setXmbFocus"], [100, "method GuiScene.setXmbFocus"]], "method scrollhandler.scrolltochildren() (method scrollhandler method)": [[87, "method ScrollHandler.scrollToChildren"], [100, "method ScrollHandler.scrollToChildren"]], "method scrollhandler.scrolltox() (method scrollhandler method)": [[87, "method ScrollHandler.scrollToX"], [100, "method ScrollHandler.scrollToX"]], "method scrollhandler.scrolltoy() (method scrollhandler method)": [[87, "method ScrollHandler.scrollToY"], [100, "method ScrollHandler.scrollToY"]], "opacity (none attribute)": [[87, "opacity"], [100, "opacity"]], "picsaturate (none attribute)": [[87, "picSaturate"], [100, "picSaturate"]], "property guiscene.circlebuttonasaction (property guiscene attribute)": [[87, "property GuiScene.circleButtonAsAction"], [100, "property GuiScene.circleButtonAsAction"]], "property guiscene.config (property guiscene attribute)": [[87, "property GuiScene.config"], [100, "property GuiScene.config"]], "property guiscene.cursoroverclickable (property guiscene attribute)": [[87, "property GuiScene.cursorOverClickable"], [100, "property GuiScene.cursorOverClickable"]], "property guiscene.cursoroverstickscroll (property guiscene attribute)": [[87, "property GuiScene.cursorOverStickScroll"], [100, "property GuiScene.cursorOverStickScroll"]], "property guiscene.cursorpresent (property guiscene attribute)": [[87, "property GuiScene.cursorPresent"], [100, "property GuiScene.cursorPresent"]], "property guiscene.hoveredclickableinfo (property guiscene attribute)": [[87, "property GuiScene.hoveredClickableInfo"], [100, "property GuiScene.hoveredClickableInfo"]], "property guiscene.keyboardlayout (property guiscene attribute)": [[87, "property GuiScene.keyboardLayout"], [100, "property GuiScene.keyboardLayout"]], "property guiscene.keyboardlocks (property guiscene attribute)": [[87, "property GuiScene.keyboardLocks"], [100, "property GuiScene.keyboardLocks"]], "property guiscene.updatecounter (property guiscene attribute)": [[87, "property GuiScene.updateCounter"], [100, "property GuiScene.updateCounter"]], "property guiscene.xmbmode (property guiscene attribute)": [[87, "property GuiScene.xmbMode"], [100, "property GuiScene.xmbMode"]], "property mouseclickeventdata.targetrect (property mouseclickeventdata attribute)": [[87, "property MouseClickEventData.targetRect"], [100, "property MouseClickEventData.targetRect"]], "property scrollhandler.elem (property scrollhandler attribute)": [[87, "property ScrollHandler.elem"], [100, "property ScrollHandler.elem"]], "rotate (none attribute)": [[87, "rotate"], [100, "rotate"]], "scale (none attribute)": [[87, "scale"], [100, "scale"]], "translate (none attribute)": [[87, "translate"], [100, "translate"]], "var sceneconfig.clickpriority (var sceneconfig attribute)": [[87, "var SceneConfig.clickPriority"], [100, "var SceneConfig.clickPriority"]], "var sceneconfig.clickrumbleduration (var sceneconfig attribute)": [[87, "var SceneConfig.clickRumbleDuration"], [100, "var SceneConfig.clickRumbleDuration"]], "var sceneconfig.clickrumbleenabled (var sceneconfig attribute)": [[87, "var SceneConfig.clickRumbleEnabled"], [100, "var SceneConfig.clickRumbleEnabled"]], "var sceneconfig.clickrumblehifreq (var sceneconfig attribute)": [[87, "var SceneConfig.clickRumbleHiFreq"], [100, "var SceneConfig.clickRumbleHiFreq"]], "var sceneconfig.clickrumblelofreq (var sceneconfig attribute)": [[87, "var SceneConfig.clickRumbleLoFreq"], [100, "var SceneConfig.clickRumbleLoFreq"]], "var sceneconfig.defaultcursor (var sceneconfig attribute)": [[87, "var SceneConfig.defaultCursor"], [100, "var SceneConfig.defaultCursor"]], "var sceneconfig.defaultfont (var sceneconfig attribute)": [[87, "var SceneConfig.defaultFont"], [100, "var SceneConfig.defaultFont"]], "var sceneconfig.defaultfontsize (var sceneconfig attribute)": [[87, "var SceneConfig.defaultFontSize"], [100, "var SceneConfig.defaultFontSize"]], "var sceneconfig.dirpadrepeatdelay (var sceneconfig attribute)": [[87, "var SceneConfig.dirPadRepeatDelay"], [100, "var SceneConfig.dirPadRepeatDelay"]], "var sceneconfig.dirpadrepeattime (var sceneconfig attribute)": [[87, "var SceneConfig.dirPadRepeatTime"], [100, "var SceneConfig.dirPadRepeatTime"]], "var sceneconfig.gamepadcursoraxish (var sceneconfig attribute)": [[87, "var SceneConfig.gamepadCursorAxisH"], [100, "var SceneConfig.gamepadCursorAxisH"]], "var sceneconfig.gamepadcursoraxisv (var sceneconfig attribute)": [[87, "var SceneConfig.gamepadCursorAxisV"], [100, "var SceneConfig.gamepadCursorAxisV"]], "var sceneconfig.gamepadcursorcontrol (var sceneconfig attribute)": [[87, "var SceneConfig.gamepadCursorControl"], [100, "var SceneConfig.gamepadCursorControl"]], "var sceneconfig.gamepadcursordeadzone (var sceneconfig attribute)": [[87, "var SceneConfig.gamepadCursorDeadZone"], [100, "var SceneConfig.gamepadCursorDeadZone"]], "var sceneconfig.gamepadcursorhovermaxmul (var sceneconfig attribute)": [[87, "var SceneConfig.gamepadCursorHoverMaxMul"], [100, "var SceneConfig.gamepadCursorHoverMaxMul"]], "var sceneconfig.gamepadcursorhovermaxtime (var sceneconfig attribute)": [[87, "var SceneConfig.gamepadCursorHoverMaxTime"], [100, "var SceneConfig.gamepadCursorHoverMaxTime"]], "var sceneconfig.gamepadcursornonlin (var sceneconfig attribute)": [[87, "var SceneConfig.gamepadCursorNonLin"], [100, "var SceneConfig.gamepadCursorNonLin"]], "var sceneconfig.gamepadcursorspeed (var sceneconfig attribute)": [[87, "var SceneConfig.gamepadCursorSpeed"], [100, "var SceneConfig.gamepadCursorSpeed"]], "var sceneconfig.joystickscrollaxish (var sceneconfig attribute)": [[87, "var SceneConfig.joystickScrollAxisH"], [100, "var SceneConfig.joystickScrollAxisH"]], "var sceneconfig.joystickscrollaxisv (var sceneconfig attribute)": [[87, "var SceneConfig.joystickScrollAxisV"], [100, "var SceneConfig.joystickScrollAxisV"]], "var sceneconfig.kbcursorcontrol (var sceneconfig attribute)": [[87, "var SceneConfig.kbCursorControl"], [100, "var SceneConfig.kbCursorControl"]], "var sceneconfig.reportnestedwatchedupdate (var sceneconfig attribute)": [[87, "var SceneConfig.reportNestedWatchedUpdate"], [100, "var SceneConfig.reportNestedWatchedUpdate"]], "var sceneconfig.usedefaultcursor (var sceneconfig attribute)": [[87, "var SceneConfig.useDefaultCursor"], [100, "var SceneConfig.useDefaultCursor"]], "var gamepadcursorhoverminmul (none attribute)": [[87, "var gamepadCursorHoverMinMul"], [100, "var gamepadCursorHoverMinMul"]], "function ellipse() (built-in function)": [[90, "function ellipse"], [140, "function ellipse"]], "function fill_inverse_poly() (built-in function)": [[90, "function fill_inverse_poly"], [140, "function fill_inverse_poly"]], "function fill_poly() (built-in function)": [[90, "function fill_poly"], [140, "function fill_poly"]], "function line() (built-in function)": [[90, "function line"], [140, "function line"]], "function line_dashed() (built-in function)": [[90, "function line_dashed"], [140, "function line_dashed"]], "function rect() (built-in function)": [[90, "function rect"], [140, "function rect"]], "function sector() (built-in function)": [[90, "function sector"], [140, "function sector"]], "comp_flag_change_event (none attribute)": [[91, "COMP_FLAG_CHANGE_EVENT"], [124, "COMP_FLAG_CHANGE_EVENT"]], "comp_flag_replicated (none attribute)": [[91, "COMP_FLAG_REPLICATED"], [124, "COMP_FLAG_REPLICATED"]], "evcast_broadcast (none attribute)": [[91, "EVCAST_BROADCAST"], [124, "EVCAST_BROADCAST"]], "evcast_unicast (none attribute)": [[91, "EVCAST_UNICAST"], [124, "EVCAST_UNICAST"]], "invalid_entity_id (none attribute)": [[91, "INVALID_ENTITY_ID"], [124, "INVALID_ENTITY_ID"]], "type_null (none attribute)": [[91, "TYPE_NULL"], [124, "TYPE_NULL"]], "const type_array (none attribute)": [[91, "const TYPE_ARRAY"], [124, "const TYPE_ARRAY"]], "const type_auto (none attribute)": [[91, "const TYPE_AUTO"], [124, "const TYPE_AUTO"]], "const type_bool (none attribute)": [[91, "const TYPE_BOOL"], [124, "const TYPE_BOOL"]], "const type_bool_list (none attribute)": [[91, "const TYPE_BOOL_LIST"], [124, "const TYPE_BOOL_LIST"]], "const type_color (none attribute)": [[91, "const TYPE_COLOR"], [124, "const TYPE_COLOR"]], "const type_color_list (none attribute)": [[91, "const TYPE_COLOR_LIST"], [124, "const TYPE_COLOR_LIST"]], "const type_dpoint3 (none attribute)": [[91, "const TYPE_DPOINT3"], [124, "const TYPE_DPOINT3"]], "const type_eid (none attribute)": [[91, "const TYPE_EID"], [124, "const TYPE_EID"]], "const type_eid_list (none attribute)": [[91, "const TYPE_EID_LIST"], [124, "const TYPE_EID_LIST"]], "const type_float (none attribute)": [[91, "const TYPE_FLOAT"], [124, "const TYPE_FLOAT"]], "const type_float_list (none attribute)": [[91, "const TYPE_FLOAT_LIST"], [124, "const TYPE_FLOAT_LIST"]], "const type_int (none attribute)": [[91, "const TYPE_INT"], [124, "const TYPE_INT"]], "const type_int16 (none attribute)": [[91, "const TYPE_INT16"], [124, "const TYPE_INT16"]], "const type_int64 (none attribute)": [[91, "const TYPE_INT64"], [124, "const TYPE_INT64"]], "const type_int64_list (none attribute)": [[91, "const TYPE_INT64_LIST"], [124, "const TYPE_INT64_LIST"]], "const type_int8 (none attribute)": [[91, "const TYPE_INT8"], [124, "const TYPE_INT8"]], "const type_int_list (none attribute)": [[91, "const TYPE_INT_LIST"], [124, "const TYPE_INT_LIST"]], "const type_ipoint2 (none attribute)": [[91, "const TYPE_IPOINT2"], [124, "const TYPE_IPOINT2"]], "const type_ipoint2_list (none attribute)": [[91, "const TYPE_IPOINT2_LIST"], [124, "const TYPE_IPOINT2_LIST"]], "const type_ipoint3 (none attribute)": [[91, "const TYPE_IPOINT3"], [124, "const TYPE_IPOINT3"]], "const type_ipoint3_list (none attribute)": [[91, "const TYPE_IPOINT3_LIST"], [124, "const TYPE_IPOINT3_LIST"]], "const type_ipoint4 (none attribute)": [[91, "const TYPE_IPOINT4"], [124, "const TYPE_IPOINT4"]], "const type_ipoint4_list (none attribute)": [[91, "const TYPE_IPOINT4_LIST"], [124, "const TYPE_IPOINT4_LIST"]], "const type_matrix (none attribute)": [[91, "const TYPE_MATRIX"], [124, "const TYPE_MATRIX"]], "const type_object (none attribute)": [[91, "const TYPE_OBJECT"], [124, "const TYPE_OBJECT"]], "const type_point2 (none attribute)": [[91, "const TYPE_POINT2"], [124, "const TYPE_POINT2"]], "const type_point2_list (none attribute)": [[91, "const TYPE_POINT2_LIST"], [124, "const TYPE_POINT2_LIST"]], "const type_point3 (none attribute)": [[91, "const TYPE_POINT3"], [124, "const TYPE_POINT3"]], "const type_point3_list (none attribute)": [[91, "const TYPE_POINT3_LIST"], [124, "const TYPE_POINT3_LIST"]], "const type_point4 (none attribute)": [[91, "const TYPE_POINT4"], [124, "const TYPE_POINT4"]], "const type_point4_list (none attribute)": [[91, "const TYPE_POINT4_LIST"], [124, "const TYPE_POINT4_LIST"]], "const type_shared_array (none attribute)": [[91, "const TYPE_SHARED_ARRAY"], [124, "const TYPE_SHARED_ARRAY"]], "const type_shared_object (none attribute)": [[91, "const TYPE_SHARED_OBJECT"], [124, "const TYPE_SHARED_OBJECT"]], "const type_string (none attribute)": [[91, "const TYPE_STRING"], [124, "const TYPE_STRING"]], "const type_string_list (none attribute)": [[91, "const TYPE_STRING_LIST"], [124, "const TYPE_STRING_LIST"]], "const type_tag (none attribute)": [[91, "const TYPE_TAG"], [124, "const TYPE_TAG"]], "const type_tmatrix_list (none attribute)": [[91, "const TYPE_TMATRIX_LIST"], [124, "const TYPE_TMATRIX_LIST"]], "const type_uint (none attribute)": [[91, "const TYPE_UINT"], [124, "const TYPE_UINT"]], "const type_uint16 (none attribute)": [[91, "const TYPE_UINT16"], [124, "const TYPE_UINT16"]], "const type_uint16_list (none attribute)": [[91, "const TYPE_UINT16_LIST"], [124, "const TYPE_UINT16_LIST"]], "const type_uint64 (none attribute)": [[91, "const TYPE_UINT64"], [124, "const TYPE_UINT64"]], "const type_uint64_list (none attribute)": [[91, "const TYPE_UINT64_LIST"], [124, "const TYPE_UINT64_LIST"]], "const type_uint8 (none attribute)": [[91, "const TYPE_UINT8"], [124, "const TYPE_UINT8"]], "function _dbg_get_all_comps_inspect() (built-in function)": [[91, "function _dbg_get_all_comps_inspect"], [124, "function _dbg_get_all_comps_inspect"]], "function _dbg_get_comp_val_inspect() (built-in function)": [[91, "function _dbg_get_comp_val_inspect"], [124, "function _dbg_get_comp_val_inspect"]], "function calc_hash() (built-in function)": [[91, "function calc_hash"], [124, "function calc_hash"]], "function calc_hash_int() (built-in function)": [[91, "function calc_hash_int"], [124, "function calc_hash_int"]], "function clear_callback_timer() (built-in function)": [[91, "function clear_callback_timer"], [124, "function clear_callback_timer"]], "function clear_timer() (built-in function)": [[91, "function clear_timer"], [124, "function clear_timer"]], "function clear_vm_entity_systems() (built-in function)": [[91, "function clear_vm_entity_systems"], [124, "function clear_vm_entity_systems"]], "function end_es_loading() (built-in function)": [[91, "function end_es_loading"], [124, "function end_es_loading"]], "function get_comp_flags() (built-in function)": [[91, "function get_comp_flags"], [124, "function get_comp_flags"]], "function get_comp_type() (built-in function)": [[91, "function get_comp_type"], [124, "function get_comp_type"]], "function get_semantic_type() (built-in function)": [[91, "function get_semantic_type"], [124, "function get_semantic_type"]], "function modify_es_list() (built-in function)": [[91, "function modify_es_list"], [124, "function modify_es_list"]], "function obsolete_dbg_get_comp_val() (built-in function)": [[91, "function obsolete_dbg_get_comp_val"], [124, "function obsolete_dbg_get_comp_val"]], "function obsolete_dbg_set_comp_val() (built-in function)": [[91, "function obsolete_dbg_set_comp_val"], [124, "function obsolete_dbg_set_comp_val"]], "function register_entity_system() (built-in function)": [[91, "function register_entity_system"], [124, "function register_entity_system"]], "function set_callback_timer() (built-in function)": [[91, "function set_callback_timer"], [124, "function set_callback_timer"]], "function set_callback_timer_rt() (built-in function)": [[91, "function set_callback_timer_rt"], [124, "function set_callback_timer_rt"]], "function set_timer() (built-in function)": [[91, "function set_timer"], [124, "function set_timer"]], "function start_es_loading() (built-in function)": [[91, "function start_es_loading"], [124, "function start_es_loading"]], "g_entity_mgr = instance of entitymanager class (none attribute)": [[91, "g_entity_mgr = instance of EntityManager class"], [124, "g_entity_mgr = instance of EntityManager class"]], "method baselist.getall() (method baselist method)": [[91, "method BaseList.getAll"], [124, "method BaseList.getAll"]], "method baselist.indexof() (method baselist method)": [[91, "method BaseList.indexof"], [124, "method BaseList.indexof"]], "method baselist.isreadonly() (method baselist method)": [[91, "method BaseList.isReadOnly"], [124, "method BaseList.isReadOnly"]], "method baselist.len() (method baselist method)": [[91, "method BaseList.len"], [124, "method BaseList.len"]], "method baselist.listtype() (method baselist method)": [[91, "method BaseList.listType"], [124, "method BaseList.listType"]], "method compobject.append() (method compobject method)": [[91, "method CompObject.append"], [124, "method CompObject.append"]], "method compobject.getall() (method compobject method)": [[91, "method CompObject.getAll"], [124, "method CompObject.getAll"]], "method compobject.indexof() (method compobject method)": [[91, "method CompObject.indexof"], [124, "method CompObject.indexof"]], "method compobject.insert() (method compobject method)": [[91, "method CompObject.insert"], [124, "method CompObject.insert"]], "method compobject.isreadonly() (method compobject method)": [[91, "method CompObject.isReadOnly"], [124, "method CompObject.isReadOnly"]], "method compobject.len() (method compobject method)": [[91, "method CompObject.len"], [124, "method CompObject.len"]], "method compobject.pop() (method compobject method)": [[91, "method CompObject.pop"], [124, "method CompObject.pop"]], "method compobject.remove() (method compobject method)": [[91, "method CompObject.remove"], [124, "method CompObject.remove"]], "method compobjectro.len() (method compobjectro method)": [[91, "method CompObjectRO.len"], [124, "method CompObjectRO.len"]], "method compobjectro.remove() (method compobjectro method)": [[91, "method CompObjectRO.remove"], [124, "method CompObjectRO.remove"]], "method event.gettype() (method event method)": [[91, "method Event.getType"], [124, "method Event.getType"]], "method list.append() (method list method)": [[91, "method List.append"], [124, "method List.append"]], "method list.clear() (method list method)": [[91, "method List.clear"], [124, "method List.clear"]], "method list.insert() (method list method)": [[91, "method List.insert"], [124, "method List.insert"]], "method list.pop() (method list method)": [[91, "method List.pop"], [124, "method List.pop"]], "method list.remove() (method list method)": [[91, "method List.remove"], [124, "method List.remove"]], "method sqquery.perform() (method sqquery method)": [[91, "method SqQuery.perform"], [124, "method SqQuery.perform"]], "method template.getbase() (method template method)": [[91, "method Template.getBase"], [124, "method Template.getBase"]], "method template.getcompval() (method template method)": [[91, "method Template.getCompVal"], [124, "method Template.getCompVal"]], "method template.getcompvalnullable() (method template method)": [[91, "method Template.getCompValNullable"], [124, "method Template.getCompValNullable"]], "method template.getcomponentsnames() (method template method)": [[91, "method Template.getComponentsNames"], [124, "method Template.getComponentsNames"]], "method template.getname() (method template method)": [[91, "method Template.getName"], [124, "method Template.getName"]], "method template.getnumparenttemplates() (method template method)": [[91, "method Template.getNumParentTemplates"], [124, "method Template.getNumParentTemplates"]], "method template.getparenttemplate() (method template method)": [[91, "method Template.getParentTemplate"], [124, "method Template.getParentTemplate"]], "method template.gettags() (method template method)": [[91, "method Template.getTags"], [124, "method Template.getTags"]], "method template.hascomponent() (method template method)": [[91, "method Template.hasComponent"], [124, "method Template.hasComponent"]], "method templatedb.getcomponentmetainfo() (method templatedb method)": [[91, "method TemplateDB.getComponentMetaInfo"], [124, "method TemplateDB.getComponentMetaInfo"]], "method templatedb.gettemplatebyname() (method templatedb method)": [[91, "method TemplateDB.getTemplateByName"], [124, "method TemplateDB.getTemplateByName"]], "method templatedb.gettemplatemetainfo() (method templatedb method)": [[91, "method TemplateDB.getTemplateMetaInfo"], [124, "method TemplateDB.getTemplateMetaInfo"]], "method templatedb.hascomponentmetainfo() (method templatedb method)": [[91, "method TemplateDB.hasComponentMetaInfo"], [124, "method TemplateDB.hasComponentMetaInfo"]], "method templatedb.size() (method templatedb method)": [[91, "method TemplateDB.size"], [124, "method TemplateDB.size"]], "operator baselist._get() (operator baselist method)": [[91, "operator BaseList._get"], [124, "operator BaseList._get"]], "operator baselist._nexti() (operator baselist method)": [[91, "operator BaseList._nexti"], [124, "operator BaseList._nexti"]], "operator compobject._get() (operator compobject method)": [[91, "operator CompObject._get"], [124, "operator CompObject._get"]], "operator compobject._nexti() (operator compobject method)": [[91, "operator CompObject._nexti"], [124, "operator CompObject._nexti"]], "operator compobject._set() (operator compobject method)": [[91, "operator CompObject._set"], [124, "operator CompObject._set"]], "operator compobjectro._get() (operator compobjectro method)": [[91, "operator CompObjectRO._get"], [124, "operator CompObjectRO._get"]], "operator compobjectro._newslot() (operator compobjectro method)": [[91, "operator CompObjectRO._newslot"], [124, "operator CompObjectRO._newslot"]], "operator compobjectro._nexti() (operator compobjectro method)": [[91, "operator CompObjectRO._nexti"], [124, "operator CompObjectRO._nexti"]], "operator compobjectro._set() (operator compobjectro method)": [[91, "operator CompObjectRO._set"], [124, "operator CompObjectRO._set"]], "operator list._set() (operator list method)": [[91, "operator List._set"], [124, "operator List._set"]], "operator sqquery._call() (operator sqquery method)": [[91, "operator SqQuery._call"], [124, "operator SqQuery._call"]], "var entitymanager.curtime (var entitymanager attribute)": [[91, "var EntityManager.curTime"], [124, "var EntityManager.curTime"]], "var entitymanager.dt (var entitymanager attribute)": [[91, "var EntityManager.dt"], [124, "var EntityManager.dt"]], "function client_request_broadcast_net_sqevent() (built-in function)": [[92, "function client_request_broadcast_net_sqevent"], [125, "function client_request_broadcast_net_sqevent"]], "function client_request_unicast_net_sqevent() (built-in function)": [[92, "function client_request_unicast_net_sqevent"], [125, "function client_request_unicast_net_sqevent"]], "function server_broadcast_net_sqevent() (built-in function)": [[92, "function server_broadcast_net_sqevent"], [125, "function server_broadcast_net_sqevent"]], "function server_send_net_sqevent() (built-in function)": [[92, "function server_send_net_sqevent"], [125, "function server_send_net_sqevent"]], "invalid_connection_id (none attribute)": [[94, "INVALID_CONNECTION_ID"], [136, "INVALID_CONNECTION_ID"]], "function get_replay_proto_version() (built-in function)": [[94, "function get_replay_proto_version"], [136, "function get_replay_proto_version"]], "function has_network() (built-in function)": [[94, "function has_network"], [136, "function has_network"]], "function is_server() (built-in function)": [[94, "function is_server"], [136, "function is_server"]], "method datablock.__getversion() (method datablock method)": [[95, "method DataBlock.__getVersion"]], "method datablock.addblock() (method datablock method)": [[95, "method DataBlock.addBlock"]], "method datablock.addbool() (method datablock method)": [[95, "method DataBlock.addBool"]], "method datablock.adde3dcolor() (method datablock method)": [[95, "method DataBlock.addE3dcolor"]], "method datablock.addipoint3() (method datablock method)": [[95, "method DataBlock.addIPoint3"]], "method datablock.addint() (method datablock method)": [[95, "method DataBlock.addInt"]], "method datablock.addnewblock() (method datablock method)": [[95, "method DataBlock.addNewBlock"]], "method datablock.addpoint2() (method datablock method)": [[95, "method DataBlock.addPoint2"]], "method datablock.addpoint3() (method datablock method)": [[95, "method DataBlock.addPoint3"]], "method datablock.addpoint4() (method datablock method)": [[95, "method DataBlock.addPoint4"]], "method datablock.addreal() (method datablock method)": [[95, "method DataBlock.addReal"]], "method datablock.addstr() (method datablock method)": [[95, "method DataBlock.addStr"]], "method datablock.addtm() (method datablock method)": [[95, "method DataBlock.addTm"]], "method datablock.findparam() (method datablock method)": [[95, "method DataBlock.findParam"]], "method datablock.formatasstring() (method datablock method)": [[95, "method DataBlock.formatAsString"]], "method datablock.getblock() (method datablock method)": [[95, "method DataBlock.getBlock"]], "method datablock.getblockbyname() (method datablock method)": [[95, "method DataBlock.getBlockByName"]], "method datablock.getbool() (method datablock method)": [[95, "method DataBlock.getBool"]], "method datablock.gete3dcolor() (method datablock method)": [[95, "method DataBlock.getE3dcolor"]], "method datablock.getipoint3() (method datablock method)": [[95, "method DataBlock.getIPoint3"]], "method datablock.getint() (method datablock method)": [[95, "method DataBlock.getInt"]], "method datablock.getparamtypeannotation() (method datablock method)": [[95, "method DataBlock.getParamTypeAnnotation"]], "method datablock.getparamvalue() (method datablock method)": [[95, "method DataBlock.getParamValue"]], "method datablock.getparsecommentsasparams() (method datablock method)": [[95, "method DataBlock.getParseCommentsAsParams"]], "method datablock.getparseincludesasparams() (method datablock method)": [[95, "method DataBlock.getParseIncludesAsParams"]], "method datablock.getparseoverridesignored() (method datablock method)": [[95, "method DataBlock.getParseOverridesIgnored"]], "method datablock.getparseoverridesnotapply() (method datablock method)": [[95, "method DataBlock.getParseOverridesNotApply"]], "method datablock.getpoint2() (method datablock method)": [[95, "method DataBlock.getPoint2"]], "method datablock.getpoint3() (method datablock method)": [[95, "method DataBlock.getPoint3"]], "method datablock.getpoint4() (method datablock method)": [[95, "method DataBlock.getPoint4"]], "method datablock.getreal() (method datablock method)": [[95, "method DataBlock.getReal"]], "method datablock.getstr() (method datablock method)": [[95, "method DataBlock.getStr"]], "method datablock.gettm() (method datablock method)": [[95, "method DataBlock.getTm"]], "method datablock.load() (method datablock method)": [[95, "method DataBlock.load"]], "method datablock.loadfromtext() (method datablock method)": [[95, "method DataBlock.loadFromText"]], "method datablock.paramexists() (method datablock method)": [[95, "method DataBlock.paramExists"]], "method datablock.removeblock() (method datablock method)": [[95, "method DataBlock.removeBlock"]], "method datablock.removeblockbyid() (method datablock method)": [[95, "method DataBlock.removeBlockById"]], "method datablock.removeparam() (method datablock method)": [[95, "method DataBlock.removeParam"]], "method datablock.removeparambyid() (method datablock method)": [[95, "method DataBlock.removeParamById"]], "method datablock.savetotextfile() (method datablock method)": [[95, "method DataBlock.saveToTextFile"]], "method datablock.savetotextfilecompact() (method datablock method)": [[95, "method DataBlock.saveToTextFileCompact"]], "method datablock.setbool() (method datablock method)": [[95, "method DataBlock.setBool"]], "method datablock.sete3dcolor() (method datablock method)": [[95, "method DataBlock.setE3dcolor"]], "method datablock.setfrom() (method datablock method)": [[95, "method DataBlock.setFrom"]], "method datablock.setipoint3() (method datablock method)": [[95, "method DataBlock.setIPoint3"]], "method datablock.setint() (method datablock method)": [[95, "method DataBlock.setInt"]], "method datablock.setint64() (method datablock method)": [[95, "method DataBlock.setInt64"]], "method datablock.setparamfrom() (method datablock method)": [[95, "method DataBlock.setParamFrom"]], "method datablock.setparamsfrom() (method datablock method)": [[95, "method DataBlock.setParamsFrom"]], "method datablock.setparsecommentsasparams() (method datablock method)": [[95, "method DataBlock.setParseCommentsAsParams"]], "method datablock.setparseincludesasparams() (method datablock method)": [[95, "method DataBlock.setParseIncludesAsParams"]], "method datablock.setparseoverridesignored() (method datablock method)": [[95, "method DataBlock.setParseOverridesIgnored"]], "method datablock.setparseoverridesnotapply() (method datablock method)": [[95, "method DataBlock.setParseOverridesNotApply"]], "method datablock.setpoint2() (method datablock method)": [[95, "method DataBlock.setPoint2"]], "method datablock.setpoint3() (method datablock method)": [[95, "method DataBlock.setPoint3"]], "method datablock.setpoint4() (method datablock method)": [[95, "method DataBlock.setPoint4"]], "method datablock.setreal() (method datablock method)": [[95, "method DataBlock.setReal"]], "method datablock.setstr() (method datablock method)": [[95, "method DataBlock.setStr"]], "method datablock.settm() (method datablock method)": [[95, "method DataBlock.setTm"]], "method datablock.set_root() (method datablock method)": [[95, "method DataBlock.set_root"]], "method datablock.tryload() (method datablock method)": [[95, "method DataBlock.tryLoad"]], "operator datablock._get() (operator datablock method)": [[95, "operator DataBlock._get"]], "operator datablock._modulo() (operator datablock method)": [[95, "operator DataBlock._modulo"]], "operator datablock._newslot() (operator datablock method)": [[95, "operator DataBlock._newslot"]], "operator datablock._nexti() (operator datablock method)": [[95, "operator DataBlock._nexti"]], "operator datablock._set() (operator datablock method)": [[95, "operator DataBlock._set"]], "function decodestring() (built-in function)": [[96, "function decodeString"]], "function encodeblk() (built-in function)": [[96, "function encodeBlk"]], "function encodeblob() (built-in function)": [[96, "function encodeBlob"]], "function encodejson() (built-in function)": [[96, "function encodeJson"]], "function encodestring() (built-in function)": [[96, "function encodeString"]], "function browser_add_window_method() (built-in function)": [[97, "function browser_add_window_method"]], "function browser_get_current_title() (built-in function)": [[97, "function browser_get_current_title"]], "function browser_get_current_url() (built-in function)": [[97, "function browser_get_current_url"]], "function browser_go() (built-in function)": [[97, "function browser_go"]], "function browser_go_back() (built-in function)": [[97, "function browser_go_back"]], "function browser_reload_page() (built-in function)": [[97, "function browser_reload_page"]], "function can_use_embeded_browser() (built-in function)": [[97, "function can_use_embeded_browser"]], "function command() (built-in function)": [[98, "function command"]], "function console_command() (built-in function)": [[98, "function console_command"]], "function console_register_command() (built-in function)": [[98, "function console_register_command"]], "function register_command() (built-in function)": [[98, "function register_command"]], "function setconsoleobjprintfunc() (built-in function)": [[98, "function setConsoleObjPrintFunc"]], "function setobjprintfunc() (built-in function)": [[98, "function setObjPrintFunc"]], "de4_cmd_del (none attribute)": [[99, "DE4_CMD_DEL"]], "de4_cmd_drop (none attribute)": [[99, "DE4_CMD_DROP"]], "de4_mode_move (none attribute)": [[99, "DE4_MODE_MOVE"]], "de4_mode_move_surf (none attribute)": [[99, "DE4_MODE_MOVE_SURF"]], "de4_mode_point_action (none attribute)": [[99, "DE4_MODE_POINT_ACTION"]], "de4_mode_rotate (none attribute)": [[99, "DE4_MODE_ROTATE"]], "de4_mode_scale (none attribute)": [[99, "DE4_MODE_SCALE"]], "de4_mode_select (none attribute)": [[99, "DE4_MODE_SELECT"]], "function geteditmode() (built-in function)": [[99, "function getEditMode"]], "function getworkmode() (built-in function)": [[99, "function getWorkMode"]], "function isfreecammode() (built-in function)": [[99, "function isFreeCamMode"]], "function seteditmode() (built-in function)": [[99, "function setEditMode"]], "function setpointactionpreview() (built-in function)": [[99, "function setPointActionPreview"]], "function setworkmode() (built-in function)": [[99, "function setWorkMode"]], "function rayhit_normalized() (built-in function)": [[102, "function rayhit_normalized"]], "function traceray_normalized() (built-in function)": [[102, "function traceray_normalized"]], "function get_clipboard_text() (built-in function)": [[103, "function get_clipboard_text"]], "function set_clipboard_text() (built-in function)": [[103, "function set_clipboard_text"]], "function assert() (built-in function)": [[104, "function assert"]], "function assertf() (built-in function)": [[104, "function assertf"]], "function console_print() (built-in function)": [[104, "function console_print"]], "function debug() (built-in function)": [[104, "function debug"]], "function debug_dump_stack() (built-in function)": [[104, "function debug_dump_stack"]], "function fatal() (built-in function)": [[104, "function fatal"]], "function get_log_filename() (built-in function)": [[104, "function get_log_filename"]], "function logerr() (built-in function)": [[104, "function logerr"]], "function screenlog() (built-in function)": [[104, "function screenlog"]], "function get_common_appdata_dir() (built-in function)": [[105, "function get_common_appdata_dir"]], "function get_downloads_dir() (built-in function)": [[105, "function get_downloads_dir"]], "function get_exe_dir() (built-in function)": [[105, "function get_exe_dir"]], "function get_game_dir() (built-in function)": [[105, "function get_game_dir"]], "function get_gamedata_dir() (built-in function)": [[105, "function get_gamedata_dir"]], "function get_local_appdata_dir() (built-in function)": [[105, "function get_local_appdata_dir"]], "function get_temp_dir() (built-in function)": [[105, "function get_temp_dir"]], "function dir_exists() (built-in function)": [[106, "function dir_exists"]], "function file_exists() (built-in function)": [[106, "function file_exists"]], "function find_files() (built-in function)": [[106, "function find_files"]], "function mkdir() (built-in function)": [[106, "function mkdir"]], "function mkpath() (built-in function)": [[106, "function mkpath"]], "function read_text_from_file() (built-in function)": [[106, "function read_text_from_file"]], "function read_text_from_file_on_disk() (built-in function)": [[106, "function read_text_from_file_on_disk"]], "function scan_folder() (built-in function)": [[106, "function scan_folder"]], "function stat() (built-in function)": [[106, "function stat"]], "http_aborted (none attribute)": [[108, "HTTP_ABORTED"]], "http_failed (none attribute)": [[108, "HTTP_FAILED"]], "http_shutdown (none attribute)": [[108, "HTTP_SHUTDOWN"]], "http_success (none attribute)": [[108, "HTTP_SUCCESS"]], "function httpabort() (built-in function)": [[108, "function httpAbort"]], "function httpdownload() (built-in function)": [[108, "function httpDownload"]], "function httprequest() (built-in function)": [[108, "function httpRequest"]], "function requesthttp() (built-in function)": [[108, "function requestHttp"]], "function format_msec() (built-in function)": [[109, "function format_msec"]], "function format_unix_time() (built-in function)": [[109, "function format_unix_time"]], "function parse_msec() (built-in function)": [[109, "function parse_msec"]], "function parse_unix_time() (built-in function)": [[109, "function parse_unix_time"]], "function doesloctextexist() (built-in function)": [[110, "function doesLocTextExist"]], "function getcurrentlanguage() (built-in function)": [[110, "function getCurrentLanguage"]], "function getforcelanguage() (built-in function)": [[110, "function getForceLanguage"]], "function getloctextforlang() (built-in function)": [[110, "function getLocTextForLang"]], "function initlocalization() (built-in function)": [[110, "function initLocalization"]], "function loc() (built-in function)": [[110, "function loc"]], "function processhypenationscn() (built-in function)": [[110, "function processHypenationsCN"]], "function processhypenationsjp() (built-in function)": [[110, "function processHypenationsJP"]], "function setlanguagetosettings() (built-in function)": [[110, "function setLanguageToSettings"]], "function cvt() (built-in function)": [[111, "function cvt"]], "function dir_to_quat() (built-in function)": [[111, "function dir_to_quat"]], "function euler_to_quat() (built-in function)": [[111, "function euler_to_quat"]], "function make_tm_axis() (built-in function)": [[111, "function make_tm_axis"]], "function make_tm_quat() (built-in function)": [[111, "function make_tm_quat"]], "function matrix_to_euler() (built-in function)": [[111, "function matrix_to_euler"]], "function qinterp() (built-in function)": [[111, "function qinterp"]], "function quat_rotation_arc() (built-in function)": [[111, "function quat_rotation_arc"]], "function quat_to_euler() (built-in function)": [[111, "function quat_to_euler"]], "function quat_to_matrix() (built-in function)": [[111, "function quat_to_matrix"]], "method e3dcolor.set() (method e3dcolor method)": [[111, "method E3DCOLOR.set"]], "method point2.length() (method point2 method)": [[111, "method Point2.length"]], "method point2.lengthsq() (method point2 method)": [[111, "method Point2.lengthSq"]], "method point2.normalize() (method point2 method)": [[111, "method Point2.normalize"]], "method point3.length() (method point3 method)": [[111, "method Point3.length"]], "method point3.lengthsq() (method point3 method)": [[111, "method Point3.lengthSq"]], "method point3.normalize() (method point3 method)": [[111, "method Point3.normalize"]], "method point4.getcol() (method point4 method)": [[111, "method Point4.getcol"]], "method point4.inverse() (method point4 method)": [[111, "method Point4.inverse"]], "method point4.orthonormalize() (method point4 method)": [[111, "method Point4.orthonormalize"]], "method point4.setcol() (method point4 method)": [[111, "method Point4.setcol"]], "operator e3dcolor._add() (operator e3dcolor method)": [[111, "operator E3DCOLOR._add"]], "operator e3dcolor._mul() (operator e3dcolor method)": [[111, "operator E3DCOLOR._mul"]], "operator e3dcolor._sub() (operator e3dcolor method)": [[111, "operator E3DCOLOR._sub"]], "operator ipoint3._add() (operator ipoint3 method)": [[111, "operator IPoint3._add"]], "operator ipoint3._sub() (operator ipoint3 method)": [[111, "operator IPoint3._sub"]], "operator ipoint3._unm() (operator ipoint3 method)": [[111, "operator IPoint3._unm"]], "operator point2._add() (operator point2 method)": [[111, "operator Point2._add"]], "operator point2._mul() (operator point2 method)": [[111, "operator Point2._mul"]], "operator point2._sub() (operator point2 method)": [[111, "operator Point2._sub"]], "operator point2._unm() (operator point2 method)": [[111, "operator Point2._unm"]], "operator point4._add() (operator point4 method)": [[111, "operator Point4._add"]], "operator point4._get() (operator point4 method)": [[111, "operator Point4._get"]], "operator point4._modulo() (operator point4 method)": [[111, "operator Point4._modulo"]], "operator point4._mul() (operator point4 method)": [[111, "operator Point4._mul"]], "operator point4._set() (operator point4 method)": [[111, "operator Point4._set"]], "operator point4._sub() (operator point4 method)": [[111, "operator Point4._sub"]], "operator point4._unm() (operator point4 method)": [[111, "operator Point4._unm"]], "operator quat._add() (operator quat method)": [[111, "operator Quat._add"]], "operator quat._sub() (operator quat method)": [[111, "operator Quat._sub"]], "operator quat._unm() (operator quat method)": [[111, "operator Quat._unm"]], "var e3dcolor.b (var e3dcolor attribute)": [[111, "var E3DCOLOR.b"]], "var e3dcolor.g (var e3dcolor attribute)": [[111, "var E3DCOLOR.g"]], "var e3dcolor.r (var e3dcolor attribute)": [[111, "var E3DCOLOR.r"]], "var ipoint3.w (var ipoint3 attribute)": [[111, "var IPoint3.w"]], "var ipoint3.x (var ipoint3 attribute)": [[111, "var IPoint3.x"]], "var ipoint3.y (var ipoint3 attribute)": [[111, "var IPoint3.y"]], "var ipoint3.z (var ipoint3 attribute)": [[111, "var IPoint3.z"]], "var point2.x (var point2 attribute)": [[111, "var Point2.x"]], "var point2.y (var point2 attribute)": [[111, "var Point2.y"]], "var point3.x (var point3 attribute)": [[111, "var Point3.x"]], "var point3.y (var point3 attribute)": [[111, "var Point3.y"]], "var point3.z (var point3 attribute)": [[111, "var Point3.z"]], "var quat.x (var quat attribute)": [[111, "var Quat.x"]], "var quat.y (var quat attribute)": [[111, "var Quat.y"]], "function dump_all() (built-in function)": [[112, "function dump_all"]], "function get_memory_allocated_kb() (built-in function)": [[112, "function get_memory_allocated_kb"]], "function get_quirrel_object_size() (built-in function)": [[112, "function get_quirrel_object_size"]], "function get_quirrel_object_size_as_string() (built-in function)": [[112, "function get_quirrel_object_size_as_string"]], "function is_quirrel_object_larger_than() (built-in function)": [[112, "function is_quirrel_object_larger_than"]], "function reset_all() (built-in function)": [[112, "function reset_all"]], "function set_huge_alloc_threshold() (built-in function)": [[112, "function set_huge_alloc_threshold"]], "function detect_slow_calls() (built-in function)": [[114, "function detect_slow_calls"]], "function dump() (built-in function)": [[114, "function dump"]], "function get_total_time() (built-in function)": [[114, "function get_total_time"]], "function reset_values() (built-in function)": [[114, "function reset_values"]], "function start() (built-in function)": [[114, "function start"]], "function stop() (built-in function)": [[114, "function stop"]], "function stop_and_save_to_file() (built-in function)": [[114, "function stop_and_save_to_file"]], "function frnd() (built-in function)": [[115, "function frnd"]], "function gauss_rnd() (built-in function)": [[115, "function gauss_rnd"]], "function get_rnd_seed() (built-in function)": [[115, "function get_rnd_seed"]], "function rnd() (built-in function)": [[115, "function rnd"]], "function rnd_float() (built-in function)": [[115, "function rnd_float"]], "function rnd_int() (built-in function)": [[115, "function rnd_int"]], "function set_rnd_seed() (built-in function)": [[115, "function set_rnd_seed"]], "function srnd() (built-in function)": [[115, "function srnd"]], "function uint32_hash() (built-in function)": [[115, "function uint32_hash"]], "function uint_noise1d() (built-in function)": [[115, "function uint_noise1D"]], "function uint_noise2d() (built-in function)": [[115, "function uint_noise2D"]], "function uint_noise3d() (built-in function)": [[115, "function uint_noise3D"]], "function shell_execute() (built-in function)": [[116, "function shell_execute"]], "const arch_bits (none attribute)": [[117, "const ARCH_BITS"]], "const dbglevel (none attribute)": [[117, "const DBGLEVEL"]], "const mb_abort_retry_ignore (none attribute)": [[117, "const MB_ABORT_RETRY_IGNORE"]], "const mb_button_1 (none attribute)": [[117, "const MB_BUTTON_1"]], "const mb_button_2 (none attribute)": [[117, "const MB_BUTTON_2"]], "const mb_button_3 (none attribute)": [[117, "const MB_BUTTON_3"]], "const mb_cancel_try_continue (none attribute)": [[117, "const MB_CANCEL_TRY_CONTINUE"]], "const mb_close (none attribute)": [[117, "const MB_CLOSE"]], "const mb_def_button_1 (none attribute)": [[117, "const MB_DEF_BUTTON_1"]], "const mb_def_button_2 (none attribute)": [[117, "const MB_DEF_BUTTON_2"]], "const mb_def_button_3 (none attribute)": [[117, "const MB_DEF_BUTTON_3"]], "const mb_fail (none attribute)": [[117, "const MB_FAIL"]], "const mb_foreground (none attribute)": [[117, "const MB_FOREGROUND"]], "const mb_icon_error (none attribute)": [[117, "const MB_ICON_ERROR"]], "const mb_icon_information (none attribute)": [[117, "const MB_ICON_INFORMATION"]], "const mb_icon_question (none attribute)": [[117, "const MB_ICON_QUESTION"]], "const mb_icon_warning (none attribute)": [[117, "const MB_ICON_WARNING"]], "const mb_native_dlg (none attribute)": [[117, "const MB_NATIVE_DLG"]], "const mb_ok (none attribute)": [[117, "const MB_OK"]], "const mb_ok_cancel (none attribute)": [[117, "const MB_OK_CANCEL"]], "const mb_retry_cancel (none attribute)": [[117, "const MB_RETRY_CANCEL"]], "const mb_topmost (none attribute)": [[117, "const MB_TOPMOST"]], "const mb_yes_no (none attribute)": [[117, "const MB_YES_NO"]], "const mb_yes_no_cancel (none attribute)": [[117, "const MB_YES_NO_CANCEL"]], "const sanitizer (none attribute)": [[117, "const SANITIZER"]], "const argv (none attribute)": [[117, "const argv"]], "function dgs_get_settings() (built-in function)": [[117, "function dgs_get_settings"]], "function exit() (built-in function)": [[117, "function exit"]], "function get_all_arg_values_by_name() (built-in function)": [[117, "function get_all_arg_values_by_name"]], "function get_arg_value_by_name() (built-in function)": [[117, "function get_arg_value_by_name"]], "function get_log_directory() (built-in function)": [[117, "function get_log_directory"]], "function get_primary_screen_info() (built-in function)": [[117, "function get_primary_screen_info"]], "function message_box() (built-in function)": [[117, "function message_box"]], "function set_app_window_title() (built-in function)": [[117, "function set_app_window_title"]], "function get_meta_info_from_screenshot() (built-in function)": [[118, "function get_meta_info_from_screenshot"]], "function init_file_drop_handler() (built-in function)": [[118, "function init_file_drop_handler"]], "function format_unixtime() (built-in function)": [[119, "function format_unixtime"]], "function get_local_unixtime() (built-in function)": [[119, "function get_local_unixtime"]], "function get_time_msec() (built-in function)": [[119, "function get_time_msec"]], "function get_time_usec() (built-in function)": [[119, "function get_time_usec"]], "function local_timetbl_to_unixtime() (built-in function)": [[119, "function local_timetbl_to_unixtime"]], "function ref_time_ticks() (built-in function)": [[119, "function ref_time_ticks"]], "function unixtime_to_local_timetbl() (built-in function)": [[119, "function unixtime_to_local_timetbl"]], "function unixtime_to_utc_timetbl() (built-in function)": [[119, "function unixtime_to_utc_timetbl"]], "function utc_timetbl_to_unixtime() (built-in function)": [[119, "function utc_timetbl_to_unixtime"]], "function cleartimer() (built-in function)": [[120, "function clearTimer"]], "function defer() (built-in function)": [[120, "function defer"]], "function deferonce() (built-in function)": [[120, "function deferOnce"]], "function resettimeout() (built-in function)": [[120, "function resetTimeout"]], "function setinterval() (built-in function)": [[120, "function setInterval"]], "function settimeout() (built-in function)": [[120, "function setTimeout"]], "const analogstickactionbinding.axis_null_id (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.AXIS_NULL_ID"]], "const analogstickactionbinding.bad_action_handle (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.BAD_ACTION_HANDLE"]], "const analogstickactionbinding.bad_action_set_handle (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.BAD_ACTION_SET_HANDLE"]], "const analogstickactionbinding.btn_null_id (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.BTN_NULL_ID"]], "const analogstickactionbinding.btn_pressed (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.BTN_pressed"]], "const analogstickactionbinding.btn_pressed2 (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.BTN_pressed2"]], "const analogstickactionbinding.btn_pressed3 (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.BTN_pressed3"]], "const analogstickactionbinding.btn_pressed_long (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.BTN_pressed_long"]], "const analogstickactionbinding.btn_released (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.BTN_released"]], "const analogstickactionbinding.btn_released_long (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.BTN_released_long"]], "const analogstickactionbinding.btn_released_short (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.BTN_released_short"]], "const analogstickactionbinding.dev_used_gamepad (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.DEV_USED_gamepad"]], "const analogstickactionbinding.dev_used_kbd (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.DEV_USED_kbd"]], "const analogstickactionbinding.dev_used_mouse (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.DEV_USED_mouse"]], "const analogstickactionbinding.dev_used_touch (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.DEV_USED_touch"]], "const analogstickactionbinding.dev_gamepad (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.DEV_gamepad"]], "const analogstickactionbinding.dev_joy (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.DEV_joy"]], "const analogstickactionbinding.dev_kbd (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.DEV_kbd"]], "const analogstickactionbinding.dev_none (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.DEV_none"]], "const analogstickactionbinding.dev_nullstub (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.DEV_nullstub"]], "const analogstickactionbinding.dev_pointing (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.DEV_pointing"]], "const analogstickactionbinding.gamepad_vendor_microsoft (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.GAMEPAD_VENDOR_MICROSOFT"]], "const analogstickactionbinding.gamepad_vendor_nintendo (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.GAMEPAD_VENDOR_NINTENDO"]], "const analogstickactionbinding.gamepad_vendor_sony (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.GAMEPAD_VENDOR_SONY"]], "const analogstickactionbinding.gamepad_vendor_unknown (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.GAMEPAD_VENDOR_UNKNOWN"]], "const analogstickactionbinding.st_cancelled (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.ST_cancelled"]], "const analogstickactionbinding.st_finished (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.ST_finished"]], "const analogstickactionbinding.st_in_progress (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.ST_in_progress"]], "const analogstickactionbinding.typegrp_axis (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.TYPEGRP_AXIS"]], "const analogstickactionbinding.typegrp_digital (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.TYPEGRP_DIGITAL"]], "const analogstickactionbinding.typegrp_stick (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.TYPEGRP_STICK"]], "const analogstickactionbinding.typegrp__mask (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.TYPEGRP__MASK"]], "const analogstickactionbinding.type_absmouse (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.TYPE_ABSMOUSE"]], "const analogstickactionbinding.type_button (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.TYPE_BUTTON"]], "const analogstickactionbinding.type_steerwheel (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.TYPE_STEERWHEEL"]], "const analogstickactionbinding.type_stick (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.TYPE_STICK"]], "const analogstickactionbinding.type_stick_delta (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.TYPE_STICK_DELTA"]], "const analogstickactionbinding.type_sysmouse (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.TYPE_SYSMOUSE"]], "const analogstickactionbinding.type_trigger (const analogstickactionbinding attribute)": [[121, "const AnalogStickActionBinding.TYPE_TRIGGER"]], "method analogstickactionbinding.activate_action_set() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.activate_action_set"]], "method analogstickactionbinding.append_actions_binding() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.append_actions_binding"]], "method analogstickactionbinding.check_bindings_conflicts() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.check_bindings_conflicts"]], "method analogstickactionbinding.check_bindings_conflicts_one() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.check_bindings_conflicts_one"]], "method analogstickactionbinding.check_bindings_hides_action() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.check_bindings_hides_action"]], "method analogstickactionbinding.clear_action_set_actions() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.clear_action_set_actions"]], "method analogstickactionbinding.clear_actions_binding() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.clear_actions_binding"]], "method analogstickactionbinding.dump_action_set() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.dump_action_set"]], "method analogstickactionbinding.dump_action_sets() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.dump_action_sets"]], "method analogstickactionbinding.dump_action_sets_stack() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.dump_action_sets_stack"]], "method analogstickactionbinding.enable_darg_events_for_button_clicks() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.enable_darg_events_for_button_clicks"]], "method analogstickactionbinding.enable_debug_traces() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.enable_debug_traces"]], "method analogstickactionbinding.enable_joystick_gyroscope() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.enable_joystick_gyroscope"]], "method analogstickactionbinding.finish_recording_bindings() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.finish_recording_bindings"]], "method analogstickactionbinding.format_ctrl_name() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.format_ctrl_name"]], "method analogstickactionbinding.get_action_binding() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_action_binding"]], "method analogstickactionbinding.get_action_bindings_text() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_action_bindings_text"]], "method analogstickactionbinding.get_action_handle() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_action_handle"]], "method analogstickactionbinding.get_action_handle_by_ord() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_action_handle_by_ord"]], "method analogstickactionbinding.get_action_name() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_action_name"]], "method analogstickactionbinding.get_action_set_actions() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_action_set_actions"]], "method analogstickactionbinding.get_action_set_handle() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_action_set_handle"]], "method analogstickactionbinding.get_action_set_handle_by_ord() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_action_set_handle_by_ord"]], "method analogstickactionbinding.get_action_set_name() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_action_set_name"]], "method analogstickactionbinding.get_action_set_stack_depth() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_action_set_stack_depth"]], "method analogstickactionbinding.get_action_set_stack_item() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_action_set_stack_item"]], "method analogstickactionbinding.get_action_sets_count() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_action_sets_count"]], "method analogstickactionbinding.get_action_type() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_action_type"]], "method analogstickactionbinding.get_actions_binding_column_active() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_actions_binding_column_active"]], "method analogstickactionbinding.get_actions_binding_columns() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_actions_binding_columns"]], "method analogstickactionbinding.get_actions_config_version() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_actions_config_version"]], "method analogstickactionbinding.get_actions_count() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_actions_count"]], "method analogstickactionbinding.get_analog_axis_action_binding() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_analog_axis_action_binding"]], "method analogstickactionbinding.get_analog_axis_action_state() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_analog_axis_action_state"]], "method analogstickactionbinding.get_analog_stick_action_binding() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_analog_stick_action_binding"]], "method analogstickactionbinding.get_analog_stick_action_smooth_value() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_analog_stick_action_smooth_value"]], "method analogstickactionbinding.get_analog_stick_action_state() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_analog_stick_action_state"]], "method analogstickactionbinding.get_current_action_set() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_current_action_set"]], "method analogstickactionbinding.get_default_preset_prefix() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_default_preset_prefix"]], "method analogstickactionbinding.get_digital_action_binding() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_digital_action_binding"]], "method analogstickactionbinding.get_digital_action_state() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_digital_action_state"]], "method analogstickactionbinding.get_double_click_time() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_double_click_time"]], "method analogstickactionbinding.get_group_tag_for_action() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_group_tag_for_action"]], "method analogstickactionbinding.get_group_tag_str_for_action() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_group_tag_str_for_action"]], "method analogstickactionbinding.get_joystick_stick_dead_zone() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_joystick_stick_dead_zone"]], "method analogstickactionbinding.get_joystick_stick_dead_zone_abs() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_joystick_stick_dead_zone_abs"]], "method analogstickactionbinding.get_last_used_device_mask() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_last_used_device_mask"]], "method analogstickactionbinding.get_long_press_time() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_long_press_time"]], "method analogstickactionbinding.get_main_gamepad_stick_dead_zone() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_main_gamepad_stick_dead_zone"]], "method analogstickactionbinding.get_main_gamepad_stick_dead_zone_abs() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_main_gamepad_stick_dead_zone_abs"]], "method analogstickactionbinding.get_overall_button_clicks_count() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_overall_button_clicks_count"]], "method analogstickactionbinding.get_tag_str() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_tag_str"]], "method analogstickactionbinding.get_user_config_base_preset() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_user_config_base_preset"]], "method analogstickactionbinding.get_user_props() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.get_user_props"]], "method analogstickactionbinding.is_action_active() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.is_action_active"]], "method analogstickactionbinding.is_action_binding_set() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.is_action_binding_set"]], "method analogstickactionbinding.is_action_internal() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.is_action_internal"]], "method analogstickactionbinding.is_action_stateful() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.is_action_stateful"]], "method analogstickactionbinding.is_recording_complete() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.is_recording_complete"]], "method analogstickactionbinding.is_recording_in_progress() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.is_recording_in_progress"]], "method analogstickactionbinding.is_user_config_customized() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.is_user_config_customized"]], "method analogstickactionbinding.is_user_props_customized() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.is_user_props_customized"]], "method analogstickactionbinding.load_actions_binding() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.load_actions_binding"]], "method analogstickactionbinding.load_user_config() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.load_user_config"]], "method analogstickactionbinding.reset_action_binding() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.reset_action_binding"]], "method analogstickactionbinding.reset_action_set_stack() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.reset_action_set_stack"]], "method analogstickactionbinding.reset_actions_binding() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.reset_actions_binding"]], "method analogstickactionbinding.reset_digital_action_sticky_toggle() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.reset_digital_action_sticky_toggle"]], "method analogstickactionbinding.reset_user_config_to_currest_preset() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.reset_user_config_to_currest_preset"]], "method analogstickactionbinding.reset_user_config_to_preset() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.reset_user_config_to_preset"]], "method analogstickactionbinding.save_actions_binding() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.save_actions_binding"]], "method analogstickactionbinding.save_user_config() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.save_user_config"]], "method analogstickactionbinding.send_action_event() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.send_action_event"]], "method analogstickactionbinding.send_action_terminated_event() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.send_action_terminated_event"]], "method analogstickactionbinding.set_action_binding() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.set_action_binding"]], "method analogstickactionbinding.set_actions_binding_column_active() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.set_actions_binding_column_active"]], "method analogstickactionbinding.set_analog_axis_action_state() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.set_analog_axis_action_state"]], "method analogstickactionbinding.set_analog_stick_action_smooth_value() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.set_analog_stick_action_smooth_value"]], "method analogstickactionbinding.set_breaking_action_set() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.set_breaking_action_set"]], "method analogstickactionbinding.set_default_preset_prefix() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.set_default_preset_prefix"]], "method analogstickactionbinding.set_digital_event_progress_monitor() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.set_digital_event_progress_monitor"]], "method analogstickactionbinding.set_double_click_time() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.set_double_click_time"]], "method analogstickactionbinding.set_joystick_stick_dead_zone() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.set_joystick_stick_dead_zone"]], "method analogstickactionbinding.set_long_press_time() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.set_long_press_time"]], "method analogstickactionbinding.set_main_gamepad_stick_dead_zone() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.set_main_gamepad_stick_dead_zone"]], "method analogstickactionbinding.setup_action_set() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.setup_action_set"]], "method analogstickactionbinding.start_recording_bindings() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.start_recording_bindings"]], "method analogstickactionbinding.start_recording_bindings_for_single_button() (method analogstickactionbinding method)": [[121, "method AnalogStickActionBinding.start_recording_bindings_for_single_button"]], "property analogaxisactionbinding.axisid (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.axisId"]], "property analogaxisactionbinding.axisrelativeval (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.axisRelativeVal"]], "property analogaxisactionbinding.deadzonethres (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.deadZoneThres"]], "property analogaxisactionbinding.decbtn (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.decBtn"]], "property analogaxisactionbinding.devid (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.devId"]], "property analogaxisactionbinding.incbtn (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.incBtn"]], "property analogaxisactionbinding.instantincdecbtn (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.instantIncDecBtn"]], "property analogaxisactionbinding.invaxis (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.invAxis"]], "property analogaxisactionbinding.maxbtn (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.maxBtn"]], "property analogaxisactionbinding.maxval (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.maxVal"]], "property analogaxisactionbinding.minbtn (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.minBtn"]], "property analogaxisactionbinding.mod (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.mod"]], "property analogaxisactionbinding.modcnt (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.modCnt"]], "property analogaxisactionbinding.nonlin (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.nonLin"]], "property analogaxisactionbinding.quantizevalonincdecbtn (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.quantizeValOnIncDecBtn"]], "property analogaxisactionbinding.relincscale (property analogaxisactionbinding attribute)": [[121, "property AnalogAxisActionBinding.relIncScale"]], "property analogstickactionbinding.axissnapangk (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.axisSnapAngK"]], "property analogstickactionbinding.axisxid (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.axisXId"]], "property analogstickactionbinding.axisxinv (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.axisXinv"]], "property analogstickactionbinding.axisyid (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.axisYId"]], "property analogstickactionbinding.axisyinv (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.axisYinv"]], "property analogstickactionbinding.deadzonethres (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.deadZoneThres"]], "property analogstickactionbinding.devid (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.devId"]], "property analogstickactionbinding.maxval (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.maxVal"]], "property analogstickactionbinding.maxxbtn (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.maxXBtn"]], "property analogstickactionbinding.maxybtn (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.maxYBtn"]], "property analogstickactionbinding.minxbtn (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.minXBtn"]], "property analogstickactionbinding.minybtn (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.minYBtn"]], "property analogstickactionbinding.mod (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.mod"]], "property analogstickactionbinding.modcnt (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.modCnt"]], "property analogstickactionbinding.nonlin (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.nonLin"]], "property analogstickactionbinding.sensscale (property analogstickactionbinding attribute)": [[121, "property AnalogStickActionBinding.sensScale"]], "property digitalactionbinding.axisctrlthres (property digitalactionbinding attribute)": [[121, "property DigitalActionBinding.axisCtrlThres"]], "property digitalactionbinding.btnctrl (property digitalactionbinding attribute)": [[121, "property DigitalActionBinding.btnCtrl"]], "property digitalactionbinding.ctrlid (property digitalactionbinding attribute)": [[121, "property DigitalActionBinding.ctrlId"]], "property digitalactionbinding.devid (property digitalactionbinding attribute)": [[121, "property DigitalActionBinding.devId"]], "property digitalactionbinding.eventtype (property digitalactionbinding attribute)": [[121, "property DigitalActionBinding.eventType"]], "property digitalactionbinding.mod (property digitalactionbinding attribute)": [[121, "property DigitalActionBinding.mod"]], "property digitalactionbinding.modcnt (property digitalactionbinding attribute)": [[121, "property DigitalActionBinding.modCnt"]], "property digitalactionbinding.stickytoggle (property digitalactionbinding attribute)": [[121, "property DigitalActionBinding.stickyToggle"]], "property digitalactionbinding.unordcombo (property digitalactionbinding attribute)": [[121, "property DigitalActionBinding.unordCombo"]], "property singlebuttonid.btnid (property singlebuttonid attribute)": [[121, "property SingleButtonId.btnId"]], "property singlebuttonid.devid (property singlebuttonid attribute)": [[121, "property SingleButtonId.devId"]], "function broadcastnetevent() (built-in function)": [[122, "function broadcastNetEvent"]], "function sendnetevent() (built-in function)": [[122, "function sendNetEvent"]], "err_aborted (none attribute)": [[123, "ERR_ABORTED"]], "err_io (none attribute)": [[123, "ERR_IO"]], "err_memory_limit (none attribute)": [[123, "ERR_MEMORY_LIMIT"]], "err_ok (none attribute)": [[123, "ERR_OK"]], "err_pending (none attribute)": [[123, "ERR_PENDING"]], "err_unknown (none attribute)": [[123, "ERR_UNKNOWN"]], "function abort_requests() (built-in function)": [[123, "function abort_requests"]], "function del_entry() (built-in function)": [[123, "function del_entry"]], "function get_all_entries() (built-in function)": [[123, "function get_all_entries"]], "function init_cache() (built-in function)": [[123, "function init_cache"]], "function request_entry() (built-in function)": [[123, "function request_entry"]], "de4_mode_create_entity (none attribute)": [[126, "DE4_MODE_CREATE_ENTITY"]], "function add_entity_save_order_comp() (built-in function)": [[126, "function add_entity_save_order_comp"]], "function add_group_require() (built-in function)": [[126, "function add_group_require"]], "function add_group_variant() (built-in function)": [[126, "function add_group_variant"]], "function add_group_variext() (built-in function)": [[126, "function add_group_variext"]], "function clear_entity_save_order() (built-in function)": [[126, "function clear_entity_save_order"]], "function clear_groups() (built-in function)": [[126, "function clear_groups"]], "function gather_ri_by_sphere() (built-in function)": [[126, "function gather_ri_by_sphere"]], "function get_ecs_tags() (built-in function)": [[126, "function get_ecs_tags"]], "function get_instance() (built-in function)": [[126, "function get_instance"]], "function get_point_action_ext_eid() (built-in function)": [[126, "function get_point_action_ext_eid"]], "function get_point_action_ext_id() (built-in function)": [[126, "function get_point_action_ext_id"]], "function get_point_action_ext_mtx() (built-in function)": [[126, "function get_point_action_ext_mtx"]], "function get_point_action_ext_name() (built-in function)": [[126, "function get_point_action_ext_name"]], "function get_point_action_ext_sph() (built-in function)": [[126, "function get_point_action_ext_sph"]], "function get_point_action_has_pos() (built-in function)": [[126, "function get_point_action_has_pos"]], "function get_point_action_mod() (built-in function)": [[126, "function get_point_action_mod"]], "function get_point_action_op() (built-in function)": [[126, "function get_point_action_op"]], "function get_point_action_pos() (built-in function)": [[126, "function get_point_action_pos"]], "function get_ri_from_entity() (built-in function)": [[126, "function get_ri_from_entity"]], "function get_saved_components() (built-in function)": [[126, "function get_saved_components"]], "function get_scene_filepath() (built-in function)": [[126, "function get_scene_filepath"]], "function get_template_name_for_ui() (built-in function)": [[126, "function get_template_name_for_ui"]], "function is_any_entity_selected() (built-in function)": [[126, "function is_any_entity_selected"]], "function is_asset_wnd_shown() (built-in function)": [[126, "function is_asset_wnd_shown"]], "function is_editor_activated() (built-in function)": [[126, "function is_editor_activated"]], "function make_cam_spawn_tm() (built-in function)": [[126, "function make_cam_spawn_tm"]], "function reset_component() (built-in function)": [[126, "function reset_component"]], "function save_add_template() (built-in function)": [[126, "function save_add_template"]], "function save_component() (built-in function)": [[126, "function save_component"]], "function save_del_template() (built-in function)": [[126, "function save_del_template"]], "function set_start_work_mode() (built-in function)": [[126, "function set_start_work_mode"]], "function eventbus_has_foreign_listeners() (built-in function)": [[127, "function eventbus_has_foreign_listeners"]], "function eventbus_has_listeners() (built-in function)": [[127, "function eventbus_has_listeners"]], "function eventbus_send() (built-in function)": [[127, "function eventbus_send"]], "function eventbus_send_foreign() (built-in function)": [[127, "function eventbus_send_foreign"]], "function eventbus_subscribe() (built-in function)": [[127, "function eventbus_subscribe"]], "function eventbus_subscribe_onehit() (built-in function)": [[127, "function eventbus_subscribe_onehit"]], "function eventbus_unsubscribe() (built-in function)": [[127, "function eventbus_unsubscribe"]], "function is_exports_symbol() (built-in function)": [[128, "function is_exports_symbol"]], "const frp_dont_check_nested (none attribute)": [[129, "const FRP_DONT_CHECK_NESTED"]], "const frp_initial (none attribute)": [[129, "const FRP_INITIAL"]], "method computed._nocomputeerrorfor() (method computed method)": [[129, "method Computed._noComputeErrorFor"]], "method computed.getsources() (method computed method)": [[129, "method Computed.getSources"]], "method computed.modify() (method computed method)": [[129, "method Computed.modify"]], "method computed.mutate() (method computed method)": [[129, "method Computed.mutate"]], "method computed.set() (method computed method)": [[129, "method Computed.set"]], "method computed.update() (method computed method)": [[129, "method Computed.update"]], "operator computed._call() (operator computed method)": [[129, "operator Computed._call"]], "operator computed._delslot() (operator computed method)": [[129, "operator Computed._delslot"]], "operator computed._newslot() (operator computed method)": [[129, "operator Computed._newslot"]], "property computed.used (property computed attribute)": [[129, "property Computed.used"]], "function crc32() (built-in function)": [[130, "function crc32"]], "function crc32_int() (built-in function)": [[130, "function crc32_int"]], "function md5() (built-in function)": [[130, "function md5"]], "function sha1() (built-in function)": [[130, "function sha1"]], "function object_to_json_string() (built-in function)": [[132, "function object_to_json_string"]], "function object_to_zstd_json() (built-in function)": [[132, "function object_to_zstd_json"]], "function parse_json() (built-in function)": [[132, "function parse_json"]], "function parse_json_from_zstd_stream() (built-in function)": [[132, "function parse_json_from_zstd_stream"]], "function decode() (built-in function)": [[133, "function decode"]], "function get_native_module_names() (built-in function)": [[134, "function get_native_module_names"]], "function on_module_unload() (built-in function)": [[134, "function on_module_unload"]], "function ndbdelete() (built-in function)": [[135, "function ndbDelete"]], "function ndbexists() (built-in function)": [[135, "function ndbExists"]], "function ndbread() (built-in function)": [[135, "function ndbRead"]], "function ndbtryread() (built-in function)": [[135, "function ndbTryRead"]], "function ndbwrite() (built-in function)": [[135, "function ndbWrite"]], "polyflag_blocked (none attribute)": [[137, "POLYFLAG_BLOCKED"]], "polyflag_ground (none attribute)": [[137, "POLYFLAG_GROUND"]], "polyflag_jump (none attribute)": [[137, "POLYFLAG_JUMP"]], "polyflag_ladder (none attribute)": [[137, "POLYFLAG_LADDER"]], "polyflag_obstacle (none attribute)": [[137, "POLYFLAG_OBSTACLE"]], "function check_path() (built-in function)": [[137, "function check_path"]], "function find_path() (built-in function)": [[137, "function find_path"]], "function project_to_nearest_navmesh_point() (built-in function)": [[137, "function project_to_nearest_navmesh_point"]], "function project_to_nearest_navmesh_point_no_obstacles() (built-in function)": [[137, "function project_to_nearest_navmesh_point_no_obstacles"]], "function traceray_navmesh() (built-in function)": [[137, "function traceray_navmesh"]], "const nintendo_switch (none attribute)": [[138, "const NINTENDO_SWITCH"]], "const ps4 (none attribute)": [[138, "const PS4"]], "const ps4_pro (none attribute)": [[138, "const PS4_PRO"]], "const ps5 (none attribute)": [[138, "const PS5"]], "const ps5_pro (none attribute)": [[138, "const PS5_PRO"]], "const unknown (none attribute)": [[138, "const UNKNOWN"]], "const xboxone (none attribute)": [[138, "const XBOXONE"]], "const xboxone_s (none attribute)": [[138, "const XBOXONE_S"]], "const xboxone_x (none attribute)": [[138, "const XBOXONE_X"]], "const xbox_anaconda (none attribute)": [[138, "const XBOX_ANACONDA"]], "const xbox_lockhart (none attribute)": [[138, "const XBOX_LOCKHART"]], "function get_console_model() (built-in function)": [[138, "function get_console_model"]], "function get_console_model_revision() (built-in function)": [[138, "function get_console_model_revision"]], "function get_default_lang() (built-in function)": [[138, "function get_default_lang"]], "function get_locale_country() (built-in function)": [[138, "function get_locale_country"]], "function get_locale_lang() (built-in function)": [[138, "function get_locale_lang"]], "function get_platform_string_id() (built-in function)": [[138, "function get_platform_string_id"]], "function is_gdk_used() (built-in function)": [[138, "function is_gdk_used"]], "method regexp2.fullmatch() (method regexp2 method)": [[139, "method regexp2.fullmatch"]], "method regexp2.match() (method regexp2 method)": [[139, "method regexp2.match"]], "method regexp2.multiextract() (method regexp2 method)": [[139, "method regexp2.multiExtract"]], "method regexp2.pattern() (method regexp2 method)": [[139, "method regexp2.pattern"]], "method regexp2.replace() (method regexp2 method)": [[139, "method regexp2.replace"]], "invalid_sound_handle (none attribute)": [[141, "INVALID_SOUND_HANDLE"], [148, "INVALID_SOUND_HANDLE"]], "sound_stream_buffering (none attribute)": [[141, "SOUND_STREAM_BUFFERING"], [148, "SOUND_STREAM_BUFFERING"]], "sound_stream_closed (none attribute)": [[141, "SOUND_STREAM_CLOSED"], [148, "SOUND_STREAM_CLOSED"]], "sound_stream_connecting (none attribute)": [[141, "SOUND_STREAM_CONNECTING"], [148, "SOUND_STREAM_CONNECTING"]], "sound_stream_error (none attribute)": [[141, "SOUND_STREAM_ERROR"], [148, "SOUND_STREAM_ERROR"]], "sound_stream_opened (none attribute)": [[141, "SOUND_STREAM_OPENED"], [148, "SOUND_STREAM_OPENED"]], "sound_stream_paused (none attribute)": [[141, "SOUND_STREAM_PAUSED"], [148, "SOUND_STREAM_PAUSED"]], "sound_stream_playing (none attribute)": [[141, "SOUND_STREAM_PLAYING"], [148, "SOUND_STREAM_PLAYING"]], "sound_stream_stopped (none attribute)": [[141, "SOUND_STREAM_STOPPED"], [148, "SOUND_STREAM_STOPPED"]], "function sound_abandon() (built-in function)": [[141, "function sound_abandon"], [148, "function sound_abandon"]], "function sound_close_stream() (built-in function)": [[141, "function sound_close_stream"], [148, "function sound_close_stream"]], "function sound_debug_trace() (built-in function)": [[141, "function sound_debug_trace"], [148, "function sound_debug_trace"]], "function sound_get_length() (built-in function)": [[141, "function sound_get_length"], [148, "function sound_get_length"]], "function sound_get_output_devices() (built-in function)": [[141, "function sound_get_output_devices"], [148, "function sound_get_output_devices"]], "function sound_get_record_devices() (built-in function)": [[141, "function sound_get_record_devices"], [148, "function sound_get_record_devices"]], "function sound_get_stream_state() (built-in function)": [[141, "function sound_get_stream_state"], [148, "function sound_get_stream_state"]], "function sound_get_stream_state_name() (built-in function)": [[141, "function sound_get_stream_state_name"], [148, "function sound_get_stream_state_name"]], "function sound_get_timeline_pos() (built-in function)": [[141, "function sound_get_timeline_pos"], [148, "function sound_get_timeline_pos"]], "function sound_init_event() (built-in function)": [[141, "function sound_init_event"], [148, "function sound_init_event"]], "function sound_init_stream() (built-in function)": [[141, "function sound_init_stream"], [148, "function sound_init_stream"]], "function sound_is_playing() (built-in function)": [[141, "function sound_is_playing"], [148, "function sound_is_playing"]], "function sound_keyoff() (built-in function)": [[141, "function sound_keyoff"], [148, "function sound_keyoff"]], "function sound_open_stream() (built-in function)": [[141, "function sound_open_stream"], [148, "function sound_open_stream"]], "function sound_play() (built-in function)": [[141, "function sound_play"], [148, "function sound_play"]], "function sound_play_one_shot() (built-in function)": [[141, "function sound_play_one_shot"], [148, "function sound_play_one_shot"]], "function sound_play_one_shot_3d() (built-in function)": [[141, "function sound_play_one_shot_3d"], [148, "function sound_play_one_shot_3d"]], "function sound_release_all_instances() (built-in function)": [[141, "function sound_release_all_instances"], [148, "function sound_release_all_instances"]], "function sound_release_event() (built-in function)": [[141, "function sound_release_event"], [148, "function sound_release_event"]], "function sound_release_stream() (built-in function)": [[141, "function sound_release_stream"], [148, "function sound_release_stream"]], "function sound_set_3d_attr() (built-in function)": [[141, "function sound_set_3d_attr"], [148, "function sound_set_3d_attr"]], "function sound_set_callbacks() (built-in function)": [[141, "function sound_set_callbacks"], [148, "function sound_set_callbacks"]], "function sound_set_output_device() (built-in function)": [[141, "function sound_set_output_device"], [148, "function sound_set_output_device"]], "function sound_set_stream_pos() (built-in function)": [[141, "function sound_set_stream_pos"], [148, "function sound_set_stream_pos"]], "function sound_set_timeline_pos() (built-in function)": [[141, "function sound_set_timeline_pos"], [148, "function sound_set_timeline_pos"]], "function sound_set_var() (built-in function)": [[141, "function sound_set_var"], [148, "function sound_set_var"]], "function sound_set_volume() (built-in function)": [[141, "function sound_set_volume"], [148, "function sound_set_volume"]], "function sound_start() (built-in function)": [[141, "function sound_start"], [148, "function sound_start"]], "function send_counter() (built-in function)": [[142, "function send_counter"]], "function send_gauge() (built-in function)": [[142, "function send_gauge"]], "function send_gauge_dec() (built-in function)": [[142, "function send_gauge_dec"]], "function send_gauge_inc() (built-in function)": [[142, "function send_gauge_inc"]], "function send_histogram() (built-in function)": [[142, "function send_histogram"]], "function send_profile() (built-in function)": [[142, "function send_profile"]], "ts_critical (none attribute)": [[143, "TS_CRITICAL"]], "ts_emergency (none attribute)": [[143, "TS_EMERGENCY"]], "ts_light (none attribute)": [[143, "TS_LIGHT"]], "ts_moderate (none attribute)": [[143, "TS_MODERATE"]], "ts_normal (none attribute)": [[143, "TS_NORMAL"]], "ts_severe (none attribute)": [[143, "TS_SEVERE"]], "ts_shutdown (none attribute)": [[143, "TS_SHUTDOWN"]], "function get_battery() (built-in function)": [[143, "function get_battery"]], "function get_battery_capacity_mah() (built-in function)": [[143, "function get_battery_capacity_mah"]], "function get_network_connection_type() (built-in function)": [[143, "function get_network_connection_type"]], "function get_thermal_state() (built-in function)": [[143, "function get_thermal_state"]], "function get_user_system_info() (built-in function)": [[143, "function get_user_system_info"]], "function inline_raytracing_available() (built-in function)": [[143, "function inline_raytracing_available"]], "function is_charging() (built-in function)": [[143, "function is_charging"]], "hkey_classes_root (none attribute)": [[145, "HKEY_CLASSES_ROOT"]], "hkey_current_config (none attribute)": [[145, "HKEY_CURRENT_CONFIG"]], "hkey_current_user (none attribute)": [[145, "HKEY_CURRENT_USER"]], "hkey_local_machine (none attribute)": [[145, "HKEY_LOCAL_MACHINE"]], "hkey_users (none attribute)": [[145, "HKEY_USERS"]], "function deleteregkey() (built-in function)": [[145, "function deleteRegKey"]], "function deleteregvalue() (built-in function)": [[145, "function deleteRegValue"]], "function getregint() (built-in function)": [[145, "function getRegInt"]], "function getregstring() (built-in function)": [[145, "function getRegString"]], "function regkeyexists() (built-in function)": [[145, "function regKeyExists"]], "function regvalueexists() (built-in function)": [[145, "function regValueExists"]], "function setregint() (built-in function)": [[145, "function setRegInt"]], "function setregstring() (built-in function)": [[145, "function setRegString"]], "function getint() (built-in function)": [[146, "function getInt"]], "function getstr() (built-in function)": [[146, "function getStr"]]}}) \ No newline at end of file diff --git a/tutorials/create-mission-wt/create_mission_wt.html b/tutorials/create-mission-wt/create_mission_wt.html new file mode 100644 index 000000000..829cece50 --- /dev/null +++ b/tutorials/create-mission-wt/create_mission_wt.html @@ -0,0 +1,258 @@ + + + + + + + Creating a Mission (War Thunder) — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Creating a Mission (War Thunder)

+

In the War Thunder editor, there is an additional tab called Mission +Editor (this tab is not available in daNetGame-based games). Through this +tab, you can create a mission to test assets on a specific location.

+

A key difference between this tab and the Landscape tab is that in the +Mission Editor, you’ll be using two property panels:

+
    +
  1. Mission Properties panel: This is always present in the Mission +Editor tab.

  2. +
  3. Object Properties panel: This can be accessed using the standard P +key.

  4. +
+

The process for creating a mission is as follows:

+
    +
  1. Select the Type of Unit:

    +

    From the dropdown menu, choose the type of vehicle or unit you want to place:

    +
      +
    • armada - airplanes;

    • +
    • tankModels - tanks;

    • +
    • ships - ships;

    • +
    • (Other types are non-playable units.)

    • +
    +

    Place the selected unit on the ground using:

    +
      +
    1. The Create Unit button.

    2. +
    3. Click on the desired location on the map.

    4. +
    +

    Select the Type of Unit

    +
    +

    Note

    +

    Tanks and ships will be placed on the ground, but planes may not appear +to be placed immediately. Zoom out from the map to see the plane high in the +sky.

    +
    +
  2. +
  3. Changing the Unit Type (Optional):

    +

    If you initially placed a tank but forgot to select tankModels in the +first step, you can still change the unit type in the Object Properties +panel by pressing the P key.

    +

    Changing the Unit Type (Optional)

    +
  4. +
  5. Configuring the Unit:

    +

    Suppose you placed a tank and moved it to the desired position. Now, you need +to configure the following:

    +
      +
    • Tank model

    • +
    • Weapon (usually set to default)

    • +
    • Ammunition type (typically default or HE)

    • +
    • Ammunition quantity

    • +
    +

    All these settings are adjusted in the Object Properties panel.

    +

    Configuring the Unit

    +
  6. +
  7. Assigning the Unit to an Army:

    +

    Check the “army” number assigned to your unit (since this is a PvP game, +different factions represent different armies) in the Object Properties +panel. Then, specify this army number in the player_teamA field within +the Mission Properties panel. After this, assign your unit to the +corresponding wing in the same panel.

    +

    Assigning the Unit to an Army

    +
  8. +
  9. Setting Up the Mission Properties:

    +

    In the Mission Properties panel:

    +
      +
    • Give your mission a name.

    • +
    • Select singleMission.

    • +
    • Specify the location where the mission should start.

    • +
    +

    Setting Up the Mission Properties

    +

    This is crucial – if you skip this step, your units might end up on the +default location, which is in the middle of the ocean!

    +
  10. +
  11. Saving the Mission:

    +

    Save your mission to the following directory: +\develop\gameBase\gameData\missions. Make sure to save +after any changes, as there is no auto-save feature!

    +

    Saving the Mission

    +
  12. +
  13. Running the Mission:

    +

    Once everything is set up, you can launch the mission.

    +

    Running the Mission

    +
  14. +
+
+
+

War Thunder CDK (Content Development Kit)

+

The War Thunder CDK is a set of tools available to every player for creating +user-generated content. You can access the tools for mission creation and more +here: War Thunder CDK.

+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tutorials/create-mission-wt/index.html b/tutorials/create-mission-wt/index.html new file mode 100644 index 000000000..9444596af --- /dev/null +++ b/tutorials/create-mission-wt/index.html @@ -0,0 +1,178 @@ + + + + + + + Creating a Mission (War Thunder) — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Creating a Mission (War Thunder)

+

A step-by-step guide to creating missions in War Thunder using the Mission +Editor in daEditor.

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tutorials/dng-non-human-char/dng_non_human_char.html b/tutorials/dng-non-human-char/dng_non_human_char.html new file mode 100644 index 000000000..b77c15b66 --- /dev/null +++ b/tutorials/dng-non-human-char/dng_non_human_char.html @@ -0,0 +1,1072 @@ + + + + + + + Non-Human Character: Step-by-Step Guide — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Non-Human Character: Step-by-Step Guide

+
+

General Guidelines for Creating Creatures of All Types

+

The Dagor Engine supports creating any bone-animated object (character). +However, this guide focuses on simple examples that do not involve IK (Inverse +Kinematics), upper or lower body animations, complex animation blending, or +additive animations. After reading this guide, you will be able to create +characters with any number of limbs. Additionally, we will set up animation +states for smooth transitions between character animations.

+
+
+

Example Scenes in 3ds Max

+

You can download scenes with models properly prepared for export: +3dsMax2024Files.zip

+
+
+

Examples in Dagor Engine

+

These examples are designed for use in daNetGame-based projects. The files +include ready-to-use game assets: a fish and a crow. Compatibility with War +Thunder has not been tested due to shader-related issues.

+

Download the archive: +creatures.zip

+

Extract the files into the dev directory of your project (a testing directory +not included in the game build). For example, +<engine_root>/<project_name>/develop/assets/dev/gameRes/. After extraction, +the path should look like this: +<engine_root>/<project_name>/develop/assets/dev/gameRes/creatures.

+

If everything is set up correctly, loading the Asset +Viewer and +selecting the crow asset 1 will result in error-free loading. +Click 2 to review error logs. The highlighted section indicates +successful loading.

+ +
+

Note

+

Scenes are compatible with 3ds Max 2024 or later.

+
+
+
+

Skeleton Bone Structure: Features and Scene Configuration

+

Let’s analyze the crow scene. Open the file 0 +crow_detailed_tpose.max.

+ +

Make sure to specify in the file name that it is the character’s T-pose. The +model must include a root bone 3. The naming is flexible, but +if you plan to use existing .blk files as templates, it is better to name it +root. This bone is used to move the entire scene. Additionally, a Body bone +4 must be defined.

+
+

See also

+

For more information, see +.blk File Format.

+
+

For complex models with separate upper and lower animations, different +animations may play simultaneously based on specific events. In such cases, bone +names must clearly indicate their purpose for programmers. In this example, the +same animation always applies to all bones, so Body directly follows root. +This will become crucial when defining properties for generating animation +dependencies.

+
+

Note

+

For more complex characters, the structure may involve actions like running +while rotating the torso and looking at the camera. Such setups require advanced +configurations, which are beyond the scope of this guide. Here, we focus on a +simpler and more straightforward task.

+
+

The 3ds Max scene must include the following mandatory features:

+
    +
  • LODs (Level of Detail) 2 must be named consistently, +e.g., LOD00 1. Inconsistent names across LODs will cause +errors during the Asset +Viewer resource +loading. While 3ds Max discourages identical names for objects, Dagor +Engine requires this convention. To distinguish objects, place them in layers +named according to their LOD levels, as shown in the example above.

  • +
  • For the Skin modifier, always disable Dual Quaternion +6 and set the number of points per bone 5 to +match the configuration specified in the project’s application.blk. Refer to +the Skin Parameters in Dagor section for more details: Working with the +Skin Modifier.

    +
    +

    See also

    +

    For more information, see +application.blk.

    +
    +
  • +
  • Store skinned objects as Editable Mesh 7 to ensure point +weights accurately reflect in Dagor after export. These steps help replicate +the Skin modifier’s behavior in Dagor precisely.

  • +
  • Use Selection Sets 8 for easier object selection during +export. For instance, to export LOD00, create a group named lod00 +containing all the scene bones and all objects from the LOD00 layer.

  • +
+

Each bone in the scene must include Custom Properties so that the Dagor +identifies them as bones. Below is the minimum required configuration for the +crow skeleton:

+
animated_node:b=yes  // Specifies the object is animated
+collidable:b=no      // Disables all collisions
+massType:t="none"    // No mass, but the object is physical
+renderable:b=no      // Excluded from rendering
+cast_shadows:b=no    // Excluded from shadow generation
+
+
+
+
+

Adding Basic Physics

+

To initialize the scene properly in Dagor, assign physical properties to at +least one bone using Custom Properties 2.

+ +

Without physics, the engine cannot generate a valid skeleton. Below is an +example configuration for the head bone 1:

+
animated_node:b=yes  // Specifies the object is animated
+collidable:b=no      // Enables collision handling, though further settings are required
+massType:t="box"     // Specifies the mass calculation type
+collision:t=capsule  // Specifies the collision type; consult your mentor for alternatives
+physObj:b=yes        // Enables physics for the object
+density:r=2000       // Density for mass calculation
+renderable:b=no      // Excluded from rendering
+cast_shadows:b=no    // Excluded from shadow generation
+
+
+
+

See also

+

For more information, see +Rigging, Skinning, and Exporting New Character.

+

Download example files to review the custom properties of bones like Bip*. +These properties dictate how the physical skeleton is generated.

+
+
+
+

Working with the Skin Modifier

+

The most critical aspect of working with the Skin modifier is controlling +the number of bones per vertex. By convention, this value is set to 4 bones per +vertex. This parameter is defined in the project’s general configuration file, +application.blk. Other required settings have already been covered earlier.

+

Example configuration in application.blk:

+
dynModel{
+  descListOutPath:t="dynModelDesc"
+  separateModelMatToDescBin:b=yes
+
+  ignoreMappingInPrepareBillboardMesh:b=yes
+  enableMeshNodeCollapse:b=no
+  maxBonesCount:i=318   // This is ineffective! Shader limitations cap bone count at 200.
+                        // Exceeding 200 will result in errors during daBuild.
+  setBonePerVertex:i=4  // Number of bones per vertex
+}
+
+
+
+
+

Creating LODs: Special Considerations for Dynamic Models

+

The primary rule for creating LODs is ensuring consistent naming for all LOD +levels. Using the crow as an example:

+ +

As shown, LODs share the same base name but are placed in separate layers. Each +LOD may contain multiple skinned objects. This approach is useful, especially +when the total triangle count for a single object exceeds the limit of 65,000 +triangles. If your model exceeds this limit, divide it into multiple pieces.

+

For each model with a Skin modifier, the following Custom Properties +must be added:

+
animated_node:b=yes  // Specifies the object is animated
+collidable:b=no      // Disables all collisions
+massType:t="none"    // Indicates no physical mass for this object
+
+
+

Ensure all skinned objects 1 have the specified properties +2:

+ +

For efficient management of Custom Properties, use an editor or viewer tool.

+
+

See also

+

For more information, see +Dagor 2 Fast Editor User Properties.

+
+
+
+

Materials for Dynamic Models

+

Let’s examine the materials assigned to the skinned models in the scene. In this +case, the materials used are crow_base and Dagor Dagorrat Material 2 +0. To view all available dynamic materials, open the +dropdown menu and navigate to the relevant section 1.

+

While each material type requires dedicated documentation, we will focus on the +simplest and most versatile option for +PBR lighting: +dynamic_simple 2. This material supports standard textures +such as albedo (with optional transparency), normal, smoothness, and +metalness maps. In this case, the textures are:

+
    +
  • crow_body_a_tex_d.tif (albedo)

  • +
  • crow_body_a_tex_n.tif (normal map)

  • +
+

If the archive was unpacked correctly, these textures can be found at the +following path: +<engine_root>/<project_name>/enlisted/develop/assets/dev/gameRes/creatures/characters/crow.

+

Assign the textures to the appropriate slots 3. To enable +transparency, add the atest property 4 and set its value +5 to 127. This controls the alpha test threshold, where +mid-level brightness determines transparency. Also, enable two-sided rendering +6, as crow feathers must be rendered on both sides.

+
+
+ + +
+
+

Verify that this material is applied to all skinned objects before proceeding +with export.

+
+
+

Exporting the Dynamic Model

+

If the selection sets 1 were prepared correctly earlier, +exporting is straightforward. In the crow scene, select the set named lod00 +2. This action highlights the LOD00 layer and all associated +bones.

+ + +

Next, navigate to Utilities, and choose Dagor Scene Export. If this +option is unavailable, add it using the Sets button. Within the Dagor +Export settings, ensure the following options are enabled:

+
    +
  • Export hidden objects

  • +
  • Export selected objects only

  • +
+

These options are essential for every export. Finally, click Export DAG.

+
+

Important Naming Conventions

+

The Dagor legacy constraints require specific naming conventions. The files +extracted from the creatures.zip archive must follow this format to maintain +compatibility with .blk scripts and project building pipelines.

+

For dynamic models:

+
    +
  • Append the postfix _dynmodel.

  • +
  • Specify the LOD using the .lodXX postfix, where XX is the LOD level.

  • +
+

For example, the crow model’s most detailed LOD(00) should be named as crow_detailed_a_dynmodel.lod00.dag.

+
    +
  • Green text: Customizable according to your naming needs.

  • +
  • Red text: Fixed and mandatory to ensure correct processing during build +and to define the LOD number.

  • +
+
+

Note

+

Post-export, you may encounter errors like: +

+

These errors occur because bones lack assigned Dagor materials. Assigning +materials does not resolve this issue; it can be safely ignored.

+
+

Repeat the export process for the other two LODs, naming them:

+
    +
  • crow_detailed_a_dynmodel.lod01.dag

  • +
  • crow_detailed_a_dynmodel.lod02.dag

  • +
+

Once the export is complete, verify the model in the Asset +Viewer by +selecting crow_lo_a_dynmodel 1:

+ +

If everything was done correctly, the model should load without errors.

+
+
+
+

Exporting Animation

+

In essence, animation is simply a record of the bone movements associated with a +model.

+
+

Important

+
    +
  • Bone Count, Naming, and Hierarchy: These must match exactly between the +dynamic model and the animation file.

  • +
  • Any mismatch can result in odd animation hierarchies or failure to display the +animation altogether.

  • +
+
+

Open the file crow_detailed_idle_b.max, which contains the animation for idle +movements. Select all bones in the scene; there should be 195 selected +objects, including all Helpers.

+

In the Dagor Export panel, ensure the following:

+
    +
  1. Enable the Export selected objects only button 1.

  2. +
  3. Explicitly set the animation key range for export 2, from +frame 0 to 150.

  4. +
+ +
+

Note

+

The animation range displayed on the timeline is irrelevant for export. You +must manually specify the key range in the export settings.

+
+

Enabling the checkboxes 4 significantly increases animation +precision, which is essential in this case to prevent visual errors such as +“sliding” feet.

+
+

Note

+

Exporting the animation with high precision increases the file size by hundreds +of times. Use this option only when it is really necessary.

+
+

Without these checkboxes, animations are compressed hierarchically, accumulating +minor errors over time. This can cause noticeable visual discrepancies. Enabling +high precision minimizes these errors, ensuring smoother playback.

+

Leave the scaling checkbox unchecked if there is no scaling animation in the +scene (as in this crow example).

+

Click the Export Animation button 3.

+

Naming and location conventions for animation files are similar to those for +dynamic models:

+
    +
  • Store animations in: +<engine_root>/<project_name>/develop/assets/dev/gameRes/creatures/animation/crow

  • +
  • Use the .a2d extension.

  • +
  • Naming guidelines:

    +
      +
    • Use the same base name as the dynamic model but omit LOD-related or +dynamic-model-specific postfixes.

    • +
    • Avoid key script processor keywords in the filename (e.g., dynamic-related +terms).

    • +
    +
  • +
+

In this example, save the animation as: crow_detailed_idle_b.a2d.

+

Next to this file, there should also be a configuration file named: +crow_detailed_idle_b.a2d.blk.

+

This file contains individual properties and settings for the animation.

+

Example:

+
name:t="crow_detailed_idle_b.a2d"  // Name of the animation linked to this script
+opt:b=no                           // Conservative optimization disabled.
+posEps:r=0.001                     // Position compression accuracy during project build.
+                                   // Higher values (e.g., 0.1 > 0.01) reduce file size but decrease accuracy.
+rotEps:r=0.001                     // Rotation compression accuracy. Higher values reduce accuracy.
+sclEps:r=0.1                       // Scaling compression accuracy (if applicable).
+
+
+

This is an example of a .blk script used for post-export processing. Carefully +adjust compression values to balance file size and animation precision.

+

After exporting, open the animation in the Asset +Viewer. If you +select the exported animation (crow_detailed_idle_b), you might initially see +nothing:

+ +

Steps to Display the Animation:

+
    +
  1. Assign the dynamic model 1 associated with the animation.

  2. +
  3. Re-select the animation 2.

  4. +
+

At this point, the crow 3 should appear in the scene in the +first frame of the animation instead of the default T-pose.

+

Playing the Animation:

+
    +
  • To play the animation, click the play button 4.

  • +
  • By default, animations play very quickly. Use the speed slider +5 to reduce playback speed (e.g., set it to 0.5x for +smoother observation).

  • +
+ +

At this stage, all necessary data has been exported from 3ds Max:

+
    +
  • Animation

  • +
  • Bone structure

  • +
  • Hierarchy

  • +
  • Model and its LODs

  • +
+

The final step is updating the .blk scripts to define the roles of each +component (e.g., bones, animations, models) for integration into Dagor Engine.

+
+
+

Principles of Working with Dynamic Models in Dagor and Resource Integration

+

The *.blk files found alongside models in creatures.zip are scripts that +automate the preparation, conversion, and generation of resources for the game. +These scripts, written in an internal language for Dagor, define specific +processes for managing game entities and objects.

+
+

Note

+

Reloading After Changes:

+
    +
  • Some .blk files (e.g., .folder.blk) only update after reloading the +Asset Viewer +or the daEditor.

  • +
  • In contrast, files related to animations can be edited dynamically, and +changes take effect immediately.

  • +
+
+

The .folder.blk file processes all contents of the directory it resides in, +along with its subdirectories. This is particularly useful when working with a +large number of resources.

+

Example: Processing Animations

+

<engine_root>/<project_name>/develop/assets/dev/gameRes/creatures/animation/.folder.blk

+
export{
+  gameResPack:t="anims.grp" // Export processed animation resources into the specified game resource package
+  exported:b=yes            // Perform the export
+}
+
+virtual_res_blk{        // Create virtual resource
+  find:t="^(.*)\.a2d$"  // Locate all *.a2d files in the directory tree
+  className:t="a2d"     // Assign the "a2d" class, marking them as animation objects
+  contents{
+    opt:b=yes      // Enable conservative optimization
+    posEps:r=0.01  // Compression accuracy for position
+    rotEps:r=0.2   // Compression accuracy for rotation
+    sclEps:r=0.1   // Compression accuracy for scaling
+  }
+}
+
+
+

This script:

+
    +
  1. Exports animations into the anims.grp game resource package.

  2. +
  3. Finds all *.a2d files, assigns them the “a2d” class, and processes them as +animations.

  4. +
  5. Applies compression with default thresholds to balance file size and +animation quality.

  6. +
+

Example: Processing Dynamic Models

+

<engine_root>/<project_name>/develop/assets/dev/gameRes/creatures/.folder.blk

+

This script is slightly more complex but follows the same structure.

+
scan_assets:b=yes   // Search for objects
+scan_folders:b=yes  // Search for directories
+
+export{
+  ddsxTexPack:t="creatures.dxp.bin" // Process textures and store them in this game resource
+  gameResPack:t="creatures.grp"     // Store processed models and virtual objects here
+}
+
+virtual_res_blk{                         // Create virtual resource
+  find:t="^((.*)_dynmodel)\.lod00\.dag$" // Locate dynamic model files
+  stopProcessing:b=false                 // Continue processing this object in other blocks
+  className:t="skeleton"                 // Generate skeleton from dynamic models
+  name:t="$2_skeleton"                   // Assign a skeleton name
+  contents{
+    addSkinNodes:b=yes  // Attach skin nodes to the skeleton
+    reduceNodes:b=yes   // Remove bones without Skin vertices
+  }
+}
+
+virtual_res_blk{                          // Create virtual resource
+  find:t="^((.*)_dynmodel)\.lod00\.dag$"  // Scan again for dynamic models
+  stopProcessing:b=false
+  className:t="DynModel"  // Assign "DynModel" class to dynamic models
+  name:t="$2_dynmodel"    // Assign a name to dynamic model objects
+  contents{
+    lod{
+      range:r=3000; fname:t="$1.lod00.dag";  // Set LOD00 rendering distance to 3000 meters
+    }
+    ref_skeleton:t="$2_skeleton"             // Assign the corresponding skeleton
+  }
+}
+
+
+

Key Steps:

+
    +
  1. Search Directories:

    +
      +
    • Use scan_assets:b=yes and scan_folders:b=yes to locate objects and +directories.

    • +
    +
  2. +
  3. Export Textures and Models:

    +
      +
    • Textures are saved in creatures.dxp.bin.

    • +
    • Models and virtual objects are saved in creatures.grp.

    • +
    +
  4. +
  5. Generate Skeletons:

    +
      +
    • Find models named as *_dynmodel.lod00.dag.

    • +
    • Create skeletons for these models, removing unused bones and linking skins.

    • +
    +
  6. +
  7. Assign Properties to Models:

    +
      +
    • Assign a rendering distance of 3000 meters for LOD00.

    • +
    • Link dynamic models to the generated skeletons.

    • +
    +
  8. +
+

After running the scripts, the resulting files (creatures.grp and +creatures.dxp.bin) are ready for integration into the game. These resources:

+
    +
  • Contain properly configured skeletons, bones, and skin objects.

  • +
  • Are optimized for gameplay with attributes such as rendering distance and +compression settings.

  • +
+

These configurations ensure all objects are processed as game entities with +specific classes and properties.

+
+
+

Real Resources vs. Virtual Resources and Objects in Dagor

+

Key Concepts:

+

Understanding the distinction between real resources (files on disk), +virtual resources (engine-created entities), and virtual resources +converted into game entities is critical when working with Dagor.

+

The Dagor Engine processes exported files (e.g., *.a2d, *.dag) into +optimized formats (*.dxp.bin, *.grp) ready for game use. While physical +files on disk represent raw data, virtual objects in the engine are entities +assigned game properties. These virtual objects are subsequently written into +binary game resources.

+

Real vs. Virtual Resources:

+
    +
  1. Exported Files: Files from tools like 3ds Max include animations +(*.a2d) and dynamic models (*.dag with LOD levels). These raw files are +intermediate resources.

  2. +
  3. Engine Optimization: The Dagor Engine transforms exported data, +applying compression and processing to meet game engine requirements (e.g., +reducing file size, optimizing for performance).

  4. +
  5. Game Resource Files: Final outputs like *.dxp.bin and *.grp are the +only formats recognized by the game executable. Scripts (*.blk) process the +exported data into game entities.

  6. +
+

Example: Crow Dynamic Model Breakdown

+

From a single dynamic model file, the following game entities can be generated +using *.blk scripts:

+
    +
  • Skeleton (crow_skeleton)

  • +
  • Model Shell

  • +
  • Physics Model

  • +
  • Collision Data

  • +
+

Notably, physics 1 and collision 2 data may +remain empty if unnecessary for the object, as in the case of the crow model. +For example:

+
    +
  • Skeleton: Visible because it was explicitly processed in the script.

    + +
  • +
  • Physics & Collisions: Empty because the script did not define these +components.

    + +
  • +
+
+
+

Configuring *_char.animchar.blk

+

This script assembles the virtual resources (e.g., skeleton, model, physics) +into a character with complex structures that the game code can manage +efficiently.

+

Example: <engine_root>/<project_name>/develop/assets/dev/gameRes/creatures/characters/crow/crow_detailed_a_char.animchar.blk

+
//no_anim_dist:r=100    // Distance beyond which animations stop (commented out)
+//no_render_dist:r=200  // Distance beyond which the model stops rendering (commented out)
+//useCharDep:b=no       // Not used here; consult specific documentation if needed
+rootNode:t="root"       // Starting bone of the skeleton
+dynModel:t="crow_detailed_a_dynmodel" // Dynamic model name for the character
+skeleton:t="crow_detailed_a_skeleton" // Skeleton name for the character
+animTree:t="crow_detailed_a_animbnl"  // Animation description tree for blending and rules
+physObj:t="crow_detailed_a_phobj"     // Physical model for the character
+
+//ref_states{           // Optional reference states (commented out)
+//  state:t="stand_ground"
+//}
+
+
+

Key Points:

+
    +
  1. Operates exclusively on virtual objects (e.g., skeletons, models).

  2. +
  3. Does not search for or sort physical files; all objects must already exist as +virtual entities.

  4. +
  5. Assembles the higher-level character structure by linking components (dynamic +model, skeleton, physics).

  6. +
+
+
+

Configuring *_dynmodel.dynmodel.blk

+

This script applies specific properties to an individual model. Unlike +.folder.blk, which processes groups of files, *_dynmodel.dynmodel.blk +targets a single resource.

+

Example: <engine_root>/<project_name>/develop/assets/dev/gameRes/creatures/characters/crow/crow_detailed_a_dynmodel.dynmodel.blk

+
ref_skeleton:t="crow_detailed_a_skeleton" // Assign the corresponding skeleton
+
+lod{range:r=2;}   // LOD00 switches to LOD01 at 2 meters
+lod{range:r=7;}   // LOD01 switches to LOD02 at 7 meters
+lod{range:r=15;}  // LOD02 turns off rendering at 15 meters
+
+
+

Key Points:

+
    +
  1. The naming convention ensures precise targeting of a specific dynamic +model (crow_detailed_a_dynmodel).

  2. +
  3. LOD Configuration:

    +
      +
    • range:r=2: Transitions from the highest detail (LOD00) to a lower detail +(LOD01).

    • +
    • range:r=15: Stops rendering entirely beyond this distance.

    • +
    +
  4. +
  5. Links the skeleton to the dynamic model (ref_skeleton), ensuring it uses +the correct hierarchy.

  6. +
+
+

Important

+

Real vs. Virtual:

+
    +
  • Real resources are raw files (e.g., *.a2d, *.dag), while virtual +resources are entities created and optimized by the engine.

  • +
  • Game resource files (*.dxp.bin, *.grp) are the final, optimized outputs.

  • +
+

Script Layers:

+
    +
  • .folder.blk: Processes groups of resources.

  • +
  • *_char.animchar.blk: Assembles characters from components like skeletons, +models, and physics.

  • +
  • *_dynmodel.dynmodel.blk: Configures individual models with properties such +as LOD ranges.

  • +
+
+
+
+

Configuring *_animbnl.animtree.blk

+

The *_animbnl.animtree.blk file defines the rules for animation states, +blending, and other related configurations, such as additive animations for a +character. This script is one of the most complex due to its detailed control +over animation blending and state transitions.

+
+

See also

+

For more information, see +daAnimations.

+
+

Key Points:

+
    +
  1. Sequential Execution Matters: Blocks and commands must be executed in the +order they are defined. For instance, a blending controller must be declared +before it is used.

  2. +
  3. Nodes as Units: A node can represent an object, model, or bone. Nodes +are identified by names, which are used for configuration.

  4. +
  5. Critical Documentation: It is highly recommended to read related +documentation thoroughly to understand controllers, states, and blending +techniques.

  6. +
+

Example: <engine_root>/<project_name>/develop/assets/dev/gameRes/creatures/characters/crow/crow_detailed_a_animbnl.animtree.blk

+

Script Breakdown:

+
export:b=yes              // Process the script
+root:t="fifo3"            // Root node for animation blending
+defaultForeignAnim:b=yes  // Enables blending foreign animations
+
+
+
nodeMask{         // Defines masks for specific nodes (bones in this case).
+  name:t="body"   // Bone name from 3ds Max
+  node:t="Bip01"  // Root bone name as recognized by Dagor
+}
+
+
+
    +
  • Purpose: Aligns the bone naming conventions between 3ds Max and Dagor +to ensure compatibility. For example, Bip01 is historically used for root +bones in 3ds Max.

  • +
+
stateDesc{             // Specifies all possible animation states for the character.
+                       // In this example states represent conditions like "flying"
+                       // and "turning right while flying".
+  defMorphTime:r=0.15  // Transition time between states (morphing)
+  defNodeName:t="*"    // Applies to all bones (nodes)
+
+  chan{                // Mixing channel for the "body" and nodes
+    name:t="body"
+    fifo3:t="fifo3"    // Controller type
+    nodeMask:t=""      // Applies to all nodes
+    cond_target:i=1
+  }
+
+  chan{                // Mixing channel for the "root" and nodes
+    name:t="root"
+    fifo3:t="fifo3_root"
+    nodeMask:t=""
+    cond_target:i=0
+  }
+
+  state{               // Example animation state
+    name:t="crow_a_fly_turn_right"           // State name
+    body{ name:t="crow_a_fly_turn_right"; }  // Links the state to an animation for the "body"
+  }
+}
+
+
+
    +
  • States: Represent high-level conditions that can mix multiple animations +or transitions.

  • +
  • Channels: Control how specific nodes or groups of bones are blended in +animation.

  • +
+

Each animation state is linked to an AnimBlendNodeLeaf{} block that specifies +the actual animation file (*.a2d) and its properties.

+
AnimBlendNodeLeaf{
+  a2d:t="crow_detailed_fly_turn_right" // Animation file
+
+  continuous{
+    name:t="crow_a_fly_turn_right"      // Internal name linked to the state
+    key_start:t="fly_turn_right_start"  // Start keyframe from 3ds Max
+    key_end:t="fly_turn_right_end"      // End keyframe from 3ds Max
+    time:r=2.0                          // Playback duration
+    own_timer:b=yes                     // Unique timer for this animation
+    eoa_irq:b=yes                       // End-of-animation interrupt marker
+  }
+}
+
+
+
    +
  • Purpose: Prepares the raw animation file for use in the defined states.

  • +
  • Keys: Define specific animation segments exported from 3ds Max.

  • +
+

Blend controllers manage the mixing of different animation states.

+
AnimBlendCtrl{
+  fifo3{
+    name:t="fifo3"         // Name of the controller
+    varname:t="fifo3_var"  // Variable name for internal use
+  }
+
+  fifo3{
+    name:t="fifo3_root"
+    varname:t="root_ctrl"
+  }
+}
+
+
+

Key Execution Steps:

+
    +
  1. Define Controllers: Controllers like fifo3 and fifo3_root are +declared first.

  2. +
  3. Specify States: States such as crow_a_fly_turn_right link animations to +logical conditions.

  4. +
  5. Create Animation Nodes: For each state, an AnimBlendNodeLeaf{} is +created to prepare the corresponding animation file.

  6. +
  7. Test the Configuration: Use the Dagor Engine visualization tools (e.g., +the Asset +Viewer) to +verify the setup.

  8. +
+
+

Important

+
    +
  • Purpose: The *_animbnl.animtree.blk file establishes a framework for +managing animation states and blending.

  • +
  • Components:

    +
      +
    1. Node Masks: Define skeleton relationships.

    2. +
    3. State Descriptions: Link logical states to animations.

    4. +
    5. Animation Nodes: Prepare animations for state transitions.

    6. +
    7. Controllers: Manage blending logic.

    8. +
    +
  • +
+
+

When viewed 1 in the Asset +Viewer, the +following elements should appear based on this configuration:

+
    +
  1. Skeleton Nodes: The root node (Bip01) and associated hierarchy +2.

  2. +
  3. Blend Nodes: All defined AnimBlendNodeLeaf elements 3, +corresponding to animation states.

  4. +
  5. Controllers: All specified controllers (fifo3, fifo3_root).

  6. +
  7. States: List of all defined animation states, such as +crow_a_fly_turn_right.

  8. +
+ +
+
+

Testing the Character in Asset Viewer

+

Step 1: Checking Files in Asset Viewer

+
    +
  1. Open the Asset +Viewer and +load all the files related to your character 1.

    +

    Goal: Ensure no errors appear in the console 2. A +successful result looks like this:

    + +
  2. +
  3. Common Checkpoints:

    +
      +
    • Inspect every file linked to the character (e.g., animations, blend +controllers, state descriptions).

    • +
    • Console errors indicate an issue with one or more configurations.

    • +
    +
  4. +
+

Step 2: Local Resource Building

+
    +
  1. Initiate daBuild: +To include the created character in .grp and .dxp.bin files:

    +
      +
    • Navigate to the folder 1 containing the character +resources (e.g., crow).

    • +
    • Right-click the folder and select the Export All (PC) option +2.

      + +
    • +
    +
  2. +
  3. Monitor Build Progress:

    +
      +
    • The building process starts and may take a significant amount of time +depending on your computer’s performance.

    • +
    • Build progress is displayed in the console. A successful build ends with an +output similar to this 1:

      + +
    • +
    +
  4. +
  5. Integration: +Once built, the character is ready for inclusion in the game.

  6. +
+
+
+

Common Errors

+
+

Error: Bracket Mismatches

+

Missing or extra brackets can cause critical errors during script parsing.

+

Example:

+
BLK error 'D:/dagor2/enlisted/develop/assets/dev/gameRes/creatures/characters/crow/crow_detailed_a_animbnl.animtree.blk',228: unexpected EOF:
+
+
+
    +
  • Cause: Unmatched brackets result in an “unexpected end of file” (EOF) +error.

  • +
  • Solution: Carefully check the script for bracket pairs, especially in +deeply nested blocks.

  • +
+ +
+
+

Error: Incorrect Data Types

+

Example:

+
BLK invalid time (type real) value in line 209 of 'D:/dagor2/enlisted/develop/assets/dev/gameRes/creatures/characters/crow/crow_detailed_a_animbnl.animtree.blk': 'sdfsd'
+DataBlockParser: invalid value 'sdfsd' at line 209 of file '.../crow_detailed_a_animbnl.animtree.blk'
+
+
+
    +
  • Cause: A non-numeric value (e.g., string) is assigned to a numeric +property like time.

  • +
  • Solution: Review and correct the value. Ensure all numeric parameters +are defined as valid numbers (e.g., time:r=2.0).

  • +
+ +
+
+

Debugging Tips

+
    +
  1. Error Line Numbers: While error messages indicate a line number, they may +not always be accurate. Errors often occur earlier in the script but only +show later.

  2. +
  3. Manual Validation:

    +
      +
    • Verify the syntax for critical properties such as state, chan, and +AnimBlendNodeLeaf.

    • +
    • Cross-check with examples or templates to ensure consistency.

    • +
    +
  4. +
  5. Progressive Testing:

    +
      +
    • Test the script incrementally by adding elements in small chunks.

    • +
    • This approach isolates errors more effectively.

    • +
    +
  6. +
+
+
+

Summary

+

Key Steps for Testing:

+
    +
  1. Verify all character files in the Asset +Viewer.

  2. +
  3. Perform a local build using the the daBuild and monitor for successful +output.

  4. +
  5. Address any errors detected during the process.

  6. +
+

Common Pitfalls:

+
    +
  • Missing or extra brackets ({, }).

  • +
  • Incorrect value types (e.g., string instead of number).

  • +
  • Errors at incorrect line numbers due to delayed detection.

  • +
+

By following these steps and debugging techniques, you can ensure your character +is fully functional and ready for game integration.

+
+

Tip

+

If you encounter any errors or have questions regarding this document, please +reach out to the author directly at +a.vlasov@gaijin.team.

+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tutorials/dng-non-human-char/index.html b/tutorials/dng-non-human-char/index.html new file mode 100644 index 000000000..fd50cc9a1 --- /dev/null +++ b/tutorials/dng-non-human-char/index.html @@ -0,0 +1,193 @@ + + + + + + + Non-Human Character: Step-by-Step Guide — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/tutorials/index.html b/tutorials/index.html new file mode 100644 index 000000000..31695ac0e --- /dev/null +++ b/tutorials/index.html @@ -0,0 +1,173 @@ + + + + + + + Tutorials and Manuals — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Tutorials and Manuals

+

Guides and step-by-step instructions to help you master the Dagor Engine.

+ +
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/tutorials/wt-designing-vehicle-deformations/index.html b/tutorials/wt-designing-vehicle-deformations/index.html new file mode 100644 index 000000000..fe5d31049 --- /dev/null +++ b/tutorials/wt-designing-vehicle-deformations/index.html @@ -0,0 +1,190 @@ + + + + + + + Designing Vehicle Deformations — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/wt-designing-vehicle-deformations/wt_designing_vehicle_deformations.html b/tutorials/wt-designing-vehicle-deformations/wt_designing_vehicle_deformations.html new file mode 100644 index 000000000..4d155bfce --- /dev/null +++ b/tutorials/wt-designing-vehicle-deformations/wt_designing_vehicle_deformations.html @@ -0,0 +1,1275 @@ + + + + + + + Designing Vehicle Deformations — Dagor Documentation documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Designing Vehicle Deformations

+
+

Overview

+

This article provides a step-by-step guide for creating vehicle deformations. It +uses three vehicle models as examples, detailing how to implement destruction on +them. The focus is on working with existing vehicles. You’ll need advanced +knowledge of 3ds Max and a thorough understanding of how Dagor Engine +handles destruction.

+
+

Prerequisites

+

Plugins and Tools:

+ +
+
+

Platform Specifics

+

The examples and guidelines are based on War Thunder. Projects based on +daNetGame framework will follow the same principles, with minor differences in +shaders.

+
+
+

Version Requirements

+
    +
  • Minimum 3ds Max 2021 is required.

  • +
  • All example files were created using 3ds Max 2024.

  • +
+
+
+
+

General Concepts of Vehicle Deformations and Destruction

+
+

Key Constraints

+

The primary limitation in a single Dagor .dag model file is that only one +deformable object can exist. If multiple deformable objects are present, the +engine will prioritize the largest object by bounding box, as indicated in logs:

+
43.52 [E] multiple nodes with dynamic_deformed shader in instance, choosing the biggest one
+
+
+

Rigid-body (non-deformable) objects are limited to a few hundred per model. +These rigid objects should be identified and separated during the design phase +to achieve the desired destruction effect. Objects that visually detach during +real-world vehicle destruction or significantly differ in material (e.g., +wheels, wooden fences, glass, plastic panels) must be isolated into separate +components by material type.

+
+
+
+

Preparing the Model for Destruction

+
+

Importing the Model

+

Import the .dag model: +m123_truck.lod00.zip

+

For material insights, preview the model with textures in the Asset +Viewer: +<engine_root>/<project_name>/develop/assets/entities/vehicles/cars_modern/m123_truck.lod00.dag

+The model with textures preview in Asset Viewer +
+
+

Setting Up Layers

+

Organize your scene into layers for a structured workflow:

+
    +
  1. DeformStart: Contains objects to be deformed.

  2. +
  3. DeformEnd: Contains objects after deformation.

    +
    +

    Important

    +

    Pay close attention to the naming of objects in DeformStart and +DeformEnd layers. The quantity and naming must be identical. This +consistency will prevent indexing errors in the order of vertices in the +final model during the subsequent merging of all deformable objects.

    +
    +
  4. +
  5. RigidObj: Houses rigid, detachable components.

  6. +
  7. EXPORT: Final output layer.

  8. +
+
+

Object Identification

+
    +
  • Green (1): Deformable metal requiring tessellation (placed in +DeformStart).

  • +
  • Brown (3): Metal with sufficient detail, no tessellation needed (also in +DeformStart).

  • +
  • Blue (2): Metal requiring separation for realistic deformation (e.g., +doors).

  • +
  • Purple (4): Rigid objects, such as detachable components (placed in +RigidObj).

  • +
+Color identification of the model parts in 3ds Max +
+
+
+
+

Deforming Large Rigid Components

+

Pre-deform large rigid objects to improve realism post-separation. Minor parts +can remain mostly intact. For example, large tires should appear damaged and +should resemble this degree of deformation:

+Deformed vehicle tyres in 3ds Max +
+
+

Configuring Rigid Components

+
    +
  1. Set Active Layer: Work in the RigidObj layer.

    +Rigid object layer icon in 3ds Mas +
  2. +
  3. Launch Script: Use Dagor 2 Damages Setup +Tool.

  4. +
  5. Reset Pivots: Reset pivots to object centers.

    +Pivots reset to objects center in 3ds Max +
  6. +
+
+

Script Adjustments

+
    +
  • Change materialName:t="wood_solid" to materialName:t="metal" for proper +sound and effects.

  • +
  • Change density:r=150 to density:r=250 for metal properties.

    +Dagor 2 Damage Setup properties window +
  • +
+
+
+

Applying Changes

+
    +
  • (1) Select all objects in RigidObj layer.

  • +
  • (2) Apply the script to generate accurate collision hierarchies and +user-defined properties.

    +Selecting objects in Rigid object layer and applying the script to generate collision hierarchies in 3ds Max +Generated objects collisions in 3ds Max +
  • +
+
+
+

Adjusting Collision Boxes for Objects

+

As observed, a collision box (1) is generated for each object, but it does +not always precisely conform to the shape of the objects (2). Therefore, it +is necessary to manually adjust the collision boxes in the scene to achieve +accurate coverage.

+

For instance, when working with wheels, align the box size to the wheel’s +diameter and duplicate the box collisions by rotating them. This will create an +approximate cylinder shape. Unfortunately, Dagor Engine does not support +native cylinder or sphere collisions, so all shapes must be approximated using +boxes. The final scene will look as follows:

+Generated collision boxes and objects in 3ds Max +
+

Note

+

All scaling, positioning, and rotation adjustments must be performed in Local +Space.

+Local Space in enabled on the panel in 3ds Max +

Failure to do so will result in distortions and inaccuracies after export to +Dagor Engine. Correcting these issues later is extremely difficult and +time-consuming.

+
+

Notice that components such as wheels (1), headlight lenses (1), and +mudguards (1) are defined using multiple collision boxes. For complex +shapes, take an existing collision box and modify it to match the object’s +contours as closely as possible. If one box is insufficient, add as many as +necessary. Simpler shapes, such as side mirrors (2), can typically be +described with a single box.

+

To streamline the review of object properties, it is recommended to use the +Dagor 2 Fast Editor User +Properties +script. After installation, the script is activated with Alt+Ctrl. For all +selected objects (1), it will display the contents of their custom user +properties (3) in a dedicated window (2), eliminating the need to +individually access these properties via context menus. To hide the script +window, press Alt+Shift.

+

With this step, the configuration of solid objects is complete. Hide this layer, +as it will no longer be needed before export.

+
+
+
+

Configuring the Deformable Parts of the Vehicle

+

Begin by configuring objects within the DeformStart and DeformEnd +layers. For realistic vehicle deformation, the model must have sufficient +detail. This often necessitates tessellating the model to enhance deformation +quality. For example, attempting to deform fuel tanks (1), the vehicle base +(2), wheel arches and fenders (4), mudguards (3), and the cab +(5) will result in issues if there are insufficient triangles to allow +proper deformation. Even separate components, like the door (6), require +tessellation.

+View of model deformable parts in 3ds Max before tesselation in 3ds Max +

After tessellation, the model should not exceed 65,000 triangles in total. A +properly tessellated vehicle should look approximately like this:

+View of model deformable parts in 3ds Max after tesselation in 3ds Max +

Unfortunately, there are no strict tessellation rules. A good recommendation is +to create cuts every 20-30 cm, striking a balance between visual quality and the +triangle count. Aim to keep the triangle count as low as possible without +sacrificing deformation quality. The optimal balance comes with experience after +deforming 3-4 models.

+

Next, copy all objects from the DeformStart layer into the DeformEnd +layer. Pay close attention to naming conventions. Ensuring consistent naming +is crucial for preserving vertex indexation when combining pieces later. +Matching the vertex indexing between the initial (undeformed) and final (fully +deformed) models is essential. Hide the DeformStart layer, as it contains +the undeformed model version needed only at the end of the workflow to bake +vertex position data into vertex colors. Verify that all names and object +sequences are identical:

+Copying all objects from the DeformStart layer into the DeformEnd layer in 3ds Max +

At this stage, you are ready to begin deformation. Save the scene before +starting each deformation step. Results may not always match your +expectations, and rolling back is often easier. Consider setting undo steps to +at least 300-400 for safety. However, saving regularly is more reliable, as +3ds Max may crash unexpectedly during deeper undo actions.

+
+

Deformation Process

+

Deforming the vehicle involves using Soft Selection on vertices to create a +realistic crumpled effect. Start with broader adjustments and refine as you go. +For example:

+
    +
  • Doors: Open or partially open the doors before deformation. Doors nearly +always open or partially detach during vehicle collisions.

  • +
  • Fragile parts: Separate brittle components rather than deform them.

  • +
+

Initially, apply an FFD (Free Form Deformation) modifier to all objects for +rough adjustments:

+Appling an FFD (Free Form Deformation) modifier to all objects for rough adjustments in 3ds Max +

Then carefully deform individual vehicle elements:

+Deforming individual vehicle elements in 3ds Max +
+
+

Combining Layers

+

After deformation, merge all parts in the DeformStart layer and then do the +same for the DeformEnd layer. When merging, ensure that objects are attached +in numerical order (e.g., attach to object *000 in sequence). This step is +critical to maintain consistent vertex indexing. The result will be two distinct +models – deformed and undeformed. For convenience, move the pivot point of each +model to the center of the scene and perform a Reset Transform. This step +helps prevent potential issues with normals during export. Tools such as the +Dagor 2 Fix Normal Orientation +Tool +or 3ds Max’s built-in tools can assist with this. The scene should now appear +as follows:

+Moving the pivot point of each model to the center of the scene and performing a Reset Transform +
+
+

Transferring Vertex Positions to Vertex Colors

+

Run the Dagor 2 Transfer Vertex Position to Vertex Color +Tool +script. Select the undeformed model, set the deformed model as the source in the +Pick Source Object field, and click Transfer Vertex Position to VColor! +This will map the deformed model’s vertex position changes into the vertex color +channel of the undeformed model. Check the vertex color channel to confirm it +contains data. The undeformed model should now look similar to this:

+Maping the deformed model's vertex position changes into the vertex color channel of the undeformed model +

The intensity of the vertex colors indicates the degree of deformation – +stronger deformations produce more vibrant colors, while minimal deformations +appear closer to gray. This step verifies the successful transfer of position +data into vertex colors. The deformed model is no longer needed and can be +hidden along with the DeformEnd layer.

+
+
+

Assigning Custom User Properties

+

Assign the following custom user properties to the undeformed model to +ensure correct behavior in Dagor Engine:

+
animated_node:b=yes
+physObj:b=yes
+collidable:b=no
+density:r=15500
+massType:t="none"
+
+
+

The density:r=15500 parameter is set based on the vehicle type. For a heavy +vehicle, use a value of ~15,500; for passenger cars, values between 5,000 and +7,000 are typical.

+Setting the Dagor 2 Fast Properties tool parameters +
+
+

Final Scene Setup

+

Complete the general scene configuration to ensure the vehicle interacts +properly in Dagor Engine. The vehicle body must behave correctly as a physical +object and respond as intended within the engine.

+
+
+
+

Auxiliary Collision Objects

+

To ensure proper interactions between the destructible vehicle model and tanks +or other vehicles, auxiliary collision boxes need to be added to the scene. +These objects are designed similarly to standard collision boxes but must be +attached +The Attaching icon +to the main deformable body of the vehicle.

+Collision boxes of the model parts in 3ds Max +
    +
  • Stepped Base (2): Enables wheeled vehicles with smaller wheel diameters to +visually climb onto a deformed section of the vehicle.

  • +
  • Bumper (2) and External Platforms: Ensure the detached wheels are pushed +correctly away from the main body.

  • +
  • Box (3): Simulates falling glass fragments dispersing outward.

  • +
  • Cabin (large deformation): Prevents tanks from driving further by creating +a larger physical obstacle.

  • +
  • Box Set (4): Facilitates correct interaction with the vehicle’s rear bulk.

  • +
  • Rear Platform Box (5): Acts as a support platform for smaller debris at +the back of the vehicle.

  • +
  • Diagonal Boxes (bottom): Prevent the vehicle from landing flat like a +slab, instead allowing a natural tilted fall.

  • +
+Tailored auxiliary collision boxes of the model parts in 3ds Max +

Each vehicle requires tailored auxiliary collision boxes.

+
+
+

Assigning Dynamic Materials

+

Since we start with a static model, its materials need to be converted into +dynamic ones to enable deformation. Dynamic vehicle pieces require specific +shaders, distinct from static ones. Assign Dagorrat Material 1 to the +deformable body of the vehicle. Use the following settings:

+Assigning Dagorrat Material 1 in Material Editor +
    +
  • (1) Material Name: Use descriptive naming for clarity.

  • +
  • (2) Material Class: Set to dynamic_deformed to specify the shader type.

  • +
  • (3) Slot 0: Albedo texture.

  • +
  • (4) Slot 2: Normal texture packed with metalness (B channel) and +smoothness (A channel).

  • +
  • (5) Slot 7: Damaged metal albedo texture with a fracture/mask in the alpha +channel.

  • +
  • (6) Slot 8: Damaged metal normal map, packed identically to Slot 2.

  • +
+
+

Next, assign Dagorrat Material 2 for solid objects using these settings:

+Assigning Dagorrat Material 2 in Material Editor +
    +
  • (1) Material Class: dynamic_simple.

  • +
  • (2) Slot 0: Vehicle’s albedo texture.

  • +
  • (3) Slot 3: Packed normal/metalness/smoothness texture.

  • +
+
+

Assign Dagorrat Material 2 to all non-collision objects within the +RigidObj layer.

+
+

See also

+

For more information on complex models with hierarchical materials, see +Proxy materials.

+
+
+
+

Exporting the Vehicle

+

To export the completed vehicle:

+
    +
  1. Select all objects in the DeformStart and RigidObj layers.

  2. +
  3. Move them to the EXPORT layer and make it active.

  4. +
  5. Export with the following Dagor exporter settings:

    +Group of Dagor Exporter Settings labels +
  6. +
  7. Save the output file as (with overwriting): +<engine_root>/<project_name>/develop/assets/entities/vehicles/cars_modern/m123_truck_destr.lod00.dag

  8. +
+

Ready-to-export scene: +m123_truck_destr_deform.zip

+
+
+

Testing the Model

+
    +
  1. Open the model in Asset +Viewer to test +its destruction mechanics.

    +Model in Asset Viewer +
      +
    • Select the vehicle model (0).

    • +
    • Set the physics engine (1).

    • +
    • Start the simulation (2).

      +Steps for starting the simulation process in Asset Viewer +

      If errors occur (commonly shader-related), check the console logs +The Console icon

      +
      +

      Tip

      +

      If the issues remain unresolved, please contact the author of this document +at a.vlasov@gaijin.team.

      +
      +
    • +
    +
  2. +
  3. Export resources to Dagor binary formats using the Export All (PC) option +in the context menu:

    +The Export All (PC) option in Asset Viewer menu +

    To suppress warnings from older files during export, add the following block +to application.blk:

    +
    logerr_to_con{
    +  AssetViewer{
    +    exclude_re:t="(warning: node <occluder_box> from)|(Shader 'simple_aces' not found in bin dump)|(Shader 'simple' not found in bin dump)|(Shader 'land_mesh_combined' not found in bin dump)|(has mesh with 0 faces)|(degenerate tri)|(degenerate mesh node)"
    +  }
    +}
    +
    +
    +

    This will allow to ignore warnings that outdated shaders are not found. +Ensure there are no errors in the console after building:

    +The Asset Viewer console output +
  4. +
  5. Modify the destruction configuration for the vehicle in rendinst_dmg.blk +placed at <engine_root>/<project_name>/develop/gameBase/config/ directory:

    +
    m123_truck{
    +  physRes:t="m123_truck_destr_phobj";
    +  hp:r=40;
    +  impulseThreshold:r=3;
    +  dmPreset:t="metal_light_explosive_props";
    +  fx:t="ad_car_wreck";
    +  fxScale:r=1;
    +  material:t="metal";
    +}
    +
    +
    +

    Below is an explanation of key parameters for configuring destruction +properties:

    +
      +
    • m123_truck: The name of the primary object that will be destructible.

    • +
    • m123_truck_destr_phobj: The name of the virtual object generated from +m123_truck_destr.lod00.dag. This represents the destructible version of +the object and is the result of the processes outlined so far.

    • +
    • hp:r=40: Specifies the HP threshold at which the destruction occurs. When +the object’s HP falls below this value, it will break apart.

    • +
    • impulseThreshold:r=3: Defines the impulse force required to trigger +destruction. For instance, a collision or impact with a force greater than +this value will cause the object to break.

    • +
    • dmPreset:t="metal_light_explosive_props": The destruction model preset to +be used. This determines the destruction behavior, including debris +generation and dynamics.

    • +
    • fx:t="ad_car_wreck": Specifies the particle effect to be used during the +destruction event. For example, this could represent the explosion visuals +triggered when the object is destroyed. Other particle effects can be +reviewed in this file and substituted as needed.

    • +
    • fxScale:r=1: Adjusts the scale of the explosion effect. This parameter +may need fine-tuning to match the size of the vehicle or object being +destroyed.

    • +
    • material:t="metal": This critical parameter overrides the material +settings defined within the .dag file. For instance, if the custom user +properties within the .dag file specify materialName:t="wood", but +this file specifies materialName:t="metal", the material used for the +destroyed parts will be metal. Always remember that this parameter +takes precedence over internal .dag settings.

    • +
    +

    Adjust the parameters as needed, e.g., particle effects, explosion scaling, +or material overrides.

    +
    +

    Important

    +

    By carefully adjusting these parameters, you can define how the vehicle +behaves during destruction events, including material properties, effects, +and thresholds for breaking apart.

    +
    +
  6. +
  7. Rebuild vfsroms using create_vfsroms.bat.

    +
    +

    See also

    +

    For more information, see +Resource Building.

    +
    +
    +

    Tip

    +

    If you encounter any errors or have questions regarding this document, please +reach out to the author directly at + a.vlasov@gaijin.team.

    +
    +
  8. +
+

Placing and Testing the Vehicle in a Level:

+
    +
  1. Open the level in the +daEditor: +<engine_root>/<project_name>/develop/levels/avg_proto/apex_test_scene/apex_test_scene.level.blk.

    +The level opened in daEditor +
  2. +
  3. Export the level to a binary format using the top menu. Save the level after +successful export.

    +The Export to Game (PC format) option in daEditor menu +
  4. +
  5. Download test mission: test_01_car.zip

  6. +
  7. Place it in: +<engine_root>/<project_name>/develop/gameBase/gameData/missions.

  8. +
  9. Open the Mission Editor, select the test mission, and start the game +The Play icon.

    +The Mission Editor panel +
  10. +
+
+

Note

+

During testing, it is likely that the console will display numerous errors +related to resource mismatches or insufficiently built resources. However, these +errors are not critical for the purpose of testing.

+The daEditor console output during testing +

In case of assert errors, initially try ignoring them by pressing the +Ignore button.

+
+

If everything is set up correctly, you should see a tank in the environment, +which can be used to collide with the test truck.

+
+

Tip

+

If the issues remain unresolved, please contact the author of this document at + a.vlasov@gaijin.team.

+
+
+
+

Fine-Tuning Deformation Parameters for a Vehicle Body

+

To achieve realistic vehicle deformation, specific parameters can be configured +in the vehicle body material in 3ds Max. These settings influence shaders and +allow precise control over deformation behavior. Below is a detailed list of +parameters and their purpose:

+
+

Shader Parameters

+
    +
  • diffuse_tex_scale=1: Controls the scale of the damage texture’s albedo. +Adjust based on the vehicle’s size.

  • +
  • normals_tex_scale=1: Similar to diffuse_tex_scale, this affects the +normal/metalness/smoothness texture scale.

  • +
  • diffuse_power=1: Determines the intensity of the albedo damage texture. +Default: 1.0.

  • +
  • normals_power=1: Controls the intensity of the normal/metalness/smoothness +damage texture. Default: 1.0.

  • +
  • max_height=1.2: A multiplier for maximum deformation height. Default baked +value is 1.0. Increase (e.g., 1.9) for larger deformations.

  • +
  • springback=0.05: Defines how much the metal bends back after deformation. +Higher values mean greater restoration.

  • +
  • expand_atten=0.5: Sets the range of deformation expansion, simulating +material characteristics.

  • +
  • expand_atten_pow=0.5: Adjusts the pressure curve during deformation, +affecting how the material bends under force.

  • +
  • noise_scale=1.0: Adds procedural deformation noise. Larger models require +smaller values for realism.

  • +
  • noise_power=1.3: Amplifies the procedural noise intensity for dynamic +deformations.

  • +
  • crumple_rnd=0.5: Randomizes the crumpling intensity, visible only during +dynamic interaction.

  • +
  • crumple_force=0.1: Determines the crumpling force during dynamic +interactions.

  • +
  • crumple_dist=0.5: Specifies the crumpling effect distance during collisions.

  • +
+
+
+

Testing Parameters In-Game

+

To test these parameters effectively:

+
    +
  1. Launch the game and simulate interaction (e.g., a tank driving over a truck).

  2. +
  3. Pause the game using P, then open the in-game editor with F2.

  4. +
  5. Navigate to the dynamic_deform menu:

    +The Dynamic Deform menu in game +
      +
    • Identify the coordinates (1) of the test vehicle body (2).

      +Identifying the coordinates and the test vehicle body in daEditor +
    • +
    • Input the coordinates into the deformation testing block to align the test +box with the vehicle.

      +Inputting the coordinates into the deformation testing block to align the test box with the vehicle +
    • +
    +
  6. +
  7. Adjust the test deformation box:

    +
      +
    • Enable checkboxes to visualize the deformation.

      +Enabling the Debug and Debug Draw checkboxes in DynamicDeform menu +
    • +
    • Use sliders to manipulate the deformation box and observe effects dynamically.

      +Using sliders to manipulate the deformation box +
    • +
    +
    +

    Tip

    +

    Always clear deformations after each test using the +The Clear All button +button to reset the vehicle for further iterations.

    +
    +
  8. +
+
+

Important

+

For the deformation box to function correctly, ensure it intersects with the +bounding box of the deformable object (indicated by a red highlight). +Misalignment may prevent parameter application.

+
+Ensuring the deformation box intersects with the bounding box of the deformable object +
+
+

Refining Parameters in 3ds Max

+

After determining the optimal settings:

+
    +
  1. Adjust parameters like max_height (e.g., 1.5) and noise_power (1.0) +in the material properties of the vehicle in 3ds Max.

    +Adjusting the Max Height and Noise Power parameters in Material Editor +
  2. +
  3. Re-export the model following the steps outlined earlier.

  4. +
  5. Test the updated model in the game and iterate as needed.

  6. +
+
+
+

Iterative Adjustments and Enhancements

+

Testing often reveals areas for refinement, such as missing components like +broken windshield glass. These elements can be added and fine-tuned in +subsequent iterations.

+
+

Shading and Coloring Adjustments

+

Vehicles may include random color tinting for variety. This is configured using +procedural settings within the +rendinst_simple shader.

+
+

See also

+

For more information, see +Procedural Rendinst Painting.

+
+

The parameters for use_painting and painting_line can be specified in the +same location as the shader dynamic_deformed parameters, as follows:

+Specifying the Use Painting and Painting Line parameters +

This ensures proper integration and behavior of the painting line within the +shader configuration.

+
+

Important

+

Ensure that static shader settings match their dynamic counterparts to avoid +inconsistencies.

+
+
+
+

Simulating Broken Glass

+

To add shattered glass:

+
    +
  1. Extract original glass models from the .dag file.

  2. +
  3. Use RayFire for fracturing:

    +
      +
    • Set fracture parameters to produce radial breakage patterns.

    • +
    • Remove overly small fragments to optimize simulation performance.

      +Using the RayFire plugin for 3ds Max for fracturing +
      +

      Tip

      +

      Keep the number of glass fragments below 100 to prevent excessive physics +calculations.

      +
      +Glass fragments in 3ds Max +
    • +
    +
  4. +
  5. For each fragment:

    +
      +
    • Separate front-facing triangles.

    • +
    • Adjust pivots to the center for accurate collision generation.

      +Separating front-facing triangles and adjusting pivots to the center for accurate collision generation in 3ds Max +
    • +
    +
  6. +
  7. Apply a slight Noise modifier for realism, then assign a dynamic shader +for glass fragments:

    +Applying the NoiseModifier in 3ds Max +
  8. +
  9. Change the rendinst_pbr_glass shader to dynamic_pbr_glass:

    +Changing the Rendinst Pbr Glass shader to Dynamic Pbr Glass shader in 3ds Max +
  10. +
  11. Assigned it to all available glass fragments, generate collisions with +Dagor 2 Damages Setup +Tool:

    +The Dagor 2 Damages Setup Tool option in Gaijin Tools menu in 3ds Max +Generating collisions with Dagor 2 Damages Setup Tool +

    As you can see, all bboxes have their own thickness.

    +
  12. +
+
+
+

Exporting the Final Model

+

After finalizing deformation and additional enhancements:

+
    +
  1. Save the model as m123_truck_destr.lod00.dag.

    +Saving the model +
  2. +
  3. Rebuild and test resources in the game using the steps outlined in earlier +sections.

  4. +
+
+
+
+

Final Testing

+

The completed scene should include deformation behavior and additional features +like broken glass. For adjustments, iterate on the 3ds Max scene and test +within the game environment until the desired results are achieved.

+

Download the final 3ds Max scene: +m123_truck_destr_deform_final.max

+
+
+
+

Example: Vehicle Destruction with a Large Tank

+

To begin, import the model from the archive: +zis_6_bz.zip

+

The primary challenge here is deforming the tank separately. During crushing, +the tank will not only compress vertically but also bulge horizontally. The +truck’s cab should also be separated into a distinct object. Before deformation, +the scene should look approximately as follows:

+Separating the tank and the cabin from truck body in 3ds Max +

When assessing the vehicle’s construction, note that elements like the fenders +are distinct from the cab, just like the doors, the tank, and the tank’s guard +rails. The key is to consider the varying rigidity of these parts. Consequently, +deform these as separate objects. The vehicle’s internal components should also +be split into segments based on the material’s rigidity. The image below +illustrates a color-coded example of this segmentation:

+Color-coded example of the segmentation in 3ds Max +

Next, as before, apply FDD modifiers to deform each object individually. +After initial rough deformation, the scene will look something like this:

+Applying FDD modifiers to deform each object individually in 3ds Max +

Deforming the tank is the most complex task, given its size. Here’s an example +of a partially deformed tank:

+The first example of a partially deformed tank on a real truck +The second example of a partially deformed tank on a real truck +The third example of a partially deformed tank on a real truck +

Following this initial deformation, fine-tune the shapes manually using Soft +Selection. The resulting deformed vehicle should preserve realistic creases +and folds. The tank necks are minimally deformed, while sharp edges exhibit +folds consistent with the model’s level of detail. The tank expands horizontally +under pressure from above, creating natural-looking radial folds around the +necks. The detailed appearance of the tank after refinement is shown below:

+Top view of the detailed appearance of the tank after refinement in 3ds Max +Front view of the detailed appearance of the tank after refinement in 3ds Max +Side view of the detailed appearance of the tank after refinement in 3ds Max +
+

Physics Adjustments Post-Testing

+
    +
  • (1) Wheels: Slightly tilted to naturally detach from the vehicle body and +roll away.

  • +
  • (2) Ejection Boxes: Added to prevent wheels from clipping through the tank +guard rails. These boxes push the wheels outward, creating more natural +movement.

  • +
  • (3) Rear Wheel: Designed to detach along with part of its assembly. +Additional collision boxes are added to replicate a round wheel’s behavior, +improving realism.

  • +
  • (4) Flat Tire: Includes a collision box to tilt the vehicle’s frame when +it falls. A single collision box is deliberately used here to amplify the +impact.

  • +
+Side view of model collision boxes in 3ds Max +Back view of model collision boxes in 3ds Max +
+
+

Note on Quality vs. Time Constraints

+

Balancing time and quality is crucial. While the tank could feature more +advanced details like ruptures or cracks, such improvements require significant +time investment. The chosen approach aims for an optimal balance of detail and +efficiency.

+

The scene with the modifier stack and detailed setup: +zis_6_bz_deform_modificators.zip

+

The final scene, fully prepared for export with refined collision settings and +other adjustments: +zis_6_bz_deform.max

+
+
+
+

Example: Vehicle Destruction with Extensive Plastic Components

+

This example demonstrates the destruction of a vehicle model that incorporates +significant plastic components, such as bumpers and panels. Plastic behaves +differently than metal, often bending, springing back, or detaching entirely +under stress. Here’s a step-by-step guide to prepare and simulate such +destruction.

+

Download the model: +arctic_tayga_patrul_551.zip

+
+

Initial Checks

+
    +
  1. Ensure proper scale:

    +
      +
    • Verify that the model has no negative scaling and that all scaling values +are 1.0.

      +
      +

      Warning

      +

      Ensuring the correct scale is critical for the pipeline. If this step is +skipped, everything may need to be redone from scratch later, so address it +upfront.

      +
      +
    • +
    +
  2. +
  3. Inspect model structure:

    +
      +
    • This particular model is relatively new, so it doesn’t have scaling issues. +However, older models may require adjustments.

    • +
    +
  4. +
+
+
+

Separation of Components

+
    +
  • Begin by separating glass and other rigid objects (e.g., detachable +plastic parts like panels, bumpers).

  • +
  • Objects such as the protective transparent visor often have intricate shapes. +After generating collisions, manually adjust their position and size for +accurate representation.

    +

    The goal is to achieve a realistic breakup of rigid parts that can detach +during collisions. Example result:

    +Example of a realistic breakup of rigid parts that can detach during collisions +
  • +
+
+
+

Export and Initial Testing

+
    +
  1. Assign appropriate materials to the separated components.

  2. +
  3. Export the current setup into the game without adding deformation to the main +body.

  4. +
  5. Evaluate the in-game appearance:

    +
      +
    • Rigid parts should separate cleanly during interactions.

    • +
    • Large gaps (e.g., from detached panels) should be filled or masked +appropriately.

    • +
    +
  6. +
+

Example result after initial export:

+Example result after initial export in Asset Viewer +

Intermediate stage of the scene with finished rigid objects and materials: +arctic_tayga_patrul_551_deform_Rigid_Body_done.max

+
+
+

Refining the Model

+
+

Adding Internal Structure

+

Plastic panels often cover empty spaces. To mask these gaps:

+
    +
  1. Duplicate the deformable panels and adjust their placement.

  2. +
  3. Use these duplicates to create an approximate internal frame:

    +
      +
    • Assign a dark texture from the existing material library to simulate depth.

    • +
    • Ensure the base structure is visually coherent when panels detach.

      +Making an approximate internal frame +
    • +
    +
  4. +
+
    +
  • Black Base (3): Separate the base along with the driver and passenger +seats as distinct entities.

  • +
  • Dashboard and Plastic Covering (2): Extract these into an individual +entity for separate handling.

  • +
  • Side Panels (1): These are essentially the vehicle’s fenders and should +also be separated into distinct entities. They will detach from the main body +during deformation, revealing the black base underneath.

  • +
+

As per standard practice, further separate parts that will deform independently +due to differences in metal or material rigidity. This ensures a realistic +deformation process tailored to the specific properties of each component.

+
+

Warning

+
    +
  1. Do not modify smoothing groups or normals during this stage. Adjustments +to these attributes will change vertex indexing, leading to errors during +deformation.

  2. +
  3. Keep the model as an Editable Mesh throughout. Avoid converting between +Edit Poly and Edit Mesh to preserve vertex consistency.

  4. +
+
+
+
+
+

Final Scene for Export

+

Once the internal structure and rigid body setup are complete:

+
    +
  1. Fine-tune materials and shaders for plastic and metal parts.

  2. +
  3. Test the model in the game environment to verify the detachment and +deformation behaviors.

  4. +
  5. Export the model as a finalized .max file: +arctic_tayga_patrul_551_deform.max

  6. +
+
+
+
+

Example: Vehicle Destruction with Canvas and Fabric Components

+

In this section, we’ll explore the process of preparing a vehicle with fabric +and canvas elements for dynamic deformation and destruction. The focus will be +on separating, refining, and deforming components such as wooden supports, metal +parts, and fabric material.

+

Download the base model: +renault_ahn.zip

+
+

Initial Checks

+
    +
  1. Inspect Transform Settings:

    +
      +
    • Check for negative scaling or non-uniform scaling values (e.g., not equal +to 1.0).

    • +
    • Incorrect transforms can cause inverted normals and other issues after +exporting to a dynamic model.

      +

      Example of incorrect scaling:

      +Example of incorrect scaling in 3ds Max +
    • +
    +
  2. +
  3. Correcting Transforms:

    +
      +
    • Attach the vehicle body to a temporary box object.

    • +
    • Detach the box and reposition the Pivot to the original position, +typically [0, 0, 0].

    • +
    +
    +

    Important

    +

    Ensure the scaling values are normalized before proceeding. Fixing these +issues after deformation and settings adjustments can be exceedingly +difficult.

    +
    +

    Example of correct transformation:

    +Example of correct transformation in 3ds Max +
  4. +
+
+
+

Preparing the Canvas and Wooden Supports

+
+

Wooden Components

+
    +
  1. Separate Wooden Elements:

    +
      +
    • Identify seatbacks, planks, and other wooden components.

    • +
    • Split them into smaller fragments using RayFire: use fracture settings +that mimic natural wood breakage.

      +Identifying seatbacks, planks, and other wooden model components +Splitting them into smaller fragments using RayFireplug in in 3ds Max +
    • +
    +
  2. +
  3. Fracturing Details:

    +
      +
    • Divide each plank into 2-3 pieces (to meet the 100-object limit per +.dag file).

    • +
    • Apply a Noise modifier to simulate splintered edges.

      +Dividing each plank into 2-3 pieces to meet the 100-object limit per .dag file in 3ds Max +
    • +
    +
  4. +
+
+
+

Metal Components

+

Attach Non-Deforming Metal Parts:

+
    +
  • Metal elements like seat mounts and corner brackets should remain rigid +(highlighted in red in the image below).

  • +
  • Merge these with the main body and assign them a metal material for proper +deformation behavior.

    +Metal model elements that should remain rigid are highlighted in red in 3ds Max +
  • +
+
+
+
+

Organizing the Deformable Objects

+

Divide the vehicle into logical deformation groups:

+
    +
  1. Side Panels (1): These should behave like hinged doors, bending and +opening during a collision.

  2. +
  3. Rear Mudguards (5): These have different densities and require separate +deformation behavior.

  4. +
  5. Fuel Tank (2): Sturdier than the body frame; must deform separately.

  6. +
  7. Wheel Discs (3): Should have independent deformation logic due to their +circular shape.

  8. +
  9. Front Fenders: Their rounded design requires unique deformation +parameters compared to the angular cabin structure.

  10. +
+Dividing the vehicle into logical deformation groups in 3ds Max +

Intermediate preparation stage of the model: +renault_ahn_a_deform_ready_to_deform.max

+
+
+

Initial Deformation with FFD

+

Apply Rough Deformations:

+
    +
  • Use an FFD modifier to simulate large-scale bending and crushing.

  • +
  • Test deformations at this stage to ensure logical breakage patterns.

  • +
+

Result after rough deformation:

+The right side view of result after rough deformation +The left side view of result after rough deformation +

The scene after rough deformation: +renault_ahn_a_deform_FFD_done.max

+
+
+

Detailed Deformation

+

Finalize Deformation Details:

+
    +
  • Add finer details using Noise modifiers and manual adjustments to +simulate realistic crushing and bending.

  • +
  • Ensure no overlapping geometry or unnatural stretching.

  • +
+

Final detailed deformation result:

+The side view of final detailed deformation result +The front view of final detailed deformation result +

The scene after detailed deformation: +renault_ahn_a_deform_all_deformation_done.max

+
+
+

Assigning Materials for the Canvas

+

To accurately simulate the canvas (tent), create a unique material with specific +deformation properties:

+

Separate the Canvas Material:

+
    +
  • Use a dark texture for initial testing.

  • +
  • Modify deformation parameters for the canvas:

    +
      +
    • Disable blending of deformation textures.

    • +
    • Increase recovery behavior to simulate fabric’s spring-back properties.

    • +
    +
  • +
+

Example of material setup for canvas:

+Example of material setup for canvas +
+
+

Final Testing and Export

+
    +
  1. In-Game Testing:

    +
      +
    • Verify deformation and recovery behaviors in the game.

    • +
    • Adjust shader parameters based on observed results.

    • +
    +
  2. +
  3. Export the Final Model:

    +
      +
    • After testing, export the complete setup for integration into the game.

    • +
    +
  4. +
+

Final scene: +renault_ahn_a_deform.max

+

By following these steps, you’ll achieve a destructible vehicle model with +realistic behavior for both rigid and flexible components, including proper +handling of wooden and fabric elements.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + \ No newline at end of file